Scripts/Wintergrasp: Fix vehicle teleporter (#17550)

By WoWErrorDev, closes #5831.
This commit is contained in:
Aokromes
2016-10-04 20:55:05 +02:00
committed by SnapperRy
parent 256d07f26f
commit 308a2413a1

View File

@@ -337,25 +337,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)
{
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;
}
else _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)
{
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;
}
}
private:
uint32 _checkTimer;
};