aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/GameObject
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-10-15 20:39:05 +0200
committerShauren <shauren.trinity@gmail.com>2022-10-15 20:39:05 +0200
commita4e9542e37b3659f3688daeeaa16f6164d5e8fbf (patch)
tree38b18a19fb2ba9ad2f548643d171d47a51c0d538 /src/server/game/Entities/GameObject
parent9fb4c1ca0228a51da4b69322e8a3db8932781f13 (diff)
Core/GameObjects: Move contents of Spell::SendLoot to GameObject::Use
Diffstat (limited to 'src/server/game/Entities/GameObject')
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 20fdddb2074..36ef1a42d9e 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -2171,6 +2171,59 @@ void GameObject::Use(Unit* user)
player->SendPreparedGossip(this);
return;
}
+ case GAMEOBJECT_TYPE_CHEST: //3
+ {
+ Player* player = user->ToPlayer();
+ if (!player)
+ return;
+
+ if (Battleground* bg = player->GetBattleground())
+ if (!bg->CanActivateGO(GetEntry(), bg->GetPlayerTeam(user->GetGUID())))
+ return;
+
+ GameObjectTemplate const* info = GetGOInfo();
+ Loot* loot = nullptr;
+ if (getLootState() == GO_READY)
+ {
+ if (uint32 lootId = info->GetLootId())
+ {
+ SetLootGenerationTime();
+
+ Group const* group = player->GetGroup();
+ bool groupRules = group && info->chest.usegrouplootrules;
+
+ loot = new Loot(GetMap(), GetGUID(), LOOT_CHEST, groupRules ? group : nullptr);
+ m_loot.reset(loot);
+
+ loot->SetDungeonEncounterId(info->chest.DungeonEncounter);
+ loot->FillLoot(lootId, LootTemplates_Gameobject, player, !groupRules, false, GetLootMode(), GetMap()->GetDifficultyLootItemContext());
+
+ if (GetLootMode() > 0)
+ if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
+ loot->generateMoneyLoot(addon->Mingold, addon->Maxgold);
+ }
+
+ /// @todo possible must be moved to loot release (in different from linked triggering)
+ if (info->chest.triggeredEvent)
+ {
+ TC_LOG_DEBUG("spells", "Chest ScriptStart id %u for GO " UI64FMTD, info->chest.triggeredEvent, GetSpawnId());
+ GameEvents::Trigger(info->chest.triggeredEvent, user, this);
+ }
+
+ // triggering linked GO
+ if (uint32 trapEntry = info->chest.linkedTrap)
+ TriggeringLinkedGameObject(trapEntry, player);
+
+ SetLootState(GO_ACTIVATED, player);
+ }
+ else
+ loot = GetLootForPlayer(player);
+
+ // Send loot
+ if (loot)
+ player->SendLoot(*loot);
+ break;
+ }
case GAMEOBJECT_TYPE_TRAP: //6
{
GameObjectTemplate const* goInfo = GetGOInfo();
@@ -2261,6 +2314,11 @@ void GameObject::Use(Unit* user)
return;
}
+ case GAMEOBJECT_TYPE_SPELL_FOCUS: //8
+ // triggering linked GO
+ if (uint32 trapEntry = GetGOInfo()->spellFocus.linkedTrap)
+ TriggeringLinkedGameObject(trapEntry, user);
+ break;
//big gun, its a spell/aura
case GAMEOBJECT_TYPE_GOOBER: //10
{