RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
JalAk.java
1package com.osroyale.content.activity.infernomobs;
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.strategy.CombatStrategy;
10import com.osroyale.game.world.entity.combat.strategy.npc.MultiStrategy;
11import com.osroyale.game.world.entity.combat.strategy.npc.NpcMagicStrategy;
12import com.osroyale.game.world.entity.combat.strategy.npc.NpcMeleeStrategy;
13import com.osroyale.game.world.entity.combat.strategy.npc.NpcRangedStrategy;
14import com.osroyale.game.world.entity.mob.Mob;
15import com.osroyale.game.world.entity.mob.npc.Npc;
16import com.osroyale.game.world.entity.mob.player.Player;
17import com.osroyale.game.world.entity.mob.prayer.Prayer;
18
19import static com.osroyale.game.world.entity.combat.CombatUtil.createStrategyArray;
20import static com.osroyale.game.world.entity.combat.CombatUtil.randomStrategy;
21import static com.osroyale.game.world.entity.combat.projectile.CombatProjectile.getDefinition;
22
53
54public class JalAk extends MultiStrategy {
55
56 private static final CrushMelee MELEE = new CrushMelee();
57 private static final Mage MAGE = new Mage();
58 private static final Ranged RANGE = new Ranged();
59
60 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(RANGE, MAGE, MELEE);
61 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(RANGE, MAGE);
62
63 public JalAk() {
64 currentStrategy = randomStrategy(NON_MELEE);
65 }
66
67 @Override
68 public boolean withinDistance(Npc attacker, Mob defender) {
69 if (!currentStrategy.withinDistance(attacker, defender)) {
70 currentStrategy = randomStrategy(NON_MELEE);
71 }
72 return currentStrategy.withinDistance(attacker, defender);
73 }
74
75 @Override
76 public boolean canAttack(Npc attacker, Mob defender) {
77 if (!currentStrategy.canAttack(attacker, defender)) {
78 currentStrategy = randomStrategy(NON_MELEE);
79 }
80 return currentStrategy.canAttack(attacker, defender);
81 }
82
83 @Override
84 public void block(Mob attacker, Npc defender, Hit hit, CombatType combatType) {
85 currentStrategy.block(attacker, defender, hit, combatType);
86 defender.getCombat().attack(attacker);
87 }
88
89 @Override
90 public void finishOutgoing(Npc attacker, Mob defender) {
91 currentStrategy.finishOutgoing(attacker, defender);
92 if (MELEE.withinDistance(attacker, defender)) {
93 currentStrategy = randomStrategy(FULL_STRATEGIES);
94 } else {
95 currentStrategy = randomStrategy(NON_MELEE);
96 }
97 }
98
99 @Override
100 public int getAttackDelay(Npc attacker, Mob defender, FightType fightType) {
101 return attacker.definition.getAttackDelay();
102 }
103
104 @Override
105 public void hit(Npc attacker, Mob defender, Hit hit) {
106 super.hit(attacker, defender, hit);
107
108 if (!defender.isPlayer())
109 return;
110 Player player = defender.getPlayer();
111
112 if (currentStrategy.getCombatType().equals(CombatType.MELEE)
113 && player.prayer.isActive(Prayer.PROTECT_FROM_MELEE)) {
114 hit.setDamage(0);
115 } else if (currentStrategy.getCombatType().equals(CombatType.RANGED)
116 && player.prayer.isActive(Prayer.PROTECT_FROM_RANGE)) {
117 hit.setDamage(0);
118 } else if (currentStrategy.getCombatType().equals(CombatType.MAGIC)
119 && player.prayer.isActive(Prayer.PROTECT_FROM_MAGIC)) {
120 hit.setDamage(0);
121 }
122 }
123
124 private static final class CrushMelee extends NpcMeleeStrategy {
125 private static final Animation ANIMATION = new Animation(7582, UpdatePriority.HIGH);
126
127 @Override
128 public int getAttackDistance(Npc attacker, FightType fightType) {
129 return 2;
130 }
131
132 @Override
133 public Animation getAttackAnimation(Npc attacker, Mob defender) {
134 return ANIMATION;
135 }
136
137 @Override
138 public CombatHit[] getHits(Npc attacker, Mob defender) {
139 return new CombatHit[] { nextMeleeHit(attacker, defender, 29) };
140 }
141 }
142
143 private static class Mage extends NpcMagicStrategy {
144 private static final Animation ANIMATION = new Animation(7583, UpdatePriority.HIGH);
145
146 private Mage() {
147 super(getDefinition("jalak mage"));
148 }
149
150 @Override
151 public CombatHit[] getHits(Npc attacker, Mob defender) {
152 return new CombatHit[] { nextMagicHit(attacker, defender, 29) };
153 }
154
155 @Override
156 public Animation getAttackAnimation(Npc attacker, Mob defender) {
157 return ANIMATION;
158 }
159 }
160
161 private static class Ranged extends NpcRangedStrategy {
162 private static final Animation ANIMATION = new Animation(7581, UpdatePriority.HIGH);
163
164 private Ranged() {
165 super(getDefinition("jalak range"));
166 }
167
168 @Override
169 public CombatHit[] getHits(Npc attacker, Mob defender) {
170 return new CombatHit[] { nextRangedHit(attacker, defender, 29) };
171 }
172
173 @Override
174 public Animation getAttackAnimation(Npc attacker, Mob defender) {
175 return ANIMATION;
176 }
177 }
178}
abstract Combat<? extends Mob > getCombat()