diff options
author | Aokromes <Aokromes@users.noreply.github.com> | 2016-10-04 20:55:05 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-03-05 01:39:26 +0100 |
commit | c170813b96fe33a58db75a5f72c7beeb2cf24847 (patch) | |
tree | 6bf6dd5e29af2e3e6bca34b645d6dc6494850966 | |
parent | ba93c3b2a9fb1779159d57628d1b9cb613c590d2 (diff) |
Scripts/Wintergrasp: Fix vehicle teleporter (#17550)
By WoWErrorDev, closes #5831.
(cherry picked from commit 308a2413a147063351fbb3590b367ea71b4dcd3d)
-rw-r--r-- | src/server/scripts/Northrend/zone_wintergrasp.cpp | 42 |
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; }; |