RuneHive-Game
Loading...
Searching...
No Matches
MejRah.java
Go to the documentation of this file.
1package com.runehive.content.activity.infernomobs;
2
3import com.runehive.game.task.TickableTask;
4import com.runehive.game.world.World;
5import com.runehive.game.world.entity.combat.attack.FightType;
6import com.runehive.game.world.entity.combat.hit.CombatHit;
7import com.runehive.game.world.entity.combat.hit.Hit;
8import com.runehive.game.world.entity.combat.strategy.npc.MultiStrategy;
9import com.runehive.game.world.entity.combat.strategy.npc.NpcRangedStrategy;
10import com.runehive.game.world.entity.mob.Mob;
11import com.runehive.game.world.entity.mob.npc.Npc;
12import com.runehive.game.world.entity.skill.Skill;
13
14import static com.runehive.game.world.entity.combat.projectile.CombatProjectile.getDefinition;
15
16public class MejRah extends MultiStrategy {
17
18 public MejRah() {
19 currentStrategy = new Ranged();
20 }
21
22 @Override
23 public int getAttackDelay(Npc attacker, Mob defender, FightType fightType) {
24 return attacker.definition.getAttackDelay();
25 }
26
27 private static class Ranged extends NpcRangedStrategy {
28
29 private Ranged() {
30 super(getDefinition("MejRah"));
31 }
32
33 @Override
34 public void hit(Npc attacker, Mob defender, Hit hit) {
35 if (!hit.isAccurate())
36 return;
37 World.schedule(new TickableTask(true, 1) {
38 @Override
39 protected void tick() {
40 Skill attack = defender.skills.get(Skill.ATTACK);
41 Skill str = defender.skills.get(Skill.STRENGTH);
42 Skill range = defender.skills.get(Skill.RANGED);
43 Skill mage = defender.skills.get(Skill.MAGIC);
44 Skill def = defender.skills.get(Skill.DEFENCE);
45 attack.modifyLevel(level -> level - 2);
46 str.modifyLevel(level -> level - 2);
47 range.modifyLevel(level -> level - 2);
48 mage.modifyLevel(level -> level - 2);
49 def.modifyLevel(level -> level - 2);
50 defender.skills.refresh();
51 if (defender.isPlayer())
52 defender.getPlayer().message("@red@You're skills have been drained..");
53 if (tick == ((CombatHit) hit).getHitsplatDelay() - 1)
54 cancel();
55 }
56 });
57 }
58
59 @Override
60 public CombatHit[] getHits(Npc attacker, Mob defender) {
61 return new CombatHit[] { nextRangedHit(attacker, defender, 19) };
62 }
63 }
64}
CombatHit[] getHits(Npc attacker, Mob defender)
Definition MejRah.java:60
void hit(Npc attacker, Mob defender, Hit hit)
Definition MejRah.java:34
int getAttackDelay(Npc attacker, Mob defender, FightType fightType)
Definition MejRah.java:23
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 nextRangedHit(T attacker, Mob defender)
Handles the mob class.
Definition Mob.java:66
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 a trainable and usable skill.
Definition Skill.java:18
void modifyLevel(Function< Integer, Integer > function)
Modifies the current level with a given function.
Definition Skill.java:281
static final int RANGED
The ranged skill id.
Definition Skill.java:33
static final int DEFENCE
The defence skill id.
Definition Skill.java:24
static final int MAGIC
The magic skill id.
Definition Skill.java:39
static final int ATTACK
The attack skill id.
Definition Skill.java:21
static final int STRENGTH
The strength skill id.
Definition Skill.java:27
Skill get(int id)
Gets the skill for an id.
void refresh()
Refreshes all the skills for the mob.
The enumerated type whose elements represent the fighting types.