Equipment slot refactor started.
This commit is contained in:
@@ -46,7 +46,7 @@ public class CharacterItemManager {
|
||||
private final ConcurrentHashMap<Integer, Integer> itemIDtoType = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||
// Mapping of all items equipped in this Manager
|
||||
// Key = Item Slot
|
||||
private final ConcurrentHashMap<Integer, Item> equipped = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||
private final ConcurrentHashMap<Enum.EquipSlotType, Item> equipped = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
|
||||
private final HashSet<Item> inventory = new HashSet<>();
|
||||
private final HashSet<Item> bank = new HashSet<>();
|
||||
private final HashSet<Item> vault = new HashSet<>();
|
||||
@@ -186,8 +186,8 @@ public class CharacterItemManager {
|
||||
switch (i.containerType) {
|
||||
case EQUIPPED:
|
||||
if (this.equipped.containsValue(i) == false) {
|
||||
this.equipped.put((int) i.getEquipSlot(), i);
|
||||
addEquipOrder((int) i.getEquipSlot());
|
||||
this.equipped.put(i.equipSlot, i);
|
||||
addEquipOrder(i.equipSlot.ordinal());
|
||||
}
|
||||
break;
|
||||
case BANK:
|
||||
@@ -235,7 +235,7 @@ public class CharacterItemManager {
|
||||
switch (i.containerType) {
|
||||
case EQUIPPED:
|
||||
if (this.equipped.containsValue(i) == false)
|
||||
this.equipped.put((int) i.getEquipSlot(), i);
|
||||
this.equipped.put(i.equipSlot, i);
|
||||
break;
|
||||
case BANK:
|
||||
if (i.getItemBase().getType().equals(ItemType.GOLD))
|
||||
@@ -927,13 +927,11 @@ public class CharacterItemManager {
|
||||
return true;
|
||||
}
|
||||
|
||||
byte slot = i.getEquipSlot();
|
||||
|
||||
if (this.doesCharOwnThisItem(i.getObjectUUID()) == false)
|
||||
return false;
|
||||
|
||||
// remove it from other lists:
|
||||
this.remItemFromLists(i, slot);
|
||||
this.remItemFromLists(i);
|
||||
this.itemIDtoType.remove(i.getObjectUUID());
|
||||
|
||||
calculateWeights();
|
||||
@@ -962,13 +960,11 @@ public class CharacterItemManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
byte slot = i.getEquipSlot();
|
||||
|
||||
if (this.doesCharOwnThisItem(i.getObjectUUID()) == false && this.absCharacter.getObjectType() != GameObjectType.Mob && (i.containerType != Enum.ItemContainerType.FORGE))
|
||||
return false;
|
||||
|
||||
// remove it from other lists:
|
||||
this.remItemFromLists(i, slot);
|
||||
this.remItemFromLists(i);
|
||||
this.itemIDtoType.remove(i.getObjectUUID());
|
||||
|
||||
i.junk();
|
||||
@@ -993,7 +989,6 @@ public class CharacterItemManager {
|
||||
|
||||
boolean fromEquip = false;
|
||||
synchronized (this) {
|
||||
byte slot = i.getEquipSlot();
|
||||
|
||||
//Skip if NOT in vault.
|
||||
if (i.containerType != Enum.ItemContainerType.VAULT)
|
||||
@@ -1019,7 +1014,7 @@ public class CharacterItemManager {
|
||||
return false;
|
||||
|
||||
// remove it from other lists:
|
||||
this.remItemFromLists(i, slot);
|
||||
this.remItemFromLists(i);
|
||||
|
||||
// add to Inventory
|
||||
this.inventory.add(i);
|
||||
@@ -1040,7 +1035,6 @@ public class CharacterItemManager {
|
||||
}
|
||||
|
||||
public synchronized boolean moveItemToBank(Item i) {
|
||||
byte slot = i.getEquipSlot();
|
||||
|
||||
if (this.doesCharOwnThisItem(i.getObjectUUID()) == false)
|
||||
return false;
|
||||
@@ -1057,7 +1051,7 @@ public class CharacterItemManager {
|
||||
return false;
|
||||
|
||||
// remove it from other lists:
|
||||
this.remItemFromLists(i, slot);
|
||||
this.remItemFromLists(i);
|
||||
|
||||
// add to Bank
|
||||
this.bank.add(i);
|
||||
@@ -1186,7 +1180,6 @@ public class CharacterItemManager {
|
||||
}
|
||||
|
||||
public synchronized boolean moveItemToVault(Item i) {
|
||||
byte slot = i.getEquipSlot();
|
||||
|
||||
// if (this.doesCharOwnThisItem(i.getObjectUUID()) == false)
|
||||
// return false;
|
||||
@@ -1203,7 +1196,7 @@ public class CharacterItemManager {
|
||||
return false; // NPC's dont have vaults!
|
||||
|
||||
// remove it from other lists:
|
||||
this.remItemFromLists(i, slot);
|
||||
this.remItemFromLists(i);
|
||||
|
||||
// add to Vault
|
||||
i.addToCache();
|
||||
@@ -1276,13 +1269,14 @@ public class CharacterItemManager {
|
||||
public boolean equipItem(Item i, byte slot) {
|
||||
|
||||
synchronized (this) {
|
||||
byte curSlot = i.getEquipSlot(); // Should be 0
|
||||
|
||||
if (this.doesCharOwnThisItem(i.getObjectUUID()) == false && this.absCharacter.getObjectType() != GameObjectType.Mob) {
|
||||
Logger.error("Doesnt own item");
|
||||
return false;
|
||||
}
|
||||
|
||||
Enum.EquipSlotType equipSlot = Enum.EquipSlotType.values()[slot];
|
||||
|
||||
// Item must be in inventory to equip
|
||||
if (!this.inventory.contains(i) && this.absCharacter.getObjectType() != GameObjectType.Mob)
|
||||
return false;
|
||||
@@ -1290,7 +1284,7 @@ public class CharacterItemManager {
|
||||
// make sure player can equip item
|
||||
if (i.getItemBase() == null)
|
||||
return false;
|
||||
if (!i.getItemBase().canEquip(slot, this, absCharacter, i) && this.absCharacter.getObjectType() != GameObjectType.Mob)
|
||||
if (!i.getItemBase().canEquip(equipSlot, this, absCharacter, i) && this.absCharacter.getObjectType() != GameObjectType.Mob)
|
||||
return false;
|
||||
|
||||
// check to see if item is already there.
|
||||
@@ -1314,13 +1308,14 @@ public class CharacterItemManager {
|
||||
return false;
|
||||
|
||||
// remove it from other lists:
|
||||
this.remItemFromLists(i, slot);
|
||||
this.remItemFromLists(i);
|
||||
|
||||
// add to Equipped
|
||||
this.equipped.put((int) slot, i);
|
||||
this.equipped.put(Enum.EquipSlotType.values()[slot], i);
|
||||
|
||||
i.addToCache();
|
||||
|
||||
addEquipOrder(i.getEquipSlot());
|
||||
addEquipOrder(slot);
|
||||
|
||||
//calculateWeights();
|
||||
}
|
||||
@@ -1697,9 +1692,9 @@ public class CharacterItemManager {
|
||||
return lootItem;
|
||||
}
|
||||
|
||||
private synchronized void remItemFromLists(Item i, byte slot) {
|
||||
private synchronized void remItemFromLists(Item i) {
|
||||
|
||||
this.equipped.remove((int) slot);
|
||||
this.equipped.remove(i.equipSlot);
|
||||
this.vault.remove(i);
|
||||
this.bank.remove(i);
|
||||
this.inventory.remove(i);
|
||||
@@ -1858,9 +1853,9 @@ public class CharacterItemManager {
|
||||
return false;
|
||||
|
||||
|
||||
for (int slot : this.equipped.keySet()) {
|
||||
for (Enum.EquipSlotType slot : this.equipped.keySet()) {
|
||||
|
||||
if (slot == MBServerStatics.SLOT_HAIRSTYLE || slot == MBServerStatics.SLOT_BEARDSTYLE)
|
||||
if (slot == Enum.EquipSlotType.HAIR || slot == Enum.EquipSlotType.BEARD)
|
||||
continue;
|
||||
|
||||
Item item = this.equipped.get(slot);
|
||||
@@ -1872,7 +1867,7 @@ public class CharacterItemManager {
|
||||
}
|
||||
|
||||
if (!ItemTemplate.validForSkills(item, pc.getSkills())) {
|
||||
this.forceToInventory(slot, item, pc, initialized);
|
||||
this.forceToInventory(slot.ordinal(), item, pc, initialized);
|
||||
pc.applyBonuses();
|
||||
}
|
||||
}
|
||||
@@ -1886,7 +1881,7 @@ public class CharacterItemManager {
|
||||
*
|
||||
* @return the equipped
|
||||
*/
|
||||
public ConcurrentHashMap<Integer, Item> getEquipped() {
|
||||
public ConcurrentHashMap<Enum.EquipSlotType, Item> getEquipped() {
|
||||
synchronized (this.equipped) {
|
||||
return new ConcurrentHashMap<>(this.equipped);
|
||||
}
|
||||
@@ -1902,9 +1897,9 @@ public class CharacterItemManager {
|
||||
}
|
||||
if (ret.size() != this.equipped.size())
|
||||
//missed adding some items, figure out what.
|
||||
for (int slot : this.equipped.keySet()) {
|
||||
if (!(this.equipOrder.contains(slot))) {
|
||||
this.equipOrder.add(slot);
|
||||
for (Enum.EquipSlotType slot : this.equipped.keySet()) {
|
||||
if (!(this.equipOrder.contains(slot.ordinal()))) {
|
||||
this.equipOrder.add(slot.ordinal());
|
||||
ret.add(this.equipped.get(slot));
|
||||
}
|
||||
}
|
||||
@@ -1913,7 +1908,7 @@ public class CharacterItemManager {
|
||||
return ret;
|
||||
}
|
||||
|
||||
public Item getEquipped(int slot) {
|
||||
public Item getEquipped(Enum.EquipSlotType slot) {
|
||||
synchronized (this.equipped) {
|
||||
return this.equipped.get(slot);
|
||||
}
|
||||
@@ -2282,7 +2277,7 @@ public class CharacterItemManager {
|
||||
}
|
||||
|
||||
// remove it from other lists:
|
||||
this.remItemFromLists(item, (byte) slot);
|
||||
this.remItemFromLists(item);
|
||||
|
||||
// add to Inventory
|
||||
this.inventory.add(item);
|
||||
@@ -2444,10 +2439,13 @@ public class CharacterItemManager {
|
||||
return;
|
||||
|
||||
//verify the item is equipped by this player
|
||||
int slot = item.getEquipSlot();
|
||||
Enum.EquipSlotType slot = item.equipSlot;
|
||||
|
||||
if (!this.equipped.containsKey(slot))
|
||||
return;
|
||||
|
||||
Item verify = this.equipped.get(slot);
|
||||
|
||||
if (verify == null || item.getObjectUUID() != verify.getObjectUUID())
|
||||
return;
|
||||
|
||||
@@ -2481,7 +2479,7 @@ public class CharacterItemManager {
|
||||
//send damage item msg to client
|
||||
PlayerCharacter pc = (PlayerCharacter) this.absCharacter;
|
||||
|
||||
ItemHealthUpdateMsg itemHealthUpdateMsg = new ItemHealthUpdateMsg(slot, (float) dur);
|
||||
ItemHealthUpdateMsg itemHealthUpdateMsg = new ItemHealthUpdateMsg(slot.ordinal(), (float) dur);
|
||||
Dispatch dispatch = Dispatch.borrow(pc, itemHealthUpdateMsg);
|
||||
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||||
|
||||
@@ -2490,26 +2488,18 @@ public class CharacterItemManager {
|
||||
//Damage a random piece of armor a specified amount
|
||||
public void damageRandomArmor(int amount) {
|
||||
ArrayList<Item> armor = new ArrayList<>();
|
||||
if (this.equipped.containsKey(MBServerStatics.SLOT_OFFHAND)) {
|
||||
Item item = this.equipped.get(MBServerStatics.SLOT_OFFHAND);
|
||||
|
||||
if (this.equipped.containsKey(Enum.EquipSlotType.LHELD)) {
|
||||
Item item = this.equipped.get(Enum.EquipSlotType.LHELD);
|
||||
|
||||
ItemBase ib = item.getItemBase();
|
||||
if (ib.isShield())
|
||||
armor.add(item);
|
||||
}
|
||||
if (this.equipped.containsKey(MBServerStatics.SLOT_HELMET))
|
||||
armor.add(this.equipped.get(MBServerStatics.SLOT_HELMET));
|
||||
if (this.equipped.containsKey(MBServerStatics.SLOT_CHEST))
|
||||
armor.add(this.equipped.get(MBServerStatics.SLOT_CHEST));
|
||||
if (this.equipped.containsKey(MBServerStatics.SLOT_ARMS))
|
||||
armor.add(this.equipped.get(MBServerStatics.SLOT_ARMS));
|
||||
if (this.equipped.containsKey(MBServerStatics.SLOT_GLOVES))
|
||||
armor.add(this.equipped.get(MBServerStatics.SLOT_GLOVES));
|
||||
if (this.equipped.containsKey(MBServerStatics.SLOT_GLOVES))
|
||||
armor.add(this.equipped.get(MBServerStatics.SLOT_GLOVES));
|
||||
if (this.equipped.containsKey(MBServerStatics.SLOT_LEGGINGS))
|
||||
armor.add(this.equipped.get(MBServerStatics.SLOT_LEGGINGS));
|
||||
if (this.equipped.containsKey(MBServerStatics.SLOT_FEET))
|
||||
armor.add(this.equipped.get(MBServerStatics.SLOT_FEET));
|
||||
|
||||
for (Item equipment : this.equipped.values())
|
||||
if (equipment.template.item_type.equals(ItemType.ARMOR))
|
||||
armor.add(equipment);
|
||||
|
||||
if (armor.isEmpty())
|
||||
return; //nothing to damage
|
||||
|
||||
Reference in New Issue
Block a user