Files
2009scape/Server/src/main/content/region/fremennik/waterbirth/handlers/DagannothKingNPC.java
T
Bishop 09d9d1ec55 Rewrote boss kill counter
Removed inauthentic slayer tasks and boss pets
2026-07-03 19:08:16 +10:00

218 lines
4.5 KiB
Java

package content.region.fremennik.waterbirth.handlers;
import java.util.List;
import content.data.BossKillCounter;
import core.game.node.entity.Entity;
import core.game.node.entity.combat.BattleState;
import core.game.node.entity.combat.CombatStyle;
import core.game.node.entity.npc.AbstractNPC;
import core.game.node.entity.player.Player;
import core.game.world.map.Location;
import core.game.world.map.RegionManager;
import core.tools.RandomFunction;
/**
* Represents a dagannoth king npc.
* @author Vexia
*/
public final class DagannothKingNPC extends AbstractNPC {
/**
* The type of dag.
*/
private DagType type;
/**
* Constructs a new {@Code DagannothKingNPC} {@Code Object}
*/
public DagannothKingNPC() {
super(-1, null);
}
/**
* Constructs a new {@Code DagannothKingNPC} {@Code Object}
* @param id the id.
* @param location the location.
*/
public DagannothKingNPC(int id, Location location) {
super(id, location);
}
@Override
public void init() {
type = DagType.forId(getId());
super.init();
}
@Override
public void checkImpact(BattleState state) {
CombatStyle style = state.getStyle();
if (style == null) {
style = state.getAttacker().getProperties().getCombatPulse().getStyle();
}
if (type.isImmune(style)) {
state.neutralizeHits();
}
}
@Override
public double getLevelMod(Entity entity, Entity victim) {
if (type == DagType.PRIME) {
return 3.5;
}
return 0.0;
}
@Override
public void sendImpact(BattleState state) {
if (state.getEstimatedHit() > type.getMaxHit()) {
state.setEstimatedHit(RandomFunction.random(type.getMaxHit() - 5, type.getMaxHit()));
}
if (type != DagType.REX && RandomFunction.random(5) <= 2) {
List<Player> players = RegionManager.getLocalPlayers(this, 9);
if (players.size() <= 1) {
return;
}
Player newP = players.get(RandomFunction.random(players.size()));
if (newP != null) {
getProperties().getCombatPulse().stop();
getAggressiveHandler().setPauseTicks(2);
attack(newP);
}
}
}
@Override
public AbstractNPC construct(int id, Location location, Object... objects) {
return new DagannothKingNPC(id, location);
}
@Override
public int[] getIds() {
return new int[] { 2881, 2882, 2883 };
}
@Override
public void finalizeDeath(Entity killer) {
super.finalizeDeath(killer);
if (getId() == 2881 || getId() == 2882 || getId() == 2883) {
BossKillCounter.addToBossKillCount((Player) killer, this.getId());
}
}
/**
* ß A king type.
* @author Vexia
*/
public enum DagType {
SUPREME(2881, CombatStyle.RANGE, CombatStyle.MELEE, CombatStyle.MAGIC, 30), PRIME(2882, CombatStyle.MAGIC, CombatStyle.RANGE, CombatStyle.MELEE, 61), REX(2883, CombatStyle.MELEE, CombatStyle.MAGIC, CombatStyle.RANGE, 28);
/**
* The npc id.
*/
private final int id;
/**
* The combat style.
*/
private final CombatStyle style;
/**
* The style he is weak to.
*/
private final CombatStyle weakStyle;
/**
* The style he is immunned to.
*/
private final CombatStyle immuneStyle;
/**
* The max hit.
*/
private final int maxHit;
/**
* Constructs a new {@Code DagType} {@Code Object}
* @param id the id.
* @param style the style.
* @param weakStyle the weak style.
* @parmam immuneStyle the style.
* @param maxHit the max hit.
*/
private DagType(int id, CombatStyle style, CombatStyle weakStyle, CombatStyle immuneStyle, int maxHit) {
this.id = id;
this.style = style;
this.weakStyle = weakStyle;
this.immuneStyle = immuneStyle;
this.maxHit = maxHit;
}
/**
* Gets the maxHit.
* @return the maxHit
*/
public int getMaxHit() {
return maxHit;
}
/**
* Gets a dag type.
* @param id the id.
* @return the type.
*/
public static DagType forId(int id) {
for (DagType type : values()) {
if (type.getId() == id) {
return type;
}
}
return null;
}
/**
* Checks if the dag is immune to a style.
* @param style the style.
* @return {@code True} if so.
*/
public boolean isImmune(CombatStyle style) {
return style == immuneStyle || style == this.style;
}
/**
* Gets the id.
* @return the id
*/
public int getId() {
return id;
}
/**
* Gets the style.
* @return the style
*/
public CombatStyle getStyle() {
return style;
}
/**
* Gets the immuneStyle.
* @return the immuneStyle
*/
public CombatStyle getImmuneStyle() {
return immuneStyle;
}
/**
* Gets the weakStyle.
* @return the weakStyle
*/
public CombatStyle getWeakStyle() {
return weakStyle;
}
}
}