Add item verification.

This commit is contained in:
Major-
2013-11-03 05:15:41 +00:00
parent b3598aeb81
commit 252b7677ca
4 changed files with 73 additions and 23 deletions
+2
View File
@@ -48,12 +48,14 @@
<event>
<type>org.apollo.game.event.impl.ItemOptionEvent</type>
<chain>
<handler>org.apollo.game.event.handler.impl.ItemVerificationHandler</handler>
<handler>org.apollo.game.event.handler.impl.EquipEventHandler</handler>
</chain>
</event>
<event>
<type>org.apollo.game.event.impl.ItemActionEvent</type>
<chain>
<handler>org.apollo.game.event.handler.impl.ItemVerificationHandler</handler>
<handler>org.apollo.game.event.handler.impl.RemoveEventHandler</handler>
<handler>org.apollo.game.event.handler.impl.BankEventHandler</handler>
</chain>
@@ -26,15 +26,15 @@ public final class EquipEventHandler extends EventHandler<ItemOptionEvent> {
int inventorySlot = event.getSlot();
Item equipping = player.getInventory().get(inventorySlot);
int equippingId = equipping.getId();
EquipmentDefinition equippingDef = EquipmentDefinition.lookup(equippingId);
EquipmentDefinition equippingDefinition = EquipmentDefinition.lookup(equippingId);
if (equippingDef == null) {
if (equippingDefinition == null) {
ctx.breakHandlerChain();
return;
}
for (int id = 0; id < 5; id++) {
int requirement = equippingDef.getLevel(id);
int requirement = equippingDefinition.getLevel(id);
if (player.getSkillSet().getSkill(id).getMaximumLevel() < requirement) {
String skillName = Skill.getName(id);
@@ -50,14 +50,12 @@ public final class EquipEventHandler extends EventHandler<ItemOptionEvent> {
Inventory inventory = player.getInventory();
Inventory equipment = player.getEquipment();
// start
int equipmentSlot = equippingDef.getSlot();
int equipmentSlot = equippingDefinition.getSlot();
Item currentlyEquipped = equipment.get(equipmentSlot);
if (equipping.getDefinition().isStackable()
&& (currentlyEquipped == null || currentlyEquipped.getId() == equippingId)) {
equipment.set(equippingDef.getSlot(), equipping);
equipment.set(equippingDefinition.getSlot(), equipping);
inventory.reset(inventorySlot);
ctx.breakHandlerChain();
return;
@@ -66,7 +64,7 @@ public final class EquipEventHandler extends EventHandler<ItemOptionEvent> {
Item weapon = equipment.get(EquipmentConstants.WEAPON);
Item shield = equipment.get(EquipmentConstants.SHIELD);
if (equippingDef.isTwoHanded()) {
if (equippingDefinition.isTwoHanded()) {
int slotsRequired = weapon != null ? shield != null ? 1 : 0 : 0;
if (inventory.freeSlots() < slotsRequired) {
ctx.breakHandlerChain();
@@ -84,7 +82,7 @@ public final class EquipEventHandler extends EventHandler<ItemOptionEvent> {
inventory.add(weapon);
}
return;
} else if (equippingDef.getSlot() == EquipmentConstants.SHIELD && weapon != null
} else if (equippingDefinition.getSlot() == EquipmentConstants.SHIELD && weapon != null
&& EquipmentDefinition.lookup(weapon.getId()).isTwoHanded()) {
equipment.set(EquipmentConstants.SHIELD, inventory.reset(inventorySlot));
inventory.add(equipment.reset(EquipmentConstants.WEAPON));
@@ -0,0 +1,64 @@
package org.apollo.game.event.handler.impl;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.event.impl.InventoryItemEvent;
import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
import org.apollo.game.model.inter.bank.BankConstants;
import org.apollo.game.model.inv.SynchronizationInventoryListener;
import org.apollo.game.model.Player;
/**
* An {@link EventHandler} which verifies {@link InventoryItemEvent}s.
*
* @author Chris Fletcher
*/
public final class ItemVerificationHandler extends EventHandler<InventoryItemEvent> {
/**
* Gets the inventory based on the interface id.
*
* @param player The player.
* @param interfaceId The interface id.
* @return The proper inventory.
* @throws IllegalArgumentException If the interface id is illegal.
*/
private static Inventory interfaceToInventory(Player player, int interfaceId) {
switch (interfaceId) {
case SynchronizationInventoryListener.INVENTORY_ID:
case BankConstants.SIDEBAR_INVENTORY_ID:
return player.getInventory();
case SynchronizationInventoryListener.EQUIPMENT_ID:
return player.getEquipment();
case BankConstants.BANK_INVENTORY_ID:
return player.getBank();
default:
throw new IllegalArgumentException("Unknown interface id: " + interfaceId);
}
}
/**
* Checks if the information provided by the event is valid, breaking the handler chain if it isn't.
*/
@Override
public void handle(EventHandlerContext ctx, Player player, InventoryItemEvent event) {
Inventory inventory = interfaceToInventory(player, event.getInterfaceId());
int slot = event.getSlot();
if (slot < 0 || slot >= inventory.capacity()) {
ctx.breakHandlerChain();
return;
}
Item item = inventory.get(slot);
if (item == null || item.getId() != event.getId()) {
ctx.breakHandlerChain();
}
}
}
@@ -32,14 +32,7 @@ public final class BankUtils {
Inventory inventory = player.getInventory();
Inventory bank = player.getBank();
if (slot < 0 || slot >= inventory.capacity()) {
return false;
}
Item item = inventory.get(slot);
if (item.getId() != id) {
return false;
}
int newId = ItemDefinition.noteToItem(item.getId());
@@ -105,14 +98,7 @@ public final class BankUtils {
Inventory inventory = player.getInventory();
Inventory bank = player.getBank();
if (slot < 0 || slot >= bank.capacity()) {
return false;
}
Item item = bank.get(slot);
if (item == null || item.getId() != id) {
return false;
}
if (amount >= item.getAmount()) {
amount = item.getAmount();