Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
BattlegroundEY.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "BattlegroundEY.h"
7#include "BattlegroundMgr.h"
8#include "Creature.h"
9#include "Language.h"
10#include "Object.h"
11#include "ObjectMgr.h"
12#include "Player.h"
13#include "Util.h"
14#include "World.h"
15#include "WorldPacket.h"
16
17// these variables aren't used outside of this file, so declare them only here
19{
20 260, // normal honor
21 160 // holiday
22};
23
39
41
43{
45 {
46 m_PointAddingTimer -= diff;
47 if (m_PointAddingTimer <= 0)
48 {
54 }
55
57 {
58 m_FlagsTimer -= diff;
59
60 if (m_FlagsTimer < 0)
61 {
62 m_FlagsTimer = 0;
64 RespawnFlag(true);
65 else
67 }
68 }
69
71 if (m_TowerCapCheckTimer <= 0)
72 {
73 //check if player joined point
74 /*I used this order of calls, because although we will check if one player is in gameobject's distance 2 times
75 but we can count of players on current point in CheckSomeoneLeftPoint
76 */
78 //check if player left point
80 this->UpdatePointStatuses();
82 }
83 }
84}
85
94
112
114{
115 TeamId team_index = GetTeamIndexByTeamId(Team);
116 m_TeamScores[team_index] += Points;
117 m_HonorScoreTics[team_index] += Points;
118 if (m_HonorScoreTics[team_index] >= m_HonorTics)
119 {
121 m_HonorScoreTics[team_index] -= m_HonorTics;
122 }
123 UpdateTeamScore(team_index);
124}
125
127{
128 GameObject* obj = NULL;
129 for (uint8 i = 0; i < EY_POINTS_MAX; ++i)
130 {
132 if (obj)
133 {
134 uint8 j = 0;
135 while (j < m_PlayersNearPoint[EY_POINTS_MAX].size())
136 {
138 if (!player)
139 {
140 SF_LOG_ERROR("bg.battleground", "BattlegroundEY:CheckSomeoneJoinedPoint: Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[EY_POINTS_MAX][j]));
141 ++j;
142 continue;
143 }
144 if (player->CanCaptureTowerPoint() && player->IsWithinDistInMap(obj, BG_EY_POINT_RADIUS))
145 {
146 //player joined point!
147 //show progress bar
151 //add player to point
153 //remove player from "free space"
155 }
156 else
157 ++j;
158 }
159 }
160 }
161}
162
164{
165 //reset current point counts
166 for (uint8 i = 0; i < 2 * EY_POINTS_MAX; ++i)
168 GameObject* obj = NULL;
169 for (uint8 i = 0; i < EY_POINTS_MAX; ++i)
170 {
172 if (obj)
173 {
174 uint8 j = 0;
175 while (j < m_PlayersNearPoint[i].size())
176 {
178 if (!player)
179 {
180 SF_LOG_ERROR("bg.battleground", "BattlegroundEY:CheckSomeoneLeftPoint Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[i][j]));
181 //move not existed player to "free space" - this will cause many error showing in log, but it is a very important bug
183 m_PlayersNearPoint[i].erase(m_PlayersNearPoint[i].begin() + j);
184 continue;
185 }
186 if (!player->CanCaptureTowerPoint() || !player->IsWithinDistInMap(obj, BG_EY_POINT_RADIUS))
187 //move player out of point (add him to players that are out of points
188 {
190 m_PlayersNearPoint[i].erase(m_PlayersNearPoint[i].begin() + j);
192 }
193 else
194 {
195 //player is neat flag, so update count:
197 ++j;
198 }
199 }
200 }
201 }
202}
203
205{
206 for (uint8 point = 0; point < EY_POINTS_MAX; ++point)
207 {
208 if (m_PlayersNearPoint[point].empty())
209 continue;
210 //count new point bar status:
212
214 //point is fully alliance's
217 //point is fully horde's
219
220 uint32 pointOwnerTeamId = 0;
221 //find which team should own this point
223 pointOwnerTeamId = HORDE;
225 pointOwnerTeamId = ALLIANCE;
226 else
227 pointOwnerTeamId = EY_POINT_NO_OWNER;
228
229 for (uint8 i = 0; i < m_PlayersNearPoint[point].size(); ++i)
230 {
232 if (player)
233 {
235 //if point owner changed we must evoke event!
236 if (pointOwnerTeamId != m_PointOwnedByTeam[point])
237 {
238 //point was uncontrolled and player is from team which captured point
239 if (m_PointState[point] == EY_POINT_STATE_UNCONTROLLED && player->GetTeam() == pointOwnerTeamId)
240 this->EventTeamCapturedPoint(player, point);
241
242 //point was under control and player isn't from team which controlled it
243 if (m_PointState[point] == EY_POINT_UNDER_CONTROL && player->GetTeam() != m_PointOwnedByTeam[point])
244 this->EventTeamLostPoint(player, point);
245 }
246
248 if (point == FEL_REAVER && m_PointOwnedByTeam[point] == player->GetTeam())
249 if (m_FlagState && GetFlagPickerGUID() == player->GetGUID())
250 if (player->GetDistance(2044.0f, 1729.729f, 1190.03f) < 3.0f)
252 }
253 }
254 }
255}
256
258{
259 uint32 score = GetTeamScore(Team);
261 /*if (!m_IsInformedNearVictory && score >= BG_EY_WARNING_NEAR_VICTORY_SCORE)
262 {
263 if (Team == ALLIANCE)
264 SendMessageToAll(LANG_BG_EY_A_NEAR_VICTORY, CHAT_MSG_BG_SYSTEM_NEUTRAL);
265 else
266 SendMessageToAll(LANG_BG_EY_H_NEAR_VICTORY, CHAT_MSG_BG_SYSTEM_NEUTRAL);
267 PlaySoundToAll(BG_EY_SOUND_NEAR_VICTORY);
268 m_IsInformedNearVictory = true;
269 }*/
270
271 if (score >= BG_EY_MAX_TEAM_SCORE)
272 {
273 score = BG_EY_MAX_TEAM_SCORE;
274 if (Team == TEAM_ALLIANCE)
276 else
278 }
279
280 if (Team == TEAM_ALLIANCE)
282 else
284}
285
287{
288 // Win reward
289 if (winner == ALLIANCE)
291 if (winner == HORDE)
293 // Complete map reward
296
298}
299
307
309{
310 //we MUST firstly send 0, after that we can send 1!!!
312 {
313 UpdateWorldState(m_PointsIconStruct[Point].WorldStateControlIndex, 0);
314 if (Team == ALLIANCE)
315 UpdateWorldState(m_PointsIconStruct[Point].WorldStateAllianceControlledIndex, 1);
316 else
317 UpdateWorldState(m_PointsIconStruct[Point].WorldStateHordeControlledIndex, 1);
318 }
319 else
320 {
321 if (Team == ALLIANCE)
322 UpdateWorldState(m_PointsIconStruct[Point].WorldStateAllianceControlledIndex, 0);
323 else
324 UpdateWorldState(m_PointsIconStruct[Point].WorldStateHordeControlledIndex, 0);
325 UpdateWorldState(m_PointsIconStruct[Point].WorldStateControlIndex, 1);
326 }
327}
328
330{
332 //create score and add it to map
334
335 m_PlayersNearPoint[EY_POINTS_MAX].push_back(player->GetGUID());
336
337 PlayerScores[player->GetGUID()] = sc;
338}
339
341{
342 // sometimes flag aura not removed :(
343 for (int j = EY_POINTS_MAX; j >= 0; --j)
344 {
345 for (size_t i = 0; i < m_PlayersNearPoint[j].size(); ++i)
346 if (m_PlayersNearPoint[j][i] == guid)
347 m_PlayersNearPoint[j].erase(m_PlayersNearPoint[j].begin() + i);
348 }
349 if (IsFlagPickedup())
350 {
351 if (m_FlagKeeper == guid)
352 {
353 if (player)
355 else
356 {
357 SetFlagPicker(0);
358 RespawnFlag(true);
359 }
360 }
361 }
362}
363
365{
367 return;
368
369 if (!player->IsAlive()) //hack code, must be removed later
370 return;
371
372 switch (trigger)
373 {
376 if (m_FlagState && GetFlagPickerGUID() == player->GetGUID())
378 break;
381 if (m_FlagState && GetFlagPickerGUID() == player->GetGUID())
383 break;
386 if (m_FlagState && GetFlagPickerGUID() == player->GetGUID())
388 break;
391 if (m_FlagState && GetFlagPickerGUID() == player->GetGUID())
393 break;
394 case 4512:
395 case 4515:
396 case 4517:
397 case 4519:
398 case 4530:
399 case 4531:
400 case 4568:
401 case 4569:
402 case 4570:
403 case 4571:
404 case 5866:
405 break;
406 default:
407 Battleground::HandleAreaTrigger(player, trigger);
408 break;
409 }
410}
411
413{
414 // doors
415 if (!AddObject(BG_EY_OBJECT_DOOR_A, BG_OBJECT_A_DOOR_EY_ENTRY, 2527.6f, 1596.91f, 1240.7f, -3.12414f, -0.173642f, -0.001515f, 0.98477f, -0.008594f, RESPAWN_IMMEDIATELY)
416 || !AddObject(BG_EY_OBJECT_DOOR_H, BG_OBJECT_H_DOOR_EY_ENTRY, 1803.21f, 1539.49f, 1242.19f, 3.14159f, 0.173648f, 0, 0.984808f, 0, RESPAWN_IMMEDIATELY)
417 // banners (alliance)
418 || !AddObject(BG_EY_OBJECT_A_BANNER_FEL_REAVER_CENTER, BG_OBJECT_A_BANNER_EY_ENTRY, 2057.46f, 1735.07f, 1187.91f, -0.925024f, 0, 0, 0.446198f, -0.894934f, RESPAWN_ONE_DAY)
419 || !AddObject(BG_EY_OBJECT_A_BANNER_FEL_REAVER_LEFT, BG_OBJECT_A_BANNER_EY_ENTRY, 2032.25f, 1729.53f, 1190.33f, 1.8675f, 0, 0, 0.803857f, 0.594823f, RESPAWN_ONE_DAY)
420 || !AddObject(BG_EY_OBJECT_A_BANNER_FEL_REAVER_RIGHT, BG_OBJECT_A_BANNER_EY_ENTRY, 2092.35f, 1775.46f, 1187.08f, -0.401426f, 0, 0, 0.199368f, -0.979925f, RESPAWN_ONE_DAY)
421 || !AddObject(BG_EY_OBJECT_A_BANNER_BLOOD_ELF_CENTER, BG_OBJECT_A_BANNER_EY_ENTRY, 2047.19f, 1349.19f, 1189.0f, -1.62316f, 0, 0, 0.725374f, -0.688354f, RESPAWN_ONE_DAY)
422 || !AddObject(BG_EY_OBJECT_A_BANNER_BLOOD_ELF_LEFT, BG_OBJECT_A_BANNER_EY_ENTRY, 2074.32f, 1385.78f, 1194.72f, 0.488692f, 0, 0, 0.241922f, 0.970296f, RESPAWN_ONE_DAY)
423 || !AddObject(BG_EY_OBJECT_A_BANNER_BLOOD_ELF_RIGHT, BG_OBJECT_A_BANNER_EY_ENTRY, 2025.13f, 1386.12f, 1192.74f, 2.3911f, 0, 0, 0.930418f, 0.366501f, RESPAWN_ONE_DAY)
424 || !AddObject(BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_CENTER, BG_OBJECT_A_BANNER_EY_ENTRY, 2276.8f, 1400.41f, 1196.33f, 2.44346f, 0, 0, 0.939693f, 0.34202f, RESPAWN_ONE_DAY)
425 || !AddObject(BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_LEFT, BG_OBJECT_A_BANNER_EY_ENTRY, 2305.78f, 1404.56f, 1199.38f, 1.74533f, 0, 0, 0.766044f, 0.642788f, RESPAWN_ONE_DAY)
426 || !AddObject(BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_RIGHT, BG_OBJECT_A_BANNER_EY_ENTRY, 2245.4f, 1366.41f, 1195.28f, 2.21657f, 0, 0, 0.894934f, 0.446198f, RESPAWN_ONE_DAY)
427 || !AddObject(BG_EY_OBJECT_A_BANNER_MAGE_TOWER_CENTER, BG_OBJECT_A_BANNER_EY_ENTRY, 2270.84f, 1784.08f, 1186.76f, 2.42601f, 0, 0, 0.936672f, 0.350207f, RESPAWN_ONE_DAY)
428 || !AddObject(BG_EY_OBJECT_A_BANNER_MAGE_TOWER_LEFT, BG_OBJECT_A_BANNER_EY_ENTRY, 2269.13f, 1737.7f, 1186.66f, 0.994838f, 0, 0, 0.477159f, 0.878817f, RESPAWN_ONE_DAY)
429 || !AddObject(BG_EY_OBJECT_A_BANNER_MAGE_TOWER_RIGHT, BG_OBJECT_A_BANNER_EY_ENTRY, 2300.86f, 1741.25f, 1187.7f, -0.785398f, 0, 0, 0.382683f, -0.92388f, RESPAWN_ONE_DAY)
430 // banners (horde)
431 || !AddObject(BG_EY_OBJECT_H_BANNER_FEL_REAVER_CENTER, BG_OBJECT_H_BANNER_EY_ENTRY, 2057.46f, 1735.07f, 1187.91f, -0.925024f, 0, 0, 0.446198f, -0.894934f, RESPAWN_ONE_DAY)
432 || !AddObject(BG_EY_OBJECT_H_BANNER_FEL_REAVER_LEFT, BG_OBJECT_H_BANNER_EY_ENTRY, 2032.25f, 1729.53f, 1190.33f, 1.8675f, 0, 0, 0.803857f, 0.594823f, RESPAWN_ONE_DAY)
433 || !AddObject(BG_EY_OBJECT_H_BANNER_FEL_REAVER_RIGHT, BG_OBJECT_H_BANNER_EY_ENTRY, 2092.35f, 1775.46f, 1187.08f, -0.401426f, 0, 0, 0.199368f, -0.979925f, RESPAWN_ONE_DAY)
434 || !AddObject(BG_EY_OBJECT_H_BANNER_BLOOD_ELF_CENTER, BG_OBJECT_H_BANNER_EY_ENTRY, 2047.19f, 1349.19f, 1189.0f, -1.62316f, 0, 0, 0.725374f, -0.688354f, RESPAWN_ONE_DAY)
435 || !AddObject(BG_EY_OBJECT_H_BANNER_BLOOD_ELF_LEFT, BG_OBJECT_H_BANNER_EY_ENTRY, 2074.32f, 1385.78f, 1194.72f, 0.488692f, 0, 0, 0.241922f, 0.970296f, RESPAWN_ONE_DAY)
436 || !AddObject(BG_EY_OBJECT_H_BANNER_BLOOD_ELF_RIGHT, BG_OBJECT_H_BANNER_EY_ENTRY, 2025.13f, 1386.12f, 1192.74f, 2.3911f, 0, 0, 0.930418f, 0.366501f, RESPAWN_ONE_DAY)
437 || !AddObject(BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_CENTER, BG_OBJECT_H_BANNER_EY_ENTRY, 2276.8f, 1400.41f, 1196.33f, 2.44346f, 0, 0, 0.939693f, 0.34202f, RESPAWN_ONE_DAY)
438 || !AddObject(BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_LEFT, BG_OBJECT_H_BANNER_EY_ENTRY, 2305.78f, 1404.56f, 1199.38f, 1.74533f, 0, 0, 0.766044f, 0.642788f, RESPAWN_ONE_DAY)
439 || !AddObject(BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_RIGHT, BG_OBJECT_H_BANNER_EY_ENTRY, 2245.4f, 1366.41f, 1195.28f, 2.21657f, 0, 0, 0.894934f, 0.446198f, RESPAWN_ONE_DAY)
440 || !AddObject(BG_EY_OBJECT_H_BANNER_MAGE_TOWER_CENTER, BG_OBJECT_H_BANNER_EY_ENTRY, 2270.84f, 1784.08f, 1186.76f, 2.42601f, 0, 0, 0.936672f, 0.350207f, RESPAWN_ONE_DAY)
441 || !AddObject(BG_EY_OBJECT_H_BANNER_MAGE_TOWER_LEFT, BG_OBJECT_H_BANNER_EY_ENTRY, 2269.13f, 1737.7f, 1186.66f, 0.994838f, 0, 0, 0.477159f, 0.878817f, RESPAWN_ONE_DAY)
442 || !AddObject(BG_EY_OBJECT_H_BANNER_MAGE_TOWER_RIGHT, BG_OBJECT_H_BANNER_EY_ENTRY, 2300.86f, 1741.25f, 1187.7f, -0.785398f, 0, 0, 0.382683f, -0.92388f, RESPAWN_ONE_DAY)
443 // banners (natural)
444 || !AddObject(BG_EY_OBJECT_N_BANNER_FEL_REAVER_CENTER, BG_OBJECT_N_BANNER_EY_ENTRY, 2057.46f, 1735.07f, 1187.91f, -0.925024f, 0, 0, 0.446198f, -0.894934f, RESPAWN_ONE_DAY)
445 || !AddObject(BG_EY_OBJECT_N_BANNER_FEL_REAVER_LEFT, BG_OBJECT_N_BANNER_EY_ENTRY, 2032.25f, 1729.53f, 1190.33f, 1.8675f, 0, 0, 0.803857f, 0.594823f, RESPAWN_ONE_DAY)
446 || !AddObject(BG_EY_OBJECT_N_BANNER_FEL_REAVER_RIGHT, BG_OBJECT_N_BANNER_EY_ENTRY, 2092.35f, 1775.46f, 1187.08f, -0.401426f, 0, 0, 0.199368f, -0.979925f, RESPAWN_ONE_DAY)
447 || !AddObject(BG_EY_OBJECT_N_BANNER_BLOOD_ELF_CENTER, BG_OBJECT_N_BANNER_EY_ENTRY, 2047.19f, 1349.19f, 1189.0f, -1.62316f, 0, 0, 0.725374f, -0.688354f, RESPAWN_ONE_DAY)
448 || !AddObject(BG_EY_OBJECT_N_BANNER_BLOOD_ELF_LEFT, BG_OBJECT_N_BANNER_EY_ENTRY, 2074.32f, 1385.78f, 1194.72f, 0.488692f, 0, 0, 0.241922f, 0.970296f, RESPAWN_ONE_DAY)
449 || !AddObject(BG_EY_OBJECT_N_BANNER_BLOOD_ELF_RIGHT, BG_OBJECT_N_BANNER_EY_ENTRY, 2025.13f, 1386.12f, 1192.74f, 2.3911f, 0, 0, 0.930418f, 0.366501f, RESPAWN_ONE_DAY)
450 || !AddObject(BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_CENTER, BG_OBJECT_N_BANNER_EY_ENTRY, 2276.8f, 1400.41f, 1196.33f, 2.44346f, 0, 0, 0.939693f, 0.34202f, RESPAWN_ONE_DAY)
451 || !AddObject(BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_LEFT, BG_OBJECT_N_BANNER_EY_ENTRY, 2305.78f, 1404.56f, 1199.38f, 1.74533f, 0, 0, 0.766044f, 0.642788f, RESPAWN_ONE_DAY)
452 || !AddObject(BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_RIGHT, BG_OBJECT_N_BANNER_EY_ENTRY, 2245.4f, 1366.41f, 1195.28f, 2.21657f, 0, 0, 0.894934f, 0.446198f, RESPAWN_ONE_DAY)
453 || !AddObject(BG_EY_OBJECT_N_BANNER_MAGE_TOWER_CENTER, BG_OBJECT_N_BANNER_EY_ENTRY, 2270.84f, 1784.08f, 1186.76f, 2.42601f, 0, 0, 0.936672f, 0.350207f, RESPAWN_ONE_DAY)
454 || !AddObject(BG_EY_OBJECT_N_BANNER_MAGE_TOWER_LEFT, BG_OBJECT_N_BANNER_EY_ENTRY, 2269.13f, 1737.7f, 1186.66f, 0.994838f, 0, 0, 0.477159f, 0.878817f, RESPAWN_ONE_DAY)
455 || !AddObject(BG_EY_OBJECT_N_BANNER_MAGE_TOWER_RIGHT, BG_OBJECT_N_BANNER_EY_ENTRY, 2300.86f, 1741.25f, 1187.7f, -0.785398f, 0, 0, 0.382683f, -0.92388f, RESPAWN_ONE_DAY)
456 // flags
457 || !AddObject(BG_EY_OBJECT_FLAG_NETHERSTORM, BG_OBJECT_FLAG2_EY_ENTRY, 2174.782227f, 1569.054688f, 1160.361938f, -1.448624f, 0, 0, 0.662620f, -0.748956f, RESPAWN_ONE_DAY)
458 || !AddObject(BG_EY_OBJECT_FLAG_FEL_REAVER, BG_OBJECT_FLAG1_EY_ENTRY, 2044.28f, 1729.68f, 1189.96f, -0.017453f, 0, 0, 0.008727f, -0.999962f, RESPAWN_ONE_DAY)
459 || !AddObject(BG_EY_OBJECT_FLAG_BLOOD_ELF, BG_OBJECT_FLAG1_EY_ENTRY, 2048.83f, 1393.65f, 1194.49f, 0.20944f, 0, 0, 0.104528f, 0.994522f, RESPAWN_ONE_DAY)
460 || !AddObject(BG_EY_OBJECT_FLAG_DRAENEI_RUINS, BG_OBJECT_FLAG1_EY_ENTRY, 2286.56f, 1402.36f, 1197.11f, 3.72381f, 0, 0, 0.957926f, -0.287016f, RESPAWN_ONE_DAY)
461 || !AddObject(BG_EY_OBJECT_FLAG_MAGE_TOWER, BG_OBJECT_FLAG1_EY_ENTRY, 2284.48f, 1731.23f, 1189.99f, 2.89725f, 0, 0, 0.992546f, 0.121869f, RESPAWN_ONE_DAY)
462 // tower cap
463 || !AddObject(BG_EY_OBJECT_TOWER_CAP_FEL_REAVER, BG_OBJECT_FR_TOWER_CAP_EY_ENTRY, 2024.600708f, 1742.819580f, 1195.157715f, 2.443461f, 0, 0, 0.939693f, 0.342020f, RESPAWN_ONE_DAY)
464 || !AddObject(BG_EY_OBJECT_TOWER_CAP_BLOOD_ELF, BG_OBJECT_BE_TOWER_CAP_EY_ENTRY, 2050.493164f, 1372.235962f, 1194.563477f, 1.710423f, 0, 0, 0.754710f, 0.656059f, RESPAWN_ONE_DAY)
465 || !AddObject(BG_EY_OBJECT_TOWER_CAP_DRAENEI_RUINS, BG_OBJECT_DR_TOWER_CAP_EY_ENTRY, 2301.010498f, 1386.931641f, 1197.183472f, 1.570796f, 0, 0, 0.707107f, 0.707107f, RESPAWN_ONE_DAY)
466 || !AddObject(BG_EY_OBJECT_TOWER_CAP_MAGE_TOWER, BG_OBJECT_HU_TOWER_CAP_EY_ENTRY, 2282.121582f, 1760.006958f, 1189.707153f, 1.919862f, 0, 0, 0.819152f, 0.573576f, RESPAWN_ONE_DAY)
467 )
468 {
469 SF_LOG_ERROR("sql.sql", "BatteGroundEY: Failed to spawn some object Battleground not created!");
470 return false;
471 }
472
473 //buffs
474 for (int i = 0; i < EY_POINTS_MAX; ++i)
475 {
476 AreaTriggerEntry const* at = sAreaTriggerStore.LookupEntry(m_Points_Trigger[i]);
477 if (!at)
478 {
479 SF_LOG_ERROR("bg.battleground", "BattlegroundEY: Unknown trigger: %u", m_Points_Trigger[i]);
480 continue;
481 }
482 if (!AddObject(BG_EY_OBJECT_SPEEDBUFF_FEL_REAVER + i * 3, Buff_Entries[0], at->x, at->y, at->z, 0.907571f, 0, 0, 0.438371f, 0.898794f, RESPAWN_ONE_DAY)
483 || !AddObject(BG_EY_OBJECT_SPEEDBUFF_FEL_REAVER + i * 3 + 1, Buff_Entries[1], at->x, at->y, at->z, 0.907571f, 0, 0, 0.438371f, 0.898794f, RESPAWN_ONE_DAY)
484 || !AddObject(BG_EY_OBJECT_SPEEDBUFF_FEL_REAVER + i * 3 + 2, Buff_Entries[2], at->x, at->y, at->z, 0.907571f, 0, 0, 0.438371f, 0.898794f, RESPAWN_ONE_DAY)
485 )
486 SF_LOG_ERROR("bg.battleground", "BattlegroundEY: Cannot spawn buff");
487 }
488
489 WorldSafeLocsEntry const* sg = NULL;
491 if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, ALLIANCE))
492 {
493 SF_LOG_ERROR("sql.sql", "BatteGroundEY: Failed to spawn spirit guide! Battleground not created!");
494 return false;
495 }
496
498 if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, HORDE))
499 {
500 SF_LOG_ERROR("sql.sql", "BatteGroundEY: Failed to spawn spirit guide! Battleground not created!");
501 return false;
502 }
503
504 return true;
505}
506
538
556
558{
559 RespawnFlag(true);
560
562 if (obj)
563 obj->Delete();
564 else
565 SF_LOG_ERROR("bg.battleground", "BattlegroundEY: Unknown dropped flag guid: %u", GUID_LOPART(GetDroppedFlagGUID()));
566
568}
569
571{
573 return;
574
575 Battleground::HandleKillPlayer(player, killer);
577}
578
580{
582 {
583 // if not running, do not cast things at the dropper player, neither send unnecessary messages
584 // just take off the aura
585 if (IsFlagPickedup() && GetFlagPickerGUID() == player->GetGUID())
586 {
587 SetFlagPicker(0);
589 }
590 return;
591 }
592
593 if (!IsFlagPickedup())
594 return;
595
596 if (GetFlagPickerGUID() != player->GetGUID())
597 return;
598
599 SetFlagPicker(0);
603 player->CastSpell(player, SPELL_RECENTLY_DROPPED_FLAG, true);
604 player->CastSpell(player, BG_EY_PLAYER_DROPPED_FLAG_SPELL, true);
605 //this does not work correctly :((it should remove flag carrier name)
608
609 if (player->GetTeam() == ALLIANCE)
611 else
613}
614
646
648{
650 return;
651
652 //Natural point
654
655 if (!Team)
656 return;
657
658 if (Team == ALLIANCE)
659 {
661 SpawnBGObject(m_LosingPointTypes[Point].DespawnObjectTypeAlliance, RESPAWN_ONE_DAY);
662 SpawnBGObject(m_LosingPointTypes[Point].DespawnObjectTypeAlliance + 1, RESPAWN_ONE_DAY);
663 SpawnBGObject(m_LosingPointTypes[Point].DespawnObjectTypeAlliance + 2, RESPAWN_ONE_DAY);
664 }
665 else
666 {
668 SpawnBGObject(m_LosingPointTypes[Point].DespawnObjectTypeHorde, RESPAWN_ONE_DAY);
669 SpawnBGObject(m_LosingPointTypes[Point].DespawnObjectTypeHorde + 1, RESPAWN_ONE_DAY);
670 SpawnBGObject(m_LosingPointTypes[Point].DespawnObjectTypeHorde + 2, RESPAWN_ONE_DAY);
671 }
672
673 SpawnBGObject(m_LosingPointTypes[Point].SpawnNeutralObjectType, RESPAWN_IMMEDIATELY);
674 SpawnBGObject(m_LosingPointTypes[Point].SpawnNeutralObjectType + 1, RESPAWN_IMMEDIATELY);
675 SpawnBGObject(m_LosingPointTypes[Point].SpawnNeutralObjectType + 2, RESPAWN_IMMEDIATELY);
676
677 //buff isn't despawned
678
681
682 if (Team == ALLIANCE)
684 else
686
687 UpdatePointsIcons(Team, Point);
689
690 //remove bonus honor aura trigger creature when node is lost
691 if (Point < EY_POINTS_MAX)
692 DelCreature(Point + 6);//NULL checks are in DelCreature! 0-5 spirit guides
693}
694
696{
698 return;
699
700 uint32 Team = player->GetTeam();
701
702 SpawnBGObject(m_CapturingPointTypes[Point].DespawnNeutralObjectType, RESPAWN_ONE_DAY);
703 SpawnBGObject(m_CapturingPointTypes[Point].DespawnNeutralObjectType + 1, RESPAWN_ONE_DAY);
704 SpawnBGObject(m_CapturingPointTypes[Point].DespawnNeutralObjectType + 2, RESPAWN_ONE_DAY);
705
706 if (Team == ALLIANCE)
707 {
709 SpawnBGObject(m_CapturingPointTypes[Point].SpawnObjectTypeAlliance, RESPAWN_IMMEDIATELY);
710 SpawnBGObject(m_CapturingPointTypes[Point].SpawnObjectTypeAlliance + 1, RESPAWN_IMMEDIATELY);
711 SpawnBGObject(m_CapturingPointTypes[Point].SpawnObjectTypeAlliance + 2, RESPAWN_IMMEDIATELY);
712 }
713 else
714 {
716 SpawnBGObject(m_CapturingPointTypes[Point].SpawnObjectTypeHorde, RESPAWN_IMMEDIATELY);
717 SpawnBGObject(m_CapturingPointTypes[Point].SpawnObjectTypeHorde + 1, RESPAWN_IMMEDIATELY);
718 SpawnBGObject(m_CapturingPointTypes[Point].SpawnObjectTypeHorde + 2, RESPAWN_IMMEDIATELY);
719 }
720
721 //buff isn't respawned
722
723 m_PointOwnedByTeam[Point] = Team;
725
726 if (Team == ALLIANCE)
728 else
730
731 if (BgCreatures[Point])
732 DelCreature(Point);
733
734 WorldSafeLocsEntry const* sg = NULL;
735 sg = sWorldSafeLocsStore.LookupEntry(m_CapturingPointTypes[Point].GraveYardId);
736 if (!sg || !AddSpiritGuide(Point, sg->x, sg->y, sg->z, 3.124139f, Team))
737 SF_LOG_ERROR("bg.battleground", "BatteGroundEY: Failed to spawn spirit guide! point: %u, team: %u, graveyard_id: %u",
738 Point, Team, m_CapturingPointTypes[Point].GraveYardId);
739
740 // SpawnBGCreature(Point, RESPAWN_IMMEDIATELY);
741
742 UpdatePointsIcons(Team, Point);
744
745 if (Point >= EY_POINTS_MAX)
746 return;
747
748 Creature* trigger = GetBGCreature(Point + 6);//0-5 spirit guides
749 if (!trigger)
750 trigger = AddCreature(WORLD_TRIGGER, Point + 6, Team, BG_EY_TriggerPositions[Point][0], BG_EY_TriggerPositions[Point][1], BG_EY_TriggerPositions[Point][2], BG_EY_TriggerPositions[Point][3]);
751
752 //add bonus honor aura trigger creature when node is accupied
753 //cast bonus aura (+50% honor in 25yards)
754 //aura should only apply to players who have accupied the node, set correct faction for trigger
755 if (trigger)
756 {
757 trigger->setFaction(Team == ALLIANCE ? 84 : 83);
758 trigger->CastSpell(trigger, SPELL_HONORABLE_DEFENDER_25Y, false);
759 }
760}
761
800
801void BattlegroundEY::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
802{
803 BattlegroundScoreMap::iterator itr = PlayerScores.find(player->GetGUID());
804 if (itr == PlayerScores.end()) // player not found
805 return;
806
807 switch (type)
808 {
809 case SCORE_FLAG_CAPTURES: // flags captured
810 ((BattlegroundEYScore*)itr->second)->FlagCaptures += value;
812 break;
813 default:
814 Battleground::UpdatePlayerScore(player, type, value, doAddHonor);
815 break;
816 }
817}
818
820{
823 builder.AppendState(0xab6, 0x0);
824 builder.AppendState(0xab5, 0x0);
825 builder.AppendState(0xab4, 0x0);
826 builder.AppendState(0xab3, 0x0);
827 builder.AppendState(0xab2, 0x0);
828 builder.AppendState(0xab1, 0x0);
829 builder.AppendState(0xab0, 0x0);
830 builder.AppendState(0xaaf, 0x0);
831
833
835
837
839
841
843
845
847
849
851
853
855
857
858 builder.AppendState(0xad2, 0x1);
859 builder.AppendState(0xad1, 0x1);
860 builder.AppendState(0xabe, GetTeamScore(TEAM_HORDE));
861 builder.AppendState(0xabd, GetTeamScore(TEAM_ALLIANCE));
862 builder.AppendState(0xa05, 0x8e);
863 builder.AppendState(0xaa0, 0x0);
864 builder.AppendState(0xa9f, 0x0);
865 builder.AppendState(0xa9e, 0x0);
866 builder.AppendState(0xc0d, 0x17b);
867}
868
870{
871 uint32 g_id = 0;
872
873 switch (player->GetTeam())
874 {
875 case ALLIANCE: g_id = EY_GRAVEYARD_MAIN_ALLIANCE; break;
876 case HORDE: g_id = EY_GRAVEYARD_MAIN_HORDE; break;
877 default: return NULL;
878 }
879
880 float distance, nearestDistance;
881
882 WorldSafeLocsEntry const* entry = NULL;
883 WorldSafeLocsEntry const* nearestEntry = NULL;
884 entry = sWorldSafeLocsStore.LookupEntry(g_id);
885 nearestEntry = entry;
886
887 if (!entry)
888 {
889 SF_LOG_ERROR("bg.battleground", "BattlegroundEY: Not found the main team graveyard. Graveyard system isn't working!");
890 return NULL;
891 }
892
893 float plr_x = player->GetPositionX();
894 float plr_y = player->GetPositionY();
895 float plr_z = player->GetPositionZ();
896
897 distance = (entry->x - plr_x) * (entry->x - plr_x) + (entry->y - plr_y) * (entry->y - plr_y) + (entry->z - plr_z) * (entry->z - plr_z);
898 nearestDistance = distance;
899
900 for (uint8 i = 0; i < EY_POINTS_MAX; ++i)
901 {
903 {
904 entry = sWorldSafeLocsStore.LookupEntry(m_CapturingPointTypes[i].GraveYardId);
905 if (!entry)
906 SF_LOG_ERROR("bg.battleground", "BattlegroundEY: Not found graveyard: %u", m_CapturingPointTypes[i].GraveYardId);
907 else
908 {
909 distance = (entry->x - plr_x) * (entry->x - plr_x) + (entry->y - plr_y) * (entry->y - plr_y) + (entry->z - plr_z) * (entry->z - plr_z);
910 if (distance < nearestDistance)
911 {
912 nearestDistance = distance;
913 nearestEntry = entry;
914 }
915 }
916 }
917 }
918
919 return nearestEntry;
920}
921
923{
924 uint32 count = 0;
925 for (int i = 0; i < EY_POINTS_MAX; ++i)
927 ++count;
928
929 return count == EY_POINTS_MAX;
930}
931
@ RESPAWN_IMMEDIATELY
@ RESPAWN_ONE_DAY
uint32 const Buff_Entries[3]
@ BG_HONOR_MODE_NUM
@ SPELL_RECENTLY_DROPPED_FLAG
@ SPELL_HONORABLE_DEFENDER_25Y
@ SCORE_FLAG_CAPTURES
@ STATUS_IN_PROGRESS
@ BG_STARTING_EVENT_THIRD
@ BG_STARTING_EVENT_SECOND
@ BG_STARTING_EVENT_FIRST
@ BG_STARTING_EVENT_FOURTH
uint32 BG_EY_HonorScoreTicks[BG_HONOR_MODE_NUM]
@ BG_EY_FLAG_STATE_ON_PLAYER
@ BG_EY_FLAG_STATE_ON_BASE
@ BG_EY_FLAG_STATE_ON_GROUND
@ BG_EY_FLAG_STATE_WAIT_RESPAWN
@ BG_EY_PROGRESS_BAR_NEUTRAL_HIGH
@ BG_EY_PROGRESS_BAR_NEUTRAL_LOW
@ BG_EY_PROGRESS_BAR_DONT_SHOW
@ BG_EY_PROGRESS_BAR_STATE_MIDDLE
@ BG_EY_PROGRESS_BAR_ALI_CONTROLLED
@ BG_EY_PROGRESS_BAR_HORDE_CONTROLLED
@ BG_EY_POINT_MAX_CAPTURERS_COUNT
@ BG_EY_PROGRESS_BAR_PERCENT_GREY
@ BG_EY_POINT_RADIUS
@ BG_EY_PROGRESS_BAR_SHOW
@ BG_EY_MAX_TEAM_SCORE
@ EY_GRAVEYARD_MAIN_ALLIANCE
@ EY_GRAVEYARD_MAIN_HORDE
@ BLOOD_ELF_HORDE_CONTROL
@ NETHERSTORM_FLAG_STATE_ALLIANCE
@ BLOOD_ELF_UNCONTROL
@ FEL_REAVER_UNCONTROL
@ EY_HORDE_RESOURCES
@ MAGE_TOWER_ALLIANCE_CONTROL
@ PROGRESS_BAR_SHOW
@ NETHERSTORM_FLAG
@ EY_ALLIANCE_BASE
@ FEL_REAVER_ALLIANCE_CONTROL
@ DRAENEI_RUINS_UNCONTROL
@ NETHERSTORM_FLAG_STATE_HORDE
@ DRAENEI_RUINS_ALLIANCE_CONTROL
@ EY_ALLIANCE_RESOURCES
@ BLOOD_ELF_ALLIANCE_CONTROL
@ DRAENEI_RUINS_HORDE_CONTROL
@ EY_HORDE_BASE
@ MAGE_TOWER_HORDE_CONTROL
@ PROGRESS_BAR_PERCENT_GREY
@ MAGE_TOWER_UNCONTROL
@ PROGRESS_BAR_STATUS
@ FEL_REAVER_HORDE_CONTROL
const BattlegroundEYLosingPointStruct m_LosingPointTypes[EY_POINTS_MAX]
@ DRAENEI_RUINS
@ BLOOD_ELF
@ MAGE_TOWER
@ EY_PLAYERS_OUT_OF_POINTS
@ EY_POINTS_MAX
@ FEL_REAVER
#define BG_EY_NotEYWeekendHonorTicks
const uint8 BG_EY_TickPoints[EY_POINTS_MAX]
const BattlegroundEYCapturingPointStruct m_CapturingPointTypes[EY_POINTS_MAX]
@ EY_OBJECTIVE_CAPTURE_FLAG
const uint32 BG_EY_FlagPoints[EY_POINTS_MAX]
@ BG_EY_FPOINTS_TICK_TIME
@ BG_EY_EVENT_START_BATTLE
@ BG_EY_FLAG_RESPAWN_TIME
@ BG_EY_OBJECT_DOOR_H
@ BG_EY_OBJECT_FLAG_BLOOD_ELF
@ BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_LEFT
@ BG_EY_OBJECT_N_BANNER_MAGE_TOWER_RIGHT
@ BG_EY_OBJECT_N_BANNER_MAGE_TOWER_CENTER
@ BG_EY_OBJECT_H_BANNER_FEL_REAVER_RIGHT
@ BG_EY_OBJECT_A_BANNER_MAGE_TOWER_RIGHT
@ BG_EY_OBJECT_TOWER_CAP_BLOOD_ELF
@ BG_EY_OBJECT_TOWER_CAP_FEL_REAVER
@ BG_EY_OBJECT_H_BANNER_BLOOD_ELF_CENTER
@ BG_EY_OBJECT_TOWER_CAP_DRAENEI_RUINS
@ BG_EY_OBJECT_N_BANNER_FEL_REAVER_LEFT
@ BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_CENTER
@ BG_EY_OBJECT_A_BANNER_BLOOD_ELF_RIGHT
@ BG_EY_OBJECT_H_BANNER_MAGE_TOWER_CENTER
@ BG_EY_OBJECT_A_BANNER_BLOOD_ELF_CENTER
@ BG_EY_OBJECT_N_BANNER_FEL_REAVER_CENTER
@ BG_EY_OBJECT_N_BANNER_BLOOD_ELF_RIGHT
@ BG_EY_OBJECT_A_BANNER_FEL_REAVER_RIGHT
@ BG_EY_OBJECT_A_BANNER_MAGE_TOWER_CENTER
@ BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_RIGHT
@ BG_EY_OBJECT_SPEEDBUFF_FEL_REAVER
@ BG_EY_OBJECT_DOOR_A
@ BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_LEFT
@ BG_EY_OBJECT_MAX
@ BG_EY_OBJECT_H_BANNER_MAGE_TOWER_RIGHT
@ BG_EY_OBJECT_FLAG_FEL_REAVER
@ BG_EY_OBJECT_N_BANNER_BLOOD_ELF_CENTER
@ BG_EY_OBJECT_FLAG_MAGE_TOWER
@ BG_EY_OBJECT_H_BANNER_BLOOD_ELF_LEFT
@ BG_EY_OBJECT_A_BANNER_BLOOD_ELF_LEFT
@ BG_EY_OBJECT_N_BANNER_FEL_REAVER_RIGHT
@ BG_EY_OBJECT_A_BANNER_FEL_REAVER_LEFT
@ BG_EY_OBJECT_H_BANNER_MAGE_TOWER_LEFT
@ BG_EY_OBJECT_A_BANNER_MAGE_TOWER_LEFT
@ BG_EY_OBJECT_H_BANNER_FEL_REAVER_LEFT
@ BG_EY_OBJECT_TOWER_CAP_MAGE_TOWER
@ BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_RIGHT
@ BG_EY_OBJECT_H_BANNER_BLOOD_ELF_RIGHT
@ BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_CENTER
@ BG_EY_OBJECT_H_BANNER_FEL_REAVER_CENTER
@ BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_LEFT
@ BG_EY_OBJECT_FLAG_DRAENEI_RUINS
@ BG_EY_OBJECT_FLAG_NETHERSTORM
@ BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_CENTER
@ BG_EY_OBJECT_A_BANNER_FEL_REAVER_CENTER
@ BG_EY_OBJECT_N_BANNER_BLOOD_ELF_LEFT
@ BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_RIGHT
@ BG_EY_OBJECT_N_BANNER_MAGE_TOWER_LEFT
@ BG_OBJECT_HU_TOWER_CAP_EY_ENTRY
@ BG_OBJECT_BE_TOWER_CAP_EY_ENTRY
@ BG_OBJECT_H_BANNER_EY_ENTRY
@ BG_OBJECT_FLAG2_EY_ENTRY
@ BG_OBJECT_FR_TOWER_CAP_EY_ENTRY
@ BG_OBJECT_A_DOOR_EY_ENTRY
@ BG_OBJECT_H_DOOR_EY_ENTRY
@ BG_OBJECT_FLAG1_EY_ENTRY
@ BG_OBJECT_A_BANNER_EY_ENTRY
@ BG_OBJECT_N_BANNER_EY_ENTRY
@ BG_OBJECT_DR_TOWER_CAP_EY_ENTRY
@ EY_SPIRIT_MAIN_HORDE
@ EY_SPIRIT_MAIN_ALLIANCE
@ BG_EY_CREATURES_MAX
const float BG_EY_TriggerPositions[EY_POINTS_MAX][4]
@ TR_DRAENEI_RUINS_BUFF
@ TR_BLOOD_ELF_POINT
@ TR_BLOOD_ELF_BUFF
@ TR_FEL_REAVER_BUFF
@ TR_DRAENEI_RUINS_POINT
@ TR_MAGE_TOWER_POINT
@ TR_FEL_REAVER_POINT
@ TR_MAGE_TOWER_BUFF
@ EY_POINT_UNDER_CONTROL
@ EY_POINT_NO_OWNER
@ EY_POINT_STATE_UNCONTROLLED
#define BG_EY_EYWeekendHonorTicks
@ BG_EY_SOUND_FLAG_PICKED_UP_ALLIANCE
@ BG_EY_SOUND_FLAG_CAPTURED_HORDE
@ BG_EY_SOUND_FLAG_PICKED_UP_HORDE
@ BG_EY_SOUND_FLAG_RESET
@ BG_EY_SOUND_FLAG_CAPTURED_ALLIANCE
@ BG_EY_NETHERSTORM_FLAG_SPELL
@ BG_EY_PLAYER_DROPPED_FLAG_SPELL
const BattlegroundEYPointIconsStruct m_PointsIconStruct[EY_POINTS_MAX]
#define sBattlegroundMgr
@ ACHIEVEMENT_TIMED_TYPE_EVENT
Definition DBCEnums.h:158
@ ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE
Definition DBCEnums.h:195
DBCStorage< WorldSafeLocsEntry > sWorldSafeLocsStore(WorldSafeLocsEntryfmt)
DBCStorage< AreaTriggerEntry > sAreaTriggerStore(AreaTriggerEntryfmt)
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
@ LANG_BG_EY_HAS_TAKEN_FLAG
Definition Language.h:672
@ LANG_BG_EY_CAPTURED_FLAG_A
Definition Language.h:673
@ LANG_BG_EY_START_TWO_MINUTES
Definition Language.h:631
@ LANG_BG_EY_CAPTURED_FLAG_H
Definition Language.h:674
@ LANG_BG_EY_START_ONE_MINUTE
Definition Language.h:632
@ LANG_BG_EY_RESETED_FLAG
Definition Language.h:676
@ LANG_BG_EY_DROPPED_FLAG
Definition Language.h:675
@ LANG_BG_EY_START_HALF_MINUTE
Definition Language.h:633
@ LANG_BG_EY_HAS_BEGUN
Definition Language.h:634
#define SF_LOG_ERROR(filterType__,...)
Definition Log.h:143
uint32 GUID_LOPART(uint64 x)
@ CHAT_MSG_BG_SYSTEM_ALLIANCE
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
@ CHAT_MSG_BG_SYSTEM_HORDE
TeamId
@ TEAM_ALLIANCE
@ TEAM_HORDE
@ ALLIANCE
@ HORDE
@ AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT
Definition Unit.h:64
#define WORLD_TRIGGER
Definition Unit.h:20
bool IsAllNodesControlledByTeam(uint32 team) const OVERRIDE
void EventTeamCapturedPoint(Player *Source, uint32 Point)
void HandleAreaTrigger(Player *Source, uint32 Trigger) OVERRIDE
uint32 m_FlagCapturedBgObjectType
uint64 GetFlagPickerGUID(int32=-1) const OVERRIDE
uint8 m_PointState[EY_POINTS_MAX]
int32 m_PointBarStatus[EY_POINTS_MAX]
void AddPoints(uint32 Team, uint32 Points)
void CheckSomeoneJoinedPoint()
void HandleKillPlayer(Player *player, Player *killer) OVERRIDE
void StartingEventOpenDoors() OVERRIDE
void EventPlayerDroppedFlag(Player *Source) OVERRIDE
void Reset() OVERRIDE
WorldSafeLocsEntry const * GetClosestGraveYard(Player *player) OVERRIDE
uint32 GetPrematureWinner() OVERRIDE
void UpdatePointsCount(uint32 Team)
uint64 GetDroppedFlagGUID() const
void UpdatePointsIcons(uint32 Team, uint32 Point)
bool IsFlagPickedup() const
uint8 m_CurrentPointPlayersCount[2 *EY_POINTS_MAX]
void EventPlayerClickedOnFlag(Player *Source, GameObject *target_obj) OVERRIDE
uint32 m_Points_Trigger[EY_POINTS_MAX]
void EndBattleground(uint32 winner)
void PostUpdateImpl(uint32 diff) OVERRIDE
Post-update hook.
void FillInitialWorldStates(WorldStateBuilder &builder) OVERRIDE
uint32 m_TeamPointsCount[2]
void SetFlagPicker(uint64 guid)
void StartingEventCloseDoors() OVERRIDE
void RemovePlayer(Player *player, uint64 guid, uint32 team) OVERRIDE
bool SetupBattleground() OVERRIDE
uint32 m_PointOwnedByTeam[EY_POINTS_MAX]
uint32 m_HonorScoreTics[2]
void EventTeamLostPoint(Player *Source, uint32 Point)
void UpdateTeamScore(uint32 Team)
void AddPlayer(Player *player) OVERRIDE
void UpdatePlayerScore(Player *Source, uint32 type, uint32 value, bool doAddHonor=true) OVERRIDE
PlayersNearPointType m_PlayersNearPoint[EY_POINTS_MAX+1]
void RespawnFlag(bool send_message)
void SetDroppedFlagGUID(uint64 guid, int32=-1) OVERRIDE
void EventPlayerCapturedFlag(Player *Source, uint32 BgObjectType)
virtual void AddPlayer(Player *player)
BattlegroundTypeId GetTypeID(bool GetRandom=false) const
void EndBattleground(uint32 winner)
virtual void HandleKillPlayer(Player *player, Player *killer)
static TeamId GetTeamIndexByTeamId(uint32 Team)
bool DelCreature(uint32 type)
void SpawnBGObject(uint32 type, uint32 respawntime)
virtual void Reset()
void UpdateWorldStateForPlayer(uint32 Field, uint32 Value, Player *player)
void PlaySoundToAll(uint32 SoundID)
BGObjects BgObjects
void UpdateWorldState(uint32 Field, uint32 Value)
BattlegroundScoreMap PlayerScores
void RewardHonorToTeam(uint32 Honor, uint32 TeamID)
bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, uint32 team)
BattlegroundStatus GetStatus() const
virtual void HandleAreaTrigger(Player *, uint32)
BGCreatures BgCreatures
uint32 GetTeamScore(uint32 TeamID) const
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
uint32 GetBonusHonorFromKill(uint32 kills) const
virtual void UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true)
Creature * AddCreature(uint32 entry, uint32 type, uint32 teamval, float x, float y, float z, float o, uint32 respawntime=0)
void PSendMessageToAll(int32 entry, ChatMsg type, Player const *source,...)
void SendMessageToAll(int32 entry, ChatMsg type, Player const *source=NULL)
int32 m_TeamScores[BG_TEAMS_COUNT]
Creature * GetBGCreature(uint32 type)
bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime=0)
virtual uint32 GetPrematureWinner()
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
void Delete()
static T * Find(uint64 guid)
static Player * FindPlayer(uint64)
uint64 GetGUID() const
Definition Object.h:119
uint32 GetTeam() const
Definition Player.h:2527
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, Unit *unit=NULL)
Definition Player.cpp:21033
bool CanCaptureTowerPoint()
Definition Player.cpp:20340
void setFaction(uint32 faction)
Definition Unit.h:1699
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
void RemoveAurasWithInterruptFlags(uint32 flag, uint32 except=0)
void RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID=0, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
bool IsAlive() const
Definition Unit.h:2032
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true) const
Definition Object.cpp:1735
std::string const & GetName() const
Definition Object.h:664
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1666
void AppendState(uint32 worldstate, uint32 value)
float z
float y
float x
float GetPositionZ() const
Definition Object.h:330
float GetPositionX() const
Definition Object.h:328
float GetPositionY() const
Definition Object.h:329
float x
float z
float y