Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
BattlefieldWG.h
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#ifndef BATTLEFIELD_WG_
7#define BATTLEFIELD_WG_
8
9#include "Battlefield.h"
10#include "ObjectAccessor.h"
11#include "World.h"
12#include "WorldPacket.h"
13
14class Group;
15class BattlefieldWG;
17
19struct WGWorkshop;
20
21typedef std::set<GameObject*> GameObjectSet;
22typedef std::set<BfWGGameObjectBuilding*> GameObjectBuilding;
23typedef std::set<WGWorkshop*> Workshop;
24typedef std::set<Group*> GroupSet;
25//typedef std::set<WintergraspCapturePoint *> CapturePointSet; unused ?
26
28{
29 BATTLEFIELD_WG_ZONEID = 4197, // Wintergrasp
30 BATTLEFIELD_WG_MAPID = 571 // Northrend
31};
32
76
89
109
121
132
133/*#########################
134 *####### Graveyards ######
135 *#########################*/
136
138{
139public:
141
142 void SetTextId(int32 textid) { m_GossipTextId = textid; }
143 int32 GetTextId() const { return m_GossipTextId; }
144protected:
146};
147
159
170
172{
176
178 BATTLEFIELD_WG_NPC_STONE_GUARD_MUKAR = 32296, // <WINTERGRASP QUARTERMASTER>
179 BATTLEFIELD_WG_NPC_HOODOO_MASTER_FU_JIN = 31101, // <MASTER HEXXER>
180 BATTLEFIELD_WG_NPC_CHAMPION_ROS_SLAI = 39173, // <WINTERGRASP QUARTERMASTER>
186
188 BATTLEFIELD_WG_NPC_KNIGHT_DAMERON = 32294, // <WINTERGRASP QUARTERMASTER>
189 BATTLEFIELD_WG_NPC_SORCERESS_KAYLANA = 31051, // <ENCHANTRESS>
190 BATTLEFIELD_WG_NPC_MARSHAL_MAGRUDER = 39172, // <WINTERGRASP QUARTERMASTER>
196
197 NPC_TAUNKA_SPIRIT_GUIDE = 31841, // Horde spirit guide for Wintergrasp
198 NPC_DWARVEN_SPIRIT_GUIDE = 31842, // Alliance spirit guide for Wintergrasp
199
205};
206
208{
209 float x;
210 float y;
211 float z;
212 float o;
215 int32 textid; // for gossip menu
217};
218
219uint32 const WGQuest[2][6] =
220{
221 { 13186, 13181, 13222, 13538, 13177, 13179 },
222 { 13185, 13183, 13223, 13539, 13178, 13180 },
223};
224// 7 in sql, 7 in header
226{
227 { 5104.750f, 2300.940f, 368.579f, 0.733038f, 1329, BATTLEFIELD_WG_GY_WORKSHOP_NE, BATTLEFIELD_WG_GOSSIPTEXT_GY_NE, TEAM_NEUTRAL },
228 { 5099.120f, 3466.036f, 368.484f, 5.317802f, 1330, BATTLEFIELD_WG_GY_WORKSHOP_NW, BATTLEFIELD_WG_GOSSIPTEXT_GY_NW, TEAM_NEUTRAL },
229 { 4314.648f, 2408.522f, 392.642f, 6.268125f, 1333, BATTLEFIELD_WG_GY_WORKSHOP_SE, BATTLEFIELD_WG_GOSSIPTEXT_GY_SE, TEAM_NEUTRAL },
230 { 4331.716f, 3235.695f, 390.251f, 0.008500f, 1334, BATTLEFIELD_WG_GY_WORKSHOP_SW, BATTLEFIELD_WG_GOSSIPTEXT_GY_SW, TEAM_NEUTRAL },
231 { 5537.986f, 2897.493f, 517.057f, 4.819249f, 1285, BATTLEFIELD_WG_GY_KEEP, BATTLEFIELD_WG_GOSSIPTEXT_GY_KEEP, TEAM_NEUTRAL },
232 { 5032.454f, 3711.382f, 372.468f, 3.971623f, 1331, BATTLEFIELD_WG_GY_HORDE, BATTLEFIELD_WG_GOSSIPTEXT_GY_HORDE, TEAM_HORDE },
233 { 5140.790f, 2179.120f, 390.950f, 1.972220f, 1332, BATTLEFIELD_WG_GY_ALLIANCE, BATTLEFIELD_WG_GOSSIPTEXT_GY_ALLIANCE, TEAM_ALLIANCE },
234};
235
236/* ######################### *
237 * WintergraspCapturePoint *
238 * ######################### */
239
241{
242public:
243 WintergraspCapturePoint(BattlefieldWG* battlefield, TeamId teamInControl);
244
245 void LinkToWorkshop(WGWorkshop* workshop) { m_Workshop = workshop; }
246
247 void ChangeTeam(TeamId oldteam);
248 TeamId GetTeam() const { return m_team; }
249
250protected:
252};
253
254/* ######################### *
255 * WinterGrasp Battlefield *
256 * ######################### */
257
259{
260public:
268 void OnBattleStart();
269
279 void OnBattleEnd(bool endByTimer);
280
285 void OnStartGrouping();
286
295 void OnPlayerJoinWar(Player* player);
296
302 void OnPlayerLeaveWar(Player* player);
303
308 void OnPlayerLeaveZone(Player* player);
309
316 void OnPlayerEnterZone(Player* player);
317
324 bool Update(uint32 diff);
325
330 void OnCreatureCreate(Creature* creature);
331
336 void OnCreatureRemove(Creature* creature);
337
342
347 void BrokenWallOrTower(TeamId team);
348
354
361
362 void DoCompleteOrIncrementAchievement(uint32 achievement, Player* player, uint8 incrementNumber = 1);
363
364 void RemoveAurasFromPlayer(Player* player);
365
369 bool SetupBattlefield();
370
373
375 void SetRelic(uint64 relicGUID) { m_titansRelicGUID = relicGUID; }
376
379
381 void SetRelicInteractible(bool allow) { m_isRelicInteractible = allow; }
382
384 void UpdateCounterVehicle(bool init);
385
386 void SendInitWorldStatesTo(Player* player);
389
390 void HandleKill(Player* killer, Unit* victim);
391 void OnUnitDeath(Unit* unit);
392 void PromotePlayer(Player* killer);
393
394 void UpdateTenacity();
395 void ProcessEvent(WorldObject* obj, uint32 eventId);
396
397 bool FindAndRemoveVehicleFromList(Unit* vehicle);
398
399 // returns the graveyardId in the specified area.
400 uint8 GetSpiritGraveyardId(uint32 areaId) const;
401
402 uint32 GetData(uint32 data) const;
403
404protected:
406
408
412
417
420
422};
423
424uint32 const VehNumWorldState[] = { 3680, 3490 };
425uint32 const MaxVehNumWorldState[] = { 3681, 3491 };
426uint32 const ClockWorldState[] = { 3781, 4354 };
427uint32 const WintergraspFaction[] = { 1732, 1735, 35 };
428float const WintergraspStalkerPos[] = { 4948.985f, 2937.789f, 550.5172f, 1.815142f };
429
430uint8 const WG_MAX_OBJ = 32;
437
447
461
471
481
488
516
540
550
551// *****************************************************
552// ************ Destructible (Wall, Tower..) ***********
553// *****************************************************
554
566
579
581{
582 // Wall (Not spawned in db)
583 // Entry WS X Y Z O type NameID
584 { 190219, 3749, 5371.46f, 3047.47f, 407.571f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
585 { 190220, 3750, 5331.26f, 3047.1f, 407.923f, 0.052359f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
586 { 191795, 3764, 5385.84f, 2909.49f, 409.713f, 0.00872f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
587 { 191796, 3772, 5384.45f, 2771.84f, 410.27f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
588 { 191799, 3762, 5371.44f, 2630.61f, 408.816f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
589 { 191800, 3766, 5301.84f, 2909.09f, 409.866f, 0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
590 { 191801, 3770, 5301.06f, 2771.41f, 409.901f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
591 { 191802, 3751, 5280.2f, 2995.58f, 408.825f, 1.61443f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
592 { 191803, 3752, 5279.14f, 2956.02f, 408.604f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
593 { 191804, 3767, 5278.69f, 2882.51f, 409.539f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
594 { 191806, 3769, 5279.5f, 2798.94f, 409.998f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
595 { 191807, 3759, 5279.94f, 2724.77f, 409.945f, 1.56207f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
596 { 191808, 3760, 5279.6f, 2683.79f, 409.849f, 1.55334f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
597 { 191809, 3761, 5330.96f, 2630.78f, 409.283f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
598 { 190369, 3753, 5256.08f, 2933.96f, 409.357f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
599 { 190370, 3758, 5257.46f, 2747.33f, 409.743f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
600 { 190371, 3754, 5214.96f, 2934.09f, 409.19f, -0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
601 { 190372, 3757, 5215.82f, 2747.57f, 409.188f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
602 { 190374, 3755, 5162.27f, 2883.04f, 410.256f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
603 { 190376, 3756, 5163.72f, 2799.84f, 409.227f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
604
605 // Tower of keep (Not spawned in db)
606 { 190221, 3711, 5281.15f, 3044.59f, 407.843f, 3.11539f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NW },
607 { 190373, 3713, 5163.76f, 2932.23f, 409.19f, 3.12412f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SW },
608 { 190377, 3714, 5166.4f, 2748.37f, 409.188f, -1.5708f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SE },
609 { 190378, 3712, 5281.19f, 2632.48f, 409.099f, -1.58825f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NE },
610
611 // Wall (with passage) (Not spawned in db)
612 { 191797, 3765, 5343.29f, 2908.86f, 409.576f, 0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
613 { 191798, 3771, 5342.72f, 2771.39f, 409.625f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
614 { 191805, 3768, 5279.13f, 2840.8f, 409.783f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 },
615
616 // South tower (Not spawned in db)
617 { 190356, 3704, 4557.17f, 3623.94f, 395.883f, 1.67552f, BATTLEFIELD_WG_OBJECTTYPE_TOWER, BATTLEFIELD_WG_TEXT_TOWER_NAME_W },
618 { 190357, 3705, 4398.17f, 2822.5f, 405.627f, -3.12412f, BATTLEFIELD_WG_OBJECTTYPE_TOWER, BATTLEFIELD_WG_TEXT_TOWER_NAME_S },
619 { 190358, 3706, 4459.1f, 1944.33f, 434.991f, -2.00276f, BATTLEFIELD_WG_OBJECTTYPE_TOWER, BATTLEFIELD_WG_TEXT_TOWER_NAME_E },
620
621 // Door of forteress (Not spawned in db)
622 { GO_WINTERGRASP_FORTRESS_GATE, 3763, 5162.99f, 2841.23f, 410.162f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_DOOR, 0 },
623
624 // Last door (Not spawned in db)
625 { GO_WINTERGRASP_VAULT_GATE, 3773, 5397.11f, 2841.54f, 425.899f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST, 0 },
626};
627
629{
630 { 5391.19f, 3060.8f, 419.616f, 1.69557f },
631 { 5266.75f, 2976.5f, 421.067f, 3.20354f },
632 { 5234.86f, 2948.8f, 420.88f, 1.61311f },
633 { 5323.05f, 2923.7f, 421.645f, 1.5817f },
634 { 5363.82f, 2923.87f, 421.709f, 1.60527f },
635 { 5264.04f, 2861.34f, 421.587f, 3.21142f },
636 { 5264.68f, 2819.78f, 421.656f, 3.15645f },
637 { 5322.16f, 2756.69f, 421.646f, 4.69978f },
638 { 5363.78f, 2756.77f, 421.629f, 4.78226f },
639 { 5236.2f, 2732.68f, 421.649f, 4.72336f },
640 { 5265.02f, 2704.63f, 421.7f, 3.12507f },
641 { 5350.87f, 2616.03f, 421.243f, 4.72729f },
642 { 5390.95f, 2615.5f, 421.126f, 4.6409f },
643 { 5148.8f, 2820.24f, 421.621f, 3.16043f },
644 { 5147.98f, 2861.93f, 421.63f, 3.18792f },
645};
646
647// Here there is all npc keeper spawn point
649{
650 // X Y Z O horde alliance
651 // North East
652 { 5326.203125f, 2660.026367f, 409.100891f, 2.543383f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Roaming Guard
653 { 5298.430176f, 2738.760010f, 409.316010f, 3.971740f, BATTLEFIELD_WG_NPC_VIERON_BLAZEFEATHER, BATTLEFIELD_WG_NPC_BOWYER_RANDOLPH }, // Vieron Blazefeather
654 { 5335.310059f, 2764.110107f, 409.274994f, 4.834560f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
655 { 5349.810059f, 2763.629883f, 409.333008f, 4.660030f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
656 // North
657 { 5373.470215f, 2789.060059f, 409.322998f, 2.600540f, BATTLEFIELD_WG_NPC_STONE_GUARD_MUKAR, BATTLEFIELD_WG_NPC_KNIGHT_DAMERON }, // Stone Guard Mukar
658 { 5296.560059f, 2789.870117f, 409.274994f, 0.733038f, BATTLEFIELD_WG_NPC_HOODOO_MASTER_FU_JIN, BATTLEFIELD_WG_NPC_SORCERESS_KAYLANA }, // Voodoo Master Fu'jin
659 { 5372.670000f, 2786.740000f, 409.442000f, 2.809980f, BATTLEFIELD_WG_NPC_CHAMPION_ROS_SLAI, BATTLEFIELD_WG_NPC_MARSHAL_MAGRUDER }, // Wintergrasp Quartermaster
660 { 5368.709961f, 2856.360107f, 409.322998f, 2.949610f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
661 { 5367.910156f, 2826.520020f, 409.322998f, 3.333580f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
662 { 5389.270020f, 2847.370117f, 418.759003f, 3.106690f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
663 { 5388.560059f, 2834.770020f, 418.759003f, 3.071780f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
664 { 5359.129883f, 2837.989990f, 409.364014f, 4.698930f, BATTLEFIELD_WG_NPC_COMMANDER_DARDOSH, BATTLEFIELD_WG_NPC_COMMANDER_ZANNETH }, // Commander Dardosh
665 { 5366.129883f, 2833.399902f, 409.322998f, 3.141590f, BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_KILRATH, BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_AHBRAMIS }, // Tactical Officer Kilrath
666 // X Y Z O horde alliance
667 // North West
668 { 5350.680176f, 2917.010010f, 409.274994f, 1.466080f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
669 { 5335.120117f, 2916.800049f, 409.444000f, 1.500980f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
670 { 5295.560059f, 2926.669922f, 409.274994f, 0.872665f, BATTLEFIELD_WG_NPC_SIEGESMITH_STRONGHOOF, BATTLEFIELD_WG_NPC_SIEGE_MASTER_STOUTHANDLE }, // Stronghoof
671 { 5371.399902f, 3026.510010f, 409.205994f, 3.250030f, BATTLEFIELD_WG_NPC_PRIMALIST_MULFORT, BATTLEFIELD_WG_NPC_ANCHORITE_TESSA }, // Primalist Mulfort
672 { 5392.123535f, 3031.110352f, 409.187683f, 3.677212f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Roaming Guard
673 // South
674 { 5270.060059f, 2847.550049f, 409.274994f, 3.071780f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
675 { 5270.160156f, 2833.479980f, 409.274994f, 3.124140f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
676 { 5179.109863f, 2837.129883f, 409.274994f, 3.211410f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
677 { 5179.669922f, 2846.600098f, 409.274994f, 3.089230f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
678 { 5234.970215f, 2883.399902f, 409.274994f, 4.293510f, BATTLEFIELD_WG_NPC_LIEUTENANT_MURP, BATTLEFIELD_WG_NPC_SENIOR_DEMOLITIONIST_LEGOSO }, // Lieutenant Murp
679 // X Y Z O horde alliance
680 // Portal guards (from around the fortress)
681 { 5319.209473f, 3055.947754f, 409.176636f, 1.020201f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
682 { 5311.612305f, 3061.207275f, 408.734161f, 0.965223f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
683 { 5264.713379f, 3017.283447f, 408.479706f, 3.482424f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
684 { 5269.096191f, 3008.315918f, 408.826294f, 3.843706f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
685 { 5201.414551f, 2945.096924f, 409.190735f, 0.945592f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
686 { 5193.386230f, 2949.617188f, 409.190735f, 1.145859f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
687 { 5148.116211f, 2904.761963f, 409.193756f, 3.368532f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
688 { 5153.355957f, 2895.501465f, 409.199310f, 3.549174f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
689 { 5154.353027f, 2787.349365f, 409.250183f, 2.555644f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
690 { 5150.066406f, 2777.876953f, 409.343903f, 2.708797f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
691 { 5193.706543f, 2732.882812f, 409.189514f, 4.845073f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
692 { 5202.126953f, 2737.570557f, 409.189514f, 5.375215f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
693 { 5269.181152f, 2671.174072f, 409.098999f, 2.457459f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
694 { 5264.960938f, 2662.332520f, 409.098999f, 2.598828f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
695 { 5307.111816f, 2616.006836f, 409.095734f, 5.355575f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
696 { 5316.770996f, 2619.430176f, 409.027740f, 5.363431f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A } // Standing Guard
697};
698
700{
701 { 5032.04f, 3681.79f, 362.980f, 4.210f, BATTLEFIELD_WG_NPC_VIERON_BLAZEFEATHER, 0 },
702 { 5020.71f, 3626.19f, 360.150f, 4.640f, BATTLEFIELD_WG_NPC_HOODOO_MASTER_FU_JIN, 0 },
703 { 4994.85f, 3660.51f, 359.150f, 2.260f, BATTLEFIELD_WG_NPC_COMMANDER_DARDOSH, 0 },
704 { 5015.46f, 3677.11f, 362.970f, 6.009f, BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_KILRATH, 0 },
705 { 5031.12f, 3663.77f, 363.500f, 3.110f, BATTLEFIELD_WG_NPC_SIEGESMITH_STRONGHOOF, 0 },
706 { 5042.74f, 3675.82f, 363.060f, 3.358f, BATTLEFIELD_WG_NPC_PRIMALIST_MULFORT, 0 },
707 { 5014.45f, 3640.87f, 361.390f, 3.280f, BATTLEFIELD_WG_NPC_LIEUTENANT_MURP, 0 },
708 { 5100.07f, 2168.89f, 365.779f, 1.972f, 0, BATTLEFIELD_WG_NPC_BOWYER_RANDOLPH },
709 { 5081.70f, 2173.73f, 365.878f, 0.855f, 0, BATTLEFIELD_WG_NPC_SORCERESS_KAYLANA },
710 { 5078.28f, 2183.70f, 365.029f, 1.466f, 0, BATTLEFIELD_WG_NPC_COMMANDER_ZANNETH },
711 { 5088.49f, 2188.18f, 365.647f, 5.253f, 0, BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_AHBRAMIS },
712 { 5095.67f, 2193.28f, 365.924f, 4.939f, 0, BATTLEFIELD_WG_NPC_SIEGE_MASTER_STOUTHANDLE },
713 { 5088.61f, 2167.66f, 365.689f, 0.680f, 0, BATTLEFIELD_WG_NPC_ANCHORITE_TESSA },
714 { 5080.40f, 2199.00f, 359.489f, 2.967f, 0, BATTLEFIELD_WG_NPC_SENIOR_DEMOLITIONIST_LEGOSO },
715};
716
718{
720 float x;
721 float y;
722 float z;
723 float o;
724};
725
727{
728 // Player teleporter
729 { 190763, 5153.41f, 2901.35f, 409.191f, -0.069f },
730 { 190763, 5268.70f, 2666.42f, 409.099f, -0.715f },
731 { 190763, 5197.05f, 2944.81f, 409.191f, 2.3387f },
732 { 190763, 5196.67f, 2737.34f, 409.189f, -2.932f },
733 { 190763, 5314.58f, 3055.85f, 408.862f, 0.5410f },
734 { 190763, 5391.28f, 2828.09f, 418.675f, -2.164f },
735 { 190763, 5153.93f, 2781.67f, 409.246f, 1.6580f },
736 { 190763, 5311.44f, 2618.93f, 409.092f, -2.373f },
737 { 190763, 5269.21f, 3013.84f, 408.828f, -1.762f },
738 { 190763, 5401.62f, 2853.66f, 418.674f, 2.6354f },
739 // Vehicle teleporter
740 { 192951, 5314.51f, 2703.69f, 408.550f, -0.890f },
741 { 192951, 5316.25f, 2977.04f, 408.539f, -0.820f },
742};
743
744// *********************************************************
745// **********Tower Element(GameObject, Creature)************
746// *********************************************************
747
749{
750 uint32 towerEntry; // Gameobject id of tower
751 uint8 nbObject; // Number of gameobjects spawned on this point
752 WintergraspObjectPositionData GameObject[6]; // Gameobject position and entry (Horde/Alliance)
753
754 // Creature: Turrets and Guard /// @todo: Killed on Tower destruction ? Tower damage ? Requires confirming
759};
760
762// 192414 : 0 in sql, 1 in header
763// 192278 : 0 in sql, 3 in header
765{
766 // West tower
767 {
768 190356,
769 6,
770 {
771 { 4559.109863f, 3606.219971f, 419.998993f, -1.483530f, 192488, 192501 }, // Flag on tower
772 { 4539.419922f, 3622.489990f, 420.033997f, -3.071770f, 192488, 192501 }, // Flag on tower
773 { 4555.259766f, 3641.649902f, 419.973999f, 1.675510f, 192488, 192501 }, // Flag on tower
774 { 4574.870117f, 3625.909912f, 420.079010f, 0.080117f, 192488, 192501 }, // Flag on tower
775 { 4433.899902f, 3534.139893f, 360.274994f, -1.850050f, 192269, 192278 }, // Flag near workshop
776 { 4572.930176f, 3475.520020f, 363.009003f, 1.42240f, 192269, 192278 } // Flag near bridge
777 },
778 1,
779 {
780 { 4418.688477f, 3506.251709f, 358.975494f, 4.293305f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Roaming Guard
781 { 0, 0, 0, 0, 0, 0 },
782 { 0, 0, 0, 0, 0, 0 },
783 { 0, 0, 0, 0, 0, 0 },
784 { 0, 0, 0, 0, 0, 0 },
785 { 0, 0, 0, 0, 0, 0 },
786 { 0, 0, 0, 0, 0, 0 },
787 { 0, 0, 0, 0, 0, 0 },
788 { 0, 0, 0, 0, 0, 0 },
789 },
790 0,
791 {
792 { 0, 0, 0, 0, 0, 0 },
793 { 0, 0, 0, 0, 0, 0 },
794 { 0, 0, 0, 0, 0, 0 },
795 { 0, 0, 0, 0, 0, 0 },
796 { 0, 0, 0, 0, 0, 0 },
797 }
798 },
799
800 // South Tower
801 {
802 190357,
803 5,
804 {
805 { 4416.000000f, 2822.669922f, 429.851013f, -0.017452f, 192488, 192501 }, // Flag on tower
806 { 4398.819824f, 2804.699951f, 429.791992f, -1.588250f, 192488, 192501 }, // Flag on tower
807 { 4387.620117f, 2719.570068f, 389.934998f, -1.544620f, 192366, 192414 }, // Flag near tower
808 { 4464.120117f, 2855.449951f, 406.110992f, 0.829032f, 192366, 192429 }, // Flag near tower
809 { 4526.459961f, 2810.179932f, 391.200012f, -2.993220f, 192269, 192278 }, // Flag near bridge
810 { 0, 0, 0, 0, 0, 0 },
811 },
812 6,
813 {
814 { 4452.859863f, 2808.870117f, 402.604004f, 6.056290f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
815 { 4455.899902f, 2835.958008f, 401.122559f, 0.034907f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
816 { 4412.649414f, 2953.792236f, 374.799957f, 0.980838f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Roaming Guard
817 { 4362.089844f, 2811.510010f, 407.337006f, 3.193950f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
818 { 4412.290039f, 2753.790039f, 401.015015f, 5.829400f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
819 { 4421.939941f, 2773.189941f, 400.894989f, 5.707230f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
820 { 0, 0, 0, 0, 0, 0},
821 { 0, 0, 0, 0, 0, 0},
822 { 0, 0, 0, 0, 0, 0},
823 },
824 0,
825 {
826 { 0, 0, 0, 0, 0, 0 },
827 { 0, 0, 0, 0, 0, 0 },
828 { 0, 0, 0, 0, 0, 0 },
829 { 0, 0, 0, 0, 0, 0 },
830 { 0, 0, 0, 0, 0, 0 },
831 },
832 },
833
834 // East Tower
835 {
836 190358,
837 4,
838 {
839 { 4466.790039f, 1960.420044f, 459.144012f, 1.151920f, 192488, 192501 }, // Flag on tower
840 { 4475.350098f, 1937.030029f, 459.070007f, -0.43633f, 192488, 192501 }, // Flag on tower
841 { 4451.759766f, 1928.099976f, 459.075989f, -2.00713f, 192488, 192501 }, // Flag on tower
842 { 4442.990234f, 1951.900024f, 459.092987f, 2.740160f, 192488, 192501 }, // Flag on tower
843 { 0, 0, 0, 0, 0, 0 },
844 { 0, 0, 0, 0, 0, 0 },
845 },
846 5,
847 {
848 { 4501.060059f, 1990.280029f, 431.157013f, 1.029740f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
849 { 4463.830078f, 2015.180054f, 430.299988f, 1.431170f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
850 { 4494.580078f, 1943.760010f, 435.627014f, 6.195920f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
851 { 4450.149902f, 1897.579956f, 435.045013f, 4.398230f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
852 { 4428.870117f, 1906.869995f, 432.648010f, 3.996800f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A }, // Standing Guard
853 { 0, 0, 0, 0, 0, 0 },
854 { 0, 0, 0, 0, 0, 0 },
855 { 0, 0, 0, 0, 0, 0 },
856 { 0, 0, 0, 0, 0, 0 },
857 },
858 0,
859 {
860 { 0, 0, 0, 0, 0, 0 },
861 { 0, 0, 0, 0, 0, 0 },
862 { 0, 0, 0, 0, 0, 0 },
863 { 0, 0, 0, 0, 0, 0 },
864 { 0, 0, 0, 0, 0, 0 },
865 },
866 },
867};
868
877
879
881{
882 {
883 190221,
884 0,
885 {
886 { 0, 0, 0, 0 },
887 { 0, 0, 0, 0 },
888 { 0, 0, 0, 0 },
889 { 0, 0, 0, 0 },
890 { 0, 0, 0, 0 },
891 },
892 2,
893 {
894 { 5255.88f, 3047.63f, 438.499f, 3.13677f },
895 { 5280.9f, 3071.32f, 438.499f, 1.62879f },
896 { 0, 0, 0, 0 },
897 { 0, 0, 0, 0 },
898 { 0, 0, 0, 0 },
899 },
900 },
901 {
902 190373,
903 0,
904 {
905 { 0, 0, 0, 0 },
906 { 0, 0, 0, 0 },
907 { 0, 0, 0, 0 },
908 { 0, 0, 0, 0 },
909 { 0, 0, 0, 0 },
910 },
911 2,
912 {
913 { 5138.59f, 2935.16f, 439.845f, 3.11723f },
914 { 5163.06f, 2959.52f, 439.846f, 1.47258f },
915 { 0, 0, 0, 0 },
916 { 0, 0, 0, 0 },
917 { 0, 0, 0, 0 },
918 },
919 },
920 {
921 190377,
922 0,
923 {
924 { 0, 0, 0, 0 },
925 { 0, 0, 0, 0 },
926 { 0, 0, 0, 0 },
927 { 0, 0, 0, 0 },
928 { 0, 0, 0, 0 },
929 },
930 2,
931 {
932 { 5163.84f, 2723.74f, 439.844f, 1.3994f },
933 { 5139.69f, 2747.4f, 439.844f, 3.17221f },
934 { 0, 0, 0, 0 },
935 { 0, 0, 0, 0 },
936 { 0, 0, 0, 0 },
937 },
938 },
939 {
940 190378,
941 0,
942 {
943 { 0, 0, 0, 0 },
944 { 0, 0, 0, 0 },
945 { 0, 0, 0, 0 },
946 { 0, 0, 0, 0 },
947 { 0, 0, 0, 0 },
948 },
949 2,
950 {
951 { 5278.21f, 2607.23f, 439.755f, 4.71944f },
952 { 5255.01f, 2631.98f, 439.755f, 3.15257f },
953 { 0, 0, 0, 0 },
954 { 0, 0, 0, 0 },
955 { 0, 0, 0, 0 },
956 },
957 },
958 {
959 190356,
960 2,
961 {
962 {4537.380371f, 3599.531738f, 402.886993f, 3.998462f},
963 {4581.497559f, 3604.087158f, 402.886963f, 5.651723f},
964 {0, 0, 0, 0},
965 {0, 0, 0, 0},
966 {0, 0, 0, 0},
967 },
968 2,
969 {
970 {4469.448242f, 1966.623779f, 465.647217f, 1.153573f},
971 {4581.895996f, 3626.438477f, 426.539062f, 0.117806f},
972 {0, 0, 0, 0},
973 {0, 0, 0, 0},
974 {0, 0, 0, 0},
975 },
976 },
977 {
978 190357,
979 2,
980 {
981 { 4421.640137f, 2799.935791f, 412.630920f, 5.459298f },
982 { 4420.263184f, 2845.340332f, 412.630951f, 0.742197f },
983 { 0, 0, 0, 0 },
984 { 0, 0, 0, 0 },
985 { 0, 0, 0, 0 },
986 },
987 3,
988 {
989 { 4423.430664f, 2822.762939f, 436.283142f, 6.223487f },
990 { 4397.825684f, 2847.629639f, 436.283325f, 1.579430f },
991 { 4398.814941f, 2797.266357f, 436.283051f, 4.703747f },
992 { 0, 0, 0, 0 },
993 { 0, 0, 0, 0 },
994 },
995 },
996 {
997 190358,
998 2,
999 {
1000 { 4448.138184f, 1974.998779f, 441.995911f, 1.967238f },
1001 { 4448.713379f, 1955.148682f, 441.995178f, 0.380733f },
1002 { 0, 0, 0, 0 },
1003 { 0, 0, 0, 0 },
1004 { 0, 0, 0, 0 },
1005 },
1006 2,
1007 {
1008 { 4469.448242f, 1966.623779f, 465.647217f, 1.153573f },
1009 { 4481.996582f, 1933.658325f, 465.647186f, 5.873029f },
1010 { 0, 0, 0, 0 },
1011 { 0, 0, 0, 0 },
1012 { 0, 0, 0, 0 },
1013 },
1014 },
1015};
1016
1017// *********************************************************
1018// *****************WorkShop Data & Element*****************
1019// *********************************************************
1020
1027
1043
1044// ********************************************************************
1045// * Structs using for Building, Graveyard, Workshop *
1046// ********************************************************************
1047// Structure for different buildings that can be destroyed during battle
1049{
1051 {
1052 m_WG = WG;
1053 m_Team = 0;
1054 m_BuildGUID = 0;
1055 m_Type = 0;
1056 m_WorldState = 0;
1057 m_State = 0;
1058 m_NameId = 0;
1059 }
1060
1061 // the team that controls this point
1063
1064 // WG object
1066
1067 // Linked gameobject
1069
1070 // eWGGameObjectBuildingType
1072
1073 // WorldState
1075
1076 // eWGGameObjectState
1078
1079 // Name id for warning text
1081
1082 // GameObject associations
1084
1085 // Creature associations
1090
1091 void Rebuild()
1092 {
1093 switch (m_Type)
1094 {
1099 m_Team = m_WG->GetDefenderTeam(); // Objects that are part of the keep should be the defender's
1100 break;
1102 m_Team = m_WG->GetAttackerTeam(); // The towers in the south should be the attacker's
1103 break;
1104 default:
1106 break;
1107 }
1108
1109 if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
1110 {
1111 // Rebuild gameobject
1112 if (build->IsDestructibleBuilding())
1113 {
1114 build->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING, NULL, true);
1115 if (build->GetEntry() == GO_WINTERGRASP_VAULT_GATE)
1117 go->SetGoState(GOState::GO_STATE_READY);
1118
1119 // Update worldstate
1121 m_WG->SendUpdateWorldState(m_WorldState, m_State);
1122 }
1125 }
1126 }
1127
1128 // Called when associated gameobject is damaged
1129 void Damaged()
1130 {
1131 // Update worldstate
1133 m_WG->SendUpdateWorldState(m_WorldState, m_State);
1134
1135 // Send warning message
1136 if (m_NameId) // tower damage + name
1137 m_WG->SendWarningToAllInZone(m_NameId);
1138
1139 for (GuidSet::const_iterator itr = m_CreatureTopList[m_WG->GetAttackerTeam()].begin(); itr != m_CreatureTopList[m_WG->GetAttackerTeam()].end(); ++itr)
1140 if (Creature* creature = m_WG->GetCreature(*itr))
1141 m_WG->HideNpc(creature);
1142
1143 for (GuidSet::const_iterator itr = m_TurretTopList.begin(); itr != m_TurretTopList.end(); ++itr)
1144 if (Creature* creature = m_WG->GetCreature(*itr))
1145 m_WG->HideNpc(creature);
1146
1148 m_WG->UpdateDamagedTowerCount(m_WG->GetDefenderTeam());
1150 m_WG->UpdateDamagedTowerCount(m_WG->GetAttackerTeam());
1151 }
1152
1153 // Called when associated gameobject is destroyed
1155 {
1156 // Update worldstate
1158 m_WG->SendUpdateWorldState(m_WorldState, m_State);
1159
1160 // Warn players
1161 if (m_NameId)
1162 m_WG->SendWarningToAllInZone(m_NameId);
1163
1164 switch (m_Type)
1165 {
1166 // Inform the global wintergrasp script of the destruction of this object
1169 m_WG->UpdatedDestroyedTowerCount(TeamId(m_Team));
1170 break;
1172 if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
1174 go->SetGoState(GOState::GO_STATE_ACTIVE);
1175 m_WG->SetRelicInteractible(true);
1176 if (m_WG->GetRelic())
1177 m_WG->GetRelic()->RemoveFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_IN_USE);
1178 else
1179 SF_LOG_ERROR("misc", "BattlefieldWG: Relic not found.");
1180 break;
1181 }
1182
1183 m_WG->BrokenWallOrTower(TeamId(m_Team));
1184 }
1185
1186 void Init(GameObject* go, uint32 type, uint32 worldstate, uint32 nameid)
1187 {
1188 if (!go)
1189 return;
1190
1191 // GameObject associated to object
1192 m_BuildGUID = go->GetGUID();
1193
1194 // Type of building (WALL/TOWER/DOOR)
1195 m_Type = type;
1196
1197 // WorldState for client (icon on map)
1198 m_WorldState = worldstate;
1199
1200 // NameId for Warning text
1201 m_NameId = nameid;
1202
1203 switch (m_Type)
1204 {
1209 m_Team = m_WG->GetDefenderTeam(); // Objects that are part of the keep should be the defender's
1210 break;
1212 m_Team = m_WG->GetAttackerTeam(); // The towers in the south should be the attacker's
1213 break;
1214 default:
1216 break;
1217 }
1218
1219 m_State = sWorld->getWorldState(m_WorldState);
1220 switch (m_State)
1221 {
1225 break;
1229 break;
1233 break;
1234 }
1235
1236 int32 towerid = -1;
1237 switch (go->GetEntry())
1238 {
1240 towerid = 0;
1241 break;
1243 towerid = 1;
1244 break;
1246 towerid = 2;
1247 break;
1249 towerid = 3;
1250 break;
1252 towerid = 4;
1253 break;
1255 towerid = 5;
1256 break;
1258 towerid = 6;
1259 break;
1260 }
1261
1262 if (towerid > 3) // Attacker towers
1263 {
1264 // Spawn associate gameobjects
1265 for (uint8 i = 0; i < AttackTowers[towerid - 4].nbObject; i++)
1266 {
1267 WintergraspObjectPositionData gobData = AttackTowers[towerid - 4].GameObject[i];
1268 if (GameObject* go = m_WG->SpawnGameObject(gobData.entryHorde, gobData.x, gobData.y, gobData.z, gobData.o))
1269 m_GameObjectList[TEAM_HORDE].insert(go->GetGUID());
1270 if (GameObject* go = m_WG->SpawnGameObject(gobData.entryAlliance, gobData.x, gobData.y, gobData.z, gobData.o))
1271 m_GameObjectList[TEAM_ALLIANCE].insert(go->GetGUID());
1272 }
1273
1274 // Spawn associate npc bottom
1275 for (uint8 i = 0; i < AttackTowers[towerid - 4].nbCreatureBottom; i++)
1276 {
1277 WintergraspObjectPositionData creatureData = AttackTowers[towerid - 4].CreatureBottom[i];
1278 if (Creature* creature = m_WG->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE))
1279 m_CreatureBottomList[TEAM_HORDE].insert(creature->GetGUID());
1280 if (Creature* creature = m_WG->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE))
1281 m_CreatureBottomList[TEAM_ALLIANCE].insert(creature->GetGUID());
1282 }
1283
1284 // Spawn associate npc top
1285 for (uint8 i = 0; i < AttackTowers[towerid - 4].nbCreatureTop; i++)
1286 {
1287 WintergraspObjectPositionData creatureData = AttackTowers[towerid - 4].CreatureTop[i];
1288 if (Creature* creature = m_WG->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE))
1289 m_CreatureTopList[TEAM_HORDE].insert(creature->GetGUID());
1290 if (Creature* creature = m_WG->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE))
1291 m_CreatureTopList[TEAM_ALLIANCE].insert(creature->GetGUID());
1292 }
1293 }
1294
1295 if (towerid >= 0)
1296 {
1297 // Spawn Turret bottom
1298 for (uint8 i = 0; i < TowerCannon[towerid].nbTowerCannonBottom; i++)
1299 {
1300 Position turretPos;
1301 TowerCannon[towerid].TowerCannonBottom[i].GetPosition(&turretPos);
1302 if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, turretPos, TEAM_ALLIANCE))
1303 {
1304 m_TowerCannonBottomList.insert(turret->GetGUID());
1305 switch (go->GetEntry())
1306 {
1311 turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
1312 break;
1316 turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
1317 break;
1318 }
1319 m_WG->HideNpc(turret);
1320 }
1321 }
1322
1323 // Spawn Turret top
1324 for (uint8 i = 0; i < TowerCannon[towerid].nbTurretTop; i++)
1325 {
1326 Position towerCannonPos;
1327 TowerCannon[towerid].TurretTop[i].GetPosition(&towerCannonPos);
1328 if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TeamId(0)))
1329 {
1330 m_TurretTopList.insert(turret->GetGUID());
1331 switch (go->GetEntry())
1332 {
1337 turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
1338 break;
1342 turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
1343 break;
1344 }
1345 m_WG->HideNpc(turret);
1346 }
1347 }
1349 }
1350 }
1351
1353 {
1354 for (GuidSet::const_iterator itr = m_CreatureTopList[m_WG->GetDefenderTeam()].begin(); itr != m_CreatureTopList[m_WG->GetDefenderTeam()].end(); ++itr)
1355 if (Creature* creature = m_WG->GetCreature(*itr))
1356 m_WG->HideNpc(creature);
1357
1358 for (GuidSet::const_iterator itr = m_CreatureTopList[m_WG->GetAttackerTeam()].begin(); itr != m_CreatureTopList[m_WG->GetAttackerTeam()].end(); ++itr)
1359 if (Creature* creature = m_WG->GetCreature(*itr))
1360 m_WG->ShowNpc(creature, true);
1361
1362 for (GuidSet::const_iterator itr = m_CreatureBottomList[m_WG->GetDefenderTeam()].begin(); itr != m_CreatureBottomList[m_WG->GetDefenderTeam()].end(); ++itr)
1363 if (Creature* creature = m_WG->GetCreature(*itr))
1364 m_WG->HideNpc(creature);
1365
1366 for (GuidSet::const_iterator itr = m_CreatureBottomList[m_WG->GetAttackerTeam()].begin(); itr != m_CreatureBottomList[m_WG->GetAttackerTeam()].end(); ++itr)
1367 if (Creature* creature = m_WG->GetCreature(*itr))
1368 m_WG->ShowNpc(creature, true);
1369
1370 for (GuidSet::const_iterator itr = m_GameObjectList[m_WG->GetDefenderTeam()].begin(); itr != m_GameObjectList[m_WG->GetDefenderTeam()].end(); ++itr)
1371 if (GameObject* object = m_WG->GetGameObject(*itr))
1372 object->SetRespawnTime(RESPAWN_ONE_DAY);
1373
1374 for (GuidSet::const_iterator itr = m_GameObjectList[m_WG->GetAttackerTeam()].begin(); itr != m_GameObjectList[m_WG->GetAttackerTeam()].end(); ++itr)
1375 if (GameObject* object = m_WG->GetGameObject(*itr))
1376 object->SetRespawnTime(RESPAWN_IMMEDIATELY);
1377 }
1378
1379 void UpdateTurretAttack(bool disable)
1380 {
1381 for (GuidSet::const_iterator itr = m_TowerCannonBottomList.begin(); itr != m_TowerCannonBottomList.end(); ++itr)
1382 {
1383 if (Creature* creature = m_WG->GetCreature(*itr))
1384 {
1385 if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
1386 {
1387 if (disable)
1388 m_WG->HideNpc(creature);
1389 else
1390 m_WG->ShowNpc(creature, true);
1391
1392 switch (build->GetEntry())
1393 {
1398 {
1399 creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
1400 break;
1401 }
1405 {
1406 creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
1407 break;
1408 }
1409 }
1410 }
1411 }
1412 }
1413
1414 for (GuidSet::const_iterator itr = m_TurretTopList.begin(); itr != m_TurretTopList.end(); ++itr)
1415 {
1416 if (Creature* creature = m_WG->GetCreature(*itr))
1417 {
1418 if (GameObject* build = m_WG->GetGameObject(m_BuildGUID))
1419 {
1420 if (disable)
1421 m_WG->HideNpc(creature);
1422 else
1423 m_WG->ShowNpc(creature, true);
1424
1425 switch (build->GetEntry())
1426 {
1431 {
1432 creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
1433 break;
1434 }
1438 {
1439 creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
1440 break;
1441 }
1442 }
1443 }
1444 }
1445 }
1446 }
1447
1448 void Save() const
1449 {
1450 sWorld->setWorldState(m_WorldState, m_State);
1451 }
1452};
1453
1455{
1456 // pointer to the battlefield that the workshop belongs to
1458 // id of the workshop, useful to retrieve data of the WorkshopsData array
1460 // team that controls the node
1462 // for worldstate
1464
1465 WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId)
1466 {
1467 ASSERT(_bf || _workshopId < WG_MAX_WORKSHOP);
1468
1469 bf = _bf;
1470 workshopId = _workshopId;
1472 }
1473
1474 void GiveControlTo(uint8 team, bool init /* for first call in setup*/)
1475 {
1476 switch (team)
1477 {
1479 {
1480 // Send warning message to all player to inform a faction attack to a workshop
1481 // alliance / horde attacking a workshop
1482 bf->SendWarningToAllInZone(teamControl ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text + 1);
1483 break;
1484 }
1487 {
1488 // Updating worldstate
1490 bf->SendUpdateWorldState(WorkshopsData[workshopId].worldstate, state);
1491
1492 // Warning message
1493 if (!init) // workshop taken - alliance
1494 bf->SendWarningToAllInZone(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text + 1);
1495
1496 // Found associate graveyard and update it
1498 if (bf->GetGraveyardById(workshopId))
1499 bf->GetGraveyardById(workshopId)->GiveControlTo(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE);
1500
1501 teamControl = team;
1502 break;
1503 }
1504 }
1505
1506 if (!init)
1507 bf->UpdateCounterVehicle(false);
1508 }
1509
1511 {
1513 bf->GetGraveyardById(workshopId)->GiveControlTo(TeamId(teamControl));
1514 else
1515 GiveControlTo(bf->GetDefenderTeam(), true);
1516 }
1517
1518 void Save() const
1519 {
1520 sWorld->setWorldState(WorkshopsData[workshopId].worldstate, state);
1521 }
1522};
1523
1524// Structure for the 6 workshop
1526{
1527 BattlefieldWG* m_WG; // Pointer to wintergrasp
1530 uint32 m_State; // For worldstate
1532 uint32 m_TeamControl; // Team witch control the workshop
1533 GuidSet m_CreatureOnPoint[2]; // Contain all Creature associate to this point
1534 GuidSet m_GameObjectOnPoint[2]; // Contain all Gameobject associate to this point
1535 uint32 m_NameId; // Id of skyfire_string witch contain name of this node, using for alert message
1536
1538 {
1539 m_WG = WG;
1540 m_BuildGUID = 0;
1541 m_Type = 0;
1542 m_State = 0;
1543 m_WorldState = 0;
1544 m_TeamControl = 0;
1545 m_NameId = 0;
1546 }
1547
1548 // Spawning associate creature and store them
1550 {
1551 if (Creature* creature = m_WG->SpawnCreature(obj.entryHorde, obj.x, obj.y, obj.z, obj.o, TEAM_HORDE))
1552 m_CreatureOnPoint[TEAM_HORDE].insert(creature->GetGUID());
1553
1554 if (Creature* creature = m_WG->SpawnCreature(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o, TEAM_ALLIANCE))
1555 m_CreatureOnPoint[TEAM_ALLIANCE].insert(creature->GetGUID());
1556 }
1557
1558 // Spawning Associate gameobject and store them
1560 {
1561 if (GameObject* gameobject = m_WG->SpawnGameObject(obj.entryHorde, obj.x, obj.y, obj.z, obj.o))
1562 m_GameObjectOnPoint[TEAM_HORDE].insert(gameobject->GetGUID());
1563 if (GameObject* gameobject = m_WG->SpawnGameObject(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o))
1564 m_GameObjectOnPoint[TEAM_ALLIANCE].insert(gameobject->GetGUID());
1565 }
1566
1567 // Init method, setup variable
1568 void Init(uint32 worldstate, uint32 type, uint32 nameid)
1569 {
1570 m_WorldState = worldstate;
1571 m_Type = type;
1572 m_NameId = nameid;
1573 }
1574
1575 // Called on change faction in CapturePoint class
1576 void GiveControlTo(uint8 team, bool init /* for first call in setup*/)
1577 {
1578 switch (team)
1579 {
1581 {
1582 // Send warning message to all player for inform a faction attack a workshop
1583 // alliance / horde attacking workshop
1584 m_WG->SendWarningToAllInZone(m_TeamControl ? m_NameId : m_NameId + 1);
1585 break;
1586 }
1588 {
1589 // Show Alliance creature
1590 for (GuidSet::const_iterator itr = m_CreatureOnPoint[TEAM_ALLIANCE].begin(); itr != m_CreatureOnPoint[TEAM_ALLIANCE].end(); ++itr)
1591 if (Creature* creature = m_WG->GetCreature(*itr))
1592 m_WG->ShowNpc(creature, creature->GetEntry() != 30499);
1593
1594 // Hide Horde creature
1595 for (GuidSet::const_iterator itr = m_CreatureOnPoint[TEAM_HORDE].begin(); itr != m_CreatureOnPoint[TEAM_HORDE].end(); ++itr)
1596 if (Creature* creature = m_WG->GetCreature(*itr))
1597 m_WG->HideNpc(creature);
1598
1599 // Show Alliance gameobject
1600 for (GuidSet::const_iterator itr = m_GameObjectOnPoint[TEAM_ALLIANCE].begin(); itr != m_GameObjectOnPoint[TEAM_ALLIANCE].end(); ++itr)
1601 if (GameObject* object = m_WG->GetGameObject(*itr))
1602 object->SetRespawnTime(RESPAWN_IMMEDIATELY);
1603
1604 // Hide Horde gameobject
1605 for (GuidSet::const_iterator itr = m_GameObjectOnPoint[TEAM_HORDE].begin(); itr != m_GameObjectOnPoint[TEAM_HORDE].end(); ++itr)
1606 if (GameObject* object = m_WG->GetGameObject(*itr))
1607 object->SetRespawnTime(RESPAWN_ONE_DAY);
1608
1609
1610 // Updating worldstate
1612 m_WG->SendUpdateWorldState(m_WorldState, m_State);
1613
1614 // Warning message
1615 if (!init) // workshop taken - alliance
1616 m_WG->SendWarningToAllInZone(m_NameId);
1617
1618 // Found associate graveyard and update it
1620 if (m_WG->GetGraveyardById(m_Type))
1621 m_WG->GetGraveyardById(m_Type)->GiveControlTo(TEAM_ALLIANCE);
1622
1623 m_TeamControl = team;
1624 break;
1625 }
1627 {
1628 // Show Horde creature
1629 for (GuidSet::const_iterator itr = m_CreatureOnPoint[TEAM_HORDE].begin(); itr != m_CreatureOnPoint[TEAM_HORDE].end(); ++itr)
1630 if (Creature* creature = m_WG->GetCreature(*itr))
1631 m_WG->ShowNpc(creature, creature->GetEntry() != 30400);
1632
1633 // Hide Alliance creature
1634 for (GuidSet::const_iterator itr = m_CreatureOnPoint[TEAM_ALLIANCE].begin(); itr != m_CreatureOnPoint[TEAM_ALLIANCE].end(); ++itr)
1635 if (Creature* creature = m_WG->GetCreature(*itr))
1636 m_WG->HideNpc(creature);
1637
1638 // Hide Alliance gameobject
1639 for (GuidSet::const_iterator itr = m_GameObjectOnPoint[TEAM_ALLIANCE].begin(); itr != m_GameObjectOnPoint[TEAM_ALLIANCE].end(); ++itr)
1640 if (GameObject* object = m_WG->GetGameObject(*itr))
1641 object->SetRespawnTime(RESPAWN_ONE_DAY);
1642
1643 // Show Horde gameobject
1644 for (GuidSet::const_iterator itr = m_GameObjectOnPoint[TEAM_HORDE].begin(); itr != m_GameObjectOnPoint[TEAM_HORDE].end(); ++itr)
1645 if (GameObject* object = m_WG->GetGameObject(*itr))
1646 object->SetRespawnTime(RESPAWN_IMMEDIATELY);
1647
1648 // Update worlstate
1650 m_WG->SendUpdateWorldState(m_WorldState, m_State);
1651
1652 // Warning message
1653 if (!init) // workshop taken - horde
1654 m_WG->SendWarningToAllInZone(m_NameId + 1);
1655
1656 // Update graveyard control
1658 if (m_WG->GetGraveyardById(m_Type))
1659 m_WG->GetGraveyardById(m_Type)->GiveControlTo(TEAM_HORDE);
1660
1661 m_TeamControl = team;
1662 break;
1663 }
1664 }
1665 if (!init)
1666 m_WG->UpdateCounterVehicle(false);
1667 }
1668
1670 {
1672 m_WG->GetGraveyardById(m_Type)->GiveControlTo(TeamId(m_TeamControl));
1673 else
1674 GiveControlTo(m_WG->GetDefenderTeam(), true);
1675 }
1676
1677 void Save() const
1678 {
1679 sWorld->setWorldState(m_WorldState, m_State);
1680 }
1681};
1682
1683#endif
std::set< uint64 > GuidSet
Definition Battlefield.h:62
uint32 const WGQuest[2][6]
const uint8 WG_MAX_TOWER_CANNON
WGGossipText
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_HORDE
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_SW
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_SE
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_NE
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_NW
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_ALLIANCE
@ BATTLEFIELD_WG_GOSSIPTEXT_GY_KEEP
uint8 const WG_OUTSIDE_ALLIANCE_NPC
uint8 const WG_MAX_KEEP_NPC
WintergraspGameObjectBuildingType
@ BATTLEFIELD_WG_OBJECTTYPE_DOOR
@ BATTLEFIELD_WG_OBJECTTYPE_TOWER
@ BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER
@ BATTLEFIELD_WG_OBJECTTYPE_WALL
@ BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST
@ BATTLEFIELD_WG_OBJECTTYPE_TITANRELIC
const WGWorkshopData WorkshopsData[WG_MAX_WORKSHOP]
WintergraspAreaIds
@ AREA_THE_SUNKEN_RING
@ AREA_WINTERGRASP_FORTRESS
@ AREA_EASTPARK_WORKSHOP
@ AREA_THE_BROKEN_TEMPLATE
@ AREA_WINTERGRASP
@ AREA_WESTPARK_WORKSHOP
@ AREA_THE_CHILLED_QUAGMIRE
const WintergraspTeleporterData WGPortalDefenderData[WG_MAX_TELEPORTER]
uint8 const WG_MAX_TURRET
WintergraspNpcs
@ BATTLEFIELD_WG_NPC_SIEGE_MASTER_STOUTHANDLE
@ NPC_WINTERGRASP_SIEGE_ENGINE_HORDE
@ BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_KILRATH
@ BATTLEFIELD_WG_NPC_COMMANDER_DARDOSH
@ BATTLEFIELD_WG_NPC_LIEUTENANT_MURP
@ BATTLEFIELD_WG_NPC_COMMANDER_ZANNETH
@ BATTLEFIELD_WG_NPC_ANCHORITE_TESSA
@ NPC_WINTERGRASP_CATAPULT
@ BATTLEFIELD_WG_NPC_BOWYER_RANDOLPH
@ NPC_WINTERGRASP_DEMOLISHER
@ BATTLEFIELD_WG_NPC_SIEGESMITH_STRONGHOOF
@ BATTLEFIELD_WG_NPC_KNIGHT_DAMERON
@ NPC_WINTERGRASP_TOWER_CANNON
@ BATTLEFIELD_WG_NPC_GUARD_H
@ NPC_DWARVEN_SPIRIT_GUIDE
@ BATTLEFIELD_WG_NPC_VIERON_BLAZEFEATHER
@ NPC_TAUNKA_SPIRIT_GUIDE
@ BATTLEFIELD_WG_NPC_PRIMALIST_MULFORT
@ BATTLEFIELD_WG_NPC_STONE_GUARD_MUKAR
@ BATTLEFIELD_WG_NPC_STALKER
@ BATTLEFIELD_WG_NPC_GUARD_A
@ BATTLEFIELD_WG_NPC_CHAMPION_ROS_SLAI
@ BATTLEFIELD_WG_NPC_SORCERESS_KAYLANA
@ BATTLEFIELD_WG_NPC_SENIOR_DEMOLITIONIST_LEGOSO
@ NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE
@ BATTLEFIELD_WG_NPC_HOODOO_MASTER_FU_JIN
@ BATTLEFIELD_WG_NPC_TACTICAL_OFFICER_AHBRAMIS
@ BATTLEFIELD_WG_NPC_MARSHAL_MAGRUDER
uint32 const ClockWorldState[]
float const WintergraspStalkerPos[]
uint32 const WintergraspFaction[]
WintergraspSpells
@ SPELL_HORDE_FLAG
@ SPELL_GREATEST_HONOR
@ SPELL_ESSENCE_OF_WINTERGRASP
@ SPELL_VICTORY_AURA
@ SPELL_WINTERGRASP_RESTRICTED_FLIGHT_AREA
@ SPELL_RECRUIT
@ SPELL_TELEPORT_FORTRESS
@ SPELL_TENACITY
@ SPELL_ALLIANCE_CONTROLS_FACTORY_PHASE_SHIFT
@ SPELL_HORDE_CONTROLS_FACTORY_PHASE_SHIFT
@ SPELL_GRAB_PASSENGER
@ SPELL_TELEPORT_BRIDGE
@ SPELL_HORDE_CONTROL_PHASE_SHIFT
@ SPELL_VICTORY_REWARD
@ SPELL_CORPORAL
@ SPELL_GREATER_HONOR
@ SPELL_TELEPORT_DALARAN
@ SPELL_DAMAGED_BUILDING
@ SPELL_GREAT_HONOR
@ SPELL_ALLIANCE_CONTROL_PHASE_SHIFT
@ SPELL_WINTERGRASP_WATER
@ SPELL_INTACT_BUILDING
@ SPELL_DESTROYED_TOWER
@ SPELL_SPIRITUAL_IMMUNITY
@ SPELL_ALLIANCE_FLAG
@ SPELL_DEFEAT_REWARD
@ SPELL_TENACITY_VEHICLE
@ SPELL_LIEUTENANT
@ SPELL_DAMAGED_TOWER
@ SPELL_TOWER_CONTROL
WintergraspWorldstates
@ WORLDSTATE_WORKSHOP_NW
@ WORLDSTATE_WORKSHOP_K_E
@ WORLDSTATE_WORKSHOP_K_W
@ WORLDSTATE_WORKSHOP_SW
@ WORLDSTATE_WORKSHOP_NE
@ WORLDSTATE_WORKSHOP_SE
const WintergraspTowerCannonData TowerCannon[WG_MAX_TOWER_CANNON]
uint32 const VehNumWorldState[]
std::set< GameObject * > GameObjectSet
const WintergraspObjectPositionData WGOutsideNPC[WG_MAX_OUTSIDE_NPC]
uint8 const WG_MAX_ATTACKTOWERS
const Position WGTurret[WG_MAX_TURRET]
WintergraspTeamControl
@ BATTLEFIELD_WG_TEAM_HORDE
@ BATTLEFIELD_WG_TEAM_NEUTRAL
@ BATTLEFIELD_WG_TEAM_ALLIANCE
const WintergraspTowerData AttackTowers[WG_MAX_ATTACKTOWERS]
const WintergraspObjectPositionData WGKeepNPC[WG_MAX_KEEP_NPC]
uint8 const WG_MAX_OUTSIDE_NPC
WintergraspGameObject
@ GO_WINTERGRASP_FACTORY_BANNER_SW
@ GO_WINTERGRASP_FORTRESS_TOWER_3
@ GO_WINTERGRASP_FORTRESS_TOWER_2
@ GO_WINTERGRASP_FLAMEWATCH_TOWER
@ GO_WINTERGRASP_FORTRESS_TOWER_4
@ GO_WINTERGRASP_SHADOWSIGHT_TOWER
@ GO_WINTERGRASP_FACTORY_BANNER_NW
@ GO_WINTERGRASP_FACTORY_BANNER_NE
@ GO_WINTERGRASP_TITAN_S_RELIC
@ GO_WINTERGRASP_FORTRESS_TOWER_1
@ GO_WINTERGRASP_FACTORY_BANNER_SE
@ GO_WINTERGRASP_FORTRESS_GATE
@ GO_WINTERGRASP_WINTER_S_EDGE_TOWER
@ GO_WINTERGRASP_VAULT_GATE
@ GO_WINTERGRASP_KEEP_COLLISION_WALL
uint8 const WG_MAX_OBJ
WGGraveyardId
@ BATTLEFIELD_WG_GY_WORKSHOP_NE
@ BATTLEFIELD_WG_GY_KEEP
@ BATTLEFIELD_WG_GRAVEYARD_MAX
@ BATTLEFIELD_WG_GY_WORKSHOP_SW
@ BATTLEFIELD_WG_GY_WORKSHOP_SE
@ BATTLEFIELD_WG_GY_HORDE
@ BATTLEFIELD_WG_GY_WORKSHOP_NW
@ BATTLEFIELD_WG_GY_ALLIANCE
std::set< BfWGGameObjectBuilding * > GameObjectBuilding
uint8 const WG_MAX_TELEPORTER
uint32 const MaxVehNumWorldState[]
BfWGCoordGY const WGGraveYard[BATTLEFIELD_WG_GRAVEYARD_MAX]
std::set< WGWorkshop * > Workshop
uint8 const WG_MAX_WORKSHOP
WintergraspAchievements
@ ACHIEVEMENTS_WG_TOWER_CANNON_KILL
@ ACHIEVEMENTS_STONE_KEEPER_1000
@ ACHIEVEMENTS_DESTRUCTION_DERBY_A
@ ACHIEVEMENTS_WIN_WG
@ ACHIEVEMENTS_WG_GNOMESLAUGHTER
@ ACHIEVEMENTS_STONE_KEEPER_50
@ ACHIEVEMENTS_DESTRUCTION_DERBY_H
@ ACHIEVEMENTS_STONE_KEEPER_100
@ ACHIEVEMENTS_WIN_WG_TIMER_10
@ ACHIEVEMENTS_WIN_WG_100
@ ACHIEVEMENTS_STONE_KEEPER_250
@ ACHIEVEMENTS_WG_MASTER_H
@ ACHIEVEMENTS_WG_RANGER
@ ACHIEVEMENTS_WG_MASTER_A
@ ACHIEVEMENTS_STONE_KEEPER_500
@ ACHIEVEMENTS_WG_TOWER_DESTROY
WintergraspText
@ BATTLEFIELD_WG_TEXT_WILL_START
@ BATTLEFIELD_WG_TEXT_TOWER_NAME_S
@ BATTLEFIELD_WG_TEXT_ALLIANCE
@ BATTLEFIELD_WG_TEXT_SECONDRANK
@ BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SE
@ BATTLEFIELD_WG_TEXT_TOWER_NAME_W
@ BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NE
@ BATTLEFIELD_WG_TEXT_WORKSHOP_TAKEN
@ BATTLEFIELD_WG_TEXT_START
@ BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NW
@ BATTLEFIELD_WG_TEXT_TOWER_DAMAGE
@ BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SW
@ BATTLEFIELD_WG_TEXT_TOWER_NAME_E
@ BATTLEFIELD_WG_TEXT_WORKSHOP_ATTACK
@ BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SE
@ BATTLEFIELD_WG_TEXT_TOWER_DESTROY
@ BATTLEFIELD_WG_TEXT_WIN_KEEP
@ BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NW
@ BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SW
@ BATTLEFIELD_WG_TEXT_DEFEND_KEEP
@ BATTLEFIELD_WG_TEXT_FIRSTRANK
@ BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NE
@ BATTLEFIELD_WG_TEXT_HORDE
WintergrastData
@ BATTLEFIELD_WG_MAPID
@ BATTLEFIELD_WG_ZONEID
const WintergraspBuildingSpawnData WGGameObjectBuilding[WG_MAX_OBJ]
WintergraspData
@ BATTLEFIELD_WG_DATA_VEHICLE_A
@ BATTLEFIELD_WG_DATA_MAX_VEHICLE_A
@ BATTLEFIELD_WG_DATA_MAX
@ BATTLEFIELD_WG_DATA_DAMAGED_TOWER_DEF
@ BATTLEFIELD_WG_DATA_VEHICLE_H
@ BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT
@ BATTLEFIELD_WG_DATA_MAX_VEHICLE_H
@ BATTLEFIELD_WG_DATA_DAMAGED_TOWER_ATT
@ BATTLEFIELD_WG_DATA_BROKEN_TOWER_DEF
WintergraspGameObjectState
@ BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE
@ BATTLEFIELD_WG_OBJECTSTATE_NONE
@ BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY
@ BATTLEFIELD_WG_OBJECTSTATE_HORDE_DESTROY
@ BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_DESTROY
@ BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_INTACT
@ BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT
@ BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT
@ BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_DAMAGE
@ BATTLEFIELD_WG_OBJECTSTATE_HORDE_DAMAGE
WintergraspWorkshopIds
@ BATTLEFIELD_WG_WORKSHOP_SE
@ BATTLEFIELD_WG_WORKSHOP_KEEP_WEST
@ BATTLEFIELD_WG_WORKSHOP_KEEP_EAST
@ BATTLEFIELD_WG_WORKSHOP_NW
@ BATTLEFIELD_WG_WORKSHOP_SW
@ BATTLEFIELD_WG_WORKSHOP_NE
WintergraspWorldStates
@ BATTLEFIELD_WG_WORLD_STATE_VEHICLE_H
@ BATTLEFIELD_WG_WORLD_STATE_SHOW_WORLDSTATE
@ BATTLEFIELD_WG_WORLD_STATE_ACTIVE
@ BATTLEFIELD_WG_WORLD_STATE_VEHICLE_A
@ BATTLEFIELD_WG_WORLD_STATE_MAX_VEHICLE_H
@ BATTLEFIELD_WG_WORLD_STATE_MAX_VEHICLE_A
@ BATTLEFIELD_WG_WORLD_STATE_DEFENDER
@ BATTLEFIELD_WG_WORLD_STATE_ATTACKER
std::set< Group * > GroupSet
@ RESPAWN_IMMEDIATELY
@ RESPAWN_ONE_DAY
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
#define ASSERT
Definition Errors.h:29
@ GO_STATE_ACTIVE
Definition GameObject.h:576
@ GO_STATE_READY
Definition GameObject.h:577
#define SF_LOG_ERROR(filterType__,...)
Definition Log.h:143
TeamId
@ TEAM_NEUTRAL
@ TEAM_ALLIANCE
@ TEAM_HORDE
@ GO_DESTRUCTIBLE_DESTROYED
@ GO_DESTRUCTIBLE_REBUILDING
@ GO_DESTRUCTIBLE_DAMAGED
@ GO_FLAG_IN_USE
@ GAMEOBJECT_FIELD_FACTION_TEMPLATE
@ GAMEOBJECT_FIELD_FLAGS
GameObject * GetGameObject(uint64 GUID)
Battlefield()
Constructor.
void OnCreatureRemove(Creature *creature)
Called when a creature is removed.
void OnUnitDeath(Unit *unit)
uint32 m_tenacityStack
Workshop WorkshopsList
void OnGameObjectCreate(GameObject *go)
Called when a gameobject is created.
void RemoveAurasFromPlayer(Player *player)
void OnPlayerLeaveZone(Player *player)
Called when player left the WG zone.
void UpdateCounterVehicle(bool init)
void OnCreatureCreate(Creature *creature)
Called when a creature is created.
GameObject * GetRelic()
Return pointer to relic object.
bool Update(uint32 diff)
Called for update battlefield data.
void PromotePlayer(Player *killer)
void UpdateVehicleCountWG()
GuidSet OutsideCreature[2]
void SetRelicInteractible(bool allow)
Define if player can interact with the relic.
void UpdatedDestroyedTowerCount(TeamId team)
Called when tower is broken.
void OnPlayerJoinWar(Player *player)
Called when player accept invite to join battle.
bool m_isRelicInteractible
GuidSet m_vehicles[2]
void UpdateDamagedTowerCount(TeamId team)
Called when a tower is damaged.
GuidSet DefenderPortalList
bool CanInteractWithRelic() const
Check if players can interact with the relic (Only if the last door has been broken).
GuidSet KeepCreature[2]
GameObjectBuilding BuildingsInZone
void SendInitWorldStatesTo(Player *player)
void OnBattleStart()
Called when the battle start.
void OnPlayerEnterZone(Player *player)
Called when player enters in WG zone.
bool FindAndRemoveVehicleFromList(Unit *vehicle)
void OnStartGrouping()
Called when grouping starts (15 minutes before battlestart).
void ProcessEvent(WorldObject *obj, uint32 eventId)
GuidSet m_KeepGameObject[2]
uint64 m_titansRelicGUID
uint8 GetSpiritGraveyardId(uint32 areaId) const
uint32 GetData(uint32 data) const
void BrokenWallOrTower(TeamId team)
Called when a wall/tower is broken.
void SendInitWorldStatesToAll()
Send all worldstate data to all player in zone.
void OnPlayerLeaveWar(Player *player)
Called when player left the battle.
void DoCompleteOrIncrementAchievement(uint32 achievement, Player *player, uint8 incrementNumber=1)
void OnBattleEnd(bool endByTimer)
Called when battle end.
void FillInitialWorldStates(WorldStateBuilder &builder)
bool SetupBattlefield()
Called when battlefield is setup, at server start.
void HandleKill(Player *killer, Unit *victim)
Called when a Unit is kill in battlefield zone.
void SetRelic(uint64 relicGUID)
Define relic object.
BfCapturePoint(Battlefield *bf)
Definition Battlefield.h:69
BfGraveyard(Battlefield *Bf)
BfGraveyardWG(BattlefieldWG *Bf)
void SetTextId(int32 textid)
int32 GetTextId() const
void SetDestructibleState(GameObjectDestructibleState state, Player *eventInvoker=NULL, bool setHealth=false)
Definition Group.h:147
uint64 GetGUID() const
Definition Object.h:119
uint32 GetEntry() const
Definition Object.h:125
Definition Unit.h:1367
void LinkToWorkshop(WGWorkshop *workshop)
WintergraspCapturePoint(BattlefieldWG *battlefield, TeamId teamInControl)
void ChangeTeam(TeamId oldteam)
GameObject * FindNearestGameObject(uint32 entry, float range) const
Definition Object.cpp:2810
#define sWorld
Definition World.h:910
TeamId startcontrol
BfWGGameObjectBuilding(BattlefieldWG *WG)
void UpdateTurretAttack(bool disable)
void Init(GameObject *go, uint32 type, uint32 worldstate, uint32 nameid)
WGWorkshop(BattlefieldWG *_bf, uint8 _workshopId)
void UpdateGraveyardAndWorkshop()
void GiveControlTo(uint8 team, bool init)
BattlefieldWG * bf
void Save() const
WintergraspObjectPositionData CreatureTop[5]
WintergraspObjectPositionData CreatureBottom[9]
WintergraspObjectPositionData GameObject[6]
void Init(uint32 worldstate, uint32 type, uint32 nameid)
WintergraspWorkshopData(BattlefieldWG *WG)
void AddGameObject(const WintergraspObjectPositionData &obj)
void AddCreature(const WintergraspObjectPositionData &obj)
void GiveControlTo(uint8 team, bool init)