private static final Set<Integer> VIRTUAL_SKILLS = Set.of(
29630, 29631, 29632, 29633, 29673, 29674, 29675, 29676, 29677, 29678, 29679, 29680,
29681, 29682, 29683, 29684, 29685, 29686
)
private void addItemOrSkill(Player player, VirtualItemHolder template, int paperdollSlot) {
if (player == null) {
return;
}
final int itemId = template.getItemId();
final int enchant = template.getEnchant();
if (VIRTUAL_SKILLS.contains(itemId)) {
final Skill skill = SkillData.getInstance().getSkill(itemId, enchant);
if (skill != null) {
player.getEffectList().stopSkillEffects(SkillFinishType.REMOVED, skill);
skill.applyEffects(player, player);
player.sendSkillList();
}
} else {
final InventoryUpdate iu = new InventoryUpdate();
if (paperdollSlot >= 0) {
Item existingItem = player.getInventory().getPaperdollItem(paperdollSlot);
if (existingItem != null && !existingItem.isVirtual()) {
player.getInventory().unEquipItemInSlot(paperdollSlot);
iu.addModifiedItem(existingItem);
}
}
Item visItem = new Item(itemId);
visItem.setCount(1);
visItem.setVirtual(true);
visItem.setOwnerId(player.getObjectId());
visItem.setEnchantLevel(enchant);
visItem = player.getInventory().addItem("VirtualItem", visItem, player, null);
if (paperdollSlot >= 0) {
player.getInventory().equipItemInSlot(visItem, paperdollSlot);
} else {
player.getInventory().equipItem(visItem);
}
iu.addModifiedItem(visItem);
player.sendPacket(iu);
player.broadcastUserInfo();
}
}
private void removeItemOrSkill(Player player, VirtualItemHolder holder, int paperdollSlot) {
if (player == null) {
return;
}
final int itemId = holder.getItemId();
final int enchant = holder.getEnchant();
if (VIRTUAL_SKILLS.contains(itemId)) {
final Skill skill = SkillData.getInstance().getSkill(itemId, enchant);
if (skill != null) {
player.removeSkill(skill);
player.getEffectList().stopSkillEffects(SkillFinishType.REMOVED, skill);
player.sendSkillList();
}
} else {
Item itemToDestroy = null;
if (paperdollSlot >= 0) {
Item paperdollItem = player.getInventory().getPaperdollItem(paperdollSlot);
if (paperdollItem != null && paperdollItem.isVirtual() && paperdollItem.getId() == itemId && paperdollItem.getEnchantLevel() == enchant) {
itemToDestroy = paperdollItem;
}
}
if (itemToDestroy == null) {
for (Item item : player.getInventory().getItems()) {
if (item.isVirtual() && item.getId() == itemId && item.getEnchantLevel() == enchant) {
itemToDestroy = item;
break;
}
}
}
if (itemToDestroy != null) {
player.getInventory().destroyItem("VirtualItemUpgrade", itemToDestroy, player, null);
final InventoryUpdate iu = new InventoryUpdate();
iu.addRemovedItem(itemToDestroy);
player.sendInventoryUpdate(iu);
}
}
}