RuneHive-Game
Loading...
Searching...
No Matches
KreeArra.java
Go to the documentation of this file.
1package com.runehive.game.world.entity.combat.strategy.npc.boss.armadyl;
2
3import com.runehive.game.Animation;
4import com.runehive.game.UpdatePriority;
5import com.runehive.game.world.entity.combat.CombatType;
6import com.runehive.game.world.entity.combat.attack.FightType;
7import com.runehive.game.world.entity.combat.hit.CombatHit;
8import com.runehive.game.world.entity.combat.hit.Hit;
9import com.runehive.game.world.entity.combat.hit.HitIcon;
10import com.runehive.game.world.entity.combat.projectile.CombatProjectile;
11import com.runehive.game.world.entity.combat.strategy.CombatStrategy;
12import com.runehive.game.world.entity.combat.strategy.npc.MultiStrategy;
13import com.runehive.game.world.entity.combat.strategy.npc.NpcMagicStrategy;
14import com.runehive.game.world.entity.combat.strategy.npc.NpcMeleeStrategy;
15import com.runehive.game.world.entity.combat.strategy.npc.NpcRangedStrategy;
16import com.runehive.game.world.entity.mob.Mob;
17import com.runehive.game.world.entity.mob.npc.Npc;
18
19import static com.runehive.game.world.entity.combat.CombatUtil.createStrategyArray;
20import static com.runehive.game.world.entity.combat.CombatUtil.randomStrategy;
21
22public class KreeArra extends MultiStrategy {
23 private static final Ranged RANGED = new Ranged();
24 private static final Magic MAGIC = new Magic();
25 private static final Melee MELEE = new Melee();
26
27 private boolean melee;
28
29 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(MAGIC, RANGED);
30
31 public KreeArra() {
33 }
34
35 @Override
36 public boolean canOtherAttack(Mob attacker, Npc defender) {
37 if (attacker.isPlayer() && attacker.getStrategy().getCombatType().equals(CombatType.MELEE)) {
38 attacker.getPlayer().message("You can't attack Armadyl with melee!");
39 return false;
40 }
41 return super.canOtherAttack(attacker, defender);
42 }
43
44 @Override
45 public boolean canAttack(Npc attacker, Mob defender) {
46 boolean isTarget = attacker.equals(defender.getCombat().getDefender());
47 if (!melee && !isTarget) {
49 melee = true;
50 } else if (isTarget) melee = false;
51 return super.canAttack(attacker, defender);
52 }
53
54 @Override
55 public boolean withinDistance(Npc attacker, Mob defender) {
56 boolean isTarget = attacker.equals(defender.getCombat().getDefender());
57 if (!melee && !isTarget) {
59 melee = true;
60 } else if (isTarget) melee = false;
61 return super.withinDistance(attacker, defender);
62 }
63
64 @Override
65 public void finishOutgoing(Npc attacker, Mob defender) {
66 super.finishOutgoing(attacker, defender);
67 boolean isTarget = attacker.equals(defender.getCombat().getDefender());
68 if (!melee && !isTarget) {
70 melee = true;
71 } else {
72 currentStrategy = randomStrategy(NON_MELEE);
73 if (isTarget) melee = false;
74 }
75 }
76
77 @Override
78 public int getAttackDelay(Npc attacker, Mob defender, FightType fightType) {
79 return attacker.definition.getAttackDelay();
80 }
81
82 private static class Ranged extends NpcRangedStrategy {
83 public Ranged() {
84 super(CombatProjectile.getDefinition("Armadyl ranged"));
85 }
86
87 @Override
88 public CombatHit[] getHits(Npc attacker, Mob defender) {
89 return new CombatHit[] { nextRangedHit(attacker, defender, 71) };
90 }
91 }
92
93 private static class Magic extends NpcMagicStrategy {
94 public Magic() {
95 super(CombatProjectile.getDefinition("Armadyl magic"));
96 }
97
98 @Override
99 public void hit(Npc attacker, Mob defender, Hit hit) {
100 if (hit.isAccurate())
101 super.hit(attacker, defender, hit);
102 }
103
104 @Override
105 public CombatHit[] getHits(Npc attacker, Mob defender) {
106 CombatHit hit = nextRangedHit(attacker, defender, 21);
107 hit.setIcon(HitIcon.MAGIC);
108 return new CombatHit[] { hit };
109 }
110 }
111
112 private static class Melee extends NpcMeleeStrategy {
113 private static final Animation ANIMATION = new Animation(6981, UpdatePriority.HIGH);
114
115 @Override
116 public Animation getAttackAnimation(Npc attacker, Mob defender) {
117 return ANIMATION;
118 }
119
120 @Override
121 public CombatHit[] getHits(Npc attacker, Mob defender) {
122 return new CombatHit[] { nextMeleeHit(attacker, defender, 26) };
123 }
124 }
125
126}
Class that models a single animation used by an entity.
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)
int getAttackDelay(Npc attacker, Mob defender, FightType fightType)
Definition KreeArra.java:78
Handles the mob class.
Definition Mob.java:66
abstract< T extends Mob > CombatStrategy<? super T > getStrategy()
The combat strategy of the mob.
abstract Combat<? extends Mob > getCombat()
The combat of the mob.
final boolean isPlayer()
Check if an entity is a player.
Definition Mob.java:564
Represents a non-player character in the in-game world.
Definition Npc.java:29
Represents different priorities for updating.
The enumerated type whose elements represent the fighting types.
The enumerated type whose elements represent the hit icon of a Hit.
Definition HitIcon.java:8
MAGIC
Represents the magic hat hit icon.
Definition HitIcon.java:20