From d8afa9fbbc7c8a0a5bc55bc1b1673ccc4a9959c6 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sun, 31 Mar 2019 23:34:07 +0000 Subject: [PATCH] Use simple arrays to store ItemInstance ensoul data. --- .../model/items/instance/ItemInstance.java | 119 +++++++++++----- .../ensoul/RequestItemEnsoul.java | 25 ++-- .../model/items/instance/ItemInstance.java | 119 +++++++++++----- .../ensoul/RequestItemEnsoul.java | 25 ++-- .../model/items/instance/ItemInstance.java | 127 ++++++++++++------ .../ensoul/RequestItemEnsoul.java | 25 ++-- .../model/items/instance/ItemInstance.java | 127 ++++++++++++------ .../ensoul/RequestItemEnsoul.java | 25 ++-- .../model/items/instance/ItemInstance.java | 127 ++++++++++++------ .../ensoul/RequestItemEnsoul.java | 25 ++-- .../model/items/instance/ItemInstance.java | 127 ++++++++++++------ .../ensoul/RequestItemEnsoul.java | 25 ++-- .../model/items/instance/ItemInstance.java | 127 ++++++++++++------ .../ensoul/RequestItemEnsoul.java | 25 ++-- .../model/items/instance/ItemInstance.java | 127 ++++++++++++------ .../ensoul/RequestItemEnsoul.java | 25 ++-- .../model/items/instance/ItemInstance.java | 127 ++++++++++++------ .../ensoul/RequestItemEnsoul.java | 25 ++-- .../model/items/instance/ItemInstance.java | 127 ++++++++++++------ .../ensoul/RequestItemEnsoul.java | 25 ++-- 20 files changed, 1004 insertions(+), 500 deletions(-) diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 75c09801f4..83f07a1d36 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -25,11 +25,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -176,8 +174,8 @@ public final class ItemInstance extends WorldObject private final DropProtection _dropProtection = new DropProtection(); private final List _enchantOptions = new ArrayList<>(); - private final Map _ensoulOptions = new LinkedHashMap<>(3); - private final Map _ensoulSpecialOptions = new LinkedHashMap<>(3); + private final EnsoulOption[] _ensoulOptions = new EnsoulOption[3]; + private final EnsoulOption[] _ensoulSpecialOptions = new EnsoulOption[3]; /** * Constructor of the ItemInstance from the objectId and the itemId. @@ -1536,7 +1534,9 @@ public final class ItemInstance extends WorldObject */ public class ItemDropTask implements Runnable { - private int _x, _y, _z; + private int _x; + private int _y; + private int _z; private final Creature _dropper; private final ItemInstance _itеm; @@ -1627,14 +1627,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -1675,14 +1674,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -2137,41 +2135,64 @@ public final class ItemInstance extends WorldObject public Collection getSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + if (_ensoulOption != null) + { + result.add(_ensoulOption); + } + } + return result; } public EnsoulOption getSpecialAbility(int index) { - return _ensoulOptions.get(index); + return _ensoulOptions[index]; } public Collection getAdditionalSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulSpecialOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + if (_ensoulSpecialOption != null) + { + result.add(_ensoulSpecialOption); + } + } + return result; } public EnsoulOption getAdditionalSpecialAbility(int index) { - return _ensoulSpecialOptions.get(index); + return _ensoulSpecialOptions[index]; } public void addSpecialAbility(EnsoulOption option, int position, int type, boolean updateInDB) { + if ((position < 0) || (position > 2)) + { + return; + } + if (type == 1) // Adding regular ability { - final EnsoulOption oldOption = _ensoulOptions.put(position, option); + final EnsoulOption oldOption = _ensoulOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulOptions[position] = option; } else if (type == 2) // Adding special ability { - final EnsoulOption oldOption = _ensoulSpecialOptions.put(position, option); + final EnsoulOption oldOption = _ensoulSpecialOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulSpecialOptions[position] = option; } if (updateInDB) @@ -2182,8 +2203,14 @@ public final class ItemInstance extends WorldObject public void clearSpecialAbilities() { - _ensoulOptions.values().forEach(this::clearSpecialAbility); - _ensoulSpecialOptions.values().forEach(this::clearSpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + clearSpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + clearSpecialAbility(_ensoulSpecialOption); + } } public void applySpecialAbilities() @@ -2193,8 +2220,14 @@ public final class ItemInstance extends WorldObject return; } - _ensoulOptions.values().forEach(this::applySpecialAbility); - _ensoulSpecialOptions.values().forEach(this::applySpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + applySpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + applySpecialAbility(_ensoulSpecialOption); + } } private void removeSpecialAbility(EnsoulOption option) @@ -2224,6 +2257,11 @@ public final class ItemInstance extends WorldObject private void applySpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2240,6 +2278,11 @@ public final class ItemInstance extends WorldObject private void clearSpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2295,27 +2338,37 @@ public final class ItemInstance extends WorldObject try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); - for (Entry entry : _ensoulOptions.entrySet()) + for (int i = 0; i < _ensoulOptions.length; i++) { + if (_ensoulOptions[i] == null) + { + continue; + } + ps.setInt(2, 1); // regular options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 1); // regular options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } - for (Entry entry : _ensoulSpecialOptions.entrySet()) + for (int i = 0; i < _ensoulSpecialOptions.length; i++) { + if (_ensoulSpecialOptions[i] == null) + { + continue; + } + ps.setInt(2, 2); // special options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulSpecialOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 2); // special options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulSpecialOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java index 864ce8fece..9779d2ff96 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java @@ -81,36 +81,36 @@ public class RequestItemEnsoul implements IClientIncomingPacket player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_USING_THE_PRIVATE_STORE_WORKSHOP); return; } - else if (player.hasAbnormalType(AbnormalType.FREEZING)) + if (player.hasAbnormalType(AbnormalType.FREEZING)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FROZEN); } - else if (player.isDead()) + if (player.isDead()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_DEAD); return; } - else if ((player.getActiveTradeList() != null) || player.hasItemRequest()) + if ((player.getActiveTradeList() != null) || player.hasItemRequest()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_TRADING); return; } - else if (player.hasAbnormalType(AbnormalType.PARALYZE)) + if (player.hasAbnormalType(AbnormalType.PARALYZE)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_PETRIFIED); return; } - else if (player.isFishing()) + if (player.isFishing()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FISHING); return; } - else if (player.isSitting()) + if (player.isSitting()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_SEATED); return; } - else if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) + if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_IN_BATTLE); return; @@ -122,32 +122,31 @@ public class RequestItemEnsoul implements IClientIncomingPacket LOGGER.warning("Player: " + player + " attempting to ensoul item without having it!"); return; } - else if (!item.isEquipable()) + if (!item.isEquipable()) { LOGGER.warning("Player: " + player + " attempting to ensoul non equippable item: " + item + "!"); return; } - else if (!item.isWeapon()) + if (!item.isWeapon()) { LOGGER.warning("Player: " + player + " attempting to ensoul item that's not a weapon: " + item + "!"); return; } - else if (item.isCommonItem()) + if (item.isCommonItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul common item: " + item + "!"); return; } - else if (item.isShadowItem()) + if (item.isShadowItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul shadow item: " + item + "!"); return; } - else if (item.isHeroItem()) + if (item.isHeroItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul hero item: " + item + "!"); return; } - if ((_options == null) || (_options.length == 0)) { LOGGER.warning("Player: " + player + " attempting to ensoul item without any special ability declared!"); diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 75c09801f4..83f07a1d36 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -25,11 +25,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -176,8 +174,8 @@ public final class ItemInstance extends WorldObject private final DropProtection _dropProtection = new DropProtection(); private final List _enchantOptions = new ArrayList<>(); - private final Map _ensoulOptions = new LinkedHashMap<>(3); - private final Map _ensoulSpecialOptions = new LinkedHashMap<>(3); + private final EnsoulOption[] _ensoulOptions = new EnsoulOption[3]; + private final EnsoulOption[] _ensoulSpecialOptions = new EnsoulOption[3]; /** * Constructor of the ItemInstance from the objectId and the itemId. @@ -1536,7 +1534,9 @@ public final class ItemInstance extends WorldObject */ public class ItemDropTask implements Runnable { - private int _x, _y, _z; + private int _x; + private int _y; + private int _z; private final Creature _dropper; private final ItemInstance _itеm; @@ -1627,14 +1627,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -1675,14 +1674,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -2137,41 +2135,64 @@ public final class ItemInstance extends WorldObject public Collection getSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + if (_ensoulOption != null) + { + result.add(_ensoulOption); + } + } + return result; } public EnsoulOption getSpecialAbility(int index) { - return _ensoulOptions.get(index); + return _ensoulOptions[index]; } public Collection getAdditionalSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulSpecialOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + if (_ensoulSpecialOption != null) + { + result.add(_ensoulSpecialOption); + } + } + return result; } public EnsoulOption getAdditionalSpecialAbility(int index) { - return _ensoulSpecialOptions.get(index); + return _ensoulSpecialOptions[index]; } public void addSpecialAbility(EnsoulOption option, int position, int type, boolean updateInDB) { + if ((position < 0) || (position > 2)) + { + return; + } + if (type == 1) // Adding regular ability { - final EnsoulOption oldOption = _ensoulOptions.put(position, option); + final EnsoulOption oldOption = _ensoulOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulOptions[position] = option; } else if (type == 2) // Adding special ability { - final EnsoulOption oldOption = _ensoulSpecialOptions.put(position, option); + final EnsoulOption oldOption = _ensoulSpecialOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulSpecialOptions[position] = option; } if (updateInDB) @@ -2182,8 +2203,14 @@ public final class ItemInstance extends WorldObject public void clearSpecialAbilities() { - _ensoulOptions.values().forEach(this::clearSpecialAbility); - _ensoulSpecialOptions.values().forEach(this::clearSpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + clearSpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + clearSpecialAbility(_ensoulSpecialOption); + } } public void applySpecialAbilities() @@ -2193,8 +2220,14 @@ public final class ItemInstance extends WorldObject return; } - _ensoulOptions.values().forEach(this::applySpecialAbility); - _ensoulSpecialOptions.values().forEach(this::applySpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + applySpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + applySpecialAbility(_ensoulSpecialOption); + } } private void removeSpecialAbility(EnsoulOption option) @@ -2224,6 +2257,11 @@ public final class ItemInstance extends WorldObject private void applySpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2240,6 +2278,11 @@ public final class ItemInstance extends WorldObject private void clearSpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2295,27 +2338,37 @@ public final class ItemInstance extends WorldObject try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); - for (Entry entry : _ensoulOptions.entrySet()) + for (int i = 0; i < _ensoulOptions.length; i++) { + if (_ensoulOptions[i] == null) + { + continue; + } + ps.setInt(2, 1); // regular options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 1); // regular options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } - for (Entry entry : _ensoulSpecialOptions.entrySet()) + for (int i = 0; i < _ensoulSpecialOptions.length; i++) { + if (_ensoulSpecialOptions[i] == null) + { + continue; + } + ps.setInt(2, 2); // special options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulSpecialOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 2); // special options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulSpecialOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java index 864ce8fece..9779d2ff96 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java @@ -81,36 +81,36 @@ public class RequestItemEnsoul implements IClientIncomingPacket player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_USING_THE_PRIVATE_STORE_WORKSHOP); return; } - else if (player.hasAbnormalType(AbnormalType.FREEZING)) + if (player.hasAbnormalType(AbnormalType.FREEZING)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FROZEN); } - else if (player.isDead()) + if (player.isDead()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_DEAD); return; } - else if ((player.getActiveTradeList() != null) || player.hasItemRequest()) + if ((player.getActiveTradeList() != null) || player.hasItemRequest()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_TRADING); return; } - else if (player.hasAbnormalType(AbnormalType.PARALYZE)) + if (player.hasAbnormalType(AbnormalType.PARALYZE)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_PETRIFIED); return; } - else if (player.isFishing()) + if (player.isFishing()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FISHING); return; } - else if (player.isSitting()) + if (player.isSitting()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_SEATED); return; } - else if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) + if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_IN_BATTLE); return; @@ -122,32 +122,31 @@ public class RequestItemEnsoul implements IClientIncomingPacket LOGGER.warning("Player: " + player + " attempting to ensoul item without having it!"); return; } - else if (!item.isEquipable()) + if (!item.isEquipable()) { LOGGER.warning("Player: " + player + " attempting to ensoul non equippable item: " + item + "!"); return; } - else if (!item.isWeapon()) + if (!item.isWeapon()) { LOGGER.warning("Player: " + player + " attempting to ensoul item that's not a weapon: " + item + "!"); return; } - else if (item.isCommonItem()) + if (item.isCommonItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul common item: " + item + "!"); return; } - else if (item.isShadowItem()) + if (item.isShadowItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul shadow item: " + item + "!"); return; } - else if (item.isHeroItem()) + if (item.isHeroItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul hero item: " + item + "!"); return; } - if ((_options == null) || (_options.length == 0)) { LOGGER.warning("Player: " + player + " attempting to ensoul item without any special ability declared!"); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 3294244397..cedbd6ebac 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -25,11 +25,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -176,8 +174,8 @@ public final class ItemInstance extends WorldObject private final DropProtection _dropProtection = new DropProtection(); private final List _enchantOptions = new ArrayList<>(); - private final Map _ensoulOptions = new LinkedHashMap<>(3); - private final Map _ensoulSpecialOptions = new LinkedHashMap<>(3); + private final EnsoulOption[] _ensoulOptions = new EnsoulOption[3]; + private final EnsoulOption[] _ensoulSpecialOptions = new EnsoulOption[3]; /** * Constructor of the ItemInstance from the objectId and the itemId. @@ -1629,14 +1627,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -1677,14 +1674,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -2139,41 +2135,64 @@ public final class ItemInstance extends WorldObject public Collection getSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + if (_ensoulOption != null) + { + result.add(_ensoulOption); + } + } + return result; } public EnsoulOption getSpecialAbility(int index) { - return _ensoulOptions.get(index); + return _ensoulOptions[index]; } public Collection getAdditionalSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulSpecialOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + if (_ensoulSpecialOption != null) + { + result.add(_ensoulSpecialOption); + } + } + return result; } public EnsoulOption getAdditionalSpecialAbility(int index) { - return _ensoulSpecialOptions.get(index); + return _ensoulSpecialOptions[index]; } public void addSpecialAbility(EnsoulOption option, int position, int type, boolean updateInDB) { + if ((position < 0) || (position > 2)) + { + return; + } + if (type == 1) // Adding regular ability { - final EnsoulOption oldOption = _ensoulOptions.put(position, option); + final EnsoulOption oldOption = _ensoulOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulOptions[position] = option; } else if (type == 2) // Adding special ability { - final EnsoulOption oldOption = _ensoulSpecialOptions.put(position, option); + final EnsoulOption oldOption = _ensoulSpecialOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulSpecialOptions[position] = option; } if (updateInDB) @@ -2186,20 +2205,20 @@ public final class ItemInstance extends WorldObject { if (type == 1) { - final EnsoulOption option = _ensoulOptions.get(position); + final EnsoulOption option = _ensoulOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulOptions.remove(position); + _ensoulOptions[position] = null; // Rearrange. if (position == 0) { - final EnsoulOption secondEnsoul = _ensoulOptions.get(1); + final EnsoulOption secondEnsoul = _ensoulOptions[1]; if (secondEnsoul != null) { removeSpecialAbility(secondEnsoul); - _ensoulOptions.remove(1); + _ensoulOptions[1] = null; addSpecialAbility(secondEnsoul, 0, 1, true); } } @@ -2207,19 +2226,25 @@ public final class ItemInstance extends WorldObject } else if (type == 2) { - final EnsoulOption option = _ensoulSpecialOptions.get(position); + final EnsoulOption option = _ensoulSpecialOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulSpecialOptions.remove(position); + _ensoulSpecialOptions[position] = null; } } } public void clearSpecialAbilities() { - _ensoulOptions.values().forEach(this::clearSpecialAbility); - _ensoulSpecialOptions.values().forEach(this::clearSpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + clearSpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + clearSpecialAbility(_ensoulSpecialOption); + } } public void applySpecialAbilities() @@ -2229,8 +2254,14 @@ public final class ItemInstance extends WorldObject return; } - _ensoulOptions.values().forEach(this::applySpecialAbility); - _ensoulSpecialOptions.values().forEach(this::applySpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + applySpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + applySpecialAbility(_ensoulSpecialOption); + } } private void removeSpecialAbility(EnsoulOption option) @@ -2260,6 +2291,11 @@ public final class ItemInstance extends WorldObject private void applySpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2276,6 +2312,11 @@ public final class ItemInstance extends WorldObject private void clearSpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2331,27 +2372,37 @@ public final class ItemInstance extends WorldObject try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); - for (Entry entry : _ensoulOptions.entrySet()) + for (int i = 0; i < _ensoulOptions.length; i++) { + if (_ensoulOptions[i] == null) + { + continue; + } + ps.setInt(2, 1); // regular options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 1); // regular options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } - for (Entry entry : _ensoulSpecialOptions.entrySet()) + for (int i = 0; i < _ensoulSpecialOptions.length; i++) { + if (_ensoulSpecialOptions[i] == null) + { + continue; + } + ps.setInt(2, 2); // special options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulSpecialOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 2); // special options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulSpecialOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java index 864ce8fece..9779d2ff96 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java @@ -81,36 +81,36 @@ public class RequestItemEnsoul implements IClientIncomingPacket player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_USING_THE_PRIVATE_STORE_WORKSHOP); return; } - else if (player.hasAbnormalType(AbnormalType.FREEZING)) + if (player.hasAbnormalType(AbnormalType.FREEZING)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FROZEN); } - else if (player.isDead()) + if (player.isDead()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_DEAD); return; } - else if ((player.getActiveTradeList() != null) || player.hasItemRequest()) + if ((player.getActiveTradeList() != null) || player.hasItemRequest()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_TRADING); return; } - else if (player.hasAbnormalType(AbnormalType.PARALYZE)) + if (player.hasAbnormalType(AbnormalType.PARALYZE)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_PETRIFIED); return; } - else if (player.isFishing()) + if (player.isFishing()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FISHING); return; } - else if (player.isSitting()) + if (player.isSitting()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_SEATED); return; } - else if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) + if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_IN_BATTLE); return; @@ -122,32 +122,31 @@ public class RequestItemEnsoul implements IClientIncomingPacket LOGGER.warning("Player: " + player + " attempting to ensoul item without having it!"); return; } - else if (!item.isEquipable()) + if (!item.isEquipable()) { LOGGER.warning("Player: " + player + " attempting to ensoul non equippable item: " + item + "!"); return; } - else if (!item.isWeapon()) + if (!item.isWeapon()) { LOGGER.warning("Player: " + player + " attempting to ensoul item that's not a weapon: " + item + "!"); return; } - else if (item.isCommonItem()) + if (item.isCommonItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul common item: " + item + "!"); return; } - else if (item.isShadowItem()) + if (item.isShadowItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul shadow item: " + item + "!"); return; } - else if (item.isHeroItem()) + if (item.isHeroItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul hero item: " + item + "!"); return; } - if ((_options == null) || (_options.length == 0)) { LOGGER.warning("Player: " + player + " attempting to ensoul item without any special ability declared!"); diff --git a/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 3294244397..cedbd6ebac 100644 --- a/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -25,11 +25,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -176,8 +174,8 @@ public final class ItemInstance extends WorldObject private final DropProtection _dropProtection = new DropProtection(); private final List _enchantOptions = new ArrayList<>(); - private final Map _ensoulOptions = new LinkedHashMap<>(3); - private final Map _ensoulSpecialOptions = new LinkedHashMap<>(3); + private final EnsoulOption[] _ensoulOptions = new EnsoulOption[3]; + private final EnsoulOption[] _ensoulSpecialOptions = new EnsoulOption[3]; /** * Constructor of the ItemInstance from the objectId and the itemId. @@ -1629,14 +1627,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -1677,14 +1674,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -2139,41 +2135,64 @@ public final class ItemInstance extends WorldObject public Collection getSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + if (_ensoulOption != null) + { + result.add(_ensoulOption); + } + } + return result; } public EnsoulOption getSpecialAbility(int index) { - return _ensoulOptions.get(index); + return _ensoulOptions[index]; } public Collection getAdditionalSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulSpecialOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + if (_ensoulSpecialOption != null) + { + result.add(_ensoulSpecialOption); + } + } + return result; } public EnsoulOption getAdditionalSpecialAbility(int index) { - return _ensoulSpecialOptions.get(index); + return _ensoulSpecialOptions[index]; } public void addSpecialAbility(EnsoulOption option, int position, int type, boolean updateInDB) { + if ((position < 0) || (position > 2)) + { + return; + } + if (type == 1) // Adding regular ability { - final EnsoulOption oldOption = _ensoulOptions.put(position, option); + final EnsoulOption oldOption = _ensoulOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulOptions[position] = option; } else if (type == 2) // Adding special ability { - final EnsoulOption oldOption = _ensoulSpecialOptions.put(position, option); + final EnsoulOption oldOption = _ensoulSpecialOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulSpecialOptions[position] = option; } if (updateInDB) @@ -2186,20 +2205,20 @@ public final class ItemInstance extends WorldObject { if (type == 1) { - final EnsoulOption option = _ensoulOptions.get(position); + final EnsoulOption option = _ensoulOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulOptions.remove(position); + _ensoulOptions[position] = null; // Rearrange. if (position == 0) { - final EnsoulOption secondEnsoul = _ensoulOptions.get(1); + final EnsoulOption secondEnsoul = _ensoulOptions[1]; if (secondEnsoul != null) { removeSpecialAbility(secondEnsoul); - _ensoulOptions.remove(1); + _ensoulOptions[1] = null; addSpecialAbility(secondEnsoul, 0, 1, true); } } @@ -2207,19 +2226,25 @@ public final class ItemInstance extends WorldObject } else if (type == 2) { - final EnsoulOption option = _ensoulSpecialOptions.get(position); + final EnsoulOption option = _ensoulSpecialOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulSpecialOptions.remove(position); + _ensoulSpecialOptions[position] = null; } } } public void clearSpecialAbilities() { - _ensoulOptions.values().forEach(this::clearSpecialAbility); - _ensoulSpecialOptions.values().forEach(this::clearSpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + clearSpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + clearSpecialAbility(_ensoulSpecialOption); + } } public void applySpecialAbilities() @@ -2229,8 +2254,14 @@ public final class ItemInstance extends WorldObject return; } - _ensoulOptions.values().forEach(this::applySpecialAbility); - _ensoulSpecialOptions.values().forEach(this::applySpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + applySpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + applySpecialAbility(_ensoulSpecialOption); + } } private void removeSpecialAbility(EnsoulOption option) @@ -2260,6 +2291,11 @@ public final class ItemInstance extends WorldObject private void applySpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2276,6 +2312,11 @@ public final class ItemInstance extends WorldObject private void clearSpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2331,27 +2372,37 @@ public final class ItemInstance extends WorldObject try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); - for (Entry entry : _ensoulOptions.entrySet()) + for (int i = 0; i < _ensoulOptions.length; i++) { + if (_ensoulOptions[i] == null) + { + continue; + } + ps.setInt(2, 1); // regular options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 1); // regular options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } - for (Entry entry : _ensoulSpecialOptions.entrySet()) + for (int i = 0; i < _ensoulSpecialOptions.length; i++) { + if (_ensoulSpecialOptions[i] == null) + { + continue; + } + ps.setInt(2, 2); // special options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulSpecialOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 2); // special options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulSpecialOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } } diff --git a/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java index 864ce8fece..9779d2ff96 100644 --- a/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java +++ b/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java @@ -81,36 +81,36 @@ public class RequestItemEnsoul implements IClientIncomingPacket player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_USING_THE_PRIVATE_STORE_WORKSHOP); return; } - else if (player.hasAbnormalType(AbnormalType.FREEZING)) + if (player.hasAbnormalType(AbnormalType.FREEZING)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FROZEN); } - else if (player.isDead()) + if (player.isDead()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_DEAD); return; } - else if ((player.getActiveTradeList() != null) || player.hasItemRequest()) + if ((player.getActiveTradeList() != null) || player.hasItemRequest()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_TRADING); return; } - else if (player.hasAbnormalType(AbnormalType.PARALYZE)) + if (player.hasAbnormalType(AbnormalType.PARALYZE)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_PETRIFIED); return; } - else if (player.isFishing()) + if (player.isFishing()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FISHING); return; } - else if (player.isSitting()) + if (player.isSitting()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_SEATED); return; } - else if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) + if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_IN_BATTLE); return; @@ -122,32 +122,31 @@ public class RequestItemEnsoul implements IClientIncomingPacket LOGGER.warning("Player: " + player + " attempting to ensoul item without having it!"); return; } - else if (!item.isEquipable()) + if (!item.isEquipable()) { LOGGER.warning("Player: " + player + " attempting to ensoul non equippable item: " + item + "!"); return; } - else if (!item.isWeapon()) + if (!item.isWeapon()) { LOGGER.warning("Player: " + player + " attempting to ensoul item that's not a weapon: " + item + "!"); return; } - else if (item.isCommonItem()) + if (item.isCommonItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul common item: " + item + "!"); return; } - else if (item.isShadowItem()) + if (item.isShadowItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul shadow item: " + item + "!"); return; } - else if (item.isHeroItem()) + if (item.isHeroItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul hero item: " + item + "!"); return; } - if ((_options == null) || (_options.length == 0)) { LOGGER.warning("Player: " + player + " attempting to ensoul item without any special ability declared!"); diff --git a/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 3294244397..cedbd6ebac 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -25,11 +25,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -176,8 +174,8 @@ public final class ItemInstance extends WorldObject private final DropProtection _dropProtection = new DropProtection(); private final List _enchantOptions = new ArrayList<>(); - private final Map _ensoulOptions = new LinkedHashMap<>(3); - private final Map _ensoulSpecialOptions = new LinkedHashMap<>(3); + private final EnsoulOption[] _ensoulOptions = new EnsoulOption[3]; + private final EnsoulOption[] _ensoulSpecialOptions = new EnsoulOption[3]; /** * Constructor of the ItemInstance from the objectId and the itemId. @@ -1629,14 +1627,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -1677,14 +1674,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -2139,41 +2135,64 @@ public final class ItemInstance extends WorldObject public Collection getSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + if (_ensoulOption != null) + { + result.add(_ensoulOption); + } + } + return result; } public EnsoulOption getSpecialAbility(int index) { - return _ensoulOptions.get(index); + return _ensoulOptions[index]; } public Collection getAdditionalSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulSpecialOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + if (_ensoulSpecialOption != null) + { + result.add(_ensoulSpecialOption); + } + } + return result; } public EnsoulOption getAdditionalSpecialAbility(int index) { - return _ensoulSpecialOptions.get(index); + return _ensoulSpecialOptions[index]; } public void addSpecialAbility(EnsoulOption option, int position, int type, boolean updateInDB) { + if ((position < 0) || (position > 2)) + { + return; + } + if (type == 1) // Adding regular ability { - final EnsoulOption oldOption = _ensoulOptions.put(position, option); + final EnsoulOption oldOption = _ensoulOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulOptions[position] = option; } else if (type == 2) // Adding special ability { - final EnsoulOption oldOption = _ensoulSpecialOptions.put(position, option); + final EnsoulOption oldOption = _ensoulSpecialOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulSpecialOptions[position] = option; } if (updateInDB) @@ -2186,20 +2205,20 @@ public final class ItemInstance extends WorldObject { if (type == 1) { - final EnsoulOption option = _ensoulOptions.get(position); + final EnsoulOption option = _ensoulOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulOptions.remove(position); + _ensoulOptions[position] = null; // Rearrange. if (position == 0) { - final EnsoulOption secondEnsoul = _ensoulOptions.get(1); + final EnsoulOption secondEnsoul = _ensoulOptions[1]; if (secondEnsoul != null) { removeSpecialAbility(secondEnsoul); - _ensoulOptions.remove(1); + _ensoulOptions[1] = null; addSpecialAbility(secondEnsoul, 0, 1, true); } } @@ -2207,19 +2226,25 @@ public final class ItemInstance extends WorldObject } else if (type == 2) { - final EnsoulOption option = _ensoulSpecialOptions.get(position); + final EnsoulOption option = _ensoulSpecialOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulSpecialOptions.remove(position); + _ensoulSpecialOptions[position] = null; } } } public void clearSpecialAbilities() { - _ensoulOptions.values().forEach(this::clearSpecialAbility); - _ensoulSpecialOptions.values().forEach(this::clearSpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + clearSpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + clearSpecialAbility(_ensoulSpecialOption); + } } public void applySpecialAbilities() @@ -2229,8 +2254,14 @@ public final class ItemInstance extends WorldObject return; } - _ensoulOptions.values().forEach(this::applySpecialAbility); - _ensoulSpecialOptions.values().forEach(this::applySpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + applySpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + applySpecialAbility(_ensoulSpecialOption); + } } private void removeSpecialAbility(EnsoulOption option) @@ -2260,6 +2291,11 @@ public final class ItemInstance extends WorldObject private void applySpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2276,6 +2312,11 @@ public final class ItemInstance extends WorldObject private void clearSpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2331,27 +2372,37 @@ public final class ItemInstance extends WorldObject try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); - for (Entry entry : _ensoulOptions.entrySet()) + for (int i = 0; i < _ensoulOptions.length; i++) { + if (_ensoulOptions[i] == null) + { + continue; + } + ps.setInt(2, 1); // regular options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 1); // regular options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } - for (Entry entry : _ensoulSpecialOptions.entrySet()) + for (int i = 0; i < _ensoulSpecialOptions.length; i++) { + if (_ensoulSpecialOptions[i] == null) + { + continue; + } + ps.setInt(2, 2); // special options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulSpecialOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 2); // special options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulSpecialOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } } diff --git a/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java index 864ce8fece..9779d2ff96 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java +++ b/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java @@ -81,36 +81,36 @@ public class RequestItemEnsoul implements IClientIncomingPacket player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_USING_THE_PRIVATE_STORE_WORKSHOP); return; } - else if (player.hasAbnormalType(AbnormalType.FREEZING)) + if (player.hasAbnormalType(AbnormalType.FREEZING)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FROZEN); } - else if (player.isDead()) + if (player.isDead()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_DEAD); return; } - else if ((player.getActiveTradeList() != null) || player.hasItemRequest()) + if ((player.getActiveTradeList() != null) || player.hasItemRequest()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_TRADING); return; } - else if (player.hasAbnormalType(AbnormalType.PARALYZE)) + if (player.hasAbnormalType(AbnormalType.PARALYZE)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_PETRIFIED); return; } - else if (player.isFishing()) + if (player.isFishing()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FISHING); return; } - else if (player.isSitting()) + if (player.isSitting()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_SEATED); return; } - else if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) + if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_IN_BATTLE); return; @@ -122,32 +122,31 @@ public class RequestItemEnsoul implements IClientIncomingPacket LOGGER.warning("Player: " + player + " attempting to ensoul item without having it!"); return; } - else if (!item.isEquipable()) + if (!item.isEquipable()) { LOGGER.warning("Player: " + player + " attempting to ensoul non equippable item: " + item + "!"); return; } - else if (!item.isWeapon()) + if (!item.isWeapon()) { LOGGER.warning("Player: " + player + " attempting to ensoul item that's not a weapon: " + item + "!"); return; } - else if (item.isCommonItem()) + if (item.isCommonItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul common item: " + item + "!"); return; } - else if (item.isShadowItem()) + if (item.isShadowItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul shadow item: " + item + "!"); return; } - else if (item.isHeroItem()) + if (item.isHeroItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul hero item: " + item + "!"); return; } - if ((_options == null) || (_options.length == 0)) { LOGGER.warning("Player: " + player + " attempting to ensoul item without any special ability declared!"); diff --git a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 3294244397..cedbd6ebac 100644 --- a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -25,11 +25,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -176,8 +174,8 @@ public final class ItemInstance extends WorldObject private final DropProtection _dropProtection = new DropProtection(); private final List _enchantOptions = new ArrayList<>(); - private final Map _ensoulOptions = new LinkedHashMap<>(3); - private final Map _ensoulSpecialOptions = new LinkedHashMap<>(3); + private final EnsoulOption[] _ensoulOptions = new EnsoulOption[3]; + private final EnsoulOption[] _ensoulSpecialOptions = new EnsoulOption[3]; /** * Constructor of the ItemInstance from the objectId and the itemId. @@ -1629,14 +1627,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -1677,14 +1674,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -2139,41 +2135,64 @@ public final class ItemInstance extends WorldObject public Collection getSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + if (_ensoulOption != null) + { + result.add(_ensoulOption); + } + } + return result; } public EnsoulOption getSpecialAbility(int index) { - return _ensoulOptions.get(index); + return _ensoulOptions[index]; } public Collection getAdditionalSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulSpecialOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + if (_ensoulSpecialOption != null) + { + result.add(_ensoulSpecialOption); + } + } + return result; } public EnsoulOption getAdditionalSpecialAbility(int index) { - return _ensoulSpecialOptions.get(index); + return _ensoulSpecialOptions[index]; } public void addSpecialAbility(EnsoulOption option, int position, int type, boolean updateInDB) { + if ((position < 0) || (position > 2)) + { + return; + } + if (type == 1) // Adding regular ability { - final EnsoulOption oldOption = _ensoulOptions.put(position, option); + final EnsoulOption oldOption = _ensoulOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulOptions[position] = option; } else if (type == 2) // Adding special ability { - final EnsoulOption oldOption = _ensoulSpecialOptions.put(position, option); + final EnsoulOption oldOption = _ensoulSpecialOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulSpecialOptions[position] = option; } if (updateInDB) @@ -2186,20 +2205,20 @@ public final class ItemInstance extends WorldObject { if (type == 1) { - final EnsoulOption option = _ensoulOptions.get(position); + final EnsoulOption option = _ensoulOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulOptions.remove(position); + _ensoulOptions[position] = null; // Rearrange. if (position == 0) { - final EnsoulOption secondEnsoul = _ensoulOptions.get(1); + final EnsoulOption secondEnsoul = _ensoulOptions[1]; if (secondEnsoul != null) { removeSpecialAbility(secondEnsoul); - _ensoulOptions.remove(1); + _ensoulOptions[1] = null; addSpecialAbility(secondEnsoul, 0, 1, true); } } @@ -2207,19 +2226,25 @@ public final class ItemInstance extends WorldObject } else if (type == 2) { - final EnsoulOption option = _ensoulSpecialOptions.get(position); + final EnsoulOption option = _ensoulSpecialOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulSpecialOptions.remove(position); + _ensoulSpecialOptions[position] = null; } } } public void clearSpecialAbilities() { - _ensoulOptions.values().forEach(this::clearSpecialAbility); - _ensoulSpecialOptions.values().forEach(this::clearSpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + clearSpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + clearSpecialAbility(_ensoulSpecialOption); + } } public void applySpecialAbilities() @@ -2229,8 +2254,14 @@ public final class ItemInstance extends WorldObject return; } - _ensoulOptions.values().forEach(this::applySpecialAbility); - _ensoulSpecialOptions.values().forEach(this::applySpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + applySpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + applySpecialAbility(_ensoulSpecialOption); + } } private void removeSpecialAbility(EnsoulOption option) @@ -2260,6 +2291,11 @@ public final class ItemInstance extends WorldObject private void applySpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2276,6 +2312,11 @@ public final class ItemInstance extends WorldObject private void clearSpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2331,27 +2372,37 @@ public final class ItemInstance extends WorldObject try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); - for (Entry entry : _ensoulOptions.entrySet()) + for (int i = 0; i < _ensoulOptions.length; i++) { + if (_ensoulOptions[i] == null) + { + continue; + } + ps.setInt(2, 1); // regular options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 1); // regular options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } - for (Entry entry : _ensoulSpecialOptions.entrySet()) + for (int i = 0; i < _ensoulSpecialOptions.length; i++) { + if (_ensoulSpecialOptions[i] == null) + { + continue; + } + ps.setInt(2, 2); // special options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulSpecialOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 2); // special options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulSpecialOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } } diff --git a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java index 864ce8fece..9779d2ff96 100644 --- a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java +++ b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java @@ -81,36 +81,36 @@ public class RequestItemEnsoul implements IClientIncomingPacket player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_USING_THE_PRIVATE_STORE_WORKSHOP); return; } - else if (player.hasAbnormalType(AbnormalType.FREEZING)) + if (player.hasAbnormalType(AbnormalType.FREEZING)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FROZEN); } - else if (player.isDead()) + if (player.isDead()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_DEAD); return; } - else if ((player.getActiveTradeList() != null) || player.hasItemRequest()) + if ((player.getActiveTradeList() != null) || player.hasItemRequest()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_TRADING); return; } - else if (player.hasAbnormalType(AbnormalType.PARALYZE)) + if (player.hasAbnormalType(AbnormalType.PARALYZE)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_PETRIFIED); return; } - else if (player.isFishing()) + if (player.isFishing()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_FISHING); return; } - else if (player.isSitting()) + if (player.isSitting()) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_SEATED); return; } - else if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) + if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { player.sendPacket(SystemMessageId.CANNOT_USE_THE_SOUL_CRYSTAL_SYSTEM_WHILE_IN_BATTLE); return; @@ -122,32 +122,31 @@ public class RequestItemEnsoul implements IClientIncomingPacket LOGGER.warning("Player: " + player + " attempting to ensoul item without having it!"); return; } - else if (!item.isEquipable()) + if (!item.isEquipable()) { LOGGER.warning("Player: " + player + " attempting to ensoul non equippable item: " + item + "!"); return; } - else if (!item.isWeapon()) + if (!item.isWeapon()) { LOGGER.warning("Player: " + player + " attempting to ensoul item that's not a weapon: " + item + "!"); return; } - else if (item.isCommonItem()) + if (item.isCommonItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul common item: " + item + "!"); return; } - else if (item.isShadowItem()) + if (item.isShadowItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul shadow item: " + item + "!"); return; } - else if (item.isHeroItem()) + if (item.isHeroItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul hero item: " + item + "!"); return; } - if ((_options == null) || (_options.length == 0)) { LOGGER.warning("Player: " + player + " attempting to ensoul item without any special ability declared!"); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 1c5b49ebb5..1b387aefca 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -25,11 +25,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -176,8 +174,8 @@ public final class ItemInstance extends WorldObject private final DropProtection _dropProtection = new DropProtection(); private final List _enchantOptions = new ArrayList<>(); - private final Map _ensoulOptions = new LinkedHashMap<>(3); - private final Map _ensoulSpecialOptions = new LinkedHashMap<>(3); + private final EnsoulOption[] _ensoulOptions = new EnsoulOption[3]; + private final EnsoulOption[] _ensoulSpecialOptions = new EnsoulOption[3]; /** * Constructor of the ItemInstance from the objectId and the itemId. @@ -1627,14 +1625,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -1675,14 +1672,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -2137,41 +2133,64 @@ public final class ItemInstance extends WorldObject public Collection getSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + if (_ensoulOption != null) + { + result.add(_ensoulOption); + } + } + return result; } public EnsoulOption getSpecialAbility(int index) { - return _ensoulOptions.get(index); + return _ensoulOptions[index]; } public Collection getAdditionalSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulSpecialOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + if (_ensoulSpecialOption != null) + { + result.add(_ensoulSpecialOption); + } + } + return result; } public EnsoulOption getAdditionalSpecialAbility(int index) { - return _ensoulSpecialOptions.get(index); + return _ensoulSpecialOptions[index]; } public void addSpecialAbility(EnsoulOption option, int position, int type, boolean updateInDB) { + if ((position < 0) || (position > 2)) + { + return; + } + if (type == 1) // Adding regular ability { - final EnsoulOption oldOption = _ensoulOptions.put(position, option); + final EnsoulOption oldOption = _ensoulOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulOptions[position] = option; } else if (type == 2) // Adding special ability { - final EnsoulOption oldOption = _ensoulSpecialOptions.put(position, option); + final EnsoulOption oldOption = _ensoulSpecialOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulSpecialOptions[position] = option; } if (updateInDB) @@ -2184,20 +2203,20 @@ public final class ItemInstance extends WorldObject { if (type == 1) { - final EnsoulOption option = _ensoulOptions.get(position); + final EnsoulOption option = _ensoulOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulOptions.remove(position); + _ensoulOptions[position] = null; // Rearrange. if (position == 0) { - final EnsoulOption secondEnsoul = _ensoulOptions.get(1); + final EnsoulOption secondEnsoul = _ensoulOptions[1]; if (secondEnsoul != null) { removeSpecialAbility(secondEnsoul); - _ensoulOptions.remove(1); + _ensoulOptions[1] = null; addSpecialAbility(secondEnsoul, 0, 1, true); } } @@ -2205,19 +2224,25 @@ public final class ItemInstance extends WorldObject } else if (type == 2) { - final EnsoulOption option = _ensoulSpecialOptions.get(position); + final EnsoulOption option = _ensoulSpecialOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulSpecialOptions.remove(position); + _ensoulSpecialOptions[position] = null; } } } public void clearSpecialAbilities() { - _ensoulOptions.values().forEach(this::clearSpecialAbility); - _ensoulSpecialOptions.values().forEach(this::clearSpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + clearSpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + clearSpecialAbility(_ensoulSpecialOption); + } } public void applySpecialAbilities() @@ -2227,8 +2252,14 @@ public final class ItemInstance extends WorldObject return; } - _ensoulOptions.values().forEach(this::applySpecialAbility); - _ensoulSpecialOptions.values().forEach(this::applySpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + applySpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + applySpecialAbility(_ensoulSpecialOption); + } } private void removeSpecialAbility(EnsoulOption option) @@ -2258,6 +2289,11 @@ public final class ItemInstance extends WorldObject private void applySpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2274,6 +2310,11 @@ public final class ItemInstance extends WorldObject private void clearSpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2329,27 +2370,37 @@ public final class ItemInstance extends WorldObject try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); - for (Entry entry : _ensoulOptions.entrySet()) + for (int i = 0; i < _ensoulOptions.length; i++) { + if (_ensoulOptions[i] == null) + { + continue; + } + ps.setInt(2, 1); // regular options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 1); // regular options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } - for (Entry entry : _ensoulSpecialOptions.entrySet()) + for (int i = 0; i < _ensoulSpecialOptions.length; i++) { + if (_ensoulSpecialOptions[i] == null) + { + continue; + } + ps.setInt(2, 2); // special options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulSpecialOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 2); // special options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulSpecialOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java index e987507d07..2bbf065a8e 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java @@ -81,36 +81,36 @@ public class RequestItemEnsoul implements IClientIncomingPacket player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHEN_PRIVATE_STORE_AND_WORKSHOP_ARE_OPENED); return; } - else if (player.hasAbnormalType(AbnormalType.FREEZING)) + if (player.hasAbnormalType(AbnormalType.FREEZING)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_IN_FROZEN_STATE); } - else if (player.isDead()) + if (player.isDead()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_IF_THE_CHARACTER_IS_DEAD); return; } - else if ((player.getActiveTradeList() != null) || player.hasItemRequest()) + if ((player.getActiveTradeList() != null) || player.hasItemRequest()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_DURING_EXCHANGE); return; } - else if (player.hasAbnormalType(AbnormalType.PARALYZE)) + if (player.hasAbnormalType(AbnormalType.PARALYZE)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_PETRIFIED); return; } - else if (player.isFishing()) + if (player.isFishing()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_DURING_FISHING); return; } - else if (player.isSitting()) + if (player.isSitting()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_SITTING); return; } - else if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) + if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_IN_COMBAT); return; @@ -122,32 +122,31 @@ public class RequestItemEnsoul implements IClientIncomingPacket LOGGER.warning("Player: " + player + " attempting to ensoul item without having it!"); return; } - else if (!item.isEquipable()) + if (!item.isEquipable()) { LOGGER.warning("Player: " + player + " attempting to ensoul non equippable item: " + item + "!"); return; } - else if (!item.isWeapon()) + if (!item.isWeapon()) { LOGGER.warning("Player: " + player + " attempting to ensoul item that's not a weapon: " + item + "!"); return; } - else if (item.isCommonItem()) + if (item.isCommonItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul common item: " + item + "!"); return; } - else if (item.isShadowItem()) + if (item.isShadowItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul shadow item: " + item + "!"); return; } - else if (item.isHeroItem()) + if (item.isHeroItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul hero item: " + item + "!"); return; } - if ((_options == null) || (_options.length == 0)) { LOGGER.warning("Player: " + player + " attempting to ensoul item without any special ability declared!"); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 1c5b49ebb5..1b387aefca 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -25,11 +25,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -176,8 +174,8 @@ public final class ItemInstance extends WorldObject private final DropProtection _dropProtection = new DropProtection(); private final List _enchantOptions = new ArrayList<>(); - private final Map _ensoulOptions = new LinkedHashMap<>(3); - private final Map _ensoulSpecialOptions = new LinkedHashMap<>(3); + private final EnsoulOption[] _ensoulOptions = new EnsoulOption[3]; + private final EnsoulOption[] _ensoulSpecialOptions = new EnsoulOption[3]; /** * Constructor of the ItemInstance from the objectId and the itemId. @@ -1627,14 +1625,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -1675,14 +1672,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -2137,41 +2133,64 @@ public final class ItemInstance extends WorldObject public Collection getSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + if (_ensoulOption != null) + { + result.add(_ensoulOption); + } + } + return result; } public EnsoulOption getSpecialAbility(int index) { - return _ensoulOptions.get(index); + return _ensoulOptions[index]; } public Collection getAdditionalSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulSpecialOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + if (_ensoulSpecialOption != null) + { + result.add(_ensoulSpecialOption); + } + } + return result; } public EnsoulOption getAdditionalSpecialAbility(int index) { - return _ensoulSpecialOptions.get(index); + return _ensoulSpecialOptions[index]; } public void addSpecialAbility(EnsoulOption option, int position, int type, boolean updateInDB) { + if ((position < 0) || (position > 2)) + { + return; + } + if (type == 1) // Adding regular ability { - final EnsoulOption oldOption = _ensoulOptions.put(position, option); + final EnsoulOption oldOption = _ensoulOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulOptions[position] = option; } else if (type == 2) // Adding special ability { - final EnsoulOption oldOption = _ensoulSpecialOptions.put(position, option); + final EnsoulOption oldOption = _ensoulSpecialOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulSpecialOptions[position] = option; } if (updateInDB) @@ -2184,20 +2203,20 @@ public final class ItemInstance extends WorldObject { if (type == 1) { - final EnsoulOption option = _ensoulOptions.get(position); + final EnsoulOption option = _ensoulOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulOptions.remove(position); + _ensoulOptions[position] = null; // Rearrange. if (position == 0) { - final EnsoulOption secondEnsoul = _ensoulOptions.get(1); + final EnsoulOption secondEnsoul = _ensoulOptions[1]; if (secondEnsoul != null) { removeSpecialAbility(secondEnsoul); - _ensoulOptions.remove(1); + _ensoulOptions[1] = null; addSpecialAbility(secondEnsoul, 0, 1, true); } } @@ -2205,19 +2224,25 @@ public final class ItemInstance extends WorldObject } else if (type == 2) { - final EnsoulOption option = _ensoulSpecialOptions.get(position); + final EnsoulOption option = _ensoulSpecialOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulSpecialOptions.remove(position); + _ensoulSpecialOptions[position] = null; } } } public void clearSpecialAbilities() { - _ensoulOptions.values().forEach(this::clearSpecialAbility); - _ensoulSpecialOptions.values().forEach(this::clearSpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + clearSpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + clearSpecialAbility(_ensoulSpecialOption); + } } public void applySpecialAbilities() @@ -2227,8 +2252,14 @@ public final class ItemInstance extends WorldObject return; } - _ensoulOptions.values().forEach(this::applySpecialAbility); - _ensoulSpecialOptions.values().forEach(this::applySpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + applySpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + applySpecialAbility(_ensoulSpecialOption); + } } private void removeSpecialAbility(EnsoulOption option) @@ -2258,6 +2289,11 @@ public final class ItemInstance extends WorldObject private void applySpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2274,6 +2310,11 @@ public final class ItemInstance extends WorldObject private void clearSpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2329,27 +2370,37 @@ public final class ItemInstance extends WorldObject try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); - for (Entry entry : _ensoulOptions.entrySet()) + for (int i = 0; i < _ensoulOptions.length; i++) { + if (_ensoulOptions[i] == null) + { + continue; + } + ps.setInt(2, 1); // regular options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 1); // regular options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } - for (Entry entry : _ensoulSpecialOptions.entrySet()) + for (int i = 0; i < _ensoulSpecialOptions.length; i++) { + if (_ensoulSpecialOptions[i] == null) + { + continue; + } + ps.setInt(2, 2); // special options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulSpecialOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 2); // special options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulSpecialOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java index e987507d07..2bbf065a8e 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java @@ -81,36 +81,36 @@ public class RequestItemEnsoul implements IClientIncomingPacket player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHEN_PRIVATE_STORE_AND_WORKSHOP_ARE_OPENED); return; } - else if (player.hasAbnormalType(AbnormalType.FREEZING)) + if (player.hasAbnormalType(AbnormalType.FREEZING)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_IN_FROZEN_STATE); } - else if (player.isDead()) + if (player.isDead()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_IF_THE_CHARACTER_IS_DEAD); return; } - else if ((player.getActiveTradeList() != null) || player.hasItemRequest()) + if ((player.getActiveTradeList() != null) || player.hasItemRequest()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_DURING_EXCHANGE); return; } - else if (player.hasAbnormalType(AbnormalType.PARALYZE)) + if (player.hasAbnormalType(AbnormalType.PARALYZE)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_PETRIFIED); return; } - else if (player.isFishing()) + if (player.isFishing()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_DURING_FISHING); return; } - else if (player.isSitting()) + if (player.isSitting()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_SITTING); return; } - else if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) + if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_IN_COMBAT); return; @@ -122,32 +122,31 @@ public class RequestItemEnsoul implements IClientIncomingPacket LOGGER.warning("Player: " + player + " attempting to ensoul item without having it!"); return; } - else if (!item.isEquipable()) + if (!item.isEquipable()) { LOGGER.warning("Player: " + player + " attempting to ensoul non equippable item: " + item + "!"); return; } - else if (!item.isWeapon()) + if (!item.isWeapon()) { LOGGER.warning("Player: " + player + " attempting to ensoul item that's not a weapon: " + item + "!"); return; } - else if (item.isCommonItem()) + if (item.isCommonItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul common item: " + item + "!"); return; } - else if (item.isShadowItem()) + if (item.isShadowItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul shadow item: " + item + "!"); return; } - else if (item.isHeroItem()) + if (item.isHeroItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul hero item: " + item + "!"); return; } - if ((_options == null) || (_options.length == 0)) { LOGGER.warning("Player: " + player + " attempting to ensoul item without any special ability declared!"); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 1c5b49ebb5..1b387aefca 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -25,11 +25,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -176,8 +174,8 @@ public final class ItemInstance extends WorldObject private final DropProtection _dropProtection = new DropProtection(); private final List _enchantOptions = new ArrayList<>(); - private final Map _ensoulOptions = new LinkedHashMap<>(3); - private final Map _ensoulSpecialOptions = new LinkedHashMap<>(3); + private final EnsoulOption[] _ensoulOptions = new EnsoulOption[3]; + private final EnsoulOption[] _ensoulSpecialOptions = new EnsoulOption[3]; /** * Constructor of the ItemInstance from the objectId and the itemId. @@ -1627,14 +1625,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -1675,14 +1672,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -2137,41 +2133,64 @@ public final class ItemInstance extends WorldObject public Collection getSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + if (_ensoulOption != null) + { + result.add(_ensoulOption); + } + } + return result; } public EnsoulOption getSpecialAbility(int index) { - return _ensoulOptions.get(index); + return _ensoulOptions[index]; } public Collection getAdditionalSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulSpecialOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + if (_ensoulSpecialOption != null) + { + result.add(_ensoulSpecialOption); + } + } + return result; } public EnsoulOption getAdditionalSpecialAbility(int index) { - return _ensoulSpecialOptions.get(index); + return _ensoulSpecialOptions[index]; } public void addSpecialAbility(EnsoulOption option, int position, int type, boolean updateInDB) { + if ((position < 0) || (position > 2)) + { + return; + } + if (type == 1) // Adding regular ability { - final EnsoulOption oldOption = _ensoulOptions.put(position, option); + final EnsoulOption oldOption = _ensoulOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulOptions[position] = option; } else if (type == 2) // Adding special ability { - final EnsoulOption oldOption = _ensoulSpecialOptions.put(position, option); + final EnsoulOption oldOption = _ensoulSpecialOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulSpecialOptions[position] = option; } if (updateInDB) @@ -2184,20 +2203,20 @@ public final class ItemInstance extends WorldObject { if (type == 1) { - final EnsoulOption option = _ensoulOptions.get(position); + final EnsoulOption option = _ensoulOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulOptions.remove(position); + _ensoulOptions[position] = null; // Rearrange. if (position == 0) { - final EnsoulOption secondEnsoul = _ensoulOptions.get(1); + final EnsoulOption secondEnsoul = _ensoulOptions[1]; if (secondEnsoul != null) { removeSpecialAbility(secondEnsoul); - _ensoulOptions.remove(1); + _ensoulOptions[1] = null; addSpecialAbility(secondEnsoul, 0, 1, true); } } @@ -2205,19 +2224,25 @@ public final class ItemInstance extends WorldObject } else if (type == 2) { - final EnsoulOption option = _ensoulSpecialOptions.get(position); + final EnsoulOption option = _ensoulSpecialOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulSpecialOptions.remove(position); + _ensoulSpecialOptions[position] = null; } } } public void clearSpecialAbilities() { - _ensoulOptions.values().forEach(this::clearSpecialAbility); - _ensoulSpecialOptions.values().forEach(this::clearSpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + clearSpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + clearSpecialAbility(_ensoulSpecialOption); + } } public void applySpecialAbilities() @@ -2227,8 +2252,14 @@ public final class ItemInstance extends WorldObject return; } - _ensoulOptions.values().forEach(this::applySpecialAbility); - _ensoulSpecialOptions.values().forEach(this::applySpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + applySpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + applySpecialAbility(_ensoulSpecialOption); + } } private void removeSpecialAbility(EnsoulOption option) @@ -2258,6 +2289,11 @@ public final class ItemInstance extends WorldObject private void applySpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2274,6 +2310,11 @@ public final class ItemInstance extends WorldObject private void clearSpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2329,27 +2370,37 @@ public final class ItemInstance extends WorldObject try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); - for (Entry entry : _ensoulOptions.entrySet()) + for (int i = 0; i < _ensoulOptions.length; i++) { + if (_ensoulOptions[i] == null) + { + continue; + } + ps.setInt(2, 1); // regular options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 1); // regular options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } - for (Entry entry : _ensoulSpecialOptions.entrySet()) + for (int i = 0; i < _ensoulSpecialOptions.length; i++) { + if (_ensoulSpecialOptions[i] == null) + { + continue; + } + ps.setInt(2, 2); // special options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulSpecialOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 2); // special options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulSpecialOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java index e987507d07..2bbf065a8e 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java @@ -81,36 +81,36 @@ public class RequestItemEnsoul implements IClientIncomingPacket player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHEN_PRIVATE_STORE_AND_WORKSHOP_ARE_OPENED); return; } - else if (player.hasAbnormalType(AbnormalType.FREEZING)) + if (player.hasAbnormalType(AbnormalType.FREEZING)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_IN_FROZEN_STATE); } - else if (player.isDead()) + if (player.isDead()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_IF_THE_CHARACTER_IS_DEAD); return; } - else if ((player.getActiveTradeList() != null) || player.hasItemRequest()) + if ((player.getActiveTradeList() != null) || player.hasItemRequest()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_DURING_EXCHANGE); return; } - else if (player.hasAbnormalType(AbnormalType.PARALYZE)) + if (player.hasAbnormalType(AbnormalType.PARALYZE)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_PETRIFIED); return; } - else if (player.isFishing()) + if (player.isFishing()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_DURING_FISHING); return; } - else if (player.isSitting()) + if (player.isSitting()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_SITTING); return; } - else if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) + if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_IN_COMBAT); return; @@ -122,32 +122,31 @@ public class RequestItemEnsoul implements IClientIncomingPacket LOGGER.warning("Player: " + player + " attempting to ensoul item without having it!"); return; } - else if (!item.isEquipable()) + if (!item.isEquipable()) { LOGGER.warning("Player: " + player + " attempting to ensoul non equippable item: " + item + "!"); return; } - else if (!item.isWeapon()) + if (!item.isWeapon()) { LOGGER.warning("Player: " + player + " attempting to ensoul item that's not a weapon: " + item + "!"); return; } - else if (item.isCommonItem()) + if (item.isCommonItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul common item: " + item + "!"); return; } - else if (item.isShadowItem()) + if (item.isShadowItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul shadow item: " + item + "!"); return; } - else if (item.isHeroItem()) + if (item.isHeroItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul hero item: " + item + "!"); return; } - if ((_options == null) || (_options.length == 0)) { LOGGER.warning("Player: " + player + " attempting to ensoul item without any special ability declared!"); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 1c5b49ebb5..1b387aefca 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -25,11 +25,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -176,8 +174,8 @@ public final class ItemInstance extends WorldObject private final DropProtection _dropProtection = new DropProtection(); private final List _enchantOptions = new ArrayList<>(); - private final Map _ensoulOptions = new LinkedHashMap<>(3); - private final Map _ensoulSpecialOptions = new LinkedHashMap<>(3); + private final EnsoulOption[] _ensoulOptions = new EnsoulOption[3]; + private final EnsoulOption[] _ensoulSpecialOptions = new EnsoulOption[3]; /** * Constructor of the ItemInstance from the objectId and the itemId. @@ -1627,14 +1625,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -1675,14 +1672,13 @@ public final class ItemInstance extends WorldObject { updateItemOptions(con); } + if (_elementals != null) { updateItemElements(con); } - if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) - { - updateSpecialAbilities(con); - } + + updateSpecialAbilities(con); } catch (Exception e) { @@ -2137,41 +2133,64 @@ public final class ItemInstance extends WorldObject public Collection getSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + if (_ensoulOption != null) + { + result.add(_ensoulOption); + } + } + return result; } public EnsoulOption getSpecialAbility(int index) { - return _ensoulOptions.get(index); + return _ensoulOptions[index]; } public Collection getAdditionalSpecialAbilities() { - return Collections.unmodifiableCollection(_ensoulSpecialOptions.values()); + final List result = new ArrayList<>(); + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + if (_ensoulSpecialOption != null) + { + result.add(_ensoulSpecialOption); + } + } + return result; } public EnsoulOption getAdditionalSpecialAbility(int index) { - return _ensoulSpecialOptions.get(index); + return _ensoulSpecialOptions[index]; } public void addSpecialAbility(EnsoulOption option, int position, int type, boolean updateInDB) { + if ((position < 0) || (position > 2)) + { + return; + } + if (type == 1) // Adding regular ability { - final EnsoulOption oldOption = _ensoulOptions.put(position, option); + final EnsoulOption oldOption = _ensoulOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulOptions[position] = option; } else if (type == 2) // Adding special ability { - final EnsoulOption oldOption = _ensoulSpecialOptions.put(position, option); + final EnsoulOption oldOption = _ensoulSpecialOptions[position]; if (oldOption != null) { removeSpecialAbility(oldOption); } + _ensoulSpecialOptions[position] = option; } if (updateInDB) @@ -2184,20 +2203,20 @@ public final class ItemInstance extends WorldObject { if (type == 1) { - final EnsoulOption option = _ensoulOptions.get(position); + final EnsoulOption option = _ensoulOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulOptions.remove(position); + _ensoulOptions[position] = null; // Rearrange. if (position == 0) { - final EnsoulOption secondEnsoul = _ensoulOptions.get(1); + final EnsoulOption secondEnsoul = _ensoulOptions[1]; if (secondEnsoul != null) { removeSpecialAbility(secondEnsoul); - _ensoulOptions.remove(1); + _ensoulOptions[1] = null; addSpecialAbility(secondEnsoul, 0, 1, true); } } @@ -2205,19 +2224,25 @@ public final class ItemInstance extends WorldObject } else if (type == 2) { - final EnsoulOption option = _ensoulSpecialOptions.get(position); + final EnsoulOption option = _ensoulSpecialOptions[position]; if (option != null) { removeSpecialAbility(option); - _ensoulSpecialOptions.remove(position); + _ensoulSpecialOptions[position] = null; } } } public void clearSpecialAbilities() { - _ensoulOptions.values().forEach(this::clearSpecialAbility); - _ensoulSpecialOptions.values().forEach(this::clearSpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + clearSpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + clearSpecialAbility(_ensoulSpecialOption); + } } public void applySpecialAbilities() @@ -2227,8 +2252,14 @@ public final class ItemInstance extends WorldObject return; } - _ensoulOptions.values().forEach(this::applySpecialAbility); - _ensoulSpecialOptions.values().forEach(this::applySpecialAbility); + for (EnsoulOption _ensoulOption : _ensoulOptions) + { + applySpecialAbility(_ensoulOption); + } + for (EnsoulOption _ensoulSpecialOption : _ensoulSpecialOptions) + { + applySpecialAbility(_ensoulSpecialOption); + } } private void removeSpecialAbility(EnsoulOption option) @@ -2258,6 +2289,11 @@ public final class ItemInstance extends WorldObject private void applySpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2274,6 +2310,11 @@ public final class ItemInstance extends WorldObject private void clearSpecialAbility(EnsoulOption option) { + if (option == null) + { + return; + } + final Skill skill = option.getSkill(); if (skill != null) { @@ -2329,27 +2370,37 @@ public final class ItemInstance extends WorldObject try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); - for (Entry entry : _ensoulOptions.entrySet()) + for (int i = 0; i < _ensoulOptions.length; i++) { + if (_ensoulOptions[i] == null) + { + continue; + } + ps.setInt(2, 1); // regular options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 1); // regular options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } - for (Entry entry : _ensoulSpecialOptions.entrySet()) + for (int i = 0; i < _ensoulSpecialOptions.length; i++) { + if (_ensoulSpecialOptions[i] == null) + { + continue; + } + ps.setInt(2, 2); // special options - ps.setInt(3, entry.getValue().getId()); - ps.setInt(4, entry.getKey()); + ps.setInt(3, _ensoulSpecialOptions[i].getId()); + ps.setInt(4, i); ps.setInt(5, 2); // special options - ps.setInt(6, entry.getValue().getId()); - ps.setInt(7, entry.getKey()); + ps.setInt(6, _ensoulSpecialOptions[i].getId()); + ps.setInt(7, i); ps.execute(); } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java index e987507d07..2bbf065a8e 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java @@ -81,36 +81,36 @@ public class RequestItemEnsoul implements IClientIncomingPacket player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHEN_PRIVATE_STORE_AND_WORKSHOP_ARE_OPENED); return; } - else if (player.hasAbnormalType(AbnormalType.FREEZING)) + if (player.hasAbnormalType(AbnormalType.FREEZING)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_IN_FROZEN_STATE); } - else if (player.isDead()) + if (player.isDead()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_IF_THE_CHARACTER_IS_DEAD); return; } - else if ((player.getActiveTradeList() != null) || player.hasItemRequest()) + if ((player.getActiveTradeList() != null) || player.hasItemRequest()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_DURING_EXCHANGE); return; } - else if (player.hasAbnormalType(AbnormalType.PARALYZE)) + if (player.hasAbnormalType(AbnormalType.PARALYZE)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_PETRIFIED); return; } - else if (player.isFishing()) + if (player.isFishing()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_DURING_FISHING); return; } - else if (player.isSitting()) + if (player.isSitting()) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_SITTING); return; } - else if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) + if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { player.sendPacket(SystemMessageId.RUNE_INSERTION_IS_IMPOSSIBLE_WHILE_IN_COMBAT); return; @@ -122,32 +122,31 @@ public class RequestItemEnsoul implements IClientIncomingPacket LOGGER.warning("Player: " + player + " attempting to ensoul item without having it!"); return; } - else if (!item.isEquipable()) + if (!item.isEquipable()) { LOGGER.warning("Player: " + player + " attempting to ensoul non equippable item: " + item + "!"); return; } - else if (!item.isWeapon()) + if (!item.isWeapon()) { LOGGER.warning("Player: " + player + " attempting to ensoul item that's not a weapon: " + item + "!"); return; } - else if (item.isCommonItem()) + if (item.isCommonItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul common item: " + item + "!"); return; } - else if (item.isShadowItem()) + if (item.isShadowItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul shadow item: " + item + "!"); return; } - else if (item.isHeroItem()) + if (item.isHeroItem()) { LOGGER.warning("Player: " + player + " attempting to ensoul hero item: " + item + "!"); return; } - if ((_options == null) || (_options.length == 0)) { LOGGER.warning("Player: " + player + " attempting to ensoul item without any special ability declared!");