From f6ab6d3fca02c8d9c171cf79c536f7fa982ae616 Mon Sep 17 00:00:00 2001 From: Kandera Date: Thu, 23 Aug 2012 13:21:27 -0400 Subject: Scripts/Wintergrasp: fix defender portal teleporting and clean up vehicle teleporter code --- src/server/scripts/Northrend/wintergrasp.cpp | 46 ++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 9 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Northrend/wintergrasp.cpp b/src/server/scripts/Northrend/wintergrasp.cpp index fc967acf9e2..5440c3e01c1 100644 --- a/src/server/scripts/Northrend/wintergrasp.cpp +++ b/src/server/scripts/Northrend/wintergrasp.cpp @@ -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(); -- cgit v1.2.3 From b11de3eac08a3c315372005f504152b01224ed88 Mon Sep 17 00:00:00 2001 From: Kandera Date: Thu, 23 Aug 2012 13:29:54 -0400 Subject: Scripts/Wintergrasp: enable script and add it to spell_script_names --- .../world/2012_08_23_00_world_wintergrasp_spell_script_names.sql | 3 +++ src/server/scripts/Northrend/wintergrasp.cpp | 1 + 2 files changed, 4 insertions(+) create mode 100644 sql/updates/world/2012_08_23_00_world_wintergrasp_spell_script_names.sql (limited to 'src/server/scripts') diff --git a/sql/updates/world/2012_08_23_00_world_wintergrasp_spell_script_names.sql b/sql/updates/world/2012_08_23_00_world_wintergrasp_spell_script_names.sql new file mode 100644 index 00000000000..a3dbf81d425 --- /dev/null +++ b/sql/updates/world/2012_08_23_00_world_wintergrasp_spell_script_names.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` = 54640; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(54640, 'spell_wintergrasp_defender_teleport'); diff --git a/src/server/scripts/Northrend/wintergrasp.cpp b/src/server/scripts/Northrend/wintergrasp.cpp index 5440c3e01c1..2a5dd797c47 100644 --- a/src/server/scripts/Northrend/wintergrasp.cpp +++ b/src/server/scripts/Northrend/wintergrasp.cpp @@ -585,4 +585,5 @@ void AddSC_wintergrasp() new spell_wintergrasp_force_building(); new spell_wintergrasp_grab_passenger(); new achievement_wg_didnt_stand_a_chance(); + new spell_wintergrasp_defender_teleport(); } -- cgit v1.2.3 From 2041ff25628fefa5a3423466176374ae499577e0 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Fri, 24 Aug 2012 20:25:18 +0200 Subject: Core/Battlefield: * Fix correct faction for Wintergrasp * Remove hack for vehicle faction * Fix gameobject ai for go_wg_vehicle_teleporter * Fix some warnings and code style --- src/server/game/Battlefield/Zones/BattlefieldWG.cpp | 2 -- src/server/game/Battlefield/Zones/BattlefieldWG.h | 2 +- src/server/scripts/Northrend/wintergrasp.cpp | 10 +++------- 3 files changed, 4 insertions(+), 10 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index b764058cd82..7410cf8eeea 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -538,7 +538,6 @@ void BattlefieldWG::OnCreatureCreate(Creature* creature) { UpdateData(BATTLEFIELD_WG_DATA_VEHICLE_H, 1); creature->AddAura(SPELL_HORDE_FLAG, creature); - creature->setFaction(WintergraspFaction[team]); m_vehicles[team].insert(creature->GetGUID()); UpdateVehicleCountWG(); } @@ -555,7 +554,6 @@ void BattlefieldWG::OnCreatureCreate(Creature* creature) { UpdateData(BATTLEFIELD_WG_DATA_VEHICLE_A, 1); creature->AddAura(SPELL_ALLIANCE_FLAG, creature); - creature->setFaction(WintergraspFaction[team]); m_vehicles[team].insert(creature->GetGUID()); UpdateVehicleCountWG(); } diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h index be062704b52..7ef7e61b63c 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h @@ -29,7 +29,7 @@ uint32 const VehNumWorldState[2] = { 3680, 3490 }; uint32 const MaxVehNumWorldState[2] = { 3681, 3491 }; uint32 const ClockWorldState[2] = { 3781, 4354 }; -uint32 const WintergraspFaction[3] = { 1, 2, 35 }; +uint32 const WintergraspFaction[3] = { 1732, 1735, 35 }; float const WintergraspStalkerPos[4] = { 0, 0, 0, 0 }; class BattlefieldWG; diff --git a/src/server/scripts/Northrend/wintergrasp.cpp b/src/server/scripts/Northrend/wintergrasp.cpp index 2a5dd797c47..5923cfadec7 100644 --- a/src/server/scripts/Northrend/wintergrasp.cpp +++ b/src/server/scripts/Northrend/wintergrasp.cpp @@ -119,8 +119,6 @@ class npc_wg_demolisher_engineer : public CreatureScript if (creature->isQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); - Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); - if (canBuild(creature)) { if (player->HasAura(SPELL_CORPORAL)) @@ -143,8 +141,6 @@ class npc_wg_demolisher_engineer : public CreatureScript { player->CLOSE_GOSSIP_MENU(); - Battlefield* wintergrasp= sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); - if (canBuild(creature)) { switch (action - GOSSIP_ACTION_INFO_DEF) @@ -169,9 +165,9 @@ class npc_wg_demolisher_engineer : public CreatureScript bool canBuild(Creature* creature) { Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); - if (!wintergrasp) return false; + switch (creature->GetEntry()) { case NPC_GOBLIN_MECHANIC: @@ -207,7 +203,7 @@ class npc_wg_spirit_guide : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/ , uint32 /*sender */ , uint32 action) + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) { player->CLOSE_GOSSIP_MENU(); @@ -324,7 +320,7 @@ class go_wg_vehicle_teleporter : public GameObjectScript uint32 _checkTimer; }; - GameObjectAI* GetGameObjectAI(GameObject* go) const + GameObjectAI* GetAI(GameObject* go) const { return new go_wg_vehicle_teleporterAI(go); } -- cgit v1.2.3