diff --git a/Server/src/main/java/core/game/content/activity/gwd/GWDGraardorSwingHandler.java b/Server/src/main/java/core/game/content/activity/gwd/GWDGraardorSwingHandler.java index 8d5fbf21b..7e91dc4c0 100644 --- a/Server/src/main/java/core/game/content/activity/gwd/GWDGraardorSwingHandler.java +++ b/Server/src/main/java/core/game/content/activity/gwd/GWDGraardorSwingHandler.java @@ -71,7 +71,7 @@ public final class GWDGraardorSwingHandler extends CombatSwingHandler { if (!CHAMBER.insideBorder(t.getLocation())) { continue; } - if (t.isAttackable(npc, CombatStyle.RANGE)) { + if (t.isAttackable(npc, CombatStyle.RANGE, false)) { list.add(new BattleState(entity, t)); } } @@ -180,4 +180,4 @@ public final class GWDGraardorSwingHandler extends CombatSwingHandler { else return -1; } -} \ No newline at end of file +} diff --git a/Server/src/main/java/core/game/content/activity/gwd/GWDKreeArraSwingHandler.java b/Server/src/main/java/core/game/content/activity/gwd/GWDKreeArraSwingHandler.java index 77d0a50a8..ce7052a52 100644 --- a/Server/src/main/java/core/game/content/activity/gwd/GWDKreeArraSwingHandler.java +++ b/Server/src/main/java/core/game/content/activity/gwd/GWDKreeArraSwingHandler.java @@ -87,7 +87,7 @@ public final class GWDKreeArraSwingHandler extends CombatSwingHandler { if (!CHAMBER.insideBorder(t.getLocation())) { continue; } - if (t.isAttackable(npc, CombatStyle.RANGE)) { + if (t.isAttackable(npc, CombatStyle.RANGE, false)) { list.add(new BattleState(entity, t)); } } @@ -214,4 +214,4 @@ public final class GWDKreeArraSwingHandler extends CombatSwingHandler { else return -1; } -} \ No newline at end of file +} diff --git a/Server/src/main/java/core/game/content/activity/gwd/GWDZilyanaSwingHandler.java b/Server/src/main/java/core/game/content/activity/gwd/GWDZilyanaSwingHandler.java index 1dec4fb03..b4d721d8a 100644 --- a/Server/src/main/java/core/game/content/activity/gwd/GWDZilyanaSwingHandler.java +++ b/Server/src/main/java/core/game/content/activity/gwd/GWDZilyanaSwingHandler.java @@ -60,7 +60,7 @@ public class GWDZilyanaSwingHandler extends CombatSwingHandler { NPC npc = (NPC) entity; List list = new ArrayList<>(20); for (Entity t : RegionManager.getLocalPlayers(npc.getCenterLocation(), (npc.size() >> 1) + 2)) { - if (t.getLocation().getX() < 2908 && t.isAttackable(npc, CombatStyle.MAGIC)) { + if (t.getLocation().getX() < 2908 && t.isAttackable(npc, CombatStyle.MAGIC, false)) { list.add(new BattleState(entity, t)); } } @@ -157,4 +157,4 @@ public class GWDZilyanaSwingHandler extends CombatSwingHandler { state.getStyle().getSwingHandler().visualizeImpact(entity, victim, state); } -} \ No newline at end of file +} diff --git a/Server/src/main/java/core/game/content/activity/gwd/GodWarsMinionNPC.java b/Server/src/main/java/core/game/content/activity/gwd/GodWarsMinionNPC.java index ca2e69964..cf6be3905 100644 --- a/Server/src/main/java/core/game/content/activity/gwd/GodWarsMinionNPC.java +++ b/Server/src/main/java/core/game/content/activity/gwd/GodWarsMinionNPC.java @@ -84,12 +84,14 @@ public final class GodWarsMinionNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (boss != null && boss.getId() == 6222 && style == CombatStyle.MELEE && entity instanceof Player) { - ((Player) entity).getPacketDispatch().sendMessage("The aviansie is flying too high for you to attack using melee."); + if(message) { + ((Player) entity).getPacketDispatch().sendMessage("The aviansie is flying too high for you to attack using melee."); + } return false; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/content/activity/gwd/GodWarsNPC.java b/Server/src/main/java/core/game/content/activity/gwd/GodWarsNPC.java index 29e2d3ca5..a2778377b 100644 --- a/Server/src/main/java/core/game/content/activity/gwd/GodWarsNPC.java +++ b/Server/src/main/java/core/game/content/activity/gwd/GodWarsNPC.java @@ -102,12 +102,14 @@ public final class GodWarsNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (style == CombatStyle.MELEE && faction == GodWarsFaction.ARMADYL && entity instanceof Player) { - ((Player) entity).getPacketDispatch().sendMessage("The aviansie is flying too high for you to attack using melee."); + if(message) { + ((Player) entity).getPacketDispatch().sendMessage("The aviansie is flying too high for you to attack using melee."); + } return false; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/content/activity/gwd/GodwarsBossNPC.java b/Server/src/main/java/core/game/content/activity/gwd/GodwarsBossNPC.java index 99d92a8a9..2ab79ab6b 100644 --- a/Server/src/main/java/core/game/content/activity/gwd/GodwarsBossNPC.java +++ b/Server/src/main/java/core/game/content/activity/gwd/GodwarsBossNPC.java @@ -244,12 +244,14 @@ public final class GodwarsBossNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (getId() == 6222 && style == CombatStyle.MELEE && entity instanceof Player) { - ((Player) entity).getPacketDispatch().sendMessage("The aviansie is flying too high for you to attack using melee."); + if(message) { + ((Player) entity).getPacketDispatch().sendMessage("The aviansie is flying too high for you to attack using melee."); + } return false; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } /** diff --git a/Server/src/main/java/core/game/content/activity/magearena/KolodionNPC.java b/Server/src/main/java/core/game/content/activity/magearena/KolodionNPC.java index 98c808d5a..b5c26b813 100644 --- a/Server/src/main/java/core/game/content/activity/magearena/KolodionNPC.java +++ b/Server/src/main/java/core/game/content/activity/magearena/KolodionNPC.java @@ -126,7 +126,7 @@ public final class KolodionNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (style != CombatStyle.MAGIC) { return false; } diff --git a/Server/src/main/java/core/game/content/activity/pestcontrol/PCSquireNPC.java b/Server/src/main/java/core/game/content/activity/pestcontrol/PCSquireNPC.java index f237a506e..45ca92029 100644 --- a/Server/src/main/java/core/game/content/activity/pestcontrol/PCSquireNPC.java +++ b/Server/src/main/java/core/game/content/activity/pestcontrol/PCSquireNPC.java @@ -47,7 +47,7 @@ public final class PCSquireNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (DeathTask.isDead(this) || entity instanceof Player) { return false; } diff --git a/Server/src/main/java/core/game/content/activity/pyramidplunder/PyramidPlunderNPC.java b/Server/src/main/java/core/game/content/activity/pyramidplunder/PyramidPlunderNPC.java index 4b062cb62..abbd96dae 100644 --- a/Server/src/main/java/core/game/content/activity/pyramidplunder/PyramidPlunderNPC.java +++ b/Server/src/main/java/core/game/content/activity/pyramidplunder/PyramidPlunderNPC.java @@ -115,12 +115,12 @@ public abstract class PyramidPlunderNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (entity instanceof Player && entity != player) { ((Player) entity).getPacketDispatch().sendMessage("It's not after you."); return false; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/content/activity/wguild/animator/AnimatedArmour.java b/Server/src/main/java/core/game/content/activity/wguild/animator/AnimatedArmour.java index 44b05b41b..09c18794d 100644 --- a/Server/src/main/java/core/game/content/activity/wguild/animator/AnimatedArmour.java +++ b/Server/src/main/java/core/game/content/activity/wguild/animator/AnimatedArmour.java @@ -84,14 +84,14 @@ public final class AnimatedArmour extends NPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (entity != player) { if (entity instanceof Player) { ((Player) entity).getPacketDispatch().sendMessage("This isn't your armour to attack."); } return false; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/content/cutscene/DBRCutscenePlugin.java b/Server/src/main/java/core/game/content/cutscene/DBRCutscenePlugin.java index df29bf950..1a8ee8da3 100644 --- a/Server/src/main/java/core/game/content/cutscene/DBRCutscenePlugin.java +++ b/Server/src/main/java/core/game/content/cutscene/DBRCutscenePlugin.java @@ -867,7 +867,7 @@ public final class DBRCutscenePlugin extends CutscenePlugin { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { return true; } diff --git a/Server/src/main/java/core/game/content/holiday/christmas/ChristmasEvent.java b/Server/src/main/java/core/game/content/holiday/christmas/ChristmasEvent.java index 8415797b4..5ef0854d0 100644 --- a/Server/src/main/java/core/game/content/holiday/christmas/ChristmasEvent.java +++ b/Server/src/main/java/core/game/content/holiday/christmas/ChristmasEvent.java @@ -1063,9 +1063,11 @@ public class ChristmasEvent extends HolidayEvent { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (entity instanceof Player) { - ((Player) entity).sendMessage("You can't attack a snowman."); + if(message) { + ((Player) entity).sendMessage("You can't attack a snowman."); + } return false; } return true; diff --git a/Server/src/main/java/core/game/content/quest/free/dragonslayer/ElvargNPC.java b/Server/src/main/java/core/game/content/quest/free/dragonslayer/ElvargNPC.java index c8f108ff2..5e5d7daa6 100644 --- a/Server/src/main/java/core/game/content/quest/free/dragonslayer/ElvargNPC.java +++ b/Server/src/main/java/core/game/content/quest/free/dragonslayer/ElvargNPC.java @@ -143,21 +143,25 @@ public final class ElvargNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (!(entity instanceof Player)) { - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } final Player player = (Player) entity; if (player.getQuestRepository().getQuest("Dragon Slayer").getStage(player) == 40 && (player.getInventory().containsItem(DragonSlayer.ELVARG_HEAD))) { - player.getPacketDispatch().sendMessage("You have already slain the dragon. Now you just need to return to Oziach for"); - player.getPacketDispatch().sendMessage("your reward!"); - return true; - } - if (player.getQuestRepository().getQuest("Dragon Slayer").getStage(player) > 40) { - player.getPacketDispatch().sendMessage("You have already slain Elvarg."); + if(message) { + player.getPacketDispatch().sendMessage("You have already slain the dragon. Now you just need to return to Oziach for"); + player.getPacketDispatch().sendMessage("your reward!"); + } return false; } - return super.isAttackable(entity, style); + if (player.getQuestRepository().getQuest("Dragon Slayer").getStage(player) > 40) { + if(message) { + player.getPacketDispatch().sendMessage("You have already slain Elvarg."); + } + return false; + } + return super.isAttackable(entity, style, message); } @Override @@ -322,4 +326,4 @@ public final class ElvargNPC extends AbstractNPC { } -} \ No newline at end of file +} diff --git a/Server/src/main/java/core/game/content/quest/free/dragonslayer/WormbrainNPC.java b/Server/src/main/java/core/game/content/quest/free/dragonslayer/WormbrainNPC.java index 104e8c013..059811690 100644 --- a/Server/src/main/java/core/game/content/quest/free/dragonslayer/WormbrainNPC.java +++ b/Server/src/main/java/core/game/content/quest/free/dragonslayer/WormbrainNPC.java @@ -52,15 +52,17 @@ public final class WormbrainNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (entity instanceof Player) { final Player player = (Player) entity; if (player.getQuestRepository().getQuest("Dragon Slayer").getStage(player) != 20) { - player.getPacketDispatch().sendMessage("The goblin is already in prison. You have no reason to attack him."); + if(message) { + player.getPacketDispatch().sendMessage("The goblin is already in prison. You have no reason to attack him."); + } return false; } } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/content/quest/free/therestlessghost/RestlessGhostPlugin.java b/Server/src/main/java/core/game/content/quest/free/therestlessghost/RestlessGhostPlugin.java index 61f9b54de..8e88e1282 100644 --- a/Server/src/main/java/core/game/content/quest/free/therestlessghost/RestlessGhostPlugin.java +++ b/Server/src/main/java/core/game/content/quest/free/therestlessghost/RestlessGhostPlugin.java @@ -238,7 +238,7 @@ public final class RestlessGhostPlugin extends OptionHandler { } @Override - public boolean isAttackable(final Entity entity, final CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { final Player player = ((Player) entity); final Player pl = getAttribute("player", null); return pl == null ? false : pl == player ? true : false; diff --git a/Server/src/main/java/core/game/content/quest/members/lostcity/TreeSpiritNPC.java b/Server/src/main/java/core/game/content/quest/members/lostcity/TreeSpiritNPC.java index 35859986a..fb3e58d15 100644 --- a/Server/src/main/java/core/game/content/quest/members/lostcity/TreeSpiritNPC.java +++ b/Server/src/main/java/core/game/content/quest/members/lostcity/TreeSpiritNPC.java @@ -52,11 +52,11 @@ public final class TreeSpiritNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (entity != player) { return false; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/content/quest/members/witchshouse/WitchsExperimentNPC.java b/Server/src/main/java/core/game/content/quest/members/witchshouse/WitchsExperimentNPC.java index e2c6de9cf..1ffa48d06 100644 --- a/Server/src/main/java/core/game/content/quest/members/witchshouse/WitchsExperimentNPC.java +++ b/Server/src/main/java/core/game/content/quest/members/witchshouse/WitchsExperimentNPC.java @@ -57,7 +57,7 @@ public class WitchsExperimentNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { return p == entity; } diff --git a/Server/src/main/java/core/game/content/ttrail/SaradominWizardNPC.java b/Server/src/main/java/core/game/content/ttrail/SaradominWizardNPC.java index 79202bdc4..13c7aaab0 100644 --- a/Server/src/main/java/core/game/content/ttrail/SaradominWizardNPC.java +++ b/Server/src/main/java/core/game/content/ttrail/SaradominWizardNPC.java @@ -124,7 +124,7 @@ public final class SaradominWizardNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (!(entity instanceof Player)) { return false; } @@ -132,7 +132,7 @@ public final class SaradominWizardNPC extends AbstractNPC { Player p = entity.asPlayer(); return p == player; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/content/ttrail/UriNPC.java b/Server/src/main/java/core/game/content/ttrail/UriNPC.java index bddcad008..0d79b54e0 100644 --- a/Server/src/main/java/core/game/content/ttrail/UriNPC.java +++ b/Server/src/main/java/core/game/content/ttrail/UriNPC.java @@ -101,7 +101,7 @@ public final class UriNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (!(entity instanceof Player)) { return false; } @@ -109,7 +109,7 @@ public final class UriNPC extends AbstractNPC { Player p = entity.asPlayer(); return p == player; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/content/ttrail/ZamorakWizardNPC.java b/Server/src/main/java/core/game/content/ttrail/ZamorakWizardNPC.java index 897fdc3d1..c4e6acd9e 100644 --- a/Server/src/main/java/core/game/content/ttrail/ZamorakWizardNPC.java +++ b/Server/src/main/java/core/game/content/ttrail/ZamorakWizardNPC.java @@ -99,7 +99,7 @@ public final class ZamorakWizardNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (!(entity instanceof Player)) { return false; } @@ -107,7 +107,7 @@ public final class ZamorakWizardNPC extends AbstractNPC { Player p = entity.asPlayer(); return p == player; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/content/zone/wbisland/WaterBirthDungeonZone.java b/Server/src/main/java/core/game/content/zone/wbisland/WaterBirthDungeonZone.java index 2575a5563..3a20f6b54 100644 --- a/Server/src/main/java/core/game/content/zone/wbisland/WaterBirthDungeonZone.java +++ b/Server/src/main/java/core/game/content/zone/wbisland/WaterBirthDungeonZone.java @@ -389,14 +389,16 @@ public final class WaterBirthDungeonZone extends MapZone implements Plugin it = list.iterator(); it.hasNext();) { final Entity e = it.next(); it.remove(); - if (!e.isAttackable(player, CombatStyle.RANGE) || !e.getProperties().isMultiZone()) { + if (!e.isAttackable(player, CombatStyle.RANGE, false) || !e.getProperties().isMultiZone()) { continue; } double distance = victim.getLocation().getDistance(e.getLocation()); diff --git a/Server/src/main/java/core/game/node/entity/npc/IdleAbstractNPC.java b/Server/src/main/java/core/game/node/entity/npc/IdleAbstractNPC.java index 6c96cda72..7612724ba 100644 --- a/Server/src/main/java/core/game/node/entity/npc/IdleAbstractNPC.java +++ b/Server/src/main/java/core/game/node/entity/npc/IdleAbstractNPC.java @@ -57,17 +57,19 @@ public abstract class IdleAbstractNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (isInvisible()) { return false; } if (getTask() != null && entity instanceof Player && getTask().levelReq > entity.getSkills().getStaticLevel(Skills.SLAYER)) { - ((Player) entity).getPacketDispatch().sendMessage("You need a higher slayer level to know how to wound this monster."); + if(message) { + ((Player) entity).getPacketDispatch().sendMessage("You need a higher slayer level to know how to wound this monster."); + } } if (DeathTask.isDead(this)) { return false; } - if (!entity.getZoneMonitor().continueAttack(this, style)) { + if (!entity.getZoneMonitor().continueAttack(this, style, message)) { return false; } return true; @@ -136,4 +138,4 @@ public abstract class IdleAbstractNPC extends AbstractNPC { this.idle = idle; } -} \ No newline at end of file +} diff --git a/Server/src/main/java/core/game/node/entity/npc/NPC.java b/Server/src/main/java/core/game/node/entity/npc/NPC.java index 3bd79964b..7174eefe4 100644 --- a/Server/src/main/java/core/game/node/entity/npc/NPC.java +++ b/Server/src/main/java/core/game/node/entity/npc/NPC.java @@ -392,14 +392,16 @@ public class NPC extends Entity { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if ((entity instanceof Player && !definition.hasAction("attack")) || isInvisible()) { return false; } if (task != null && entity instanceof Player && task.levelReq > entity.getSkills().getStaticLevel(Skills.SLAYER)) { - ((Player) entity).getPacketDispatch().sendMessage("You need a higher slayer level to know how to wound this monster."); + if(message) { + ((Player) entity).getPacketDispatch().sendMessage("You need a higher slayer level to know how to wound this monster."); + } } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/node/entity/npc/bosses/GiantMoleNPC.java b/Server/src/main/java/core/game/node/entity/npc/bosses/GiantMoleNPC.java index 42f63420d..71a93779d 100644 --- a/Server/src/main/java/core/game/node/entity/npc/bosses/GiantMoleNPC.java +++ b/Server/src/main/java/core/game/node/entity/npc/bosses/GiantMoleNPC.java @@ -224,11 +224,11 @@ public final class GiantMoleNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (digging) { return false; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/node/entity/npc/bosses/KalphiteQueenNPC.java b/Server/src/main/java/core/game/node/entity/npc/bosses/KalphiteQueenNPC.java index e94be4859..5a6c3fb9e 100644 --- a/Server/src/main/java/core/game/node/entity/npc/bosses/KalphiteQueenNPC.java +++ b/Server/src/main/java/core/game/node/entity/npc/bosses/KalphiteQueenNPC.java @@ -212,7 +212,7 @@ public final class KalphiteQueenNPC extends AbstractNPC { private BattleState[] getRangeTargets(Entity e, Entity victim) { List list = new ArrayList<>(20); for (Entity t : RegionManager.getLocalPlayers(victim, -1 + (int) e.getCenterLocation().getDistance(victim.getLocation()))) { - if (t.isAttackable(e, CombatStyle.RANGE)) { + if (t.isAttackable(e, CombatStyle.RANGE, false)) { list.add(new BattleState(e, t)); } } diff --git a/Server/src/main/java/core/game/node/entity/npc/other/BorkNPC.java b/Server/src/main/java/core/game/node/entity/npc/other/BorkNPC.java index c464ec4c0..6b08732ed 100644 --- a/Server/src/main/java/core/game/node/entity/npc/other/BorkNPC.java +++ b/Server/src/main/java/core/game/node/entity/npc/other/BorkNPC.java @@ -373,7 +373,7 @@ public class BorkNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity e, CombatStyle style) { + public boolean isAttackable(Entity e, CombatStyle style, boolean message) { return false; } diff --git a/Server/src/main/java/core/game/node/entity/npc/other/GraveStoneNPC.java b/Server/src/main/java/core/game/node/entity/npc/other/GraveStoneNPC.java index 774ac2807..d997a58a7 100644 --- a/Server/src/main/java/core/game/node/entity/npc/other/GraveStoneNPC.java +++ b/Server/src/main/java/core/game/node/entity/npc/other/GraveStoneNPC.java @@ -128,7 +128,7 @@ public class GraveStoneNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { return false; } diff --git a/Server/src/main/java/core/game/node/entity/npc/other/VampireSlayerNPC.java b/Server/src/main/java/core/game/node/entity/npc/other/VampireSlayerNPC.java index cc4f30b36..6bb939d2f 100644 --- a/Server/src/main/java/core/game/node/entity/npc/other/VampireSlayerNPC.java +++ b/Server/src/main/java/core/game/node/entity/npc/other/VampireSlayerNPC.java @@ -155,7 +155,7 @@ public class VampireSlayerNPC extends AbstractNPC { } @Override - public boolean isAttackable(final Entity entity, final CombatStyle style) { + public boolean isAttackable(final Entity entity, final CombatStyle style, boolean message) { final Player player = ((Player) entity); final Player pl = getAttribute("player", null); return pl == null ? false : pl == player ? true : false; diff --git a/Server/src/main/java/core/game/node/entity/npc/quest/pirates_treasure/GardenerNPC.java b/Server/src/main/java/core/game/node/entity/npc/quest/pirates_treasure/GardenerNPC.java index bca136edc..339650b87 100644 --- a/Server/src/main/java/core/game/node/entity/npc/quest/pirates_treasure/GardenerNPC.java +++ b/Server/src/main/java/core/game/node/entity/npc/quest/pirates_treasure/GardenerNPC.java @@ -64,12 +64,12 @@ public final class GardenerNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { final Player target = getAttribute("target", null); if (target != entity) { return false; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/node/entity/npc/revenant/RevenantNPC.java b/Server/src/main/java/core/game/node/entity/npc/revenant/RevenantNPC.java index 2f03bcff0..80ae977a5 100644 --- a/Server/src/main/java/core/game/node/entity/npc/revenant/RevenantNPC.java +++ b/Server/src/main/java/core/game/node/entity/npc/revenant/RevenantNPC.java @@ -190,18 +190,20 @@ public class RevenantNPC extends AbstractNPC { } @Override - public boolean continueAttack(Entity target, CombatStyle style) { + public boolean continueAttack(Entity target, CombatStyle style, boolean message) { return target instanceof Player ? checkCombatLevel(target.asPlayer()) : true; } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (entity.asPlayer().isArtificial()) { return false; } if (entity instanceof Player) { if (!checkCombatLevel(entity.asPlayer()) && !entity.asPlayer().isAdmin()) { - entity.asPlayer().sendMessage("The level difference between you and your opponent is too great."); + if(message) { + entity.asPlayer().sendMessage("The level difference between you and your opponent is too great."); + } return false; } } @@ -214,7 +216,7 @@ public class RevenantNPC extends AbstractNPC { return false; } } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/node/entity/player/Player.java b/Server/src/main/java/core/game/node/entity/player/Player.java index 0bad3e73f..5d73adb60 100644 --- a/Server/src/main/java/core/game/node/entity/player/Player.java +++ b/Server/src/main/java/core/game/node/entity/player/Player.java @@ -730,7 +730,7 @@ public class Player extends Entity { } } Item item = equipment.get(EquipmentContainer.SLOT_SHIELD); - if (item != null && (fire && (item.getId() == 11283 || item.getId() == 11284 || item.getId() == 1540) || (!fire && (item.getId() == 2890 || item.getId() == 9731)))) { + if (item != null && (item.getId() == 11283 || item.getId() == 11284 || (fire && (item.getId() == 1540) || (!fire && (item.getId() == 2890 || item.getId() == 9731))))) { value |= 0x4; } if (prayer.get(PrayerType.PROTECT_FROM_MAGIC)) { @@ -755,11 +755,11 @@ public class Player extends Entity { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (entity instanceof NPC && !((NPC) entity).getDefinition().hasAction("attack") && !((NPC) entity).isIgnoreAttackRestrictions(this)) { return false; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/node/entity/player/link/prayer/Prayer.java b/Server/src/main/java/core/game/node/entity/player/link/prayer/Prayer.java index b2718b75d..17842b88b 100644 --- a/Server/src/main/java/core/game/node/entity/player/link/prayer/Prayer.java +++ b/Server/src/main/java/core/game/node/entity/player/link/prayer/Prayer.java @@ -119,7 +119,7 @@ public final class Prayer { } for (Object o : targets) { Entity entity = (Entity) o; - if (entity.isAttackable(player, CombatStyle.MAGIC)) { + if (entity.isAttackable(player, CombatStyle.MAGIC, false)) { entity.getImpactHandler().manualHit(player, 1 + RandomFunction.randomize(maximum), HitsplatType.NORMAL); } } diff --git a/Server/src/main/java/core/game/node/entity/skill/hunter/ImplingNPC.java b/Server/src/main/java/core/game/node/entity/skill/hunter/ImplingNPC.java index e797ae9ea..426a5c12a 100644 --- a/Server/src/main/java/core/game/node/entity/skill/hunter/ImplingNPC.java +++ b/Server/src/main/java/core/game/node/entity/skill/hunter/ImplingNPC.java @@ -83,14 +83,14 @@ public final class ImplingNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (style != CombatStyle.MAGIC) { return false; } if (entity.getProperties().getSpell().getSpellId() == 12 || entity.getProperties().getSpell().getSpellId() == 30 || entity.getProperties().getSpell().getSpellId() == 56) { return true; } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/node/entity/skill/slayer/FishingExplosivePlugin.java b/Server/src/main/java/core/game/node/entity/skill/slayer/FishingExplosivePlugin.java index 7f577e01d..d73bad286 100644 --- a/Server/src/main/java/core/game/node/entity/skill/slayer/FishingExplosivePlugin.java +++ b/Server/src/main/java/core/game/node/entity/skill/slayer/FishingExplosivePlugin.java @@ -200,9 +200,9 @@ public final class FishingExplosivePlugin extends OptionHandler { } @Override - public boolean isAttackable(final Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { final Player pl = getAttribute("player", null); - return pl != null && pl == entity && super.isAttackable(entity, style); + return pl != null && pl == entity && super.isAttackable(entity, style, message); } @Override diff --git a/Server/src/main/java/core/game/node/entity/skill/slayer/NechryaelNPC.java b/Server/src/main/java/core/game/node/entity/skill/slayer/NechryaelNPC.java index 1ce0c8546..81822be6b 100644 --- a/Server/src/main/java/core/game/node/entity/skill/slayer/NechryaelNPC.java +++ b/Server/src/main/java/core/game/node/entity/skill/slayer/NechryaelNPC.java @@ -162,16 +162,23 @@ public final class NechryaelNPC extends AbstractNPC { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (entity instanceof Player) { final Player t = (Player) entity; if (t != player) { - t.getPacketDispatch().sendMessage("This isn't spawned for you."); + if(message) { + t.getPacketDispatch().sendMessage("This isn't spawned for you."); + } return false; } } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } + + @Override + public boolean isIgnoreMultiBoundaries(Entity victim) { + return victim == player; + } @Override public boolean isPoisonImmune() { @@ -182,6 +189,5 @@ public final class NechryaelNPC extends AbstractNPC { public int[] getIds() { return new int[] { DEATH_SPAWN }; } - } } diff --git a/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/Familiar.java b/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/Familiar.java index 814d76ab8..dca7e1bbf 100644 --- a/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/Familiar.java +++ b/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/Familiar.java @@ -220,37 +220,47 @@ public abstract class Familiar extends NPC implements Plugin { } @Override - public boolean isAttackable(Entity entity, CombatStyle style) { + public boolean isAttackable(Entity entity, CombatStyle style, boolean message) { if (entity == owner) { - owner.getPacketDispatch().sendMessage("You can't just betray your own familiar like that!"); + if(message) { + owner.getPacketDispatch().sendMessage("You can't just betray your own familiar like that!"); + } return false; } if (entity instanceof Player) { - if (!owner.isAttackable(entity, style)) { + if (!owner.isAttackable(entity, style, message)) { return false; } } if (!getProperties().isMultiZone()) { if (entity instanceof Player && !((Player) entity).getProperties().isMultiZone()) { - ((Player) entity).getPacketDispatch().sendMessage("You have to be in multicombat to attack a player's familiar."); + if(message) { + ((Player) entity).getPacketDispatch().sendMessage("You have to be in multicombat to attack a player's familiar."); + } return false; } if (entity instanceof Player) { - ((Player) entity).getPacketDispatch().sendMessage("This familiar is not in the a multicombat zone."); + if(message) { + ((Player) entity).getPacketDispatch().sendMessage("This familiar is not in the a multicombat zone."); + } } return false; } if (entity instanceof Player) { if (!((Player) entity).getSkullManager().isWilderness()) { - ((Player) entity).getPacketDispatch().sendMessage("You have to be in the wilderness to attack a player's familiar."); + if(message) { + ((Player) entity).getPacketDispatch().sendMessage("You have to be in the wilderness to attack a player's familiar."); + } return false; } if (!owner.getSkullManager().isWilderness()) { - ((Player) entity).getPacketDispatch().sendMessage("This familiar's owner is not in the wilderness."); + if(message) { + ((Player) entity).getPacketDispatch().sendMessage("This familiar's owner is not in the wilderness."); + } return false; } } - return super.isAttackable(entity, style); + return super.isAttackable(entity, style, message); } @Override @@ -418,7 +428,7 @@ public abstract class Familiar extends NPC implements Plugin { * moves). */ public boolean canAttack(Entity target, boolean message) { - if (!target.isAttackable(owner, owner.getProperties().getCombatPulse().getStyle())) { + if (!target.isAttackable(owner, owner.getProperties().getCombatPulse().getStyle(), true)) { return false; } if (target.getLocation().getDistance(getLocation()) > 8) { @@ -427,7 +437,7 @@ public abstract class Familiar extends NPC implements Plugin { } return false; } - if (target.getLocks().isInteractionLocked() || !target.isAttackable(this, CombatStyle.MAGIC)) { + if (target.getLocks().isInteractionLocked() || !target.isAttackable(this, CombatStyle.MAGIC, true)) { return false; } return isCombatFamiliar(); diff --git a/Server/src/main/java/core/game/world/map/zone/ZoneMonitor.java b/Server/src/main/java/core/game/world/map/zone/ZoneMonitor.java index e9fdd394e..73d02232e 100644 --- a/Server/src/main/java/core/game/world/map/zone/ZoneMonitor.java +++ b/Server/src/main/java/core/game/world/map/zone/ZoneMonitor.java @@ -112,24 +112,26 @@ public final class ZoneMonitor { * @param style The combat style used. * @return {@code True} if so. */ - public boolean continueAttack(Node target, CombatStyle style) { + public boolean continueAttack(Node target, CombatStyle style, boolean message) { if (target instanceof Entity) { - if (!entity.continueAttack((Entity) target, style)) { + if (!entity.continueAttack((Entity) target, style, message)) { return false; } } for (RegionZone z : zones) { - if (!z.getZone().continueAttack(entity, target, style, true)) { + if (!z.getZone().continueAttack(entity, target, style, message)) { return false; } } if (entity instanceof Player && target instanceof Player) { if (!((Player) entity).getSkullManager().isWilderness() || !((Player) target).getSkullManager().isWilderness()) { - ((Player) entity).getPacketDispatch().sendMessage("You can only attack other players in the wilderness."); + if(message) { + ((Player) entity).getPacketDispatch().sendMessage("You can only attack other players in the wilderness."); + } return false; } } - if (target instanceof Entity && !MapZone.checkMulti(entity, (Entity) target, true)) { + if (target instanceof Entity && !MapZone.checkMulti(entity, (Entity) target, message)) { return false; } return true; diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/ChronozonNPC.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/ChronozonNPC.kt index 5ed371c71..4b929820b 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/ChronozonNPC.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/ChronozonNPC.kt @@ -78,10 +78,10 @@ class ChronozonNPC(id: Int, location: Location?) : AbstractNPC(667, Location(308 } } - override fun isAttackable(entity: Entity, style: CombatStyle?): Boolean { + override fun isAttackable(entity: Entity, style: CombatStyle?, message: Boolean): Boolean { return entity == m_targetPlayer && m_targetPlayer.questRepository.getQuest("Family Crest").getStage(m_targetPlayer) == 19 && - super.isAttackable(entity, style) + super.isAttackable(entity, style, message) } override fun clear() { diff --git a/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatPulse.kt b/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatPulse.kt index 5525626e2..b78bb5296 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatPulse.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatPulse.kt @@ -129,7 +129,7 @@ class CombatPulse( if (handler == null) { handler = entity.getSwingHandler(true) } - if (!v.isAttackable(entity, handler!!.type)) { + if (!v.isAttackable(entity, handler!!.type, true)) { return true } if (!swing(entity, victim, handler)) { diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/pitfall/HunterPitfall.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/pitfall/HunterPitfall.kt index 66ca5c016..84aafe92f 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/pitfall/HunterPitfall.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/pitfall/HunterPitfall.kt @@ -318,7 +318,7 @@ class PitfallNPC : AbstractNPC { return BEAST_IDS } - override fun isAttackable(entity: Entity, style: CombatStyle): Boolean { + override fun isAttackable(entity: Entity, style: CombatStyle, message: Boolean): Boolean { return false }