diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 20 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.h | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 6 |
4 files changed, 28 insertions, 12 deletions
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 6a230bc9d1e..cf1933c5877 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -527,14 +527,18 @@ enum ItemExtendedCostFlags enum ItemBonusType { - ITEM_BONUS_ITEM_LEVEL = 1, - ITEM_BONUS_STAT = 2, - ITEM_BONUS_QUALITY = 3, - ITEM_BONUS_DESCRIPTION = 4, - ITEM_BONUS_SUFFIX = 5, - ITEM_BONUS_SOCKET = 6, - ITEM_BONUS_APPEARANCE = 7, - ITEM_BONUS_REQUIRED_LEVEL = 8, + ITEM_BONUS_ITEM_LEVEL = 1, + ITEM_BONUS_STAT = 2, + ITEM_BONUS_QUALITY = 3, + ITEM_BONUS_DESCRIPTION = 4, + ITEM_BONUS_SUFFIX = 5, + ITEM_BONUS_SOCKET = 6, + ITEM_BONUS_APPEARANCE = 7, + ITEM_BONUS_REQUIRED_LEVEL = 8, + ITEM_BONUS_DISPLAY_TOAST_METHOD = 9, + ITEM_BONUS_REPAIR_COST_MULTIPLIER = 10, + ITEM_BONUS_SCALING_STAT_DISTRIBUTION = 11, + ITEM_BONUS_UNK_12 = 12 }; enum ItemLimitCategoryMode diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 955f03b6c8e..55e81a77e08 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1775,7 +1775,7 @@ uint32 Item::GetItemLevel(Player const* owner) const return MIN_ITEM_LEVEL; uint32 itemLevel = stats->GetBaseItemLevel(); - if (ScalingStatDistributionEntry const* ssd = sScalingStatDistributionStore.LookupEntry(stats->GetScalingStatDistribution())) + if (ScalingStatDistributionEntry const* ssd = sScalingStatDistributionStore.LookupEntry(GetScalingStatDistribution())) if (uint32 heirloomIlvl = sDB2Manager.GetHeirloomItemLevel(ssd->ItemLevelCurveID, owner->getLevel())) itemLevel = heirloomIlvl; @@ -1859,6 +1859,8 @@ void BonusData::Initialize(ItemTemplate const* proto) SocketColor[i] = proto->GetSocketColor(i); AppearanceModID = 0; + RepairCostMultiplier = 1.0f; + ScalingStatDistribution = proto->GetScalingStatDistribution(); } void BonusData::Initialize(WorldPackets::Item::ItemInstance const& itemInstance) @@ -1921,5 +1923,11 @@ void BonusData::AddBonus(uint32 type, int32 const (&values)[2]) case ITEM_BONUS_REQUIRED_LEVEL: RequiredLevel += values[0]; break; + case ITEM_BONUS_REPAIR_COST_MULTIPLIER: + RepairCostMultiplier *= static_cast<float>(values[0]) * 0.01f; + break; + case ITEM_BONUS_SCALING_STAT_DISTRIBUTION: + ScalingStatDistribution = static_cast<uint32>(values[0]); + break; } } diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index 3452951d554..77dc93af56c 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -248,6 +248,8 @@ struct BonusData float ItemStatSocketCostMultiplier[MAX_ITEM_PROTO_STATS]; uint32 SocketColor[MAX_ITEM_PROTO_SOCKETS]; uint32 AppearanceModID; + float RepairCostMultiplier; + uint32 ScalingStatDistribution; void Initialize(ItemTemplate const* proto); void Initialize(WorldPackets::Item::ItemInstance const& itemInstance); @@ -393,6 +395,8 @@ class Item : public Object uint32 GetArmor(Player const* owner) const { return GetTemplate()->GetArmor(GetItemLevel(owner)); } void GetDamage(Player const* owner, float& minDamage, float& maxDamage) const { GetTemplate()->GetDamage(GetItemLevel(owner), minDamage, maxDamage); } uint32 GetDisplayId() const; + float GetRepairCostMultiplier() const { return _bonusData.RepairCostMultiplier; } + uint32 GetScalingStatDistribution() const { return _bonusData.ScalingStatDistribution; } // Item Refund system void SetNotRefundable(Player* owner, bool changestate = true, SQLTransaction* trans = NULL); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 576c86fbcc5..f455dce7d7f 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4934,7 +4934,7 @@ uint32 Player::DurabilityRepair(uint16 pos, bool cost, float discountMod, bool g else if (ditemProto->GetClass() == ITEM_CLASS_ARMOR) dmultiplier = dcost->ArmorSubClassCost[ditemProto->GetSubClass()]; - uint32 costs = uint32(LostDurability * dmultiplier * double(dQualitymodEntry->QualityMod)); + uint32 costs = uint32(LostDurability * dmultiplier * double(dQualitymodEntry->QualityMod) * item->GetRepairCostMultiplier()); costs = uint32(costs * discountMod * sWorld->getRate(RATE_REPAIRCOST)); @@ -10874,7 +10874,7 @@ InventoryResult Player::CanEquipItem(uint8 slot, uint16 &dest, Item* pItem, bool return EQUIP_ERR_CLIENT_LOCKED_OUT; } - ScalingStatDistributionEntry const* ssd = pProto->GetScalingStatDistribution() ? sScalingStatDistributionStore.LookupEntry(pProto->GetScalingStatDistribution()) : 0; + ScalingStatDistributionEntry const* ssd = pItem->GetScalingStatDistribution() ? sScalingStatDistributionStore.LookupEntry(pItem->GetScalingStatDistribution()) : 0; // check allowed level (extend range to upper values if MaxLevel more or equal max player level, this let GM set high level with 1...max range items) if (ssd && ssd->MaxLevel < DEFAULT_MAX_LEVEL && ssd->MaxLevel < getLevel() && !sDB2Manager.GetHeirloomByItemId(pProto->GetId())) return EQUIP_ERR_NOT_EQUIPPABLE; @@ -15315,7 +15315,7 @@ bool Player::GetQuestRewardStatus(uint32 quest_id) const uint16 eventId = sGameEventMgr->GetEventIdForQuest(qInfo); if (m_seasonalquests.find(eventId) != m_seasonalquests.end()) return m_seasonalquests.find(eventId)->second.find(quest_id) != m_seasonalquests.find(eventId)->second.end(); - + return false; } |