void BattleGroundBE::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; //uint32 SpellId = 0; //uint64 buff_guid = 0; switch(Trigger) { case 4538: // buff trigger? //buff_guid = m_BgObjects[BG_BE_OBJECT_BUFF_1]; break; case 4539: // buff trigger? //buff_guid = m_BgObjects[BG_BE_OBJECT_BUFF_2]; break; case 4924: case 4944: case 4922: case 4923: case 4921: case 5039: case 5040: HandlePlayerUnderMap(Source); sLog.outError("BattleGroundBE:: Player %s is under map due to trigger %u", Source->GetName(), Trigger); break; default: sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); break; } //if (buff_guid) // HandleTriggerBuff(buff_guid,Source); }
void BattleGroundNA::HandleAreaTrigger(Player *Source, uint32 Trigger) { if (GetStatus() != STATUS_IN_PROGRESS) return; //uint32 SpellId = 0; //uint64 buff_guid = 0; switch(Trigger) { case 4536: // buff trigger? case 4537: // buff trigger? break; case 4917: case 5006: case 5008: HandlePlayerUnderMap(Source); sLog.outError("BattleGroundNA:: Player %s is under map due to trigger %u", Source->GetName(), Trigger); break; default: sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); break; } //if (buff_guid) // HandleTriggerBuff(buff_guid,Source); }
void BattlegroundDS::PostUpdateImpl(uint32 diff) { if (GetStartTime() >= 75*IN_MILLISECONDS) { for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); itr++) { Player* player = ObjectAccessor::FindPlayer(itr->first); if (player && player->isAlive() && player->GetPositionX() < 1260 && player->GetPositionY() >755 && player->GetPositionY() < 775 && player->GetPositionZ() > 13) { player->KnockBackWithAngle(6.15f, 50.00f, 5.00f); player->RemoveAurasDueToSpell(48018); } if (player && player->isAlive() && player->GetPositionX() > 1330 && player->GetPositionY() >805 && player->GetPositionY() < 825 && player->GetPositionZ() > 13) { player->KnockBackWithAngle(3.10f, 50.00f, 5.00f); player->RemoveAurasDueToSpell(48018); } } } if (m_knockback) { if (m_knockback <= diff) { for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { Player *player = ObjectAccessor::FindPlayer(itr->first); if (!player) continue; if (player->GetDistance2d(1214.0f, 765.0f) <= 50.0f && player->GetPositionZ() > 13.0f) player->KnockBackWithAngle(0.0f, 55.0f, 9.0f); else if (player->GetDistance2d(1369.0f, 817.0f) <= 50.0f && player->GetPositionZ() > 13.0f) player->KnockBackWithAngle(M_PI, 55.0f, 9.0f); } m_knockback = 0; } else m_knockback -= diff; } if (!m_knockback && m_teleport) { if (m_teleport <= diff) { for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { Player* player = ObjectAccessor::FindPlayer(itr->first); if (!player) continue; if (player->GetPositionZ() > 13.0f) HandlePlayerUnderMap(player); } m_teleport = 5 * IN_MILLISECONDS; } else m_teleport -= diff; } if (m_waterFall <= diff) { if (m_waterFallStatus == 0) // Add the water { DoorClose(BG_DS_OBJECT_WATER_2); m_waterFall = 7 * IN_MILLISECONDS; m_waterFallStatus = 1; } else if (m_waterFallStatus == 1) // Knockback, spawn the LOS object { for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { Player *player = ObjectAccessor::FindPlayer(itr->first); if (!player) continue; if (player->GetDistance2d(1291.56f, 790.837f) <= BG_DS_WATERFALL_RADIUS) player->KnockbackFrom(1291.56f, 790.837f, 20.0f, 7.0f); } SpawnBGObject(BG_DS_OBJECT_WATER_1, RESPAWN_IMMEDIATELY); GetBgMap()->SetDynLOSObjectState(m_dynamicLOSid, true); m_waterFall = BG_DS_WATERFALL_DURATION; m_waterFallStatus = 2; } else // remove LOS and water { DoorOpen(BG_DS_OBJECT_WATER_2); SpawnBGObject(BG_DS_OBJECT_WATER_1, RESPAWN_ONE_DAY); GetBgMap()->SetDynLOSObjectState(m_dynamicLOSid, false); m_waterFall = urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX); m_waterFallStatus = 0; } } else m_waterFall -= diff; }