diff --git a/data/plugins/combat/attack.rb b/data/plugins/combat/attack.rb index 530dece8..2f7b75d0 100644 --- a/data/plugins/combat/attack.rb +++ b/data/plugins/combat/attack.rb @@ -93,9 +93,9 @@ class AttackDSL ## # Deal melee damage. - def damage!(damage_modifier: 1, delay: 0) + def damage!(damage_modifier: 1, delay: 0, secondary: false) @subattacks.push lambda { |source, target| - do_damage! source, target, 1, delay + do_damage! source, target, 1, delay, secondary } end @@ -124,7 +124,7 @@ def do_damage!(source, target, amount, delay = 0, secondary = false, &_block) schedule delay do |task| task.stop && return if source.dead || target.dead - target_combat_state = get_combat_state target + target_combat_state = target.get_combat_state target_hitpoints = target.skill_set.get_skill(Skill::HITPOINTS).get_current_level amount = target_hitpoints if target_hitpoints < amount diff --git a/data/plugins/combat/combat.rb b/data/plugins/combat/combat.rb index ff2c946b..92c7559e 100644 --- a/data/plugins/combat/combat.rb +++ b/data/plugins/combat/combat.rb @@ -10,7 +10,7 @@ on :message, :npc_action do |player, message| # target.start_action CombatAction.new(target) # end - player_combat_state = get_combat_state player + player_combat_state = player.get_combat_state player_combat_state.target = target player.send HintIconMessage.for_npc(target.index) diff --git a/data/plugins/combat/combat_action.rb b/data/plugins/combat/combat_action.rb index f347ee4a..588bd7c7 100644 --- a/data/plugins/combat/combat_action.rb +++ b/data/plugins/combat/combat_action.rb @@ -7,7 +7,7 @@ class CombatAction < Action mob.attacking = true - @combat_state = get_combat_state(source) + @combat_state = source.get_combat_state @attack_timer = 100 @once = once end diff --git a/data/plugins/combat/combat_state.rb b/data/plugins/combat/combat_state.rb index 3e20608a..16f6edeb 100644 --- a/data/plugins/combat/combat_state.rb +++ b/data/plugins/combat/combat_state.rb @@ -1,13 +1,17 @@ -def get_combat_state(mob) - mob.is_a?(Player) ? type = :player : type = :npc +java_import 'org.apollo.game.model.entity.Mob' - unless MOB_COMBAT_STATE_CACHE[type].key? mob.index - MOB_COMBAT_STATE_CACHE[type][mob.index] = CombatState.new(mob) +module MobCombatState + def get_combat_state + if @combat_state.nil? + @combat_state = CombatState.new(self, true) + end + + @combat_state end - - MOB_COMBAT_STATE_CACHE[type][mob.index] end +Mob.include MobCombatState + private class CombatState @@ -58,12 +62,3 @@ class CombatState end end end - -MOB_COMBAT_STATE_CACHE = { - player: {}, - npc: {} -} - -on :logout do |event| - MOB_COMBAT_STATE_CACHE[:player].delete event.player.index -end diff --git a/data/plugins/combat/weapons/melee/daggers.rb b/data/plugins/combat/weapons/melee/daggers.rb index dc315b6c..b8d531cc 100644 --- a/data/plugins/combat/weapons/melee/daggers.rb +++ b/data/plugins/combat/weapons/melee/daggers.rb @@ -31,7 +31,7 @@ end create_weapon /(?:drag|dragon) dagger.*/, :dragon_dagger do set_special_attack speed: 4, energy_requirement: 25, animation: 1062, graphic: { id: 252, height: 100 } do - damage! delay: 0 - damage! delay: 1 + damage! + damage! secondary: true end end