From df89bbafe481ae6c5f93b4fa630a561de6612343 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 27 Mar 2022 06:16:12 +0200 Subject: [PATCH] =?UTF-8?q?fix(Scripts/Vehicles):=20The=20next=20player=20?= =?UTF-8?q?entering=20Salvaged=20Siege=20Engine=E2=80=A6=20(#10987)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … should control turret if it's not occupied. --- .../rev_1647104625347732100.sql | 3 ++ src/server/game/AI/CreatureAI.h | 2 ++ src/server/game/Entities/Unit/Unit.cpp | 10 ++++++- .../Northrend/Ulduar/Ulduar/ulduar.cpp | 29 +++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 data/sql/updates/pending_db_world/rev_1647104625347732100.sql diff --git a/data/sql/updates/pending_db_world/rev_1647104625347732100.sql b/data/sql/updates/pending_db_world/rev_1647104625347732100.sql new file mode 100644 index 000000000..726202c8a --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1647104625347732100.sql @@ -0,0 +1,3 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647104625347732100'); + +UPDATE `creature_template` SET `ScriptName`='npc_salvaged_siege_engine' WHERE `entry`=33060; diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 2f5880287..a9a82989f 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -177,6 +177,8 @@ public: /// == Fields ======================================= virtual void PassengerBoarded(Unit* /*passenger*/, int8 /*seatId*/, bool /*apply*/) {} + virtual bool BeforeSpellClick(Unit* /*clicker*/) { return true; } + virtual void OnSpellClick(Unit* /*clicker*/, bool& /*result*/) { } virtual bool CanSeeAlways(WorldObject const* /*obj*/) { return false; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 450449991..38c03c210 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -18899,6 +18899,15 @@ void Unit::JumpTo(WorldObject* obj, float speedZ) bool Unit::HandleSpellClick(Unit* clicker, int8 seatId) { + Creature* creature = ToCreature(); + if (creature && creature->IsAIEnabled) + { + if (!creature->AI()->BeforeSpellClick(clicker)) + { + return false; + } + } + bool result = false; uint32 spellClickEntry = GetVehicleKit() ? GetVehicleKit()->GetCreatureEntry() : GetEntry(); SpellClickInfoMapBounds clickPair = sObjectMgr->GetSpellClickInfoMapBounds(spellClickEntry); @@ -18967,7 +18976,6 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId) result = true; } - Creature* creature = ToCreature(); if (creature && creature->IsAIEnabled) creature->AI()->OnSpellClick(clicker, result); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp index 6e7dfad7a..2d7e31a2d 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp @@ -16,12 +16,14 @@ */ #include "ulduar.h" +#include "CombatAI.h" #include "Player.h" #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "ScriptedGossip.h" #include "SpellAuraEffects.h" #include "SpellScript.h" +#include "Vehicle.h" class npc_ulduar_keeper : public CreatureScript { @@ -423,6 +425,31 @@ public: } }; +struct npc_salvaged_siege_engine : public VehicleAI +{ + npc_salvaged_siege_engine(Creature* creature) : VehicleAI(creature) { } + + bool BeforeSpellClick(Unit* clicker) override + { + if (Vehicle* vehicle = me->GetVehicleKit()) + { + if (vehicle->IsVehicleInUse()) + { + if (Unit* turret = vehicle->GetPassenger(7)) + { + if (!turret->GetVehicleKit()->IsVehicleInUse()) + { + turret->HandleSpellClick(clicker); + return false; + } + } + } + } + + return true; + } +}; + void AddSC_ulduar() { new npc_ulduar_keeper(); @@ -435,4 +462,6 @@ void AddSC_ulduar() new AreaTrigger_at_celestial_planetarium_enterance(); new go_call_tram(); + + RegisterCreatureAI(npc_salvaged_siege_engine); }