#include "MinigameTreasureChestServer.h" #include "ScriptedActivityComponent.h" #include "TeamManager.h" #include "EntityManager.h" #include "dZoneManager.h" #include "Loot.h" #include "dServer.h" void MinigameTreasureChestServer::OnUse(Entity* self, Entity* user) { auto* sac = self->GetComponent(); if (sac == nullptr) return; if (self->GetVar(u"used")) return; self->SetVar(u"used", true); if (!IsPlayerInActivity(self, user->GetObjectID())) UpdatePlayer(self, user->GetObjectID()); auto* team = TeamManager::Instance()->GetTeam(user->GetObjectID()); uint32_t activityRating = CalculateActivityRating(self, user->GetObjectID()); if (self->GetLOT() == frakjawChestId || Game::server->GetZoneID() == 1204) activityRating = team != nullptr ? team->members.size() : 1; Loot::DropActivityLoot(user, self->GetObjectID(), sac->GetActivityID(), activityRating); sac->PlayerRemove(user->GetObjectID()); auto* zoneControl = Game::zoneManager->GetZoneControlObject(); if (zoneControl != nullptr) { zoneControl->OnFireEventServerSide(self, "Survival_Update", 0); } self->Smash(self->GetObjectID()); } uint32_t MinigameTreasureChestServer::CalculateActivityRating(Entity* self, LWOOBJID playerID) { auto* team = TeamManager::Instance()->GetTeam(playerID); return team != nullptr ? team->members.size() * 100 : ActivityManager::CalculateActivityRating(self, playerID) * 100; } void MinigameTreasureChestServer::OnStartup(Entity* self) { // BONS treasure chest thinks it's on FV, causing it to start a lobby if (Game::zoneManager->GetZoneID().GetMapID() == 1204) { auto* sac = self->GetComponent(); if (sac != nullptr) { sac->SetInstanceMapID(1204); } } }