* Clean up the CombatAction and Attack code to make it easier to use for
range.
* Add collision detection to the distance checks before attacking in the
CombatAction.
* Create a Ruby DSL for defining projectile types and fix the
ProjectileUpdateOperation so it uses the correct position offset.
* Fix the packet structure of the HintIconMessageEncoder.
* Moves the decision of what attack is used next to CombatState and
defers selecting the attack until the player is actually ready to hit
their target for damage.
* Adds a distance check so combat is only initiated within the correct
range. If the player isn't close enough to their target, they will run
towards it and check every tick if they're close enough to make an
attack.
* Allows switching between different combat styles, and updates the
combat tabs styles for every equipped weapon. If a weapon with a
special attack is equipped, the special bar for that interface will be
shown.
* Adds a scheduled task which periodically restores special energy to
the player and updates their special bar.
* Adds a button property to a WeaponClasses styles, which maps a combat
style to the button that was pressed in the combat tab.
* Adds full support for special attacks, with their config IDs and
buttons.
* Adds the DDS special attack, along with the D2H special attack as some
starting examples.
* Rename the "no_weapon" Weapon to "unarmed", so it shows up better in
the UI.
* Uses a hierarchy of WeaponClasses -> Weapons for performing attacks,
with WeaponClass having a set of styles and associated Attacks for
those styles. Weapons and their classes are built with an easy to use
and clean DSL.
* Adds a BonusContainer mixin, so that Equipment, Weapons, and
WeaponClasses can all have their own set of bonuses which apply to the
player.
* Allows attacks to be queued to the Mobs CombatState instance from
external code, allowing e.g., NPCs or auto-cast to queue attacks to be
executed.
Amongst other things, this:
* Stops the player from trying to leave the Runescape Guide's house if
they have yet to speak to him.
* Fixes the hint icon for both the Runescape Guide and the door.
* Ensures all files pass rubocop.
* Generally improves the code throughout the plugin.