The overlay was storing the previous frames tooltip width and height in
the overlay bounds, to use for the next frame to position the overlay
correctly so that it did not get pushed off canvas.
This requires the tooltip overlay to have a non-empty bounds, which is
not something dynamic/tooltip overlays usually support. The overlay
renderer translates the g2d to the given bounds prior to rendering.
The reason this worked was it always kept x/y=0, causing the translation
to not happen.
However this incorrectly caused the overlay to be picked when testing
overlay bounds against the mouse position when up near the corner of the
screen. This would then cause the player to pick the tooltip overlay,
despite the overlay not being rendered there.
These NPCs transform to a new form in their "dying" phase, thus have
`isDead()` reset to false, despite actually dying. This commit overrides
those particular forms to be considered dead.
This fixes an issue where the xp drop recoloring would incorrectly
recolor the xpdrop if the prayer was flicked on client side in between
when the server tick happens and when the xp drop is created
This switches party and member ids to also be 64bit ints. This uses
considerably less data and cpu due to being able to use binary websocket
frames, and the server can avoid json deserialization completely.
Also hold member ids instead of party member references in the party
plugin, since the members can be reset if connection is lost, causing it
hold refs to old party members.
Encode location update points into a single int, since the updates are
so frequent.
If the server expires the membership before the client in the party
reconnects, it will falsely assume it is in a party when it isn't.
Additionally since users are resynced on reconnect, this was duplicating
members as it would get joins for already joined members.