Merge branch 'exp' into 'master'

Fix combat xp from summoning

See merge request 2009scape/2009scape!332
This commit is contained in:
Ceikry 2021-11-16 22:40:33 +00:00
commit 831adb5e8a
36 changed files with 86 additions and 178 deletions

View file

@ -51,3 +51,4 @@
- Fixed Typo in Professor Oddenstein's dialogue - Fixed Typo in Professor Oddenstein's dialogue
- Random Events can no longer spawn in the wilderness. - Random Events can no longer spawn in the wilderness.
- Fairy rings emit a sound when teleporting. - Fairy rings emit a sound when teleporting.
- Summoning familiars now grant combat xp when attacking

View file

@ -336,4 +336,18 @@ public final class BattleState {
public Entity getAttacker() { public Entity getAttacker() {
return entity; 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;
}
} }

View file

@ -146,7 +146,6 @@ public final class ChinchompaSwingHandler extends RangeSwingHandler {
s.getVictim().animate(s.getVictim().getProperties().getDefenceAnimation()); s.getVictim().animate(s.getVictim().getProperties().getDefenceAnimation());
} }
} }
addExperience(entity, victim, state);
} }
/** /**

View file

@ -73,6 +73,5 @@ public final class AncientMaceSpecialHandler extends MeleeSwingHandler implement
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -71,6 +71,5 @@ public final class BackstabSpecialHandler extends MeleeSwingHandler implements P
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -107,7 +107,6 @@ public final class ChainhitSpecialHandler extends RangeSwingHandler implements P
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
int speed = (int) (32 + (entity.getLocation().getDistance(victim.getLocation()) * 5)); int speed = (int) (32 + (entity.getLocation().getDistance(victim.getLocation()) * 5));
Projectile.create(entity, victim, 258, 40, 36, 32, speed, 5, 11).send(); Projectile.create(entity, victim, 258, 40, 36, 32, speed, 5, 11).send();
addExperience(entity, victim, state);
} }
@Override @Override

View file

@ -66,6 +66,5 @@ public final class CleaveSpecialHandler extends MeleeSwingHandler implements Plu
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -73,6 +73,5 @@ public final class ClobberSpecialHandler extends MeleeSwingHandler implements Pl
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -146,6 +146,5 @@ public final class DescentOfDarknessSpecialHandler extends RangeSwingHandler imp
@Override @Override
public void visualizeImpact(Entity entity, Entity victim, BattleState state) { public void visualizeImpact(Entity entity, Entity victim, BattleState state) {
victim.visualize(victim.getProperties().getDefenceAnimation(), state.isFrozen() ? DRAGON_IMPACT : DARKNESS_IMPACT); victim.visualize(victim.getProperties().getDefenceAnimation(), state.isFrozen() ? DRAGON_IMPACT : DARKNESS_IMPACT);
addExperience(entity, victim, state);
} }
} }

View file

@ -70,6 +70,5 @@ public final class EnergyDrainSpecialHandler extends MeleeSwingHandler implement
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.animate(ANIMATION); entity.animate(ANIMATION);
victim.graphics(GRAPHIC); victim.graphics(GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -59,6 +59,5 @@ public final class FeintSpecialHandler extends MeleeSwingHandler implements Plug
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.animate(ANIMATION); entity.animate(ANIMATION);
addExperience(entity, victim, state);
} }
} }

View file

@ -76,7 +76,6 @@ public final class HealingBladeSpecialHandler extends MeleeSwingHandler implemen
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -75,6 +75,5 @@ public final class IceCleaveSpecialHandler extends MeleeSwingHandler implements
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -69,6 +69,5 @@ public final class ImpaleSpecialHandler extends MeleeSwingHandler implements Plu
return; return;
} }
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -66,6 +66,5 @@ public final class JudgementSpecialHandler extends MeleeSwingHandler implements
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -68,6 +68,5 @@ public final class PowershotSpecialHandler extends RangeSwingHandler implements
entity.visualize(state.getRangeWeapon().getAnimation(), GRAPHIC); entity.visualize(state.getRangeWeapon().getAnimation(), GRAPHIC);
int speed = (int) (46 + (entity.getLocation().getDistance(victim.getLocation()) * 5)); int speed = (int) (46 + (entity.getLocation().getDistance(victim.getLocation()) * 5));
Projectile.create(entity, victim, 249, 40, 36, 45, speed, 5, 11).send(); Projectile.create(entity, victim, 249, 40, 36, 45, speed, 5, 11).send();
addExperience(entity, victim, state);
} }
} }

View file

@ -95,7 +95,6 @@ public final class PowerstabSpecialHandler extends MeleeSwingHandler implements
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
@Override @Override

View file

@ -81,6 +81,5 @@ public final class PunctureSpecialHandler extends MeleeSwingHandler implements P
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -76,7 +76,6 @@ public final class SaradominsLightningHandler extends MeleeSwingHandler implemen
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
@Override @Override

View file

@ -79,6 +79,5 @@ public final class SeverSpecialHandler extends MeleeSwingHandler implements Plug
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -65,6 +65,5 @@ public final class ShatterSpecialHandler extends MeleeSwingHandler implements Pl
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -102,6 +102,5 @@ public final class SliceAndDiceSpecialHandler extends MeleeSwingHandler implemen
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -67,6 +67,5 @@ public final class SmashSpecialHandler extends MeleeSwingHandler implements Plug
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -105,6 +105,5 @@ public final class SnapshotSpecialHandler extends RangeSwingHandler implements P
Projectile.create(entity, victim, 249, 40, 36, 20, speed, 15, 11).send(); Projectile.create(entity, victim, 249, 40, 36, 20, speed, 15, 11).send();
speed = (int) (32 + (entity.getLocation().getDistance(victim.getLocation()) * 10)); speed = (int) (32 + (entity.getLocation().getDistance(victim.getLocation()) * 10));
Projectile.create(entity, victim, 249, 40, 36, 50, speed, 15, 11).send(); Projectile.create(entity, victim, 249, 40, 36, 50, speed, 15, 11).send();
addExperience(entity, victim, state);
} }
} }

View file

@ -70,6 +70,5 @@ public final class SnipeSpecialHandler extends RangeSwingHandler implements Plug
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.animate(ANIMATION); entity.animate(ANIMATION);
Projectile.create(entity, victim, 698, 36, 25, 35, 72).send(); Projectile.create(entity, victim, 698, 36, 25, 35, 72).send();
addExperience(entity, victim, state);
} }
} }

View file

@ -94,7 +94,6 @@ public final class SpearWallSpecialHandler extends MeleeSwingHandler implements
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
@Override @Override

View file

@ -157,7 +157,6 @@ public final class SweepSpecialHandler extends MeleeSwingHandler implements Plug
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -85,6 +85,5 @@ public final class WarstrikeSpecialHandler extends MeleeSwingHandler implements
@Override @Override
public void visualize(Entity entity, Entity victim, BattleState state) { public void visualize(Entity entity, Entity victim, BattleState state) {
entity.visualize(ANIMATION, GRAPHIC); entity.visualize(ANIMATION, GRAPHIC);
addExperience(entity, victim, state);
} }
} }

View file

@ -310,6 +310,7 @@ public abstract class MagicSpell implements Plugin<SpellType> {
* @param hit The hit. * @param hit The hit.
*/ */
public void addExperience(Entity entity, int hit) { public void addExperience(Entity entity, int hit) {
entity.getSkills().addExperience(Skills.MAGIC, experience, true);
if (!(entity instanceof Player) || hit < 1) { if (!(entity instanceof Player) || hit < 1) {
return; return;
} }

View file

@ -417,6 +417,7 @@ class CombatPulse(
entity.faceTemporary(victim, 1) // face back to entity. entity.faceTemporary(victim, 1) // face back to entity.
} }
handler.adjustBattleState(entity, victim!!, state) handler.adjustBattleState(entity, victim!!, state)
handler.addExperience(entity, victim, state)
handler.visualize(entity, victim, state) handler.visualize(entity, victim, state)
if (delay - 1 < 1) { if (delay - 1 < 1) {
handler.visualizeImpact(entity, victim, state) handler.visualizeImpact(entity, victim, state)

View file

@ -407,7 +407,55 @@ abstract class CombatSwingHandler(var type: CombatStyle?) {
* @param victim The victim. * @param victim The victim.
* @param state The battle state. * @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. * Gets the formated hit.

View file

@ -111,14 +111,10 @@ open class MagicSwingHandler
override fun visualize(entity: Entity, victim: Entity?, state: BattleState?) { override fun visualize(entity: Entity, victim: Entity?, state: BattleState?) {
state!!.spell.visualize(entity, victim) state!!.spell.visualize(entity, victim)
addExperience(entity, victim, state)
} }
override fun impact(entity: Entity?, victim: Entity?, state: BattleState?) { override fun impact(entity: Entity?, victim: Entity?, state: BattleState?) {
if (state!!.spell != null && entity is Player) { if (state!!.targets == null) {
entity.getSkills().addExperience(Skills.MAGIC, state.spell.experience)
}
if (state.targets == null) {
if (state.estimatedHit > -1) { if (state.estimatedHit > -1) {
victim!!.impactHandler.handleImpact(entity, state.estimatedHit, CombatStyle.MAGIC, state) 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?) { override fun addExperience(entity: Entity?, victim: Entity?, state: BattleState?) {
if (entity is Player) { if (state?.spell != null && entity is Player) {
if (victim is Player && entity.asPlayer().ironmanManager.isIronman) { state.spell.addExperience(entity, state.totalDamage)
return return
} }
var hit = 0
if (state!!.targets != null) { super.addExperience(entity, victim, state)
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)
}
}
} }
override fun getArmourSet(e: Entity?): ArmourSet? { override fun getArmourSet(e: Entity?): ArmourSet? {
return if (ArmourSet.AHRIM.isUsing(e)) { return if (ArmourSet.AHRIM.isUsing(e)) {
ArmourSet.AHRIM ArmourSet.AHRIM

View file

@ -87,7 +87,6 @@ open class MeleeSwingHandler
override fun visualize(entity: Entity, victim: Entity?, state: BattleState?) { override fun visualize(entity: Entity, victim: Entity?, state: BattleState?) {
entity.animate(entity.properties.attackAnimation) entity.animate(entity.properties.attackAnimation)
addExperience(entity, victim, state)
} }
override fun impact(entity: Entity?, victim: Entity?, state: BattleState?) { override fun impact(entity: Entity?, victim: Entity?, state: BattleState?) {
@ -232,50 +231,6 @@ open class MeleeSwingHandler
return 1.0 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? { override fun getArmourSet(e: Entity?): ArmourSet? {
if (ArmourSet.DHAROK.isUsing(e)) { if (ArmourSet.DHAROK.isUsing(e)) {
return ArmourSet.DHAROK return ArmourSet.DHAROK

View file

@ -120,7 +120,9 @@ open class MultiSwingHandler(meleeDistance: Boolean, vararg attacks: SwitchAttac
super.adjustBattleState(entity, victim, state) 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?) { override fun visualizeImpact(entity: Entity?, victim: Entity?, state: BattleState?) {
if (current.isUseHandler) { if (current.isUseHandler) {
current.handler.visualizeImpact(entity, victim, state) current.handler.visualizeImpact(entity, victim, state)

View file

@ -136,63 +136,6 @@ open class RangeSwingHandler
super.adjustBattleState(entity, victim, state) 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?) { override fun visualize(entity: Entity, victim: Entity?, state: BattleState?) {
var start: Graphics? = null var start: Graphics? = null
if (state!!.ammunition != null) { if (state!!.ammunition != null) {
@ -221,7 +164,6 @@ open class RangeSwingHandler
} }
} }
entity.visualize(entity.properties.attackAnimation, start) entity.visualize(entity.properties.attackAnimation, start)
addExperience(entity, victim, state)
} }
override fun impact(entity: Entity?, victim: Entity?, state: BattleState?) { override fun impact(entity: Entity?, victim: Entity?, state: BattleState?) {

View file

@ -1,5 +1,6 @@
package rs09.game.system.command.sets package rs09.game.system.command.sets
import core.game.node.entity.player.link.SpellBookManager
import core.game.node.item.Item import core.game.node.item.Item
import core.plugin.Initializable import core.plugin.Initializable
import org.rs09.consts.Items 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)
}
} }
} }