RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
DemonicGorillas.java
1package com.osroyale.game.world.entity.combat.strategy.npc.boss;
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.prayer.Prayer;
17import com.osroyale.util.RandomUtils;
18import com.osroyale.util.Utility;
19
20import java.util.HashSet;
21import java.util.Set;
22
23import static com.osroyale.game.world.entity.combat.CombatUtil.createStrategyArray;
24import static com.osroyale.game.world.entity.combat.CombatUtil.randomStrategy;
25import static com.osroyale.game.world.entity.combat.projectile.CombatProjectile.getDefinition;
26
66
67public class DemonicGorillas extends MultiStrategy {
68 private static final Melee MELEE = new Melee();
69 private static final Magic MAGIC = new Magic();
70 private static final Ranged RANGED = new Ranged();
71 private static final CombatStrategy<Npc>[] STRATEGIES = createStrategyArray(MAGIC, MELEE, RANGED);
72 private static final Integer[] FORMS = { 7147, 7148, 7149 };
73 private int attackCount = 0;
74 private int damageDealt = 0;
75 private int form = -1;
76
77 public DemonicGorillas() {
78 this.currentStrategy = randomStrategy(STRATEGIES);
79 }
80
81 private CombatStrategy getNextStrategy() {
82 return RandomUtils.randomExclude(STRATEGIES, currentStrategy);
83 }
84
85 private int getNextForm() {
86 return RandomUtils.randomExclude(FORMS, form);
87 }
88
89 @Override
90 public void block(Mob attacker, Npc defender, Hit hit, CombatType combatType) {
91 int nextForm = -1;
92
93 if (form == -1) {
94 nextForm = defender.id;
95 }
96
97 damageDealt += hit.getDamage();
98 if (damageDealt >= 50) {
99 nextForm = getNextForm();
100 damageDealt = 0;
101 attackCount = 0;
102 }
103
104 if (nextForm > -1) {
105 defender.transform(nextForm);
106 form = nextForm;
107
108 if (form == 7147 && !defender.prayer.isActive(Prayer.PROTECT_FROM_MELEE)) {
109 defender.prayer.toggle(Prayer.PROTECT_FROM_MELEE);
110 } else if (form == 7148 && !defender.prayer.isActive(Prayer.PROTECT_FROM_RANGE)) {
111 defender.prayer.toggle(Prayer.PROTECT_FROM_RANGE);
112 } else if (form == 7149 && !defender.prayer.isActive(Prayer.PROTECT_FROM_MAGIC)) {
113 defender.prayer.toggle(Prayer.PROTECT_FROM_MAGIC);
114 }
115 }
116 }
117
118 @Override
119 public void hit(Npc attacker, Mob defender, Hit hit) {
120 super.hit(attacker, defender, hit);
121 if (hit.getDamage() == 0) {
122 attackCount++;
123 if (attackCount >= 3) {
124 currentStrategy = getNextStrategy();
125 attackCount = 0;
126 }
127 }
128 }
129
130 @Override
131 public int modifyDefensive(Mob attacker, Npc defender, int roll) {
132 return (int) (roll * 2.3);
133 }
134
135 private static final class Melee extends NpcMeleeStrategy {
136 private static final Animation ANIMATION = new Animation(7226, UpdatePriority.HIGH);
137
138 @Override
139 public int getAttackDistance(Npc attacker, FightType fightType) {
140 return 2;
141 }
142
143 @Override
144 public Animation getAttackAnimation(Npc attacker, Mob defender) {
145 return ANIMATION;
146 }
147
148 @Override
149 public CombatHit[] getHits(Npc attacker, Mob defender) {
150 return new CombatHit[]{nextMeleeHit(attacker, defender)};
151 }
152 }
153
154 private static class Magic extends NpcMagicStrategy {
155 private static final Animation ANIMATION = new Animation(7238, UpdatePriority.HIGH);
156
157 private Magic() {
158 super(getDefinition("Demonic Gorilla Magic"));
159 }
160
161 @Override
162 public CombatHit[] getHits(Npc attacker, Mob defender) {
163 CombatHit combatHit = nextMagicHit(attacker, defender, 31);
164 combatHit.setAccurate(true);
165 return new CombatHit[]{combatHit};
166 }
167
168 @Override
169 public Animation getAttackAnimation(Npc attacker, Mob defender) {
170 return ANIMATION;
171 }
172
173 @Override
174 public int getAttackDistance(Npc attacker, FightType fightType) {
175 return 10;
176 }
177 }
178
179 private static class Ranged extends NpcRangedStrategy {
180 private static final Animation ANIMATION = new Animation(7227, UpdatePriority.HIGH);
181
182 private Ranged() {
183 super(getDefinition("Demonic Gorilla Ranged"));
184 }
185
186 @Override
187 public CombatHit[] getHits(Npc attacker, Mob defender) {
188 return new CombatHit[]{nextRangedHit(attacker, defender, 31)};
189 }
190
191 @Override
192 public Animation getAttackAnimation(Npc attacker, Mob defender) {
193 return ANIMATION;
194 }
195
196 @Override
197 public int getAttackDistance(Npc attacker, FightType fightType) {
198 return 10;
199 }
200 }
201
202}