Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
BattlegroundWS.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 "BattlegroundMgr.h"
7#include "BattlegroundWS.h"
8#include "Creature.h"
9#include "GameObject.h"
10#include "Language.h"
11#include "Object.h"
12#include "ObjectMgr.h"
13#include "Player.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
25
27{
28 {20, 40, 40}, // normal honor
29 {60, 40, 80} // holiday
30};
31
45
47
49{
51 {
53 {
55 {
56 if (GetTeamScore(TEAM_HORDE) == 0) // No one scored - result is tie
58 else // Horde has more points and thus wins
60 }
61 else if (GetTeamScore(TEAM_HORDE) == 0)
62 EndBattleground(ALLIANCE); // Alliance has > 0, Horde has 0, alliance wins
63 else if (GetTeamScore(TEAM_HORDE) == GetTeamScore(TEAM_ALLIANCE)) // Team score equal, winner is team that scored the last flag
65 else if (GetTeamScore(TEAM_HORDE) > GetTeamScore(TEAM_ALLIANCE)) // Last but not least, check who has the higher score
67 else
69 }
70 // first update needed after 1 minute of game already in progress
72 {
75 }
76
78 {
80
82 {
84 RespawnFlag(ALLIANCE, true);
85 }
86 }
87
89 {
91
93 {
96 _bothFlagsKept = false;
97 }
98 }
99
101 {
102 _flagsTimer[TEAM_HORDE] -= diff;
103
104 if (_flagsTimer[TEAM_HORDE] < 0)
105 {
107 RespawnFlag(HORDE, true);
108 }
109 }
110
112 {
114
116 {
119 _bothFlagsKept = false;
120 }
121 }
122
123 if (_bothFlagsKept)
124 {
125 _flagSpellForceTimer += diff;
126 if (_flagDebuffState == 0 && _flagSpellForceTimer >= 10 * MINUTE * IN_MILLISECONDS) //10 minutes
127 {
129 player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
131 player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
133 }
134 else if (_flagDebuffState == 1 && _flagSpellForceTimer >= 900000) //15 minutes
135 {
137 {
138 player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
139 player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
140 }
142 {
143 player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
144 player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
145 }
147 }
148 }
149 else
150 {
152 {
153 player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
154 player->RemoveAurasDueToSpell(WS_SPELL_BRUTAL_ASSAULT);
155 }
157 {
158 player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
159 player->RemoveAurasDueToSpell(WS_SPELL_BRUTAL_ASSAULT);
160 }
161
162 _flagSpellForceTimer = 0; //reset timer.
164 }
165 }
166}
167
181
200
202{
204 //create score and add it to map, default values are set in constructor
206
207 PlayerScores[player->GetGUID()] = sc;
208}
209
211{
212 if (Team == ALLIANCE)
213 {
214 SF_LOG_DEBUG("bg.battleground", "Respawn Alliance flag");
216 }
217 else
218 {
219 SF_LOG_DEBUG("bg.battleground", "Respawn Horde flag");
221 }
222
223 if (captured)
224 {
225 //when map_update will be allowed for battlegrounds this code will be useless
229 PlaySoundToAll(BG_WS_SOUND_FLAGS_RESPAWNED); // flag respawned sound...
230 }
231 _bothFlagsKept = false;
232}
233
235{
237 return;
238
239 RespawnFlag(team, false);
240 if (team == ALLIANCE)
241 {
244 }
245 else
246 {
249 }
250
252
253 if (GameObject* obj = GetBgMap()->GetGameObject(GetDroppedFlagGUID(team)))
254 obj->Delete();
255 else
256 SF_LOG_ERROR("bg.battleground", "unknown droped flag bg, guid: %u", GUID_LOPART(GetDroppedFlagGUID(team)));
257
259 _bothFlagsKept = false;
260}
261
263{
265 return;
266
267 uint32 winner = 0;
268
270 if (player->GetTeam() == ALLIANCE)
271 {
272 if (!IsHordeFlagPickedup())
273 return;
274 SetHordeFlagPicker(0); // must be before aura remove to prevent 2 events (drop+capture) at the same time
275 // horde flag in base (but not respawned yet)
277 // Drop Horde Flag from Player
279 if (_flagDebuffState == 1)
281 else if (_flagDebuffState == 2)
283
285 AddPoint(ALLIANCE, 1);
288 }
289 else
290 {
292 return;
293 SetAllianceFlagPicker(0); // must be before aura remove to prevent 2 events (drop+capture) at the same time
294 // alliance flag in base (but not respawned yet)
296 // Drop Alliance Flag from Player
298 if (_flagDebuffState == 1)
300 else if (_flagDebuffState == 2)
302
304 AddPoint(HORDE, 1);
307 }
308 //for flag capture is reward 2 honorable kills
310
313
314 if (player->GetTeam() == ALLIANCE)
316 else
318
319 UpdateFlagState(player->GetTeam(), 1); // flag state none
320 UpdateTeamScore(player->GetTeamId());
321 // only flag capture should be updated
322 UpdatePlayerScore(player, SCORE_FLAG_CAPTURES, 1); // +1 flag captures
323
324 // update last flag capture to be used if teamscore is equal
325 SetLastFlagCapture(player->GetTeam());
326
328 winner = ALLIANCE;
329
331 winner = HORDE;
332
333 if (winner)
334 {
340
342 EndBattleground(winner);
343 }
344 else
345 {
347 }
348}
349
351{
353 {
354 // if not running, do not cast things at the dropper player (prevent spawning the "dropped" flag), neither send unnecessary messages
355 // just take off the aura
356 if (player->GetTeam() == ALLIANCE)
357 {
358 if (!IsHordeFlagPickedup())
359 return;
360
361 if (GetFlagPickerGUID(TEAM_HORDE) == player->GetGUID())
362 {
365 }
366 }
367 else
368 {
370 return;
371
372 if (GetFlagPickerGUID(TEAM_ALLIANCE) == player->GetGUID())
373 {
376 }
377 }
378 return;
379 }
380
381 bool set = false;
382
383 if (player->GetTeam() == ALLIANCE)
384 {
385 if (!IsHordeFlagPickedup())
386 return;
387 if (GetFlagPickerGUID(TEAM_HORDE) == player->GetGUID())
388 {
391 if (_flagDebuffState == 1)
393 else if (_flagDebuffState == 2)
396 player->CastSpell(player, BG_WS_SPELL_WARSONG_FLAG_DROPPED, true);
397 set = true;
398 }
399 }
400 else
401 {
403 return;
404 if (GetFlagPickerGUID(TEAM_ALLIANCE) == player->GetGUID())
405 {
408 if (_flagDebuffState == 1)
410 else if (_flagDebuffState == 2)
413 player->CastSpell(player, BG_WS_SPELL_SILVERWING_FLAG_DROPPED, true);
414 set = true;
415 }
416 }
417
418 if (set)
419 {
420 player->CastSpell(player, SPELL_RECENTLY_DROPPED_FLAG, true);
421 UpdateFlagState(player->GetTeam(), 1);
422
423 if (player->GetTeam() == ALLIANCE)
424 {
427 }
428 else
429 {
432 }
433
435 }
436}
437
439{
441 return;
442
443 int32 message_id = 0;
445
446 //alliance flag picked up from base
448 && BgObjects[BG_WS_OBJECT_A_FLAG] == target_obj->GetGUID())
449 {
450 message_id = LANG_BG_WS_PICKEDUP_AF;
456 //update world state to show correct flag carrier
459 player->CastSpell(player, BG_WS_SPELL_SILVERWING_FLAG, true);
462 _bothFlagsKept = true;
463 }
464
465 //horde flag picked up from base
467 && BgObjects[BG_WS_OBJECT_H_FLAG] == target_obj->GetGUID())
468 {
469 message_id = LANG_BG_WS_PICKEDUP_HF;
473 SetHordeFlagPicker(player->GetGUID());
475 //update world state to show correct flag carrier
478 player->CastSpell(player, BG_WS_SPELL_WARSONG_FLAG, true);
481 _bothFlagsKept = true;
482 }
483
484 //Alliance flag on ground(not in base) (returned or picked up again from ground!)
485 if (GetFlagState(ALLIANCE) == BG_WS_FLAG_STATE_ON_GROUND && player->IsWithinDistInMap(target_obj, 10)
487 {
488 if (player->GetTeam() == ALLIANCE)
489 {
490 message_id = LANG_BG_WS_RETURNED_AF;
493 RespawnFlag(ALLIANCE, false);
497 _bothFlagsKept = false;
498 }
499 else
500 {
501 message_id = LANG_BG_WS_PICKEDUP_AF;
506 player->CastSpell(player, BG_WS_SPELL_SILVERWING_FLAG, true);
509 if (_flagDebuffState == 1)
510 player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
511 else if (_flagDebuffState == 2)
512 player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
514 }
515 //called in HandleGameObjectUseOpcode:
516 //target_obj->Delete();
517 }
518
519 //Horde flag on ground(not in base) (returned or picked up again)
520 if (GetFlagState(HORDE) == BG_WS_FLAG_STATE_ON_GROUND && player->IsWithinDistInMap(target_obj, 10)
522 {
523 if (player->GetTeam() == HORDE)
524 {
525 message_id = LANG_BG_WS_RETURNED_HF;
528 RespawnFlag(HORDE, false);
532 _bothFlagsKept = false;
533 }
534 else
535 {
536 message_id = LANG_BG_WS_PICKEDUP_HF;
540 SetHordeFlagPicker(player->GetGUID());
541 player->CastSpell(player, BG_WS_SPELL_WARSONG_FLAG, true);
544 if (_flagDebuffState == 1)
545 player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
546 else if (_flagDebuffState == 2)
547 player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
549 }
550 //called in HandleGameObjectUseOpcode:
551 //target_obj->Delete();
552 }
553
554 if (!message_id)
555 return;
556
557 SendMessageToAll(message_id, type, player);
559}
560
562{
563 // sometimes flag aura not removed :(
565 {
566 if (!player)
567 {
568 SF_LOG_ERROR("bg.battleground", "BattlegroundWS: Removing offline player who has the FLAG!!");
570 RespawnFlag(ALLIANCE, false);
571 }
572 else
574 }
576 {
577 if (!player)
578 {
579 SF_LOG_ERROR("bg.battleground", "BattlegroundWS: Removing offline player who has the FLAG!!");
581 RespawnFlag(HORDE, false);
582 }
583 else
585 }
586}
587
595
603
605{
607 return;
608
609 //uint32 SpellId = 0;
610 //uint64 buff_guid = 0;
611 switch (trigger)
612 {
613 case 3686: // Alliance elixir of speed spawn. Trigger not working, because located inside other areatrigger, can be replaced by IsWithinDist(object, dist) in Battleground::Update().
614 //buff_guid = BgObjects[BG_WS_OBJECT_SPEEDBUFF_1];
615 break;
616 case 3687: // Horde elixir of speed spawn. Trigger not working, because located inside other areatrigger, can be replaced by IsWithinDist(object, dist) in Battleground::Update().
617 //buff_guid = BgObjects[BG_WS_OBJECT_SPEEDBUFF_2];
618 break;
619 case 3706: // Alliance elixir of regeneration spawn
620 //buff_guid = BgObjects[BG_WS_OBJECT_REGENBUFF_1];
621 break;
622 case 3708: // Horde elixir of regeneration spawn
623 //buff_guid = BgObjects[BG_WS_OBJECT_REGENBUFF_2];
624 break;
625 case 3707: // Alliance elixir of berserk spawn
626 //buff_guid = BgObjects[BG_WS_OBJECT_BERSERKBUFF_1];
627 break;
628 case 3709: // Horde elixir of berserk spawn
629 //buff_guid = BgObjects[BG_WS_OBJECT_BERSERKBUFF_2];
630 break;
631 case 3646: // Alliance Flag spawn
633 if (GetFlagPickerGUID(TEAM_HORDE) == player->GetGUID())
635 break;
636 case 3647: // Horde Flag spawn
638 if (GetFlagPickerGUID(TEAM_ALLIANCE) == player->GetGUID())
640 break;
641 case 3649: // unk1
642 case 3688: // unk2
643 case 4628: // unk3
644 case 4629: // unk4
645 break;
646 default:
647 Battleground::HandleAreaTrigger(player, trigger);
648 break;
649 }
650
651 //if (buff_guid)
652 // HandleTriggerBuff(buff_guid, player);
653}
654
656{
657 // flags
658 if (!AddObject(BG_WS_OBJECT_A_FLAG, BG_OBJECT_A_FLAG_WS_ENTRY, 1540.423f, 1481.325f, 351.8284f, 3.089233f, 0, 0, 0.9996573f, 0.02617699f, BG_WS_FLAG_RESPAWN_TIME / 1000)
659 || !AddObject(BG_WS_OBJECT_H_FLAG, BG_OBJECT_H_FLAG_WS_ENTRY, 916.0226f, 1434.405f, 345.413f, 0.01745329f, 0, 0, 0.008726535f, 0.9999619f, BG_WS_FLAG_RESPAWN_TIME / 1000)
660 // buffs
661 || !AddObject(BG_WS_OBJECT_SPEEDBUFF_1, BG_OBJECTID_SPEEDBUFF_ENTRY, 1449.93f, 1470.71f, 342.6346f, -1.64061f, 0, 0, 0.7313537f, -0.6819983f, BUFF_RESPAWN_TIME)
662 || !AddObject(BG_WS_OBJECT_SPEEDBUFF_2, BG_OBJECTID_SPEEDBUFF_ENTRY, 1005.171f, 1447.946f, 335.9032f, 1.64061f, 0, 0, 0.7313537f, 0.6819984f, BUFF_RESPAWN_TIME)
663 || !AddObject(BG_WS_OBJECT_REGENBUFF_1, BG_OBJECTID_REGENBUFF_ENTRY, 1317.506f, 1550.851f, 313.2344f, -0.2617996f, 0, 0, 0.1305263f, -0.9914448f, BUFF_RESPAWN_TIME)
664 || !AddObject(BG_WS_OBJECT_REGENBUFF_2, BG_OBJECTID_REGENBUFF_ENTRY, 1110.451f, 1353.656f, 316.5181f, -0.6806787f, 0, 0, 0.333807f, -0.9426414f, BUFF_RESPAWN_TIME)
665 || !AddObject(BG_WS_OBJECT_BERSERKBUFF_1, BG_OBJECTID_BERSERKERBUFF_ENTRY, 1320.09f, 1378.79f, 314.7532f, 1.186824f, 0, 0, 0.5591929f, 0.8290376f, BUFF_RESPAWN_TIME)
666 || !AddObject(BG_WS_OBJECT_BERSERKBUFF_2, BG_OBJECTID_BERSERKERBUFF_ENTRY, 1139.688f, 1560.288f, 306.8432f, -2.443461f, 0, 0, 0.9396926f, -0.3420201f, BUFF_RESPAWN_TIME)
667 // alliance gates
668 || !AddObject(BG_WS_OBJECT_DOOR_A_1, BG_OBJECT_DOOR_A_1_WS_ENTRY, 1503.335f, 1493.466f, 352.1888f, 3.115414f, 0, 0, 0.9999143f, 0.01308903f, RESPAWN_IMMEDIATELY)
669 || !AddObject(BG_WS_OBJECT_DOOR_A_2, BG_OBJECT_DOOR_A_2_WS_ENTRY, 1492.478f, 1457.912f, 342.9689f, 3.115414f, 0, 0, 0.9999143f, 0.01308903f, RESPAWN_IMMEDIATELY)
670 || !AddObject(BG_WS_OBJECT_DOOR_A_3, BG_OBJECT_DOOR_A_3_WS_ENTRY, 1468.503f, 1494.357f, 351.8618f, 3.115414f, 0, 0, 0.9999143f, 0.01308903f, RESPAWN_IMMEDIATELY)
671 || !AddObject(BG_WS_OBJECT_DOOR_A_4, BG_OBJECT_DOOR_A_4_WS_ENTRY, 1471.555f, 1458.778f, 362.6332f, 3.115414f, 0, 0, 0.9999143f, 0.01308903f, RESPAWN_IMMEDIATELY)
672 || !AddObject(BG_WS_OBJECT_DOOR_A_5, BG_OBJECT_DOOR_A_5_WS_ENTRY, 1492.347f, 1458.34f, 342.3712f, -0.03490669f, 0, 0, 0.01745246f, -0.9998477f, RESPAWN_IMMEDIATELY)
673 || !AddObject(BG_WS_OBJECT_DOOR_A_6, BG_OBJECT_DOOR_A_6_WS_ENTRY, 1503.466f, 1493.367f, 351.7352f, -0.03490669f, 0, 0, 0.01745246f, -0.9998477f, RESPAWN_IMMEDIATELY)
674 // horde gates
675 || !AddObject(BG_WS_OBJECT_DOOR_H_1, BG_OBJECT_DOOR_H_1_WS_ENTRY, 949.1663f, 1423.772f, 345.6241f, -0.5756807f, -0.01673368f, -0.004956111f, -0.2839723f, 0.9586737f, RESPAWN_IMMEDIATELY)
676 || !AddObject(BG_WS_OBJECT_DOOR_H_2, BG_OBJECT_DOOR_H_2_WS_ENTRY, 953.0507f, 1459.842f, 340.6526f, -1.99662f, -0.1971825f, 0.1575096f, -0.8239487f, 0.5073641f, RESPAWN_IMMEDIATELY)
677 || !AddObject(BG_WS_OBJECT_DOOR_H_3, BG_OBJECT_DOOR_H_3_WS_ENTRY, 949.9523f, 1422.751f, 344.9273f, 0.0f, 0, 0, 0, 1, RESPAWN_IMMEDIATELY)
678 || !AddObject(BG_WS_OBJECT_DOOR_H_4, BG_OBJECT_DOOR_H_4_WS_ENTRY, 950.7952f, 1459.583f, 342.1523f, 0.05235988f, 0, 0, 0.02617695f, 0.9996573f, RESPAWN_IMMEDIATELY)
679 )
680 {
681 SF_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn some object Battleground not created!");
682 return false;
683 }
684
686 if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, ALLIANCE))
687 {
688 SF_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn Alliance spirit guide! Battleground not created!");
689 return false;
690 }
691
693 if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, HORDE))
694 {
695 SF_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn Horde spirit guide! Battleground not created!");
696 return false;
697 }
698
699 SF_LOG_DEBUG("bg.battleground", "BatteGroundWS: BG objects and spirit guides spawned");
700
701 return true;
702}
703
740
754
756{
758 return;
759
761
762 Battleground::HandleKillPlayer(player, killer);
763}
764
765void BattlegroundWS::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
766{
767 BattlegroundScoreMap::iterator itr = PlayerScores.find(player->GetGUID());
768 if (itr == PlayerScores.end()) // player not found
769 return;
770
771 switch (type)
772 {
773 case SCORE_FLAG_CAPTURES: // flags captured
774 ((BattlegroundWGScore*)itr->second)->FlagCaptures += value;
776 break;
777 case SCORE_FLAG_RETURNS: // flags returned
778 ((BattlegroundWGScore*)itr->second)->FlagReturns += value;
780 break;
781 default:
782 Battleground::UpdatePlayerScore(player, type, value, doAddHonor);
783 break;
784 }
785}
786
788{
789 //if status in progress, it returns main graveyards with spiritguides
790 //else it will return the graveyard in the flagroom - this is especially good
791 //if a player dies in preparation phase - then the player can't cheat
792 //and teleport to the graveyard outside the flagroom
793 //and start running around, while the doors are still closed
794 if (player->GetTeam() == ALLIANCE)
795 {
798 else
800 }
801 else
802 {
805 else
807 }
808}
809
811{
814
819 else
821
826 else
828
830
832 {
835 }
836 else
838
841 else
843
846 else
848}
849
859
860bool BattlegroundWS::CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* player, Unit const* target, uint32 miscValue)
861{
862 switch (criteriaId)
863 {
865 return GetFlagState(player->GetTeam()) == BG_WS_FLAG_STATE_ON_BASE;
866 }
867
868 return Battleground::CheckAchievementCriteriaMeet(criteriaId, player, target, miscValue);
869}
@ WINNER_NONE
@ BG_CRITERIA_CHECK_SAVE_THE_DAY
@ RESPAWN_IMMEDIATELY
@ BUFF_RESPAWN_TIME
@ RESPAWN_ONE_DAY
@ BG_OBJECTID_REGENBUFF_ENTRY
@ BG_OBJECTID_BERSERKERBUFF_ENTRY
@ BG_OBJECTID_SPEEDBUFF_ENTRY
@ BG_HONOR_MODE_NUM
@ SPELL_RECENTLY_DROPPED_FLAG
@ SCORE_FLAG_CAPTURES
@ SCORE_FLAG_RETURNS
@ STATUS_IN_PROGRESS
@ BG_STARTING_EVENT_THIRD
@ BG_STARTING_EVENT_SECOND
@ BG_STARTING_EVENT_FIRST
@ BG_STARTING_EVENT_FOURTH
#define sBattlegroundMgr
uint32 BG_WSG_Honor[BG_HONOR_MODE_NUM][BG_WSG_REWARD_NUM]
BG_WSG_Rewards
@ BG_WSG_FLAG_CAP
@ BG_WSG_WIN
@ BG_WSG_REWARD_NUM
@ BG_WSG_MAP_COMPLETE
@ BG_WS_FLAG_STATE_ON_GROUND
@ BG_WS_FLAG_STATE_ON_PLAYER
@ BG_WS_FLAG_STATE_WAIT_RESPAWN
@ BG_WS_FLAG_STATE_ON_BASE
@ BG_WS_OBJECT_A_FLAG
@ BG_WS_OBJECT_DOOR_H_3
@ BG_WS_OBJECT_DOOR_A_5
@ BG_WS_OBJECT_DOOR_A_4
@ BG_WS_OBJECT_MAX
@ BG_WS_OBJECT_BERSERKBUFF_1
@ BG_WS_OBJECT_DOOR_H_1
@ BG_WS_OBJECT_REGENBUFF_2
@ BG_WS_OBJECT_DOOR_A_1
@ BG_WS_OBJECT_DOOR_A_2
@ BG_WS_OBJECT_H_FLAG
@ BG_WS_OBJECT_SPEEDBUFF_1
@ BG_WS_OBJECT_DOOR_H_4
@ BG_WS_OBJECT_DOOR_H_2
@ BG_WS_OBJECT_DOOR_A_6
@ BG_WS_OBJECT_REGENBUFF_1
@ BG_WS_OBJECT_SPEEDBUFF_2
@ BG_WS_OBJECT_DOOR_A_3
@ BG_WS_OBJECT_BERSERKBUFF_2
@ BG_WS_SPELL_SILVERWING_FLAG_PICKED
@ BG_WS_SPELL_WARSONG_FLAG
@ BG_WS_SPELL_SILVERWING_FLAG_DROPPED
@ BG_WS_SPELL_WARSONG_FLAG_PICKED
@ BG_WS_SPELL_WARSONG_FLAG_DROPPED
@ BG_WS_SPELL_SILVERWING_FLAG
@ BG_CREATURES_MAX_WS
@ WS_SPIRIT_MAIN_HORDE
@ WS_SPIRIT_MAIN_ALLIANCE
@ BG_WS_SOUND_FLAG_CAPTURED_HORDE
@ BG_WS_SOUND_FLAGS_RESPAWNED
@ BG_WS_SOUND_FLAG_CAPTURED_ALLIANCE
@ BG_WS_SOUND_HORDE_FLAG_PICKED_UP
@ BG_WS_SOUND_ALLIANCE_FLAG_PICKED_UP
@ BG_WS_SOUND_FLAG_RETURNED
@ WS_OBJECTIVE_RETURN_FLAG
@ WS_OBJECTIVE_CAPTURE_FLAG
@ WS_SPELL_BRUTAL_ASSAULT
@ WS_SPELL_FOCUSED_ASSAULT
@ BG_OBJECT_H_FLAG_GROUND_WS_ENTRY
@ BG_OBJECT_DOOR_A_4_WS_ENTRY
@ BG_OBJECT_DOOR_A_1_WS_ENTRY
@ BG_OBJECT_DOOR_A_3_WS_ENTRY
@ BG_OBJECT_DOOR_A_6_WS_ENTRY
@ BG_OBJECT_DOOR_H_2_WS_ENTRY
@ BG_OBJECT_A_FLAG_GROUND_WS_ENTRY
@ BG_OBJECT_DOOR_H_4_WS_ENTRY
@ BG_OBJECT_DOOR_H_1_WS_ENTRY
@ BG_OBJECT_DOOR_A_2_WS_ENTRY
@ BG_OBJECT_DOOR_A_5_WS_ENTRY
@ BG_OBJECT_DOOR_H_3_WS_ENTRY
@ BG_OBJECT_A_FLAG_WS_ENTRY
@ BG_OBJECT_H_FLAG_WS_ENTRY
#define WS_EVENT_START_BATTLE
@ BG_WS_FLAG_RESPAWN_TIME
@ BG_WS_FLAG_DROP_TIME
@ BG_WS_MAX_TEAM_SCORE
@ BG_WS_STATE_TIMER
@ BG_WS_FLAG_UNK_ALLIANCE
@ BG_WS_FLAG_UNK_HORDE
@ BG_WS_FLAG_CAPTURES_MAX
@ BG_WS_FLAG_STATE_HORDE
@ BG_WS_FLAG_STATE_ALLIANCE
@ BG_WS_FLAG_CAPTURES_HORDE
@ BG_WS_STATE_TIMER_ACTIVE
@ BG_WS_FLAG_CAPTURES_ALLIANCE
@ WS_GRAVEYARD_FLAGROOM_ALLIANCE
@ WS_GRAVEYARD_MAIN_ALLIANCE
@ WS_GRAVEYARD_FLAGROOM_HORDE
@ WS_GRAVEYARD_MAIN_HORDE
@ IN_MILLISECONDS
Definition Common.h:125
@ MINUTE
Definition Common.h:119
@ ACHIEVEMENT_TIMED_TYPE_EVENT
Definition DBCEnums.h:158
@ ACHIEVEMENT_TIMED_TYPE_SPELL_TARGET
Definition DBCEnums.h:161
@ ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE
Definition DBCEnums.h:195
DBCStorage< WorldSafeLocsEntry > sWorldSafeLocsStore(WorldSafeLocsEntryfmt)
std::int32_t int32
Definition Define.h:73
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
@ LANG_BG_WS_HAS_BEGUN
Definition Language.h:617
@ LANG_BG_WS_ALLIANCE_FLAG_RESPAWNED
Definition Language.h:628
@ LANG_BG_WS_RETURNED_HF
Definition Language.h:624
@ LANG_BG_WS_DROPPED_HF
Definition Language.h:621
@ LANG_BG_WS_DROPPED_AF
Definition Language.h:622
@ LANG_BG_WS_START_ONE_MINUTE
Definition Language.h:615
@ LANG_BG_WS_START_HALF_MINUTE
Definition Language.h:616
@ LANG_BG_WS_RETURNED_AF
Definition Language.h:623
@ LANG_BG_WS_HORDE_FLAG_RESPAWNED
Definition Language.h:629
@ LANG_BG_WS_F_PLACED
Definition Language.h:627
@ LANG_BG_WS_PICKEDUP_HF
Definition Language.h:625
@ LANG_BG_WS_PICKEDUP_AF
Definition Language.h:626
@ LANG_BG_WS_CAPTURED_HF
Definition Language.h:619
@ LANG_BG_WS_START_TWO_MINUTES
Definition Language.h:614
@ LANG_BG_WS_CAPTURED_AF
Definition Language.h:620
#define SF_LOG_DEBUG(filterType__,...)
Definition Log.h:134
#define SF_LOG_ERROR(filterType__,...)
Definition Log.h:143
uint32 GUID_LOPART(uint64 x)
ChatMsg
@ CHAT_MSG_BG_SYSTEM_ALLIANCE
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
@ CHAT_MSG_BG_SYSTEM_HORDE
@ TEAM_ALLIANCE
@ TEAM_HORDE
@ ALLIANCE
@ HORDE
@ AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT
Definition Unit.h:64
virtual void AddPlayer(Player *player)
BattlegroundTypeId GetTypeID(bool GetRandom=false) const
void EndBattleground(uint32 winner)
BGHonorMode m_HonorMode
virtual void HandleKillPlayer(Player *player, Player *killer)
static TeamId GetTeamIndexByTeamId(uint32 Team)
void DoorOpen(uint32 type)
void SpawnBGObject(uint32 type, uint32 respawntime)
virtual void Reset()
void PlaySoundToAll(uint32 SoundID)
BattlegroundMap * GetBgMap() const
void DoorClose(uint32 type)
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 bool CheckAchievementCriteriaMeet(uint32, Player const *, Unit const *=NULL, uint32=0)
virtual void HandleAreaTrigger(Player *, uint32)
BGCreatures BgCreatures
uint32 GetTeamScore(uint32 TeamID) const
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
uint32 GetBonusHonorFromKill(uint32 kills) const
void RewardReputationToTeam(uint32 faction_id, uint32 Reputation, uint32 TeamID)
virtual void UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true)
uint32 GetElapsedTime() const
void SendMessageToAll(int32 entry, ChatMsg type, Player const *source=NULL)
int32 m_TeamScores[BG_TEAMS_COUNT]
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 FillInitialWorldStates(WorldStateBuilder &builder) OVERRIDE
WorldSafeLocsEntry const * GetClosestGraveYard(Player *player) OVERRIDE
void HandleAreaTrigger(Player *player, uint32 trigger) OVERRIDE
int32 _flagsDropTimer[2]
void AddPoint(uint32 TeamID, uint32 Points=1)
bool IsHordeFlagPickedup() const
void UpdateTeamScore(uint32 team)
uint32 GetPrematureWinner() OVERRIDE
void AddPlayer(Player *player) OVERRIDE
uint64 m_DroppedFlagGUID[2]
bool IsAllianceFlagPickedup() const
uint32 m_ReputationCapture
void UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true) OVERRIDE
void StartingEventCloseDoors() OVERRIDE
void SetLastFlagCapture(uint32 team)
void StartingEventOpenDoors() OVERRIDE
void SetDroppedFlagGUID(uint64 guid, int32 team=-1) OVERRIDE
void UpdateFlagState(uint32 team, uint32 value)
void Reset() OVERRIDE
bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const *source, Unit const *target=NULL, uint32 miscvalue1=0) OVERRIDE
uint64 GetDroppedFlagGUID(uint32 TeamID) const
void EventPlayerClickedOnFlag(Player *player, GameObject *target_obj) OVERRIDE
void RespawnFlag(uint32 Team, bool captured)
bool SetupBattleground() OVERRIDE
void EventPlayerDroppedFlag(Player *player) OVERRIDE
void SetAllianceFlagPicker(uint64 guid)
uint64 m_FlagKeepers[2]
void SetHordeFlagPicker(uint64 guid)
void PostUpdateImpl(uint32 diff) OVERRIDE
Post-update hook.
uint32 _lastFlagCaptureTeam
void EventPlayerCapturedFlag(Player *player)
void EndBattleground(uint32 winner)
void HandleKillPlayer(Player *player, Player *killer) OVERRIDE
void RemovePlayer(Player *player, uint64 guid, uint32 team) OVERRIDE
uint8 GetFlagState(uint32 team) const
void RespawnFlagAfterDrop(uint32 Team)
uint64 GetFlagPickerGUID(int32 team) const OVERRIDE
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:643
static Player * FindPlayer(uint64)
uint64 GetGUID() const
Definition Object.h:119
uint32 GetTeam() const
Definition Player.h:2527
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry, uint32 timeLost=0)
Definition Player.cpp:21018
TeamId GetTeamId() const
Definition Player.h:2531
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, Unit *unit=NULL)
Definition Player.cpp:21033
Definition Unit.h:1367
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 IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true) const
Definition Object.cpp:1735
void AppendState(uint32 worldstate, uint32 value)
float x
float z
float y