TrinityCore
Loading...
Searching...
No Matches
BattlegroundWS.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "BattlegroundWS.h"
19#include "BattlegroundMgr.h"
20#include "BattlegroundPackets.h"
21#include "DBCStores.h"
22#include "GameObject.h"
23#include "Log.h"
24#include "Map.h"
25#include "Object.h"
26#include "ObjectAccessor.h"
27#include "Player.h"
28#include "WorldPacket.h"
29#include "WorldStatePackets.h"
30
31// these variables aren't used outside of this file, so declare them only here
39
41{
42 {20, 40, 40}, // normal honor
43 {60, 40, 80} // holiday
44};
45
74
79
81
83{
85 {
87 {
89 {
90 if (GetTeamScore(TEAM_HORDE) == 0) // No one scored - result is tie
92 else // Horde has more points and thus wins
94 }
95 else if (GetTeamScore(TEAM_HORDE) == 0)
96 EndBattleground(ALLIANCE); // Alliance has > 0, Horde has 0, alliance wins
97 else if (GetTeamScore(TEAM_HORDE) == GetTeamScore(TEAM_ALLIANCE)) // Team score equal, winner is team that scored the last flag
99 else if (GetTeamScore(TEAM_HORDE) > GetTeamScore(TEAM_ALLIANCE)) // Last but not least, check who has the higher score
101 else
103 }
104 // first update needed after 1 minute of game already in progress
106 {
109 }
110
112 {
113 _flagsTimer[TEAM_ALLIANCE] -= diff;
114
115 if (_flagsTimer[TEAM_ALLIANCE] < 0)
116 {
118 RespawnFlag(ALLIANCE, true);
119 }
120 }
121
123 {
125
127 {
130 _bothFlagsKept = false;
131 }
132 }
133
135 {
136 _flagsTimer[TEAM_HORDE] -= diff;
137
138 if (_flagsTimer[TEAM_HORDE] < 0)
139 {
141 RespawnFlag(HORDE, true);
142 }
143 }
144
146 {
148
150 {
153 _bothFlagsKept = false;
154 }
155 }
156
157 if (_bothFlagsKept)
158 {
159 _flagSpellForceTimer += diff;
160 if (_flagDebuffState == 0 && _flagSpellForceTimer >= 10*MINUTE*IN_MILLISECONDS) //10 minutes
161 {
162 // Apply Stage 1 (Focused Assault)
164 player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
166 player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
168 }
169 else if (_flagDebuffState == 1 && _flagSpellForceTimer >= 15*MINUTE*IN_MILLISECONDS) //15 minutes
170 {
171 // Apply Stage 2 (Brutal Assault)
173 {
174 player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
175 player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
176 }
178 {
179 player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
180 player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
181 }
183 }
184 }
187 {
188 // Both flags are in base or awaiting respawn.
189 // Remove assault debuffs, reset timers
190
192 {
193 player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
194 player->RemoveAurasDueToSpell(WS_SPELL_BRUTAL_ASSAULT);
195 }
197 {
198 player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
199 player->RemoveAurasDueToSpell(WS_SPELL_BRUTAL_ASSAULT);
200 }
201
202 _flagSpellForceTimer = 0; //reset timer.
204 }
205 }
206}
207
221
240
242{
243 bool const isInBattleground = IsPlayerInBattleground(player->GetGUID());
245 if (!isInBattleground)
246 PlayerScores[player->GetGUID()] = new BattlegroundWGScore(player->GetGUID());
247}
248
250{
251 if (Team == ALLIANCE)
252 {
253 TC_LOG_DEBUG("bg.battleground", "Respawn Alliance flag");
255 }
256 else
257 {
258 TC_LOG_DEBUG("bg.battleground", "Respawn Horde flag");
260 }
261
262 if (captured)
263 {
264 //when map_update will be allowed for battlegrounds this code will be useless
268 PlaySoundToAll(BG_WS_SOUND_FLAGS_RESPAWNED); // flag respawned sound...
269 }
270 _bothFlagsKept = false;
271}
272
274{
276 return;
277
278 RespawnFlag(team, false);
279 if (team == ALLIANCE)
281 else
283
286
287 if (GameObject* obj = GetBgMap()->GetGameObject(GetDroppedFlagGUID(team)))
288 obj->Delete();
289 else
290 TC_LOG_ERROR("bg.battleground", "unknown dropped flag ({})", GetDroppedFlagGUID(team).ToString());
291
293 _bothFlagsKept = false;
294 // Check opposing flag if it is in capture zone; if so, capture it
296}
297
299{
301 return;
302
303 uint32 winner = 0;
304
306 if (player->GetTeam() == ALLIANCE)
307 {
308 if (!IsHordeFlagPickedup())
309 return;
310 SetHordeFlagPicker(ObjectGuid::Empty); // must be before aura remove to prevent 2 events (drop+capture) at the same time
311 // horde flag in base (but not respawned yet)
313 // Drop Horde Flag from Player
315 if (_flagDebuffState == 1)
317 else if (_flagDebuffState == 2)
319
321 AddPoint(ALLIANCE, 1);
324 }
325 else
326 {
328 return;
329 SetAllianceFlagPicker(ObjectGuid::Empty); // must be before aura remove to prevent 2 events (drop+capture) at the same time
330 // alliance flag in base (but not respawned yet)
332 // Drop Alliance Flag from Player
334 if (_flagDebuffState == 1)
336 else if (_flagDebuffState == 2)
338
340 AddPoint(HORDE, 1);
343 }
344 //for flag capture is reward 2 honorable kills
346
349
350 if (player->GetTeam() == ALLIANCE)
352 else
354
355 UpdateFlagState(player->GetTeam(), 1); // flag state none
356 UpdateTeamScore(player->GetTeamId());
357 // only flag capture should be updated
358 UpdatePlayerScore(player, SCORE_FLAG_CAPTURES, 1); // +1 flag captures
359
360 // update last flag capture to be used if teamscore is equal
361 SetLastFlagCapture(player->GetTeam());
362
364 winner = ALLIANCE;
365
367 winner = HORDE;
368
369 if (winner)
370 {
376
378 EndBattleground(winner);
379 }
380 else
381 {
383 }
384}
386{
388 uint32 areaTrigger = team == TEAM_ALLIANCE ? 3647 : 3646;
389 if (flagCarrier && flagCarrier->IsInAreaTriggerRadius(sAreaTriggerStore.LookupEntry(areaTrigger)))
390 EventPlayerCapturedFlag(flagCarrier);
391}
392
394{
396 {
397 // if not running, do not cast things at the dropper player (prevent spawning the "dropped" flag), neither send unnecessary messages
398 // just take off the aura
399 if (player->GetTeam() == ALLIANCE)
400 {
401 if (!IsHordeFlagPickedup())
402 return;
403
404 if (GetFlagPickerGUID(TEAM_HORDE) == player->GetGUID())
405 {
408 }
409 }
410 else
411 {
413 return;
414
415 if (GetFlagPickerGUID(TEAM_ALLIANCE) == player->GetGUID())
416 {
419 }
420 }
421 return;
422 }
423
424 bool set = false;
425
426 if (player->GetTeam() == ALLIANCE)
427 {
428 if (!IsHordeFlagPickedup())
429 return;
430 if (GetFlagPickerGUID(TEAM_HORDE) == player->GetGUID())
431 {
434 if (_flagDebuffState == 1)
436 else if (_flagDebuffState == 2)
439 player->CastSpell(player, BG_WS_SPELL_WARSONG_FLAG_DROPPED, true);
440 set = true;
441 }
442 }
443 else
444 {
446 return;
447 if (GetFlagPickerGUID(TEAM_ALLIANCE) == player->GetGUID())
448 {
451 if (_flagDebuffState == 1)
453 else if (_flagDebuffState == 2)
456 player->CastSpell(player, BG_WS_SPELL_SILVERWING_FLAG_DROPPED, true);
457 set = true;
458 }
459 }
460
461 if (set)
462 {
463 player->CastSpell(player, SPELL_RECENTLY_DROPPED_FLAG, true);
464 UpdateFlagState(player->GetTeam(), 1);
465
466 if (player->GetTeam() == ALLIANCE)
467 {
470 }
471 else
472 {
475 }
476
478 }
479}
480
482{
484 return;
485
486 //alliance flag picked up from base
488 && BgObjects[BG_WS_OBJECT_A_FLAG] == target_obj->GetGUID())
489 {
495 //update world state to show correct flag carrier
498 player->CastSpell(player, BG_WS_SPELL_SILVERWING_FLAG, true);
501 _bothFlagsKept = true;
502
503 if (_flagDebuffState == 1)
504 player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
505 else if (_flagDebuffState == 2)
506 player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
507 }
508
509 //horde flag picked up from base
511 && BgObjects[BG_WS_OBJECT_H_FLAG] == target_obj->GetGUID())
512 {
516 SetHordeFlagPicker(player->GetGUID());
518 //update world state to show correct flag carrier
521 player->CastSpell(player, BG_WS_SPELL_WARSONG_FLAG, true);
524 _bothFlagsKept = true;
525
526 if (_flagDebuffState == 1)
527 player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
528 else if (_flagDebuffState == 2)
529 player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
530 }
531
532 //Alliance flag on ground(not in base) (returned or picked up again from ground!)
533 if (GetFlagState(ALLIANCE) == BG_WS_FLAG_STATE_ON_GROUND && player->IsWithinDistInMap(target_obj, 10)
535 {
536 if (player->GetTeam() == ALLIANCE)
537 {
540 RespawnFlag(ALLIANCE, false);
544 _bothFlagsKept = false;
545 HandleFlagRoomCapturePoint(TEAM_HORDE); // Check Horde flag if it is in capture zone; if so, capture it
546 }
547 else
548 {
553 player->CastSpell(player, BG_WS_SPELL_SILVERWING_FLAG, true);
556 if (_flagDebuffState == 1)
557 player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
558 else if (_flagDebuffState == 2)
559 player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
561 }
562 //called in HandleGameObjectUseOpcode:
563 //target_obj->Delete();
564 }
565
566 //Horde flag on ground(not in base) (returned or picked up again)
567 if (GetFlagState(HORDE) == BG_WS_FLAG_STATE_ON_GROUND && player->IsWithinDistInMap(target_obj, 10)
569 {
570 if (player->GetTeam() == HORDE)
571 {
574 RespawnFlag(HORDE, false);
578 _bothFlagsKept = false;
579 HandleFlagRoomCapturePoint(TEAM_ALLIANCE); // Check Alliance flag if it is in capture zone; if so, capture it
580 }
581 else
582 {
586 SetHordeFlagPicker(player->GetGUID());
587 player->CastSpell(player, BG_WS_SPELL_WARSONG_FLAG, true);
590 if (_flagDebuffState == 1)
591 player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
592 else if (_flagDebuffState == 2)
593 player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
595 }
596 //called in HandleGameObjectUseOpcode:
597 //target_obj->Delete();
598 }
599
601}
602
604{
605 // sometimes flag aura not removed :(
607 {
608 if (!player)
609 {
610 TC_LOG_ERROR("bg.battleground", "BattlegroundWS: Removing offline player who has the FLAG!!");
612 RespawnFlag(ALLIANCE, false);
613 }
614 else
616 }
618 {
619 if (!player)
620 {
621 TC_LOG_ERROR("bg.battleground", "BattlegroundWS: Removing offline player who has the FLAG!!");
623 RespawnFlag(HORDE, false);
624 }
625 else
627 }
628}
629
637
645
647{
649 return;
650
651 //uint32 SpellId = 0;
652 //uint64 buff_guid = 0;
653 switch (trigger)
654 {
655 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().
656 //buff_guid = BgObjects[BG_WS_OBJECT_SPEEDBUFF_1];
657 break;
658 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().
659 //buff_guid = BgObjects[BG_WS_OBJECT_SPEEDBUFF_2];
660 break;
661 case 3706: // Alliance elixir of regeneration spawn
662 //buff_guid = BgObjects[BG_WS_OBJECT_REGENBUFF_1];
663 break;
664 case 3708: // Horde elixir of regeneration spawn
665 //buff_guid = BgObjects[BG_WS_OBJECT_REGENBUFF_2];
666 break;
667 case 3707: // Alliance elixir of berserk spawn
668 //buff_guid = BgObjects[BG_WS_OBJECT_BERSERKBUFF_1];
669 break;
670 case 3709: // Horde elixir of berserk spawn
671 //buff_guid = BgObjects[BG_WS_OBJECT_BERSERKBUFF_2];
672 break;
673 case 3646: // Alliance Flag spawn
675 if (GetFlagPickerGUID(TEAM_HORDE) == player->GetGUID())
677 break;
678 case 3647: // Horde Flag spawn
680 if (GetFlagPickerGUID(TEAM_ALLIANCE) == player->GetGUID())
682 break;
683 case 3649: // unk1
684 case 3688: // unk2
685 case 4628: // unk3
686 case 4629: // unk4
687 break;
688 default:
689 Battleground::HandleAreaTrigger(player, trigger);
690 break;
691 }
692
693 //if (buff_guid)
694 // HandleTriggerBuff(buff_guid, player);
695}
696
698{
699 // flags
700 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)
701 || !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)
702 // buffs
703 || !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)
704 || !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)
705 || !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)
706 || !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)
707 || !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)
708 || !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)
709 // alliance gates
710 || !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)
711 || !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)
712 || !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)
713 || !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)
714 || !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)
715 || !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)
716 // horde gates
717 || !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)
718 || !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)
719 || !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)
720 || !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)
721)
722 {
723 TC_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn some object Battleground not created!");
724 return false;
725 }
726
728 if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_ALLIANCE, sg->Loc.X, sg->Loc.Y, sg->Loc.Z, 3.124139f, TEAM_ALLIANCE))
729 {
730 TC_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn Alliance spirit guide! Battleground not created!");
731 return false;
732 }
733
735 if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_HORDE, sg->Loc.X, sg->Loc.Y, sg->Loc.Z, 3.193953f, TEAM_HORDE))
736 {
737 TC_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn Horde spirit guide! Battleground not created!");
738 return false;
739 }
740
741 TC_LOG_DEBUG("bg.battleground", "BatteGroundWS: BG objects and spirit guides spawned");
742
743 return true;
744}
745
782
796
798{
800 return;
801
803
804 Battleground::HandleKillPlayer(player, killer);
805}
806
807bool BattlegroundWS::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
808{
809 if (!Battleground::UpdatePlayerScore(player, type, value, doAddHonor))
810 return false;
811
812 switch (type)
813 {
814 case SCORE_FLAG_CAPTURES: // flags captured
816 break;
817 case SCORE_FLAG_RETURNS: // flags returned
819 break;
820 default:
821 break;
822 }
823 return true;
824}
825
827{
828 //if status in progress, it returns main graveyards with spiritguides
829 //else it will return the graveyard in the flagroom - this is especially good
830 //if a player dies in preparation phase - then the player can't cheat
831 //and teleport to the graveyard outside the flagroom
832 //and start running around, while the doors are still closed
833 if (player->GetTeam() == ALLIANCE)
834 {
837 else
839 }
840 else
841 {
844 else
846 }
847}
848
850{
853
855 packet.Worldstates.emplace_back(BG_WS_FLAG_UNK_ALLIANCE, uint32(-1)); // ??
857 packet.Worldstates.emplace_back(BG_WS_FLAG_UNK_ALLIANCE, 1);
858 else
859 packet.Worldstates.emplace_back(BG_WS_FLAG_UNK_ALLIANCE, 0);
860
862 packet.Worldstates.emplace_back(BG_WS_FLAG_UNK_HORDE, uint32(-1)); // ??
864 packet.Worldstates.emplace_back(BG_WS_FLAG_UNK_HORDE, 1);
865 else
866 packet.Worldstates.emplace_back(BG_WS_FLAG_UNK_HORDE, 0);
867
869
871 {
872 packet.Worldstates.emplace_back(BG_WS_STATE_TIMER_ACTIVE, 1);
873 packet.Worldstates.emplace_back(BG_WS_STATE_TIMER, 25 - _minutesElapsed);
874 }
875 else
876 packet.Worldstates.emplace_back(BG_WS_STATE_TIMER_ACTIVE, 0);
877
879 packet.Worldstates.emplace_back(BG_WS_FLAG_STATE_HORDE, 2);
880 else
881 packet.Worldstates.emplace_back(BG_WS_FLAG_STATE_HORDE, 1);
882
884 packet.Worldstates.emplace_back(BG_WS_FLAG_STATE_ALLIANCE, 2);
885 else
886 packet.Worldstates.emplace_back(BG_WS_FLAG_STATE_ALLIANCE, 1);
887}
888
898
899bool BattlegroundWS::CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* player, Unit const* target, uint32 miscValue)
900{
901 switch (criteriaId)
902 {
904 if (target)
905 if (Player const* playerTarget = target->ToPlayer())
906 return GetFlagState(playerTarget->GetTeam()) == BG_WS_FLAG_STATE_ON_BASE;
907 return false;
908 }
909
910 return Battleground::CheckAchievementCriteriaMeet(criteriaId, player, target, miscValue);
911}
#define sBattlegroundMgr
@ SCORE_FLAG_CAPTURES
@ SCORE_FLAG_RETURNS
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_WS_TEXT_START_HALF_MINUTE
@ BG_WS_TEXT_HORDE_FLAG_PICKED_UP
@ BG_WS_TEXT_ALLIANCE_FLAG_DROPPED
@ BG_WS_TEXT_ALLIANCE_FLAG_RETURNED
@ BG_WS_TEXT_ALLIANCE_FLAG_PICKED_UP
@ BG_WS_TEXT_CAPTURED_HORDE_FLAG
@ BG_WS_TEXT_BATTLE_HAS_BEGUN
@ BG_WS_TEXT_CAPTURED_ALLIANCE_FLAG
@ BG_WS_TEXT_HORDE_FLAG_DROPPED
@ BG_WS_TEXT_START_ONE_MINUTE
@ BG_WS_TEXT_HORDE_FLAG_RETURNED
@ BG_WS_TEXT_FLAGS_PLACED
@ 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
@ 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
@ STATUS_IN_PROGRESS
@ BG_STARTING_EVENT_THIRD
@ BG_STARTING_EVENT_SECOND
@ BG_STARTING_EVENT_FOURTH
@ IN_MILLISECONDS
Definition Common.h:35
@ MINUTE
Definition Common.h:29
@ ACHIEVEMENT_TIMED_TYPE_EVENT
Definition DBCEnums.h:122
@ ACHIEVEMENT_TIMED_TYPE_SPELL_TARGET
Definition DBCEnums.h:125
@ ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE
Definition DBCEnums.h:156
DBCStorage< WorldSafeLocsEntry > sWorldSafeLocsStore(WorldSafeLocsEntryfmt)
DBCStorage< AreaTriggerEntry > sAreaTriggerStore(AreaTriggerEntryfmt)
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
#define TC_LOG_DEBUG(filterType__,...)
Definition Log.h:156
#define TC_LOG_ERROR(filterType__,...)
Definition Log.h:165
@ TEAM_ALLIANCE
@ TEAM_HORDE
@ ALLIANCE
@ HORDE
@ CHAT_MSG_BG_SYSTEM_ALLIANCE
@ CHAT_MSG_BG_SYSTEM_HORDE
@ CHAT_MSG_BG_SYSTEM_NEUTRAL
@ AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT
void EventPlayerClickedOnFlag(Player *player, GameObject *target_obj) override
int32 _flagsDropTimer[2]
void AddPoint(uint32 TeamID, uint32 Points=1)
bool IsHordeFlagPickedup() const
void UpdateTeamScore(uint32 team)
WorldSafeLocsEntry const * GetClosestGraveyard(Player *player) override
void StartingEventCloseDoors() override
void SetDroppedFlagGUID(ObjectGuid guid, int32 team=-1) override
ObjectGuid m_DroppedFlagGUID[2]
ObjectGuid GetDroppedFlagGUID(uint32 TeamID)
bool IsAllianceFlagPickedup() const
uint32 m_ReputationCapture
void HandleKillPlayer(Player *player, Player *killer) override
void SetLastFlagCapture(uint32 team)
void Reset() override
void UpdateFlagState(uint32 team, uint32 value)
void SetAllianceFlagPicker(ObjectGuid guid)
void RespawnFlag(uint32 Team, bool captured)
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates &packet) override
bool SetupBattleground() override
bool UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true) override
ObjectGuid GetFlagPickerGUID(int32 team) const override
bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const *source, Unit const *target=nullptr, uint32 miscvalue1=0) override
ObjectGuid m_FlagKeepers[2]
void EndBattleground(uint32 winner) override
uint32 _lastFlagCaptureTeam
void EventPlayerCapturedFlag(Player *player)
void PostUpdateImpl(uint32 diff) override
Post-update hook.
void RemovePlayer(Player *player, ObjectGuid guid, uint32 team) override
uint8 GetFlagState(uint32 team)
void SetHordeFlagPicker(ObjectGuid guid)
void HandleFlagRoomCapturePoint(int32 team)
void StartingEventOpenDoors() override
void AddPlayer(Player *player) override
void RespawnFlagAfterDrop(uint32 Team)
uint32 GetPrematureWinner() override
void HandleAreaTrigger(Player *player, uint32 trigger) override
void EventPlayerDroppedFlag(Player *player) override
virtual void AddPlayer(Player *player)
BattlegroundTypeId GetTypeID(bool GetRandom=false) const
virtual 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()
virtual 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, GOState goState=GO_STATE_READY)
GuidVector BgObjects
BattlegroundMap * GetBgMap() const
virtual bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, TeamId teamId=TEAM_NEUTRAL)
void DoorClose(uint32 type)
int32 m_TeamScores[PVP_TEAMS_COUNT]
GuidVector BgCreatures
bool IsPlayerInBattleground(ObjectGuid guid) const
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
uint32 GetStartTime() const
BattlegroundScoreMap PlayerScores
void RewardHonorToTeam(uint32 Honor, uint32 TeamID)
BattlegroundStatus GetStatus() const
virtual bool UpdatePlayerScore(Player *player, uint32 type, uint32 value, bool doAddHonor=true)
virtual void HandleAreaTrigger(Player *, uint32)
uint32 GetTeamScore(uint32 TeamID) const
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
virtual bool CheckAchievementCriteriaMeet(uint32, Player const *, Unit const *=nullptr, uint32=0)
void UpdateWorldState(uint32 variable, uint32 value)
uint32 GetBonusHonorFromKill(uint32 kills) const
void RewardReputationToTeam(uint32 faction_id, uint32 Reputation, uint32 TeamID)
void PlaySoundToAll(uint32 soundID)
virtual uint32 GetPrematureWinner()
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:102
static ObjectGuid const Empty
Definition ObjectGuid.h:140
void Clear()
Definition ObjectGuid.h:150
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
static Player * ToPlayer(Object *o)
Definition Object.h:180
uint32 GetTeam() const
Definition Player.h:1832
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry, uint32 timeLost=0)
Definition Player.cpp:24925
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, WorldObject *ref=nullptr)
Definition Player.cpp:24940
TeamId GetTeamId() const
Definition Player.h:1833
bool IsInAreaTriggerRadius(AreaTriggerEntry const *trigger) const
Definition Player.cpp:2176
Definition Unit.h:769
void RemoveAurasWithInterruptFlags(uint32 flag, uint32 except=0)
Definition Unit.cpp:4022
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3784
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition Object.cpp:1192
std::vector< WorldStateInfo > Worldstates
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
void BuildObjectivesBlock(WorldPackets::Battleground::PVPLogData_Player &playerData) override
DBCPosition3D Loc