diff --git a/Server/src/org/crandor/game/world/map/zone/impl/WildernessZone.java b/Server/src/org/crandor/game/world/map/zone/impl/WildernessZone.java index 3ebda760f..fd65491ed 100644 --- a/Server/src/org/crandor/game/world/map/zone/impl/WildernessZone.java +++ b/Server/src/org/crandor/game/world/map/zone/impl/WildernessZone.java @@ -11,24 +11,17 @@ import org.crandor.game.node.entity.npc.agg.AggressiveBehavior; import org.crandor.game.node.entity.npc.agg.AggressiveHandler; import org.crandor.game.node.entity.player.Player; import org.crandor.game.node.entity.player.info.Rights; -import org.crandor.game.node.item.GroundItemManager; import org.crandor.game.node.item.Item; import org.crandor.game.world.map.Location; import org.crandor.game.world.map.zone.MapZone; import org.crandor.game.world.map.zone.RegionZone; import org.crandor.game.world.map.zone.ZoneBorders; -import org.crandor.game.world.repository.Repository; -import org.crandor.tools.RandomFunction; /** * Handles the wilderness zone. * @author Emperor */ public final class WildernessZone extends MapZone { - /** - * The PvP gear items - */ - private static int[] PVP_GEAR = { 13887, 13893, 13899, 13905, 13870, 13873, 13876, 13879, 13883, 13884, 13890, 13896, 13902, 13858, 13861, 13864, 13867}; /** * The wilderness zone. @@ -55,70 +48,6 @@ public final class WildernessZone extends MapZone { } } - /** - * calculate drop rate for rev items based on combat level - * @author ceik - * @param combatLevel - * @return - */ - public int getNewDropRate(int combatLevel){ - double x = combatLevel; - double A = 44044.5491; - double B = -7360.19548; - return (int) (A + (B * Math.log(x))); - } - - /** - * Handles rev drops - * @author ceik - * @param e The entity dying. - * @param killer The killer. - * @return true - */ - @Override - public boolean death(Entity e, Entity killer) { - if(e instanceof NPC && killer instanceof Player && (e.asNpc().getName().contains("Revenant") || e.asNpc().getName().equals("Chaos elemental"))){ - int combatLevel = e.asNpc().getDefinition().getCombatLevel(); - int dropRate = getNewDropRate(combatLevel); - for(int i = 0; i < PVP_GEAR.length; i++){ - boolean chance = RandomFunction.random(dropRate) == dropRate / 2; - if(chance){ - Item reward; - if(PVP_GEAR[i] == 13879 || PVP_GEAR[i] == 13883){ // checks if it's a javelin or throwing axe - reward = new Item(PVP_GEAR[i],RandomFunction.random(15,50)); - } else { - reward = new Item(PVP_GEAR[i]); - } - Repository.sendNews(killer.asPlayer().getUsername() + " has received a " + reward.getName() + " from a " + e.asNpc().getName() + "!"); - GroundItemManager.create(reward,((NPC) e).getDropLocation(),killer.asPlayer()); - return true; - } - } - e.asNpc().getDefinition().getDropTables().drop(e.asNpc(),killer); - } - return true; - } - - /** - * Fixes attack options for the revs - * @param e The entity. - * @param target The target to interact with. - * @param option The option. - * @return true - */ - @Override - public boolean interact(Entity e, Node target, Option option) { - if(target instanceof NPC){ - if(target.asNpc().getName().contains("Revenant")){ - e.asPlayer().getProperties().getCombatPulse().attack(target); - return true; - } - } - return super.interact(e, target, option); - } - - - @Override public boolean enter(Entity e) { if (e instanceof Player) { diff --git a/Server/src/org/crandor/net/packet/in/SlotSwitchPacket.java b/Server/src/org/crandor/net/packet/in/SlotSwitchPacket.java index e5ef66596..b405ec55a 100644 --- a/Server/src/org/crandor/net/packet/in/SlotSwitchPacket.java +++ b/Server/src/org/crandor/net/packet/in/SlotSwitchPacket.java @@ -30,7 +30,7 @@ public class SlotSwitchPacket implements IncomingPacket { if (withInterfaceId == 762) { if (withChildId == 73) { container = player.getBank(); - switchItem(slot, secondSlot, container, player.getBank().isInsertItems()); + switchItem(slot, secondSlot, container, player.getBank().isInsertItems(), player); player.debug("Switching item [" + slot + ", " + interfaceId + ", " + childId + "] with [" + secondSlot + ", " + withInterfaceId + ", " + withChildId + "]!"); } else { @@ -54,7 +54,7 @@ public class SlotSwitchPacket implements IncomingPacket { break; default: player.debug("Switching item slot [from=" + slot + ", to=" + secondSlot + ", child=" + childId + ", to child=" + withChildId + "]."); - switchItem(slot, secondSlot, container, false); + switchItem(slot, secondSlot, container, false, player); break; } return; @@ -65,7 +65,7 @@ public class SlotSwitchPacket implements IncomingPacket { boolean insert = buffer.get() == 1; int interfaceId = interfaceHash >> 16; Container container = interfaceId == 762 ? player.getBank() : (interfaceId == 15 || interfaceId == 149 || interfaceId == 763) ? player.getInventory() : null; - switchItem(slot, secondSlot, container, insert); + switchItem(slot, secondSlot, container, insert, player); } /** @@ -75,12 +75,19 @@ public class SlotSwitchPacket implements IncomingPacket { * @param container The container. * @param insert If inserting should happen. */ - public void switchItem(int slot, int secondSlot, Container container, boolean insert) { + public void switchItem(int slot, int secondSlot, Container container, boolean insert, Player player) { if (container == null || slot < 0 || slot >= container.toArray().length || secondSlot < 0 || secondSlot >= container.toArray().length) { return; } + final Item item = container.get(slot); final Item second = container.get(secondSlot); + if (player.getInterfaceManager().hasChatbox()) { + player.getInterfaceManager().closeChatbox(); + switchItem(secondSlot,slot,container,insert,player); + container.refresh(); + return; + } if (item == null) { return; } diff --git a/Server/src/plugin/npc/revenant/RevenantNPC.java b/Server/src/plugin/npc/revenant/RevenantNPC.java index ee77a8aff..e4802daee 100644 --- a/Server/src/plugin/npc/revenant/RevenantNPC.java +++ b/Server/src/plugin/npc/revenant/RevenantNPC.java @@ -112,6 +112,13 @@ public class RevenantNPC extends AbstractNPC { if (killer instanceof Player) { killer.asPlayer().getAudioManager().send(4063, true); } + int chance = RandomFunction.getRandom(120); + if (chance == 1) { + int item = RandomFunction.getRandom(PVP_DROPS.length - 1); + Item i = new Item(PVP_DROPS[item]); + GroundItemManager.create(i, itemLoc, killer.asPlayer()); + Repository.sendNews(killer.getUsername() + " has just received a " + i.getName() + " from a " + getName() + "."); + } } @Override diff --git a/Server/src/plugin/npc/revenant/RevenantPlugin.java b/Server/src/plugin/npc/revenant/RevenantPlugin.java index 04664cf30..7766b53f4 100644 --- a/Server/src/plugin/npc/revenant/RevenantPlugin.java +++ b/Server/src/plugin/npc/revenant/RevenantPlugin.java @@ -30,7 +30,7 @@ public class RevenantPlugin implements Plugin { /** * The maximum amount of revenants spawned. */ - private static final int MAX = 50; + private static final int MAX = 20; @Override public Plugin newInstance(Object arg) throws Throwable {