Scripts/Wintergrasp: fix defender portal teleporting and clean up vehicle teleporter code

This commit is contained in:
Kandera
2012-08-23 13:21:27 -04:00
parent a1b3ec2e21
commit f6ab6d3fca

View File

@@ -307,15 +307,13 @@ class go_wg_vehicle_teleporter : public GameObjectScript
{
if (_checkTimer <= diff)
{
// 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))
if (Vehicle* vehicle = vehicleCreature->GetVehicle())
if (Unit* passenger = vehicle->GetPassenger(0))
if (go->GetUInt32Value(GAMEOBJECT_FACTION) == passenger->getFaction())
if (Creature* teleportTrigger = vehicleCreature->FindNearestCreature(NPC_WORLD_TRIGGER_LARGE_AOI_NOT_IMMUNE_PC_NPC, 100.0f, true))
teleportTrigger->CastSpell(vehicleCreature, SPELL_VEHICLE_TELEPORT, true);
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;
}
@@ -547,6 +545,36 @@ public:
}
};
class spell_wintergrasp_defender_teleport : public SpellScriptLoader
{
public:
spell_wintergrasp_defender_teleport() : SpellScriptLoader("spell_wintergrasp_defender_teleport") { }
class spell_wintergrasp_defender_teleport_SpellScript : public SpellScript
{
PrepareSpellScript(spell_wintergrasp_defender_teleport_SpellScript);
SpellCastResult CheckCast()
{
if (Battlefield* wg = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG))
if (Player* target = GetExplTargetUnit()->ToPlayer())
if (target->GetTeamId() != wg->GetDefenderTeam())
return SPELL_FAILED_BAD_TARGETS;
return SPELL_CAST_OK;
}
void Register()
{
OnCheckCast += SpellCheckCastFn(spell_wintergrasp_defender_teleport_SpellScript::CheckCast);
}
};
SpellScript* GetSpellScript() const
{
return new spell_wintergrasp_defender_teleport_SpellScript();
}
};
void AddSC_wintergrasp()
{
new npc_wg_queue();