mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-07 16:49:12 +00:00
Add item verification.
This commit is contained in:
@@ -48,12 +48,14 @@
|
|||||||
<event>
|
<event>
|
||||||
<type>org.apollo.game.event.impl.ItemOptionEvent</type>
|
<type>org.apollo.game.event.impl.ItemOptionEvent</type>
|
||||||
<chain>
|
<chain>
|
||||||
|
<handler>org.apollo.game.event.handler.impl.ItemVerificationHandler</handler>
|
||||||
<handler>org.apollo.game.event.handler.impl.EquipEventHandler</handler>
|
<handler>org.apollo.game.event.handler.impl.EquipEventHandler</handler>
|
||||||
</chain>
|
</chain>
|
||||||
</event>
|
</event>
|
||||||
<event>
|
<event>
|
||||||
<type>org.apollo.game.event.impl.ItemActionEvent</type>
|
<type>org.apollo.game.event.impl.ItemActionEvent</type>
|
||||||
<chain>
|
<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.RemoveEventHandler</handler>
|
||||||
<handler>org.apollo.game.event.handler.impl.BankEventHandler</handler>
|
<handler>org.apollo.game.event.handler.impl.BankEventHandler</handler>
|
||||||
</chain>
|
</chain>
|
||||||
|
|||||||
@@ -26,15 +26,15 @@ public final class EquipEventHandler extends EventHandler<ItemOptionEvent> {
|
|||||||
int inventorySlot = event.getSlot();
|
int inventorySlot = event.getSlot();
|
||||||
Item equipping = player.getInventory().get(inventorySlot);
|
Item equipping = player.getInventory().get(inventorySlot);
|
||||||
int equippingId = equipping.getId();
|
int equippingId = equipping.getId();
|
||||||
EquipmentDefinition equippingDef = EquipmentDefinition.lookup(equippingId);
|
EquipmentDefinition equippingDefinition = EquipmentDefinition.lookup(equippingId);
|
||||||
|
|
||||||
if (equippingDef == null) {
|
if (equippingDefinition == null) {
|
||||||
ctx.breakHandlerChain();
|
ctx.breakHandlerChain();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int id = 0; id < 5; id++) {
|
for (int id = 0; id < 5; id++) {
|
||||||
int requirement = equippingDef.getLevel(id);
|
int requirement = equippingDefinition.getLevel(id);
|
||||||
|
|
||||||
if (player.getSkillSet().getSkill(id).getMaximumLevel() < requirement) {
|
if (player.getSkillSet().getSkill(id).getMaximumLevel() < requirement) {
|
||||||
String skillName = Skill.getName(id);
|
String skillName = Skill.getName(id);
|
||||||
@@ -50,14 +50,12 @@ public final class EquipEventHandler extends EventHandler<ItemOptionEvent> {
|
|||||||
Inventory inventory = player.getInventory();
|
Inventory inventory = player.getInventory();
|
||||||
Inventory equipment = player.getEquipment();
|
Inventory equipment = player.getEquipment();
|
||||||
|
|
||||||
// start
|
int equipmentSlot = equippingDefinition.getSlot();
|
||||||
|
|
||||||
int equipmentSlot = equippingDef.getSlot();
|
|
||||||
Item currentlyEquipped = equipment.get(equipmentSlot);
|
Item currentlyEquipped = equipment.get(equipmentSlot);
|
||||||
|
|
||||||
if (equipping.getDefinition().isStackable()
|
if (equipping.getDefinition().isStackable()
|
||||||
&& (currentlyEquipped == null || currentlyEquipped.getId() == equippingId)) {
|
&& (currentlyEquipped == null || currentlyEquipped.getId() == equippingId)) {
|
||||||
equipment.set(equippingDef.getSlot(), equipping);
|
equipment.set(equippingDefinition.getSlot(), equipping);
|
||||||
inventory.reset(inventorySlot);
|
inventory.reset(inventorySlot);
|
||||||
ctx.breakHandlerChain();
|
ctx.breakHandlerChain();
|
||||||
return;
|
return;
|
||||||
@@ -66,7 +64,7 @@ public final class EquipEventHandler extends EventHandler<ItemOptionEvent> {
|
|||||||
Item weapon = equipment.get(EquipmentConstants.WEAPON);
|
Item weapon = equipment.get(EquipmentConstants.WEAPON);
|
||||||
Item shield = equipment.get(EquipmentConstants.SHIELD);
|
Item shield = equipment.get(EquipmentConstants.SHIELD);
|
||||||
|
|
||||||
if (equippingDef.isTwoHanded()) {
|
if (equippingDefinition.isTwoHanded()) {
|
||||||
int slotsRequired = weapon != null ? shield != null ? 1 : 0 : 0;
|
int slotsRequired = weapon != null ? shield != null ? 1 : 0 : 0;
|
||||||
if (inventory.freeSlots() < slotsRequired) {
|
if (inventory.freeSlots() < slotsRequired) {
|
||||||
ctx.breakHandlerChain();
|
ctx.breakHandlerChain();
|
||||||
@@ -84,7 +82,7 @@ public final class EquipEventHandler extends EventHandler<ItemOptionEvent> {
|
|||||||
inventory.add(weapon);
|
inventory.add(weapon);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if (equippingDef.getSlot() == EquipmentConstants.SHIELD && weapon != null
|
} else if (equippingDefinition.getSlot() == EquipmentConstants.SHIELD && weapon != null
|
||||||
&& EquipmentDefinition.lookup(weapon.getId()).isTwoHanded()) {
|
&& EquipmentDefinition.lookup(weapon.getId()).isTwoHanded()) {
|
||||||
equipment.set(EquipmentConstants.SHIELD, inventory.reset(inventorySlot));
|
equipment.set(EquipmentConstants.SHIELD, inventory.reset(inventorySlot));
|
||||||
inventory.add(equipment.reset(EquipmentConstants.WEAPON));
|
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 inventory = player.getInventory();
|
||||||
Inventory bank = player.getBank();
|
Inventory bank = player.getBank();
|
||||||
|
|
||||||
if (slot < 0 || slot >= inventory.capacity()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Item item = inventory.get(slot);
|
Item item = inventory.get(slot);
|
||||||
if (item.getId() != id) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int newId = ItemDefinition.noteToItem(item.getId());
|
int newId = ItemDefinition.noteToItem(item.getId());
|
||||||
|
|
||||||
@@ -105,14 +98,7 @@ public final class BankUtils {
|
|||||||
Inventory inventory = player.getInventory();
|
Inventory inventory = player.getInventory();
|
||||||
Inventory bank = player.getBank();
|
Inventory bank = player.getBank();
|
||||||
|
|
||||||
if (slot < 0 || slot >= bank.capacity()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Item item = bank.get(slot);
|
Item item = bank.get(slot);
|
||||||
if (item == null || item.getId() != id) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (amount >= item.getAmount()) {
|
if (amount >= item.getAmount()) {
|
||||||
amount = item.getAmount();
|
amount = item.getAmount();
|
||||||
|
|||||||
Reference in New Issue
Block a user