RuneHive-Game
Loading...
Searching...
No Matches
TzTokJad.java
Go to the documentation of this file.
1package com.runehive.game.world.entity.combat.strategy.npc.boss;
2
3import com.runehive.game.Animation;
4import com.runehive.game.Graphic;
5import com.runehive.game.Projectile;
6import com.runehive.game.UpdatePriority;
7import com.runehive.game.world.World;
8import com.runehive.game.world.entity.combat.CombatType;
9import com.runehive.game.world.entity.combat.attack.FightType;
10import com.runehive.game.world.entity.combat.hit.CombatHit;
11import com.runehive.game.world.entity.combat.hit.Hit;
12import com.runehive.game.world.entity.combat.strategy.CombatStrategy;
13import com.runehive.game.world.entity.combat.strategy.npc.MultiStrategy;
14import com.runehive.game.world.entity.combat.strategy.npc.NpcMagicStrategy;
15import com.runehive.game.world.entity.combat.strategy.npc.NpcMeleeStrategy;
16import com.runehive.game.world.entity.combat.strategy.npc.NpcRangedStrategy;
17import com.runehive.game.world.entity.mob.Mob;
18import com.runehive.game.world.entity.mob.npc.Npc;
19import com.runehive.game.world.entity.mob.prayer.Prayer;
20
21import static com.runehive.game.world.entity.combat.CombatUtil.createStrategyArray;
22import static com.runehive.game.world.entity.combat.CombatUtil.randomStrategy;
23import static com.runehive.game.world.entity.combat.projectile.CombatProjectile.getDefinition;
24
25/**
26 * @author Daniel
27 */
28public class TzTokJad extends MultiStrategy {
29 private static MeleeAttack MELEE = new MeleeAttack();
30 private static RangedAttack RANGED = new RangedAttack();
31 private static MagicAttack MAGIC = new MagicAttack();
32 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(MELEE, RANGED, MAGIC);
33 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(RANGED, MAGIC);
34
35 public TzTokJad() {
36 currentStrategy = randomStrategy(NON_MELEE);
37 }
38
39 @Override
40 public boolean withinDistance(Npc attacker, Mob defender) {
41 if (!currentStrategy.withinDistance(attacker, defender)) {
42 currentStrategy = randomStrategy(NON_MELEE);
43 }
44 return currentStrategy.withinDistance(attacker, defender);
45 }
46
47 @Override
48 public boolean canAttack(Npc attacker, Mob defender) {
49 if (!currentStrategy.canAttack(attacker, defender)) {
50 currentStrategy = randomStrategy(NON_MELEE);
51 }
52 return currentStrategy.canAttack(attacker, defender);
53 }
54
55 @Override
56 public void block(Mob attacker, Npc defender, Hit hit, CombatType combatType) {
57 currentStrategy.block(attacker, defender, hit, combatType);
58 defender.getCombat().attack(attacker);
59 }
60
61 @Override
62 public void finishOutgoing(Npc attacker, Mob defender) {
63 currentStrategy.finishOutgoing(attacker, defender);
64 if (MELEE.withinDistance(attacker, defender)) {
65 currentStrategy = randomStrategy(FULL_STRATEGIES);
66 } else {
67 currentStrategy = randomStrategy(NON_MELEE);
68 }
69 }
70
71 @Override
72 public int getAttackDelay(Npc attacker, Mob defender, FightType fightType) {
73 return attacker.definition.getAttackDelay();
74 }
75
76 private static class MeleeAttack extends NpcMeleeStrategy {
77
78 @Override
79 public Animation getAttackAnimation(Npc attacker, Mob defender) {
80 return new Animation(2655, UpdatePriority.HIGH);
81 }
82
83 @Override
84 public void hit(Npc attacker, Mob defender, Hit hit) {
86 hit.modifyDamage(damage -> 0);
87 }
88 }
89
90 @Override
91 public CombatHit[] getHits(Npc attacker, Mob defender) {
92 return new CombatHit[]{nextMeleeHit(attacker, defender, 97, 0, 0, false)};
93 }
94 }
95
96 private static class RangedAttack extends NpcRangedStrategy {
97
99 super(getDefinition("EMPTY"));
100 }
101
102 @Override
103 public Animation getAttackAnimation(Npc attacker, Mob defender) {
104 return new Animation(2652, UpdatePriority.HIGH);
105 }
106
107 @Override
108 public void attack(Npc attacker, Mob defender, Hit hit) {
109 }
110
111 @Override
112 public void hit(Npc attacker, Mob defender, Hit hit) {
113 World.sendGraphic(new Graphic(451, 30, UpdatePriority.HIGH), defender.getPosition());
114 defender.graphic(new Graphic(157, 90, true, UpdatePriority.HIGH));
115
117 hit.modifyDamage(damage -> 0);
118 }
119 }
120
121 @Override
122 public void hitsplat(Npc attacker, Mob defender, Hit hit) {
124 hit.modifyDamage(damage -> 0);
125 }
126 }
127
128 @Override
129 public CombatHit[] getHits(Npc attacker, Mob defender) {
130 return new CombatHit[]{nextRangedHit(attacker, defender, 97, 0, 4)};
131 }
132 }
133
134 private static class MagicAttack extends NpcMagicStrategy {
135
136 public MagicAttack() {
137 super(getDefinition("EMPTY"));
138 }
139
140 @Override
141 public Animation getAttackAnimation(Npc attacker, Mob defender) {
142 return new Animation(2656, UpdatePriority.HIGH);
143 }
144
145 @Override
146 public void attack(Npc attacker, Mob defender, Hit hit) {
147 }
148
149 @Override
150 public void hit(Npc attacker, Mob defender, Hit hit) {
151 attacker.graphic(new Graphic(447, 0, 0x1F40000, UpdatePriority.HIGH));
152 World.sendProjectile(attacker, defender, new Projectile(448, 70, 100, 140, 20));
153 World.sendProjectile(attacker, defender, new Projectile(449, 75, 100, 140, 20));
154 World.sendProjectile(attacker, defender, new Projectile(450, 80, 100, 140, 20));
155 defender.graphic(new Graphic(157, 100, true, UpdatePriority.HIGH));
156 }
157
158 @Override
159 public void hitsplat(Npc attacker, Mob defender, Hit hit) {
161 hit.modifyDamage(damage -> 0);
162 }
163 }
164
165 @Override
166 public CombatHit[] getHits(Npc attacker, Mob defender) {
167 CombatHit hit = nextMagicHit(attacker, defender, 97, 0, 4);
168 hit.setAccurate(true);
169 return new CombatHit[]{hit};
170 }
171 }
172
173}
Class that models a single animation used by an entity.
Represents a single graphic that can be used by entities.
Definition Graphic.java:10
Represents the game world.
Definition World.java:46
static void sendGraphic(Graphic graphic, Position position, int instance)
Sends a graphic to the world.
Definition World.java:268
static void sendProjectile(Projectile projectile, Position position, int instance, int lock, byte offsetX, byte offsetY)
Sends a world projectile.
Definition World.java:295
A wrapper for a Hit object, adding additional variables for hit and hitsplat delays.
A Hit object holds the damage amount and hitsplat data.
Definition Hit.java:10
final CombatHit nextRangedHit(T attacker, Mob defender)
final CombatHit nextMagicHit(T attacker, Mob defender)
void block(Mob attacker, Npc defender, Hit hit, CombatType combatType)
Definition TzTokJad.java:56
int getAttackDelay(Npc attacker, Mob defender, FightType fightType)
Definition TzTokJad.java:72
Handles the mob class.
Definition Mob.java:66
Optional< Graphic > graphic
Definition Mob.java:91
Represents a non-player character in the in-game world.
Definition Npc.java:29
Combat< Npc > getCombat()
The combat of the mob.
Definition Npc.java:156
boolean isActive(Prayer... prayers)
Checks if all given prayers are active.
Represents different priorities for updating.
The enumerated type whose elements represent the fighting types.