aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/GameObject
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-06-17 16:29:59 +0200
committerShauren <shauren.trinity@gmail.com>2023-06-17 16:29:59 +0200
commit0fb8765a6638fd947b59fce44d5c31251d0cdadd (patch)
tree0414c93f15f760f755b559edb654be3c9865eb1d /src/server/game/Entities/GameObject
parenta97cdfc8f5dedc4be1998f0b1667b519fb1ce33b (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.cpp23
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)