diff options
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 34 | ||||
-rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.cpp | 59 | ||||
-rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.h | 24 |
3 files changed, 64 insertions, 53 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index a07ba0b5702..20f1772ef00 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -553,41 +553,11 @@ Player* Item::GetOwner()const return ObjectAccessor::FindPlayer(GetOwnerGUID()); } +// Just a "legacy shortcut" for proto->GetSkill() uint32 Item::GetSkill() { - const static uint32 item_weapon_skills[MAX_ITEM_SUBCLASS_WEAPON] = - { - SKILL_AXES, SKILL_2H_AXES, SKILL_BOWS, SKILL_GUNS, SKILL_MACES, - SKILL_2H_MACES, SKILL_POLEARMS, SKILL_SWORDS, SKILL_2H_SWORDS, 0, - SKILL_STAVES, 0, 0, SKILL_FIST_WEAPONS, 0, - SKILL_DAGGERS, SKILL_THROWN, SKILL_ASSASSINATION, SKILL_CROSSBOWS, SKILL_WANDS, - SKILL_FISHING - }; - - const static uint32 item_armor_skills[MAX_ITEM_SUBCLASS_ARMOR] = - { - 0, SKILL_CLOTH, SKILL_LEATHER, SKILL_MAIL, SKILL_PLATE_MAIL, 0, SKILL_SHIELD, 0, 0, 0, 0 - }; - ItemTemplate const* proto = GetTemplate(); - - switch (proto->GetClass()) - { - case ITEM_CLASS_WEAPON: - if (proto->GetSubClass() >= MAX_ITEM_SUBCLASS_WEAPON) - return 0; - else - return item_weapon_skills[proto->GetSubClass()]; - - case ITEM_CLASS_ARMOR: - if (proto->GetSubClass() >= MAX_ITEM_SUBCLASS_ARMOR) - return 0; - else - return item_armor_skills[proto->GetSubClass()]; - - default: - return 0; - } + return proto->GetSkill(); } int32 Item::GenerateItemRandomPropertyId(uint32 item_id) diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp index 9c534c0f1c8..ebed45eaaac 100644 --- a/src/server/game/Entities/Item/ItemTemplate.cpp +++ b/src/server/game/Entities/Item/ItemTemplate.cpp @@ -30,6 +30,65 @@ char const* ItemTemplate::GetName(LocaleConstant locale) const return ExtendedData->Name->Str[locale]; } + +bool ItemTemplate::CanChangeEquipStateInCombat() const +{ + switch (GetInventoryType()) + { + case INVTYPE_RELIC: + case INVTYPE_SHIELD: + case INVTYPE_HOLDABLE: + return true; + default: + break; + } + + switch (GetClass()) + { + case ITEM_CLASS_WEAPON: + case ITEM_CLASS_PROJECTILE: + return true; + } + + return false; +} + +uint32 ItemTemplate::GetSkill() const +{ + const static uint32 item_weapon_skills[MAX_ITEM_SUBCLASS_WEAPON] = + { + SKILL_AXES, SKILL_2H_AXES, SKILL_BOWS, SKILL_GUNS, SKILL_MACES, + SKILL_2H_MACES, SKILL_POLEARMS, SKILL_SWORDS, SKILL_2H_SWORDS, 0, + SKILL_STAVES, 0, 0, SKILL_FIST_WEAPONS, 0, + SKILL_DAGGERS, SKILL_THROWN, SKILL_ASSASSINATION, SKILL_CROSSBOWS, SKILL_WANDS, + SKILL_FISHING + }; + + const static uint32 item_armor_skills[MAX_ITEM_SUBCLASS_ARMOR] = + { + 0, SKILL_CLOTH, SKILL_LEATHER, SKILL_MAIL, SKILL_PLATE_MAIL, 0, SKILL_SHIELD, 0, 0, 0, 0 + }; + + + switch (GetClass()) + { + case ITEM_CLASS_WEAPON: + if (GetSubClass() >= MAX_ITEM_SUBCLASS_WEAPON) + return 0; + else + return item_weapon_skills[GetSubClass()]; + + case ITEM_CLASS_ARMOR: + if (GetSubClass() >= MAX_ITEM_SUBCLASS_ARMOR) + return 0; + else + return item_armor_skills[GetSubClass()]; + + default: + return 0; + } +} + char const* ItemTemplate::GetDefaultLocaleName() const { return ExtendedData->Name->Str[sWorld->GetDefaultDbcLocale()]; diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 6f7ad6cc221..d69f1c88845 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -718,27 +718,7 @@ struct TC_GAME_API ItemTemplate std::unordered_set<uint32> Specializations[2]; // one set for 1-40 level range and another for 41-100 // helpers - bool CanChangeEquipStateInCombat() const - { - switch (GetInventoryType()) - { - case INVTYPE_RELIC: - case INVTYPE_SHIELD: - case INVTYPE_HOLDABLE: - return true; - default: - break; - } - - switch (GetClass()) - { - case ITEM_CLASS_WEAPON: - case ITEM_CLASS_PROJECTILE: - return true; - } - - return false; - } + bool CanChangeEquipStateInCombat() const; bool IsCurrencyToken() const { return (GetBagFamily() & BAG_FAMILY_MASK_CURRENCY_TOKENS) != 0; } @@ -747,6 +727,8 @@ struct TC_GAME_API ItemTemplate return (ExtendedData->Stackable == 2147483647 || ExtendedData->Stackable <= 0) ? uint32(0x7FFFFFFF - 1) : uint32(ExtendedData->Stackable); } + uint32 GetSkill() const; + bool IsPotion() const { return GetClass() == ITEM_CLASS_CONSUMABLE && GetSubClass() == ITEM_SUBCLASS_POTION; } bool IsVellum() const { return GetClass() == ITEM_CLASS_TRADE_GOODS && GetSubClass() == ITEM_SUBCLASS_ENCHANTMENT; } bool IsConjuredConsumable() const { return GetClass() == ITEM_CLASS_CONSUMABLE && (GetFlags() & ITEM_FLAG_CONJURED); } |