From 6921c608680d9434f1dfa6a6c378bbd41df23107 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 19 Mar 2019 00:32:19 +0000 Subject: [PATCH] Inventory check for alchemy conversion. --- .../alchemy/RequestAlchemyConversion.java | 31 ++++++++++++++++--- .../alchemy/RequestAlchemyConversion.java | 31 ++++++++++++++++--- .../alchemy/RequestAlchemyConversion.java | 31 ++++++++++++++++--- .../alchemy/RequestAlchemyConversion.java | 31 ++++++++++++++++--- .../alchemy/RequestAlchemyConversion.java | 31 ++++++++++++++++--- .../alchemy/RequestAlchemyConversion.java | 31 ++++++++++++++++--- .../alchemy/RequestAlchemyConversion.java | 31 ++++++++++++++++--- 7 files changed, 182 insertions(+), 35 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java index c34512827d..69bece6b8a 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java @@ -19,11 +19,14 @@ package com.l2jmobius.gameserver.network.clientpackets.alchemy; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; +import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.alchemy.AlchemyCraftData; import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -68,26 +71,26 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); return; } else if (player.isInStoreMode() || (player.getPrivateStoreType() != PrivateStoreType.NONE)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); return; } else if (player.isDead()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); return; } else if (player.isMovementDisabled()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); return; } @@ -132,6 +135,10 @@ public class RequestAlchemyConversion implements IClientIncomingPacket } // Calculate success and failure count. + final L2Item successItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionSuccess().getId()); + final L2Item failureItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionFailure().getId()); + int totalWeight = 0; + int totalslots = (successItemTemplate.isStackable() ? 1 : 0) + (failureItemTemplate.isStackable() ? 1 : 0); int successCount = 0; int failureCount = 0; for (int i = 0; i < _craftTimes; i++) @@ -139,23 +146,37 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (Rnd.get(100) < baseChance) { successCount++; + totalWeight += successItemTemplate.getWeight(); + totalslots += successItemTemplate.isStackable() ? 0 : 1; } else { failureCount++; + totalWeight += failureItemTemplate.getWeight(); + totalslots += failureItemTemplate.isStackable() ? 0 : 1; } } + // Check if player has enough ingredients. for (ItemHolder ingredient : data.getIngredients()) { if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes)) { - player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); return; } } + // Weight and capacity check. + final PcInventory inventory = player.getInventory(); + if (!inventory.validateWeight(totalWeight) || ((totalslots > 0) && !inventory.validateCapacity(totalslots))) + { + player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.THERE_IS_NOT_ENOUGH_INVENTORY_SPACE_PLEASE_MAKE_MORE_ROOM_AND_TRY_AGAIN); + return; + } + final InventoryUpdate ui = new InventoryUpdate(); // Destroy ingredients. diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java index c34512827d..69bece6b8a 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java @@ -19,11 +19,14 @@ package com.l2jmobius.gameserver.network.clientpackets.alchemy; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; +import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.alchemy.AlchemyCraftData; import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -68,26 +71,26 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); return; } else if (player.isInStoreMode() || (player.getPrivateStoreType() != PrivateStoreType.NONE)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); return; } else if (player.isDead()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); return; } else if (player.isMovementDisabled()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); return; } @@ -132,6 +135,10 @@ public class RequestAlchemyConversion implements IClientIncomingPacket } // Calculate success and failure count. + final L2Item successItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionSuccess().getId()); + final L2Item failureItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionFailure().getId()); + int totalWeight = 0; + int totalslots = (successItemTemplate.isStackable() ? 1 : 0) + (failureItemTemplate.isStackable() ? 1 : 0); int successCount = 0; int failureCount = 0; for (int i = 0; i < _craftTimes; i++) @@ -139,23 +146,37 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (Rnd.get(100) < baseChance) { successCount++; + totalWeight += successItemTemplate.getWeight(); + totalslots += successItemTemplate.isStackable() ? 0 : 1; } else { failureCount++; + totalWeight += failureItemTemplate.getWeight(); + totalslots += failureItemTemplate.isStackable() ? 0 : 1; } } + // Check if player has enough ingredients. for (ItemHolder ingredient : data.getIngredients()) { if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes)) { - player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); return; } } + // Weight and capacity check. + final PcInventory inventory = player.getInventory(); + if (!inventory.validateWeight(totalWeight) || ((totalslots > 0) && !inventory.validateCapacity(totalslots))) + { + player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.THERE_IS_NOT_ENOUGH_INVENTORY_SPACE_PLEASE_MAKE_MORE_ROOM_AND_TRY_AGAIN); + return; + } + final InventoryUpdate ui = new InventoryUpdate(); // Destroy ingredients. diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java index c34512827d..69bece6b8a 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java @@ -19,11 +19,14 @@ package com.l2jmobius.gameserver.network.clientpackets.alchemy; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; +import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.alchemy.AlchemyCraftData; import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -68,26 +71,26 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); return; } else if (player.isInStoreMode() || (player.getPrivateStoreType() != PrivateStoreType.NONE)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); return; } else if (player.isDead()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); return; } else if (player.isMovementDisabled()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); return; } @@ -132,6 +135,10 @@ public class RequestAlchemyConversion implements IClientIncomingPacket } // Calculate success and failure count. + final L2Item successItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionSuccess().getId()); + final L2Item failureItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionFailure().getId()); + int totalWeight = 0; + int totalslots = (successItemTemplate.isStackable() ? 1 : 0) + (failureItemTemplate.isStackable() ? 1 : 0); int successCount = 0; int failureCount = 0; for (int i = 0; i < _craftTimes; i++) @@ -139,23 +146,37 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (Rnd.get(100) < baseChance) { successCount++; + totalWeight += successItemTemplate.getWeight(); + totalslots += successItemTemplate.isStackable() ? 0 : 1; } else { failureCount++; + totalWeight += failureItemTemplate.getWeight(); + totalslots += failureItemTemplate.isStackable() ? 0 : 1; } } + // Check if player has enough ingredients. for (ItemHolder ingredient : data.getIngredients()) { if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes)) { - player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); return; } } + // Weight and capacity check. + final PcInventory inventory = player.getInventory(); + if (!inventory.validateWeight(totalWeight) || ((totalslots > 0) && !inventory.validateCapacity(totalslots))) + { + player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.THERE_IS_NOT_ENOUGH_INVENTORY_SPACE_PLEASE_MAKE_MORE_ROOM_AND_TRY_AGAIN); + return; + } + final InventoryUpdate ui = new InventoryUpdate(); // Destroy ingredients. diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java index c34512827d..69bece6b8a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java @@ -19,11 +19,14 @@ package com.l2jmobius.gameserver.network.clientpackets.alchemy; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; +import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.alchemy.AlchemyCraftData; import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -68,26 +71,26 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); return; } else if (player.isInStoreMode() || (player.getPrivateStoreType() != PrivateStoreType.NONE)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); return; } else if (player.isDead()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); return; } else if (player.isMovementDisabled()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); return; } @@ -132,6 +135,10 @@ public class RequestAlchemyConversion implements IClientIncomingPacket } // Calculate success and failure count. + final L2Item successItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionSuccess().getId()); + final L2Item failureItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionFailure().getId()); + int totalWeight = 0; + int totalslots = (successItemTemplate.isStackable() ? 1 : 0) + (failureItemTemplate.isStackable() ? 1 : 0); int successCount = 0; int failureCount = 0; for (int i = 0; i < _craftTimes; i++) @@ -139,23 +146,37 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (Rnd.get(100) < baseChance) { successCount++; + totalWeight += successItemTemplate.getWeight(); + totalslots += successItemTemplate.isStackable() ? 0 : 1; } else { failureCount++; + totalWeight += failureItemTemplate.getWeight(); + totalslots += failureItemTemplate.isStackable() ? 0 : 1; } } + // Check if player has enough ingredients. for (ItemHolder ingredient : data.getIngredients()) { if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes)) { - player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); return; } } + // Weight and capacity check. + final PcInventory inventory = player.getInventory(); + if (!inventory.validateWeight(totalWeight) || ((totalslots > 0) && !inventory.validateCapacity(totalslots))) + { + player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.THERE_IS_NOT_ENOUGH_INVENTORY_SPACE_PLEASE_MAKE_MORE_ROOM_AND_TRY_AGAIN); + return; + } + final InventoryUpdate ui = new InventoryUpdate(); // Destroy ingredients. diff --git a/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java b/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java index c34512827d..69bece6b8a 100644 --- a/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java +++ b/L2J_Mobius_5.0_Salvation/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java @@ -19,11 +19,14 @@ package com.l2jmobius.gameserver.network.clientpackets.alchemy; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; +import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.alchemy.AlchemyCraftData; import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -68,26 +71,26 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); return; } else if (player.isInStoreMode() || (player.getPrivateStoreType() != PrivateStoreType.NONE)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); return; } else if (player.isDead()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); return; } else if (player.isMovementDisabled()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); return; } @@ -132,6 +135,10 @@ public class RequestAlchemyConversion implements IClientIncomingPacket } // Calculate success and failure count. + final L2Item successItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionSuccess().getId()); + final L2Item failureItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionFailure().getId()); + int totalWeight = 0; + int totalslots = (successItemTemplate.isStackable() ? 1 : 0) + (failureItemTemplate.isStackable() ? 1 : 0); int successCount = 0; int failureCount = 0; for (int i = 0; i < _craftTimes; i++) @@ -139,23 +146,37 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (Rnd.get(100) < baseChance) { successCount++; + totalWeight += successItemTemplate.getWeight(); + totalslots += successItemTemplate.isStackable() ? 0 : 1; } else { failureCount++; + totalWeight += failureItemTemplate.getWeight(); + totalslots += failureItemTemplate.isStackable() ? 0 : 1; } } + // Check if player has enough ingredients. for (ItemHolder ingredient : data.getIngredients()) { if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes)) { - player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); return; } } + // Weight and capacity check. + final PcInventory inventory = player.getInventory(); + if (!inventory.validateWeight(totalWeight) || ((totalslots > 0) && !inventory.validateCapacity(totalslots))) + { + player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.THERE_IS_NOT_ENOUGH_INVENTORY_SPACE_PLEASE_MAKE_MORE_ROOM_AND_TRY_AGAIN); + return; + } + final InventoryUpdate ui = new InventoryUpdate(); // Destroy ingredients. diff --git a/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java b/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java index c34512827d..69bece6b8a 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java +++ b/L2J_Mobius_5.5_EtinasFate/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java @@ -19,11 +19,14 @@ package com.l2jmobius.gameserver.network.clientpackets.alchemy; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; +import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.alchemy.AlchemyCraftData; import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -68,26 +71,26 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); return; } else if (player.isInStoreMode() || (player.getPrivateStoreType() != PrivateStoreType.NONE)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); return; } else if (player.isDead()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); return; } else if (player.isMovementDisabled()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); return; } @@ -132,6 +135,10 @@ public class RequestAlchemyConversion implements IClientIncomingPacket } // Calculate success and failure count. + final L2Item successItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionSuccess().getId()); + final L2Item failureItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionFailure().getId()); + int totalWeight = 0; + int totalslots = (successItemTemplate.isStackable() ? 1 : 0) + (failureItemTemplate.isStackable() ? 1 : 0); int successCount = 0; int failureCount = 0; for (int i = 0; i < _craftTimes; i++) @@ -139,23 +146,37 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (Rnd.get(100) < baseChance) { successCount++; + totalWeight += successItemTemplate.getWeight(); + totalslots += successItemTemplate.isStackable() ? 0 : 1; } else { failureCount++; + totalWeight += failureItemTemplate.getWeight(); + totalslots += failureItemTemplate.isStackable() ? 0 : 1; } } + // Check if player has enough ingredients. for (ItemHolder ingredient : data.getIngredients()) { if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes)) { - player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); return; } } + // Weight and capacity check. + final PcInventory inventory = player.getInventory(); + if (!inventory.validateWeight(totalWeight) || ((totalslots > 0) && !inventory.validateCapacity(totalslots))) + { + player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.THERE_IS_NOT_ENOUGH_INVENTORY_SPACE_PLEASE_MAKE_MORE_ROOM_AND_TRY_AGAIN); + return; + } + final InventoryUpdate ui = new InventoryUpdate(); // Destroy ingredients. diff --git a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java index c34512827d..69bece6b8a 100644 --- a/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java +++ b/L2J_Mobius_6.0_Fafurion/java/com/l2jmobius/gameserver/network/clientpackets/alchemy/RequestAlchemyConversion.java @@ -19,11 +19,14 @@ package com.l2jmobius.gameserver.network.clientpackets.alchemy; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.AlchemyData; +import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.alchemy.AlchemyCraftData; import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -68,26 +71,26 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE); return; } else if (player.isInStoreMode() || (player.getPrivateStoreType() != PrivateStoreType.NONE)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP); return; } else if (player.isDead()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD); return; } else if (player.isMovementDisabled()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE); return; } @@ -132,6 +135,10 @@ public class RequestAlchemyConversion implements IClientIncomingPacket } // Calculate success and failure count. + final L2Item successItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionSuccess().getId()); + final L2Item failureItemTemplate = ItemTable.getInstance().getTemplate(data.getProductionFailure().getId()); + int totalWeight = 0; + int totalslots = (successItemTemplate.isStackable() ? 1 : 0) + (failureItemTemplate.isStackable() ? 1 : 0); int successCount = 0; int failureCount = 0; for (int i = 0; i < _craftTimes; i++) @@ -139,23 +146,37 @@ public class RequestAlchemyConversion implements IClientIncomingPacket if (Rnd.get(100) < baseChance) { successCount++; + totalWeight += successItemTemplate.getWeight(); + totalslots += successItemTemplate.isStackable() ? 0 : 1; } else { failureCount++; + totalWeight += failureItemTemplate.getWeight(); + totalslots += failureItemTemplate.isStackable() ? 0 : 1; } } + // Check if player has enough ingredients. for (ItemHolder ingredient : data.getIngredients()) { if (player.getInventory().getInventoryItemCount(ingredient.getId(), -1) < (ingredient.getCount() * _craftTimes)) { - player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.NOT_ENOUGH_INGREDIENTS); return; } } + // Weight and capacity check. + final PcInventory inventory = player.getInventory(); + if (!inventory.validateWeight(totalWeight) || ((totalslots > 0) && !inventory.validateCapacity(totalslots))) + { + player.sendPacket(new ExAlchemyConversion(0, 0)); + player.sendPacket(SystemMessageId.THERE_IS_NOT_ENOUGH_INVENTORY_SPACE_PLEASE_MAKE_MORE_ROOM_AND_TRY_AGAIN); + return; + } + final InventoryUpdate ui = new InventoryUpdate(); // Destroy ingredients.