aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Northrend/zone_wintergrasp.cpp42
1 files changed, 28 insertions, 14 deletions
diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp
index 311056a09c2..a9df87a3969 100644
--- a/src/server/scripts/Northrend/zone_wintergrasp.cpp
+++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp
@@ -338,25 +338,39 @@ class go_wg_vehicle_teleporter : public GameObjectScript
struct go_wg_vehicle_teleporterAI : public GameObjectAI
{
- go_wg_vehicle_teleporterAI(GameObject* gameObject) : GameObjectAI(gameObject), _checkTimer(1000) { }
+ go_wg_vehicle_teleporterAI(GameObject* gameObject) : GameObjectAI(gameObject), _checkTimer(0) { }
- void UpdateAI(uint32 diff) override
+ bool IsFriendly(Unit* passenger)
{
- if (_checkTimer <= diff)
+ return ((go->GetUInt32Value(GAMEOBJECT_FACTION) == WintergraspFaction[TEAM_HORDE] && passenger->getFaction() == HORDE) ||
+ (go->GetUInt32Value(GAMEOBJECT_FACTION) == WintergraspFaction[TEAM_ALLIANCE] && passenger->getFaction() == ALLIANCE));
+ }
+
+ Creature* GetValidVehicle(Creature* cVeh)
+ {
+ if (!cVeh->HasAura(SPELL_VEHICLE_TELEPORT))
+ if (Vehicle* vehicle = cVeh->GetVehicleKit())
+ if (Unit* passenger = vehicle->GetPassenger(0))
+ if (IsFriendly(passenger))
+ if (Creature* teleportTrigger = passenger->SummonTrigger(go->GetPositionX()-60.0f, go->GetPositionY(), go->GetPositionZ()+1.0f, cVeh->GetOrientation(), 1000))
+ return teleportTrigger;
+
+ return nullptr;
+ }
+
+ void UpdateAI(uint32 diff)
+ {
+ _checkTimer += diff;
+ if (_checkTimer >= 1000)
{
- if (Battlefield* wg = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG))
- // 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 (Creature* teleportTrigger = vehicleCreature->FindNearestCreature(NPC_WORLD_TRIGGER_LARGE_AOI_NOT_IMMUNE_PC_NPC, 100.0f, true))
- teleportTrigger->CastSpell(vehicleCreature, SPELL_VEHICLE_TELEPORT, true);
-
- _checkTimer = 1000;
+ for (uint8 i = 0; i < MAX_WINTERGRASP_VEHICLES; i++)
+ if (Creature* vehicleCreature = go->FindNearestCreature(vehiclesList[i], 3.0f, true))
+ if (Creature* teleportTrigger = GetValidVehicle(vehicleCreature))
+ teleportTrigger->CastSpell(vehicleCreature, SPELL_VEHICLE_TELEPORT, true);
+
+ _checkTimer = 0;
}
- else _checkTimer -= diff;
}
-
private:
uint32 _checkTimer;
};