RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
Porazdir.java
1package com.osroyale.game.world.entity.combat.strategy.npc.boss.magearena;
2
3import com.osroyale.game.Animation;
4import com.osroyale.game.Graphic;
5import com.osroyale.game.Projectile;
6import com.osroyale.game.UpdatePriority;
7import com.osroyale.game.world.World;
8import com.osroyale.game.world.entity.combat.CombatType;
9import com.osroyale.game.world.entity.combat.CombatUtil;
10import com.osroyale.game.world.entity.combat.attack.FightType;
11import com.osroyale.game.world.entity.combat.hit.CombatHit;
12import com.osroyale.game.world.entity.combat.hit.Hit;
13import com.osroyale.game.world.entity.combat.projectile.CombatProjectile;
14import com.osroyale.game.world.entity.combat.strategy.CombatStrategy;
15import com.osroyale.game.world.entity.combat.strategy.npc.MultiStrategy;
16import com.osroyale.game.world.entity.combat.strategy.npc.NpcMagicStrategy;
17import com.osroyale.game.world.entity.combat.strategy.npc.NpcMeleeStrategy;
18import com.osroyale.game.world.entity.combat.strategy.npc.NpcRangedStrategy;
19import com.osroyale.game.world.entity.mob.Mob;
20import com.osroyale.game.world.entity.mob.npc.Npc;
21import com.osroyale.game.world.entity.mob.prayer.Prayer;
22import com.osroyale.game.world.position.Position;
23import com.osroyale.net.packet.out.SendMessage;
24import com.osroyale.util.RandomUtils;
25import com.osroyale.util.Utility;
26
27import static com.osroyale.game.world.entity.combat.CombatUtil.createStrategyArray;
28import static com.osroyale.game.world.entity.combat.CombatUtil.randomStrategy;
29
69
70public class Porazdir extends MultiStrategy {
71 private static Magic MAGIC = new Magic();
72 private static Melee MELEE = new Melee();
73
74 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(NpcMeleeStrategy.get(), MAGIC);
75 private static final CombatStrategy<Npc>[] MAGIC_STRATEGIES = createStrategyArray(MAGIC, MAGIC, MAGIC);
76 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(MAGIC, MELEE, MELEE, MAGIC, MAGIC);
77
79 public Porazdir() {
80 currentStrategy = MAGIC;
81 currentStrategy = MELEE;
82 }
83
84 @Override
85 public boolean canAttack(Npc attacker, Mob defender) {
86 if (!currentStrategy.canAttack(attacker, defender)) {
87 currentStrategy = randomStrategy(MAGIC_STRATEGIES);
88 currentStrategy = randomStrategy(NON_MELEE);
89 }
90 return currentStrategy.canAttack(attacker, defender);
91 }
92
93 @Override
94 public void block(Mob attacker, Npc defender, Hit hit, CombatType combatType) {
95 currentStrategy.block(attacker, defender, hit, combatType);
96 defender.getCombat().attack(attacker);
97
98 if (!defender.getCombat().isAttacking()) {
99 defender.animate(new Animation(7843, UpdatePriority.VERY_HIGH));
100 defender.graphic(1196);
101 defender.graphic(481);
102 if (Utility.random(1, 25) == 2) {
103 defender.prayer.deactivate(Prayer.PROTECT_FROM_MAGIC, Prayer.PROTECT_FROM_MELEE,
104 Prayer.PROTECT_FROM_RANGE);
105 defender.getPlayer().send(new SendMessage("Your overhead prayers have been disabled!"));
106 }
107 CombatUtil.areaAction(attacker, 64, 18, mob -> {
108 if (RandomUtils.success(.65))
109 return;
110
111 World.schedule(2, () -> {
112 Position destination = Utility.randomElement(defender.boundaries);
113 World.sendGraphic(new Graphic(481), destination);
114 attacker.move(destination);
115
116 });
117 });
118 }
119 }
120
121 @Override
122 public void finishOutgoing(Npc attacker, Mob defender) {
123 currentStrategy.finishOutgoing(attacker, defender);
124 if (NpcMeleeStrategy.get().withinDistance(attacker, defender)) {
125 currentStrategy = randomStrategy(FULL_STRATEGIES);
126 } else {
127 currentStrategy = randomStrategy(MAGIC_STRATEGIES);
128 }
129 }
130
131 @Override
132 public int getAttackDelay(Npc attacker, Mob defender, FightType fightType) {
133 return attacker.definition.getAttackDelay();
134 }
135
136 private static class Melee extends NpcRangedStrategy {
137
138 public Melee() {
139 super(CombatProjectile.getDefinition("EMPTY"));
140 }
141
142 @Override
143 public void hit(Npc attacker, Mob defender, Hit hit) {
144 }
145
146 @Override
147 public void attack(Npc attacker, Mob defender, Hit hit) {
148 }
149
150 @Override
151 public void start(Npc attacker, Mob defender, Hit[] hits) {
152
153 attacker.animate(new Animation(7840, UpdatePriority.VERY_HIGH));
154 CombatHit hit = nextMeleeHit(attacker, defender, 21);
155 defender.graphic(1176);
156 CombatUtil.areaAction(attacker, 64, 18, mob -> {
157 mob.damage(nextMagicHit(attacker, defender, 38));
158 });
159
160 }
161
162 @Override
163 public CombatHit[] getHits(Npc attacker, Mob defender) {
164 CombatHit hit = nextRangedHit(attacker, defender, 38);
165 hit.setAccurate(false);
166 return new CombatHit[] { hit };
167 }
168
169 @Override
170 public int modifyAccuracy(Npc attacker, Mob defender, int roll) {
171 return roll + 50_000;
172 }
173
174 }
175
177 private static class Magic extends NpcMagicStrategy {
178 public Magic() {
179 super(CombatProjectile.getDefinition("EMPTY"));
180 }
181
182 @Override
183 public void hit(Npc attacker, Mob defender, Hit hit) {
184 }
185
186 @Override
187 public void attack(Npc attacker, Mob defender, Hit hit) {
188 }
189
190 @Override
191 public void start(Npc attacker, Mob defender, Hit[] hits) {
192 Projectile projectile = new Projectile(1378, 50, 80, 85, 25);
193 attacker.animate(new Animation(7841, UpdatePriority.VERY_HIGH));
194 CombatUtil.areaAction(attacker, 64, 18, mob -> {
195 projectile.send(attacker, defender);
196 defender.graphic(157);
197 mob.damage(nextMagicHit(attacker, defender, 35));
198
199 });
200
201 if (Utility.random(0, 10) == 1) {
202 attacker.animate(new Animation(7849, UpdatePriority.VERY_HIGH));
203 attacker.graphic(new Graphic(1296, UpdatePriority.VERY_HIGH));
204 attacker.heal(130);
205 attacker.speak("Time To HEAL!");
206 defender.getPlayer().send(new SendMessage("Porazdir heals himself!"));
207
208 }
209
210 }
211
212 @Override
213 public CombatHit[] getHits(Npc attacker, Mob defender) {
214 CombatHit hit = nextMagicHit(attacker, defender, 38);
215 hit.setAccurate(false);
216 return new CombatHit[] { hit };
217 }
218
219 @Override
220 public int modifyAccuracy(Npc attacker, Mob defender, int roll) {
221 return roll + 50_000;
222 }
223 }
224
225}
static void sendGraphic(Graphic graphic, Position position, int instance)
Definition World.java:305
static void schedule(Task task)
Definition World.java:284
static void areaAction(Mob mob, Consumer< Mob > action)
void move(Position position)
Definition Mob.java:377
static< T > T randomElement(Collection< T > collection)
Definition Utility.java:285