RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
KreeArra.java
1package com.osroyale.game.world.entity.combat.strategy.npc.boss.armadyl;
2
3import com.osroyale.game.Animation;
4import com.osroyale.game.UpdatePriority;
5import com.osroyale.game.world.entity.combat.CombatType;
6import com.osroyale.game.world.entity.combat.attack.FightType;
7import com.osroyale.game.world.entity.combat.hit.CombatHit;
8import com.osroyale.game.world.entity.combat.hit.Hit;
9import com.osroyale.game.world.entity.combat.hit.HitIcon;
10import com.osroyale.game.world.entity.combat.projectile.CombatProjectile;
11import com.osroyale.game.world.entity.combat.strategy.CombatStrategy;
12import com.osroyale.game.world.entity.combat.strategy.npc.MultiStrategy;
13import com.osroyale.game.world.entity.combat.strategy.npc.NpcMagicStrategy;
14import com.osroyale.game.world.entity.combat.strategy.npc.NpcMeleeStrategy;
15import com.osroyale.game.world.entity.combat.strategy.npc.NpcRangedStrategy;
16import com.osroyale.game.world.entity.mob.Mob;
17import com.osroyale.game.world.entity.mob.npc.Npc;
18
19import static com.osroyale.game.world.entity.combat.CombatUtil.createStrategyArray;
20import static com.osroyale.game.world.entity.combat.CombatUtil.randomStrategy;
21
53
54public class KreeArra extends MultiStrategy {
55 private static final Ranged RANGED = new Ranged();
56 private static final Magic MAGIC = new Magic();
57 private static final Melee MELEE = new Melee();
58
59 private boolean melee;
60
61 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(MAGIC, RANGED);
62
63 public KreeArra() {
64 currentStrategy = MELEE;
65 }
66
67 @Override
68 public boolean canOtherAttack(Mob attacker, Npc defender) {
69 if (attacker.isPlayer() && attacker.getStrategy().getCombatType().equals(CombatType.MELEE)) {
70 attacker.getPlayer().message("You can't attack Armadyl with melee!");
71 return false;
72 }
73 return super.canOtherAttack(attacker, defender);
74 }
75
76 @Override
77 public boolean canAttack(Npc attacker, Mob defender) {
78 boolean isTarget = attacker.equals(defender.getCombat().getDefender());
79 if (!melee && !isTarget) {
80 currentStrategy = MELEE;
81 melee = true;
82 } else if (isTarget) melee = false;
83 return super.canAttack(attacker, defender);
84 }
85
86 @Override
87 public boolean withinDistance(Npc attacker, Mob defender) {
88 boolean isTarget = attacker.equals(defender.getCombat().getDefender());
89 if (!melee && !isTarget) {
90 currentStrategy = MELEE;
91 melee = true;
92 } else if (isTarget) melee = false;
93 return super.withinDistance(attacker, defender);
94 }
95
96 @Override
97 public void finishOutgoing(Npc attacker, Mob defender) {
98 super.finishOutgoing(attacker, defender);
99 boolean isTarget = attacker.equals(defender.getCombat().getDefender());
100 if (!melee && !isTarget) {
101 currentStrategy = MELEE;
102 melee = true;
103 } else {
104 currentStrategy = randomStrategy(NON_MELEE);
105 if (isTarget) melee = false;
106 }
107 }
108
109 @Override
110 public int getAttackDelay(Npc attacker, Mob defender, FightType fightType) {
111 return attacker.definition.getAttackDelay();
112 }
113
114 private static class Ranged extends NpcRangedStrategy {
115 public Ranged() {
116 super(CombatProjectile.getDefinition("Armadyl ranged"));
117 }
118
119 @Override
120 public CombatHit[] getHits(Npc attacker, Mob defender) {
121 return new CombatHit[] { nextRangedHit(attacker, defender, 71) };
122 }
123 }
124
125 private static class Magic extends NpcMagicStrategy {
126 public Magic() {
127 super(CombatProjectile.getDefinition("Armadyl magic"));
128 }
129
130 @Override
131 public void hit(Npc attacker, Mob defender, Hit hit) {
132 if (hit.isAccurate())
133 super.hit(attacker, defender, hit);
134 }
135
136 @Override
137 public CombatHit[] getHits(Npc attacker, Mob defender) {
138 CombatHit hit = nextRangedHit(attacker, defender, 21);
139 hit.setIcon(HitIcon.MAGIC);
140 return new CombatHit[] { hit };
141 }
142 }
143
144 private static class Melee extends NpcMeleeStrategy {
145 private static final Animation ANIMATION = new Animation(6981, UpdatePriority.HIGH);
146
147 @Override
148 public Animation getAttackAnimation(Npc attacker, Mob defender) {
149 return ANIMATION;
150 }
151
152 @Override
153 public CombatHit[] getHits(Npc attacker, Mob defender) {
154 return new CombatHit[] { nextMeleeHit(attacker, defender, 26) };
155 }
156 }
157
158}
abstract< T extends Mob > CombatStrategy<? super T > getStrategy()
abstract Combat<? extends Mob > getCombat()