diff options
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 261 |
1 files changed, 0 insertions, 261 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index d13f4ace139..dd16bfe6839 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3063,216 +3063,6 @@ uint32 FillMaxDurability(uint32 itemClass, uint32 itemSubClass, uint32 inventory return 5 * uint32(round(18.0f * qualityMultipliers[quality] * weaponMultipliers[itemSubClass] * levelPenalty)); }; -struct ItemSpecStats -{ - uint32 ItemType; - uint32 ItemSpecStatTypes[MAX_ITEM_PROTO_STATS]; - uint32 ItemSpecStatCount; - - ItemSpecStats(ItemEntry const* item, ItemSparseEntry const* sparse) : ItemType(0), ItemSpecStatCount(0) - { - memset(ItemSpecStatTypes, -1, sizeof(ItemSpecStatTypes)); - - if (item->ClassID == ITEM_CLASS_WEAPON) - { - ItemType = 5; - switch (item->SubclassID) - { - case ITEM_SUBCLASS_WEAPON_AXE: - AddStat(ITEM_SPEC_STAT_ONE_HANDED_AXE); - break; - case ITEM_SUBCLASS_WEAPON_AXE2: - AddStat(ITEM_SPEC_STAT_TWO_HANDED_AXE); - break; - case ITEM_SUBCLASS_WEAPON_BOW: - AddStat(ITEM_SPEC_STAT_BOW); - break; - case ITEM_SUBCLASS_WEAPON_GUN: - AddStat(ITEM_SPEC_STAT_GUN); - break; - case ITEM_SUBCLASS_WEAPON_MACE: - AddStat(ITEM_SPEC_STAT_ONE_HANDED_MACE); - break; - case ITEM_SUBCLASS_WEAPON_MACE2: - AddStat(ITEM_SPEC_STAT_TWO_HANDED_MACE); - break; - case ITEM_SUBCLASS_WEAPON_POLEARM: - AddStat(ITEM_SPEC_STAT_POLEARM); - break; - case ITEM_SUBCLASS_WEAPON_SWORD: - AddStat(ITEM_SPEC_STAT_ONE_HANDED_SWORD); - break; - case ITEM_SUBCLASS_WEAPON_SWORD2: - AddStat(ITEM_SPEC_STAT_TWO_HANDED_SWORD); - break; - case ITEM_SUBCLASS_WEAPON_WARGLAIVES: - AddStat(ITEM_SPEC_STAT_WARGLAIVES); - break; - case ITEM_SUBCLASS_WEAPON_STAFF: - AddStat(ITEM_SPEC_STAT_STAFF); - break; - case ITEM_SUBCLASS_WEAPON_FIST_WEAPON: - AddStat(ITEM_SPEC_STAT_FIST_WEAPON); - break; - case ITEM_SUBCLASS_WEAPON_DAGGER: - AddStat(ITEM_SPEC_STAT_DAGGER); - break; - case ITEM_SUBCLASS_WEAPON_THROWN: - AddStat(ITEM_SPEC_STAT_THROWN); - break; - case ITEM_SUBCLASS_WEAPON_CROSSBOW: - AddStat(ITEM_SPEC_STAT_CROSSBOW); - break; - case ITEM_SUBCLASS_WEAPON_WAND: - AddStat(ITEM_SPEC_STAT_WAND); - break; - default: - break; - } - } - else if (item->ClassID == ITEM_CLASS_ARMOR) - { - switch (item->SubclassID) - { - case ITEM_SUBCLASS_ARMOR_CLOTH: - if (sparse->InventoryType != INVTYPE_CLOAK) - { - ItemType = 1; - break; - } - - ItemType = 0; - AddStat(ITEM_SPEC_STAT_CLOAK); - break; - case ITEM_SUBCLASS_ARMOR_LEATHER: - ItemType = 2; - break; - case ITEM_SUBCLASS_ARMOR_MAIL: - ItemType = 3; - break; - case ITEM_SUBCLASS_ARMOR_PLATE: - ItemType = 4; - break; - default: - if (item->SubclassID == ITEM_SUBCLASS_ARMOR_SHIELD) - { - ItemType = 6; - AddStat(ITEM_SPEC_STAT_SHIELD); - } - else if (item->SubclassID > ITEM_SUBCLASS_ARMOR_SHIELD && item->SubclassID <= ITEM_SUBCLASS_ARMOR_RELIC) - { - ItemType = 6; - AddStat(ITEM_SPEC_STAT_RELIC); - } - else - ItemType = 0; - break; - } - } - else if (item->ClassID == ITEM_CLASS_GEM) - { - ItemType = 7; - if (GemPropertiesEntry const* gem = sGemPropertiesStore.LookupEntry(sparse->GemProperties)) - { - if (gem->Type & SOCKET_COLOR_RELIC_IRON) - AddStat(ITEM_SPEC_STAT_RELIC_IRON); - if (gem->Type & SOCKET_COLOR_RELIC_BLOOD) - AddStat(ITEM_SPEC_STAT_RELIC_BLOOD); - if (gem->Type & SOCKET_COLOR_RELIC_SHADOW) - AddStat(ITEM_SPEC_STAT_RELIC_SHADOW); - if (gem->Type & SOCKET_COLOR_RELIC_FEL) - AddStat(ITEM_SPEC_STAT_RELIC_FEL); - if (gem->Type & SOCKET_COLOR_RELIC_ARCANE) - AddStat(ITEM_SPEC_STAT_RELIC_ARCANE); - if (gem->Type & SOCKET_COLOR_RELIC_FROST) - AddStat(ITEM_SPEC_STAT_RELIC_FROST); - if (gem->Type & SOCKET_COLOR_RELIC_FIRE) - AddStat(ITEM_SPEC_STAT_RELIC_FIRE); - if (gem->Type & SOCKET_COLOR_RELIC_WATER) - AddStat(ITEM_SPEC_STAT_RELIC_WATER); - if (gem->Type & SOCKET_COLOR_RELIC_LIFE) - AddStat(ITEM_SPEC_STAT_RELIC_LIFE); - if (gem->Type & SOCKET_COLOR_RELIC_WIND) - AddStat(ITEM_SPEC_STAT_RELIC_WIND); - if (gem->Type & SOCKET_COLOR_RELIC_HOLY) - AddStat(ITEM_SPEC_STAT_RELIC_HOLY); - } - } - else - ItemType = 0; - - for (uint32 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) - if (sparse->StatModifierBonusStat[i] != -1) - AddModStat(sparse->StatModifierBonusStat[i]); - } - - void AddStat(ItemSpecStat statType) - { - if (ItemSpecStatCount >= MAX_ITEM_PROTO_STATS) - return; - - for (uint32 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) - if (ItemSpecStatTypes[i] == uint32(statType)) - return; - - ItemSpecStatTypes[ItemSpecStatCount++] = statType; - } - - void AddModStat(int32 itemStatType) - { - switch (itemStatType) - { - case ITEM_MOD_AGILITY: - AddStat(ITEM_SPEC_STAT_AGILITY); - break; - case ITEM_MOD_STRENGTH: - AddStat(ITEM_SPEC_STAT_STRENGTH); - break; - case ITEM_MOD_INTELLECT: - AddStat(ITEM_SPEC_STAT_INTELLECT); - break; - case ITEM_MOD_DODGE_RATING: - AddStat(ITEM_SPEC_STAT_DODGE); - break; - case ITEM_MOD_PARRY_RATING: - AddStat(ITEM_SPEC_STAT_PARRY); - break; - case ITEM_MOD_CRIT_MELEE_RATING: - case ITEM_MOD_CRIT_RANGED_RATING: - case ITEM_MOD_CRIT_SPELL_RATING: - case ITEM_MOD_CRIT_RATING: - AddStat(ITEM_SPEC_STAT_CRIT); - break; - case ITEM_MOD_HASTE_RATING: - AddStat(ITEM_SPEC_STAT_HASTE); - break; - case ITEM_MOD_HIT_RATING: - AddStat(ITEM_SPEC_STAT_HIT); - break; - case ITEM_MOD_EXTRA_ARMOR: - AddStat(ITEM_SPEC_STAT_BONUS_ARMOR); - break; - case ITEM_MOD_AGI_STR_INT: - AddStat(ITEM_SPEC_STAT_AGILITY); - AddStat(ITEM_SPEC_STAT_STRENGTH); - AddStat(ITEM_SPEC_STAT_INTELLECT); - break; - case ITEM_MOD_AGI_STR: - AddStat(ITEM_SPEC_STAT_AGILITY); - AddStat(ITEM_SPEC_STAT_STRENGTH); - break; - case ITEM_MOD_AGI_INT: - AddStat(ITEM_SPEC_STAT_AGILITY); - AddStat(ITEM_SPEC_STAT_INTELLECT); - break; - case ITEM_MOD_STR_INT: - AddStat(ITEM_SPEC_STAT_STRENGTH); - AddStat(ITEM_SPEC_STAT_INTELLECT); - break; - } - } -}; - void ObjectMgr::LoadItemTemplates() { uint32 oldMSTime = getMSTime(); @@ -3299,57 +3089,6 @@ void ObjectMgr::LoadItemTemplates() itemTemplate.ItemSpecClassMask = 0; itemTemplate.QuestLogItemId = 0; - if (std::vector<ItemSpecOverrideEntry const*> const* itemSpecOverrides = sDB2Manager.GetItemSpecOverrides(sparse->ID)) - { - for (ItemSpecOverrideEntry const* itemSpecOverride : *itemSpecOverrides) - { - if (ChrSpecializationEntry const* specialization = sChrSpecializationStore.LookupEntry(itemSpecOverride->SpecID)) - { - itemTemplate.ItemSpecClassMask |= 1 << (specialization->ClassID - 1); - itemTemplate.Specializations[0].set(ItemTemplate::CalculateItemSpecBit(specialization)); - itemTemplate.Specializations[1] |= itemTemplate.Specializations[0]; - itemTemplate.Specializations[2] |= itemTemplate.Specializations[0]; - } - } - } - else - { - ItemSpecStats itemSpecStats(db2Data, sparse); - - for (ItemSpecEntry const* itemSpec : sItemSpecStore) - { - if (itemSpecStats.ItemType != itemSpec->ItemType) - continue; - - bool hasPrimary = itemSpec->PrimaryStat == ITEM_SPEC_STAT_NONE; - bool hasSecondary = itemSpec->SecondaryStat == ITEM_SPEC_STAT_NONE; - for (uint32 i = 0; i < itemSpecStats.ItemSpecStatCount; ++i) - { - if (itemSpecStats.ItemSpecStatTypes[i] == itemSpec->PrimaryStat) - hasPrimary = true; - if (itemSpecStats.ItemSpecStatTypes[i] == itemSpec->SecondaryStat) - hasSecondary = true; - } - - if (!hasPrimary || !hasSecondary) - continue; - - if (ChrSpecializationEntry const* specialization = sChrSpecializationStore.LookupEntry(itemSpec->SpecializationID)) - { - if ((1 << (specialization->ClassID - 1)) & sparse->AllowableClass) - { - itemTemplate.ItemSpecClassMask |= 1 << (specialization->ClassID - 1); - std::size_t specBit = ItemTemplate::CalculateItemSpecBit(specialization); - itemTemplate.Specializations[0].set(specBit); - if (itemSpec->MaxLevel > 40) - itemTemplate.Specializations[1].set(specBit); - if (itemSpec->MaxLevel >= 110) - itemTemplate.Specializations[2].set(specBit); - } - } - } - } - // Items that have no specializations set can be used by everyone for (auto& specs : itemTemplate.Specializations) if (specs.count() == 0) |