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); }