aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Battlefield/Battlefield.h6
-rw-r--r--src/server/game/Battlefield/BattlefieldMgr.h6
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.cpp28
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.h81
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp36
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/scripts/Northrend/wintergrasp.cpp2
7 files changed, 105 insertions, 55 deletions
diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h
index 480aafbeb42..2ca6a2e3f96 100644
--- a/src/server/game/Battlefield/Battlefield.h
+++ b/src/server/game/Battlefield/Battlefield.h
@@ -211,9 +211,6 @@ class Battlefield : public ZoneScript
/// Call this to init the Battlefield
virtual bool SetupBattlefield() { return true; }
- /// Generate packet which contain all worldstatedata of area
- virtual void FillInitialWorldStates(WorldPacket& /*data*/) {}
-
/// Update data of a worldstate to all players present in zone
void SendUpdateWorldState(uint32 field, uint32 value);
@@ -330,7 +327,8 @@ class Battlefield : public ZoneScript
virtual void DoCompleteOrIncrementAchievement(uint32 /*achievement*/, Player* /*player*/, uint8 /*incrementNumber = 1*/) {};
/// Send all worldstate data to all player in zone.
- virtual void SendInitWorldStatesToAll() {};
+ virtual void SendInitWorldStatesToAll() = 0;
+ virtual void FillInitialWorldStates(WorldPacket& /*data*/) = 0;
/// Return if we can use mount in battlefield
bool CanFlyIn() { return !m_isActive; }
diff --git a/src/server/game/Battlefield/BattlefieldMgr.h b/src/server/game/Battlefield/BattlefieldMgr.h
index 4ee37e424fd..1ec1f3b1151 100644
--- a/src/server/game/Battlefield/BattlefieldMgr.h
+++ b/src/server/game/Battlefield/BattlefieldMgr.h
@@ -46,10 +46,10 @@ class BattlefieldMgr
// called when player resurrects
void HandlePlayerResurrects(Player * player, uint32 areaflag);
// return assigned battlefield
- Battlefield *GetBattlefieldToZoneId(uint32 zoneid);
- Battlefield *GetBattlefieldByBattleId(uint32 battleid);
+ Battlefield* GetBattlefieldToZoneId(uint32 zoneid);
+ Battlefield* GetBattlefieldByBattleId(uint32 battleid);
- ZoneScript *GetZoneScript(uint32 zoneId);
+ ZoneScript* GetZoneScript(uint32 zoneId);
void AddZone(uint32 zoneid, Battlefield * handle);
diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
index 350926388ba..f2c44a0a0da 100644
--- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
+++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
@@ -844,20 +844,13 @@ uint32 BattlefieldWG::GetData(uint32 data)
return Battlefield::GetData(data);
}
-// Method sending worldsate to player
-WorldPacket BattlefieldWG::BuildInitWorldStates()
-{
- WorldPacket data(SMSG_INIT_WORLD_STATES, (4 + 4 + 4 + 2 + (BuildingsInZone.size() * 8) + (WorkshopsList.size() * 8)));
-
- data << uint32(m_MapId);
- data << uint32(m_ZoneId);
- data << uint32(0);
- data << uint16(4 + 2 + 4 + BuildingsInZone.size() + WorkshopsList.size());
+void BattlefieldWG::FillInitialWorldStates(WorldPacket& data)
+{
data << uint32(BATTLEFIELD_WG_WORLD_STATE_ATTACKER) << uint32(GetAttackerTeam());
data << uint32(BATTLEFIELD_WG_WORLD_STATE_DEFENDER) << uint32(GetDefenderTeam());
- data << uint32(BATTLEFIELD_WG_WORLD_STATE_ACTIVE) << uint32(IsWarTime()? 0 : 1); // Note: cleanup these two, their names look awkward
- data << uint32(BATTLEFIELD_WG_WORLD_STATE_SHOW_WORLDSTATE) << uint32(IsWarTime()? 1 : 0);
+ data << uint32(BATTLEFIELD_WG_WORLD_STATE_ACTIVE) << uint32(IsWarTime() ? 0 : 1); // Note: cleanup these two, their names look awkward
+ data << uint32(BATTLEFIELD_WG_WORLD_STATE_SHOW_WORLDSTATE) << uint32(IsWarTime() ? 1 : 0);
for (uint32 i = 0; i < 2; ++i)
data << ClockWorldState[i] << uint32(time(NULL) + (m_Timer / 1000));
@@ -879,17 +872,24 @@ WorldPacket BattlefieldWG::BuildInitWorldStates()
void BattlefieldWG::SendInitWorldStatesTo(Player* player)
{
- WorldPacket data = BuildInitWorldStates();
+ WorldPacket data(SMSG_INIT_WORLD_STATES, (4 + 4 + 4 + 2 + (BuildingsInZone.size() * 8) + (WorkshopsList.size() * 8)));
+
+ data << uint32(m_MapId);
+ data << uint32(m_ZoneId);
+ data << uint32(0);
+ data << uint16(10 + BuildingsInZone.size() + WorkshopsList.size()); // Number of fields
+
+ FillInitialWorldStates(data);
+
player->GetSession()->SendPacket(&data);
}
void BattlefieldWG::SendInitWorldStatesToAll()
{
- WorldPacket data = BuildInitWorldStates();
for (uint8 team = 0; team < 2; team++)
for (GuidSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
if (Player* player = sObjectAccessor->FindPlayer(*itr))
- player->GetSession()->SendPacket(&data);
+ SendInitWorldStatesTo(player);
}
void BattlefieldWG::BrokenWallOrTower(TeamId /*team*/)
diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h
index 11510e1ea98..4d7db760605 100644
--- a/src/server/game/Battlefield/Zones/BattlefieldWG.h
+++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h
@@ -26,12 +26,6 @@
#include "GroupMgr.h"
#include "Battlefield.h"
-uint32 const VehNumWorldState[2] = { 3680, 3490 };
-uint32 const MaxVehNumWorldState[2] = { 3681, 3491 };
-uint32 const ClockWorldState[2] = { 3781, 4354 };
-uint32 const WintergraspFaction[3] = { 1732, 1735, 35 };
-float const WintergraspStalkerPos[4] = { 0, 0, 0, 0 };
-
class BattlefieldWG;
class WintergraspCapturePoint;
@@ -404,9 +398,9 @@ class BattlefieldWG : public Battlefield
void UpdateVehicleCountWG();
void UpdateCounterVehicle(bool init);
- WorldPacket BuildInitWorldStates();
void SendInitWorldStatesTo(Player* player);
void SendInitWorldStatesToAll();
+ void FillInitialWorldStates(WorldPacket& data);
void HandleKill(Player* killer, Unit* victim);
void OnUnitDeath(Unit* unit);
@@ -421,6 +415,22 @@ class BattlefieldWG : public Battlefield
uint8 GetSpiritGraveyardId(uint32 areaId);
uint32 GetData(uint32 data);
+
+ static uint32 const VehNumWorldState[];
+ static uint32 const MaxVehNumWorldState[];
+ static uint32 const ClockWorldState[];
+ static uint32 const WintergraspFaction[];
+ static float const WintergraspStalkerPos[];
+
+ static uint8 const WG_MAX_OBJ;
+ static uint8 const WG_KEEPGAMEOBJECT_MAX;
+ static uint8 const WG_MAX_TURRET;
+ static uint8 const WG_MAX_KEEP_NPC;
+ static uint8 const WG_MAX_OUTSIDE_NPC;
+ static uint8 const WG_OUTSIDE_ALLIANCE_NPC;
+ static uint8 const WG_MAX_TELEPORTER;
+ static uint8 const WG_MAX_WORKSHOP;
+
protected:
bool m_isRelicInteractible;
@@ -441,13 +451,20 @@ class BattlefieldWG : public Battlefield
GameObject* m_titansRelic;
};
-uint8 const WG_MAX_OBJ = 32;
-uint8 const WG_KEEPGAMEOBJECT_MAX = 44;
-uint8 const WG_MAX_TURRET = 15;
-uint8 const WG_MAX_KEEP_NPC = 39;
-uint8 const WG_MAX_OUTSIDE_NPC = 14;
-uint8 const WG_OUTSIDE_ALLIANCE_NPC = 7;
-uint8 const WG_MAX_TELEPORTER = 12;
+uint32 const BattlefieldWG::VehNumWorldState[] = { 3680, 3490 };
+uint32 const BattlefieldWG::MaxVehNumWorldState[] = { 3681, 3491 };
+uint32 const BattlefieldWG::ClockWorldState[] = { 3781, 4354 };
+uint32 const BattlefieldWG::WintergraspFaction[] = { 1732, 1735, 35 };
+float const BattlefieldWG::WintergraspStalkerPos[] = { 0, 0, 0, 0 };
+
+uint8 const BattlefieldWG::WG_MAX_OBJ = 32;
+uint8 const BattlefieldWG::WG_KEEPGAMEOBJECT_MAX = 44;
+uint8 const BattlefieldWG::WG_MAX_TURRET = 15;
+uint8 const BattlefieldWG::WG_MAX_KEEP_NPC = 39;
+uint8 const BattlefieldWG::WG_MAX_OUTSIDE_NPC = 14;
+uint8 const BattlefieldWG::WG_OUTSIDE_ALLIANCE_NPC = 7;
+uint8 const BattlefieldWG::WG_MAX_TELEPORTER = 12;
+uint8 const BattlefieldWG::WG_MAX_WORKSHOP = 6;
enum WintergraspGameObjectBuildingType
{
@@ -578,7 +595,7 @@ struct WintergraspBuildingSpawnData
uint32 nameId;
};
-const WintergraspBuildingSpawnData WGGameObjectBuilding[WG_MAX_OBJ] =
+const WintergraspBuildingSpawnData WGGameObjectBuilding[BattlefieldWG::WG_MAX_OBJ] =
{
// Wall (Not spawned in db)
// Entry WS X Y Z O type NameID
@@ -671,7 +688,7 @@ const WintergraspBuildingSpawnData WGGameObjectBuilding[WG_MAX_OBJ] =
// 192357 : 1 in sql, 1 in header
// 192350 : 1 in sql, 1 in header
// 192351 : 1 in sql, 1 in header
-const WintergraspObjectPositionData WGKeepGameObject[WG_KEEPGAMEOBJECT_MAX] =
+const WintergraspObjectPositionData WGKeepGameObject[BattlefieldWG::WG_KEEPGAMEOBJECT_MAX] =
{
{ 5262.540039f, 3047.949951f, 432.054993f, 3.106650f, 192488, 192501 }, // Flag on tower
{ 5272.939941f, 2976.550049f, 444.492004f, 3.124120f, 192374, 192416 }, // Flag on Wall Intersect
@@ -719,7 +736,7 @@ const WintergraspObjectPositionData WGKeepGameObject[WG_KEEPGAMEOBJECT_MAX] =
{ 5271.279785f, 2820.159912f, 445.200989f, -3.13286f, 192351, 192416 } // Flag on wall intersect
};
-const Position WGTurret[WG_MAX_TURRET] =
+const Position WGTurret[BattlefieldWG::WG_MAX_TURRET] =
{
{ 5391.19f, 3060.8f, 419.616f, 1.69557f },
{ 5266.75f, 2976.5f, 421.067f, 3.20354f },
@@ -739,7 +756,7 @@ const Position WGTurret[WG_MAX_TURRET] =
};
// Here there is all npc keeper spawn point
-const WintergraspObjectPositionData WGKeepNPC[WG_MAX_KEEP_NPC] =
+const WintergraspObjectPositionData WGKeepNPC[BattlefieldWG::WG_MAX_KEEP_NPC] =
{
// X Y Z O horde alliance
// North East
@@ -790,7 +807,7 @@ const WintergraspObjectPositionData WGKeepNPC[WG_MAX_KEEP_NPC] =
{ 5316.770996f, 2619.430176f, 409.027740f, 5.363431f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A } // Standing Guard
};
-const WintergraspObjectPositionData WGOutsideNPC[WG_MAX_OUTSIDE_NPC] =
+const WintergraspObjectPositionData WGOutsideNPC[BattlefieldWG::WG_MAX_OUTSIDE_NPC] =
{
{ 5032.04f, 3681.79f, 362.980f, 4.210f, BATTLEFIELD_WG_NPC_VIERON_BLAZEFEATHER, 0 },
{ 5020.71f, 3626.19f, 360.150f, 4.640f, BATTLEFIELD_WG_NPC_HOODOO_MASTER_FU_JIN, 0 },
@@ -817,7 +834,7 @@ struct WintergraspTeleporterData
float o;
};
-const WintergraspTeleporterData WGPortalDefenderData[WG_MAX_TELEPORTER] =
+const WintergraspTeleporterData WGPortalDefenderData[BattlefieldWG::WG_MAX_TELEPORTER] =
{
// Player teleporter
{ 190763, 5153.41f, 2901.35f, 409.191f, -0.069f },
@@ -1112,8 +1129,6 @@ const WintergraspTowerCannonData TowerCannon[WG_MAX_TOWER_CANNON] =
// *****************WorkShop Data & Element*****************
// *********************************************************
-uint8 const WG_MAX_WORKSHOP = 6;
-
struct WGWorkshopData
{
uint8 id;
@@ -1121,7 +1136,7 @@ struct WGWorkshopData
uint32 text;
};
-const WGWorkshopData WorkshopsData[WG_MAX_WORKSHOP] =
+const WGWorkshopData WorkshopsData[BattlefieldWG::WG_MAX_WORKSHOP] =
{
// NE
{BATTLEFIELD_WG_WORKSHOP_NE, WORLDSTATE_WORKSHOP_NE, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NE},
@@ -1215,7 +1230,7 @@ struct BfWGGameObjectBuilding
m_WG->SendUpdateWorldState(m_WorldState, m_State);
}
UpdateCreatureAndGo();
- m_Build->SetUInt32Value(GAMEOBJECT_FACTION, WintergraspFaction[m_Team]);
+ m_Build->SetUInt32Value(GAMEOBJECT_FACTION, BattlefieldWG::WintergraspFaction[m_Team]);
}
// Called when associated gameobject is damaged
@@ -1402,12 +1417,12 @@ struct BfWGGameObjectBuilding
case GO_WINTERGRASP_FORTRESS_TOWER_2:
case GO_WINTERGRASP_FORTRESS_TOWER_3:
case GO_WINTERGRASP_FORTRESS_TOWER_4:
- turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
+ turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]);
break;
case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
case GO_WINTERGRASP_FLAMEWATCH_TOWER:
- turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
+ turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]);
break;
}
m_WG->HideNpc(turret);
@@ -1428,12 +1443,12 @@ struct BfWGGameObjectBuilding
case GO_WINTERGRASP_FORTRESS_TOWER_2:
case GO_WINTERGRASP_FORTRESS_TOWER_3:
case GO_WINTERGRASP_FORTRESS_TOWER_4:
- turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
+ turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]);
break;
case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
case GO_WINTERGRASP_FLAMEWATCH_TOWER:
- turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
+ turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]);
break;
}
m_WG->HideNpc(turret);
@@ -1494,14 +1509,14 @@ struct BfWGGameObjectBuilding
case GO_WINTERGRASP_FORTRESS_TOWER_3:
case GO_WINTERGRASP_FORTRESS_TOWER_4:
{
- creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
+ creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]);
break;
}
case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
case GO_WINTERGRASP_FLAMEWATCH_TOWER:
{
- creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
+ creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]);
break;
}
}
@@ -1530,14 +1545,14 @@ struct BfWGGameObjectBuilding
case GO_WINTERGRASP_FORTRESS_TOWER_3:
case GO_WINTERGRASP_FORTRESS_TOWER_4:
{
- creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]);
+ creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]);
break;
}
case GO_WINTERGRASP_SHADOWSIGHT_TOWER:
case GO_WINTERGRASP_WINTER_S_EDGE_TOWER:
case GO_WINTERGRASP_FLAMEWATCH_TOWER:
{
- creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]);
+ creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]);
break;
}
}
@@ -1566,7 +1581,7 @@ struct WGWorkshop
WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId)
{
- ASSERT(_bf || _workshopId < WG_MAX_WORKSHOP);
+ ASSERT(_bf || _workshopId < BattlefieldWG::WG_MAX_WORKSHOP);
bf = _bf;
workshopId = _workshopId;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index ee5f33fc59c..c0e3e3afc03 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -76,6 +76,7 @@
#include "AccountMgr.h"
#include "Battlefield.h"
#include "BattlefieldMgr.h"
+#include "BattlefieldWG.h"
#define ZONE_UPDATE_INTERVAL (1*IN_MILLISECONDS)
@@ -9041,6 +9042,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
uint32 mapid = GetMapId();
OutdoorPvP* pvp = sOutdoorPvPMgr->GetOutdoorPvPToZoneId(zoneid);
InstanceScript* instance = GetInstanceScript();
+ Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(zoneid);
sLog->outDebug(LOG_FILTER_NETWORKIO, "Sending SMSG_INIT_WORLD_STATES to Map: %u, Zone: %u", mapid, zoneid);
@@ -9114,6 +9116,10 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
case 4273: // Ulduar
NumberOfFields = 10;
break;
+ case 4197: // Wintergrasp
+ /// Use the max here, and fill with zeros if missing.
+ NumberOfFields = 10 + BattlefieldWG::WG_MAX_OBJ + BattlefieldWG::WG_MAX_WORKSHOP;
+ break;
default:
NumberOfFields = 12;
break;
@@ -9123,6 +9129,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
data << uint32(mapid); // mapid
data << uint32(zoneid); // zone id
data << uint32(areaid); // area id, new 2.1.0
+ size_t countPos = data.wpos();
data << uint16(NumberOfFields); // count of uint64 blocks
data << uint32(0x8d8) << uint32(0x0); // 1
data << uint32(0x8d7) << uint32(0x0); // 2
@@ -9668,6 +9675,16 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
data << uint32(4131) << uint32(0); // 10 WORLDSTATE_CRATES_REVEALED
}
break;
+ // Wintergrasp
+ case 4197:
+ if (bf && bf->GetTypeId() == BATTLEFIELD_WG)
+ {
+ bf->FillInitialWorldStates(data);
+ break;
+ }
+ else
+ data.put<uint16>(countPos, 12);
+ // No break here, intended.
default:
data << uint32(0x914) << uint32(0x0); // 7
data << uint32(0x913) << uint32(0x0); // 8
@@ -9677,6 +9694,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
}
GetSession()->SendPacket(&data);
SendBGWeekendWorldStates();
+ SendBattlefieldWorldStates();
}
void Player::SendBGWeekendWorldStates()
@@ -9694,6 +9712,24 @@ void Player::SendBGWeekendWorldStates()
}
}
+void Player::SendBattlefieldWorldStates()
+{
+ /// Send misc stuff that needs to be sent on every login, like the battle timers.
+ if (sWorld->getBoolConfig(CONFIG_WINTERGRASP_ENABLE))
+ {
+ if (BattlefieldWG* wg = (BattlefieldWG*)sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG))
+ {
+ if (wg->IsWarTime())
+ SendUpdateWorldState(BattlefieldWG::ClockWorldState[1], uint32(time(NULL)));
+ else // Time to next battle
+ {
+ uint32 timer = wg->GetTimer() / 1000;
+ SendUpdateWorldState(BattlefieldWG::ClockWorldState[1], time(NULL) + timer);
+ }
+ }
+ }
+}
+
uint32 Player::GetXPRestBonus(uint32 xp)
{
uint32 rested_bonus = (uint32)GetRestBonus(); // xp for each rested bonus
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 0decacd6258..82e91985b04 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2125,6 +2125,7 @@ class Player : public Unit, public GridObject<Player>
void SendUpdateWorldState(uint32 Field, uint32 Value);
void SendDirectMessage(WorldPacket* data);
void SendBGWeekendWorldStates();
+ void SendBattlefieldWorldStates();
void SendAurasForTarget(Unit* target);
diff --git a/src/server/scripts/Northrend/wintergrasp.cpp b/src/server/scripts/Northrend/wintergrasp.cpp
index 59e9a31c4cf..c58f6fc2dff 100644
--- a/src/server/scripts/Northrend/wintergrasp.cpp
+++ b/src/server/scripts/Northrend/wintergrasp.cpp
@@ -307,7 +307,7 @@ class go_wg_vehicle_teleporter : public GameObjectScript
// Tabulation madness in the hole!
for (uint8 i = 0; i < MAX_WINTERGRASP_VEHICLES; i++)
if (Creature* vehicleCreature = go->FindNearestCreature(vehiclesList[i], 3.0f, true))
- if (!vehicleCreature->HasAura(SPELL_VEHICLE_TELEPORT) && vehicleCreature->getFaction() == WintergraspFaction[wg->GetDefenderTeam()])
+ if (!vehicleCreature->HasAura(SPELL_VEHICLE_TELEPORT) && vehicleCreature->getFaction() == BattlefieldWG::WintergraspFaction[wg->GetDefenderTeam()])
if (Creature* teleportTrigger = vehicleCreature->FindNearestCreature(NPC_WORLD_TRIGGER_LARGE_AOI_NOT_IMMUNE_PC_NPC, 100.0f, true))
teleportTrigger->CastSpell(vehicleCreature, SPELL_VEHICLE_TELEPORT, true);