diff options
-rw-r--r-- | sql/updates/hotfixes/master/2021_04_09_00_hotfixes.sql | 24 | ||||
-rw-r--r-- | src/server/database/Database/Implementation/HotfixDatabase.cpp | 11 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2LoadInfo.h | 20 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Metadata.h | 105 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Item/ItemEnchantmentMgr.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Item/ItemEnchantmentMgr.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 2 |
11 files changed, 161 insertions, 31 deletions
diff --git a/sql/updates/hotfixes/master/2021_04_09_00_hotfixes.sql b/sql/updates/hotfixes/master/2021_04_09_00_hotfixes.sql new file mode 100644 index 00000000000..d57197330de --- /dev/null +++ b/sql/updates/hotfixes/master/2021_04_09_00_hotfixes.sql @@ -0,0 +1,24 @@ +ALTER TABLE `chr_customization_element` ADD `ChrCustItemGeoModifyID` int(11) NOT NULL DEFAULT '0' AFTER `ChrCustomizationDisplayInfoID`; + +ALTER TABLE `item_bonus_tree_node` + ADD `ItemBonusListGroupID` int(11) NOT NULL DEFAULT '0' AFTER `ChildItemLevelSelectorID`, + ADD `ParentItemBonusTreeNodeID` int(11) NOT NULL DEFAULT '0' AFTER `ItemBonusListGroupID`; + +ALTER TABLE `rand_prop_points` + ADD `DamageReplaceStatF` float NOT NULL DEFAULT '0' AFTER `ID`, + ADD `DamageSecondaryF` float NOT NULL DEFAULT '0' AFTER `DamageReplaceStatF`, + ADD `EpicF1` float NOT NULL DEFAULT '0' AFTER `DamageSecondary`, + ADD `EpicF2` float NOT NULL DEFAULT '0' AFTER `EpicF1`, + ADD `EpicF3` float NOT NULL DEFAULT '0' AFTER `EpicF2`, + ADD `EpicF4` float NOT NULL DEFAULT '0' AFTER `EpicF3`, + ADD `EpicF5` float NOT NULL DEFAULT '0' AFTER `EpicF4`, + ADD `SuperiorF1` float NOT NULL DEFAULT '0' AFTER `Epic5`, + ADD `SuperiorF2` float NOT NULL DEFAULT '0' AFTER `SuperiorF1`, + ADD `SuperiorF3` float NOT NULL DEFAULT '0' AFTER `SuperiorF2`, + ADD `SuperiorF4` float NOT NULL DEFAULT '0' AFTER `SuperiorF3`, + ADD `SuperiorF5` float NOT NULL DEFAULT '0' AFTER `SuperiorF4`, + ADD `GoodF1` float NOT NULL DEFAULT '0' AFTER `SuperiorF5`, + ADD `GoodF2` float NOT NULL DEFAULT '0' AFTER `GoodF1`, + ADD `GoodF3` float NOT NULL DEFAULT '0' AFTER `GoodF2`, + ADD `GoodF4` float NOT NULL DEFAULT '0' AFTER `GoodF3`, + ADD `GoodF5` float NOT NULL DEFAULT '0' AFTER `GoodF4`; diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index 157ca5319b1..d88740249e3 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -336,7 +336,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ChrCustomizationElement.db2 PrepareStatement(HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT ID, ChrCustomizationChoiceID, RelatedChrCustomizationChoiceID, " "ChrCustomizationGeosetID, ChrCustomizationSkinnedModelID, ChrCustomizationMaterialID, ChrCustomizationBoneSetID, " - "ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID FROM chr_customization_element WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID, ChrCustItemGeoModifyID FROM chr_customization_element" + " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT MAX(ID) + 1 FROM chr_customization_element", CONNECTION_SYNCH); // ChrCustomizationOption.db2 @@ -751,7 +752,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ItemBonusTreeNode.db2 PrepareStatement(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT ID, ItemContext, ChildItemBonusTreeID, ChildItemBonusListID, ChildItemLevelSelectorID, " - "ParentItemBonusTreeID FROM item_bonus_tree_node WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "ItemBonusListGroupID, ParentItemBonusTreeNodeID, ParentItemBonusTreeID FROM item_bonus_tree_node WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT MAX(ID) + 1 FROM item_bonus_tree_node", CONNECTION_SYNCH); // ItemChildEquipment.db2 @@ -1129,8 +1130,10 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_MAX_ID_STMT(HOTFIX_SEL_QUEST_XP, "SELECT MAX(ID) + 1 FROM quest_xp", CONNECTION_SYNCH); // RandPropPoints.db2 - PrepareStatement(HOTFIX_SEL_RAND_PROP_POINTS, "SELECT ID, DamageReplaceStat, DamageSecondary, Epic1, Epic2, Epic3, Epic4, Epic5, Superior1, " - "Superior2, Superior3, Superior4, Superior5, Good1, Good2, Good3, Good4, Good5 FROM rand_prop_points WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_RAND_PROP_POINTS, "SELECT ID, DamageReplaceStatF, DamageSecondaryF, DamageReplaceStat, DamageSecondary, EpicF1, " + "EpicF2, EpicF3, EpicF4, EpicF5, SuperiorF1, SuperiorF2, SuperiorF3, SuperiorF4, SuperiorF5, GoodF1, GoodF2, GoodF3, GoodF4, GoodF5, Epic1, " + "Epic2, Epic3, Epic4, Epic5, Superior1, Superior2, Superior3, Superior4, Superior5, Good1, Good2, Good3, Good4, Good5 FROM rand_prop_points" + " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_RAND_PROP_POINTS, "SELECT MAX(ID) + 1 FROM rand_prop_points", CONNECTION_SYNCH); // RewardPack.db2 diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index cf7a7bd6d1f..8db5938725f 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -1093,6 +1093,7 @@ struct ChrCustomizationElementLoadInfo { true, FT_INT, "ChrCustomizationBoneSetID" }, { true, FT_INT, "ChrCustomizationCondModelID" }, { true, FT_INT, "ChrCustomizationDisplayInfoID" }, + { true, FT_INT, "ChrCustItemGeoModifyID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrCustomizationElementMeta::Instance(), HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT); return &loadInfo; @@ -2743,6 +2744,8 @@ struct ItemBonusTreeNodeLoadInfo { false, FT_SHORT, "ChildItemBonusTreeID" }, { false, FT_SHORT, "ChildItemBonusListID" }, { false, FT_SHORT, "ChildItemLevelSelectorID" }, + { true, FT_INT, "ItemBonusListGroupID" }, + { true, FT_INT, "ParentItemBonusTreeNodeID" }, { false, FT_INT, "ParentItemBonusTreeID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemBonusTreeNodeMeta::Instance(), HOTFIX_SEL_ITEM_BONUS_TREE_NODE); @@ -4360,8 +4363,25 @@ struct RandPropPointsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_FLOAT, "DamageReplaceStatF" }, + { false, FT_FLOAT, "DamageSecondaryF" }, { true, FT_INT, "DamageReplaceStat" }, { true, FT_INT, "DamageSecondary" }, + { false, FT_FLOAT, "EpicF1" }, + { false, FT_FLOAT, "EpicF2" }, + { false, FT_FLOAT, "EpicF3" }, + { false, FT_FLOAT, "EpicF4" }, + { false, FT_FLOAT, "EpicF5" }, + { false, FT_FLOAT, "SuperiorF1" }, + { false, FT_FLOAT, "SuperiorF2" }, + { false, FT_FLOAT, "SuperiorF3" }, + { false, FT_FLOAT, "SuperiorF4" }, + { false, FT_FLOAT, "SuperiorF5" }, + { false, FT_FLOAT, "GoodF1" }, + { false, FT_FLOAT, "GoodF2" }, + { false, FT_FLOAT, "GoodF3" }, + { false, FT_FLOAT, "GoodF4" }, + { false, FT_FLOAT, "GoodF5" }, { false, FT_INT, "Epic1" }, { false, FT_INT, "Epic2" }, { false, FT_INT, "Epic3" }, diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index 555784e56d0..5812d998246 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -2344,6 +2344,21 @@ struct ChrCustClientChoiceConversionMeta } }; +struct ChrCustItemGeoModifyMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(3952714, -1, 3, 3, 0xFA0A7F36, fields, -1); + return &instance; + } +}; + struct ChrCustomizationMeta { static DB2Meta const* Instance() @@ -2474,7 +2489,7 @@ struct ChrCustomizationElementMeta { static DB2Meta const* Instance() { - static DB2MetaField const fields[9] = + static DB2MetaField const fields[10] = { { FT_INT, 1, false }, { FT_INT, 1, true }, @@ -2485,8 +2500,9 @@ struct ChrCustomizationElementMeta { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static DB2Meta instance(3512765, 0, 9, 9, 0x29E7E6E9, fields, -1); + static DB2Meta instance(3512765, 0, 10, 10, 0x23DA3D78, fields, -1); return &instance; } }; @@ -5751,13 +5767,14 @@ struct GossipXUIDisplayInfoMeta { static DB2Meta const* Instance() { - static DB2MetaField const fields[3] = + static DB2MetaField const fields[4] = { + { FT_STRING, 1, true }, { FT_INT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, }; - static DB2Meta instance(3622253, 0, 3, 3, 0xC9A649B0, fields, -1); + static DB2Meta instance(3622253, 1, 4, 4, 0xDD005226, fields, -1); return &instance; } }; @@ -6405,7 +6422,7 @@ struct ItemBonusListGroupEntryMeta { static DB2Meta const* Instance() { - static DB2MetaField const fields[6] = + static DB2MetaField const fields[7] = { { FT_INT, 1, true }, { FT_INT, 1, true }, @@ -6413,8 +6430,9 @@ struct ItemBonusListGroupEntryMeta { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static DB2Meta instance(3025306, -1, 6, 6, 0x9FB5C578, fields, 0); + static DB2Meta instance(3025306, -1, 7, 7, 0x63D048BD, fields, 0); return &instance; } }; @@ -6479,15 +6497,17 @@ struct ItemBonusTreeNodeMeta { static DB2Meta const* Instance() { - static DB2MetaField const fields[5] = + static DB2MetaField const fields[7] = { { FT_BYTE, 1, false }, { FT_SHORT, 1, false }, { FT_SHORT, 1, false }, { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, { FT_SHORT, 1, false }, }; - static DB2Meta instance(987134, -1, 5, 4, 0x5F0770E4, fields, 4); + static DB2Meta instance(987134, -1, 7, 6, 0xC2E0B160, fields, 6); return &instance; } }; @@ -7236,11 +7256,12 @@ struct JournalEncounterMeta { static DB2Meta const* Instance() { - static DB2MetaField const fields[11] = + static DB2MetaField const fields[12] = { { FT_STRING, 1, true }, { FT_STRING, 1, true }, { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, { FT_SHORT, 1, false }, { FT_SHORT, 1, false }, { FT_INT, 1, false }, @@ -7250,7 +7271,7 @@ struct JournalEncounterMeta { FT_BYTE, 1, false }, { FT_BYTE, 1, true }, }; - static DB2Meta instance(1240336, -1, 11, 11, 0x7FA77B6F, fields, -1); + static DB2Meta instance(1240336, 3, 12, 12, 0x7D6A99D0, fields, -1); return &instance; } }; @@ -8594,6 +8615,23 @@ struct MountXDisplayMeta } }; +struct MountXSpellVisualKitPickerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(3989477, -1, 5, 4, 0x61187DC1, fields, 4); + return &instance; + } +}; + struct MovieMeta { static DB2Meta const* Instance() @@ -9974,15 +10012,20 @@ struct RandPropPointsMeta { static DB2Meta const* Instance() { - static DB2MetaField const fields[5] = + static DB2MetaField const fields[10] = { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_FLOAT, 5, true }, + { FT_FLOAT, 5, true }, + { FT_FLOAT, 5, true }, { FT_INT, 5, false }, { FT_INT, 5, false }, { FT_INT, 5, false }, }; - static DB2Meta instance(1310245, -1, 5, 5, 0xC89BA379, fields, -1); + static DB2Meta instance(1310245, -1, 10, 10, 0x0E4AE36D, fields, -1); return &instance; } }; @@ -10660,14 +10703,15 @@ struct SoulbindConduitMeta { static DB2Meta const* Instance() { - static DB2MetaField const fields[4] = + static DB2MetaField const fields[5] = { { FT_INT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static DB2Meta instance(3594380, 0, 4, 4, 0x5F7D8851, fields, -1); + static DB2Meta instance(3594380, 0, 5, 5, 0x6F7E0B02, fields, -1); return &instance; } }; @@ -12479,6 +12523,37 @@ struct SpellVisualKitModelAttachMeta } }; +struct SpellVisualKitPickerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(3989478, 0, 3, 3, 0xC1AB1620, fields, -1); + return &instance; + } +}; + +struct SpellVisualKitPickerEntryMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(3989479, 0, 4, 3, 0x94FA5841, fields, 3); + return &instance; + } +}; + struct SpellVisualMissileMeta { static DB2Meta const* Instance() @@ -13407,7 +13482,7 @@ struct UiMapMeta { FT_INT, 1, true }, { FT_INT, 1, true }, }; - static DB2Meta instance(1957206, 1, 13, 13, 0x18361012, fields, 2); + static DB2Meta instance(1957206, 1, 13, 13, 0x85884C46, fields, 2); return &instance; } }; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index ea94fb836b3..cd13d22b78f 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -657,6 +657,7 @@ struct ChrCustomizationElementEntry int32 ChrCustomizationBoneSetID; int32 ChrCustomizationCondModelID; int32 ChrCustomizationDisplayInfoID; + int32 ChrCustItemGeoModifyID; }; struct ChrCustomizationOptionEntry @@ -1797,6 +1798,8 @@ struct ItemBonusTreeNodeEntry uint16 ChildItemBonusTreeID; uint16 ChildItemBonusListID; uint16 ChildItemLevelSelectorID; + int32 ItemBonusListGroupID; + int32 ParentItemBonusTreeNodeID; uint32 ParentItemBonusTreeID; }; @@ -2642,8 +2645,13 @@ struct QuestXPEntry struct RandPropPointsEntry { uint32 ID; + float DamageReplaceStatF; + float DamageSecondaryF; int32 DamageReplaceStat; int32 DamageSecondary; + float EpicF[5]; + float SuperiorF[5]; + float GoodF[5]; uint32 Epic[5]; uint32 Superior[5]; uint32 Good[5]; diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index aa250eb5dd2..89426fd40d2 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -2196,7 +2196,7 @@ uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bon return std::min(std::max(itemLevel, uint32(MIN_ITEM_LEVEL)), uint32(MAX_ITEM_LEVEL)); } -int32 Item::GetItemStatValue(uint32 index, Player const* owner) const +float Item::GetItemStatValue(uint32 index, Player const* owner) const { ASSERT(index < MAX_ITEM_PROTO_STATS); switch (GetItemStatType(index)) @@ -2209,16 +2209,16 @@ int32 Item::GetItemStatValue(uint32 index, Player const* owner) const } uint32 itemLevel = GetItemLevel(owner); - if (uint32 randomPropPoints = GetRandomPropertyPoints(itemLevel, GetQuality(), GetTemplate()->GetInventoryType(), GetTemplate()->GetSubClass())) + if (float randomPropPoints = GetRandomPropertyPoints(itemLevel, GetQuality(), GetTemplate()->GetInventoryType(), GetTemplate()->GetSubClass())) { float statValue = float(_bonusData.StatPercentEditor[index] * randomPropPoints) * 0.0001f; if (GtItemSocketCostPerLevelEntry const* gtCost = sItemSocketCostPerLevelGameTable.GetRow(itemLevel)) statValue -= float(int32(_bonusData.ItemStatSocketCostMultiplier[index] * gtCost->SocketCost)); - return int32(std::floor(statValue + 0.5f)); + return statValue; } - return 0; + return 0.0f; } ItemDisenchantLootEntry const* Item::GetDisenchantLoot(Player const* owner) const diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index 4d2e84cabda..e620e6e5491 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -330,7 +330,7 @@ class TC_GAME_API Item : public Object uint32 minItemLevel, uint32 minItemLevelCutoff, uint32 maxItemLevel, bool pvpBonus, uint32 azeriteLevel); int32 GetRequiredLevel() const; int32 GetItemStatType(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return _bonusData.ItemStatType[index]; } - int32 GetItemStatValue(uint32 index, Player const* owner) const; + float GetItemStatValue(uint32 index, Player const* owner) const; SocketColor GetSocketColor(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_SOCKETS); return SocketColor(_bonusData.SocketColor[index]); } uint32 GetAppearanceModId() const { return m_itemData->ItemAppearanceModID; } void SetAppearanceModId(uint32 appearanceModId) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), appearanceModId); } diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp index 1fa253d7a9f..a68f863bacf 100644 --- a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp +++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp @@ -107,7 +107,7 @@ ItemRandomBonusListId GenerateItemRandomBonusListId(uint32 item_id) return *Trinity::Containers::SelectRandomWeightedContainerElement(tab->second.BonusListIDs, tab->second.Chances); } -TC_GAME_API uint32 GetRandomPropertyPoints(uint32 itemLevel, uint32 quality, uint32 inventoryType, uint32 subClass) +TC_GAME_API float GetRandomPropertyPoints(uint32 itemLevel, uint32 quality, uint32 inventoryType, uint32 subClass) { uint32 propIndex; @@ -163,14 +163,14 @@ TC_GAME_API uint32 GetRandomPropertyPoints(uint32 itemLevel, uint32 quality, uin switch (quality) { case ITEM_QUALITY_UNCOMMON: - return randPropPointsEntry->Good[propIndex]; + return randPropPointsEntry->GoodF[propIndex]; case ITEM_QUALITY_RARE: case ITEM_QUALITY_HEIRLOOM: - return randPropPointsEntry->Superior[propIndex]; + return randPropPointsEntry->SuperiorF[propIndex]; case ITEM_QUALITY_EPIC: case ITEM_QUALITY_LEGENDARY: case ITEM_QUALITY_ARTIFACT: - return randPropPointsEntry->Epic[propIndex]; + return randPropPointsEntry->EpicF[propIndex]; } return 0; diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.h b/src/server/game/Entities/Item/ItemEnchantmentMgr.h index 0ecb89cd9ac..5c8f524a125 100644 --- a/src/server/game/Entities/Item/ItemEnchantmentMgr.h +++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.h @@ -24,6 +24,6 @@ using ItemRandomBonusListId = uint32; TC_GAME_API void LoadItemRandomBonusListTemplates(); TC_GAME_API ItemRandomBonusListId GenerateItemRandomBonusListId(uint32 item_id); -TC_GAME_API uint32 GetRandomPropertyPoints(uint32 itemLevel, uint32 quality, uint32 inventoryType, uint32 subclass); +TC_GAME_API float GetRandomPropertyPoints(uint32 itemLevel, uint32 quality, uint32 inventoryType, uint32 subclass); #endif diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 463c1b714d6..9083218ed0d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7538,7 +7538,7 @@ void Player::_ApplyItemBonuses(Item* item, uint8 slot, bool apply) if (statType == -1) continue; - int32 val = item->GetItemStatValue(i, this); + float val = item->GetItemStatValue(i, this); if (val == 0) continue; diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 64652d6474b..c06a834a1d7 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -554,7 +554,7 @@ int32 SpellEffectInfo::CalcBaseValue(Unit const* caster, Unit const* target, uin if (!randPropPoints) randPropPoints = sRandPropPointsStore.AssertEntry(sRandPropPointsStore.GetNumRows() - 1); - value = _spellInfo->Scaling.Class == -8 ? randPropPoints->DamageReplaceStat : randPropPoints->DamageSecondary; + value = _spellInfo->Scaling.Class == -8 ? randPropPoints->DamageReplaceStatF : randPropPoints->DamageSecondaryF; } else value = GetRandomPropertyPoints(effectiveItemLevel, ITEM_QUALITY_RARE, INVTYPE_CHEST, 0); |