47public enum RangedEffects {
50 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
51 return hit.isAccurate() && hit.getDamage() > 0 && RandomUtils.success(0.05);
55 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
56 int baseHit = hit.getDamage();
57 hit.setDamage((
int) (baseHit * 1.10));
58 defender.graphic(
new Graphic(749, 0, 20));
62 final ImmutableSet<Integer> affectedNpcs = ImmutableSet.of(941, 55, 54, 53, 50, 5362, 1590, 1591, 1592, 5363, 110, 1633, 1634, 1635, 1636, 1019, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2627, 2628, 2629, 2630, 2631, 2631, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746);
65 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
66 if (defender.
isPlayer() && defender.getPlayer().equipment.
containsAny(1383, 1395, 1403, 21006)) {
70 return hit.isAccurate() && hit.getDamage() > 0 && RandomUtils.success(0.06);
74 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
75 boolean multiply =
false;
76 int baseHit = hit.getDamage();
78 if (defender.
isNpc() && affectedNpcs.contains(defender.getNpc().id)) {
86 hit.setDamage((
int) ((baseHit * 1.075) * (multiply ? 1.20 : 1.0)));
87 defender.graphic(
new Graphic(750, 0, 20));
92 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
93 return hit.isAccurate() && hit.getDamage() > 0 && RandomUtils.success(0.06);
97 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
98 defender.locking.lock(1199, TimeUnit.MILLISECONDS,
LockType.WALKING);
99 defender.graphic(
new Graphic(755, 0, 20));
104 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
105 return hit.isAccurate() && hit.getDamage() > 0 && !defender.
isNpc() && RandomUtils.success(0.04);
109 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
111 defender.graphic(
new Graphic(757, 0, 20));
116 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
117 return hit.isAccurate() && hit.getDamage() > 0 && !defender.
isNpc() && RandomUtils.success(0.04);
121 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
122 int baseHit = hit.getDamage();
123 int percentage = (int) (baseHit * 0.05);
126 defender.graphic(
new Graphic(759, 100, 20));
131 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
132 if (defender.isPoisoned())
return false;
133 return hit.isAccurate() && hit.getDamage() > 0 && RandomUtils.success(0.54);
137 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
143 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
144 if (attacker.getCurrentHealth() / 5 <= 0)
return false;
145 if (defender.
isPlayer() && !RandomUtils.success(0.11))
return false;
146 if (defender.
isNpc() && !RandomUtils.success(0.06))
return false;
147 return hit.isAccurate() && hit.getDamage() > 0;
151 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
152 int damage = defender.getCurrentHealth() / 5;
157 hit.setDamage(damage);
158 defender.graphic(
new Graphic(754, 0, 20));
160 int inflict = attacker.getCurrentHealth() / 10;
166 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
167 if (defender.
isPlayer() && !RandomUtils.success(0.05))
return false;
168 if (defender.
isNpc() && !RandomUtils.success(0.10))
return false;
169 return hit.isAccurate() && hit.getDamage() > 0;
173 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
174 hit.setDamage(hit.getDamage() + RandomUtils.inclusive(5, 14));
175 defender.graphic(
new Graphic(758, 0, 20));
180 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
185 if (defender.
isPlayer() && defender.getPlayer().getAntifireDetails().isPresent()) {
189 return hit.isAccurate() && hit.getDamage() > 0 && RandomUtils.success(0.06);
193 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
194 int baseHit = hit.getDamage();
196 hit.setDamage((
int) (baseHit * 1.58));
197 defender.graphic(
new Graphic(756, 0, 20));
202 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
203 return hit.isAccurate() && hit.getDamage() > 0 && RandomUtils.success(0.10);
207 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
209 int damage = hit.getDamage() * 6 / 5;
210 hit.setDamage(damage);
211 attacker.heal(damage / 4);
212 defender.graphic(
new Graphic(756, 0, 20));
218 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
223 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
224 Player player = attacker.getPlayer();
230 int max = (int) (Math.floor(0.5 + magic.getLevel() * 15 / 80) * 10);
241 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
246 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
247 Player player = attacker.getPlayer();
253 int max = (int) (Math.floor(0.5 + magic.getLevel() * 123 / 640) * 10);
264 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
269 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
270 Player player = attacker.getPlayer();
276 int max = (int) (Math.floor(0.5 + magic.getLevel() * 141 / 640) * 10);
287 public boolean canAffect(
Mob attacker,
Mob defender,
Hit hit) {
292 public void impact(
Mob attacker,
Mob defender,
Hit hit, List<Hit> hits) {
293 Player player = attacker.getPlayer();
299 int max = (int) (Math.floor(0.5 + magic.getLevel() * 156 / 640) * 10);
309 CHINCHOMPA((attacker, defender, hit, hits) -> {
310 int baseHit = hit.getDamage();
313 int min = baseHit - 5;
314 if (min < 0) min = 0;
315 hitEvent(attacker, defender, actor, RandomUtils.inclusive(min, baseHit + 5), hits);
318 RED_CHINCHOMPA((attacker, defender, hit, hits) -> {
319 CombatUtil.
areaAction(defender, actor -> hitEvent(attacker, defender, actor, hit.getDamage(), hits));
325 this.effect = effect;
332 private static void hitEvent(
Mob attacker,
Mob defender,
Mob actor,
int damage, List<Hit> extra) {
333 if (!defender.equals(actor)) {
334 int hitDelay = getHitDelay(attacker, defender,
CombatType.RANGED);
336 attacker.
getCombat().submitHits(actor, hit);
337 if (extra !=
null) extra.add(hit);