RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
DuelArenaListener.java
1package com.osroyale.content.activity.impl.duelarena;
2
3import com.osroyale.content.activity.ActivityListener;
4import com.osroyale.game.world.entity.combat.CombatType;
5import com.osroyale.game.world.entity.combat.hit.Hit;
6import com.osroyale.game.world.entity.mob.Mob;
7import com.osroyale.game.world.entity.mob.player.Player;
8import com.osroyale.game.world.items.Item;
9import com.osroyale.net.packet.out.SendMessage;
10
11public class DuelArenaListener extends ActivityListener<DuelArenaActivity> {
12
13 DuelArenaListener(DuelArenaActivity activity) {
14 super(activity);
15 }
16
17 @Override
18 public void start(Mob attacker, Mob defender, Hit[] hits) {
19 System.out.println(defender);
20 if (activity.hasLoser) {
21 return;
22 }
23
24 super.start(attacker, defender, hits);
25 }
26
27 @Override
28 public void onDamage(Mob defender, Hit hit) {
29 if (activity.hasLoser) {
30 hit.setDamage(0);
31 }
32 }
33
34 @Override
35 public void preKill(Mob attacker, Mob defender, Hit hit) {
36 activity.hasLoser = true;
37 attacker.damageImmunity.reset();
38 }
39
40 @Override
41 public boolean canAttack(Mob attacker, Mob defender) {
42 Player player = activity.player;
43 Player opponent = activity.opponent;
44
45 if (player == null || opponent == null || !attacker.isPlayer() || !defender.isPlayer()) {
46 return false;
47 }
48
49 if (!attacker.equals(player) && !attacker.equals(opponent)) {
50 attacker.getPlayer().send(new SendMessage("You are not in this duel."));
51 return false;
52 }
53
54 if (!defender.equals(player) && !defender.equals(opponent)) {
55 attacker.getPlayer().send(new SendMessage(defender.getName() + " is not your opponent!"));
56 return false;
57 }
58
59 if (!activity.started) {
60 attacker.getPlayer().send(new SendMessage("The duel hasn't started yet!"));
61 return false;
62 }
63
64 if (activity.rules.contains(DuelRule.ONLY_FUN_WEAPONS) && !DuelUtils.hasFunWeapon(attacker.getPlayer(), attacker.getPlayer().equipment.getWeapon())) {
65 attacker.getPlayer().send(new SendMessage("You can only use fun weapons!"));
66 return false;
67 }
68
69 if (activity.rules.contains(DuelRule.ONLY_WHIP_DDS)) {
70 if (attacker.getPlayer().equipment.hasWeapon()) {
71 Item weapon = attacker.getPlayer().equipment.getWeapon();
72 String name = weapon.getName().toLowerCase();
73
74 if (!name.contains("dragon dagger") && !name.contains("abyssal whip") && !name.contains("abyssal tentacle")) {
75 attacker.getPlayer().send(new SendMessage("You can only use a whip or dragon dagger!"));
76 return false;
77 }
78 }
79 }
80
81 CombatType combatType = attacker.getPlayer().getStrategy().getCombatType();
82
83 if (combatType == CombatType.MELEE && activity.rules.contains(DuelRule.NO_MELEE)) {
84 attacker.getPlayer().send(new SendMessage("You cannot use melee in the duel arena."));
85 return false;
86 }
87
88 if (combatType == CombatType.RANGED && activity.rules.contains(DuelRule.NO_RANGED)) {
89 attacker.getPlayer().send(new SendMessage("You cannot use ranged in the duel arena."));
90 return false;
91 }
92
93 if (combatType == CombatType.MAGIC && activity.rules.contains(DuelRule.NO_MAGIC)) {
94 attacker.getPlayer().send(new SendMessage("You cannot use magic in the duel arena."));
95 return false;
96 }
97
98 return super.canAttack(attacker, defender);
99 }
100}