21class KalphiteQueen : MultiStrategy() {
23 private var transforming = false
25 private var switchingStyles = false
28 currentStrategy = melee
31 override fun canAttack(attacker: Npc, defender: Mob) =
32 super.canAttack(attacker, defender) && !transforming
34 override fun canOtherAttack(attacker: Mob, defender: Npc) =
35 super.canOtherAttack(attacker, defender) && !transforming
37 override fun performChecks(attacker: Npc, defender: Mob) {
38 if(RandomUtils.inclusive(2) == 1) {
39 val strategies = (if (attacker.id == PHASE1_ID) phase1Strats else phase2Strats)
41 it.canAttack(attacker, defender) && it.withinDistance(attacker, defender)
43 val strategy = RandomUtils.random(strategies) ?: return
44 currentStrategy = strategy
45 switchingStyles = true
47 super.performChecks(attacker, defender)
50 override fun attack(attacker: Npc?, defender: Mob?, hit: Hit?) {
51 switchingStyles = false
52 super.attack(attacker, defender, hit)
54 override fun block(attacker: Mob, defender: Npc, hit: Hit, combatType: CombatType) {
56 if ((id == PHASE1_ID && combatType.match(CombatType.MAGIC, CombatType.RANGED))
57 || (id == PHASE2_ID && combatType.match(CombatType.MELEE))
59 val newDamage = (hit.damage * 0.4).toInt()
60 hit.damage = newDamage
61 if (newDamage < 1) hit.isAccurate = false
63 super.block(attacker, defender, hit, combatType)
66 override fun preDeath(attacker: Mob, defender: Npc, hit: Hit) {
67 if (defender.getId() == PHASE1_ID) {
68 defender.isDead = false
70 attacker.combat.reset()
71 defender.combat.reset(true)
72 defender.canAttack = false
73 defender.animate(6242)
74 defender.locking.lock()
77 currentStrategy = randomStrategy(phase2Strats)
78 defender.transform(PHASE2_ID)
79 defender.canAttack = false
80 defender.graphic(PHASE_SWITCH_GFX)
81 defender.animate(PHASE_SWITCH_ANIM)
84 defender.combat.reset(true)
85 defender.canAttack = true
86 defender.locking.unlock()
87 defender.combat.attack(attacker)
93 if (defender.getId() == PHASE2_ID) {
95 defender.transform(PHASE1_ID)
99 super.preDeath(attacker, defender, hit)
102 override fun onDeath(attacker: Mob, defender: Npc, hit: Hit) {
103 super.onDeath(attacker, defender, hit)
106 override fun getAttackDelay(attacker: Npc?, defender: Mob?, fightType: FightType?): Int {
107 return if(switchingStyles) 7 else 4
111 const val PHASE1_ID = 963
112 const val PHASE2_ID = 965
114 val PHASE_SWITCH_GFX = Graphic(1055)
115 val PHASE_SWITCH_ANIM = Animation(6270)
117 val melee: NpcMeleeStrategy = NpcMeleeStrategy.get()
119 val phase1Strats: Array<CombatStrategy<Npc>> =
120 createStrategyArray(KalphiteQueenMagicStrategy.phase1, KalphiteQueenRangedStrategy.phase1, melee)
121 val phase2Strats: Array<CombatStrategy<Npc>> =
122 createStrategyArray(KalphiteQueenMagicStrategy.phase2, KalphiteQueenRangedStrategy.phase2, melee)