bool BattlegroundNA::PreUpdateImpl(uint32 diff) { if (doordelete) { if (doordelete <= diff) { for (uint32 i = BG_NA_OBJECT_DOOR_1; i <= BG_NA_OBJECT_DOOR_2; ++i) DelObject(i); doordelete = 0; } else doordelete -= diff; } return true; }
void OPvPCapturePointEP_NPT::SummonGO(uint32 team) { if (m_SummonedGOSide != team) { m_SummonedGOSide = team; DelObject(EP_NPT_BUFF); AddObject(EP_NPT_BUFF, EP_NPT_LordaeronShrine.entry, EP_NPT_LordaeronShrine.map, EP_NPT_LordaeronShrine.pos, EP_NPT_LordaeronShrine.rot); Map* map = sMapMgr->FindMap(0, 0); auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_NPT_BUFF]); for (auto itr = bounds.first; itr != bounds.second; ++itr) if (GameObject* go = itr->second) go->SetFaction(team == ALLIANCE ? FACTION_ALLIANCE_GENERIC : FACTION_HORDE_GENERIC); } }
void BattleGroundNA::Update(time_t diff) { BattleGround::Update(diff); if (GetStatus() == STATUS_IN_PROGRESS) { m_TimeElapsedSinceBeggining += diff; if (m_TimeElapsedSinceBeggining >= BG_NA_DOOR_DESPAWN_TIMER && !m_doorDespawned) { m_doorDespawned = true; for (uint32 i = BG_NA_OBJECT_DOOR_1; i <= BG_NA_OBJECT_DOOR_2; i++) DelObject(i); } } }
void BattlegroundIC::_NodeDeOccupied(uint8 node) { if(!m_BgCreatures[node] || !GetBGCreature(node)) return; std::vector<uint64> ghost_list = m_ReviveQueue[m_BgCreatures[node]]; if (!ghost_list.empty()) { WorldSafeLocsEntry const *ClosestGrave = NULL; for (std::vector<uint64>::const_iterator itr = ghost_list.begin(); itr != ghost_list.end(); ++itr) { Player* plr = sObjectMgr.GetPlayer(*itr); if (!plr) continue; if (!ClosestGrave) // cache ClosestGrave = GetClosestGraveYard(plr); if (ClosestGrave) plr->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, plr->GetOrientation()); } } //Remove spiritguide DelCreature(node); switch(node) { case BG_IC_NODE_WORKSHOP: DeSpawnNpcType(IC_TYPE_DEMOLISSER_H); DeSpawnNpcType(IC_TYPE_SIEGE_H); DeSpawnNpcType(IC_TYPE_DEMOLISSER_A); DeSpawnNpcType(IC_TYPE_SIEGE_A); break ; case BG_IC_NODE_DOCK: //pop de catapulte et lanceur de glaive DeSpawnNpcType(IC_TYPE_DOCKVEHICLE_A); DeSpawnNpcType(IC_TYPE_DOCKVEHICLE_H); break ; case BG_IC_NODE_HANGAR: for (int i = 0 ; i < MAX_BG_IC_OBJ; ++i) { if(BG_IC_OBJ[i].type == IC_TYPE_GUNSHIPTELEPORTER) DelObject(BG_IC_OBJ[i].id); } break ; } }
void OPvPCapturePointEP_NPT::SummonGO(uint32 team) { if (m_SummonedGOSide != team) { m_SummonedGOSide = team; DelObject(EP_NPT_BUFF); AddObject(EP_NPT_BUFF, EP_NPT_LordaeronShrine.entry, EP_NPT_LordaeronShrine.map, EP_NPT_LordaeronShrine.x, EP_NPT_LordaeronShrine.y, EP_NPT_LordaeronShrine.z, EP_NPT_LordaeronShrine.o, EP_NPT_LordaeronShrine.rot0, EP_NPT_LordaeronShrine.rot1, EP_NPT_LordaeronShrine.rot2, EP_NPT_LordaeronShrine.rot3); GameObject * go = HashMapHolder<GameObject>::Find( m_Objects[EP_NPT_BUFF]); if (go) go->SetUInt32Value(GAMEOBJECT_FACTION, (team == ALLIANCE ? 84 : 83)); } }
void BattlegroundSA::DestroyGate(Player* player, GameObject* go) { uint32 i = getGateIdFromDamagedOrDestroyEventId(go->GetGOInfo()->building.destroyedEvent); if (!GateStatus[i]) return; if (GameObject* g = GetBGObject(i)) { if (g->GetGOValue()->Building.Health == 0) { GateStatus[i] = BG_SA_GATE_DESTROYED; uint32 uws = getWorldStateFromGateId(i); if (uws) UpdateWorldState(uws, GateStatus[i]); bool rewardHonor = true; gateDestroyed = true; switch (i) { case BG_SA_GREEN_GATE: if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_BLUE_GATE: if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_RED_GATE: if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_PURPLE_GATE: if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; default: break; } if (i < 5) DelObject(i + 14); UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1); if (rewardHonor) UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1)); } } }
void BattleGroundSA::DestroyGate(uint32 i, Player* pl) { if (!GateStatus[i]) return; if (GameObject* g = GetBGObject(i)) { if (g->GetGOValue()->building.health == 0) { GateStatus[i] = BG_SA_GATE_DESTROYED; uint32 uws = 0; switch(i) { case 0: uws = BG_SA_GREEN_GATEWS; break; case 1: uws = BG_SA_YELLOW_GATEWS; break; case 2: uws = BG_SA_BLUE_GATEWS; break; case 3: uws = BG_SA_RED_GATEWS; break; case 4: uws = BG_SA_PURPLE_GATEWS; break; case 5: uws = BG_SA_ANCIENT_GATEWS; break; default: ASSERT(false); break; } if (i < 5) DelObject(i+9); UpdateWorldState(uws, GateStatus[i]); UpdatePlayerScore(pl,SCORE_DESTROYED_WALL, 1); } } }
void BattlegroundSA::DestroyGate(Player* pl, GameObject* /*go*/, uint32 destroyedEvent) { uint32 i = GetGateIDFromDestroyEventID(destroyedEvent); if (!GateStatus[i]) return; if (GameObject* g = GetBGObject(i)) { if (g->GetGOValue()->building.health == 0) { GateStatus[i] = BG_SA_GATE_DESTROYED; uint32 uws = GetWorldStateFromGateID(i); if (uws) UpdateWorldState(uws, GateStatus[i]); bool rewardHonor = true; switch(i) { case BG_SA_GREEN_GATE: if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_BLUE_GATE: if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_RED_GATE: if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_PURPLE_GATE: if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; } if (i < 5) DelObject(i+9); UpdatePlayerScore(pl,SCORE_DESTROYED_WALL, 1); if (rewardHonor) UpdatePlayerScore(pl,SCORE_BONUS_HONOR,(GetBonusHonorFromKill(1))); } } }
void WeakHandleable::removeHandle() { bool bDeleteSelf = false; { SyncHandle; m_iNumHandles--; if (m_iNumHandles == 0) { notifyDeleted(); if (m_iNumHandles == 0) bDeleteSelf = true; } } if (bDeleteSelf) DelObject(this); }
LRESULT OnLButtonDblclk(HWND hWnd,WPARAM wParam,LPARAM lParam) { int TempSel; TCHAR *pText; TempSel=FindObject(LOWORD(lParam),HIWORD(lParam)); if (TempSel == -1) { return 0; } if (arObj[TempSel]->Type == DT_TEXT) { pText=arObj[TempSel]->Text; if (DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_TEXT),hWnd, TextDlgProc,(LPARAM)&pText) == IDOK) { if (lstrlen(pText) == 0) { DelObject(TempSel); } else { arObj[arNum-1]->Text=pText; arObj[arNum-1]->Len=lstrlen(pText)+1; } InvalidateRect(hWndMain,NULL,TRUE); } } return 0; }
void OPvPCapturePointEP_NPT::ChangeState() { // if changing from controlling alliance to horde or vice versa if (m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State) { sWorld->SendZoneText( EP_GraveYardZone, sObjectMgr->GetArkCoreStringForDBCLocale( LANG_OPVP_EP_LOOSE_NPT_A)); ((OutdoorPvPEP*) m_PvP)->EP_Controls[EP_NPT] = 0; } else if (m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State) { sWorld->SendZoneText( EP_GraveYardZone, sObjectMgr->GetArkCoreStringForDBCLocale( LANG_OPVP_EP_LOOSE_NPT_H)); ((OutdoorPvPEP*) m_PvP)->EP_Controls[EP_NPT] = 0; } uint32 artkit = 21; switch (m_State) { case OBJECTIVESTATE_ALLIANCE: m_TowerState = EP_TS_A; artkit = 2; SummonGO(ALLIANCE); ((OutdoorPvPEP*) m_PvP)->EP_Controls[EP_NPT] = ALLIANCE; if (m_OldState != m_State) sWorld->SendZoneText( EP_GraveYardZone, sObjectMgr->GetArkCoreStringForDBCLocale( LANG_OPVP_EP_CAPTURE_NPT_A)); break; case OBJECTIVESTATE_HORDE: m_TowerState = EP_TS_H; artkit = 1; SummonGO(HORDE); ((OutdoorPvPEP*) m_PvP)->EP_Controls[EP_NPT] = HORDE; if (m_OldState != m_State) sWorld->SendZoneText( EP_GraveYardZone, sObjectMgr->GetArkCoreStringForDBCLocale( LANG_OPVP_EP_CAPTURE_NPT_H)); break; case OBJECTIVESTATE_NEUTRAL: m_TowerState = EP_TS_N; m_SummonedGOSide = 0; DelObject(EP_NPT_BUFF); break; case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE: m_TowerState = EP_TS_N_A; break; case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE: m_TowerState = EP_TS_N_A; m_SummonedGOSide = 0; DelObject(EP_NPT_BUFF); break; case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE: m_TowerState = EP_TS_N_H; break; case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE: m_TowerState = EP_TS_N_H; m_SummonedGOSide = 0; DelObject(EP_NPT_BUFF); break; } GameObject* flag = HashMapHolder<GameObject>::Find(m_capturePointGUID); GameObject* flag2 = HashMapHolder<GameObject>::Find( m_Objects[EP_NPT_FLAGS]); if (flag) { flag->SetGoArtKit(artkit); } if (flag2) { flag2->SetGoArtKit(artkit); } UpdateTowerState(); // complete quest objective if (m_TowerState == EP_TS_A || m_TowerState == EP_TS_H) SendObjectiveComplete(EP_NPT_CM, 0); }
bool BattlegroundSA::ResetObjs() { /*for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(itr->first)) SendTransportsRemove(player);*/ uint32 atF = BG_SA_Factions[Attackers]; uint32 defF = BG_SA_Factions[Attackers ? TEAM_ALLIANCE : TEAM_HORDE]; for (uint8 i = 0; i < BG_SA_MAXOBJ; i++) DelObject(i); for (uint8 i = 0; i < BG_SA_MAXNPC; i++) DelCreature(i); for (uint8 i = BG_SA_MAXNPC; i < BG_SA_MAXNPC + BG_SA_MAX_GY; i++) DelCreature(i); for (uint8 i = 0; i < 6; i++) GateStatus[i] = BG_SA_GATE_OK; for (uint8 i = 0; i <= BG_SA_PORTAL_DEFFENDER_RED; i++) { if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY)) return false; } /*for (uint8 i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++) { uint32 boatid = 0; switch (i) { case BG_SA_BOAT_ONE: boatid = Attackers ? BG_SA_BOAT_ONE_H : BG_SA_BOAT_ONE_A; break; case BG_SA_BOAT_TWO: boatid = Attackers ? BG_SA_BOAT_TWO_H : BG_SA_BOAT_TWO_A; break; default: break; } if (!AddObject(i, boatid, BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2]+(Attackers ? -3.750f: 0), BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY)) return false; }*/ for (uint8 i = BG_SA_SIGIL_1; i <= BG_SA_LEFT_FLAGPOLE; i++) { if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY)) return false; } // MAD props for Kiper for discovering those values - 4 hours of his work. //GetBGObject(BG_SA_BOAT_ONE)->UpdateRotationFields(1.0f, 0.0002f); //GetBGObject(BG_SA_BOAT_TWO)->UpdateRotationFields(1.0f, 0.00001f); //SpawnBGObject(BG_SA_BOAT_ONE, RESPAWN_IMMEDIATELY); //SpawnBGObject(BG_SA_BOAT_TWO, RESPAWN_IMMEDIATELY); //Cannons and demolishers - NPCs are spawned //By capturing GYs. for (uint8 i = 0; i < BG_SA_DEMOLISHER_5; i++) { if (!AddCreature(BG_SA_NpcEntries[i], i, (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE), BG_SA_NpcSpawnlocs[i][0], BG_SA_NpcSpawnlocs[i][1], BG_SA_NpcSpawnlocs[i][2], BG_SA_NpcSpawnlocs[i][3], 600)) return false; } OverrideGunFaction(); DemolisherStartState(true); for (uint8 i = 0; i <= BG_SA_PORTAL_DEFFENDER_RED; i++) { SpawnBGObject(i, RESPAWN_IMMEDIATELY); GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FIELD_FACTION_TEMPLATE, defF); } GetBGObject(BG_SA_TITAN_RELIC)->SetUInt32Value(GAMEOBJECT_FIELD_FACTION_TEMPLATE, atF); GetBGObject(BG_SA_TITAN_RELIC)->Refresh(); for (uint8 i = 0; i <= 5; i++) GateStatus[i] = BG_SA_GATE_OK; TotalTime = 0; ShipsStarted = false; gateDestroyed = false; //Graveyards for (uint8 i = 0; i < BG_SA_MAX_GY; i++) { WorldSafeLocsEntry const* sg = NULL; sg = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]); if (!sg) return false; if (i == BG_SA_BEACH_GY) { GraveyardStatus[i] = Attackers; AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], ((Attackers == TEAM_HORDE)? HORDE : ALLIANCE)); } else { GraveyardStatus[i] = ((Attackers == TEAM_HORDE)? TEAM_ALLIANCE : TEAM_HORDE); AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], ((Attackers == TEAM_HORDE)? ALLIANCE : HORDE)); } } //GY capture points for (uint8 i = BG_SA_CENTRAL_FLAG; i <= BG_SA_LEFT_FLAG; i++) { AddObject(i, (BG_SA_ObjEntries[i] - (Attackers == TEAM_ALLIANCE ? 1 : 0)), BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY); GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FIELD_FACTION_TEMPLATE, atF); } for (uint8 i = BG_SA_BOMB; i < BG_SA_MAXOBJ; i++) { AddObject(i, BG_SA_ObjEntries[BG_SA_BOMB], BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY); GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FIELD_FACTION_TEMPLATE, atF); if (i > 46) GetBGObject(i)->SetFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_NOT_SELECTABLE); } //Player may enter BEFORE we set up BG - lets update his worldstates anyway... UpdateWorldState(BG_SA_RIGHT_GY_HORDE, GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); UpdateWorldState(BG_SA_LEFT_GY_HORDE, GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); UpdateWorldState(BG_SA_CENTER_GY_HORDE, GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE, GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE, GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE, GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); if (Attackers == TEAM_ALLIANCE) { UpdateWorldState(BG_SA_ALLY_ATTACKS, 1); UpdateWorldState(BG_SA_HORDE_ATTACKS, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_ALL, 1); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_ALL, 1); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_HRD, 0); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_HRD, 0); UpdateWorldState(BG_SA_HORDE_DEFENCE_TOKEN, 1); UpdateWorldState(BG_SA_ALLIANCE_DEFENCE_TOKEN, 0); } else { UpdateWorldState(BG_SA_HORDE_ATTACKS, 1); UpdateWorldState(BG_SA_ALLY_ATTACKS, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_ALL, 0); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_ALL, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_HRD, 1); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_HRD, 1); UpdateWorldState(BG_SA_HORDE_DEFENCE_TOKEN, 0); UpdateWorldState(BG_SA_ALLIANCE_DEFENCE_TOKEN, 1); } UpdateWorldState(BG_SA_PURPLE_GATEWS, 1); UpdateWorldState(BG_SA_RED_GATEWS, 1); UpdateWorldState(BG_SA_BLUE_GATEWS, 1); UpdateWorldState(BG_SA_GREEN_GATEWS, 1); UpdateWorldState(BG_SA_YELLOW_GATEWS, 1); UpdateWorldState(BG_SA_ANCIENT_GATEWS, 1); /*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* player = ObjectAccessor::FindPlayer(itr->first)) SendTransportInit(player);*/ // set status manually so preparation is cast correctly in 2nd round too SetStatus(STATUS_WAIT_JOIN); TeleportPlayers(); return true; }
void BattlegroundSA::ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject* invoker /*= NULL*/) { if (GameObject* go = obj->ToGameObject()) { switch (go->GetGoType()) { case GAMEOBJECT_TYPE_GOOBER: if (invoker) if (eventId == BG_SA_EVENT_TITAN_RELIC_ACTIVATED) TitanRelicActivated(invoker->ToPlayer()); break; case GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING: { if (GateInfo const* gate = GetGate(obj->GetEntry())) { uint8 gateId = gate->GateId; // damaged if (eventId == go->GetGOInfo()->building.damagedEvent) { GateStatus[gateId] = BG_SA_GATE_DAMAGED; if (Creature* c = obj->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) SendChatMessage(c, gate->DamagedText, invoker); PlaySoundToAll(Attackers == TEAM_ALLIANCE ? SOUND_WALL_ATTACKED_ALLIANCE : SOUND_WALL_ATTACKED_HORDE); } // destroyed else if (eventId == go->GetGOInfo()->building.destroyedEvent) { GateStatus[gate->GateId] = BG_SA_GATE_DESTROYED; _gateDestroyed = true; if (gateId < 5) DelObject(gateId + 14); if (Creature* c = obj->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) SendChatMessage(c, gate->DestroyedText, invoker); PlaySoundToAll(Attackers == TEAM_ALLIANCE ? SOUND_WALL_DESTROYED_ALLIANCE : SOUND_WALL_DESTROYED_HORDE); bool rewardHonor = true; switch (gateId) { case BG_SA_GREEN_GATE: if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_BLUE_GATE: if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_RED_GATE: if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_PURPLE_GATE: if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; default: break; } if (invoker) { if (Unit* unit = invoker->ToUnit()) { if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) { UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1); if (rewardHonor) UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1)); } } } } else break; UpdateWorldState(gate->WorldState, GateStatus[gateId]); } break; } default: break; } } }
void BattlegroundIC::EventPlayerClickedOnFlag(Player* player, GameObject* target_obj) { if (GetStatus() != STATUS_IN_PROGRESS) return; // All the node points are iterated to find the clicked one for (uint8 i = 0; i < MAX_NODE_TYPES; ++i) { if (nodePoint[i].gameobject_entry == target_obj->GetEntry()) { // THIS SHOULD NEEVEER HAPPEN if (nodePoint[i].faction == player->GetTeamId()) return; uint32 nextBanner = GetNextBanner(&nodePoint[i], player->GetTeamId(), false); // we set the new settings of the nodePoint nodePoint[i].faction = player->GetTeamId(); nodePoint[i].last_entry = nodePoint[i].gameobject_entry; nodePoint[i].gameobject_entry = nextBanner; // this is just needed if the next banner is grey if (nodePoint[i].banners[BANNER_A_CONTESTED] == nextBanner || nodePoint[i].banners[BANNER_H_CONTESTED] == nextBanner) { nodePoint[i].timer = BANNER_STATE_CHANGE_TIME; // 1 minute for last change (real faction banner) nodePoint[i].needChange = true; RealocatePlayers(nodePoint[i].nodeType); // if we are here means that the point has been lost, or it is the first capture if (nodePoint[i].nodeType != NODE_TYPE_REFINERY && nodePoint[i].nodeType != NODE_TYPE_QUARRY) if (BgCreatures[BG_IC_NPC_SPIRIT_GUIDE_1+(nodePoint[i].nodeType)-2]) DelCreature(BG_IC_NPC_SPIRIT_GUIDE_1+(nodePoint[i].nodeType)-2); UpdatePlayerScore(player, SCORE_BASES_ASSAULTED, 1); SendMessage2ToAll(LANG_BG_IC_TEAM_ASSAULTED_NODE_1, CHAT_MSG_BG_SYSTEM_NEUTRAL, player, nodePoint[i].string); SendMessage2ToAll(LANG_BG_IC_TEAM_ASSAULTED_NODE_2, CHAT_MSG_BG_SYSTEM_NEUTRAL, player, nodePoint[i].string, (player->GetTeamId() == TEAM_ALLIANCE ? LANG_BG_IC_ALLIANCE : LANG_BG_IC_HORDE)); HandleContestedNodes(&nodePoint[i]); } else if (nextBanner == nodePoint[i].banners[BANNER_A_CONTROLLED] || nextBanner == nodePoint[i].banners[BANNER_H_CONTROLLED]) // if we are going to spawn the definitve faction banner, we dont need the timer anymore { nodePoint[i].timer = BANNER_STATE_CHANGE_TIME; nodePoint[i].needChange = false; SendMessage2ToAll(LANG_BG_IC_TEAM_DEFENDED_NODE, CHAT_MSG_BG_SYSTEM_NEUTRAL, player, nodePoint[i].string); HandleCapturedNodes(&nodePoint[i], true); UpdatePlayerScore(player, SCORE_BASES_DEFENDED, 1); } GameObject* banner = GetBGObject(nodePoint[i].gameobject_type); if (!banner) // this should never happen return; float cords[4] = {banner->GetPositionX(), banner->GetPositionY(), banner->GetPositionZ(), banner->GetOrientation() }; DelObject(nodePoint[i].gameobject_type); AddObject(nodePoint[i].gameobject_type, nodePoint[i].gameobject_entry, cords[0], cords[1], cords[2], cords[3], 0, 0, 0, 0, RESPAWN_ONE_DAY); GetBGObject(nodePoint[i].gameobject_type)->SetUInt32Value(GAMEOBJECT_FACTION, nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]); if (nodePoint[i].nodeType == NODE_TYPE_WORKSHOP) { DelObject(BG_IC_GO_SEAFORIUM_BOMBS_1); DelObject(BG_IC_GO_SEAFORIUM_BOMBS_2); } UpdateNodeWorldState(&nodePoint[i]); // we dont need iterating if we are here // If the needChange bool was set true, we will handle the rest in the Update Map function. return; } } }
int32 OPvPCapturePointNA::HandleOpenGo(Player* player, GameObject* go) { int32 retval = OPvPCapturePoint::HandleOpenGo(player, go); if (retval >= 0) { const go_type * gos = NULL; if (m_ControllingFaction == ALLIANCE) gos=AllianceControlGOs; else if (m_ControllingFaction == HORDE) gos=HordeControlGOs; else return -1; int32 del = -1; int32 del2 = -1; int32 add = -1; int32 add2 = -1; switch (retval) { case NA_DESTROYED_ROOST_S: del = NA_DESTROYED_ROOST_S; add = NA_ROOST_S; add2 = NA_BOMB_WAGON_S; if (m_ControllingFaction == HORDE) m_WyvernStateSouth = WYVERN_ALLIANCE; else m_WyvernStateSouth = WYVERN_HORDE; UpdateWyvernRoostWorldState(NA_ROOST_S); break; case NA_DESTROYED_ROOST_N: del = NA_DESTROYED_ROOST_N; add = NA_ROOST_N; add2 = NA_BOMB_WAGON_N; if (m_ControllingFaction == HORDE) m_WyvernStateNorth = WYVERN_ALLIANCE; else m_WyvernStateNorth = WYVERN_HORDE; UpdateWyvernRoostWorldState(NA_ROOST_N); break; case NA_DESTROYED_ROOST_W: del = NA_DESTROYED_ROOST_W; add = NA_ROOST_W; add2 = NA_BOMB_WAGON_W; if (m_ControllingFaction == HORDE) m_WyvernStateWest = WYVERN_ALLIANCE; else m_WyvernStateWest = WYVERN_HORDE; UpdateWyvernRoostWorldState(NA_ROOST_W); break; case NA_DESTROYED_ROOST_E: del = NA_DESTROYED_ROOST_E; add = NA_ROOST_E; add2 = NA_BOMB_WAGON_E; if (m_ControllingFaction == HORDE) m_WyvernStateEast = WYVERN_ALLIANCE; else m_WyvernStateEast = WYVERN_HORDE; UpdateWyvernRoostWorldState(NA_ROOST_E); break; case NA_BOMB_WAGON_S: del = NA_BOMB_WAGON_S; del2 = NA_ROOST_S; add = NA_DESTROYED_ROOST_S; if (m_ControllingFaction == HORDE) m_WyvernStateSouth = WYVERN_NEU_ALLIANCE; else m_WyvernStateSouth = WYVERN_NEU_HORDE; UpdateWyvernRoostWorldState(NA_ROOST_S); break; case NA_BOMB_WAGON_N: del = NA_BOMB_WAGON_N; del2 = NA_ROOST_N; add = NA_DESTROYED_ROOST_N; if (m_ControllingFaction == HORDE) m_WyvernStateNorth = WYVERN_NEU_ALLIANCE; else m_WyvernStateNorth = WYVERN_NEU_HORDE; UpdateWyvernRoostWorldState(NA_ROOST_N); break; case NA_BOMB_WAGON_W: del = NA_BOMB_WAGON_W; del2 = NA_ROOST_W; add = NA_DESTROYED_ROOST_W; if (m_ControllingFaction == HORDE) m_WyvernStateWest = WYVERN_NEU_ALLIANCE; else m_WyvernStateWest = WYVERN_NEU_HORDE; UpdateWyvernRoostWorldState(NA_ROOST_W); break; case NA_BOMB_WAGON_E: del = NA_BOMB_WAGON_E; del2 = NA_ROOST_E; add = NA_DESTROYED_ROOST_E; if (m_ControllingFaction == HORDE) m_WyvernStateEast = WYVERN_NEU_ALLIANCE; else m_WyvernStateEast = WYVERN_NEU_HORDE; UpdateWyvernRoostWorldState(NA_ROOST_E); break; default: return -1; break; } if (del>-1) DelObject(del); if (del2>-1) DelObject(del2); if (add>-1) AddObject(add, gos[add].entry, gos[add].map, gos[add].x, gos[add].y, gos[add].z, gos[add].o, gos[add].rot0, gos[add].rot1, gos[add].rot2, gos[add].rot3); if (add2>-1) AddObject(add2, gos[add2].entry, gos[add2].map, gos[add2].x, gos[add2].y, gos[add2].z, gos[add2].o, gos[add2].rot0, gos[add2].rot1, gos[add2].rot2, gos[add2].rot3); return retval; } return -1; }
void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player *Source) { if (GraveyardStatus[i] == attackers) return; DelCreature(BG_SA_MAXNPC + i); GraveyardStatus[i] = Source->GetTeamId(); WorldSafeLocsEntry const *sg = NULL; sg = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]); AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], (GraveyardStatus[i] == TEAM_ALLIANCE? ALLIANCE : HORDE)); uint32 npc = 0; uint32 flag = 0; switch(i) { case BG_SA_LEFT_CAPTURABLE_GY: flag = BG_SA_LEFT_FLAG; DelObject(flag); AddObject(flag,(BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0:1)), BG_SA_ObjSpawnlocs[flag][0],BG_SA_ObjSpawnlocs[flag][1], BG_SA_ObjSpawnlocs[flag][2],BG_SA_ObjSpawnlocs[flag][3],0,0,0,0,RESPAWN_ONE_DAY); npc = BG_SA_NPC_RIGSPARK; AddCreature(BG_SA_NpcEntries[npc], npc, attackers, BG_SA_NpcSpawnlocs[npc][0], BG_SA_NpcSpawnlocs[npc][1], BG_SA_NpcSpawnlocs[npc][2], BG_SA_NpcSpawnlocs[npc][3]); UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE? 1:0)); UpdateWorldState(BG_SA_LEFT_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE? 0:1)); if (Source->GetTeamId() == TEAM_ALLIANCE) SendWarningToAll(LANG_BG_SA_A_GY_WEST); else SendWarningToAll(LANG_BG_SA_H_GY_WEST); break; case BG_SA_RIGHT_CAPTURABLE_GY: flag = BG_SA_RIGHT_FLAG; DelObject(flag); AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0:1)), BG_SA_ObjSpawnlocs[flag][0],BG_SA_ObjSpawnlocs[flag][1], BG_SA_ObjSpawnlocs[flag][2],BG_SA_ObjSpawnlocs[flag][3],0,0,0,0,RESPAWN_ONE_DAY); npc = BG_SA_NPC_SPARKLIGHT; AddCreature(BG_SA_NpcEntries[npc], npc, attackers, BG_SA_NpcSpawnlocs[npc][0], BG_SA_NpcSpawnlocs[npc][1], BG_SA_NpcSpawnlocs[npc][2], BG_SA_NpcSpawnlocs[npc][3]); UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE? 1:0)); UpdateWorldState(BG_SA_RIGHT_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE? 0:1)); if (Source->GetTeamId() == TEAM_ALLIANCE) SendWarningToAll(LANG_BG_SA_A_GY_EAST); else SendWarningToAll(LANG_BG_SA_H_GY_EAST); break; case BG_SA_CENTRAL_CAPTURABLE_GY: flag = BG_SA_CENTRAL_FLAG; DelObject(flag); AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0:1)), BG_SA_ObjSpawnlocs[flag][0],BG_SA_ObjSpawnlocs[flag][1], BG_SA_ObjSpawnlocs[flag][2],BG_SA_ObjSpawnlocs[flag][3],0,0,0,0,RESPAWN_ONE_DAY); UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE? 1:0)); UpdateWorldState(BG_SA_CENTER_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE? 0:1)); if (Source->GetTeamId() == TEAM_ALLIANCE) SendWarningToAll(LANG_BG_SA_A_GY_SOUTH); else SendWarningToAll(LANG_BG_SA_H_GY_SOUTH); break; default: ASSERT(0); break; }; }
void OPvPCapturePointEP_NPT::ChangeState() { // if changing from controlling alliance to horde or vice versa if (m_OldState == OBJECTIVESTATE_ALLIANCE || m_OldState == OBJECTIVESTATE_HORDE) ((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_NPT, 0); uint32 artkit = 21; switch (m_State) { case OBJECTIVESTATE_ALLIANCE: m_TowerState = EP_TS_A; artkit = 2; SummonGO(ALLIANCE); ((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_NPT, ALLIANCE); m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_NORTHPASS_TOWER_TAKEN_ALLIANCE); break; case OBJECTIVESTATE_HORDE: m_TowerState = EP_TS_H; artkit = 1; SummonGO(HORDE); ((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_NPT, HORDE); m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_NORTHPASS_TOWER_TAKEN_HORDE); break; case OBJECTIVESTATE_NEUTRAL: m_TowerState = EP_TS_N; m_SummonedGOSide = 0; DelObject(EP_NPT_BUFF); break; case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE: m_TowerState = EP_TS_N_A; break; case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE: m_TowerState = EP_TS_N_A; m_SummonedGOSide = 0; DelObject(EP_NPT_BUFF); break; case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE: m_TowerState = EP_TS_N_H; break; case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE: m_TowerState = EP_TS_N_H; m_SummonedGOSide = 0; DelObject(EP_NPT_BUFF); break; } GameObject* flag = HashMapHolder<GameObject>::Find(m_capturePointGUID); GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_NPT_FLAGS]); if (flag) { flag->SetGoArtKit(artkit); } if (flag2) { flag2->SetGoArtKit(artkit); } UpdateTowerState(); // complete quest objective if (m_TowerState == EP_TS_A || m_TowerState == EP_TS_H) SendObjectiveComplete(EP_NPT_CM, ObjectGuid::Empty); }
void BattlegroundIC::PostUpdateImpl(uint32 diff) { if (GetStatus() != STATUS_IN_PROGRESS) return; if (!doorsClosed) { if (closeFortressDoorsTimer <= diff) { GetBGObject(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01)->RemoveFromWorld(); GetBGObject(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01)->RemoveFromWorld(); GetBGObject(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR02)->RemoveFromWorld(); GetBGObject(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR02)->RemoveFromWorld(); GetBGObject(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR03)->RemoveFromWorld(); GetBGObject(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR03)->RemoveFromWorld(); GetBGObject(BG_IC_GO_ALLIANCE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); GetBGObject(BG_IC_GO_HORDE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); GetBGObject(BG_IC_GO_ALLIANCE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); GetBGObject(BG_IC_GO_HORDE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); GetBGObject(BG_IC_GO_ALLIANCE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); GetBGObject(BG_IC_GO_HORDE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); doorsClosed = true; } else closeFortressDoorsTimer -= diff; } for (uint8 i = NODE_TYPE_REFINERY; i < MAX_NODE_TYPES; ++i) { if (nodePoint[i].nodeType == NODE_TYPE_DOCKS) { if (nodePoint[i].nodeState == NODE_STATE_CONTROLLED_A || nodePoint[i].nodeState == NODE_STATE_CONTROLLED_H) { if (nodePoint[i].timer <= diff) { // we need to confirm this, i am not sure if this every 3 minutes for (uint8 j = 0; j < MAX_CATAPULTS_SPAWNS_PER_FACTION; ++j) { uint8 type = (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_A : BG_IC_NPC_CATAPULT_1_H)+j; if (Creature* catapult = GetBGCreature(type)) if (!catapult->IsAlive()) { // Check if creature respawn time is properly saved RespawnMap::iterator itr = respawnMap.find(catapult->GetGUIDLow()); if (itr == respawnMap.end() || time(NULL) < itr->second) continue; catapult->Relocate(BG_IC_DocksVehiclesCatapults[j].GetPositionX(), BG_IC_DocksVehiclesCatapults[j].GetPositionY(), BG_IC_DocksVehiclesCatapults[j].GetPositionZ(), BG_IC_DocksVehiclesCatapults[j].GetOrientation()); catapult->Respawn(true); respawnMap.erase(itr); } } // we need to confirm this is blizzlike, not sure if it is every 3 minutes for (uint8 j = 0; j < MAX_GLAIVE_THROWERS_SPAWNS_PER_FACTION; ++j) { uint8 type = (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_A : BG_IC_NPC_GLAIVE_THROWER_1_H)+j; if (Creature* glaiveThrower = GetBGCreature(type)) if (!glaiveThrower->IsAlive()) { // Check if creature respawn time is properly saved RespawnMap::iterator itr = respawnMap.find(glaiveThrower->GetGUIDLow()); if (itr == respawnMap.end() || time(NULL) < itr->second) continue; glaiveThrower->Relocate(BG_IC_DocksVehiclesGlaives[j].GetPositionX(), BG_IC_DocksVehiclesGlaives[j].GetPositionY(), BG_IC_DocksVehiclesGlaives[j].GetPositionZ(), BG_IC_DocksVehiclesGlaives[j].GetOrientation()); glaiveThrower->Respawn(true); respawnMap.erase(itr); } } docksTimer = DOCKS_UPDATE_TIME; } else nodePoint[i].timer -= diff; } } if (nodePoint[i].nodeType == NODE_TYPE_WORKSHOP) { if (nodePoint[i].nodeState == NODE_STATE_CONTROLLED_A || nodePoint[i].nodeState == NODE_STATE_CONTROLLED_H) { if (siegeEngineWorkshopTimer <= diff) { uint8 siegeType = (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_A : BG_IC_NPC_SIEGE_ENGINE_H); if (Creature* siege = GetBGCreature(siegeType)) // this always should be true if (!siege->IsAlive()) { // Check if creature respawn time is properly saved RespawnMap::iterator itr = respawnMap.find(siege->GetGUIDLow()); if (itr == respawnMap.end() || time(NULL) < itr->second) continue; siege->Relocate(BG_IC_WorkshopVehicles[4].GetPositionX(), BG_IC_WorkshopVehicles[4].GetPositionY(), BG_IC_WorkshopVehicles[4].GetPositionZ(), BG_IC_WorkshopVehicles[4].GetOrientation()); siege->Respawn(true); respawnMap.erase(itr); } // we need to confirm this, i am not sure if this every 3 minutes for (uint8 u = 0; u < MAX_DEMOLISHERS_SPAWNS_PER_FACTION; ++u) { uint8 type = (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_A : BG_IC_NPC_DEMOLISHER_1_H)+u; if (Creature* demolisher = GetBGCreature(type)) if (!demolisher->IsAlive()) { // Check if creature respawn time is properly saved RespawnMap::iterator itr = respawnMap.find(demolisher->GetGUIDLow()); if (itr == respawnMap.end() || time(NULL) < itr->second) continue; demolisher->Relocate(BG_IC_WorkshopVehicles[u].GetPositionX(), BG_IC_WorkshopVehicles[u].GetPositionY(), BG_IC_WorkshopVehicles[u].GetPositionZ(), BG_IC_WorkshopVehicles[u].GetOrientation()); demolisher->Respawn(true); respawnMap.erase(itr); } } siegeEngineWorkshopTimer = WORKSHOP_UPDATE_TIME; } else siegeEngineWorkshopTimer -= diff; } } // the point is waiting for a change on its banner if (nodePoint[i].needChange) { if (nodePoint[i].timer <= diff) { uint32 nextBanner = GetNextBanner(&nodePoint[i], nodePoint[i].faction, true); nodePoint[i].last_entry = nodePoint[i].gameobject_entry; nodePoint[i].gameobject_entry = nextBanner; // nodePoint[i].faction = the faction should be the same one... GameObject* banner = GetBGObject(nodePoint[i].gameobject_type); if (!banner) // this should never happen return; float cords[4] = {banner->GetPositionX(), banner->GetPositionY(), banner->GetPositionZ(), banner->GetOrientation() }; DelObject(nodePoint[i].gameobject_type); AddObject(nodePoint[i].gameobject_type, nodePoint[i].gameobject_entry, cords[0], cords[1], cords[2], cords[3], 0, 0, 0, 0, RESPAWN_ONE_DAY); GetBGObject(nodePoint[i].gameobject_type)->SetUInt32Value(GAMEOBJECT_FACTION, nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]); UpdateNodeWorldState(&nodePoint[i]); HandleCapturedNodes(&nodePoint[i], false); SendMessage2ToAll(LANG_BG_IC_TEAM_HAS_TAKEN_NODE, CHAT_MSG_BG_SYSTEM_NEUTRAL, NULL, (nodePoint[i].faction == TEAM_ALLIANCE ? LANG_BG_IC_ALLIANCE : LANG_BG_IC_HORDE), nodePoint[i].string); nodePoint[i].needChange = false; nodePoint[i].timer = BANNER_STATE_CHANGE_TIME; } else nodePoint[i].timer -= diff; } } if (resourceTimer <= diff) { for (uint8 i = 0; i < NODE_TYPE_DOCKS; ++i) { if (nodePoint[i].nodeState == NODE_STATE_CONTROLLED_A || nodePoint[i].nodeState == NODE_STATE_CONTROLLED_H) { factionReinforcements[nodePoint[i].faction] += 1; RewardHonorToTeam(RESOURCE_HONOR_AMOUNT, nodePoint[i].faction); UpdateWorldState((nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_ALLIANCE_RENFORT : BG_IC_HORDE_RENFORT), factionReinforcements[nodePoint[i].faction]); } } resourceTimer = IC_RESOURCE_TIME; } else resourceTimer -= diff; }
void OPvPCapturePointEP_NPT::ChangeState() { // if changing from controlling alliance to horde or vice versa if (m_OldState == OBJECTIVESTATE_ALLIANCE || m_OldState == OBJECTIVESTATE_HORDE) ((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_NPT, 0); uint32 artkit = 21; switch (m_State) { case OBJECTIVESTATE_ALLIANCE: m_TowerState = EP_TS_A; artkit = 2; SummonGO(ALLIANCE); ((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_NPT, ALLIANCE); m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_NORTHPASS_TOWER_TAKEN_ALLIANCE); break; case OBJECTIVESTATE_HORDE: m_TowerState = EP_TS_H; artkit = 1; SummonGO(HORDE); ((OutdoorPvPEP*)m_PvP)->SetControlledState(EP_NPT, HORDE); m_PvP->SendDefenseMessage(EP_GraveYardZone, TEXT_NORTHPASS_TOWER_TAKEN_HORDE); break; case OBJECTIVESTATE_NEUTRAL: m_TowerState = EP_TS_N; m_SummonedGOSide = 0; DelObject(EP_NPT_BUFF); break; case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE: m_TowerState = EP_TS_N_A; break; case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE: m_TowerState = EP_TS_N_A; m_SummonedGOSide = 0; DelObject(EP_NPT_BUFF); break; case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE: m_TowerState = EP_TS_N_H; break; case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE: m_TowerState = EP_TS_N_H; m_SummonedGOSide = 0; DelObject(EP_NPT_BUFF); break; } Map* map = sMapMgr->FindMap(0, 0); auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId); for (auto itr = bounds.first; itr != bounds.second; ++itr) itr->second->SetGoArtKit(artkit); bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_NPT_FLAGS]); for (auto itr = bounds.first; itr != bounds.second; ++itr) itr->second->SetGoArtKit(artkit); UpdateTowerState(); // complete quest objective if (m_TowerState == EP_TS_A || m_TowerState == EP_TS_H) SendObjectiveComplete(EP_NPT_CM, ObjectGuid::Empty); }
void BattleGroundIC::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() != STATUS_IN_PROGRESS) return; if (!doorsClosed) { if (closeFortressDoorsTimer <= diff) { // correct visual of closed gates is at "damaged" flag for (int i = BG_IC_GO_T_ALLIANCE_GATE_1; i <= BG_IC_GO_T_HORDE_GATE_3; ++i) GetBGObject(i)->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); for (int i = BG_IC_GO_T_ALLIANCE_WEST; i <= BG_IC_GO_T_HORDE_FRONT; ++i) DelObject(i); doorsClosed = true; } else closeFortressDoorsTimer -= diff; } for (int node = 0; node < BG_IC_NODES_MAX; ++node) { // 3 sec delay to spawn new banner instead previous despawned one if (m_BannerTimers[node].timer) { if (m_BannerTimers[node].timer > diff) m_BannerTimers[node].timer -= diff; else { m_BannerTimers[node].timer = 0; _CreateBanner(node, m_BannerTimers[node].type, m_BannerTimers[node].teamIndex, false); } } // 1-minute to occupy a node from contested state if (m_NodeTimers[node]) { if (m_NodeTimers[node] > diff) m_NodeTimers[node] -= diff; else { m_NodeTimers[node] = 0; // Change from contested to occupied ! uint8 teamIndex = m_Nodes[node]-1; m_prevNodes[node] = m_Nodes[node]; m_Nodes[node] += 2; // create new occupied banner _CreateBanner(node, BG_IC_NODE_TYPE_OCCUPIED, teamIndex, true); _SendNodeUpdate(node); // Message to chatlog if (teamIndex == TEAM_INDEX_ALLIANCE) { SendMessage2ToAll(LANG_BG_IC_NODE_TAKEN,CHAT_MSG_BG_SYSTEM_ALLIANCE,NULL,LANG_BG_ALLY,_GetNodeNameId(node)); PlaySoundToAll(BG_IC_SOUND_NODE_CAPTURED_ALLIANCE); } else { SendMessage2ToAll(LANG_BG_IC_NODE_TAKEN,CHAT_MSG_BG_SYSTEM_HORDE,NULL,LANG_BG_HORDE,_GetNodeNameId(node)); PlaySoundToAll(BG_IC_SOUND_NODE_CAPTURED_HORDE); } // gunship starting if (node == BG_IC_NODE_HANGAR) (teamIndex == TEAM_INDEX_ALLIANCE ? gunshipAlliance : gunshipHorde)->BuildStartMovePacket(GetBgMap()); } } } // add a point every 45 secs to quarry/refinery owner for (uint8 node = BG_IC_NODE_QUARRY; node <= BG_IC_NODE_REFINERY; node++) { if (m_Nodes[node] >= BG_IC_NODE_TYPE_OCCUPIED) { if (m_resource_Timer[node] <= diff) { UpdateScore(TeamIndex(m_Nodes[node] - BG_IC_NODE_TYPE_OCCUPIED) , 1); RewardHonorToTeam(GetBonusHonorFromKill(1), (m_Nodes[node] - BG_IC_NODE_TYPE_OCCUPIED == 0 ? ALLIANCE : HORDE)); m_resource_Timer[node] = BG_IC_RESOURCE_TICK_TIMER; } else m_resource_Timer[node] -= diff; } } HandleBuffs(); }
bool BattlegroundSA::ResetObjs() { for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(itr->first)) SendTransportsRemove(player); uint32 atF = BG_SA_Factions[Attackers]; uint32 defF = BG_SA_Factions[Attackers ? TEAM_ALLIANCE : TEAM_HORDE]; for (uint8 i = 0; i < BG_SA_MAXOBJ; i++) DelObject(i); for (uint8 i = 0; i < BG_SA_MAXNPC; i++) DelCreature(i); for (uint8 i = BG_SA_MAXNPC; i < BG_SA_MAXNPC + BG_SA_MAX_GY; i++) DelCreature(i); for (uint8 i = 0; i < 6; i++) GateStatus[i] = BG_SA_GATE_OK; if (!AddCreature(BG_SA_NpcEntries[BG_SA_NPC_KANRETHAD], BG_SA_NPC_KANRETHAD, BG_SA_NpcSpawnlocs[BG_SA_NPC_KANRETHAD])) { TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn Kanrethad, aborted. Entry: %u", BG_SA_NpcEntries[BG_SA_NPC_KANRETHAD]); return false; } for (uint8 i = 0; i <= BG_SA_PORTAL_DEFFENDER_RED; i++) { if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn BG_SA_PORTAL_DEFFENDER_RED, Entry: %u", BG_SA_ObjEntries[i]); continue; } } for (uint8 i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++) { uint32 boatid = 0; switch (i) { case BG_SA_BOAT_ONE: boatid = Attackers ? BG_SA_BOAT_ONE_H : BG_SA_BOAT_ONE_A; break; case BG_SA_BOAT_TWO: boatid = Attackers ? BG_SA_BOAT_TWO_H : BG_SA_BOAT_TWO_A; break; default: break; } if (!AddObject(i, boatid, BG_SA_ObjSpawnlocs[i].GetPositionX(), BG_SA_ObjSpawnlocs[i].GetPositionY(), BG_SA_ObjSpawnlocs[i].GetPositionZ() + (Attackers ? -3.750f: 0), BG_SA_ObjSpawnlocs[i].GetOrientation(), 0, 0, 0, 0, RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn one of the BG_SA_BOAT, Entry: %u", boatid); continue; } } for (uint8 i = BG_SA_SIGIL_1; i <= BG_SA_LEFT_FLAGPOLE; i++) { if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn Sigil, Entry: %u", BG_SA_ObjEntries[i]); continue; } } // MAD props for Kiper for discovering those values - 4 hours of his work. GetBGObject(BG_SA_BOAT_ONE)->UpdateRotationFields(1.0f, 0.0002f); GetBGObject(BG_SA_BOAT_TWO)->UpdateRotationFields(1.0f, 0.00001f); SpawnBGObject(BG_SA_BOAT_ONE, RESPAWN_IMMEDIATELY); SpawnBGObject(BG_SA_BOAT_TWO, RESPAWN_IMMEDIATELY); //Cannons and demolishers - NPCs are spawned //By capturing GYs. for (uint8 i = 0; i < BG_SA_DEMOLISHER_5; i++) { if (!AddCreature(BG_SA_NpcEntries[i], i, BG_SA_NpcSpawnlocs[i], Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE, 600)) { TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn Cannon or demolisher, Entry: %u, Attackers: %s", BG_SA_NpcEntries[i], Attackers == TEAM_ALLIANCE ? "Horde(1)" : "Alliance(0)"); continue; } } OverrideGunFaction(); DemolisherStartState(true); for (uint8 i = 0; i <= BG_SA_PORTAL_DEFFENDER_RED; i++) { SpawnBGObject(i, RESPAWN_IMMEDIATELY); GetBGObject(i)->SetFaction(defF); } GetBGObject(BG_SA_TITAN_RELIC)->SetFaction(atF); GetBGObject(BG_SA_TITAN_RELIC)->Refresh(); for (uint8 i = 0; i <= 5; i++) GateStatus[i] = BG_SA_GATE_OK; TotalTime = 0; ShipsStarted = false; //Graveyards for (uint8 i = 0; i < BG_SA_MAX_GY; i++) { WorldSafeLocsEntry const* sg = NULL; sg = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]); if (!sg) { TC_LOG_ERROR("bg.battleground", "SOTA: Can't find GY entry %u", BG_SA_GYEntries[i]); return false; } if (i == BG_SA_BEACH_GY) { GraveyardStatus[i] = Attackers; AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], Attackers); } else { GraveyardStatus[i] = ((Attackers == TEAM_HORDE)? TEAM_ALLIANCE : TEAM_HORDE); if (!AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], Attackers == TEAM_HORDE ? TEAM_ALLIANCE : TEAM_HORDE)) TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn GY: %u", i); } } //GY capture points for (uint8 i = BG_SA_CENTRAL_FLAG; i <= BG_SA_LEFT_FLAG; i++) { if (!AddObject(i, (BG_SA_ObjEntries[i] - (Attackers == TEAM_ALLIANCE ? 1 : 0)), BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn Central Flag Entry: %u", BG_SA_ObjEntries[i] - (Attackers == TEAM_ALLIANCE ? 1 : 0)); continue; } GetBGObject(i)->SetFaction(atF); } for (uint8 i = BG_SA_BOMB; i < BG_SA_MAXOBJ; i++) { if (!AddObject(i, BG_SA_ObjEntries[BG_SA_BOMB], BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn SA Bomb Entry: %u", BG_SA_ObjEntries[BG_SA_BOMB] + i); continue; } GetBGObject(i)->SetFaction(atF); } //Player may enter BEFORE we set up BG - lets update his worldstates anyway... UpdateWorldState(BG_SA_RIGHT_GY_HORDE, GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); UpdateWorldState(BG_SA_LEFT_GY_HORDE, GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); UpdateWorldState(BG_SA_CENTER_GY_HORDE, GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE, GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE, GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE, GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); if (Attackers == TEAM_ALLIANCE) { UpdateWorldState(BG_SA_ALLY_ATTACKS, 1); UpdateWorldState(BG_SA_HORDE_ATTACKS, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_ALL, 1); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_ALL, 1); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_HRD, 0); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_HRD, 0); UpdateWorldState(BG_SA_HORDE_DEFENCE_TOKEN, 1); UpdateWorldState(BG_SA_ALLIANCE_DEFENCE_TOKEN, 0); } else { UpdateWorldState(BG_SA_HORDE_ATTACKS, 1); UpdateWorldState(BG_SA_ALLY_ATTACKS, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_ALL, 0); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_ALL, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_HRD, 1); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_HRD, 1); UpdateWorldState(BG_SA_HORDE_DEFENCE_TOKEN, 0); UpdateWorldState(BG_SA_ALLIANCE_DEFENCE_TOKEN, 1); } UpdateWorldState(BG_SA_PURPLE_GATEWS, 1); UpdateWorldState(BG_SA_RED_GATEWS, 1); UpdateWorldState(BG_SA_BLUE_GATEWS, 1); UpdateWorldState(BG_SA_GREEN_GATEWS, 1); UpdateWorldState(BG_SA_YELLOW_GATEWS, 1); UpdateWorldState(BG_SA_ANCIENT_GATEWS, 1); 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* player = ObjectAccessor::FindPlayer(itr->first)) SendTransportInit(player); // set status manually so preparation is cast correctly in 2nd round too SetStatus(STATUS_WAIT_JOIN); TeleportPlayers(); return true; }
void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source) { if (GraveyardStatus[i] == Attackers) return; DelCreature(BG_SA_MAXNPC + i); GraveyardStatus[i] = Source->GetBGTeamId(); WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]); if (!sg) { TC_LOG_ERROR("bg.battleground", "BattlegroundSA::CaptureGraveyard: non-existant GY entry: %u", BG_SA_GYEntries[i]); return; } AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], GraveyardStatus[i]); uint32 npc = 0; uint32 flag = 0; switch (i) { case BG_SA_LEFT_CAPTURABLE_GY: flag = BG_SA_LEFT_FLAG; DelObject(flag); AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetBGTeamId() == TEAM_ALLIANCE ? 0 : 1)), BG_SA_ObjSpawnlocs[flag], 0, 0, 0, 0, RESPAWN_ONE_DAY); npc = BG_SA_NPC_RIGSPARK; if (Creature* rigspark = AddCreature(BG_SA_NpcEntries[npc], npc, BG_SA_NpcSpawnlocs[npc], Attackers)) rigspark->AI()->Talk(TEXT_SPARKLIGHT_RIGSPARK_SPAWN); for (uint8 j = BG_SA_DEMOLISHER_7; j <= BG_SA_DEMOLISHER_8; j++) { AddCreature(BG_SA_NpcEntries[j], j, BG_SA_NpcSpawnlocs[j], (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE), 600); if (Creature* dem = GetBGCreature(j)) dem->setFaction(BG_SA_Factions[Attackers]); } UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE, GraveyardStatus[i] == TEAM_ALLIANCE); UpdateWorldState(BG_SA_LEFT_GY_HORDE, GraveyardStatus[i] == TEAM_HORDE); if (Creature* c = Source->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) SendChatMessage(c, Source->GetBGTeamId() == TEAM_ALLIANCE ? TEXT_WEST_GRAVEYARD_CAPTURED_A : TEXT_WEST_GRAVEYARD_CAPTURED_H, Source); break; case BG_SA_RIGHT_CAPTURABLE_GY: flag = BG_SA_RIGHT_FLAG; DelObject(flag); AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetBGTeamId() == TEAM_ALLIANCE ? 0 : 1)), BG_SA_ObjSpawnlocs[flag], 0, 0, 0, 0, RESPAWN_ONE_DAY); npc = BG_SA_NPC_SPARKLIGHT; if (Creature* sparklight = AddCreature(BG_SA_NpcEntries[npc], npc, BG_SA_NpcSpawnlocs[npc], Attackers)) sparklight->AI()->Talk(TEXT_SPARKLIGHT_RIGSPARK_SPAWN); for (uint8 j = BG_SA_DEMOLISHER_5; j <= BG_SA_DEMOLISHER_6; j++) { AddCreature(BG_SA_NpcEntries[j], j, BG_SA_NpcSpawnlocs[j], Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE, 600); if (Creature* dem = GetBGCreature(j)) dem->setFaction(BG_SA_Factions[Attackers]); } UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE, GraveyardStatus[i] == TEAM_ALLIANCE); UpdateWorldState(BG_SA_RIGHT_GY_HORDE, GraveyardStatus[i] == TEAM_HORDE); if (Creature* c = Source->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) SendChatMessage(c, Source->GetBGTeamId() == TEAM_ALLIANCE ? TEXT_EAST_GRAVEYARD_CAPTURED_A : TEXT_EAST_GRAVEYARD_CAPTURED_H, Source); break; case BG_SA_CENTRAL_CAPTURABLE_GY: flag = BG_SA_CENTRAL_FLAG; DelObject(flag); AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetBGTeamId() == TEAM_ALLIANCE ? 0 : 1)), BG_SA_ObjSpawnlocs[flag], 0, 0, 0, 0, RESPAWN_ONE_DAY); UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE, GraveyardStatus[i] == TEAM_ALLIANCE); UpdateWorldState(BG_SA_CENTER_GY_HORDE, GraveyardStatus[i] == TEAM_HORDE); if (Creature* c = Source->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) SendChatMessage(c, Source->GetBGTeamId() == TEAM_ALLIANCE ? TEXT_SOUTH_GRAVEYARD_CAPTURED_A : TEXT_SOUTH_GRAVEYARD_CAPTURED_H, Source); break; default: ASSERT(false); break; }; }
bool BattlegroundSA::ResetObjs() { uint32 atF = BG_SA_Factions[attackers]; uint32 defF = BG_SA_Factions[attackers ? TEAM_ALLIANCE : TEAM_HORDE]; for (uint8 i = 0; i <BG_SA_MAXOBJ; i++) DelObject(i); for (uint8 i = 0; i < BG_SA_MAXNPC; i++) DelCreature(i); for (uint8 i = BG_SA_MAXNPC; i < BG_SA_MAXNPC + BG_SA_MAX_GY; i++) DelCreature(i); for (uint8 i = 0; i < 6; i++) GateStatus[i] = BG_SA_GATE_OK; for (uint8 i = 0; i < BG_SA_CENTRAL_FLAG; i++) { if (!AddObject(i,BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i][0],BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2],BG_SA_ObjSpawnlocs[i][3], 0,0,0,0,RESPAWN_ONE_DAY)) return false; } //Cannons and demolishers - NPCs are spawned //By capturing GYs. for (uint8 i = 0; i < BG_SA_NPC_SPARKLIGHT; i++) { if (!AddCreature(BG_SA_NpcEntries[i], i, (attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE), BG_SA_NpcSpawnlocs[i][0],BG_SA_NpcSpawnlocs[i][1], BG_SA_NpcSpawnlocs[i][2],BG_SA_NpcSpawnlocs[i][3],600)) return false; } OverrideGunFaction(); DemolisherStartState(true); for (uint8 i = 0; i <= BG_SA_TITAN_RELIC; i++) { SpawnBGObject(i, RESPAWN_IMMEDIATELY); GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FACTION, defF); } GetBGObject(BG_SA_TITAN_RELIC)->SetUInt32Value(GAMEOBJECT_FACTION, atF); GetBGObject(BG_SA_TITAN_RELIC)->Refresh(); for (uint8 i = 0; i <= 5; i++) GateStatus[i] = BG_SA_GATE_OK; // MAD props for Kiper for discovering those values - 4 hours of his work. GetBGObject(BG_SA_BOAT_ONE)->UpdateRotationFields(1.0f, 0.0002f); GetBGObject(BG_SA_BOAT_TWO)->UpdateRotationFields(1.0f, 0.00001f); SpawnBGObject(BG_SA_BOAT_ONE, RESPAWN_IMMEDIATELY); SpawnBGObject(BG_SA_BOAT_TWO, RESPAWN_IMMEDIATELY); TotalTime = 0; ShipsStarted = false; //Graveyards! for (uint8 i = 0;i < BG_SA_MAX_GY; i++) { WorldSafeLocsEntry const *sg = NULL; sg = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]); if (!sg) { sLog.outError("SOTA: Can't find GY entry %u",BG_SA_GYEntries[i]); return false; } if (i == BG_SA_BEACH_GY) { GraveyardStatus[i] = attackers; AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], ((attackers == TEAM_HORDE)? HORDE : ALLIANCE)); } else { GraveyardStatus[i] = ((attackers == TEAM_HORDE)? TEAM_ALLIANCE : TEAM_HORDE); if (!AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], ((attackers == TEAM_HORDE)? ALLIANCE : HORDE))) sLog.outError("SOTA: couldn't spawn GY: %u",i); } } //GY capture points for (uint8 i = BG_SA_CENTRAL_FLAG; i < BG_SA_PORTAL_DEFFENDER_BLUE; i++) { AddObject(i, (BG_SA_ObjEntries[i] - (attackers == TEAM_ALLIANCE ? 1:0)), BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0,0,0,0,RESPAWN_ONE_DAY); GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FACTION, atF); } for (uint8 i = BG_SA_PORTAL_DEFFENDER_BLUE; i < BG_SA_BOMB; i++) { AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0,0,0,0,RESPAWN_ONE_DAY); GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FACTION, defF); } for (uint8 i = BG_SA_BOMB; i < BG_SA_MAXOBJ; i++) { AddObject(i, BG_SA_ObjEntries[BG_SA_BOMB], BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0,0,0,0,RESPAWN_ONE_DAY); GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FACTION, atF); } //Player may enter BEFORE we set up bG - lets update his worldstates anyway... UpdateWorldState(BG_SA_RIGHT_GY_HORDE , GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_HORDE?1:0); UpdateWorldState(BG_SA_LEFT_GY_HORDE , GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_HORDE?1:0); UpdateWorldState(BG_SA_CENTER_GY_HORDE , GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_HORDE?1:0); UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE , GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_ALLIANCE?1:0); UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE , GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_ALLIANCE?1:0); UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE , GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_ALLIANCE?1:0); if (attackers == TEAM_ALLIANCE) { UpdateWorldState(BG_SA_ALLY_ATTACKS, 1); UpdateWorldState(BG_SA_HORDE_ATTACKS, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_ALL, 1); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_ALL, 1); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_HRD, 0); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_HRD, 0); UpdateWorldState(BG_SA_HORDE_DEFENCE_TOKEN,1); UpdateWorldState(BG_SA_ALLIANCE_DEFENCE_TOKEN,0); } else { UpdateWorldState(BG_SA_HORDE_ATTACKS, 1); UpdateWorldState(BG_SA_ALLY_ATTACKS, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_ALL, 0); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_ALL, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_HRD, 1); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_HRD, 1); UpdateWorldState(BG_SA_HORDE_DEFENCE_TOKEN,0); UpdateWorldState(BG_SA_ALLIANCE_DEFENCE_TOKEN,1); } UpdateWorldState(BG_SA_PURPLE_GATEWS, 1); UpdateWorldState(BG_SA_RED_GATEWS, 1); UpdateWorldState(BG_SA_BLUE_GATEWS, 1); UpdateWorldState(BG_SA_GREEN_GATEWS, 1); UpdateWorldState(BG_SA_YELLOW_GATEWS, 1); UpdateWorldState(BG_SA_ANCIENT_GATEWS, 1); TeleportPlayers(); return true; }
void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source) { if (GraveyardStatus[i] == Attackers) return; DelCreature(BG_SA_MAXNPC + i); GraveyardStatus[i] = Source->GetTeamId(); WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]); if (!sg) { TC_LOG_ERROR("bg.battleground", "BattlegroundSA::CaptureGraveyard: non-existant GY entry: %u", BG_SA_GYEntries[i]); return; } AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], (GraveyardStatus[i] == TEAM_ALLIANCE? ALLIANCE : HORDE)); uint32 npc = 0; uint32 flag = 0; switch (i) { case BG_SA_LEFT_CAPTURABLE_GY: flag = BG_SA_LEFT_FLAG; DelObject(flag); AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)), BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1], BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY); npc = BG_SA_NPC_RIGSPARK; AddCreature(BG_SA_NpcEntries[npc], npc, Attackers, BG_SA_NpcSpawnlocs[npc][0], BG_SA_NpcSpawnlocs[npc][1], BG_SA_NpcSpawnlocs[npc][2], BG_SA_NpcSpawnlocs[npc][3]); for (uint8 j = BG_SA_DEMOLISHER_7; j <= BG_SA_DEMOLISHER_8; j++) { AddCreature(BG_SA_NpcEntries[j], j, (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE), BG_SA_NpcSpawnlocs[j][0], BG_SA_NpcSpawnlocs[j][1], BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600); if (Creature* dem = GetBGCreature(j)) dem->setFaction(BG_SA_Factions[Attackers]); } UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 1 : 0)); UpdateWorldState(BG_SA_LEFT_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 0 : 1)); if (Source->GetTeamId() == TEAM_ALLIANCE) SendWarningToAll(LANG_BG_SA_A_GY_WEST); else SendWarningToAll(LANG_BG_SA_H_GY_WEST); break; case BG_SA_RIGHT_CAPTURABLE_GY: flag = BG_SA_RIGHT_FLAG; DelObject(flag); AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)), BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1], BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY); npc = BG_SA_NPC_SPARKLIGHT; AddCreature(BG_SA_NpcEntries[npc], npc, Attackers, BG_SA_NpcSpawnlocs[npc][0], BG_SA_NpcSpawnlocs[npc][1], BG_SA_NpcSpawnlocs[npc][2], BG_SA_NpcSpawnlocs[npc][3]); for (uint8 j = BG_SA_DEMOLISHER_5; j <= BG_SA_DEMOLISHER_6; j++) { AddCreature(BG_SA_NpcEntries[j], j, (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE), BG_SA_NpcSpawnlocs[j][0], BG_SA_NpcSpawnlocs[j][1], BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600); if (Creature* dem = GetBGCreature(j)) dem->setFaction(BG_SA_Factions[Attackers]); } UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 1 : 0)); UpdateWorldState(BG_SA_RIGHT_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 0 : 1)); if (Source->GetTeamId() == TEAM_ALLIANCE) SendWarningToAll(LANG_BG_SA_A_GY_EAST); else SendWarningToAll(LANG_BG_SA_H_GY_EAST); break; case BG_SA_CENTRAL_CAPTURABLE_GY: flag = BG_SA_CENTRAL_FLAG; DelObject(flag); AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)), BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1], BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY); UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 1 : 0)); UpdateWorldState(BG_SA_CENTER_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 0 : 1)); if (Source->GetTeamId() == TEAM_ALLIANCE) SendWarningToAll(LANG_BG_SA_A_GY_SOUTH); else SendWarningToAll(LANG_BG_SA_H_GY_SOUTH); break; default: ASSERT(false); break; }; }
bool OutdoorPvPObjectiveEP_NPT::Update(uint32 diff) { if (OutdoorPvPObjective::Update(diff)) { if (m_OldState != m_State || fabs(m_ShiftPhase) == m_ShiftMaxPhase) // state won't change, only phase when maxed out! { // if changing from controlling alliance to horde or vice versa if (m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State ) { sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetNeoStringForDBCLocale(LANG_OPVP_EP_LOOSE_NPT_A)); ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = 0; } else if (m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State ) { sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetNeoStringForDBCLocale(LANG_OPVP_EP_LOOSE_NPT_H)); ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = 0; } uint32 artkit = 21; switch(m_State) { case OBJECTIVESTATE_ALLIANCE: if (m_ShiftPhase == m_ShiftMaxPhase) m_TowerState = EP_TS_A; else m_TowerState = EP_TS_A_P; artkit = 2; SummonGO(ALLIANCE); ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = ALLIANCE; if (m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetNeoStringForDBCLocale(LANG_OPVP_EP_CAPTURE_NPT_A)); break; case OBJECTIVESTATE_HORDE: if (m_ShiftPhase == -m_ShiftMaxPhase) m_TowerState = EP_TS_H; else m_TowerState = EP_TS_H_P; artkit = 1; SummonGO(HORDE); ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = HORDE; if (m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetNeoStringForDBCLocale(LANG_OPVP_EP_CAPTURE_NPT_H)); break; case OBJECTIVESTATE_NEUTRAL: m_TowerState = EP_TS_N; m_SummonedGOSide = 0; DelObject(EP_NPT_BUFF); break; case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE: case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE: m_TowerState = EP_TS_N_A; break; case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE: case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE: m_TowerState = EP_TS_N_H; break; } GameObject* flag = HashMapHolder<GameObject>::Find(m_CapturePoint); GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_NPT_FLAGS]); if (flag) { flag->SetGoArtKit(artkit); flag->SendUpdateObjectToAllExcept(NULL); } if (flag2) { flag2->SetGoArtKit(artkit); flag2->SendUpdateObjectToAllExcept(NULL); } UpdateTowerState(); // complete quest objective if (m_TowerState == EP_TS_A || m_TowerState == EP_TS_H) SendObjectiveComplete(EP_NPT_CM, 0); } if (m_ShiftPhase != m_OldPhase) { // send this too, sometimes the slider disappears, dunno why :( SendUpdateWorldState(EP_UI_TOWER_SLIDER_DISPLAY, 1); // send these updates to only the ones in this objective uint32 phase = (uint32)ceil((m_ShiftPhase + m_ShiftMaxPhase) / (2 * m_ShiftMaxPhase ) * 100.0f); SendUpdateWorldState(EP_UI_TOWER_SLIDER_POS, phase); // send this too, sometimes it resets :S SendUpdateWorldState(EP_UI_TOWER_SLIDER_N, m_NeutralValue); } return m_OldState != m_State; } return false; }
void OPvPCapturePointEP::UnsummonShrine() { DelObject(EP_NPT_SHRINE); DelObject(EP_NPT_SHRINE_AURA); EP_TOWER_EVENT_TEAM[EP_TOWER_NORTHPASS] = 0; }
void BattlegroundIC::PostUpdateImpl(uint32 diff) { if (GetStatus() != STATUS_IN_PROGRESS) return; if (!doorsClosed) { if (closeFortressDoorsTimer <= diff) { GetBGObject(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01)->RemoveFromWorld(); GetBGObject(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01)->RemoveFromWorld(); GetBGObject(BG_IC_GO_ALLIANCE_GATE_3)->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); // Alliance door GetBGObject(BG_IC_GO_HORDE_GATE_1)->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); // Horde door doorsClosed = true; } else closeFortressDoorsTimer -= diff; } for (uint8 i = NODE_TYPE_REFINERY; i < MAX_NODE_TYPES; ++i) { if (nodePoint[i].nodeType == NODE_TYPE_DOCKS) { if (nodePoint[i].nodeState == NODE_STATE_CONTROLLED_A || nodePoint[i].nodeState == NODE_STATE_CONTROLLED_H) { if (docksTimer <= diff) { // we need to confirm this, i am not sure if this every 3 minutes for (uint8 u = (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_A : BG_IC_NPC_CATAPULT_1_H); u < (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_4_A : BG_IC_NPC_CATAPULT_4_H); ++u) { if (Creature* catapult = GetBGCreature(u)) { if (!catapult->isAlive()) catapult->Respawn(true); } } // we need to confirm this is blizzlike, not sure if it is every 3 minutes for (uint8 u = (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_A : BG_IC_NPC_GLAIVE_THROWER_1_H); u < (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_2_A : BG_IC_NPC_GLAIVE_THROWER_2_H); ++u) { if (Creature* glaiveThrower = GetBGCreature(u)) { if (!glaiveThrower->isAlive()) glaiveThrower->Respawn(true); } } docksTimer = DOCKS_UPDATE_TIME; } else docksTimer -= diff; } } if (nodePoint[i].nodeType == NODE_TYPE_WORKSHOP) { if (nodePoint[i].nodeState == NODE_STATE_CONTROLLED_A || nodePoint[i].nodeState == NODE_STATE_CONTROLLED_H) { if (siegeEngineWorkshopTimer <= diff) { uint8 siegeType = (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_A : BG_IC_NPC_SIEGE_ENGINE_H); if (Creature* siege = GetBGCreature(siegeType)) // this always should be true { if (siege->isAlive()) { if (siege->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_UNK_14|UNIT_FLAG_IMMUNE_TO_PC)) // following sniffs the vehicle always has UNIT_FLAG_UNK_14 siege->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_IMMUNE_TO_PC); else siege->SetHealth(siege->GetMaxHealth()); } else siege->Respawn(true); } // we need to confirm if it is every 3 minutes for (uint8 u = (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_A : BG_IC_NPC_DEMOLISHER_1_H); u < (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_4_A : BG_IC_NPC_DEMOLISHER_4_H); ++u) { if (Creature* demolisher = GetBGCreature(u)) { if (!demolisher->isAlive()) demolisher->Respawn(true); } } siegeEngineWorkshopTimer = WORKSHOP_UPDATE_TIME; } else siegeEngineWorkshopTimer -= diff; } } // the point is waiting for a change on its banner if (nodePoint[i].needChange) { if (nodePoint[i].timer <= diff) { uint32 nextBanner = GetNextBanner(&nodePoint[i], nodePoint[i].faction, true); nodePoint[i].last_entry = nodePoint[i].gameobject_entry; nodePoint[i].gameobject_entry = nextBanner; // nodePoint[i].faction = the faction should be the same one... GameObject* banner = GetBGObject(nodePoint[i].gameobject_type); if (!banner) // this should never happen return; float cords[4] = {banner->GetPositionX(), banner->GetPositionY(), banner->GetPositionZ(), banner->GetOrientation() }; DelObject(nodePoint[i].gameobject_type); AddObject(nodePoint[i].gameobject_type, nodePoint[i].gameobject_entry, cords[0], cords[1], cords[2], cords[3], 0, 0, 0, 0, RESPAWN_ONE_DAY); GetBGObject(nodePoint[i].gameobject_type)->SetUInt32Value(GAMEOBJECT_FACTION, nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]); UpdateNodeWorldState(&nodePoint[i]); HandleCapturedNodes(&nodePoint[i], false); SendMessage2ToAll(LANG_BG_IC_TEAM_HAS_TAKEN_NODE, CHAT_MSG_BG_SYSTEM_NEUTRAL, NULL, (nodePoint[i].faction == TEAM_ALLIANCE ? LANG_BG_IC_ALLIANCE : LANG_BG_IC_HORDE), nodePoint[i].string); nodePoint[i].needChange = false; nodePoint[i].timer = BANNER_STATE_CHANGE_TIME; } else nodePoint[i].timer -= diff; } } if (resourceTimer <= diff) { for (uint8 i = 0; i < NODE_TYPE_DOCKS; ++i) { if (nodePoint[i].nodeState == NODE_STATE_CONTROLLED_A || nodePoint[i].nodeState == NODE_STATE_CONTROLLED_H) { factionReinforcements[nodePoint[i].faction] += 1; RewardHonorToTeam(RESOURCE_HONOR_AMOUNT, nodePoint[i].faction == TEAM_ALLIANCE ? ALLIANCE : HORDE); UpdateWorldState((nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_ALLIANCE_RENFORT : BG_IC_HORDE_RENFORT), factionReinforcements[nodePoint[i].faction]); } } resourceTimer = IC_RESOURCE_TIME; } else resourceTimer -= diff; }
void BattlegroundSA::DestroyGate(Player* player, GameObject* go) { uint32 i = getGateIdFromDamagedOrDestroyEventId(go->GetGOInfo()->building.destroyedEvent); if (!GateStatus[i]) return; if (GameObject* g = GetBGObject(i)) { if (g->GetGOValue()->Building.Health == 0) { GateStatus[i] = BG_SA_GATE_DESTROYED; uint32 uws = getWorldStateFromGateId(i); if (uws) UpdateWorldState(uws, GateStatus[i]); bool rewardHonor = true; gateDestroyed = true; switch (i) { case BG_SA_GREEN_GATE: if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; for (uint8 bombIndex = 47; bombIndex < 59; bombIndex++) { if (GetBGObject(bombIndex)) GetBGObject(bombIndex)->RemoveFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_NOT_SELECTABLE); } break; case BG_SA_BLUE_GATE: if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; for (uint8 bombIndex = 59; bombIndex < 68; bombIndex++) { if (GetBGObject(bombIndex)) GetBGObject(bombIndex)->RemoveFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_NOT_SELECTABLE); } break; case BG_SA_RED_GATE: if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; for (uint8 bombIndex = 68; bombIndex < 77; bombIndex++) { if (GetBGObject(bombIndex)) GetBGObject(bombIndex)->RemoveFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_NOT_SELECTABLE); } break; case BG_SA_PURPLE_GATE: if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; for (uint8 bombIndex = 68; bombIndex < 77; bombIndex++) { if (GetBGObject(bombIndex)) GetBGObject(bombIndex)->RemoveFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_NOT_SELECTABLE); } break; case BG_SA_YELLOW_GATE: for (uint8 bombIndex = 77; bombIndex < 93; bombIndex++) { if (GetBGObject(bombIndex)) GetBGObject(bombIndex)->RemoveFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_NOT_SELECTABLE); } break; default: break; } if (i < 5) DelObject(i + 14); UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1); if (rewardHonor) UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1)); } } }
void OPvPCapturePointEP_NPT::ChangeState() { if(fabs(m_value) == m_maxValue) // state won't change, only phase when maxed out! { // if changing from controlling alliance to horde or vice versa if( m_OldState == OBJECTIVESTATE_ALLIANCE && m_OldState != m_State ) { sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetCWStringForDBCLocale(LANG_OPVP_EP_LOOSE_NPT_A)); ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = 0; } else if ( m_OldState == OBJECTIVESTATE_HORDE && m_OldState != m_State ) { sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetCWStringForDBCLocale(LANG_OPVP_EP_LOOSE_NPT_H)); ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = 0; } uint32 artkit = 21; switch(m_State) { case OBJECTIVESTATE_ALLIANCE: if(m_value == m_maxValue) m_TowerState = EP_TS_A; else m_TowerState = EP_TS_A_P; artkit = 2; SummonGO(ALLIANCE); ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = ALLIANCE; if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetCWStringForDBCLocale(LANG_OPVP_EP_CAPTURE_NPT_A)); break; case OBJECTIVESTATE_HORDE: if(m_value == -m_maxValue) m_TowerState = EP_TS_H; else m_TowerState = EP_TS_H_P; artkit = 1; SummonGO(HORDE); ((OutdoorPvPEP*)m_PvP)->EP_Controls[EP_NPT] = HORDE; if(m_OldState != m_State) sWorld.SendZoneText(EP_GraveYardZone,objmgr.GetCWStringForDBCLocale(LANG_OPVP_EP_CAPTURE_NPT_H)); break; case OBJECTIVESTATE_NEUTRAL: m_TowerState = EP_TS_N; m_SummonedGOSide = 0; DelObject(EP_NPT_BUFF); break; case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE: case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE: m_TowerState = EP_TS_N_A; break; case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE: case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE: m_TowerState = EP_TS_N_H; break; } GameObject* flag = HashMapHolder<GameObject>::Find(m_capturePointGUID); GameObject* flag2 = HashMapHolder<GameObject>::Find(m_Objects[EP_NPT_FLAGS]); if(flag) { flag->SetGoArtKit(artkit); flag->SendUpdateObjectToAllExcept(NULL); } if(flag2) { flag2->SetGoArtKit(artkit); flag2->SendUpdateObjectToAllExcept(NULL); } UpdateTowerState(); // complete quest objective if(m_TowerState == EP_TS_A || m_TowerState == EP_TS_H) SendObjectiveComplete(EP_NPT_CM, 0); } }
void BattlegroundIC::_DelBanner(uint8 node,uint8 type,uint8 teamIndex) { DelObject(m_IC_NodeData[node].object_flag); DelObject(m_IC_NodeData[node].object_aura); }