RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
DragonClaws.java
1package com.osroyale.game.world.entity.combat.strategy.player.special.melee;
2
3import com.osroyale.game.Animation;
4import com.osroyale.game.Graphic;
5import com.osroyale.game.UpdatePriority;
6import com.osroyale.game.world.entity.combat.CombatUtil;
7import com.osroyale.game.world.entity.combat.attack.FormulaFactory;
8import com.osroyale.game.world.entity.combat.hit.CombatHit;
9import com.osroyale.game.world.entity.combat.hit.Hit;
10import com.osroyale.game.world.entity.combat.hit.HitIcon;
11import com.osroyale.game.world.entity.combat.strategy.player.PlayerMeleeStrategy;
12import com.osroyale.game.world.entity.mob.Mob;
13import com.osroyale.game.world.entity.mob.player.Player;
14
49
50public class DragonClaws extends PlayerMeleeStrategy {
51 private static final Animation ANIMATION = new Animation(7527, UpdatePriority.HIGH);
52 private static final Graphic GRAPHIC = new Graphic(1171, 50);
53
54 private static final DragonClaws INSTANCE = new DragonClaws();
55
56 @Override
57 public void start(Player attacker, Mob defender, Hit[] hits) {
58 super.start(attacker, defender, hits);
59 attacker.graphic(GRAPHIC);
60 }
61
62 @Override
63 public CombatHit[] getHits(Player attacker, Mob defender) {
64 CombatHit first = nextMeleeHit(attacker, defender);
65
66 if (first.getDamage() < 1) {
67 return secondOption(attacker, defender, first);
68 }
69
70 CombatHit second = first.copyAndModify(damage -> damage / 2);
71 CombatHit third = second.copyAndModify(damage -> damage / 2);
72 CombatHit fourth = second.copyAndModify(damage -> first.getDamage() - second.getDamage() - third.getDamage());
73 return new CombatHit[]{first, second, third, fourth};
74 }
75
76 @Override
77 public Animation getAttackAnimation(Player attacker, Mob defender) {
78 return ANIMATION;
79 }
80
81 private CombatHit[] secondOption(Player attacker, Mob defender, CombatHit inaccurate) {
82 CombatHit second = nextMeleeHit(attacker, defender);
83
84 if (second.getDamage() < 1) {
85 return thirdOption(attacker, defender, inaccurate, second);
86 }
87
88 CombatHit third = second.copyAndModify(damage -> damage / 2);
89 return new CombatHit[]{inaccurate, second, third, third};
90 }
91
92 private CombatHit[] thirdOption(Player attacker, Mob defender, CombatHit inaccurate, CombatHit inaccurate2) {
93 CombatHit third = nextMeleeHit(attacker, defender);
94
95 if (third.getDamage() < 1) {
96 return fourthOption(attacker, defender, inaccurate, inaccurate2);
97 }
98
99 int maxHit = FormulaFactory.getModifiedMaxHit(attacker, defender, getCombatType()) * 3 / 4;
100 third.setDamage(maxHit);
101 CombatHit fourth = third.copyAndModify(damage -> third.getDamage());
102 return new CombatHit[]{inaccurate, inaccurate2, third, fourth};
103 }
104
105 private CombatHit[] fourthOption(Player attacker, Mob defender, CombatHit inaccurate, CombatHit inaccurate2) {
106 CombatHit fourth = nextMeleeHit(attacker, defender);
107
108 if (fourth.getDamage() < 1) {
109 int hitDelay = CombatUtil.getHitDelay(attacker, defender, getCombatType());
110 CombatHit hit = new CombatHit(new Hit(10, HitIcon.MELEE), hitDelay, 0);
111 return new CombatHit[]{inaccurate, inaccurate2, hit, hit};
112 }
113
114 fourth.modifyDamage(damage -> (int) (damage * 1.50));
115 return new CombatHit[]{inaccurate, inaccurate2, fourth, fourth};
116 }
117
118 @Override
119 public int modifyAccuracy(Player attacker, Mob defender, int roll) {
120 return roll * 7 / 4;
121 }
122
123 public static DragonClaws get() {
124 return INSTANCE;
125 }
126
127}
static int getHitDelay(final Mob attacker, final Mob defender, final CombatType type)
CombatHit copyAndModify(Function< Integer, Integer > modifier)
void modifyDamage(Function< Integer, Integer > modifier)
Definition Hit.java:142