diff --git a/Server/src/main/content/global/handlers/item/equipment/special/ChinchompaSwingHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/ChinchompaSwingHandler.java index 246fb6297..73b034e06 100644 --- a/Server/src/main/content/global/handlers/item/equipment/special/ChinchompaSwingHandler.java +++ b/Server/src/main/content/global/handlers/item/equipment/special/ChinchompaSwingHandler.java @@ -13,7 +13,7 @@ import core.tools.RandomFunction; import java.util.List; -import static core.game.node.entity.combat.MultihitTargetsKt.findMultihitTargets; +import static core.game.node.entity.combat.MultihitTargetsKt.findMultihitTargetsForChinchompa; /** * Handles a combat swing using red chinchompas. @@ -56,7 +56,7 @@ public final class ChinchompaSwingHandler extends RangeSwingHandler { } boolean accurate = isAccurateImpact(entity, victim, CombatStyle.RANGE); - List targetCandidates = findMultihitTargets(victim.getLocation(), entity, victim, CombatStyle.RANGE); + List targetCandidates = findMultihitTargetsForChinchompa(victim.getLocation(), entity, victim); BattleState[] targets = new BattleState[targetCandidates.size()]; int count = 0; for (Entity e : targetCandidates) { diff --git a/Server/src/main/content/global/handlers/item/equipment/special/PowerstabSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/PowerstabSpecialHandler.java index 678bc6ef6..74f18dca1 100644 --- a/Server/src/main/content/global/handlers/item/equipment/special/PowerstabSpecialHandler.java +++ b/Server/src/main/content/global/handlers/item/equipment/special/PowerstabSpecialHandler.java @@ -5,12 +5,9 @@ import java.util.List; import core.game.node.entity.Entity; import core.game.node.entity.combat.BattleState; import core.game.node.entity.combat.CombatStyle; -import core.game.node.entity.combat.InteractionType; import core.game.node.entity.combat.MeleeSwingHandler; import core.game.node.entity.impl.Animator.Priority; -import core.game.node.entity.npc.NPC; import core.game.node.entity.player.Player; -import core.game.world.map.RegionManager; import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Graphics; import core.plugin.Plugin; @@ -76,7 +73,7 @@ public final class PowerstabSpecialHandler extends MeleeSwingHandler implements if (!multi) { return super.swing(entity, victim, state); } - List list = findMultihitTargets(entity.getLocation(), entity, victim, CombatStyle.MELEE); + List list = findMultihitTargets(entity.getLocation(), entity, CombatStyle.MELEE); BattleState[] targets = new BattleState[list.size()]; int count = 0; for (Entity e : list) { diff --git a/Server/src/main/content/global/handlers/item/equipment/special/SpearWallSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/SpearWallSpecialHandler.java index 9e5b4227c..3abb1e50f 100644 --- a/Server/src/main/content/global/handlers/item/equipment/special/SpearWallSpecialHandler.java +++ b/Server/src/main/content/global/handlers/item/equipment/special/SpearWallSpecialHandler.java @@ -5,12 +5,9 @@ import java.util.List; import core.game.node.entity.Entity; import core.game.node.entity.combat.BattleState; import core.game.node.entity.combat.CombatStyle; -import core.game.node.entity.combat.InteractionType; import core.game.node.entity.combat.MeleeSwingHandler; import core.game.node.entity.impl.Animator.Priority; -import core.game.node.entity.npc.NPC; import core.game.node.entity.player.Player; -import core.game.world.map.RegionManager; import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Graphics; import core.plugin.Plugin; @@ -77,7 +74,7 @@ public final class SpearWallSpecialHandler extends MeleeSwingHandler implements if (!multi) { return super.swing(entity, victim, state); } - List list = findMultihitTargets(entity.getLocation(), entity, victim, CombatStyle.MELEE); + List list = findMultihitTargets(entity.getLocation(), entity, CombatStyle.MELEE); BattleState[] targets = new BattleState[list.size()]; int count = 0; for (Entity e : list) { diff --git a/Server/src/main/content/global/handlers/item/equipment/special/SweepSpecialHandler.java b/Server/src/main/content/global/handlers/item/equipment/special/SweepSpecialHandler.java index 94c11cca6..3c9217d8f 100644 --- a/Server/src/main/content/global/handlers/item/equipment/special/SweepSpecialHandler.java +++ b/Server/src/main/content/global/handlers/item/equipment/special/SweepSpecialHandler.java @@ -2,21 +2,16 @@ package content.global.handlers.item.equipment.special; import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; -import core.game.world.repository.Repository; import core.plugin.Initializable; -import content.global.skill.summoning.familiar.Familiar; import core.game.node.entity.Entity; import core.game.node.entity.combat.BattleState; import core.game.node.entity.combat.CombatStyle; import core.game.node.entity.combat.MeleeSwingHandler; import core.game.node.entity.impl.Animator.Priority; -import core.game.node.entity.npc.NPC; import core.game.node.entity.player.Player; import core.game.world.map.Direction; import core.game.world.map.Location; -import core.game.world.map.RegionManager; import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Graphics; import core.plugin.Plugin; @@ -101,7 +96,7 @@ public final class SweepSpecialHandler extends MeleeSwingHandler implements Plug Direction dir = Direction.getDirection(x - entity.getLocation().getX(), y - entity.getLocation().getY()); List l = new ArrayList<>(20); l.add(new BattleState(entity, victim)); - List list = findMultihitTargets(vl, entity, victim, null); + List list = findMultihitTargets(vl, entity, null); for (Entity n : list) { if (n == victim) { continue; diff --git a/Server/src/main/content/global/skill/magic/ancient/BloodSpells.java b/Server/src/main/content/global/skill/magic/ancient/BloodSpells.java index c9ebbff9e..44280fe75 100644 --- a/Server/src/main/content/global/skill/magic/ancient/BloodSpells.java +++ b/Server/src/main/content/global/skill/magic/ancient/BloodSpells.java @@ -121,7 +121,7 @@ public final class BloodSpells extends CombatSpell { return super.getTargets(entity, target); } - List list = MultihitTargetsKt.findMultihitTargets(target.getLocation(), entity, target, CombatStyle.MAGIC); + List list = MultihitTargetsKt.findMultihitTargets(target.getLocation(), entity, CombatStyle.MAGIC); BattleState[] targets = new BattleState[list.size()]; int index = 0; for (Entity e : list) { diff --git a/Server/src/main/content/global/skill/magic/ancient/IceSpells.java b/Server/src/main/content/global/skill/magic/ancient/IceSpells.java index e2afb1488..d854979e4 100644 --- a/Server/src/main/content/global/skill/magic/ancient/IceSpells.java +++ b/Server/src/main/content/global/skill/magic/ancient/IceSpells.java @@ -146,7 +146,7 @@ public final class IceSpells extends CombatSpell { return super.getTargets(entity, target); } - List list = MultihitTargetsKt.findMultihitTargets(target.getLocation(), entity, target, CombatStyle.MAGIC); + List list = MultihitTargetsKt.findMultihitTargets(target.getLocation(), entity, CombatStyle.MAGIC); BattleState[] targets = new BattleState[list.size()]; int index = 0; for (Entity e : list) { diff --git a/Server/src/main/content/global/skill/magic/ancient/MiasmicSpells.java b/Server/src/main/content/global/skill/magic/ancient/MiasmicSpells.java index 101c21943..6cdfe11c7 100644 --- a/Server/src/main/content/global/skill/magic/ancient/MiasmicSpells.java +++ b/Server/src/main/content/global/skill/magic/ancient/MiasmicSpells.java @@ -160,7 +160,7 @@ public final class MiasmicSpells extends CombatSpell { return super.getTargets(entity, target); } - List list = MultihitTargetsKt.findMultihitTargets(target.getLocation(), entity, target, CombatStyle.MAGIC); + List list = MultihitTargetsKt.findMultihitTargets(target.getLocation(), entity, CombatStyle.MAGIC); BattleState[] targets = new BattleState[list.size()]; int index = 0; for (Entity e : list) { diff --git a/Server/src/main/content/global/skill/magic/ancient/ShadowSpells.java b/Server/src/main/content/global/skill/magic/ancient/ShadowSpells.java index f50d3206a..c8d390dba 100644 --- a/Server/src/main/content/global/skill/magic/ancient/ShadowSpells.java +++ b/Server/src/main/content/global/skill/magic/ancient/ShadowSpells.java @@ -117,7 +117,7 @@ public final class ShadowSpells extends CombatSpell { return super.getTargets(entity, target); } - List list = MultihitTargetsKt.findMultihitTargets(target.getLocation(), entity, target, CombatStyle.MAGIC); + List list = MultihitTargetsKt.findMultihitTargets(target.getLocation(), entity, CombatStyle.MAGIC); BattleState[] targets = new BattleState[list.size()]; int index = 0; for (Entity e : list) { diff --git a/Server/src/main/content/global/skill/magic/ancient/SmokeSpells.java b/Server/src/main/content/global/skill/magic/ancient/SmokeSpells.java index 4c238df56..187f7249c 100644 --- a/Server/src/main/content/global/skill/magic/ancient/SmokeSpells.java +++ b/Server/src/main/content/global/skill/magic/ancient/SmokeSpells.java @@ -125,7 +125,7 @@ public final class SmokeSpells extends CombatSpell { return super.getTargets(entity, target); } - List list = MultihitTargetsKt.findMultihitTargets(target.getLocation(), entity, target, CombatStyle.MAGIC); + List list = MultihitTargetsKt.findMultihitTargets(target.getLocation(), entity, CombatStyle.MAGIC); BattleState[] targets = new BattleState[list.size()]; int index = 0; for (Entity e : list) { diff --git a/Server/src/main/core/game/node/entity/combat/MultihitTargets.kt b/Server/src/main/core/game/node/entity/combat/MultihitTargets.kt index 478d58026..1150743a4 100644 --- a/Server/src/main/core/game/node/entity/combat/MultihitTargets.kt +++ b/Server/src/main/core/game/node/entity/combat/MultihitTargets.kt @@ -8,7 +8,7 @@ import core.game.world.map.Location import core.game.world.map.RegionManager.getLocalEntities import core.game.world.map.zone.impl.WildernessZone -fun isAttackable(victim: Entity, attacker: Entity, combatStyle: CombatStyle?, wilderness: Boolean): Boolean { +private fun isAttackable(victim: Entity, attacker: Entity, combatStyle: CombatStyle?, wilderness: Boolean): Boolean { if (combatStyle == null) { return true } @@ -18,8 +18,13 @@ fun isAttackable(victim: Entity, attacker: Entity, combatStyle: CombatStyle?, wi return victim.isAttackable(attacker, combatStyle, false) } -fun findMultihitTargets(center: Location, attacker: Entity, victim: Entity, combatStyle: CombatStyle?): List { - val targetCandidates = getLocalEntities(center, 1).filter { it != attacker && isAttackable(it, attacker, combatStyle, false) } +fun findMultihitTargets(center: Location, attacker: Entity, combatStyle: CombatStyle?): List { + val targets = getLocalEntities(center, 1).filter { it != attacker && isAttackable(it, attacker, combatStyle, false) } + return targets.take(9) +} + +fun findMultihitTargetsForChinchompa(center: Location, attacker: Entity, victim: Entity): List { + val targetCandidates = getLocalEntities(center, 1).filter { it != attacker && isAttackable(it, attacker, CombatStyle.RANGE, false) } val targets: List? if (victim is Player) { val players = targetCandidates.filterIsInstance() @@ -27,9 +32,9 @@ fun findMultihitTargets(center: Location, attacker: Entity, victim: Entity, comb if (entity !is Familiar) { return false } - return entity.owner in players && isAttackable(entity.owner, attacker, combatStyle, true) + return entity.owner in players && isAttackable(entity.owner, attacker, CombatStyle.RANGE, true) } - targets = targetCandidates.filter { (it is Player && isAttackable(attacker, it, combatStyle, true)) || isFamiliarOf(it, players) } + targets = targetCandidates.filter { (it is Player && isAttackable(attacker, it, CombatStyle.RANGE, true)) || isFamiliarOf(it, players) } } else { val npcs = targetCandidates.filterIsInstance() fun isOwnerOf(entity: Entity, npcs: List): Boolean { @@ -38,7 +43,7 @@ fun findMultihitTargets(center: Location, attacker: Entity, victim: Entity, comb } for (npc in npcs) { if (npc is Familiar && npc.owner == entity) { - return isAttackable(entity, attacker, combatStyle, true) + return isAttackable(entity, attacker, CombatStyle.RANGE, true) } } return false