* World instance
*/
public static final World world = Instance.getWorld();
public void handlePacket(Packet p, IoSession session) throws Exception {
Player player = (Player) session.getAttachment();
int pID = ((RSCPacket) p).getID();
if (player.inCombat()) {
if (pID == 132) {
Mob opponent = player.getOpponent();
if (opponent == null) { // This shouldn't happen
player.setSuspiciousPlayer(true);
return;
}
if (opponent.getHitsMade() >= 3) {
if (player.isDueling() && player.getDuelSetting(0)) {
player.getActionSender().sendMessage(
"Running has been disabled in this duel.");
return;
}
player.setLastRun(GameEngine.getTime());
player.resetCombat(CombatState.RUNNING);
player.isMining(false);
if (opponent instanceof Npc) {
Npc n = (Npc) opponent;
n.unblock();
opponent.resetCombat(CombatState.WAITING);
if (n.getDef().aggressive) {
player.setLastNpcChasingYou(n);
Instance.getDelayedEventHandler().add(
new MiniEvent(player, 2000) {
public void action() {
final Npc npc = owner
.getLastNpcChasingYou();
owner.setLastNpcChasingYou(null);
if (npc.isBusy()
|| npc.getChasing() != null)
return;
npc.resetPath();
npc.setChasing(owner);
Instance.getDelayedEventHandler()
.add(new WalkMobToMobEvent(
npc, owner, 0) {
public void arrived() {
if (affectedMob
.isBusy()
|| owner.isBusy()) {
npc.setChasing(null);
return;
}
if (affectedMob
.inCombat()
|| owner.inCombat()) {
npc.setChasing(null);
return;
}
Player player = (Player) affectedMob;
player.resetPath();
player.setBusy(true);
npc.resetPath();
player.resetAll();
player.setStatus(Action.FIGHTING_MOB);
player.getActionSender()
.sendSound(
"underattack");
player.getActionSender()
.sendMessage(
"You are under attack!");
npc.setLocation(
player.getLocation(),
true);
for (Player p : npc
.getViewArea()
.getPlayersInView())
p.removeWatchedNpc(npc);
player.setBusy(true);
player.setSprite(9);
player.setOpponent(npc);
player.setCombatTimer();
npc.setBusy(true);
npc.setSprite(8);
npc.setOpponent(player);
npc.setCombatTimer();
npc.setChasing(null);
FightEvent fighting = new FightEvent(
player,
npc, true);
fighting.setLastRun(0);
world.getDelayedEventHandler()
.add(fighting);
}
public void failed() {
npc.setChasing(null);
}
});
}
});
}
} else {
opponent.resetCombat(CombatState.WAITING);
}
} else {
player.getActionSender()
.sendMessage(
"You cannot retreat in the first 3 rounds of battle.");
return;
}
} else {
return;
}
} else if (player.isBusy()
&& GameEngine.getTime() - player.getLastMineTimer() > 2000) {
return;
}
if (GameEngine.getTime() - player.getLastCast() < 600)
return;
player.isMining(false);
player.resetAll();
int startX = p.readShort();
int startY = p.readShort();
int numWaypoints = p.remaining() / 2;
byte[] waypointXoffsets = new byte[numWaypoints];
byte[] waypointYoffsets = new byte[numWaypoints];
for (int x = 0; x < numWaypoints; x++) {
waypointXoffsets[x] = p.readByte();
waypointYoffsets[x] = p.readByte();
}
Path path = new Path(startX, startY, waypointXoffsets, waypointYoffsets);
player.setStatus(Action.IDLE);
player.setPath(path);
}