RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
CombatPoisonEffect.java
1package com.osroyale.game.world.entity.combat.effect.impl;
2
3import com.osroyale.game.world.entity.combat.PoisonType;
4import com.osroyale.game.world.entity.combat.effect.CombatEffect;
5import com.osroyale.game.world.entity.combat.hit.Hit;
6import com.osroyale.game.world.entity.combat.hit.HitIcon;
7import com.osroyale.game.world.entity.combat.hit.Hitsplat;
8import com.osroyale.game.world.entity.mob.Mob;
9import com.osroyale.game.world.entity.mob.npc.definition.NpcDefinition;
10import com.osroyale.game.world.entity.mob.player.Player;
11import com.osroyale.game.world.items.Item;
12import com.osroyale.game.world.items.containers.equipment.Equipment;
13import com.osroyale.net.packet.out.SendMessage;
14import com.osroyale.net.packet.out.SendPoison;
15
16import java.util.Optional;
17
56
57public final class CombatPoisonEffect extends CombatEffect {
58
60 private int amount;
61
64 super(25);
65 }
66
67 @Override
68 public boolean apply(Mob mob) {
69 if (mob.getPoisonType() == null || mob.isPoisoned() || mob.isVenomed()) {
70 return false;
71 }
72
73 if (mob.isNpc() && mob.getNpc().definition.hasPoisonImmunity()) {
74 return false;
75 }
76
77 if (mob.isPlayer() && mob.getPlayer().equipment
78 .retrieve(Equipment.HELM_SLOT)
79 .filter(helm -> helm.getId() == 13197 || helm.getId() == 13199 || helm.getId() == 12931)
80 .isPresent()) {
81 return false;
82 }
83
84 if (mob.isPlayer()) {
85 Player player = mob.getPlayer();
86 if (player.getPoisonImmunity().get() > 0 || mob.isDead())
87 return false;
88 player.send(new SendMessage("You have been poisoned!"));
89 player.send(new SendPoison(SendPoison.PoisonType.REGULAR));
90 }
91 mob.getPoisonDamage().set(mob.getPoisonType().getDamage());
92 amount = 4;
93 return true;
94 }
95
96 @Override
97 public boolean removeOn(Mob mob) {
98 boolean remove = mob.isVenomed() || !mob.isPoisoned() || mob.isDead();
99 if (remove && mob.isPlayer()) {
100 Player player = (Player) mob;
101 player.send(new SendPoison(SendPoison.PoisonType.NO_POISON));
102 }
103 return remove;
104 }
105
106 @Override
107 public void process(Mob mob) {
108 amount--;
109 mob.damage(new Hit(mob.getPoisonDamage().get(), Hitsplat.POISON, HitIcon.NONE));
110 if (amount == 0) {
111 amount = 4;
112 mob.getPoisonDamage().decrementAndGet();
113 }
114 }
115
116 @Override
117 public boolean onLogin(Mob mob) {
118 boolean poisoned = mob.isPoisoned();
119 if (poisoned && mob.isPlayer()) {
120 mob.getPlayer().send(new SendPoison(SendPoison.PoisonType.REGULAR));
121 }
122 return poisoned;
123 }
124
134 public static Optional<PoisonType> getPoisonType(Item item) {
135 if (item != null) {
136 String name = item.getName();
137 if (name.endsWith("(p)")) {
138 return Optional.of(PoisonType.DEFAULT_MELEE);
139 }
140 if (name.endsWith("(p+)")) {
141 return Optional.of(PoisonType.STRONG_MELEE);
142 }
143 if (name.endsWith("(p++)")) {
144 return Optional.of(PoisonType.SUPER_MELEE);
145 }
146 }
147 return Optional.empty();
148 }
149
158 public static Optional<PoisonType> getPoisonType(int npc) {
160
161 if (def == null || !def.isAttackable() || !def.isPoisonous()) {
162 return Optional.empty();
163 }
164
165 if (def.getCombatLevel() < 25) {
166 return Optional.of(PoisonType.WEAK_NPC);
167 }
168
169 if (def.getCombatLevel() < 75) {
170 return Optional.of(PoisonType.DEFAULT_NPC);
171 }
172
173 if (def.getCombatLevel() < 200) {
174 return Optional.of(PoisonType.STRONG_NPC);
175 }
176
177 if (def.getCombatLevel() < 225) {
178 return Optional.of(PoisonType.SUPER_NPC);
179 }
180
181 return Optional.of(PoisonType.EXTRAORDINARY_NPC);
182 }
183}