diff options
| author | Shauren <shauren.trinity@gmail.com> | 2023-06-17 16:29:59 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2023-06-17 16:29:59 +0200 |
| commit | 0fb8765a6638fd947b59fce44d5c31251d0cdadd (patch) | |
| tree | 0414c93f15f760f755b559edb654be3c9865eb1d /src/server/game/Entities/GameObject | |
| parent | a97cdfc8f5dedc4be1998f0b1667b519fb1ce33b (diff) | |
Core/Items: Item bonus generation improvements
* Pass ItemContext to item creation wherever possible
* Support scaling item levels with m+ keystone levels (not used currently)
* Fixed item link validation when client sends it as default uninitialized bonus list with context only
* Support scaling items depending on current active season (seasons not implemented)
* Implemented content tuning redirection
Diffstat (limited to 'src/server/game/Entities/GameObject')
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 665e3244125..e7726b1f595 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -36,6 +36,7 @@ #include "GridNotifiersImpl.h" #include "Group.h" #include "Item.h" +#include "ItemBonusMgr.h" #include "Log.h" #include "Loot.h" #include "LootMgr.h" @@ -1459,9 +1460,10 @@ Loot* GameObject::GetFishLoot(Player* lootOwner) Loot* fishLoot = new Loot(GetMap(), GetGUID(), LOOT_FISHING, nullptr); uint32 areaId = GetAreaId(); + ItemContext itemContext = ItemBonusMgr::GetContextForPlayer(GetMap()->GetMapDifficulty(), lootOwner); while (AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId)) { - fishLoot->FillLoot(areaId, LootTemplates_Fishing, lootOwner, true, true); + fishLoot->FillLoot(areaId, LootTemplates_Fishing, lootOwner, true, true, LOOT_MODE_DEFAULT, itemContext); if (!fishLoot->isLooted()) break; @@ -1469,7 +1471,7 @@ Loot* GameObject::GetFishLoot(Player* lootOwner) } if (fishLoot->isLooted()) - fishLoot->FillLoot(defaultzone, LootTemplates_Fishing, lootOwner, true, true); + fishLoot->FillLoot(defaultzone, LootTemplates_Fishing, lootOwner, true, true, LOOT_MODE_DEFAULT, itemContext); return fishLoot; } @@ -1481,9 +1483,10 @@ Loot* GameObject::GetFishLootJunk(Player* lootOwner) Loot* fishLoot = new Loot(GetMap(), GetGUID(), LOOT_FISHING_JUNK, nullptr); uint32 areaId = GetAreaId(); + ItemContext itemContext = ItemBonusMgr::GetContextForPlayer(GetMap()->GetMapDifficulty(), lootOwner); while (AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId)) { - fishLoot->FillLoot(areaId, LootTemplates_Fishing, lootOwner, true, true, LOOT_MODE_JUNK_FISH); + fishLoot->FillLoot(areaId, LootTemplates_Fishing, lootOwner, true, true, LOOT_MODE_JUNK_FISH, itemContext); if (!fishLoot->isLooted()) break; @@ -1491,7 +1494,7 @@ Loot* GameObject::GetFishLootJunk(Player* lootOwner) } if (fishLoot->isLooted()) - fishLoot->FillLoot(defaultzone, LootTemplates_Fishing, lootOwner, true, true, LOOT_MODE_JUNK_FISH); + fishLoot->FillLoot(defaultzone, LootTemplates_Fishing, lootOwner, true, true, LOOT_MODE_JUNK_FISH, itemContext); return fishLoot; } @@ -2240,7 +2243,7 @@ void GameObject::Use(Unit* user) m_loot.reset(loot); loot->SetDungeonEncounterId(info->chest.DungeonEncounter); - loot->FillLoot(info->GetLootId(), LootTemplates_Gameobject, player, !groupRules, false, GetLootMode(), GetMap()->GetDifficultyLootItemContext()); + loot->FillLoot(info->GetLootId(), LootTemplates_Gameobject, player, !groupRules, false, GetLootMode(), ItemBonusMgr::GetContextForPlayer(GetMap()->GetMapDifficulty(), player)); if (GetLootMode() > 0) if (GameObjectTemplateAddon const* addon = GetTemplateAddon()) @@ -2271,7 +2274,7 @@ void GameObject::Use(Unit* user) m_personalLoot = GenerateDungeonEncounterPersonalLoot(info->chest.DungeonEncounter, info->chest.chestPersonalLoot, LootTemplates_Gameobject, LOOT_CHEST, this, addon ? addon->Mingold : 0, addon ? addon->Maxgold : 0, - GetLootMode(), GetMap()->GetDifficultyLootItemContext(), tappers); + GetLootMode(), GetMap()->GetMapDifficulty(), tappers); } else { @@ -2279,7 +2282,7 @@ void GameObject::Use(Unit* user) m_personalLoot[player->GetGUID()].reset(loot); loot->SetDungeonEncounterId(info->chest.DungeonEncounter); - loot->FillLoot(info->chest.chestPersonalLoot, LootTemplates_Gameobject, player, true, false, GetLootMode(), GetMap()->GetDifficultyLootItemContext()); + loot->FillLoot(info->chest.chestPersonalLoot, LootTemplates_Gameobject, player, true, false, GetLootMode(), ItemBonusMgr::GetContextForPlayer(GetMap()->GetMapDifficulty(), player)); if (GetLootMode() > 0 && addon) loot->generateMoneyLoot(addon->Mingold, addon->Maxgold); @@ -2292,7 +2295,7 @@ void GameObject::Use(Unit* user) if (info->chest.chestPushLoot) { Loot pushLoot(GetMap(), GetGUID(), LOOT_CHEST, nullptr); - pushLoot.FillLoot(info->chest.chestPushLoot, LootTemplates_Gameobject, player, true, false, GetLootMode(), GetMap()->GetDifficultyLootItemContext()); + pushLoot.FillLoot(info->chest.chestPushLoot, LootTemplates_Gameobject, player, true, false, GetLootMode(), ItemBonusMgr::GetContextForPlayer(GetMap()->GetMapDifficulty(), player)); pushLoot.AutoStore(player, NULL_BAG, NULL_SLOT); } @@ -2798,7 +2801,7 @@ void GameObject::Use(Unit* user) Player* player = user->ToPlayer(); Loot* loot = new Loot(GetMap(), GetGUID(), LOOT_FISHINGHOLE, nullptr); - loot->FillLoot(GetGOInfo()->GetLootId(), LootTemplates_Gameobject, player, true); + loot->FillLoot(GetGOInfo()->GetLootId(), LootTemplates_Gameobject, player, true, false, LOOT_MODE_DEFAULT, ItemBonusMgr::GetContextForPlayer(GetMap()->GetMapDifficulty(), player)); m_personalLoot[player->GetGUID()].reset(loot); player->SendLoot(*loot); @@ -2981,7 +2984,7 @@ void GameObject::Use(Unit* user) Loot* loot = new Loot(GetMap(), GetGUID(), LOOT_CHEST, nullptr); m_personalLoot[player->GetGUID()].reset(loot); - loot->FillLoot(info->gatheringNode.chestLoot, LootTemplates_Gameobject, player, true, false, GetLootMode(), GetMap()->GetDifficultyLootItemContext()); + loot->FillLoot(info->gatheringNode.chestLoot, LootTemplates_Gameobject, player, true, false, GetLootMode(), ItemBonusMgr::GetContextForPlayer(GetMap()->GetMapDifficulty(), player)); } if (info->gatheringNode.triggeredEvent) |
