Proper Agathion slot mask.

This commit is contained in:
MobiusDev
2018-10-11 18:34:58 +00:00
parent 866bbde935
commit c0a6ffbb64
40 changed files with 906 additions and 1084 deletions

View File

@ -102,7 +102,7 @@ public class AppearanceItemData implements IGameXmlReader
}
case "bodyPart":
{
final int part = ItemTable.SLOTS.get(c.getTextContent());
final long part = ItemTable.SLOTS.get(c.getTextContent());
stone.addBodyPart(part);
break;
}

View File

@ -58,7 +58,7 @@ public class ItemTable
private static Logger LOGGER = Logger.getLogger(ItemTable.class.getName());
private static Logger LOGGER_ITEMS = Logger.getLogger("item");
public static final Map<String, Integer> SLOTS = new HashMap<>();
public static final Map<String, Long> SLOTS = new HashMap<>();
private L2Item[] _allTemplates;
private final Map<Integer, L2EtcItem> _etcItems = new HashMap<>();
@ -66,45 +66,45 @@ public class ItemTable
private final Map<Integer, L2Weapon> _weapons = new HashMap<>();
static
{
SLOTS.put("shirt", L2Item.SLOT_UNDERWEAR);
SLOTS.put("lbracelet", L2Item.SLOT_L_BRACELET);
SLOTS.put("rbracelet", L2Item.SLOT_R_BRACELET);
SLOTS.put("talisman", L2Item.SLOT_DECO);
SLOTS.put("chest", L2Item.SLOT_CHEST);
SLOTS.put("fullarmor", L2Item.SLOT_FULL_ARMOR);
SLOTS.put("head", L2Item.SLOT_HEAD);
SLOTS.put("hair", L2Item.SLOT_HAIR);
SLOTS.put("hairall", L2Item.SLOT_HAIRALL);
SLOTS.put("underwear", L2Item.SLOT_UNDERWEAR);
SLOTS.put("back", L2Item.SLOT_BACK);
SLOTS.put("neck", L2Item.SLOT_NECK);
SLOTS.put("legs", L2Item.SLOT_LEGS);
SLOTS.put("feet", L2Item.SLOT_FEET);
SLOTS.put("gloves", L2Item.SLOT_GLOVES);
SLOTS.put("chest,legs", L2Item.SLOT_CHEST | L2Item.SLOT_LEGS);
SLOTS.put("belt", L2Item.SLOT_BELT);
SLOTS.put("rhand", L2Item.SLOT_R_HAND);
SLOTS.put("lhand", L2Item.SLOT_L_HAND);
SLOTS.put("lrhand", L2Item.SLOT_LR_HAND);
SLOTS.put("rear;lear", L2Item.SLOT_R_EAR | L2Item.SLOT_L_EAR);
SLOTS.put("rfinger;lfinger", L2Item.SLOT_R_FINGER | L2Item.SLOT_L_FINGER);
SLOTS.put("wolf", L2Item.SLOT_WOLF);
SLOTS.put("greatwolf", L2Item.SLOT_GREATWOLF);
SLOTS.put("hatchling", L2Item.SLOT_HATCHLING);
SLOTS.put("strider", L2Item.SLOT_STRIDER);
SLOTS.put("babypet", L2Item.SLOT_BABYPET);
SLOTS.put("brooch", L2Item.SLOT_BROOCH);
SLOTS.put("brooch_jewel", L2Item.SLOT_BROOCH_JEWEL);
SLOTS.put("shirt", (long) L2Item.SLOT_UNDERWEAR);
SLOTS.put("lbracelet", (long) L2Item.SLOT_L_BRACELET);
SLOTS.put("rbracelet", (long) L2Item.SLOT_R_BRACELET);
SLOTS.put("talisman", (long) L2Item.SLOT_DECO);
SLOTS.put("chest", (long) L2Item.SLOT_CHEST);
SLOTS.put("fullarmor", (long) L2Item.SLOT_FULL_ARMOR);
SLOTS.put("head", (long) L2Item.SLOT_HEAD);
SLOTS.put("hair", (long) L2Item.SLOT_HAIR);
SLOTS.put("hairall", (long) L2Item.SLOT_HAIRALL);
SLOTS.put("underwear", (long) L2Item.SLOT_UNDERWEAR);
SLOTS.put("back", (long) L2Item.SLOT_BACK);
SLOTS.put("neck", (long) L2Item.SLOT_NECK);
SLOTS.put("legs", (long) L2Item.SLOT_LEGS);
SLOTS.put("feet", (long) L2Item.SLOT_FEET);
SLOTS.put("gloves", (long) L2Item.SLOT_GLOVES);
SLOTS.put("chest,legs", (long) L2Item.SLOT_CHEST | L2Item.SLOT_LEGS);
SLOTS.put("belt", (long) L2Item.SLOT_BELT);
SLOTS.put("rhand", (long) L2Item.SLOT_R_HAND);
SLOTS.put("lhand", (long) L2Item.SLOT_L_HAND);
SLOTS.put("lrhand", (long) L2Item.SLOT_LR_HAND);
SLOTS.put("rear;lear", (long) L2Item.SLOT_R_EAR | L2Item.SLOT_L_EAR);
SLOTS.put("rfinger;lfinger", (long) L2Item.SLOT_R_FINGER | L2Item.SLOT_L_FINGER);
SLOTS.put("wolf", (long) L2Item.SLOT_WOLF);
SLOTS.put("greatwolf", (long) L2Item.SLOT_GREATWOLF);
SLOTS.put("hatchling", (long) L2Item.SLOT_HATCHLING);
SLOTS.put("strider", (long) L2Item.SLOT_STRIDER);
SLOTS.put("babypet", (long) L2Item.SLOT_BABYPET);
SLOTS.put("brooch", (long) L2Item.SLOT_BROOCH);
SLOTS.put("brooch_jewel", (long) L2Item.SLOT_BROOCH_JEWEL);
SLOTS.put("agathion", L2Item.SLOT_AGATHION);
SLOTS.put("none", L2Item.SLOT_NONE);
SLOTS.put("none", (long) L2Item.SLOT_NONE);
// retail compatibility
SLOTS.put("onepiece", L2Item.SLOT_FULL_ARMOR);
SLOTS.put("hair2", L2Item.SLOT_HAIR2);
SLOTS.put("dhair", L2Item.SLOT_HAIRALL);
SLOTS.put("alldress", L2Item.SLOT_ALLDRESS);
SLOTS.put("deco1", L2Item.SLOT_DECO);
SLOTS.put("waist", L2Item.SLOT_BELT);
SLOTS.put("onepiece", (long) L2Item.SLOT_FULL_ARMOR);
SLOTS.put("hair2", (long) L2Item.SLOT_HAIR2);
SLOTS.put("dhair", (long) L2Item.SLOT_HAIRALL);
SLOTS.put("alldress", (long) L2Item.SLOT_ALLDRESS);
SLOTS.put("deco1", (long) L2Item.SLOT_DECO);
SLOTS.put("waist", (long) L2Item.SLOT_BELT);
}
/**

View File

@ -40,19 +40,16 @@ public enum CrystallizationType
{
return ARMOR;
}
switch (item.getBodyPart())
if ((item.getBodyPart() == L2Item.SLOT_R_EAR) //
|| (item.getBodyPart() == L2Item.SLOT_L_EAR) //
|| (item.getBodyPart() == L2Item.SLOT_R_FINGER) //
|| (item.getBodyPart() == L2Item.SLOT_L_FINGER) //
|| (item.getBodyPart() == L2Item.SLOT_NECK) //
|| (item.getBodyPart() == L2Item.SLOT_HAIR) //
|| (item.getBodyPart() == L2Item.SLOT_HAIR2) //
|| (item.getBodyPart() == L2Item.SLOT_HAIRALL))
{
case L2Item.SLOT_R_EAR:
case L2Item.SLOT_L_EAR:
case L2Item.SLOT_R_FINGER:
case L2Item.SLOT_L_FINGER:
case L2Item.SLOT_NECK:
case L2Item.SLOT_HAIR:
case L2Item.SLOT_HAIR2:
case L2Item.SLOT_HAIRALL:
{
return ACCESORY;
}
return ACCESORY;
}
return NONE;

View File

@ -104,7 +104,7 @@ public class CombatFlag
{
// Reset player stats
_player.setCombatFlagEquipped(false);
final int slot = _player.getInventory().getSlotFromItem(_item);
final long slot = _player.getInventory().getSlotFromItem(_item);
_player.getInventory().unEquipItemInBodySlot(slot);
_player.destroyItem("CombatFlag", _item, null, true);
_item = null;

View File

@ -2197,7 +2197,7 @@ public final class L2PcInstance extends L2Playable
}
sendPacket(sm);
final int slot = _inventory.getSlotFromItem(item);
final long slot = _inventory.getSlotFromItem(item);
// we can't unequip talisman by body slot
if ((slot == L2Item.SLOT_DECO) || (slot == L2Item.SLOT_BROOCH_JEWEL) || (slot == L2Item.SLOT_AGATHION))
{
@ -4990,7 +4990,7 @@ public final class L2PcInstance extends L2Playable
}
else
{
final int slot = _inventory.getSlotFromItem(_inventory.getItemByItemId(9819));
final long slot = _inventory.getSlotFromItem(_inventory.getItemByItemId(9819));
_inventory.unEquipItemInBodySlot(slot);
destroyItem("CombatFlag", _inventory.getItemByItemId(9819), null, true);
}
@ -10887,7 +10887,7 @@ public final class L2PcInstance extends L2Playable
}
else
{
final int slot = _inventory.getSlotFromItem(_inventory.getItemByItemId(9819));
final long slot = _inventory.getSlotFromItem(_inventory.getItemByItemId(9819));
_inventory.unEquipItemInBodySlot(slot);
destroyItem("CombatFlag", _inventory.getItemByItemId(9819), null, true);
}

View File

@ -70,7 +70,7 @@ public final class ConditionUsingItemType extends Condition
// So from here, chest armor matches conditions
final int chestBodyPart = chest.getItem().getBodyPart();
final long chestBodyPart = chest.getItem().getBodyPart();
// return True if chest armor is a Full Armor
if (chestBodyPart == L2Item.SLOT_FULL_ARMOR)
{

View File

@ -35,7 +35,7 @@ public class AppearanceHolder
private final AppearanceHandType _handType;
private final AppearanceMagicType _magicType;
private final AppearanceTargetType _targetType;
private final Integer _bodyPart;
private final long _bodyPart;
public AppearanceHolder(StatsSet set)
{
@ -73,7 +73,7 @@ public class AppearanceHolder
return _targetType;
}
public int getBodyPart()
public long getBodyPart()
{
return _bodyPart;
}

View File

@ -902,108 +902,104 @@ public abstract class Inventory extends ItemContainer
return _paperdoll[slot] == null;
}
public static int getPaperdollIndex(int slot)
public boolean isPaperdollSlotNotEmpty(int slot)
{
switch (slot)
return _paperdoll[slot] != null;
}
public static int getPaperdollIndex(long slot)
{
if (slot == L2Item.SLOT_UNDERWEAR)
{
case L2Item.SLOT_UNDERWEAR:
{
return PAPERDOLL_UNDER;
}
case L2Item.SLOT_R_EAR:
{
return PAPERDOLL_REAR;
}
case L2Item.SLOT_LR_EAR:
case L2Item.SLOT_L_EAR:
{
return PAPERDOLL_LEAR;
}
case L2Item.SLOT_NECK:
{
return PAPERDOLL_NECK;
}
case L2Item.SLOT_R_FINGER:
case L2Item.SLOT_LR_FINGER:
{
return PAPERDOLL_RFINGER;
}
case L2Item.SLOT_L_FINGER:
{
return PAPERDOLL_LFINGER;
}
case L2Item.SLOT_HEAD:
{
return PAPERDOLL_HEAD;
}
case L2Item.SLOT_R_HAND:
case L2Item.SLOT_LR_HAND:
{
return PAPERDOLL_RHAND;
}
case L2Item.SLOT_L_HAND:
{
return PAPERDOLL_LHAND;
}
case L2Item.SLOT_GLOVES:
{
return PAPERDOLL_GLOVES;
}
case L2Item.SLOT_CHEST:
case L2Item.SLOT_FULL_ARMOR:
case L2Item.SLOT_ALLDRESS:
{
return PAPERDOLL_CHEST;
}
case L2Item.SLOT_LEGS:
{
return PAPERDOLL_LEGS;
}
case L2Item.SLOT_FEET:
{
return PAPERDOLL_FEET;
}
case L2Item.SLOT_BACK:
{
return PAPERDOLL_CLOAK;
}
case L2Item.SLOT_HAIR:
case L2Item.SLOT_HAIRALL:
{
return PAPERDOLL_HAIR;
}
case L2Item.SLOT_HAIR2:
{
return PAPERDOLL_HAIR2;
}
case L2Item.SLOT_R_BRACELET:
{
return PAPERDOLL_RBRACELET;
}
case L2Item.SLOT_L_BRACELET:
{
return PAPERDOLL_LBRACELET;
}
case L2Item.SLOT_DECO:
{
return PAPERDOLL_DECO1; // return first we deal with it later
}
case L2Item.SLOT_BELT:
{
return PAPERDOLL_BELT;
}
case L2Item.SLOT_BROOCH:
{
return PAPERDOLL_BROOCH;
}
case L2Item.SLOT_BROOCH_JEWEL:
{
return PAPERDOLL_BROOCH_JEWEL1;
}
case L2Item.SLOT_AGATHION:
{
return PAPERDOLL_AGATHION1;
}
return PAPERDOLL_UNDER;
}
else if (slot == L2Item.SLOT_R_EAR)
{
return PAPERDOLL_REAR;
}
else if ((slot == L2Item.SLOT_LR_EAR) || (slot == L2Item.SLOT_L_EAR))
{
return PAPERDOLL_LEAR;
}
else if (slot == L2Item.SLOT_NECK)
{
return PAPERDOLL_NECK;
}
else if ((slot == L2Item.SLOT_R_FINGER) || (slot == L2Item.SLOT_LR_FINGER))
{
return PAPERDOLL_RFINGER;
}
else if (slot == L2Item.SLOT_L_FINGER)
{
return PAPERDOLL_LFINGER;
}
else if (slot == L2Item.SLOT_HEAD)
{
return PAPERDOLL_HEAD;
}
else if ((slot == L2Item.SLOT_R_HAND) || (slot == L2Item.SLOT_LR_HAND))
{
return PAPERDOLL_RHAND;
}
else if (slot == L2Item.SLOT_L_HAND)
{
return PAPERDOLL_LHAND;
}
else if (slot == L2Item.SLOT_GLOVES)
{
return PAPERDOLL_GLOVES;
}
else if ((slot == L2Item.SLOT_CHEST) || (slot == L2Item.SLOT_FULL_ARMOR) || (slot == L2Item.SLOT_ALLDRESS))
{
return PAPERDOLL_CHEST;
}
else if (slot == L2Item.SLOT_LEGS)
{
return PAPERDOLL_LEGS;
}
else if (slot == L2Item.SLOT_FEET)
{
return PAPERDOLL_FEET;
}
else if (slot == L2Item.SLOT_BACK)
{
return PAPERDOLL_CLOAK;
}
else if ((slot == L2Item.SLOT_HAIR) || (slot == L2Item.SLOT_HAIRALL))
{
return PAPERDOLL_HAIR;
}
else if (slot == L2Item.SLOT_HAIR2)
{
return PAPERDOLL_HAIR2;
}
else if (slot == L2Item.SLOT_R_BRACELET)
{
return PAPERDOLL_RBRACELET;
}
else if (slot == L2Item.SLOT_L_BRACELET)
{
return PAPERDOLL_LBRACELET;
}
else if (slot == L2Item.SLOT_DECO)
{
return PAPERDOLL_DECO1; // return first we deal with it later
}
else if (slot == L2Item.SLOT_BELT)
{
return PAPERDOLL_BELT;
}
else if (slot == L2Item.SLOT_BROOCH)
{
return PAPERDOLL_BROOCH;
}
else if (slot == L2Item.SLOT_BROOCH_JEWEL)
{
return PAPERDOLL_BROOCH_JEWEL1;
}
else if (slot == L2Item.SLOT_AGATHION)
{
return PAPERDOLL_AGATHION1;
}
return -1;
}
@ -1174,9 +1170,9 @@ public abstract class Inventory extends ItemContainer
return _wearedMask;
}
public int getSlotFromItem(L2ItemInstance item)
public long getSlotFromItem(L2ItemInstance item)
{
int slot = -1;
long slot = -1;
final int location = item.getLocationSlot();
switch (location)
{
@ -1315,11 +1311,11 @@ public abstract class Inventory extends ItemContainer
/**
* Unequips item in body slot and returns alterations.<BR>
* <B>If you dont need return value use {@link Inventory#unEquipItemInBodySlot(int)} instead</B>
* <B>If you dont need return value use {@link Inventory#unEquipItemInBodySlot(long)} instead</B>
* @param slot : int designating the slot of the paperdoll
* @return L2ItemInstance[] : list of changes
*/
public L2ItemInstance[] unEquipItemInBodySlotAndRecord(int slot)
public L2ItemInstance[] unEquipItemInBodySlotAndRecord(long slot)
{
final ChangeRecorder recorder = newRecorder();
@ -1374,141 +1370,111 @@ public abstract class Inventory extends ItemContainer
* @param slot : int designating the slot
* @return {@link L2ItemInstance} designating the item placed in the slot
*/
public L2ItemInstance unEquipItemInBodySlot(int slot)
public L2ItemInstance unEquipItemInBodySlot(long slot)
{
int pdollSlot = -1;
switch (slot)
if (slot == L2Item.SLOT_L_EAR)
{
case L2Item.SLOT_L_EAR:
{
pdollSlot = PAPERDOLL_LEAR;
break;
}
case L2Item.SLOT_R_EAR:
{
pdollSlot = PAPERDOLL_REAR;
break;
}
case L2Item.SLOT_NECK:
{
pdollSlot = PAPERDOLL_NECK;
break;
}
case L2Item.SLOT_R_FINGER:
{
pdollSlot = PAPERDOLL_RFINGER;
break;
}
case L2Item.SLOT_L_FINGER:
{
pdollSlot = PAPERDOLL_LFINGER;
break;
}
case L2Item.SLOT_HAIR:
{
pdollSlot = PAPERDOLL_HAIR;
break;
}
case L2Item.SLOT_HAIR2:
{
pdollSlot = PAPERDOLL_HAIR2;
break;
}
case L2Item.SLOT_HAIRALL:
{
setPaperdollItem(PAPERDOLL_HAIR, null);
pdollSlot = PAPERDOLL_HAIR;
break;
}
case L2Item.SLOT_HEAD:
{
pdollSlot = PAPERDOLL_HEAD;
break;
}
case L2Item.SLOT_R_HAND:
case L2Item.SLOT_LR_HAND:
{
pdollSlot = PAPERDOLL_RHAND;
break;
}
case L2Item.SLOT_L_HAND:
{
pdollSlot = PAPERDOLL_LHAND;
break;
}
case L2Item.SLOT_GLOVES:
{
pdollSlot = PAPERDOLL_GLOVES;
break;
}
case L2Item.SLOT_CHEST:
case L2Item.SLOT_ALLDRESS:
case L2Item.SLOT_FULL_ARMOR:
{
pdollSlot = PAPERDOLL_CHEST;
break;
}
case L2Item.SLOT_LEGS:
{
pdollSlot = PAPERDOLL_LEGS;
break;
}
case L2Item.SLOT_BACK:
{
pdollSlot = PAPERDOLL_CLOAK;
break;
}
case L2Item.SLOT_FEET:
{
pdollSlot = PAPERDOLL_FEET;
break;
}
case L2Item.SLOT_UNDERWEAR:
{
pdollSlot = PAPERDOLL_UNDER;
break;
}
case L2Item.SLOT_L_BRACELET:
{
pdollSlot = PAPERDOLL_LBRACELET;
break;
}
case L2Item.SLOT_R_BRACELET:
{
pdollSlot = PAPERDOLL_RBRACELET;
break;
}
case L2Item.SLOT_DECO:
{
pdollSlot = PAPERDOLL_DECO1;
break;
}
case L2Item.SLOT_BELT:
{
pdollSlot = PAPERDOLL_BELT;
break;
}
case L2Item.SLOT_BROOCH:
{
pdollSlot = PAPERDOLL_BROOCH;
break;
}
case L2Item.SLOT_BROOCH_JEWEL:
{
pdollSlot = PAPERDOLL_BROOCH_JEWEL1;
break;
}
case L2Item.SLOT_AGATHION:
{
pdollSlot = PAPERDOLL_AGATHION1;
break;
}
default:
{
LOGGER.info("Unhandled slot type: " + slot);
LOGGER.info(CommonUtil.getTraceString(Thread.currentThread().getStackTrace()));
}
pdollSlot = PAPERDOLL_LEAR;
}
else if (slot == L2Item.SLOT_R_EAR)
{
pdollSlot = PAPERDOLL_REAR;
}
else if (slot == L2Item.SLOT_NECK)
{
pdollSlot = PAPERDOLL_NECK;
}
else if (slot == L2Item.SLOT_R_FINGER)
{
pdollSlot = PAPERDOLL_RFINGER;
}
else if (slot == L2Item.SLOT_L_FINGER)
{
pdollSlot = PAPERDOLL_LFINGER;
}
else if (slot == L2Item.SLOT_HAIR)
{
pdollSlot = PAPERDOLL_HAIR;
}
else if (slot == L2Item.SLOT_HAIR2)
{
pdollSlot = PAPERDOLL_HAIR2;
}
else if (slot == L2Item.SLOT_HAIRALL)
{
setPaperdollItem(PAPERDOLL_HAIR, null);
pdollSlot = PAPERDOLL_HAIR;
}
else if (slot == L2Item.SLOT_HEAD)
{
pdollSlot = PAPERDOLL_HEAD;
}
else if ((slot == L2Item.SLOT_R_HAND) || (slot == L2Item.SLOT_LR_HAND))
{
pdollSlot = PAPERDOLL_RHAND;
}
else if (slot == L2Item.SLOT_L_HAND)
{
pdollSlot = PAPERDOLL_LHAND;
}
else if (slot == L2Item.SLOT_GLOVES)
{
pdollSlot = PAPERDOLL_GLOVES;
}
else if ((slot == L2Item.SLOT_CHEST) || (slot == L2Item.SLOT_ALLDRESS) || (slot == L2Item.SLOT_FULL_ARMOR))
{
pdollSlot = PAPERDOLL_CHEST;
}
else if (slot == L2Item.SLOT_LEGS)
{
pdollSlot = PAPERDOLL_LEGS;
}
else if (slot == L2Item.SLOT_BACK)
{
pdollSlot = PAPERDOLL_CLOAK;
}
else if (slot == L2Item.SLOT_FEET)
{
pdollSlot = PAPERDOLL_FEET;
}
else if (slot == L2Item.SLOT_UNDERWEAR)
{
pdollSlot = PAPERDOLL_UNDER;
}
else if (slot == L2Item.SLOT_L_BRACELET)
{
pdollSlot = PAPERDOLL_LBRACELET;
}
else if (slot == L2Item.SLOT_R_BRACELET)
{
pdollSlot = PAPERDOLL_RBRACELET;
}
else if (slot == L2Item.SLOT_DECO)
{
pdollSlot = PAPERDOLL_DECO1;
}
else if (slot == L2Item.SLOT_BELT)
{
pdollSlot = PAPERDOLL_BELT;
}
else if (slot == L2Item.SLOT_BROOCH)
{
pdollSlot = PAPERDOLL_BROOCH;
}
else if (slot == L2Item.SLOT_BROOCH_JEWEL)
{
pdollSlot = PAPERDOLL_BROOCH_JEWEL1;
}
else if (slot == L2Item.SLOT_AGATHION)
{
pdollSlot = PAPERDOLL_AGATHION1;
}
else
{
LOGGER.info("Unhandled slot type: " + slot);
LOGGER.info(CommonUtil.getTraceString(Thread.currentThread().getStackTrace()));
}
if (pdollSlot >= 0)
{
@ -1567,225 +1533,184 @@ public abstract class Inventory extends ItemContainer
}
}
final int targetSlot = item.getItem().getBodyPart();
final long targetSlot = item.getItem().getBodyPart();
// Check if player is using Formal Wear and item isn't Wedding Bouquet.
final L2ItemInstance formal = getPaperdollItem(PAPERDOLL_CHEST);
if ((item.getId() != 21163) && (formal != null) && (formal.getItem().getBodyPart() == L2Item.SLOT_ALLDRESS))
{
// only chest target can pass this
switch (targetSlot)
if ((targetSlot == L2Item.SLOT_LR_HAND) || (targetSlot == L2Item.SLOT_L_HAND) || (targetSlot == L2Item.SLOT_R_HAND) || (targetSlot == L2Item.SLOT_LEGS) || (targetSlot == L2Item.SLOT_FEET) || (targetSlot == L2Item.SLOT_GLOVES) || (targetSlot == L2Item.SLOT_HEAD))
{
case L2Item.SLOT_LR_HAND:
case L2Item.SLOT_L_HAND:
case L2Item.SLOT_R_HAND:
case L2Item.SLOT_LEGS:
case L2Item.SLOT_FEET:
case L2Item.SLOT_GLOVES:
case L2Item.SLOT_HEAD:
{
return;
}
return;
}
}
switch (targetSlot)
// don't care about arrows, listener will unequip them (hopefully)
// handle full armor
// formal dress
if (targetSlot == L2Item.SLOT_LR_HAND)
{
case L2Item.SLOT_LR_HAND:
setPaperdollItem(PAPERDOLL_LHAND, null);
setPaperdollItem(PAPERDOLL_RHAND, item);
}
else if (targetSlot == L2Item.SLOT_L_HAND)
{
final L2ItemInstance rh = getPaperdollItem(PAPERDOLL_RHAND);
if ((rh != null) && (rh.getItem().getBodyPart() == L2Item.SLOT_LR_HAND) && !(((rh.getItemType() == WeaponType.BOW) && (item.getItemType() == EtcItemType.ARROW)) || (((rh.getItemType() == WeaponType.CROSSBOW) || (rh.getItemType() == WeaponType.TWOHANDCROSSBOW)) && (item.getItemType() == EtcItemType.BOLT)) || ((rh.getItemType() == WeaponType.FISHINGROD) && (item.getItemType() == EtcItemType.LURE))))
{
setPaperdollItem(PAPERDOLL_LHAND, null);
setPaperdollItem(PAPERDOLL_RHAND, item);
break;
setPaperdollItem(PAPERDOLL_RHAND, null);
}
case L2Item.SLOT_L_HAND:
setPaperdollItem(PAPERDOLL_LHAND, item);
}
else if (targetSlot == L2Item.SLOT_R_HAND)
{
setPaperdollItem(PAPERDOLL_RHAND, item);
}
else if ((targetSlot == L2Item.SLOT_L_EAR) || (targetSlot == L2Item.SLOT_R_EAR) || (targetSlot == L2Item.SLOT_LR_EAR))
{
if (_paperdoll[PAPERDOLL_LEAR] == null)
{
final L2ItemInstance rh = getPaperdollItem(PAPERDOLL_RHAND);
if ((rh != null) && (rh.getItem().getBodyPart() == L2Item.SLOT_LR_HAND) && !(((rh.getItemType() == WeaponType.BOW) && (item.getItemType() == EtcItemType.ARROW)) || (((rh.getItemType() == WeaponType.CROSSBOW) || (rh.getItemType() == WeaponType.TWOHANDCROSSBOW)) && (item.getItemType() == EtcItemType.BOLT)) || ((rh.getItemType() == WeaponType.FISHINGROD) && (item.getItemType() == EtcItemType.LURE))))
{
setPaperdollItem(PAPERDOLL_RHAND, null);
}
setPaperdollItem(PAPERDOLL_LHAND, item);
break;
setPaperdollItem(PAPERDOLL_LEAR, item);
}
case L2Item.SLOT_R_HAND:
else if (_paperdoll[PAPERDOLL_REAR] == null)
{
// don't care about arrows, listener will unequip them (hopefully)
setPaperdollItem(PAPERDOLL_RHAND, item);
break;
setPaperdollItem(PAPERDOLL_REAR, item);
}
case L2Item.SLOT_L_EAR:
case L2Item.SLOT_R_EAR:
case L2Item.SLOT_LR_EAR:
else
{
if (_paperdoll[PAPERDOLL_LEAR] == null)
{
setPaperdollItem(PAPERDOLL_LEAR, item);
}
else if (_paperdoll[PAPERDOLL_REAR] == null)
{
setPaperdollItem(PAPERDOLL_REAR, item);
}
else
{
setPaperdollItem(PAPERDOLL_LEAR, item);
}
break;
setPaperdollItem(PAPERDOLL_LEAR, item);
}
case L2Item.SLOT_L_FINGER:
case L2Item.SLOT_R_FINGER:
case L2Item.SLOT_LR_FINGER:
}
else if ((targetSlot == L2Item.SLOT_L_FINGER) || (targetSlot == L2Item.SLOT_R_FINGER) || (targetSlot == L2Item.SLOT_LR_FINGER))
{
if (_paperdoll[PAPERDOLL_LFINGER] == null)
{
if (_paperdoll[PAPERDOLL_LFINGER] == null)
{
setPaperdollItem(PAPERDOLL_LFINGER, item);
}
else if (_paperdoll[PAPERDOLL_RFINGER] == null)
{
setPaperdollItem(PAPERDOLL_RFINGER, item);
}
else
{
setPaperdollItem(PAPERDOLL_LFINGER, item);
}
break;
setPaperdollItem(PAPERDOLL_LFINGER, item);
}
case L2Item.SLOT_NECK:
else if (_paperdoll[PAPERDOLL_RFINGER] == null)
{
setPaperdollItem(PAPERDOLL_NECK, item);
break;
setPaperdollItem(PAPERDOLL_RFINGER, item);
}
case L2Item.SLOT_FULL_ARMOR:
else
{
setPaperdollItem(PAPERDOLL_LEGS, null);
setPaperdollItem(PAPERDOLL_CHEST, item);
break;
setPaperdollItem(PAPERDOLL_LFINGER, item);
}
case L2Item.SLOT_CHEST:
}
else if (targetSlot == L2Item.SLOT_NECK)
{
setPaperdollItem(PAPERDOLL_NECK, item);
}
else if (targetSlot == L2Item.SLOT_FULL_ARMOR)
{
setPaperdollItem(PAPERDOLL_LEGS, null);
setPaperdollItem(PAPERDOLL_CHEST, item);
}
else if (targetSlot == L2Item.SLOT_CHEST)
{
setPaperdollItem(PAPERDOLL_CHEST, item);
}
else if (targetSlot == L2Item.SLOT_LEGS)
{
final L2ItemInstance chest = getPaperdollItem(PAPERDOLL_CHEST);
if ((chest != null) && (chest.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR))
{
setPaperdollItem(PAPERDOLL_CHEST, item);
break;
setPaperdollItem(PAPERDOLL_CHEST, null);
}
case L2Item.SLOT_LEGS:
{
// handle full armor
final L2ItemInstance chest = getPaperdollItem(PAPERDOLL_CHEST);
if ((chest != null) && (chest.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR))
{
setPaperdollItem(PAPERDOLL_CHEST, null);
}
setPaperdollItem(PAPERDOLL_LEGS, item);
break;
}
case L2Item.SLOT_FEET:
{
setPaperdollItem(PAPERDOLL_FEET, item);
break;
}
case L2Item.SLOT_GLOVES:
{
setPaperdollItem(PAPERDOLL_GLOVES, item);
break;
}
case L2Item.SLOT_HEAD:
{
setPaperdollItem(PAPERDOLL_HEAD, item);
break;
}
case L2Item.SLOT_HAIR:
{
final L2ItemInstance hair = getPaperdollItem(PAPERDOLL_HAIR);
if ((hair != null) && (hair.getItem().getBodyPart() == L2Item.SLOT_HAIRALL))
{
setPaperdollItem(PAPERDOLL_HAIR2, null);
}
else
{
setPaperdollItem(PAPERDOLL_HAIR, null);
}
setPaperdollItem(PAPERDOLL_HAIR, item);
break;
}
case L2Item.SLOT_HAIR2:
{
final L2ItemInstance hair2 = getPaperdollItem(PAPERDOLL_HAIR);
if ((hair2 != null) && (hair2.getItem().getBodyPart() == L2Item.SLOT_HAIRALL))
{
setPaperdollItem(PAPERDOLL_HAIR, null);
}
else
{
setPaperdollItem(PAPERDOLL_HAIR2, null);
}
setPaperdollItem(PAPERDOLL_HAIR2, item);
break;
}
case L2Item.SLOT_HAIRALL:
setPaperdollItem(PAPERDOLL_LEGS, item);
}
else if (targetSlot == L2Item.SLOT_FEET)
{
setPaperdollItem(PAPERDOLL_FEET, item);
}
else if (targetSlot == L2Item.SLOT_GLOVES)
{
setPaperdollItem(PAPERDOLL_GLOVES, item);
}
else if (targetSlot == L2Item.SLOT_HEAD)
{
setPaperdollItem(PAPERDOLL_HEAD, item);
}
else if (targetSlot == L2Item.SLOT_HAIR)
{
final L2ItemInstance hair = getPaperdollItem(PAPERDOLL_HAIR);
if ((hair != null) && (hair.getItem().getBodyPart() == L2Item.SLOT_HAIRALL))
{
setPaperdollItem(PAPERDOLL_HAIR2, null);
setPaperdollItem(PAPERDOLL_HAIR, item);
break;
}
case L2Item.SLOT_UNDERWEAR:
else
{
setPaperdollItem(PAPERDOLL_UNDER, item);
break;
setPaperdollItem(PAPERDOLL_HAIR, null);
}
case L2Item.SLOT_BACK:
setPaperdollItem(PAPERDOLL_HAIR, item);
}
else if (targetSlot == L2Item.SLOT_HAIR2)
{
final L2ItemInstance hair2 = getPaperdollItem(PAPERDOLL_HAIR);
if ((hair2 != null) && (hair2.getItem().getBodyPart() == L2Item.SLOT_HAIRALL))
{
setPaperdollItem(PAPERDOLL_CLOAK, item);
break;
setPaperdollItem(PAPERDOLL_HAIR, null);
}
case L2Item.SLOT_L_BRACELET:
else
{
setPaperdollItem(PAPERDOLL_LBRACELET, item);
break;
}
case L2Item.SLOT_R_BRACELET:
{
setPaperdollItem(PAPERDOLL_RBRACELET, item);
break;
}
case L2Item.SLOT_DECO:
{
equipTalisman(item);
break;
}
case L2Item.SLOT_BELT:
{
setPaperdollItem(PAPERDOLL_BELT, item);
break;
}
case L2Item.SLOT_ALLDRESS:
{
// formal dress
setPaperdollItem(PAPERDOLL_LEGS, null);
setPaperdollItem(PAPERDOLL_LHAND, null);
setPaperdollItem(PAPERDOLL_RHAND, null);
setPaperdollItem(PAPERDOLL_HEAD, null);
setPaperdollItem(PAPERDOLL_FEET, null);
setPaperdollItem(PAPERDOLL_GLOVES, null);
setPaperdollItem(PAPERDOLL_CHEST, item);
break;
}
case L2Item.SLOT_BROOCH:
{
setPaperdollItem(PAPERDOLL_BROOCH, item);
break;
}
case L2Item.SLOT_BROOCH_JEWEL:
{
equipBroochJewel(item);
break;
}
case L2Item.SLOT_AGATHION:
{
equipAgathion(item);
break;
}
default:
{
LOGGER.warning("Unknown body slot " + targetSlot + " for Item ID: " + item.getId());
setPaperdollItem(PAPERDOLL_HAIR2, null);
}
setPaperdollItem(PAPERDOLL_HAIR2, item);
}
else if (targetSlot == L2Item.SLOT_HAIRALL)
{
setPaperdollItem(PAPERDOLL_HAIR2, null);
setPaperdollItem(PAPERDOLL_HAIR, item);
}
else if (targetSlot == L2Item.SLOT_UNDERWEAR)
{
setPaperdollItem(PAPERDOLL_UNDER, item);
}
else if (targetSlot == L2Item.SLOT_BACK)
{
setPaperdollItem(PAPERDOLL_CLOAK, item);
}
else if (targetSlot == L2Item.SLOT_L_BRACELET)
{
setPaperdollItem(PAPERDOLL_LBRACELET, item);
}
else if (targetSlot == L2Item.SLOT_R_BRACELET)
{
setPaperdollItem(PAPERDOLL_RBRACELET, item);
}
else if (targetSlot == L2Item.SLOT_DECO)
{
equipTalisman(item);
}
else if (targetSlot == L2Item.SLOT_BELT)
{
setPaperdollItem(PAPERDOLL_BELT, item);
}
else if (targetSlot == L2Item.SLOT_ALLDRESS)
{
setPaperdollItem(PAPERDOLL_LEGS, null);
setPaperdollItem(PAPERDOLL_LHAND, null);
setPaperdollItem(PAPERDOLL_RHAND, null);
setPaperdollItem(PAPERDOLL_HEAD, null);
setPaperdollItem(PAPERDOLL_FEET, null);
setPaperdollItem(PAPERDOLL_GLOVES, null);
setPaperdollItem(PAPERDOLL_CHEST, item);
}
else if (targetSlot == L2Item.SLOT_BROOCH)
{
setPaperdollItem(PAPERDOLL_BROOCH, item);
}
else if (targetSlot == L2Item.SLOT_BROOCH_JEWEL)
{
equipBroochJewel(item);
}
else if (targetSlot == L2Item.SLOT_AGATHION)
{
equipAgathion(item);
}
else
{
LOGGER.warning("Unknown body slot " + targetSlot + " for Item ID: " + item.getId());
}
}
@ -2097,7 +2022,7 @@ public abstract class Inventory extends ItemContainer
* Blocks the given item slot from being equipped.
* @param itemSlot mask from L2Item
*/
public void blockItemSlot(int itemSlot)
public void blockItemSlot(long itemSlot)
{
_blockedItemSlotsMask |= itemSlot;
}
@ -2106,7 +2031,7 @@ public abstract class Inventory extends ItemContainer
* Unblocks the given item slot so it can be equipped.
* @param itemSlot mask from L2Item
*/
public void unblockItemSlot(int itemSlot)
public void unblockItemSlot(long itemSlot)
{
_blockedItemSlotsMask &= ~itemSlot;
}
@ -2115,7 +2040,7 @@ public abstract class Inventory extends ItemContainer
* @param itemSlot mask from L2Item
* @return if the given item slot is blocked or not.
*/
public boolean isItemSlotBlocked(int itemSlot)
public boolean isItemSlotBlocked(long itemSlot)
{
return (_blockedItemSlotsMask & itemSlot) == itemSlot;
}

