mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-03 00:38:21 +00:00
Add item verification.
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user