fix(Scripts/ThousandNeedles): Improve the handling of quest 5151 (Hyp… (#17811)

This commit is contained in:
Andrew
2023-11-20 18:14:43 -03:00
committed by GitHub
parent 6289565bbf
commit 0fe18f7c6b
2 changed files with 32 additions and 43 deletions

View File

@@ -0,0 +1,14 @@
--
UPDATE `creature_template` SET `ScriptName` = '', `AIName` = 'SmartAI' WHERE `entry` = 10992;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 10992);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(10992, 0, 0, 1, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Enraged Panther - On Reset - Set Reactstate Passive'),
(10992, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 18, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Enraged Panther - On Reset - Set Flags Not Attackable');
UPDATE `gameobject_template` SET `ScriptName` = '' WHERE `entry` = 176195;
DELETE FROM `spell_script_names` WHERE `spell_id` = 17176;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(17176, 'spell_panther_cage_key');

View File

@@ -35,6 +35,7 @@ EndContentData */
#include "ScriptedCreature.h"
#include "ScriptedEscortAI.h"
#include "ScriptedGossip.h"
#include "SpellScript.h"
/*######
# npc_lakota_windsong
@@ -322,59 +323,34 @@ public:
enum PantherCage
{
ENRAGED_PANTHER = 10992
NPC_ENRAGED_PANTHER = 10992,
QUEST_HYPERCAPACITOR_GIZMO = 5151
};
class go_panther_cage : public GameObjectScript
class spell_panther_cage_key : public SpellScript
{
public:
go_panther_cage() : GameObjectScript("go_panther_cage") { }
PrepareSpellScript(spell_panther_cage_key);
bool OnGossipHello(Player* player, GameObject* go) override
void HandleDummy()
{
go->UseDoorOrButton();
if (player->GetQuestStatus(5151) == QUEST_STATUS_INCOMPLETE)
if (Player* player = GetCaster()->ToPlayer())
{
if (Creature* panther = go->FindNearestCreature(ENRAGED_PANTHER, 5, true))
if (player->GetQuestStatus(QUEST_HYPERCAPACITOR_GIZMO) == QUEST_STATUS_INCOMPLETE)
{
panther->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
panther->SetReactState(REACT_AGGRESSIVE);
panther->AI()->AttackStart(player);
if (Creature* panther = player->FindNearestCreature(NPC_ENRAGED_PANTHER, 5.0f, true))
{
panther->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
panther->SetReactState(REACT_AGGRESSIVE);
panther->AI()->AttackStart(GetCaster());
}
}
}
return true;
}
};
class npc_enraged_panther : public CreatureScript
{
public:
npc_enraged_panther() : CreatureScript("npc_enraged_panther") { }
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_enraged_pantherAI(creature);
}
struct npc_enraged_pantherAI : public ScriptedAI
void Register() override
{
npc_enraged_pantherAI(Creature* creature) : ScriptedAI(creature) { }
void Reset() override
{
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_PASSIVE);
}
void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
}
};
AfterCast += SpellCastFn(spell_panther_cage_key::HandleDummy);
}
};
void AddSC_thousand_needles()
@@ -382,6 +358,5 @@ void AddSC_thousand_needles()
new npc_lakota_windsong();
new npc_paoka_swiftmountain();
new npc_plucky();
new npc_enraged_panther();
new go_panther_cage();
RegisterSpellScript(spell_panther_cage_key);
}