diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java index e3cb3d181b..ce56555128 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3354,6 +3354,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3410,6 +3425,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java index 1f7275c9c9..095c969053 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3356,6 +3356,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3412,6 +3427,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Player.java index c66305dcf6..d6278b9f34 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3358,6 +3358,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3414,6 +3429,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Player.java index a43cdaf22a..5397d8a826 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3353,6 +3353,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3409,6 +3424,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Player.java index 381fd21993..0514a617ae 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3411,6 +3411,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3467,6 +3482,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Player.java index 3dfda86a9f..75d90435e2 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3424,6 +3424,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3480,6 +3495,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Player.java index 1ec94d7ddb..f5ab6ea423 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3425,6 +3425,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3481,6 +3496,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Player.java index 68e6b87b22..4aa6855599 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3370,6 +3370,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3426,6 +3441,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Player.java index 9ac8bf98fc..cdd3123358 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3410,6 +3410,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3466,6 +3481,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Player.java index 8df0f2c6c5..0695192288 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3429,6 +3429,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3485,6 +3500,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_11.1_TheSourceOfFlame/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_11.1_TheSourceOfFlame/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 62bd9c7da1..9cca015ad5 100644 --- a/L2J_Mobius_11.1_TheSourceOfFlame/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_11.1_TheSourceOfFlame/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index a1b1e72b9e..e003828223 100644 --- a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -32,7 +32,7 @@ import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.enums.ChatType; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; import org.l2jmobius.gameserver.network.serverpackets.CreatureSay; import org.l2jmobius.gameserver.util.Util; @@ -64,28 +64,30 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); player.sendPacket(new CreatureSay(null, ChatType.WHISPER, rs.getString("subject"), rs.getString("message"))); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Integer.parseInt(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Integer.parseInt(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - player.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, true); + player.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), itemHolder.getEnchantLevel(), null, true); } } diff --git a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java index 2b04fbbc14..f3764d8e87 100644 --- a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3110,15 +3110,31 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, int count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : int Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, int count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { final ItemTemplate item = ItemTable.getInstance().getTemplate(itemId); if (item == null) { - LOGGER.log(Level.SEVERE, "Item doesn't exist so cannot be added. Item ID: " + itemId); + LOGGER.severe("Item doesn't exist so cannot be added. Item ID: " + itemId); return null; } + // Sends message to client if requested if (sendMessage && ((!isCastingNow() && item.hasExImmediateEffect()) || !item.hasExImmediateEffect())) { @@ -3139,20 +3155,17 @@ public class Player extends Playable sendPacket(sm); } } + else if (process.equalsIgnoreCase("Sweeper") || process.equalsIgnoreCase("Quest")) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); + sm.addItemName(itemId); + sendPacket(sm); + } else { - if (process.equalsIgnoreCase("Sweeper") || process.equalsIgnoreCase("Quest")) - { - final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); - sm.addItemName(itemId); - sendPacket(sm); - } - else - { - final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_OBTAINED_S1); - sm.addItemName(itemId); - sendPacket(sm); - } + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_OBTAINED_S1); + sm.addItemName(itemId); + sendPacket(sm); } } @@ -3169,6 +3182,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..0fe4bb7172 --- /dev/null +++ b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,65 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(int id, int count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, int count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 926b2043a6..2cd12272f8 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MessageSenderType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), MessageSenderType.PLAYER); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Player.java index 7e5cd98ecf..145c045fb5 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3340,15 +3340,31 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { final ItemTemplate item = ItemTable.getInstance().getTemplate(itemId); if (item == null) { - LOGGER.log(Level.SEVERE, "Item doesn't exist so cannot be added. Item ID: " + itemId); + LOGGER.severe("Item doesn't exist so cannot be added. Item ID: " + itemId); return null; } + // Sends message to client if requested if (sendMessage && ((!isCastingNow() && item.hasExImmediateEffect()) || !item.hasExImmediateEffect())) { @@ -3369,20 +3385,17 @@ public class Player extends Playable sendPacket(sm); } } + else if (process.equalsIgnoreCase("Sweeper") || process.equalsIgnoreCase("Quest")) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); + sm.addItemName(itemId); + sendPacket(sm); + } else { - if (process.equalsIgnoreCase("Sweeper") || process.equalsIgnoreCase("Quest")) - { - final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); - sm.addItemName(itemId); - sendPacket(sm); - } - else - { - final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_OBTAINED_S1); - sm.addItemName(itemId); - sendPacket(sm); - } + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_OBTAINED_S1); + sm.addItemName(itemId); + sendPacket(sm); } } @@ -3399,6 +3412,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..40cc8240a9 --- /dev/null +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,65 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 926b2043a6..2cd12272f8 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MessageSenderType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), MessageSenderType.PLAYER); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Player.java index 53e43e58ff..1c6e467bb6 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3251,15 +3251,31 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { final ItemTemplate item = ItemTable.getInstance().getTemplate(itemId); if (item == null) { - LOGGER.log(Level.SEVERE, "Item doesn't exist so cannot be added. Item ID: " + itemId); + LOGGER.severe("Item doesn't exist so cannot be added. Item ID: " + itemId); return null; } + // Sends message to client if requested if (sendMessage && ((!isCastingNow() && item.hasExImmediateEffect()) || !item.hasExImmediateEffect())) { @@ -3280,20 +3296,17 @@ public class Player extends Playable sendPacket(sm); } } + else if (process.equalsIgnoreCase("Sweeper") || process.equalsIgnoreCase("Quest")) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); + sm.addItemName(itemId); + sendPacket(sm); + } else { - if (process.equalsIgnoreCase("Sweeper") || process.equalsIgnoreCase("Quest")) - { - final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); - sm.addItemName(itemId); - sendPacket(sm); - } - else - { - final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_OBTAINED_S1); - sm.addItemName(itemId); - sendPacket(sm); - } + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_OBTAINED_S1); + sm.addItemName(itemId); + sendPacket(sm); } } @@ -3310,6 +3323,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..40cc8240a9 --- /dev/null +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,65 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/actor/Player.java index e6c46dd4e3..07334b87b5 100644 --- a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3307,6 +3307,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3363,6 +3378,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/actor/Player.java index 94385df2a6..145ebdd781 100644 --- a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3316,6 +3316,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3372,6 +3387,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java index 94385df2a6..145ebdd781 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3316,6 +3316,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3372,6 +3387,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/actor/Player.java index ec9f60340f..5f87f4c78c 100644 --- a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3316,6 +3316,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3372,6 +3387,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/actor/Player.java index b82a25f5d9..365870a9f0 100644 --- a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3314,6 +3314,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3370,6 +3385,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Player.java index c76a595f52..b17eb2ce31 100644 --- a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3341,6 +3341,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3397,6 +3412,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java index 215883d7da..62b76866fc 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3355,6 +3355,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3411,6 +3426,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Player.java index 9868035574..bd95379ac7 100644 --- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3341,6 +3341,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3397,6 +3412,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Player.java index dd01d3306d..bc8be67547 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3287,6 +3287,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3343,6 +3358,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java index 306e020129..475b25a182 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3296,6 +3296,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3352,6 +3367,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..c24856fd2a --- /dev/null +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Player.java index 9b1ecb292b..f2db2c76c5 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3348,6 +3348,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3405,6 +3420,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Player.java index 219bdb5bdf..cf15b5bbb9 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -3464,6 +3464,21 @@ public class Player extends Playable * @return */ public Item addItem(String process, int itemId, long count, WorldObject reference, boolean sendMessage) + { + return addItem(process, itemId, count, -1, reference, sendMessage); + } + + /** + * Adds item to Inventory and send a Server->Client InventoryUpdate packet to the Player. + * @param process : String Identifier of process triggering this action + * @param itemId : int Item Identifier of the item to be added + * @param count : long Quantity of items to be added + * @param enchantLevel : int EnchantLevel of the item to be added + * @param reference : WorldObject Object referencing current action like NPC selling item or previous item in transformation + * @param sendMessage : boolean Specifies whether to send message to Client about this action + * @return + */ + public Item addItem(String process, int itemId, long count, int enchantLevel, WorldObject reference, boolean sendMessage) { if (count > 0) { @@ -3521,6 +3536,10 @@ public class Player extends Playable { // Add the item to inventory final Item createdItem = _inventory.addItem(process, itemId, count, this, reference); + if (enchantLevel > -1) + { + createdItem.setEnchantLevel(enchantLevel); + } // If over capacity, drop the item if (!canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !_inventory.validateCapacity(0, item.isQuestItem()) && createdItem.isDropable() && (!createdItem.isStackable() || (createdItem.getLastChange() != Item.MODIFIED))) diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 63fd8b0e5a..711666c493 100644 --- a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } } diff --git a/L2J_Mobius_Essence_7.1_Assassin/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java b/L2J_Mobius_Essence_7.1_Assassin/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java index 62bd9c7da1..9cca015ad5 100644 --- a/L2J_Mobius_Essence_7.1_Assassin/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java +++ b/L2J_Mobius_Essence_7.1_Assassin/java/org/l2jmobius/gameserver/instancemanager/CustomMailManager.java @@ -33,7 +33,8 @@ import org.l2jmobius.gameserver.enums.MailType; import org.l2jmobius.gameserver.model.Message; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.util.Util; @@ -65,29 +66,35 @@ public class CustomMailManager // Create message. final String items = rs.getString("items"); final Message msg = new Message(playerId, rs.getString("subject"), rs.getString("message"), items.length() > 0 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); - final List itemHolders = new ArrayList<>(); + final List itemHolders = new ArrayList<>(); for (String str : items.split(";")) { if (str.contains(" ")) { - final String itemId = str.split(" ")[0]; - final String itemCount = str.split(" ")[1]; + final String[] split = str.split(" "); + final String itemId = split[0]; + final String itemCount = split[1]; + final String enchant = split.length > 2 ? split[2] : "0"; if (Util.isDigit(itemId) && Util.isDigit(itemCount)) { - itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(itemId), Long.parseLong(itemCount), Integer.parseInt(enchant))); } } else if (Util.isDigit(str)) { - itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); + itemHolders.add(new ItemEnchantHolder(Integer.parseInt(str), 1)); } } if (!itemHolders.isEmpty()) { final Mail attachments = msg.createAttachments(); - for (ItemHolder itemHolder : itemHolders) + for (ItemEnchantHolder itemHolder : itemHolders) { - attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + final Item item = attachments.addItem("Custom-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); + if (itemHolder.getEnchantLevel() > 0) + { + item.setEnchantLevel(itemHolder.getEnchantLevel()); + } } }