void BattleGroundAV::StartingEventOpenDoors() { UpdateWorldState(BG_AV_SHOW_H_SCORE, 1); UpdateWorldState(BG_AV_SHOW_A_SCORE, 1); OpenDoorEvent(BG_EVENT_DOOR); }
void BattleGroundAB::StartingEventOpenDoors() { OpenDoorEvent(BG_EVENT_DOOR); // Players that join battleground after start are not eligible to get achievement. StartTimedAchievement(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, AB_EVENT_START_BATTLE); }
void BattleGroundSA::StartShips() { if(ShipsStarted) return; OpenDoorEvent(100); /*DoorOpen(BG_SA_BOAT_ONE); DoorOpen(BG_SA_BOAT_TWO);*/ for(int i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++) { for( BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end();itr++) { if(Player* p = sObjectMgr.GetPlayer(itr->first)) { if(p->GetBGTeam() != attackers) continue; /*UpdateData data; WorldPacket pkt; GetBGObject(i)->BuildValuesUpdateBlockForPlayer(&data, p); data.BuildPacket(&pkt); p->GetSession()->SendPacket(&pkt);*/ } } } ShipsStarted = true; }
void BattleGroundDS::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() == STATUS_IN_PROGRESS) { // first knockback if(m_uiKnockback < diff && KnockbackCheck) { //dalaran sewers = 617; for(BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { Player * plr = sObjectMgr.GetPlayer(itr->first); if (plr) { if (plr->GetTeam() == ALLIANCE && plr->GetDistance2d(1214, 765) <= 50 && plr->GetPositionZ() > 10) plr->KnockBackPlayerWithAngle(6.05f, 55, 7); if (plr->GetTeam() == HORDE && plr->GetDistance2d(1369, 817) <= 50 && plr->GetPositionZ() > 10) plr->KnockBackPlayerWithAngle(3.03f, 55, 7); } } KnockbackCheck = false; }else m_uiKnockback -= diff; // just for sure if knockback wont work from any reason teleport down if(m_uiTeleport < diff && TeleportCheck) { //dalaran sewers = 617; for(BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { Player * plr = sObjectMgr.GetPlayer(itr->first); if (plr) { if (plr->GetTeam() == ALLIANCE && plr->GetDistance2d(1214, 765) <= 50 && plr->GetPositionZ() > 10) plr->TeleportTo(617, 1257+urand(0,2), 761+urand(0,2), 3.2f, 0.5f); if (plr->GetTeam() == HORDE && plr->GetDistance2d(1369, 817) <= 50 && plr->GetPositionZ() > 10) plr->TeleportTo(617, 1328+urand(0,2), 815+urand(0,2), 3.2f, 3.5f); } } TeleportCheck = false; // close the gate OpenDoorEvent(BG_EVENT_DOOR); }else m_uiTeleport -= diff; if (m_uiFall < diff) { for(BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { Player * plr = sObjectMgr.GetPlayer(itr->first); if (plr) { if (plr->GetPositionZ() < 0.5) plr->TeleportTo(617, plr->GetPositionX(), plr->GetPositionY(), plr->GetPositionZ() + 8, plr->GetOrientation()); } } }else m_uiFall -= diff; } }
void BattleGroundIC::StartingEventOpenDoors() { OpenDoorEvent(BG_EVENT_DOOR); // used for activating teleport effects + opening tower gates for (int i = BG_IC_GO_T_ALLIANCE_WEST; i <= BG_IC_GO_T_HORDE_FRONT; ++i) DoorOpen(m_BgObjects[i]); // make teleporters clickable MakeInteractive(IC_EVENT_ADD_TELEPORT, 0, true); }
void BattleGroundAV::StartingEventOpenDoors() { UpdateWorldState(BG_AV_SHOW_H_SCORE, WORLD_STATE_ADD); UpdateWorldState(BG_AV_SHOW_A_SCORE, WORLD_STATE_ADD); OpenDoorEvent(BG_EVENT_DOOR); // Players that join battleground after start are not available to get achievement. StartTimedAchievement(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, BG_AV_EVENT_START_BATTLE); }
void BattleGroundWS::StartingEventOpenDoors() { OpenDoorEvent(BG_EVENT_DOOR); // TODO implement timer to despawn doors after a short while SpawnEvent(WS_EVENT_SPIRITGUIDES_SPAWN, 0, true); SpawnEvent(WS_EVENT_FLAG_A, 0, true); SpawnEvent(WS_EVENT_FLAG_H, 0, true); }
void BattleGroundAB::StartingEventOpenDoors() { for (uint8 i = 0; i < BG_AB_NODES_MAX; ++i) { // randomly select buff to spawn uint8 buff = urand(0, 2); SpawnBGObject(m_BgObjects[BG_AB_OBJECT_SPEEDBUFF_STABLES + buff + i * 3], RESPAWN_IMMEDIATELY); } OpenDoorEvent(BG_EVENT_DOOR); }
void BattleGroundSA::UpdatePhase() { ResetWorldStates(); if (Phase == SA_ROUND_TWO) { SpawnEvent(SA_EVENT_ADD_VECH_E, 0, false); SpawnEvent(SA_EVENT_ADD_VECH_W, 0, false); SpawnEvent(SA_EVENT_ADD_BOMB, 0, false); SpawnEvent(SA_EVENT_ADD_BOMB, 1, false); SpawnEvent(SA_EVENT_ADD_NPC, 0, false); OpenDoorEvent(SA_EVENT_OP_DOOR, 0); SpawnEvent(SA_EVENT_ADD_BOMB, 0, true); } _GydOccupied(3,GetDefender()); if(Phase == SA_ROUND_ONE) { SpawnEvent(SA_EVENT_ADD_SPIR, BG_SA_GARVE_STATUS_HORDE_OCCUPIED, false); SpawnEvent(SA_EVENT_ADD_SPIR, BG_SA_GARVE_STATUS_ALLY_OCCUPIED, true); m_ActiveEvents[5] = GetDefender() == ALLIANCE ? BG_SA_GARVE_STATUS_ALLY_OCCUPIED : BG_SA_GARVE_STATUS_HORDE_OCCUPIED; for (uint8 i = 0; i < BG_SA_GRY_MAX; ++i) { for (uint8 z = 1; z < 5; ++z) SpawnEvent(i, z, false); m_prevGyd[i] = 0; m_GydTimers[i] = 0; m_BannerTimers[i].timer = 0; SpawnEvent(i, 3, true); m_Gyd[i] = GetDefender() == ALLIANCE ? BG_SA_GARVE_STATUS_ALLY_OCCUPIED : BG_SA_GARVE_STATUS_HORDE_OCCUPIED; m_ActiveEvents[i] = GetDefender() == ALLIANCE ? BG_SA_GARVE_STATUS_ALLY_OCCUPIED : BG_SA_GARVE_STATUS_HORDE_OCCUPIED; _GydOccupied(i,GetDefender()); } SpawnEvent(SA_EVENT_ADD_BOMB, 1, true); //SpawnEvent(SA_EVENT_ADD_NPC, 0, true); } // We already do it at ResetWorldStates /*for (uint32 z = 0; z <= BG_SA_GATE_MAX; ++z) UpdateWorldState(BG_SA_GateStatus[z], GateStatus[z]);*/ if (Phase == SA_ROUND_TWO) { Round_timer = 0; SetStatus(STATUS_WAIT_JOIN); SendMessageToAll(LANG_BG_SA_START_TWO_MINUTE, CHAT_MSG_BG_SYSTEM_NEUTRAL, NULL); } SpawnEvent(SA_EVENT_ADD_GO, 0, false); SpawnEvent(SA_EVENT_ADD_GO, 0, true); }
void BattleGroundWS::StartingEventOpenDoors() { OpenDoorEvent(BG_EVENT_DOOR); // TODO implement timer to despawn doors after a short while SpawnEvent(WS_EVENT_SPIRITGUIDES_SPAWN, 0, true); SpawnEvent(WS_EVENT_FLAG_A, 0, true); SpawnEvent(WS_EVENT_FLAG_H, 0, true); // Players that join battleground after start are not eligible to get achievement. StartTimedAchievement(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, BG_WS_EVENT_START_BATTLE); }
void BattleGroundAB::StartingEventOpenDoors() { for (int i = 0; i < BG_AB_NODES_MAX; ++i) { //randomly select buff to spawn uint8 buff = urand(0, 2); SpawnBGObject(m_BgObjects[BG_AB_OBJECT_SPEEDBUFF_STABLES + buff + i * 3], RESPAWN_IMMEDIATELY); } OpenDoorEvent(BG_EVENT_DOOR); // Players that join battleground after start are not eligible to get achievement. StartTimedAchievement(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, BG_AB_EVENT_START_BATTLE); }
void BattleGroundIC::EventPlayerDamageGO(Player *player, GameObject* target_obj, uint32 eventId, uint32 doneBy) { TeamIndex teamIndex = GetTeamIndex(player->GetTeam()); // Seaforium Charge Explosion (A-bomb-inable) if (doneBy == 66676) player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, 68366); // Huge Seaforium Charge Explosion (A-bomb-ination) if (doneBy == 66672) player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, 68367); uint32 type = 0; switch (target_obj->GetEntry()) { case BG_IC_GO_ALLIANCE_GATE_1: { type = BG_IC_GO_T_ALLIANCE_GATE_1; if (eventId == 22082) { SendMessage2ToAll(LANG_BG_IC_A_WEST_GATE_DESTROYED, CHAT_MSG_BG_SYSTEM_ALLIANCE, player, doneBy); UpdateWorldState(BG_IC_GateStatus[type][0], 0); // needed for removing the old icon UpdateWorldState(BG_IC_GateStatus[type][1], 1); GateStatus[type] = BG_IC_GO_GATES_DAMAGE; // correct icon is at "damage" state (not flag), not "destroy" RewardHonorToTeam(85, (teamIndex == 0) ? ALLIANCE:HORDE); SpawnEvent(IC_EVENT_ADD_A_BOSS, 0, true); SpawnEvent(IC_EVENT_ADD_A_GUARDS, 0, true); // prevent closing of the boss gates by destroying another wall gate if (aOpen == false) { OpenDoorEvent(IC_EVENT_BOSS_A); aOpen = true; } } break; } case BG_IC_GO_ALLIANCE_GATE_2: { type = BG_IC_GO_T_ALLIANCE_GATE_2; if (eventId == 22078) { SendMessage2ToAll(LANG_BG_IC_A_EAST_GATE_DESTROYED, CHAT_MSG_BG_SYSTEM_ALLIANCE, player, doneBy); UpdateWorldState(BG_IC_GateStatus[type][0], 0); UpdateWorldState(BG_IC_GateStatus[type][1], 1); GateStatus[type] = BG_IC_GO_GATES_DAMAGE; RewardHonorToTeam(85, (teamIndex == 0) ? ALLIANCE:HORDE); SpawnEvent(IC_EVENT_ADD_A_BOSS, 0, true); SpawnEvent(IC_EVENT_ADD_A_GUARDS, 0, true); if (aOpen == false) { OpenDoorEvent(IC_EVENT_BOSS_A); aOpen = true; } } break; } case BG_IC_GO_ALLIANCE_GATE_3: { type = BG_IC_GO_T_ALLIANCE_GATE_3; if (eventId == 22080) { SendMessage2ToAll(LANG_BG_IC_A_FRONT_GATE_DESTROYED, CHAT_MSG_BG_SYSTEM_ALLIANCE, player, doneBy); UpdateWorldState(BG_IC_GateStatus[type][0], 0); UpdateWorldState(BG_IC_GateStatus[type][1], 1); GateStatus[type] = BG_IC_GO_GATES_DAMAGE; RewardHonorToTeam(85, (teamIndex == 0) ? ALLIANCE:HORDE); SpawnEvent(IC_EVENT_ADD_A_BOSS, 0, true); SpawnEvent(IC_EVENT_ADD_A_GUARDS, 0, true); if (aOpen == false) { OpenDoorEvent(IC_EVENT_BOSS_A); aOpen = true; } } break; } case BG_IC_GO_HORDE_GATE_1: { type = BG_IC_GO_T_HORDE_GATE_1; if (eventId == 22081) { SendMessage2ToAll(LANG_BG_IC_H_WEST_GATE_DESTROYED, CHAT_MSG_BG_SYSTEM_HORDE, player, doneBy); UpdateWorldState(BG_IC_GateStatus[type][0], 0); UpdateWorldState(BG_IC_GateStatus[type][1], 1); GateStatus[type] = BG_IC_GO_GATES_DAMAGE; RewardHonorToTeam(85, (teamIndex == 0) ? ALLIANCE:HORDE); SpawnEvent(IC_EVENT_ADD_H_BOSS, 0, true); SpawnEvent(IC_EVENT_ADD_H_GUARDS, 0, true); if (hOpen == false) { OpenDoorEvent(IC_EVENT_BOSS_H); hOpen = true; } } break; } case BG_IC_GO_HORDE_GATE_2: { type = BG_IC_GO_T_HORDE_GATE_2; if (eventId == 22083) { SendMessage2ToAll(LANG_BG_IC_H_EAST_GATE_DESTROYED, CHAT_MSG_BG_SYSTEM_HORDE, player, doneBy); UpdateWorldState(BG_IC_GateStatus[type][0], 0); UpdateWorldState(BG_IC_GateStatus[type][1], 1); GateStatus[type] = BG_IC_GO_GATES_DAMAGE; RewardHonorToTeam(85, (teamIndex == 0) ? ALLIANCE:HORDE); SpawnEvent(IC_EVENT_ADD_H_BOSS, 0, true); SpawnEvent(IC_EVENT_ADD_H_GUARDS, 0, true); if (hOpen == false) { OpenDoorEvent(IC_EVENT_BOSS_H); hOpen = true; } } break; } case BG_IC_GO_HORDE_GATE_3: { type = BG_IC_GO_T_HORDE_GATE_3; if (eventId == 22079) { SendMessage2ToAll(LANG_BG_IC_H_FRONT_GATE_DESTROYED, CHAT_MSG_BG_SYSTEM_HORDE, player, doneBy); UpdateWorldState(BG_IC_GateStatus[type][0], 0); UpdateWorldState(BG_IC_GateStatus[type][1], 1); GateStatus[type] = BG_IC_GO_GATES_DAMAGE; RewardHonorToTeam(85, (teamIndex == 0) ? ALLIANCE:HORDE); SpawnEvent(IC_EVENT_ADD_H_BOSS, 0, true); SpawnEvent(IC_EVENT_ADD_H_GUARDS, 0, true); if (hOpen == false) { OpenDoorEvent(IC_EVENT_BOSS_H); hOpen = true; } } break; } } }
void BattleGroundRL::StartingEventOpenDoors() { OpenDoorEvent(BG_EVENT_DOOR); }
void BattleGroundWS::Update(uint32 diff) { BattleGround::Update(diff); // after bg start we get there (once) if (GetStatus() == STATUS_WAIT_JOIN && GetPlayersSize()) { ModifyStartDelayTime(diff); if (!(m_Events & 0x01)) { m_Events |= 0x01; // setup here, only when at least one player has ported to the map if (!SetupBattleGround()) { EndNow(); return; } SetStartDelayTime(START_DELAY0); } // After 1 minute, warning is signalled else if (GetStartDelayTime() <= START_DELAY1 && !(m_Events & 0x04)) { m_Events |= 0x04; SendMessageToAll(GetMangosString(LANG_BG_WS_ONE_MINUTE)); } // After 1,5 minute, warning is signalled else if (GetStartDelayTime() <= START_DELAY2 && !(m_Events & 0x08)) { m_Events |= 0x08; SendMessageToAll(GetMangosString(LANG_BG_WS_HALF_MINUTE)); } // After 2 minutes, gates OPEN ! x) else if (GetStartDelayTime() < 0 && !(m_Events & 0x10)) { m_Events |= 0x10; // TODO implement timer to despawn doors after a short while OpenDoorEvent(BG_EVENT_DOOR); SpawnEvent(WS_EVENT_SPIRITGUIDES_SPAWN, 0, true); SpawnEvent(WS_EVENT_FLAG_A, 0, true); SpawnEvent(WS_EVENT_FLAG_H, 0, true); SendMessageToAll(GetMangosString(LANG_BG_WS_BEGIN)); PlaySoundToAll(SOUND_BG_START); SetStatus(STATUS_IN_PROGRESS); } } else if (GetStatus() == STATUS_IN_PROGRESS) { if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_WAIT_RESPAWN) { m_FlagsTimer[BG_TEAM_ALLIANCE] -= diff; if (m_FlagsTimer[BG_TEAM_ALLIANCE] < 0) { m_FlagsTimer[BG_TEAM_ALLIANCE] = 0; RespawnFlag(ALLIANCE, true); } } if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_ON_GROUND) { m_FlagsDropTimer[BG_TEAM_ALLIANCE] -= diff; if (m_FlagsDropTimer[BG_TEAM_ALLIANCE] < 0) { m_FlagsDropTimer[BG_TEAM_ALLIANCE] = 0; RespawnFlagAfterDrop(ALLIANCE); } } if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_WAIT_RESPAWN) { m_FlagsTimer[BG_TEAM_HORDE] -= diff; if (m_FlagsTimer[BG_TEAM_HORDE] < 0) { m_FlagsTimer[BG_TEAM_HORDE] = 0; RespawnFlag(HORDE, true); } } if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_ON_GROUND) { m_FlagsDropTimer[BG_TEAM_HORDE] -= diff; if (m_FlagsDropTimer[BG_TEAM_HORDE] < 0) { m_FlagsDropTimer[BG_TEAM_HORDE] = 0; RespawnFlagAfterDrop(HORDE); } } } }
void BattleGroundSA::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() == STATUS_WAIT_JOIN && !shipsStarted) if (Phase == SA_ROUND_ONE) // Round one not started yet if (shipsTimer <= diff) StartShips(); else shipsTimer -= diff; if (GetStatus() == STATUS_IN_PROGRESS) // Battleground already in progress { if (Round_timer >= BG_SA_ROUNDLENGTH) { if(Phase == SA_ROUND_ONE) // Timeout of second round { PlaySoundToAll(BG_SA_SOUND_GYD_VICTORY); SendMessageToAll(defender == ALLIANCE ? LANG_BG_SA_ALLIANCE_TIMEOUT_END_1ROUND : LANG_BG_SA_HORDE_TIMEOUT_END_1ROUND, CHAT_MSG_BG_SYSTEM_NEUTRAL, NULL); RoundScores[0].winner = GetDefender(); RoundScores[0].time = Round_timer; ResetBattle(0, defender); } else // Timeout of second round { SendMessageToAll(defender == ALLIANCE ? LANG_BG_SA_ALLIANCE_TIMEOUT_END_2ROUND : LANG_BG_SA_HORDE_TIMEOUT_END_2ROUND, CHAT_MSG_BG_SYSTEM_NEUTRAL, NULL); RoundScores[1].winner = GetDefender(); RoundScores[1].time = Round_timer; EndBattleGround(TEAM_NONE); return; } } else Round_timer += diff; for (int gyd = 0; gyd < BG_SA_GRY_MAX; ++gyd) { // 3 sec delay to spawn new banner instead previous despawned one if (m_BannerTimers[gyd].timer) { if (m_BannerTimers[gyd].timer > diff) m_BannerTimers[gyd].timer -= diff; else { m_BannerTimers[gyd].timer = 0; _CreateBanner(gyd, m_BannerTimers[gyd].type, m_BannerTimers[gyd].teamIndex, false); } } // 1-minute to occupy a node from contested state if (m_GydTimers[gyd]) { if (m_GydTimers[gyd] > diff) m_GydTimers[gyd] -= diff; else { m_GydTimers[gyd] = 0; // Change from contested to occupied ! uint8 teamIndex = m_Gyd[gyd]-1; m_prevGyd[gyd] = m_Gyd[gyd]; m_Gyd[gyd] += 2; // create new occupied banner _CreateBanner(gyd, BG_SA_GARVE_TYPE_OCCUPIED, teamIndex, true); //_SendNodeUpdate(node); _GydOccupied(gyd,(teamIndex == 0) ? ALLIANCE:HORDE); // Message to chatlog RewardHonorToTeam(85, (teamIndex == 0) ? ALLIANCE:HORDE); RewardXpToTeam(0, 0.6f, (teamIndex == 0) ? ALLIANCE:HORDE); RewardReputationToTeam((teamIndex == 0) ? 1050:1085, 65, (teamIndex == 0) ? ALLIANCE:HORDE); switch(gyd) { case 0: SpawnEvent(SA_EVENT_ADD_VECH_W, 0, true);break; case 1: SpawnEvent(SA_EVENT_ADD_VECH_E, 0, true);break; } if (teamIndex == 0) { // SendMessage2ToAll(LANG_BG_SA_AH_SEIZES_GRAVEYARD,CHAT_MSG_BG_SYSTEM_ALLIANCE,NULL,LANG_BG_ALLY,_GydName(gyd)); PlaySoundToAll(BG_SA_SOUND_GYD_CAPTURED_ALLIANCE); SendWarningToAllSA(gyd, STATUS_CONQUESTED, ALLIANCE); } else { // SendMessage2ToAll(LANG_BG_SA_AH_SEIZES_GRAVEYARD,CHAT_MSG_BG_SYSTEM_HORDE,NULL,LANG_BG_HORDE,_GydName(gyd)); PlaySoundToAll(BG_SA_SOUND_GYD_CAPTURED_HORDE); SendWarningToAllSA(gyd, STATUS_CONQUESTED, HORDE); } } } } UpdateTimer(); } if (GetStatus() == STATUS_WAIT_JOIN && Phase == SA_ROUND_TWO) // Round two, not yet started { if (!shipsStarted) if (shipsTimer <= diff) { SendMessageToAll(LANG_BG_SA_START_ONE_MINUTE, CHAT_MSG_BG_SYSTEM_NEUTRAL, NULL); StartShips(); } else shipsTimer -= diff; if (TimeST2Round < diff) { Phase = 2; OpenDoorEvent(SA_EVENT_OP_DOOR, 0); SpawnEvent(SA_EVENT_ADD_NPC, 0, true); ToggleTimer(); SetStatus(STATUS_IN_PROGRESS); // Start round two PlaySoundToAll(SOUND_BG_START); SendMessageToAll(LANG_BG_SA_HAS_BEGUN, CHAT_MSG_BG_SYSTEM_NEUTRAL, NULL); SendWarningToAll(LANG_BG_SA_HAS_BEGUN); } else TimeST2Round -= diff; } }
void BattleGroundDS::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() == STATUS_IN_PROGRESS) { // push people from the tubes if(pushbackCheck) if(m_uiKnockback < diff) { for(BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { if(Player *plr = sObjectMgr.GetPlayer(itr->first)) { if(plr->GetPositionZ() < 11.0f) continue; float angle = (plr->GetBGTeam() == ALLIANCE /* gold */) ? plr->GetAngle(1259.58f, 764.43f) : plr->GetAngle(1325.84f, 817.304f); WorldPacket data(SMSG_MOVE_KNOCK_BACK, 8+4+4+4+4+4); data.append(plr->GetPackGUID()); data << uint32(0); // Sequence data << float(cos(angle)); // x direction data << float(sin(angle)); // y direction data << float(55); // Horizontal speed data << float(-7); // Z Movement speed (vertical) plr->GetSession()->SendPacket(&data); } } pushbackCheck = false; } else m_uiKnockback -= diff; // in case pushback failed if(teleportCheck) if(m_uiTeleport < diff) { for(BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { if(Player *plr = sObjectMgr.GetPlayer(itr->first)) { if(plr->GetPositionZ() < 11.0f) continue; float x, y; if (plr->GetBGTeam() == ALLIANCE) { x = 1259.58f; y = 764.43f; } else { x = 1325.84f; y = 817.304f; } plr->TeleportTo(GetMapId(), x + urand(0,2), y + urand(0,2), 3.15f, plr->GetOrientation()); } } teleportCheck = false; // close the gate OpenDoorEvent(BG_EVENT_DOOR); } else m_uiTeleport -= diff; } }
void BattleGroundAV::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() == STATUS_WAIT_JOIN && GetPlayersSize()) { ModifyStartDelayTime(diff); if (!(m_Events & 0x01)) { m_Events |= 0x01; if(!SetupBattleGround()) { EndNow(); return; } sLog.outDebug("Alterac Valley: entering state STATUS_WAIT_JOIN ..."); SetStartDelayTime(START_DELAY0); } // After 1 minute, warning is signalled else if (GetStartDelayTime() <= START_DELAY1 && !(m_Events & 0x04)) { m_Events |= 0x04; SendMessageToAll(GetMangosString(LANG_BG_AV_START_ONE_MINUTE)); } // After 1,5 minute, warning is signalled else if (GetStartDelayTime() <= START_DELAY2 && !(m_Events & 0x08)) { m_Events |= 0x08; SendMessageToAll(GetMangosString(LANG_BG_AV_START_HALF_MINUTE)); } // After 2 minutes, gates OPEN ! x) else if (GetStartDelayTime() <= 0 && !(m_Events & 0x10)) { UpdateWorldState(BG_AV_SHOW_H_SCORE, 1); UpdateWorldState(BG_AV_SHOW_A_SCORE, 1); m_Events |= 0x10; SendMessageToAll(GetMangosString(LANG_BG_AV_HAS_BEGUN)); PlaySoundToAll(SOUND_BG_START); SetStatus(STATUS_IN_PROGRESS); OpenDoorEvent(BG_EVENT_DOOR); for(BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) if(Player* plr = sObjectMgr.GetPlayer(itr->first)) plr->RemoveAurasDueToSpell(SPELL_PREPARATION); } } if (GetStatus() != STATUS_IN_PROGRESS) return; // add points from mine owning, and look if the neutral team can reclaim the mine for(uint8 mine = 0; mine < BG_AV_MAX_MINES; mine++) { if (m_Mine_Owner[mine] == BG_TEAM_ALLIANCE || m_Mine_Owner[mine] == BG_TEAM_HORDE) { m_Mine_Timer[mine] -=diff; if (m_Mine_Timer[mine] <= 0) { UpdateScore(BattleGroundTeamId(m_Mine_Owner[mine]), 1); m_Mine_Timer[mine] = BG_AV_MINE_TICK_TIMER; } if (m_Mine_Reclaim_Timer[mine] > diff) m_Mine_Reclaim_Timer[mine] -= diff; else ChangeMineOwner(mine, BG_AV_NEUTRAL_TEAM); } } // looks for all timers of the nodes and destroy the building (for graveyards the building wont get destroyed, it goes just to the other team for(BG_AV_Nodes i = BG_AV_NODES_FIRSTAID_STATION; i < BG_AV_NODES_MAX; ++i) { if (m_Nodes[i].State == POINT_ASSAULTED) { if (m_Nodes[i].Timer > diff) m_Nodes[i].Timer -= diff; else EventPlayerDestroyedPoint(i); } } }
void BattleGroundDS::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() == STATUS_IN_PROGRESS) { // push people from the tubes if (pushbackCheck) { // knockback if (m_uiKnockback < diff) { for (BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { Player *plr = sObjectMgr.GetPlayer(itr->first); if (!plr) continue; if (GameObject* obj = plr->GetGameObject(48018)) // Remove Demonic Circle obj->Delete(); if (plr->GetPositionZ() < 11.0f) continue; float angle = (plr->GetBGTeam() == ALLIANCE /*gold*/) ? plr->GetAngle(1259.58f, 764.43f) : plr->GetAngle(1325.84f, 817.304f); plr->KnockBackPlayerWithAngle(angle, 45, 7); if (plr->IsWithinDist2d(1214, 765, 50) && plr->IsWithinLOS(1214, 765, 14)) plr->KnockBackPlayerWithAngle(6.40f,55,7); if (plr->IsWithinDist2d(1369, 817, 50) && plr->IsWithinLOS(1369, 817, 14)) plr->KnockBackPlayerWithAngle(3.03f,55,7); } pushbackCheck = false; m_uiKnockback = 1000; } else m_uiKnockback -= diff; } // in case pushback failed if (teleportCheck) { if (m_uiTeleport < diff) { for (BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { if (Player *plr = sObjectMgr.GetPlayer(itr->first)) { if (plr->GetPositionZ() < 11.0f) continue; float x, y; if (plr->GetBGTeam() == ALLIANCE) { x = 1259.58f; y = 764.43f; } else { x = 1325.84f; y = 817.304f; } plr->TeleportTo(GetMapId(), x + urand(0,2), y + urand(0,2), 3.15f, plr->GetOrientation()); } } teleportCheck = false; // close the gate OpenDoorEvent(BG_EVENT_DOOR); } else m_uiTeleport -= diff; } // Waterfall if (m_uiWaterfall < diff) { if (waterfallActivated) { SpawnEvent(WATERFALL_EVENT, 0, false); waterfallActivated = false; } else { SpawnEvent(WATERFALL_EVENT, 0, true); waterfallActivated = true; for (BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { Player * plr = sObjectMgr.GetPlayer(itr->first); if (plr && plr->GetDistance2d(1291, 790) <= 6) plr->KnockBackFrom(plr, -20.0f, 9.0f); } } m_uiWaterfall = urand(30,45)*IN_MILLISECONDS; } else m_uiWaterfall -= diff; } }
void BattleGroundRV::StartingEventOpenDoors() { OpenDoorEvent(BG_EVENT_DOOR); m_uiPillarTimer = 45000; }