diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 313a9e4863..61da530b8e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -657,7 +657,7 @@ bool Player::StoreNewItemInBestSlots(uint32 titem_id, uint32 titem_amount) if (msg != EQUIP_ERR_OK) break; - EquipNewItem(eDest, titem_id, true); + EquipNewItem(eDest, titem_id, true, GenerateItemRandomPropertyId(titem_id)); AutoUnequipOffhandIfNeed(); --titem_amount; } @@ -11634,12 +11634,15 @@ Item* Player::_StoreItem(uint16 pos, Item* pItem, uint32 count, bool clone, bool } } -Item* Player::EquipNewItem(uint16 pos, uint32 item, bool update) +Item* Player::EquipNewItem(uint16 pos, uint32 item, bool update, int32 randomPropertyId) { if (Item* pItem = Item::CreateItem(item, 1, this)) { ItemAddedQuestCheck(item, 1); UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_RECEIVE_EPIC_ITEM, item, 1); + UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM, item, 1); + if (randomPropertyId) + pItem->SetItemRandomProperties(randomPropertyId); return EquipItem(pos, pItem, update); } @@ -22035,8 +22038,8 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint32 } Item* it = bStore ? - StoreNewItem(vDest, item, true) : - EquipNewItem(uiDest, item, true); + StoreNewItem(vDest, item, true, GenerateItemRandomPropertyId(item)) : + EquipNewItem(uiDest, item, true, GenerateItemRandomPropertyId(item)); if (it) { uint32 new_count = pVendor->UpdateVendorItemCurrentCount(crItem, count); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 30d71511fe..379a52087a 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1211,7 +1211,7 @@ class TC_GAME_API Player : public Unit, public GridObject InventoryResult CanRollForItemInLFG(ItemTemplate const* item, WorldObject const* lootedObject) const; Item* StoreNewItem(ItemPosCountVec const& pos, uint32 item, bool update, int32 randomPropertyId = 0, GuidSet const& allowedLooters = GuidSet()); Item* StoreItem(ItemPosCountVec const& pos, Item* pItem, bool update); - Item* EquipNewItem(uint16 pos, uint32 item, bool update); + Item* EquipNewItem(uint16 pos, uint32 item, bool update, int32 randomPropertyId = 0); Item* EquipItem(uint16 pos, Item* pItem, bool update); void AutoUnequipOffhandIfNeed(bool force = false); bool StoreNewItemInBestSlots(uint32 item_id, uint32 item_count); diff --git a/src/server/game/Maps/MapScripts.cpp b/src/server/game/Maps/MapScripts.cpp index 64d6900d3d..ac687da798 100644 --- a/src/server/game/Maps/MapScripts.cpp +++ b/src/server/game/Maps/MapScripts.cpp @@ -738,7 +738,7 @@ void Map::ScriptsProcess() InventoryResult msg = pReceiver->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, step.script->CreateItem.ItemEntry, step.script->CreateItem.Amount); if (msg == EQUIP_ERR_OK) { - if (Item* item = pReceiver->StoreNewItem(dest, step.script->CreateItem.ItemEntry, true)) + if (Item* item = pReceiver->StoreNewItem(dest, step.script->CreateItem.ItemEntry, true, GenerateItemRandomPropertyId(step.script->CreateItem.ItemEntry))) pReceiver->SendNewItem(item, step.script->CreateItem.Amount, false, true); } else diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 905bc2bd55..f1f1c7c88c 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1363,7 +1363,7 @@ public: InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itr->second.GetId(), 1); if (msg == EQUIP_ERR_OK) { - Item* item = playerTarget->StoreNewItem(dest, itr->second.GetId(), true); + Item* item = playerTarget->StoreNewItem(dest, itr->second.GetId(), true, GenerateItemRandomPropertyId(itr->second.GetId())); // remove binding (let GM give it to another player later) if (player == playerTarget) diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index 25ccee1086..97e2c3516f 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -208,7 +208,7 @@ public: uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, id, count-curItemCount); if (msg == EQUIP_ERR_OK) { - Item* item = player->StoreNewItem(dest, id, true); + Item* item = player->StoreNewItem(dest, id, true, GenerateItemRandomPropertyId(id)); player->SendNewItem(item, count-curItemCount, true, false); } }