fix(Scripts/Vehicles): The next player entering Salvaged Siege Engine… (#10987)

… should control turret if it's not occupied.
This commit is contained in:
UltraNix
2022-03-27 06:16:12 +02:00
committed by GitHub
parent e7299c6e36
commit df89bbafe4
4 changed files with 43 additions and 1 deletions

View File

@@ -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;

View File

@@ -177,6 +177,8 @@ public:
/// == Fields ======================================= /// == Fields =======================================
virtual void PassengerBoarded(Unit* /*passenger*/, int8 /*seatId*/, bool /*apply*/) {} virtual void PassengerBoarded(Unit* /*passenger*/, int8 /*seatId*/, bool /*apply*/) {}
virtual bool BeforeSpellClick(Unit* /*clicker*/) { return true; }
virtual void OnSpellClick(Unit* /*clicker*/, bool& /*result*/) { } virtual void OnSpellClick(Unit* /*clicker*/, bool& /*result*/) { }
virtual bool CanSeeAlways(WorldObject const* /*obj*/) { return false; } virtual bool CanSeeAlways(WorldObject const* /*obj*/) { return false; }

View File

@@ -18899,6 +18899,15 @@ void Unit::JumpTo(WorldObject* obj, float speedZ)
bool Unit::HandleSpellClick(Unit* clicker, int8 seatId) bool Unit::HandleSpellClick(Unit* clicker, int8 seatId)
{ {
Creature* creature = ToCreature();
if (creature && creature->IsAIEnabled)
{
if (!creature->AI()->BeforeSpellClick(clicker))
{
return false;
}
}
bool result = false; bool result = false;
uint32 spellClickEntry = GetVehicleKit() ? GetVehicleKit()->GetCreatureEntry() : GetEntry(); uint32 spellClickEntry = GetVehicleKit() ? GetVehicleKit()->GetCreatureEntry() : GetEntry();
SpellClickInfoMapBounds clickPair = sObjectMgr->GetSpellClickInfoMapBounds(spellClickEntry); SpellClickInfoMapBounds clickPair = sObjectMgr->GetSpellClickInfoMapBounds(spellClickEntry);
@@ -18967,7 +18976,6 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId)
result = true; result = true;
} }
Creature* creature = ToCreature();
if (creature && creature->IsAIEnabled) if (creature && creature->IsAIEnabled)
creature->AI()->OnSpellClick(clicker, result); creature->AI()->OnSpellClick(clicker, result);

View File

@@ -16,12 +16,14 @@
*/ */
#include "ulduar.h" #include "ulduar.h"
#include "CombatAI.h"
#include "Player.h" #include "Player.h"
#include "ScriptMgr.h" #include "ScriptMgr.h"
#include "ScriptedCreature.h" #include "ScriptedCreature.h"
#include "ScriptedGossip.h" #include "ScriptedGossip.h"
#include "SpellAuraEffects.h" #include "SpellAuraEffects.h"
#include "SpellScript.h" #include "SpellScript.h"
#include "Vehicle.h"
class npc_ulduar_keeper : public CreatureScript 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() void AddSC_ulduar()
{ {
new npc_ulduar_keeper(); new npc_ulduar_keeper();
@@ -435,4 +462,6 @@ void AddSC_ulduar()
new AreaTrigger_at_celestial_planetarium_enterance(); new AreaTrigger_at_celestial_planetarium_enterance();
new go_call_tram(); new go_call_tram();
RegisterCreatureAI(npc_salvaged_siege_engine);
} }