From 0cf1303b9a0034971080113a0ebe4495407fdefa Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 18 Jun 2022 19:46:00 +0200 Subject: [PATCH] =?UTF-8?q?fix(Core/Items):=20Special=20bags=20cannot=20be?= =?UTF-8?q?=20stored=20inside=20other=20special=20b=E2=80=A6=20(#12032)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Core/Items): Special bags cannot be stored inside other special bags. Fixes #11946 --- src/server/game/Entities/Item/Item.cpp | 94 ++++++++++++++++---------- 1 file changed, 57 insertions(+), 37 deletions(-) diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 1b9f167d4..01149086f 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -183,46 +183,64 @@ bool ItemCanGoIntoBag(ItemTemplate const* pProto, ItemTemplate const* pBagProto) switch (pBagProto->Class) { case ITEM_CLASS_CONTAINER: - switch (pBagProto->SubClass) + { + if (pBagProto->SubClass == ITEM_SUBCLASS_CONTAINER) { - case ITEM_SUBCLASS_CONTAINER: - return true; - case ITEM_SUBCLASS_SOUL_CONTAINER: - if (!(pProto->BagFamily & BAG_FAMILY_MASK_SOUL_SHARDS)) - return false; - return true; - case ITEM_SUBCLASS_HERB_CONTAINER: - if (!(pProto->BagFamily & BAG_FAMILY_MASK_HERBS)) - return false; - return true; - case ITEM_SUBCLASS_ENCHANTING_CONTAINER: - if (!(pProto->BagFamily & BAG_FAMILY_MASK_ENCHANTING_SUPP)) - return false; - return true; - case ITEM_SUBCLASS_MINING_CONTAINER: - if (!(pProto->BagFamily & BAG_FAMILY_MASK_MINING_SUPP)) - return false; - return true; - case ITEM_SUBCLASS_ENGINEERING_CONTAINER: - if (!(pProto->BagFamily & BAG_FAMILY_MASK_ENGINEERING_SUPP)) - return false; - return true; - case ITEM_SUBCLASS_GEM_CONTAINER: - if (!(pProto->BagFamily & BAG_FAMILY_MASK_GEMS)) - return false; - return true; - case ITEM_SUBCLASS_LEATHERWORKING_CONTAINER: - if (!(pProto->BagFamily & BAG_FAMILY_MASK_LEATHERWORKING_SUPP)) - return false; - return true; - case ITEM_SUBCLASS_INSCRIPTION_CONTAINER: - if (!(pProto->BagFamily & BAG_FAMILY_MASK_INSCRIPTION_SUPP)) - return false; - return true; - default: - return false; + return true; } + else + { + if (pProto->Class == ITEM_CLASS_CONTAINER) + { + return false; + } + + switch (pBagProto->SubClass) + { + case ITEM_SUBCLASS_SOUL_CONTAINER: + if (!(pProto->BagFamily & BAG_FAMILY_MASK_SOUL_SHARDS)) + return false; + return true; + case ITEM_SUBCLASS_HERB_CONTAINER: + if (!(pProto->BagFamily & BAG_FAMILY_MASK_HERBS)) + return false; + return true; + case ITEM_SUBCLASS_ENCHANTING_CONTAINER: + if (!(pProto->BagFamily & BAG_FAMILY_MASK_ENCHANTING_SUPP)) + return false; + return true; + case ITEM_SUBCLASS_MINING_CONTAINER: + if (!(pProto->BagFamily & BAG_FAMILY_MASK_MINING_SUPP)) + return false; + return true; + case ITEM_SUBCLASS_ENGINEERING_CONTAINER: + if (!(pProto->BagFamily & BAG_FAMILY_MASK_ENGINEERING_SUPP)) + return false; + return true; + case ITEM_SUBCLASS_GEM_CONTAINER: + if (!(pProto->BagFamily & BAG_FAMILY_MASK_GEMS)) + return false; + return true; + case ITEM_SUBCLASS_LEATHERWORKING_CONTAINER: + if (!(pProto->BagFamily & BAG_FAMILY_MASK_LEATHERWORKING_SUPP)) + return false; + return true; + case ITEM_SUBCLASS_INSCRIPTION_CONTAINER: + if (!(pProto->BagFamily & BAG_FAMILY_MASK_INSCRIPTION_SUPP)) + return false; + return true; + default: + return false; + } + } + } case ITEM_CLASS_QUIVER: + { + if (pProto->Class == ITEM_CLASS_QUIVER) + { + return false; + } + switch (pBagProto->SubClass) { case ITEM_SUBCLASS_QUIVER: @@ -236,7 +254,9 @@ bool ItemCanGoIntoBag(ItemTemplate const* pProto, ItemTemplate const* pBagProto) default: return false; } + } } + return false; }