View File

@ -41,7 +41,7 @@ public final class L2Armor extends L2Item
super.set(set);
_type = set.getEnum("armor_type", ArmorType.class, ArmorType.NONE);
final int _bodyPart = getBodyPart();
final long _bodyPart = getBodyPart();
if ((_bodyPart == L2Item.SLOT_NECK) || ((_bodyPart & L2Item.SLOT_L_EAR) != 0) || ((_bodyPart & L2Item.SLOT_L_FINGER) != 0) || ((_bodyPart & L2Item.SLOT_R_BRACELET) != 0) || ((_bodyPart & L2Item.SLOT_L_BRACELET) != 0))
{
_type1 = L2Item.TYPE1_WEAPON_RING_EARRING_NECKLACE;

View File

@ -111,7 +111,7 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
public static final int SLOT_BELT = 0x10000000;
public static final int SLOT_BROOCH = 0x20000000;
public static final int SLOT_BROOCH_JEWEL = 0x40000000;
public static final int SLOT_AGATHION = 0x80000000;
public static final long SLOT_AGATHION = 0x3000000000L;
public static final int SLOT_WOLF = -100;
public static final int SLOT_HATCHLING = -101;
@ -134,7 +134,7 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
private int _duration;
private long _time;
private int _autoDestroyTime;
private int _bodyPart;
private long _bodyPart;
private long _referencePrice;
private int _crystalCount;
private boolean _sellable;
@ -503,7 +503,7 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
/**
* @return the part of the body used with the item.
*/
public final int getBodyPart()
public final long getBodyPart()
{
return _bodyPart;
}

View File

@ -171,7 +171,7 @@ public class L2WarehouseItem
/**
* @return the part of body used with this item.
*/
public final int getBodyPart()
public final long getBodyPart()
{
return _item.getBodyPart();
}

View File

@ -49,7 +49,7 @@ public class AppearanceStone
private final AppearanceMagicType _magicType;
private List<CrystalType> _crystalTypes;
private List<AppearanceTargetType> _targetTypes;
private List<Integer> _bodyParts;
private List<Long> _bodyParts;
private List<Race> _races;
private List<Race> _racesNot;
private List<AppearanceHolder> _allVisualIds;
@ -103,7 +103,7 @@ public class AppearanceStone
addCrystalType(crystalType);
}
final int bodyPart = ItemTable.SLOTS.get(set.getString("bodyPart", "none"));
final long bodyPart = ItemTable.SLOTS.get(set.getString("bodyPart", "none"));
if (bodyPart != L2Item.SLOT_NONE)
{
addBodyPart(bodyPart);
@ -195,7 +195,7 @@ public class AppearanceStone
return _targetTypes != null ? _targetTypes : Collections.emptyList();
}
public void addBodyPart(Integer part)
public void addBodyPart(long part)
{
if (_bodyParts == null)
{
@ -218,7 +218,7 @@ public class AppearanceStone
return _allVisualIds != null ? _allVisualIds : Collections.emptyList();
}
public List<Integer> getBodyParts()
public List<Long> getBodyParts()
{
return _bodyParts != null ? _bodyParts : Collections.emptyList();
}

View File

@ -54,7 +54,7 @@ public final class EnchantRateItem
* Adds body slot verification.
* @param slot
*/
public void addSlot(int slot)
public void addSlot(long slot)
{
_slot |= slot;
}

View File

@ -112,13 +112,13 @@ public interface IStatsFunction
for (L2ItemInstance equippedItem : creature.getInventory().getPaperdollItems(L2ItemInstance::isEquipped, L2ItemInstance::isEnchanted))
{
final L2Item item = equippedItem.getItem();
final int bodypart = item.getBodyPart();
final long bodypart = item.getBodyPart();
if ((bodypart == L2Item.SLOT_HAIR) || //
(bodypart == L2Item.SLOT_HAIR2) || //
(bodypart == L2Item.SLOT_HAIRALL))
{
// TODO: Item after enchant shows pDef, but scroll says mDef increase.
if (stat != Stats.PHYSICAL_DEFENCE && stat != Stats.MAGICAL_DEFENCE)
if ((stat != Stats.PHYSICAL_DEFENCE) && (stat != Stats.MAGICAL_DEFENCE))
{
continue;
}

View File

@ -214,7 +214,7 @@ public class L2SiegeZone extends L2ZoneType
}
else
{
final int slot = activeChar.getInventory().getSlotFromItem(activeChar.getInventory().getItemByItemId(9819));
final long slot = activeChar.getInventory().getSlotFromItem(activeChar.getInventory().getItemByItemId(9819));
activeChar.getInventory().unEquipItemInBodySlot(slot);
activeChar.destroyItem("CombatFlag", activeChar.getInventory().getItemByItemId(9819), null, true);
}

View File

@ -563,7 +563,7 @@ public class EnterWorld implements IClientIncomingPacket
}
else
{
final int slot = activeChar.getInventory().getSlotFromItem(activeChar.getInventory().getItemByItemId(9819));
final long slot = activeChar.getInventory().getSlotFromItem(activeChar.getInventory().getItemByItemId(9819));
activeChar.getInventory().unEquipItemInBodySlot(slot);
activeChar.destroyItem("CombatFlag", activeChar.getInventory().getItemByItemId(9819), null, true);
}

View File

@ -192,61 +192,49 @@ public final class UseItem implements IClientIncomingPacket
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
switch (item.getItem().getBodyPart())
// Prevent players to equip weapon while wearing combat flag
// Don't allow weapon/shield equipment if a cursed weapon is equipped.
if ((item.getItem().getBodyPart() == L2Item.SLOT_LR_HAND) || (item.getItem().getBodyPart() == L2Item.SLOT_L_HAND) || (item.getItem().getBodyPart() == L2Item.SLOT_R_HAND))
{
case L2Item.SLOT_LR_HAND:
case L2Item.SLOT_L_HAND:
case L2Item.SLOT_R_HAND:
if ((activeChar.getActiveWeaponItem() != null) && (activeChar.getActiveWeaponItem().getId() == 9819))
{
// Prevent players to equip weapon while wearing combat flag
if ((activeChar.getActiveWeaponItem() != null) && (activeChar.getActiveWeaponItem().getId() == 9819))
{
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
if (activeChar.isMounted() || activeChar.isDisarmed())
{
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
// Don't allow weapon/shield equipment if a cursed weapon is equipped.
if (activeChar.isCursedWeaponEquipped())
{
return;
}
break;
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
case L2Item.SLOT_DECO:
if (activeChar.isMounted() || activeChar.isDisarmed())
{
if (!item.isEquipped() && (activeChar.getInventory().getTalismanSlots() == 0))
{
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
break;
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
case L2Item.SLOT_BROOCH_JEWEL:
if (activeChar.isCursedWeaponEquipped())
{
if (!item.isEquipped() && (activeChar.getInventory().getBroochJewelSlots() == 0))
{
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_CANNOT_EQUIP_S1_WITHOUT_EQUIPPING_A_BROOCH);
sm.addItemName(item);
activeChar.sendPacket(sm);
return;
}
break;
return;
}
case L2Item.SLOT_AGATHION:
}
else if (item.getItem().getBodyPart() == L2Item.SLOT_DECO)
{
if (!item.isEquipped() && (activeChar.getInventory().getTalismanSlots() == 0))
{
if (!item.isEquipped() && (activeChar.getInventory().getAgathionSlots() == 0))
{
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
break;
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
}
else if (item.getItem().getBodyPart() == L2Item.SLOT_BROOCH_JEWEL)
{
if (!item.isEquipped() && (activeChar.getInventory().getBroochJewelSlots() == 0))
{
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_CANNOT_EQUIP_S1_WITHOUT_EQUIPPING_A_BROOCH);
sm.addItemName(item);
activeChar.sendPacket(sm);
return;
}
}
else if (item.getItem().getBodyPart() == L2Item.SLOT_AGATHION)
{
if (!item.isEquipped() && (activeChar.getInventory().getAgathionSlots() == 0))
{
activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM);
return;
}
}