From 0a5051a3cd1f7ed52d5ba4e858b8db6339a125d0 Mon Sep 17 00:00:00 2001 From: Avi Weinstock Date: Wed, 15 Sep 2021 13:18:00 -0400 Subject: [PATCH] Special attacks now have proper types (so they no longer ignore prayer) and give experience. Also add "::infinitespecial" admin command for testing special attacks. --- .../combat/special/AncientMaceSpecialHandler.java | 2 ++ .../combat/special/BackstabSpecialHandler.java | 2 ++ .../combat/special/ChainhitSpecialHandler.java | 2 ++ .../entity/combat/special/CleaveSpecialHandler.java | 2 ++ .../combat/special/ClobberSpecialHandler.java | 2 ++ .../special/DescentOfDarknessSpecialHandler.java | 2 ++ .../combat/special/EnergyDrainSpecialHandler.java | 2 ++ .../entity/combat/special/FeintSpecialHandler.java | 2 ++ .../combat/special/HealingBladeSpecialHandler.java | 2 ++ .../combat/special/IceCleaveSpecialHandler.java | 2 ++ .../entity/combat/special/ImpaleSpecialHandler.java | 2 ++ .../combat/special/JudgementSpecialHandler.java | 2 ++ .../combat/special/PowershotSpecialHandler.java | 2 ++ .../combat/special/PowerstabSpecialHandler.java | 2 ++ .../combat/special/PunctureSpecialHandler.java | 2 ++ .../combat/special/QuickSmashSpecialHandler.java | 1 + .../combat/special/SaradominsLightningHandler.java | 3 +++ .../entity/combat/special/SeverSpecialHandler.java | 2 ++ .../combat/special/ShatterSpecialHandler.java | 2 ++ .../combat/special/SliceAndDiceSpecialHandler.java | 1 + .../entity/combat/special/SmashSpecialHandler.java | 2 ++ .../combat/special/SnapshotSpecialHandler.java | 2 ++ .../entity/combat/special/SnipeSpecialHandler.java | 2 ++ .../combat/special/SpearWallSpecialHandler.java | 2 ++ .../entity/combat/special/SweepSpecialHandler.java | 2 ++ .../combat/special/WarstrikeSpecialHandler.java | 2 ++ .../java/core/game/node/entity/player/Player.java | 5 ++++- .../entity/combat/handlers/MagicSwingHandler.kt | 4 ++-- .../entity/combat/handlers/MeleeSwingHandler.kt | 4 ++-- .../entity/combat/handlers/RangeSwingHandler.kt | 4 ++-- .../rs09/game/system/command/sets/MiscCommandSet.kt | 13 ++++++++++++- 31 files changed, 73 insertions(+), 8 deletions(-) diff --git a/Server/src/main/java/core/game/node/entity/combat/special/AncientMaceSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/AncientMaceSpecialHandler.java index 57175920e..994b05ffd 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/AncientMaceSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/AncientMaceSpecialHandler.java @@ -51,6 +51,7 @@ public final class AncientMaceSpecialHandler extends MeleeSwingHandler implement if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.1, 0.98)) { hit = RandomFunction.random(calculateHit(entity, victim, 1)); @@ -72,5 +73,6 @@ public final class AncientMaceSpecialHandler extends MeleeSwingHandler implement @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/BackstabSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/BackstabSpecialHandler.java index 46887e0eb..0f47d7b0b 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/BackstabSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/BackstabSpecialHandler.java @@ -54,6 +54,7 @@ public final class BackstabSpecialHandler extends MeleeSwingHandler implements P if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; double accuracy = 1.0; if (!victim.getProperties().getCombatPulse().isAttacking()) { @@ -70,5 +71,6 @@ public final class BackstabSpecialHandler extends MeleeSwingHandler implements P @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/ChainhitSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/ChainhitSpecialHandler.java index 00a0ca1e9..bbfd85860 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/ChainhitSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/ChainhitSpecialHandler.java @@ -72,6 +72,7 @@ public final class ChainhitSpecialHandler extends RangeSwingHandler implements P if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.RANGE); if (victim instanceof NPC) { NPC npc = victim.asNpc(); if (npc.getId() == 2440) { @@ -106,6 +107,7 @@ public final class ChainhitSpecialHandler extends RangeSwingHandler implements P entity.visualize(ANIMATION, GRAPHIC); int speed = (int) (32 + (entity.getLocation().getDistance(victim.getLocation()) * 5)); Projectile.create(entity, victim, 258, 40, 36, 32, speed, 5, 11).send(); + addExperience(entity, victim, state); } @Override diff --git a/Server/src/main/java/core/game/node/entity/combat/special/CleaveSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/CleaveSpecialHandler.java index 822469f0b..c61725229 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/CleaveSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/CleaveSpecialHandler.java @@ -53,6 +53,7 @@ public final class CleaveSpecialHandler extends MeleeSwingHandler implements Plu if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.18, 1.0)) { hit = RandomFunction.random(calculateHit(entity, victim, 1.2203)); @@ -65,5 +66,6 @@ public final class CleaveSpecialHandler extends MeleeSwingHandler implements Plu @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/ClobberSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/ClobberSpecialHandler.java index 86417df5c..6746276e8 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/ClobberSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/ClobberSpecialHandler.java @@ -52,6 +52,7 @@ public final class ClobberSpecialHandler extends MeleeSwingHandler implements Pl if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (entity instanceof Player) { entity.asPlayer().sendChat("Chop chop!"); @@ -72,5 +73,6 @@ public final class ClobberSpecialHandler extends MeleeSwingHandler implements Pl @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/DescentOfDarknessSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/DescentOfDarknessSpecialHandler.java index 247e308da..7ee191e19 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/DescentOfDarknessSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/DescentOfDarknessSpecialHandler.java @@ -81,6 +81,7 @@ public final class DescentOfDarknessSpecialHandler extends RangeSwingHandler imp } Weapon w = new Weapon(p.getEquipment().get(3), rw.getAmmunitionSlot(), p.getEquipment().getNew(rw.getAmmunitionSlot())); w.setType(rw.getWeaponType()); + state.setStyle(CombatStyle.RANGE); state.setRangeWeapon(rw); state.setAmmunition(Ammunition.get(w.getAmmunition().getId())); state.setWeapon(w); @@ -145,5 +146,6 @@ public final class DescentOfDarknessSpecialHandler extends RangeSwingHandler imp @Override public void visualizeImpact(Entity entity, Entity victim, BattleState state) { victim.visualize(victim.getProperties().getDefenceAnimation(), state.isFrozen() ? DRAGON_IMPACT : DARKNESS_IMPACT); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/EnergyDrainSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/EnergyDrainSpecialHandler.java index 990ef9846..8075ceb94 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/EnergyDrainSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/EnergyDrainSpecialHandler.java @@ -52,6 +52,7 @@ public final class EnergyDrainSpecialHandler extends MeleeSwingHandler implement if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.2, 1.0)) { hit = RandomFunction.random(calculateHit(entity, victim, 1)); @@ -69,5 +70,6 @@ public final class EnergyDrainSpecialHandler extends MeleeSwingHandler implement public void visualize(Entity entity, Entity victim, BattleState state) { entity.animate(ANIMATION); victim.graphics(GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/FeintSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/FeintSpecialHandler.java index 70394b9a4..f054a2255 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/FeintSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/FeintSpecialHandler.java @@ -47,6 +47,7 @@ public final class FeintSpecialHandler extends MeleeSwingHandler implements Plug if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.0, 1.0)) { hit = RandomFunction.random(calculateHit(entity, victim, RandomFunction.random(1.0, 2.50))); @@ -58,5 +59,6 @@ public final class FeintSpecialHandler extends MeleeSwingHandler implements Plug @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.animate(ANIMATION); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/HealingBladeSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/HealingBladeSpecialHandler.java index 194ff93fd..d51afe3b1 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/HealingBladeSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/HealingBladeSpecialHandler.java @@ -53,6 +53,7 @@ public final class HealingBladeSpecialHandler extends MeleeSwingHandler implemen if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.12, 0.98)) { hit = RandomFunction.random(calculateHit(entity, victim, 1.005)); @@ -75,6 +76,7 @@ public final class HealingBladeSpecialHandler extends MeleeSwingHandler implemen @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/IceCleaveSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/IceCleaveSpecialHandler.java index 39b6881b8..e8e8c6c4d 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/IceCleaveSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/IceCleaveSpecialHandler.java @@ -53,6 +53,7 @@ public final class IceCleaveSpecialHandler extends MeleeSwingHandler implements if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.075, 0.98)) { hit = RandomFunction.random(calculateHit(entity, victim, 1.005)); @@ -74,5 +75,6 @@ public final class IceCleaveSpecialHandler extends MeleeSwingHandler implements @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/ImpaleSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/ImpaleSpecialHandler.java index 11b412c66..c6aff9802 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/ImpaleSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/ImpaleSpecialHandler.java @@ -53,6 +53,7 @@ public final class ImpaleSpecialHandler extends MeleeSwingHandler implements Plu if (!player.getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.1, 0.98)) { hit = RandomFunction.random(calculateHit(entity, victim, 1.1)); @@ -68,5 +69,6 @@ public final class ImpaleSpecialHandler extends MeleeSwingHandler implements Plu return; } entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/JudgementSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/JudgementSpecialHandler.java index fd2341d47..b94dc0345 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/JudgementSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/JudgementSpecialHandler.java @@ -53,6 +53,7 @@ public final class JudgementSpecialHandler extends MeleeSwingHandler implements if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.25, 0.98)) { hit = RandomFunction.random(calculateHit(entity, victim, 1.25)); @@ -65,5 +66,6 @@ public final class JudgementSpecialHandler extends MeleeSwingHandler implements @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/PowershotSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/PowershotSpecialHandler.java index e92c9a394..0689cef06 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/PowershotSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/PowershotSpecialHandler.java @@ -52,6 +52,7 @@ public final class PowershotSpecialHandler extends RangeSwingHandler implements if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.RANGE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.RANGE, 1.98, 1.0)) { hit = RandomFunction.random(calculateHit(entity, victim, 1.0)); @@ -67,5 +68,6 @@ public final class PowershotSpecialHandler extends RangeSwingHandler implements entity.visualize(state.getRangeWeapon().getAnimation(), GRAPHIC); int speed = (int) (46 + (entity.getLocation().getDistance(victim.getLocation()) * 5)); Projectile.create(entity, victim, 249, 40, 36, 45, speed, 5, 11).send(); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/PowerstabSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/PowerstabSpecialHandler.java index 2854da54f..91f4c5324 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/PowerstabSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/PowerstabSpecialHandler.java @@ -84,6 +84,7 @@ public final class PowerstabSpecialHandler extends MeleeSwingHandler implements if (isAccurateImpact(entity, e)) { hit = RandomFunction.random(calculateHit(entity, e, 1.0)); } + s.setStyle(CombatStyle.MELEE); s.setEstimatedHit(hit); } } @@ -94,6 +95,7 @@ public final class PowerstabSpecialHandler extends MeleeSwingHandler implements @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } @Override diff --git a/Server/src/main/java/core/game/node/entity/combat/special/PunctureSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/PunctureSpecialHandler.java index 006070d7e..6b8a03a6f 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/PunctureSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/PunctureSpecialHandler.java @@ -57,6 +57,7 @@ public final class PunctureSpecialHandler extends MeleeSwingHandler implements P if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); // First hit //double accuracyMod, double defenceMod int hit = 0; @@ -80,5 +81,6 @@ public final class PunctureSpecialHandler extends MeleeSwingHandler implements P @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/QuickSmashSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/QuickSmashSpecialHandler.java index d93eb8316..2f110af06 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/QuickSmashSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/QuickSmashSpecialHandler.java @@ -66,6 +66,7 @@ public final class QuickSmashSpecialHandler extends MeleeSwingHandler implements if (!p.getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + // TODO: apply protection prayers/experience manually (since this is bypassing normal BattleState machinery) visualize(entity, victim, null); int hit = 0; if (isAccurateImpact(entity, victim)) { diff --git a/Server/src/main/java/core/game/node/entity/combat/special/SaradominsLightningHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/SaradominsLightningHandler.java index c8ec6a078..5a6eff92d 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/SaradominsLightningHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/SaradominsLightningHandler.java @@ -46,6 +46,8 @@ public final class SaradominsLightningHandler extends MeleeSwingHandler implemen if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + // TODO: target states to make the first hit melee and the second hit magic + state.setStyle(CombatStyle.MAGIC); int hit = 0; int secondary = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.10, 0.98)) { @@ -74,6 +76,7 @@ public final class SaradominsLightningHandler extends MeleeSwingHandler implemen @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } @Override diff --git a/Server/src/main/java/core/game/node/entity/combat/special/SeverSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/SeverSpecialHandler.java index 7b37f31e1..b35d98834 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/SeverSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/SeverSpecialHandler.java @@ -51,6 +51,7 @@ public final class SeverSpecialHandler extends MeleeSwingHandler implements Plug public int swing(Entity entity, Entity victim, BattleState state) { if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) return -1; + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.124, 1.0)) { hit = RandomFunction.random(calculateHit(entity, victim, 1.0)); @@ -78,5 +79,6 @@ public final class SeverSpecialHandler extends MeleeSwingHandler implements Plug @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/ShatterSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/ShatterSpecialHandler.java index b9bc223a4..3321b4a5f 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/ShatterSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/ShatterSpecialHandler.java @@ -52,6 +52,7 @@ public final class ShatterSpecialHandler extends MeleeSwingHandler implements Pl if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 0.87, 1.0)) { hit = RandomFunction.random(calculateHit(entity, victim, 1.3546)); @@ -64,5 +65,6 @@ public final class ShatterSpecialHandler extends MeleeSwingHandler implements Pl @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/SliceAndDiceSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/SliceAndDiceSpecialHandler.java index 2d0ed1c20..1274fea7d 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/SliceAndDiceSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/SliceAndDiceSpecialHandler.java @@ -102,5 +102,6 @@ public final class SliceAndDiceSpecialHandler extends MeleeSwingHandler implemen @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/SmashSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/SmashSpecialHandler.java index fdb96887b..4ad800f00 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/SmashSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/SmashSpecialHandler.java @@ -53,6 +53,7 @@ public final class SmashSpecialHandler extends MeleeSwingHandler implements Plug if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.0, 1.0)) { hit = RandomFunction.random(calculateHit(entity, victim, RandomFunction.random(1.0, 1.5))); @@ -66,5 +67,6 @@ public final class SmashSpecialHandler extends MeleeSwingHandler implements Plug @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/SnapshotSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/SnapshotSpecialHandler.java index 634e62391..47db545f4 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/SnapshotSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/SnapshotSpecialHandler.java @@ -60,6 +60,7 @@ public final class SnapshotSpecialHandler extends RangeSwingHandler implements P if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.RANGE); int max = calculateHit(entity, victim, 1.0); state.setMaximumHit(max); int hit = 0; @@ -104,5 +105,6 @@ public final class SnapshotSpecialHandler extends RangeSwingHandler implements P Projectile.create(entity, victim, 249, 40, 36, 20, speed, 15, 11).send(); speed = (int) (32 + (entity.getLocation().getDistance(victim.getLocation()) * 10)); Projectile.create(entity, victim, 249, 40, 36, 50, speed, 15, 11).send(); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/SnipeSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/SnipeSpecialHandler.java index 1a1aa5d25..f085d97ca 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/SnipeSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/SnipeSpecialHandler.java @@ -55,6 +55,7 @@ public final class SnipeSpecialHandler extends RangeSwingHandler implements Plug if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.RANGE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.RANGE, 1.05, 1.0)) { hit = RandomFunction.random(calculateHit(entity, victim, 1.0)); @@ -69,5 +70,6 @@ public final class SnipeSpecialHandler extends RangeSwingHandler implements Plug public void visualize(Entity entity, Entity victim, BattleState state) { entity.animate(ANIMATION); Projectile.create(entity, victim, 698, 36, 25, 35, 72).send(); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/SpearWallSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/SpearWallSpecialHandler.java index af10d33a3..3f51ac8e8 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/SpearWallSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/SpearWallSpecialHandler.java @@ -83,6 +83,7 @@ public final class SpearWallSpecialHandler extends MeleeSwingHandler implements BattleState s = targets[count++] = new BattleState(entity, e); int hit = 0; hit = RandomFunction.random(calculateHit(entity, e, 1.0)); + s.setStyle(CombatStyle.MELEE); s.setEstimatedHit(hit); } } @@ -93,6 +94,7 @@ public final class SpearWallSpecialHandler extends MeleeSwingHandler implements @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } @Override diff --git a/Server/src/main/java/core/game/node/entity/combat/special/SweepSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/SweepSpecialHandler.java index 2f2a92bbb..3ec759942 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/SweepSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/SweepSpecialHandler.java @@ -61,6 +61,7 @@ public final class SweepSpecialHandler extends MeleeSwingHandler implements Plug BattleState[] targets = getTargets(entity, victim, state); state.setTargets(targets); for (BattleState s : targets) { + s.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, s.getVictim(), CombatStyle.MELEE, 1, 0.94)) { hit = RandomFunction.random(calculateHit(entity, s.getVictim(), 1.1)); @@ -156,6 +157,7 @@ public final class SweepSpecialHandler extends MeleeSwingHandler implements Plug @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } diff --git a/Server/src/main/java/core/game/node/entity/combat/special/WarstrikeSpecialHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/WarstrikeSpecialHandler.java index 0e6bbd4c4..470f8de86 100644 --- a/Server/src/main/java/core/game/node/entity/combat/special/WarstrikeSpecialHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/special/WarstrikeSpecialHandler.java @@ -53,6 +53,7 @@ public final class WarstrikeSpecialHandler extends MeleeSwingHandler implements if (!((Player) entity).getSettings().drainSpecial(SPECIAL_ENERGY)) { return -1; } + state.setStyle(CombatStyle.MELEE); int hit = 0; if (isAccurateImpact(entity, victim, CombatStyle.MELEE, 1.049, 0.98)) { hit = RandomFunction.random(calculateHit(entity, victim, 1.1)); @@ -84,5 +85,6 @@ public final class WarstrikeSpecialHandler extends MeleeSwingHandler implements @Override public void visualize(Entity entity, Entity victim, BattleState state) { entity.visualize(ANIMATION, GRAPHIC); + addExperience(entity, victim, state); } } 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 f0602227b..4a8278c63 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 @@ -497,6 +497,9 @@ public class Player extends Entity { details.getSession().disconnect(); getSession().setLastPing(Long.MAX_VALUE); } + if(getAttribute("infinite-special", false)) { + settings.setSpecialEnergy(100); + } //Decrements prayer points getPrayer().tick(); @@ -1384,4 +1387,4 @@ public class Player extends Entity { state.getPulse().stop(); states.remove(key); } -} \ No newline at end of file +} diff --git a/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MagicSwingHandler.kt b/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MagicSwingHandler.kt index 7fcfe518a..f5785e7e1 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MagicSwingHandler.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MagicSwingHandler.kt @@ -88,7 +88,6 @@ open class MagicSwingHandler } if(state.estimatedHit > victim.skills.lifepoints) state.estimatedHit = victim.skills.lifepoints if(state.estimatedHit + state.secondaryHit > victim.skills.lifepoints) state.secondaryHit -= ((state.estimatedHit + state.secondaryHit) - victim.skills.lifepoints) - addExperience(entity, victim, state) return ticks } @@ -112,6 +111,7 @@ open class MagicSwingHandler override fun visualize(entity: Entity, victim: Entity?, state: BattleState?) { state!!.spell.visualize(entity, victim) + addExperience(entity, victim, state) } override fun impact(entity: Entity?, victim: Entity?, state: BattleState?) { @@ -274,4 +274,4 @@ open class MagicSwingHandler ArmourSet.AHRIM } else super.getArmourSet(e) } -} \ No newline at end of file +} diff --git a/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MeleeSwingHandler.kt b/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MeleeSwingHandler.kt index 3b8346b79..67839e677 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MeleeSwingHandler.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MeleeSwingHandler.kt @@ -82,12 +82,12 @@ open class MeleeSwingHandler if (state.estimatedHit > victim.skills.lifepoints) state.estimatedHit = victim.skills.lifepoints if (state.estimatedHit + state.secondaryHit > victim.skills.lifepoints) state.secondaryHit -= ((state.estimatedHit + state.secondaryHit) - victim.skills.lifepoints) } - addExperience(entity, victim, state) return 1 } override fun visualize(entity: Entity, victim: Entity?, state: BattleState?) { entity.animate(entity.properties.attackAnimation) + addExperience(entity, victim, state) } override fun impact(entity: Entity?, victim: Entity?, state: BattleState?) { @@ -347,4 +347,4 @@ open class MeleeSwingHandler return entity.centerLocation.withinDistance(victim.centerLocation, distance + (size shr 1) + (victim.size() shr 1)) } } -} \ No newline at end of file +} diff --git a/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/RangeSwingHandler.kt b/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/RangeSwingHandler.kt index 7072bbec3..c40eaac9d 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/RangeSwingHandler.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/RangeSwingHandler.kt @@ -99,7 +99,6 @@ open class RangeSwingHandler if(state.estimatedHit > victim.skills.lifepoints) state.estimatedHit = victim.skills.lifepoints if(state.estimatedHit + state.secondaryHit > victim.skills.lifepoints) state.secondaryHit -= ((state.estimatedHit + state.secondaryHit) - victim.skills.lifepoints) useAmmo(entity, state, victim.location) - addExperience(entity, victim, state) return 1 + ceil(entity.location.getDistance(victim.location) * 0.3).toInt() } @@ -210,6 +209,7 @@ open class RangeSwingHandler } } entity.visualize(entity.properties.attackAnimation, start) + addExperience(entity, victim, state) } override fun impact(entity: Entity?, victim: Entity?, state: BattleState?) { @@ -435,4 +435,4 @@ open class RangeSwingHandler } } } -} \ No newline at end of file +} diff --git a/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt b/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt index 244ad3bd9..9512ea54c 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt @@ -455,6 +455,17 @@ class MiscCommandSet : CommandSet(Command.Privilege.ADMIN){ notify(player,"No parent NPC found.") } } + define("infinitespecial",Command.Privilege.ADMIN){player,args -> + val usageStr = "Usage: ::infinitespecial true|false" + if(args.size < 2){ + reject(player, usageStr) + } + when(args[1]){ + "true" -> player.setAttribute("infinite-special", true) + "false" -> player.removeAttribute("infinite-special") + else -> reject(player, usageStr) + } + } } fun showGeSell(player: Player){ @@ -584,4 +595,4 @@ class MiscCommandSet : CommandSet(Command.Privilege.ADMIN){ } class FakeOffer(val sell: Boolean,val name: String,val amount: Int) -} \ No newline at end of file +}