diff --git a/src/game/BattleGround/BattleGround.h b/src/game/BattleGround/BattleGround.h index cfdccbd8..8169a2c7 100644 --- a/src/game/BattleGround/BattleGround.h +++ b/src/game/BattleGround/BattleGround.h @@ -991,7 +991,7 @@ class BattleGround * @param * @param uint32 */ - virtual void HandleAreaTrigger(Player* /*Source*/, uint32 /*Trigger*/) {} + virtual bool HandleAreaTrigger(Player* /*Source*/, uint32 /*Trigger*/) { return false; } // must be implemented in BG subclass if need AND call base class generic code /** * @brief diff --git a/src/game/BattleGround/BattleGroundAB.cpp b/src/game/BattleGround/BattleGroundAB.cpp index 0968b528..f4545920 100644 --- a/src/game/BattleGround/BattleGroundAB.cpp +++ b/src/game/BattleGround/BattleGroundAB.cpp @@ -200,7 +200,7 @@ void BattleGroundAB::RemovePlayer(Player * /*plr*/, ObjectGuid /*guid*/) /// /// The source. /// The trigger. -void BattleGroundAB::HandleAreaTrigger(Player* source, uint32 trigger) +bool BattleGroundAB::HandleAreaTrigger(Player* source, uint32 trigger) { switch (trigger) { @@ -216,19 +216,13 @@ void BattleGroundAB::HandleAreaTrigger(Player* source, uint32 trigger) else { source->LeaveBattleground(); } break; - case 3866: // Stables - case 3869: // Gold Mine - case 3867: // Farm - case 3868: // Lumber Mill - case 3870: // Black Smith - case 4020: // Unk1 - case 4021: // Unk2 // break; default: // sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", trigger); // source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", trigger); - break; + return false; } + return true; } /// diff --git a/src/game/BattleGround/BattleGroundAB.h b/src/game/BattleGround/BattleGroundAB.h index 542785f8..0740d8cf 100644 --- a/src/game/BattleGround/BattleGroundAB.h +++ b/src/game/BattleGround/BattleGroundAB.h @@ -255,7 +255,7 @@ class BattleGroundAB : public BattleGround * @param source * @param trigger */ - void HandleAreaTrigger(Player* source, uint32 trigger) override; + bool HandleAreaTrigger(Player* source, uint32 trigger) override; /** * @brief * diff --git a/src/game/BattleGround/BattleGroundAV.cpp b/src/game/BattleGround/BattleGroundAV.cpp index 158ef53e..01e34a2b 100644 --- a/src/game/BattleGround/BattleGroundAV.cpp +++ b/src/game/BattleGround/BattleGroundAV.cpp @@ -348,7 +348,7 @@ void BattleGroundAV::EndBattleGround(Team winner) BattleGround::EndBattleGround(winner); } -void BattleGroundAV::HandleAreaTrigger(Player* source, uint32 trigger) +bool BattleGroundAV::HandleAreaTrigger(Player* source, uint32 trigger) { // this is wrong way to implement these things. On official it done by gameobject spell cast. switch (trigger) @@ -366,19 +366,12 @@ void BattleGroundAV::HandleAreaTrigger(Player* source, uint32 trigger) else { source->LeaveBattleground(); } break; - case 3326: - case 3327: - case 3328: - case 3329: - case 3330: - case 3331: // source->Unmount(); - break; default: - DEBUG_LOG("BattleGroundAV: WARNING: Unhandled AreaTrigger in Battleground: %u", trigger); // source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", trigger); - break; + return false; } + return true; } void BattleGroundAV::UpdatePlayerScore(Player* source, uint32 type, uint32 value) diff --git a/src/game/BattleGround/BattleGroundAV.h b/src/game/BattleGround/BattleGroundAV.h index 2e392e92..2a78ac33 100644 --- a/src/game/BattleGround/BattleGroundAV.h +++ b/src/game/BattleGround/BattleGroundAV.h @@ -428,7 +428,7 @@ class BattleGroundAV : public BattleGround * @param source * @param trigger */ - void HandleAreaTrigger(Player* source, uint32 trigger) override; + bool HandleAreaTrigger(Player* source, uint32 trigger) override; /** * @brief * diff --git a/src/game/BattleGround/BattleGroundWS.cpp b/src/game/BattleGround/BattleGroundWS.cpp index 1baaaec4..2ecb2b4e 100644 --- a/src/game/BattleGround/BattleGroundWS.cpp +++ b/src/game/BattleGround/BattleGroundWS.cpp @@ -455,23 +455,16 @@ void BattleGroundWS::UpdateTeamScore(Team team) UpdateWorldState(BG_WS_FLAG_CAPTURES_HORDE, m_TeamScores[TEAM_INDEX_HORDE]); } -void BattleGroundWS::HandleAreaTrigger(Player* source, uint32 trigger) +bool BattleGroundWS::HandleAreaTrigger(Player* source, uint32 trigger) { // this is wrong way to implement these things. On official it done by gameobject spell cast. if (GetStatus() != STATUS_IN_PROGRESS) - { return; } + { return false; } // uint32 SpellId = 0; // uint64 buff_guid = 0; switch (trigger) { - case 3686: // Alliance elixir of speed spawn. Trigger not working, because located inside other areatrigger, can be replaced by IsWithinDist(object, dist) in BattleGround::Update(). - case 3687: // Horde elixir of speed spawn. Trigger not working, because located inside other areatrigger, can be replaced by IsWithinDist(object, dist) in BattleGround::Update(). - case 3706: // Alliance elixir of regeneration spawn - case 3708: // Horde elixir of regeneration spawn - case 3707: // Alliance elixir of berserk spawn - case 3709: // Horde elixir of berserk spawn - break; case 3646: // Alliance Flag spawn if (m_FlagState[TEAM_INDEX_HORDE] && !m_FlagState[TEAM_INDEX_ALLIANCE]) if (GetHordeFlagCarrierGuid() == source->GetObjectGuid()) @@ -495,10 +488,9 @@ void BattleGroundWS::HandleAreaTrigger(Player* source, uint32 trigger) { source->LeaveBattleground(); } break; default: - sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", trigger); - source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", trigger); - break; + return false; } + return true; } void BattleGroundWS::Reset() diff --git a/src/game/BattleGround/BattleGroundWS.h b/src/game/BattleGround/BattleGroundWS.h index 409e996a..cf6f0c80 100644 --- a/src/game/BattleGround/BattleGroundWS.h +++ b/src/game/BattleGround/BattleGroundWS.h @@ -276,7 +276,7 @@ class BattleGroundWS : public BattleGround * @param source * @param trigger */ - void HandleAreaTrigger(Player* source, uint32 trigger) override; + bool HandleAreaTrigger(Player* source, uint32 trigger) override; /** * @brief * diff --git a/src/game/WorldHandlers/MiscHandler.cpp b/src/game/WorldHandlers/MiscHandler.cpp index 9e6035db..32cf9f80 100644 --- a/src/game/WorldHandlers/MiscHandler.cpp +++ b/src/game/WorldHandlers/MiscHandler.cpp @@ -698,22 +698,24 @@ void WorldSession::HandleResurrectResponseOpcode(WorldPacket& recv_data) void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recv_data) { - uint32 Trigger_ID; - recv_data >> Trigger_ID; - DEBUG_LOG("WORLD: Received opcode CMSG_AREATRIGGER"); - DEBUG_LOG("Trigger ID: %u", Trigger_ID); - if (_player->IsTaxiFlying()) + uint32 Trigger_ID; + + recv_data >> Trigger_ID; + DEBUG_LOG("Trigger ID: %u", Trigger_ID); + Player* player = GetPlayer(); + + if (player->IsTaxiFlying()) { - DEBUG_LOG("%s in flight, ignore Area Trigger ID: %u", _player->GetGuidStr().c_str(), Trigger_ID); + DEBUG_LOG("Player '%s' (GUID: %u) in flight, ignore Area Trigger ID: %u", player->GetName(), player->GetGUIDLow(), Trigger_ID); return; } AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(Trigger_ID); if (!atEntry) { - DEBUG_LOG("%s send unknown (by DBC) Area Trigger ID: %u", _player->GetGuidStr().c_str(), Trigger_ID); + DEBUG_LOG("Player '%s' (GUID: %u) send unknown (by DBC) Area Trigger ID: %u", player->GetName(), player->GetGUIDLow(), Trigger_ID); return; } @@ -721,23 +723,23 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recv_data) const float delta = 5.0f; // check if player in the range of areatrigger - if (!IsPointInAreaTriggerZone(atEntry, _player->GetMapId(), _player->GetPositionX(), _player->GetPositionY(), _player->GetPositionZ(), delta)) + if (!IsPointInAreaTriggerZone(atEntry, player->GetMapId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), delta)) { - DEBUG_LOG("%s too far, ignore Area Trigger ID: %u", _player->GetGuidStr().c_str(), Trigger_ID); + DEBUG_LOG("Player '%s' (GUID: %u) too far, ignore Area Trigger ID: %u", player->GetName(), player->GetGUIDLow(), Trigger_ID); return; } - if (sScriptMgr.OnAreaTrigger(_player, atEntry)) + if (sScriptMgr.OnAreaTrigger(player, atEntry)) { return; } uint32 quest_id = sObjectMgr.GetQuestForAreaTrigger(Trigger_ID); - if (quest_id && _player->IsAlive() && _player->IsActiveQuest(quest_id)) + if (quest_id && player->IsAlive() && player->IsActiveQuest(quest_id)) { Quest const* pQuest = sObjectMgr.GetQuestTemplate(quest_id); if (pQuest) { - if (_player->GetQuestStatus(quest_id) == QUEST_STATUS_INCOMPLETE) - { _player->AreaExploredOrEventHappens(quest_id); } + if (player->GetQuestStatus(quest_id) == QUEST_STATUS_INCOMPLETE) + { player->AreaExploredOrEventHappens(quest_id); } } } @@ -745,19 +747,19 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recv_data) if (sObjectMgr.IsTavernAreaTrigger(Trigger_ID)) { // set resting flag we are in the inn - if (_player->GetRestType() != REST_TYPE_IN_CITY) - { _player->SetRestType(REST_TYPE_IN_TAVERN, Trigger_ID); } + if (player->GetRestType() != REST_TYPE_IN_CITY) + player->SetRestType(REST_TYPE_IN_TAVERN, Trigger_ID); return; } - if (BattleGround* bg = _player->GetBattleGround()) + if (BattleGround* bg = player->GetBattleGround()) { - bg->HandleAreaTrigger(_player, Trigger_ID); + if (bg->HandleAreaTrigger(player, Trigger_ID)) return; } - else if (OutdoorPvP* outdoorPvP = sOutdoorPvPMgr.GetScript(_player->GetCachedZoneId())) + else if (OutdoorPvP* outdoorPvP = sOutdoorPvPMgr.GetScript(player->GetCachedZoneId())) { - if (outdoorPvP->HandleAreaTrigger(_player, Trigger_ID)) + if (outdoorPvP->HandleAreaTrigger(player, Trigger_ID)) { return; } } @@ -771,10 +773,10 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recv_data) { return; } // ghost resurrected at enter attempt to dungeon with corpse (including fail enter cases) - if (!_player->IsAlive() && targetMapEntry->IsDungeon()) + if (!player->IsAlive() && targetMapEntry->IsDungeon()) { uint32 corpseMapId = 0; // was planned to be negative as "incorrect" id? anyway map 0 is not instanceable - if (Corpse* corpse = _player->GetCorpse()) + if (Corpse* corpse = player->GetCorpse()) { corpseMapId = corpse->GetMapId(); } // check back way from corpse to entrance @@ -793,8 +795,8 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recv_data) // corpse not in dungeon or some linked deep dungeons if (!instance_map) { - _player->GetSession()->SendAreaTriggerMessage("You can not enter %s while in a ghost mode", - targetMapEntry->name[_player->GetSession()->GetSessionDbcLocale()]); + player->GetSession()->SendAreaTriggerMessage("You can not enter %s while in a ghost mode", + targetMapEntry->name[player->GetSession()->GetSessionDbcLocale()]); return; } @@ -811,20 +813,20 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recv_data) } // now we can resurrect player, and then check teleport requirements - _player->ResurrectPlayer(0.5f); - _player->SpawnCorpseBones(); + player->ResurrectPlayer(0.5f); + player->SpawnCorpseBones(); } uint32 miscRequirement = 0; - AreaLockStatus lockStatus = _player->GetAreaTriggerLockStatus(at, miscRequirement); + AreaLockStatus lockStatus = player->GetAreaTriggerLockStatus(at, miscRequirement); if (lockStatus != AREA_LOCKSTATUS_OK) { - _player->SendTransferAbortedByLockStatus(targetMapEntry, lockStatus, miscRequirement); + player->SendTransferAbortedByLockStatus(targetMapEntry, lockStatus, miscRequirement); return; } // teleport player - _player->TeleportTo(at->target_mapId, at->target_X, at->target_Y, at->target_Z, at->target_Orientation, TELE_TO_NOT_LEAVE_TRANSPORT, true); + player->TeleportTo(at->target_mapId, at->target_X, at->target_Y, at->target_Z, at->target_Orientation, TELE_TO_NOT_LEAVE_TRANSPORT, true); } void WorldSession::HandleUpdateAccountData(WorldPacket& recv_data)