RuneHive-Game
Loading...
Searching...
No Matches
MeleeStrategy.java
Go to the documentation of this file.
1package com.runehive.game.world.entity.combat.strategy.basic;
2
3import com.runehive.game.world.entity.combat.attack.FightType;
4import com.runehive.game.world.entity.combat.hit.Hit;
5import com.runehive.game.world.entity.combat.hit.HitIcon;
6import com.runehive.game.world.entity.combat.strategy.CombatStrategy;
7import com.runehive.game.world.entity.mob.Mob;
8import com.runehive.game.world.entity.mob.player.Player;
9import com.runehive.game.world.entity.skill.Skill;
10import com.runehive.game.world.pathfinding.path.SimplePathChecker;
11import com.runehive.util.Utility;
12
13/**
14 * @author Michael | Chex
15 */
16public abstract class MeleeStrategy<T extends Mob> extends CombatStrategy<T> {
17
18 @Override
19 public boolean withinDistance(T attacker, Mob defender) {
20 final FightType fightType = attacker.getCombat().getFightType();
21 final int distance = getAttackDistance(attacker, fightType);
22
23 final boolean withinDistance = Utility.inRange(attacker, defender, distance);
24 if (defender.id == 1739 || defender.id == 1740 || defender.id == 1741 || defender.id == 1742 || defender.id == 1756) {
25 return withinDistance;
26 }
27 return withinDistance
28 && (SimplePathChecker.checkLine(attacker, defender)
29 || SimplePathChecker.checkLine(defender, attacker));
30 }
31
32 protected static void addCombatExperience(Player player, Hit... hits) {
33 int exp = 0;
34 for (Hit hit : hits) {
35 if (hit.getDamage() <= 0) continue;
36 if (hit.getHitIcon() == HitIcon.MELEE) {
37 exp += hit.getDamage();
38 } else if (hit.getHitIcon() == HitIcon.MAGIC) {
40 }
41 }
42
43 exp *= player.experienceRate;
44 player.skills.addExperience(Skill.HITPOINTS, exp / 3);
45 switch (player.getCombat().getFightType().getStyle()) {
46 case ACCURATE:
47 player.skills.addExperience(Skill.ATTACK, exp);
48 break;
49 case AGGRESSIVE:
50 player.skills.addExperience(Skill.STRENGTH, exp);
51 break;
52 case DEFENSIVE:
53 player.skills.addExperience(Skill.DEFENCE, exp);
54 break;
55 case CONTROLLED:
56 exp /= 3;
57 player.skills.addExperience(Skill.ATTACK, exp);
58 player.skills.addExperience(Skill.STRENGTH, exp);
59 player.skills.addExperience(Skill.DEFENCE, exp);
60 break;
61 }
62 }
63
64}
A Hit object holds the damage amount and hitsplat data.
Definition Hit.java:10
abstract int getAttackDistance(T attacker, FightType fightType)
void hit(T attacker, Mob defender, Hit hit)
Called when the attacking mob performs an attack on the defender.
static void addCombatExperience(Player player, double base, Hit... hits)
Handles the mob class.
Definition Mob.java:66
This class represents a character controlled by a player.
Definition Player.java:125
Represents a trainable and usable skill.
Definition Skill.java:18
static final int DEFENCE
The defence skill id.
Definition Skill.java:24
static final int ATTACK
The attack skill id.
Definition Skill.java:21
static final int STRENGTH
The strength skill id.
Definition Skill.java:27
static final int HITPOINTS
The hitpoints skill id.
Definition Skill.java:30
Represents a PathFinder which is meant to be used to check projectiles passage in a straight line.
static boolean checkLine(Interactable source, Interactable target)
Handles miscellaneous methods.
Definition Utility.java:27
static boolean inRange(int absX, int absY, int size, int targetX, int targetY, int targetSize, int distance)
Definition Utility.java:910
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
MELEE
Represents the melee sword hit icon.
Definition HitIcon.java:14
MAGIC
Represents the magic hat hit icon.
Definition HitIcon.java:20