diff --git a/CHANGELOG b/CHANGELOG index 7412cbd9b..effd8f47d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -51,3 +51,4 @@ - Fixed Typo in Professor Oddenstein's dialogue - Random Events can no longer spawn in the wilderness. - Fairy rings emit a sound when teleporting. +- Summoning familiars now grant combat xp when attacking \ No newline at end of file diff --git a/Server/src/main/java/core/game/node/entity/combat/BattleState.java b/Server/src/main/java/core/game/node/entity/combat/BattleState.java index 39c3d74f0..17871ede9 100644 --- a/Server/src/main/java/core/game/node/entity/combat/BattleState.java +++ b/Server/src/main/java/core/game/node/entity/combat/BattleState.java @@ -336,4 +336,18 @@ public final class BattleState { public Entity getAttacker() { return entity; } + + public int getTotalDamage() { + int hit = Math.max(estimatedHit, 0) + Math.max(secondaryHit, 0); + + if (targets != null) { + for (BattleState s : targets) { + if (s != null) { + hit += Math.max(s.getEstimatedHit(), 0) + Math.max(s.getSecondaryHit(), 0); + } + } + } + return hit; + } + } \ No newline at end of file diff --git a/Server/src/main/java/core/game/node/entity/combat/handlers/ChinchompaSwingHandler.java b/Server/src/main/java/core/game/node/entity/combat/handlers/ChinchompaSwingHandler.java index 01cf93d59..0bed935e6 100644 --- a/Server/src/main/java/core/game/node/entity/combat/handlers/ChinchompaSwingHandler.java +++ b/Server/src/main/java/core/game/node/entity/combat/handlers/ChinchompaSwingHandler.java @@ -146,7 +146,6 @@ public final class ChinchompaSwingHandler extends RangeSwingHandler { s.getVictim().animate(s.getVictim().getProperties().getDefenceAnimation()); } } - addExperience(entity, victim, state); } /** 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 994b05ffd..60874e957 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 @@ -73,6 +73,5 @@ 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 0f47d7b0b..810f86c62 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 @@ -71,6 +71,5 @@ 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 bbfd85860..e9794799d 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 @@ -107,7 +107,6 @@ 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 c61725229..2cbae7577 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 @@ -66,6 +66,5 @@ 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 6746276e8..ee8969075 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 @@ -73,6 +73,5 @@ 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 7ee191e19..6eb5d076f 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 @@ -146,6 +146,5 @@ 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 8075ceb94..2428593c7 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 @@ -70,6 +70,5 @@ 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 f054a2255..a2362766b 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 @@ -59,6 +59,5 @@ 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 d51afe3b1..40dd3961b 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 @@ -76,7 +76,6 @@ 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 e8e8c6c4d..0c19987f4 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 @@ -75,6 +75,5 @@ 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 c6aff9802..dadc362c8 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 @@ -69,6 +69,5 @@ 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 b94dc0345..a4bf7853b 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 @@ -66,6 +66,5 @@ 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 0689cef06..a1e5e738a 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 @@ -68,6 +68,5 @@ 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 91f4c5324..7b6783add 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 @@ -95,7 +95,6 @@ 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 6b8a03a6f..1b76ac3f7 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 @@ -81,6 +81,5 @@ 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/SaradominsLightningHandler.java b/Server/src/main/java/core/game/node/entity/combat/special/SaradominsLightningHandler.java index 5a6eff92d..c075825e5 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 @@ -76,7 +76,6 @@ 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 b35d98834..be63aa08d 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 @@ -79,6 +79,5 @@ 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 3321b4a5f..40647f3c1 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 @@ -65,6 +65,5 @@ 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 1274fea7d..2d0ed1c20 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,6 +102,5 @@ 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 4ad800f00..10073e108 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 @@ -67,6 +67,5 @@ 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 47db545f4..b7fc1b0c3 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 @@ -105,6 +105,5 @@ 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 f085d97ca..b1fbe0f2c 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 @@ -70,6 +70,5 @@ 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 3f51ac8e8..306924202 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 @@ -94,7 +94,6 @@ 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 3ec759942..be1d5d2b3 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 @@ -157,7 +157,6 @@ 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 470f8de86..ea19448a8 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 @@ -85,6 +85,5 @@ 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/skill/magic/MagicSpell.java b/Server/src/main/java/core/game/node/entity/skill/magic/MagicSpell.java index ba15156cc..987998ce7 100644 --- a/Server/src/main/java/core/game/node/entity/skill/magic/MagicSpell.java +++ b/Server/src/main/java/core/game/node/entity/skill/magic/MagicSpell.java @@ -310,6 +310,7 @@ public abstract class MagicSpell implements Plugin { * @param hit The hit. */ public void addExperience(Entity entity, int hit) { + entity.getSkills().addExperience(Skills.MAGIC, experience, true); if (!(entity instanceof Player) || hit < 1) { return; } 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 dc015aa6f..5525626e2 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 @@ -417,6 +417,7 @@ class CombatPulse( entity.faceTemporary(victim, 1) // face back to entity. } handler.adjustBattleState(entity, victim!!, state) + handler.addExperience(entity, victim, state) handler.visualize(entity, victim, state) if (delay - 1 < 1) { handler.visualizeImpact(entity, victim, state) diff --git a/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatSwingHandler.kt b/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatSwingHandler.kt index ede692df4..51fe1ba49 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatSwingHandler.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatSwingHandler.kt @@ -407,7 +407,55 @@ abstract class CombatSwingHandler(var type: CombatStyle?) { * @param victim The victim. * @param state The battle state. */ - open fun addExperience(entity: Entity?, victim: Entity?, state: BattleState?) {} + open fun addExperience(entity: Entity?, victim: Entity?, state: BattleState?) { + if (entity == null || (victim is Player && entity is Player && entity.asPlayer().ironmanManager.isIronman)) { + return + } + var player: Player + var attStyle: Int + + when(entity) + { + is Familiar -> {player = entity.owner; attStyle = entity.attackStyle} + is Player -> {player = entity; attStyle = entity.properties.attackStyle.style} + else -> return + } + if (state != null) { + val hit = state.totalDamage + var skill = -1 + when (attStyle) { + WeaponInterface.STYLE_DEFENSIVE -> skill = Skills.DEFENCE + WeaponInterface.STYLE_ACCURATE -> skill = Skills.ATTACK + WeaponInterface.STYLE_AGGRESSIVE -> skill = Skills.STRENGTH + WeaponInterface.STYLE_CONTROLLED -> { + var experience = hit * EXPERIENCE_MOD + experience /= 3.0 + player.skills.addExperience(Skills.ATTACK, experience, true) + player.skills.addExperience(Skills.STRENGTH, experience, true) + player.skills.addExperience(Skills.DEFENCE, experience, true) + return + } + + WeaponInterface.STYLE_RANGE_ACCURATE -> skill = Skills.RANGE + WeaponInterface.STYLE_RAPID -> skill = Skills.RANGE + WeaponInterface.STYLE_LONG_RANGE -> { + player.skills.addExperience(Skills.RANGE, hit * (EXPERIENCE_MOD / 2), true) + player.skills.addExperience(Skills.DEFENCE, hit * (EXPERIENCE_MOD / 2), true) + return + } + + WeaponInterface.STYLE_CAST -> skill = Skills.MAGIC + WeaponInterface.STYLE_DEFENSIVE_CAST -> { + player.skills.addExperience(Skills.MAGIC, hit * 1.33, true) + player.skills.addExperience(Skills.DEFENCE, hit.toDouble(), true) + return + } + } + if (skill < 0) return + player.skills.addExperience(skill, hit * EXPERIENCE_MOD, true) + player.skills.addExperience(Skills.HITPOINTS, hit * 1.33, true) + } + } /** * Gets the formated hit. 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 f5785e7e1..3eaab2962 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 @@ -111,14 +111,10 @@ 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?) { - if (state!!.spell != null && entity is Player) { - entity.getSkills().addExperience(Skills.MAGIC, state.spell.experience) - } - if (state.targets == null) { + if (state!!.targets == null) { if (state.estimatedHit > -1) { victim!!.impactHandler.handleImpact(entity, state.estimatedHit, CombatStyle.MAGIC, state) } @@ -224,51 +220,15 @@ open class MagicSwingHandler } override fun addExperience(entity: Entity?, victim: Entity?, state: BattleState?) { - if (entity is Player) { - if (victim is Player && entity.asPlayer().ironmanManager.isIronman) { - return - } - var hit = 0 - if (state!!.targets != null) { - for (s in state.targets) { - if (s != null && s.estimatedHit > 0) { - hit += s.estimatedHit - } - } - } else if (state.estimatedHit > 0) { - hit += state.estimatedHit - } - if (state.spell != null) { - state.spell.addExperience(entity, hit) - } else { - val famExp = entity.getAttribute("fam-exp", false) && entity.familiarManager.hasFamiliar() - if (!famExp) { - entity.getSkills().addExperience(Skills.HITPOINTS, hit * 1.33, true) - } else { - val fam = entity.familiarManager.familiar - var skill = Skills.MAGIC - when (fam.attackStyle) { - WeaponInterface.STYLE_DEFENSIVE -> skill = Skills.DEFENCE - WeaponInterface.STYLE_ACCURATE -> skill = Skills.ATTACK - WeaponInterface.STYLE_AGGRESSIVE -> skill = Skills.STRENGTH - WeaponInterface.STYLE_RANGE_ACCURATE -> skill = Skills.RANGE - WeaponInterface.STYLE_CONTROLLED -> { - var experience = hit * EXPERIENCE_MOD - experience /= 3.0 - entity.getSkills().addExperience(Skills.ATTACK, experience, true) - entity.getSkills().addExperience(Skills.STRENGTH, experience, true) - entity.getSkills().addExperience(Skills.DEFENCE, experience, true) - return - } - } - entity.getSkills().addExperience(skill, hit * EXPERIENCE_MOD, true) - return - } - entity.getSkills().addExperience(Skills.MAGIC, hit * EXPERIENCE_MOD, true) - } + if (state?.spell != null && entity is Player) { + state.spell.addExperience(entity, state.totalDamage) + return } + + super.addExperience(entity, victim, state) } + override fun getArmourSet(e: Entity?): ArmourSet? { return if (ArmourSet.AHRIM.isUsing(e)) { ArmourSet.AHRIM 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 fb394b1b6..65d91bf8f 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 @@ -87,7 +87,6 @@ open class MeleeSwingHandler 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?) { @@ -232,50 +231,6 @@ open class MeleeSwingHandler return 1.0 } - override fun addExperience(entity: Entity?, victim: Entity?, state: BattleState?) { - if (entity is Player && state != null) { - if (victim is Player && entity.asPlayer().ironmanManager.isIronman) { - return - } - var hit = state.estimatedHit - if (hit < 0) { - hit = 0 - } - if (state.secondaryHit > 0) { - hit += state.secondaryHit - } - if(state.targets != null) { - for (s in state.targets) { - if (s != null) { - if(s.estimatedHit > 0) { - hit += s.estimatedHit - } - if(s.secondaryHit > 0) { - hit += s.secondaryHit - } - } - } - } - var experience = hit * EXPERIENCE_MOD - val famExp = entity.getAttribute("fam-exp", false) && entity.familiarManager.hasFamiliar() - if (!famExp) { - entity.getSkills().addExperience(Skills.HITPOINTS, hit * 1.33, true) - } - when (if (famExp) entity.familiarManager.familiar.attackStyle else entity.properties.attackStyle.style) { - WeaponInterface.STYLE_ACCURATE -> entity.skills.addExperience(Skills.ATTACK, experience, true) - WeaponInterface.STYLE_AGGRESSIVE -> entity.skills.addExperience(Skills.STRENGTH, experience, true) - WeaponInterface.STYLE_DEFENSIVE -> entity.skills.addExperience(Skills.DEFENCE, experience, true) - WeaponInterface.STYLE_CONTROLLED -> { - experience /= 3.0 - entity.skills.addExperience(Skills.ATTACK, experience, true) - entity.skills.addExperience(Skills.STRENGTH, experience, true) - entity.skills.addExperience(Skills.DEFENCE, experience, true) - } - WeaponInterface.STYLE_CAST -> entity.skills.addExperience(Skills.MAGIC, experience, true) - } - } - } - override fun getArmourSet(e: Entity?): ArmourSet? { if (ArmourSet.DHAROK.isUsing(e)) { return ArmourSet.DHAROK diff --git a/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MultiSwingHandler.kt b/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MultiSwingHandler.kt index 55be23dd5..ebfcf75f0 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MultiSwingHandler.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/MultiSwingHandler.kt @@ -120,7 +120,9 @@ open class MultiSwingHandler(meleeDistance: Boolean, vararg attacks: SwitchAttac super.adjustBattleState(entity, victim, state) } - override fun addExperience(entity: Entity?, victim: Entity?, state: BattleState?) {} + override fun addExperience(entity: Entity?, victim: Entity?, state: BattleState?) { + current.handler.addExperience(entity, victim, state) + } override fun visualizeImpact(entity: Entity?, victim: Entity?, state: BattleState?) { if (current.isUseHandler) { current.handler.visualizeImpact(entity, victim, state) 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 46c39f8ab..b7f6c564b 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 @@ -136,63 +136,6 @@ open class RangeSwingHandler super.adjustBattleState(entity, victim, state) } - override fun addExperience(entity: Entity?, victim: Entity?, state: BattleState?) { - if (entity is Player) { - if (victim is Player && entity.asPlayer().ironmanManager.isIronman) { - return - } - var hit = state!!.estimatedHit - if (hit < 0) { - hit = 0 - } - if (state.secondaryHit > 0) { - hit += state.secondaryHit - } - if(state.targets != null) { - for (s in state.targets) { - if (s != null) { - if(s.estimatedHit > 0) { - hit += s.estimatedHit - } - if(s.secondaryHit > 0) { - hit += s.secondaryHit - } - } - } - } - val p = entity.asPlayer() - val famExp = entity.getAttribute("fam-exp", false) && p.familiarManager.hasFamiliar() - if (famExp) { - val fam = p.familiarManager.familiar - var skill = Skills.RANGE - when (fam.attackStyle) { - WeaponInterface.STYLE_DEFENSIVE -> skill = Skills.DEFENCE - WeaponInterface.STYLE_ACCURATE -> skill = Skills.ATTACK - WeaponInterface.STYLE_AGGRESSIVE -> skill = Skills.STRENGTH - WeaponInterface.STYLE_RANGE_ACCURATE -> skill = Skills.RANGE - WeaponInterface.STYLE_CONTROLLED -> { - var experience = hit * EXPERIENCE_MOD - experience /= 3.0 - entity.getSkills().addExperience(Skills.ATTACK, experience, true) - entity.getSkills().addExperience(Skills.STRENGTH, experience, true) - entity.getSkills().addExperience(Skills.DEFENCE, experience, true) - return - } - WeaponInterface.STYLE_CAST -> skill = Skills.MAGIC - } - entity.getSkills().addExperience(skill, hit * EXPERIENCE_MOD, true) - return - } - entity.getSkills().addExperience(Skills.HITPOINTS, hit * 1.33, true) - if (entity.getProperties().attackStyle.style == WeaponInterface.STYLE_LONG_RANGE) { - entity.getSkills().addExperience(Skills.RANGE, hit * (EXPERIENCE_MOD / 2), true) - entity.getSkills().addExperience(Skills.DEFENCE, hit * (EXPERIENCE_MOD / 2), true) - } else { - entity.getSkills().addExperience(Skills.RANGE, hit * EXPERIENCE_MOD, true) - } - } - } - override fun visualize(entity: Entity, victim: Entity?, state: BattleState?) { var start: Graphics? = null if (state!!.ammunition != null) { @@ -221,7 +164,6 @@ open class RangeSwingHandler } } entity.visualize(entity.properties.attackAnimation, start) - addExperience(entity, victim, state) } override fun impact(entity: Entity?, victim: Entity?, state: BattleState?) { diff --git a/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt b/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt index 80b38151f..9507ac8ca 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt @@ -1,5 +1,6 @@ package rs09.game.system.command.sets +import core.game.node.entity.player.link.SpellBookManager import core.game.node.item.Item import core.plugin.Initializable import org.rs09.consts.Items @@ -20,6 +21,15 @@ class DevelopmentCommandSet : CommandSet(Command.Privilege.ADMIN) { } } + define("spellbook"){player, args -> + if(args.size < 2){ + reject(player,"Usage: ::spellbook [int]. 0 = MODERN, 1 = ANCIENTS, 2 = LUNARS") + } + val spellBook = SpellBookManager.SpellBook.values()[args[1].toInt()] + player.spellBookManager.setSpellBook(spellBook) + player.spellBookManager.update(player) + } + } } \ No newline at end of file