RuneHive-Game
Loading...
Searching...
No Matches
Wyrm.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.UpdatePriority;
5import com.runehive.game.task.Task;
6import com.runehive.game.world.World;
7import com.runehive.game.world.entity.combat.CombatType;
8import com.runehive.game.world.entity.combat.attack.FightType;
9import com.runehive.game.world.entity.combat.hit.CombatHit;
10import com.runehive.game.world.entity.combat.hit.Hit;
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.mob.Mob;
16import com.runehive.game.world.entity.mob.npc.Npc;
17
18import static com.runehive.game.world.entity.combat.CombatUtil.createStrategyArray;
19import static com.runehive.game.world.entity.combat.CombatUtil.randomStrategy;
20import static com.runehive.game.world.entity.combat.projectile.CombatProjectile.getDefinition;
21
22/**
23 * Created by Daniel on 2017-11-29.
24 */
25public class Wyrm extends MultiStrategy {
26 private static final Melee MELEE = new Melee();
27 private static final Magic MAGIC = new Magic();
28
29 private static final CombatStrategy<Npc>[] STRATEGIES = createStrategyArray(MAGIC, MELEE);
30 private int attackCount = 0;
31
32 public Wyrm() {
33 this.currentStrategy = randomStrategy(STRATEGIES);
34 }
35
36 @Override
37 public boolean withinDistance(Npc attacker, Mob defender) {
38 if (!currentStrategy.withinDistance(attacker, defender)) {
40 }
41 return currentStrategy.withinDistance(attacker, defender);
42 }
43 @Override
44 public void block(Mob attacker, Npc defender, Hit hit, CombatType combatType) {
45 hit.getDamage();
46 if (defender.definition.getId() == 8610) {
47 World.schedule(new Task(1) {
48 @Override
49 protected void execute() {
50 defender.transform(8611);
51 }
52 });
53 }
54 }
55
56 @Override
57 public boolean canAttack(Npc attacker, Mob defender) {
58 if (!currentStrategy.canAttack(attacker, defender)) {
60 } else currentStrategy = MELEE;
61 return currentStrategy.canAttack(attacker, defender);
62 }
63 @Override
64 public void finishOutgoing(Npc attacker, Mob defender) {
65 currentStrategy.finishOutgoing(attacker, defender);
66 if (NpcMeleeStrategy.get().withinDistance(attacker, defender)) {
68 } else {
70 }
71 }
72
73 @Override
74 public void hit(Npc attacker, Mob defender, Hit hit) {
75 super.hit(attacker, defender, hit);
76 }
77
78 @Override
79 public int modifyDefensive(Mob attacker, Npc defender, int roll) {
80 return (int) (roll * 2.3);
81 }
82
83 private static final class Melee extends NpcMeleeStrategy {
84 private static final Animation ANIMATION = new Animation(8271, UpdatePriority.HIGH);
85
86 @Override
87 public int getAttackDistance(Npc attacker, FightType fightType) {
88 return 1;
89 }
90
91 @Override
92 public Animation getAttackAnimation(Npc attacker, Mob defender) {
93 return ANIMATION;
94 }
95
96 @Override
97 public CombatHit[] getHits(Npc attacker, Mob defender) {
98 return new CombatHit[]{nextMeleeHit(attacker, defender)};
99 }
100 }
101
102 private static class Magic extends NpcMagicStrategy {
103 private static final Animation ANIMATION = new Animation(8270, UpdatePriority.HIGH);
104
105 private Magic() {
106 super(getDefinition("Wyrm Magic"));
107 }
108
109 @Override
110 public CombatHit[] getHits(Npc attacker, Mob defender) {
111 CombatHit combatHit = nextMagicHit(attacker, defender, 31);
112 combatHit.setAccurate(true);
113 return new CombatHit[]{combatHit};
114 }
115
116 @Override
117 public Animation getAttackAnimation(Npc attacker, Mob defender) {
118 return ANIMATION;
119 }
120
121 @Override
122 public int getAttackDistance(Npc attacker, FightType fightType) {
123 return 5;
124 }
125 }
126
127}
Class that models a single animation used by an entity.
A game representing a cyclic unit of work.
Definition Task.java:11
Represents the game world.
Definition World.java:46
static void schedule(Task task)
Submits a new event.
Definition World.java:247
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 nextMagicHit(T attacker, Mob defender)
CombatHit[] getHits(Npc attacker, Mob defender)
Definition Wyrm.java:110
int getAttackDistance(Npc attacker, FightType fightType)
Definition Wyrm.java:122
Animation getAttackAnimation(Npc attacker, Mob defender)
Definition Wyrm.java:117
CombatHit[] getHits(Npc attacker, Mob defender)
Definition Wyrm.java:97
Animation getAttackAnimation(Npc attacker, Mob defender)
Definition Wyrm.java:92
int getAttackDistance(Npc attacker, FightType fightType)
Definition Wyrm.java:87
int modifyDefensive(Mob attacker, Npc defender, int roll)
Definition Wyrm.java:79
static final CombatStrategy< Npc >[] STRATEGIES
Definition Wyrm.java:29
boolean canAttack(Npc attacker, Mob defender)
Definition Wyrm.java:57
void finishOutgoing(Npc attacker, Mob defender)
Definition Wyrm.java:64
void hit(Npc attacker, Mob defender, Hit hit)
Definition Wyrm.java:74
boolean withinDistance(Npc attacker, Mob defender)
Definition Wyrm.java:37
void block(Mob attacker, Npc defender, Hit hit, CombatType combatType)
Definition Wyrm.java:44
Handles the mob class.
Definition Mob.java:66
void transform(int transformId)
Definition Mob.java:201
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.