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

View File

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

View File

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