{"action":"closed","number":241,"pull_request":{"url":"https://api.github.com/repos/psforever/PSF-LoginServer/pulls/241","id":236725406,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM2NzI1NDA2","html_url":"https://github.com/psforever/PSF-LoginServer/pull/241","diff_url":"https://github.com/psforever/PSF-LoginServer/pull/241.diff","patch_url":"https://github.com/psforever/PSF-LoginServer/pull/241.patch","issue_url":"https://api.github.com/repos/psforever/PSF-LoginServer/issues/241","number":241,"state":"closed","locked":false,"title":"Proximity Terminal Fix","user":{"login":"Fate-JH","id":16406615,"node_id":"MDQ6VXNlcjE2NDA2NjE1","avatar_url":"https://avatars2.githubusercontent.com/u/16406615?v=4","gravatar_id":"","url":"https://api.github.com/users/Fate-JH","html_url":"https://github.com/Fate-JH","followers_url":"https://api.github.com/users/Fate-JH/followers","following_url":"https://api.github.com/users/Fate-JH/following{/other_user}","gists_url":"https://api.github.com/users/Fate-JH/gists{/gist_id}","starred_url":"https://api.github.com/users/Fate-JH/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Fate-JH/subscriptions","organizations_url":"https://api.github.com/users/Fate-JH/orgs","repos_url":"https://api.github.com/users/Fate-JH/repos","events_url":"https://api.github.com/users/Fate-JH/events{/privacy}","received_events_url":"https://api.github.com/users/Fate-JH/received_events","type":"User","site_admin":false},"body":"Now with not-breaking-the-server action!\r\n\r\nThe original proximity terminal concept suffered from three major problems.  The first was that it operated on `WSA`-specific timers that require careful construction and deconstruction on top of each terminal's own internal machinery.  Obviously, it wasn't handled with enough care.  The second problem is that the terminal's timer situation was always operating on a \"renew\" scheduling that required receiving `ProximityTerminalUseMessage` packets to keep the system going, else it ended at a fixed delay.  Expecting this much consistency from the network while expecting both external and internal messages was too much.  The third problem was a curious issue where, through empathy, all `WSA` representing clients connected to a zone's event bus eventually upgraded to act like they were using a given proximity terminal if one player was using that proximity terminal, even though the other players did not get its curative effects,  The constant fluctuations of timers and events caused by a player trying to flutter the terminal's effects (let alone stop using the terminal normally) resulted in massive network congestion from clients struggling to figure out whether they should use the terminal or not.\r\n\r\nThe new model uses a callback system and has internal machinery only within itself.  Internally, a respective terminal tests whether a target is close enough to feel the effects of the terminal, and will determine if the target is still in a valid state where it would need the terminal's effects.  If either of these conditions fails, the terminal ends its affiliation on the user on its own.  The system synchronizes with `WSA` for player targets (like with `medical_terminal`) or with the `VehicleService` service (`such as with repair_silo`) as those are where the damage dealing code for the given target - players or vehicles - is synchronized.  This is far more organized than the previous system.\r\n\r\nTo cut to the chase, though: medical terminals, repair/rearm silos, landing pads, and Lodestar proximity repair.  Go play test.\r\n\r\n**`MedicalTerminalDefinition`**:\r\nThe class has been completely reworked and serves as the basis for proximity terminals, for now, since all terminals currently in operation offering healing effects.\r\n\r\n**`ZoneAware`**:\r\nA harsh compromise on my behalf where I realized that I needed to know in which zone the Lodestar was located to dispatch events to it properly.  The class either doesn't have enough use yet or has too little use over-all and should be reconsidered.  For now, it does what it needs to do.\r\n\r\n**`UtilityWorldEntity`**:\r\nInternal offset positioning for utilities.  Mostly useless to us, probably, save for the Lodestar.\r\n\r\n**`Vector3`**:\r\nMathematic vector rotation code has been added.  The function `closeToInsignificance` is me throwing my hands up in the air over `Float` calculations.  I'm satisfied with the result; but, it was still a \"throw arms in air\" moment.\r\n\r\n**`CommonMessages.Use`** and **`CommonMessages.Unuse`**:\r\nAn optional data portion was added to the messages.\r\n\r\nCaveats:\r\n- The distance calulations are tricky.  A certain range exists where the client will detect being close enough to attempt the terminal; but, the server judges the terminal too far away from the target and stops the action.  This is because the client is aware of the proportions of the target's model, while the server is only aware of the target's center point.  There is no solution for this at the moment and the overhead to be incurred by this situation is not known.  For most terminals, no effect will actually be witnessed.  For the repair silos, however, they will open and close repreatedly like claws grasping for one's damaged vehicle.\r\n- Only the previously-established proximity terminals on `z6` (Ceryshen) and `home3` (VS Sanctuary) have been properly updated to working status.  Any terminal that isn't in working order right now is in such a state probably because the location of the terminal is set to the world origin and it's impossible to move into the server-recognized activation radius.\r\n- That said, proximity terminals now need their world coordinates defined to work properly.  The old coordinate-less syntax is there just so that the code doesn't break.  It should, however, be considered deprecated.\r\n- Various equipment terminals have been updated to use the new style order terminal syntax.  In the case of the repair silos and landing pads, their definition classes have been split up into a dedicated repair terminal and a dedicated rearm terminal.  `RepairRearmSiloDefinition` is now a defunct class and has been removed from the project.\r\n- The delay to reset terminal order acceptance has been moved to the end of each `case` rather than the whole `match` statement.  Why?  who knows.\r\n\r\nAddenda:\r\n- While working on the code for positioning the invisible lodestar repair terminals, I sought a means of visualizing where they were located and thus produced a \"marker\" system that rendered `AmmoBox` objects where they were centered.  The `AmmoBox` objects would update position as the Lodestar moved and turned.  The code is no longer part of the PR but the concept might be useful for other things in the future.  All it costs is a GUID and some network load per marker.\r\n- Facility wall turrets are actually kinda OP.  lol","created_at":"2018-12-07T01:15:19Z","updated_at":"2018-12-24T02:09:13Z","closed_at":"2018-12-24T02:09:13Z","merged_at":"2018-12-24T02:09:13Z","merge_commit_sha":"961ae1b93b8a614c0f11a546dd40e399dc5e8752","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":321926550,"node_id":"MDU6TGFiZWwzMjE5MjY1NTA=","url":"https://api.github.com/repos/psforever/PSF-LoginServer/labels/enhancement","name":"enhancement","color":"84b6eb","default":true},{"id":365462071,"node_id":"MDU6TGFiZWwzNjU0NjIwNzE=","url":"https://api.github.com/repos/psforever/PSF-LoginServer/labels/refactor","name":"refactor","color":"5319e7","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/psforever/PSF-LoginServer/pulls/241/commits","review_comments_url":"https://api.github.com/repos/psforever/PSF-LoginServer/pulls/241/comments","review_comment_url":"https://api.github.com/repos/psforever/PSF-LoginServer/pulls/comments{/number}","comments_url":"https://api.github.com/repos/psforever/PSF-LoginServer/issues/241/comments","statuses_url":"https://api.github.com/repos/psforever/PSF-LoginServer/statuses/fed45770761e69a4de868e97d6f6b4d2744910b6","head":{"label":"Fate-JH:prox-term","ref":"prox-term","sha":"fed45770761e69a4de868e97d6f6b4d2744910b6","user":{"login":"Fate-JH","id":16406615,"node_id":"MDQ6VXNlcjE2NDA2NjE1","avatar_url":"https://avatars2.githubusercontent.com/u/16406615?v=4","gravatar_id":"","url":"https://api.github.com/users/Fate-JH","html_url":"https://github.com/Fate-JH","followers_url":"https://api.github.com/users/Fate-JH/followers","following_url":"https://api.github.com/users/Fate-JH/following{/other_user}","gists_url":"https://api.github.com/users/Fate-JH/gists{/gist_id}","starred_url":"https://api.github.com/users/Fate-JH/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Fate-JH/subscriptions","organizations_url":"https://api.github.com/users/Fate-JH/orgs","repos_url":"https://api.github.com/users/Fate-JH/repos","events_url":"https://api.github.com/users/Fate-JH/events{/privacy}","received_events_url":"https://api.github.com/users/Fate-JH/received_events","type":"User","site_admin":false},"repo":{"id":64518578,"node_id":"MDEwOlJlcG9zaXRvcnk2NDUxODU3OA==","name":"PSF-LoginServer","full_name":"Fate-JH/PSF-LoginServer","private":false,"owner":{"login":"Fate-JH","id":16406615,"node_id":"MDQ6VXNlcjE2NDA2NjE1","avatar_url":"https://avatars2.githubusercontent.com/u/16406615?v=4","gravatar_id":"","url":"https://api.github.com/users/Fate-JH","html_url":"https://github.com/Fate-JH","followers_url":"https://api.github.com/users/Fate-JH/followers","following_url":"https://api.github.com/users/Fate-JH/following{/other_user}","gists_url":"https://api.github.com/users/Fate-JH/gists{/gist_id}","starred_url":"https://api.github.com/users/Fate-JH/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Fate-JH/subscriptions","organizations_url":"https://api.github.com/users/Fate-JH/orgs","repos_url":"https://api.github.com/users/Fate-JH/repos","events_url":"https://api.github.com/users/Fate-JH/events{/privacy}","received_events_url":"https://api.github.com/users/Fate-JH/received_events","type":"User","site_admin":false},"html_url":"https://github.com/Fate-JH/PSF-LoginServer","description":"Emulated PlanetSide 1 login server for the PSForever project.","fork":true,"url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer","forks_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/forks","keys_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/teams","hooks_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/hooks","issue_events_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/issues/events{/number}","events_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/events","assignees_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/assignees{/user}","branches_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/branches{/branch}","tags_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/tags","blobs_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/git/refs{/sha}","trees_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/statuses/{sha}","languages_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/languages","stargazers_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/stargazers","contributors_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/contributors","subscribers_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/subscribers","subscription_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/subscription","commits_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/commits{/sha}","git_commits_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/git/commits{/sha}","comments_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/comments{/number}","issue_comment_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/issues/comments{/number}","contents_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/contents/{+path}","compare_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/merges","archive_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/downloads","issues_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/issues{/number}","pulls_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/pulls{/number}","milestones_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/milestones{/number}","notifications_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/labels{/name}","releases_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/releases{/id}","deployments_url":"https://api.github.com/repos/Fate-JH/PSF-LoginServer/deployments","created_at":"2016-07-30T00:51:22Z","updated_at":"2018-12-05T06:18:07Z","pushed_at":"2018-12-24T02:07:20Z","git_url":"git://github.com/Fate-JH/PSF-LoginServer.git","ssh_url":"git@github.com:Fate-JH/PSF-LoginServer.git","clone_url":"https://github.com/Fate-JH/PSF-LoginServer.git","svn_url":"https://github.com/Fate-JH/PSF-LoginServer","homepage":"http://psforever.net","size":3118,"stargazers_count":1,"watchers_count":1,"language":"Scala","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"psforever:master","ref":"master","sha":"c4c860923862a713d1d8d181e5336ce5e45245f7","user":{"login":"psforever","id":14133346,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MTMzMzQ2","avatar_url":"https://avatars2.githubusercontent.com/u/14133346?v=4","gravatar_id":"","url":"https://api.github.com/users/psforever","html_url":"https://github.com/psforever","followers_url":"https://api.github.com/users/psforever/followers","following_url":"https://api.github.com/users/psforever/following{/other_user}","gists_url":"https://api.github.com/users/psforever/gists{/gist_id}","starred_url":"https://api.github.com/users/psforever/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/psforever/subscriptions","organizations_url":"https://api.github.com/users/psforever/orgs","repos_url":"https://api.github.com/users/psforever/repos","events_url":"https://api.github.com/users/psforever/events{/privacy}","received_events_url":"https://api.github.com/users/psforever/received_events","type":"Organization","site_admin":false},"repo":{"id":51134955,"node_id":"MDEwOlJlcG9zaXRvcnk1MTEzNDk1NQ==","name":"PSF-LoginServer","full_name":"psforever/PSF-LoginServer","private":false,"owner":{"login":"psforever","id":14133346,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MTMzMzQ2","avatar_url":"https://avatars2.githubusercontent.com/u/14133346?v=4","gravatar_id":"","url":"https://api.github.com/users/psforever","html_url":"https://github.com/psforever","followers_url":"https://api.github.com/users/psforever/followers","following_url":"https://api.github.com/users/psforever/following{/other_user}","gists_url":"https://api.github.com/users/psforever/gists{/gist_id}","starred_url":"https://api.github.com/users/psforever/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/psforever/subscriptions","organizations_url":"https://api.github.com/users/psforever/orgs","repos_url":"https://api.github.com/users/psforever/repos","events_url":"https://api.github.com/users/psforever/events{/privacy}","received_events_url":"https://api.github.com/users/psforever/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/psforever/PSF-LoginServer","description":"Emulated PlanetSide 1 login server for the PSForever project.","fork":false,"url":"https://api.github.com/repos/psforever/PSF-LoginServer","forks_url":"https://api.github.com/repos/psforever/PSF-LoginServer/forks","keys_url":"https://api.github.com/repos/psforever/PSF-LoginServer/keys{/key_id}","collaborators_url":"https://api.github.com/repos/psforever/PSF-LoginServer/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/psforever/PSF-LoginServer/teams","hooks_url":"https://api.github.com/repos/psforever/PSF-LoginServer/hooks","issue_events_url":"https://api.github.com/repos/psforever/PSF-LoginServer/issues/events{/number}","events_url":"https://api.github.com/repos/psforever/PSF-LoginServer/events","assignees_url":"https://api.github.com/repos/psforever/PSF-LoginServer/assignees{/user}","branches_url":"https://api.github.com/repos/psforever/PSF-LoginServer/branches{/branch}","tags_url":"https://api.github.com/repos/psforever/PSF-LoginServer/tags","blobs_url":"https://api.github.com/repos/psforever/PSF-LoginServer/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/psforever/PSF-LoginServer/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/psforever/PSF-LoginServer/git/refs{/sha}","trees_url":"https://api.github.com/repos/psforever/PSF-LoginServer/git/trees{/sha}","statuses_url":"https://api.github.com/repos/psforever/PSF-LoginServer/statuses/{sha}","languages_url":"https://api.github.com/repos/psforever/PSF-LoginServer/languages","stargazers_url":"https://api.github.com/repos/psforever/PSF-LoginServer/stargazers","contributors_url":"https://api.github.com/repos/psforever/PSF-LoginServer/contributors","subscribers_url":"https://api.github.com/repos/psforever/PSF-LoginServer/subscribers","subscription_url":"https://api.github.com/repos/psforever/PSF-LoginServer/subscription","commits_url":"https://api.github.com/repos/psforever/PSF-LoginServer/commits{/sha}","git_commits_url":"https://api.github.com/repos/psforever/PSF-LoginServer/git/commits{/sha}","comments_url":"https://api.github.com/repos/psforever/PSF-LoginServer/comments{/number}","issue_comment_url":"https://api.github.com/repos/psforever/PSF-LoginServer/issues/comments{/number}","contents_url":"https://api.github.com/repos/psforever/PSF-LoginServer/contents/{+path}","compare_url":"https://api.github.com/repos/psforever/PSF-LoginServer/compare/{base}...{head}","merges_url":"https://api.github.com/repos/psforever/PSF-LoginServer/merges","archive_url":"https://api.github.com/repos/psforever/PSF-LoginServer/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/psforever/PSF-LoginServer/downloads","issues_url":"https://api.github.com/repos/psforever/PSF-LoginServer/issues{/number}","pulls_url":"https://api.github.com/repos/psforever/PSF-LoginServer/pulls{/number}","milestones_url":"https://api.github.com/repos/psforever/PSF-LoginServer/milestones{/number}","notifications_url":"https://api.github.com/repos/psforever/PSF-LoginServer/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/psforever/PSF-LoginServer/labels{/name}","releases_url":"https://api.github.com/repos/psforever/PSF-LoginServer/releases{/id}","deployments_url":"https://api.github.com/repos/psforever/PSF-LoginServer/deployments","created_at":"2016-02-05T08:27:24Z","updated_at":"2018-12-08T10:33:43Z","pushed_at":"2018-12-24T02:09:13Z","git_url":"git://github.com/psforever/PSF-LoginServer.git","ssh_url":"git@github.com:psforever/PSF-LoginServer.git","clone_url":"https://github.com/psforever/PSF-LoginServer.git","svn_url":"https://github.com/psforever/PSF-LoginServer","homepage":"http://psforever.net","size":3026,"stargazers_count":27,"watchers_count":27,"language":"Scala","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":24,"mirror_url":null,"archived":false,"open_issues_count":12,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":24,"open_issues":12,"watchers":27,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/psforever/PSF-LoginServer/pulls/241"},"html":{"href":"https://github.com/psforever/PSF-LoginServer/pull/241"},"issue":{"href":"https://api.github.com/repos/psforever/PSF-LoginServer/issues/241"},"comments":{"href":"https://api.github.com/repos/psforever/PSF-LoginServer/issues/241/comments"},"review_comments":{"href":"https://api.github.com/repos/psforever/PSF-LoginServer/pulls/241/comments"},"review_comment":{"href":"https://api.github.com/repos/psforever/PSF-LoginServer/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/psforever/PSF-LoginServer/pulls/241/commits"},"statuses":{"href":"https://api.github.com/repos/psforever/PSF-LoginServer/statuses/fed45770761e69a4de868e97d6f6b4d2744910b6"}},"author_association":"CONTRIBUTOR","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"Fate-JH","id":16406615,"node_id":"MDQ6VXNlcjE2NDA2NjE1","avatar_url":"https://avatars2.githubusercontent.com/u/16406615?v=4","gravatar_id":"","url":"https://api.github.com/users/Fate-JH","html_url":"https://github.com/Fate-JH","followers_url":"https://api.github.com/users/Fate-JH/followers","following_url":"https://api.github.com/users/Fate-JH/following{/other_user}","gists_url":"https://api.github.com/users/Fate-JH/gists{/gist_id}","starred_url":"https://api.github.com/users/Fate-JH/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Fate-JH/subscriptions","organizations_url":"https://api.github.com/users/Fate-JH/orgs","repos_url":"https://api.github.com/users/Fate-JH/repos","events_url":"https://api.github.com/users/Fate-JH/events{/privacy}","received_events_url":"https://api.github.com/users/Fate-JH/received_events","type":"User","site_admin":false},"comments":1,"review_comments":0,"maintainer_can_modify":false,"commits":11,"additions":1319,"deletions":887,"changed_files":30}}
{"actor":{"display_login":"Fate-JH"}}