public void updatePosition() { long now = GameEngine.getAccurateTimestamp(); Player victim = findVictim(); if (!isBusy() && def.isAggressive() && now - getCombatTimer() > 3000 && victim != null) { resetPath(); victim.resetPath(); victim.resetAll(); victim.setStatus(Action.FIGHTING_MOB); victim.getActionSender().sendSound("underattack"); victim.getActionSender().sendMessage("You are under attack!"); if (victim.isSleeping()) { victim.getActionSender().sendWakeUp(false, false); victim.getActionSender().sendFatigue(victim.getFatigue()); } this.setLocation(victim.getLocation(), true); for (Player p : getViewArea().getPlayersInView()) { p.removeWatchedNpc(this); } victim.setBusy(true); victim.setSprite(9); victim.setOpponent(this); victim.setCombatTimer(); setBusy(true); setSprite(8); setOpponent(victim); setCombatTimer(); FightEvent fighting = new FightEvent(victim, this, true); fighting.setLastRun(0); World.getWorld().getDelayedEventHandler().add(fighting); } if (now - lastMovement > 2200) { lastMovement = now; int rand = DataConversions.random(0, 1); if (!isBusy() && finishedPath() && rand == 1 && !isRemoved()) { int newX = DataConversions.random(loc.minX(), loc.maxX()); int newY = DataConversions.random(loc.minY(), loc.maxY()); setPath(new Path(getX(), getY(), newX, newY)); } } super.updatePosition(); }
public void killedBy(Mob mob, boolean stake) { if (mob instanceof Player) { Player player = (Player) mob; player.getActionSender().sendSound("victory"); } Mob opponent = super.getOpponent(); if (opponent != null) { opponent.resetCombat(CombatState.WON); } resetCombat(CombatState.LOST); world.unregisterNpc(this); this.remove(); // Player owner = mob instanceof Player ? (Player) mob : null; Player owner = null; if (mob instanceof Player) { owner = handleLootAndXpDistribution((Player) mob); if (PluginHandler.getPluginHandler() .blockDefaultAction("PlayerKilledNpc", new Object[] {owner, this})) { return; } } ItemDropDef[] drops = def.getDrops(); int total = 0; for (ItemDropDef drop : drops) { total += drop.getWeight(); } // int hit = DataConversions.random(0, total); total = 0; if (getCombatLevel() >= 90 && Constants.GameServer.MEMBER_WORLD) { // key halves? if (Formulae.Rand(0, 3000) == 500) { if (Formulae.Rand(0, 1) == 1) { world.registerItem(new Item(1276, getX(), getY(), 1, owner)); } else { world.registerItem(new Item(1277, getX(), getY(), 1, owner)); } } } for (ItemDropDef drop : drops) { if (drop == null) { continue; } if (drop.getWeight() == 0) { world.registerItem(new Item(drop.getID(), getX(), getY(), drop.getAmount(), owner)); continue; } if (hit >= total && hit < (total + drop.getWeight())) { if (drop.getID() != -1) { if (EntityHandler.getItemDef(drop.getID()).members && Constants.GameServer.MEMBER_WORLD) { world.registerItem(new Item(drop.getID(), getX(), getY(), drop.getAmount(), owner)); break; } if (!EntityHandler.getItemDef(drop.getID()).members) { world.registerItem(new Item(drop.getID(), getX(), getY(), drop.getAmount(), owner)); break; } } } total += drop.getWeight(); } // World.getQuestManager().handleNpcKilled(this, owner); }