fix(DB/SAI): Move Drakuru Shackles & Captured Rageclaw behaviour on SAI. (#24467)

This commit is contained in:
Rocco Silipo
2026-01-19 15:13:30 +01:00
committed by GitHub
parent f72b42eb81
commit 702c99b6b1
2 changed files with 35 additions and 146 deletions

View File

@@ -610,150 +610,6 @@ private:
BetrayalState _state;
};
/*####
## npc_drakuru_shackles
####*/
enum DrakuruShackles
{
NPC_RAGECLAW = 29686,
QUEST_TROLLS_IS_GONE_CRAZY = 12861,
SPELL_LEFT_CHAIN = 59951,
SPELL_RIGHT_CHAIN = 59952,
SPELL_UNLOCK_SHACKLE = 55083,
SPELL_FREE_RAGECLAW = 55223
};
class npc_drakuru_shackles : public CreatureScript
{
public:
npc_drakuru_shackles() : CreatureScript("npc_drakuru_shackles") { }
struct npc_drakuru_shacklesAI : public NullCreatureAI
{
npc_drakuru_shacklesAI(Creature* creature) : NullCreatureAI(creature)
{
_rageclawGUID.Clear();
timer = 0;
}
void Reset() override
{
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
}
void UpdateAI(uint32 diff) override
{
timer += diff;
if (timer >= 2000)
{
timer = 0;
if (_rageclawGUID)
return;
if (Creature* cr = me->FindNearestCreature(NPC_RAGECLAW, 10.0f))
{
_rageclawGUID = cr->GetGUID();
LockRageclaw(cr);
}
}
}
void LockRageclaw(Creature* rageclaw)
{
// pointer check not needed
me->SetFacingToObject(rageclaw);
rageclaw->SetFacingToObject(me);
DoCast(rageclaw, SPELL_LEFT_CHAIN, true);
DoCast(rageclaw, SPELL_RIGHT_CHAIN, true);
}
void UnlockRageclaw(Unit* /*who*/, Creature* rageclaw)
{
// pointer check not needed
DoCast(rageclaw, SPELL_FREE_RAGECLAW, true);
_rageclawGUID.Clear();
me->DespawnOrUnsummon(1ms);
}
void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (spell->Id == SPELL_UNLOCK_SHACKLE)
{
if (caster->ToPlayer()->GetQuestStatus(QUEST_TROLLS_IS_GONE_CRAZY) == QUEST_STATUS_INCOMPLETE)
{
if (Creature* rageclaw = ObjectAccessor::GetCreature(*me, _rageclawGUID))
{
UnlockRageclaw(caster, rageclaw);
caster->ToPlayer()->KilledMonster(rageclaw->GetCreatureTemplate(), _rageclawGUID);
me->DespawnOrUnsummon();
}
else
me->setDeathState(DeathState::JustDied);
}
}
}
private:
ObjectGuid _rageclawGUID;
uint32 timer;
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_drakuru_shacklesAI(creature);
}
};
/*####
## npc_captured_rageclaw
####*/
enum Rageclaw
{
SPELL_UNSHACKLED = 55085,
SPELL_KNEEL = 39656,
SAY_RAGECLAW = 0
};
class npc_captured_rageclaw : public CreatureScript
{
public:
npc_captured_rageclaw() : CreatureScript("npc_captured_rageclaw") { }
struct npc_captured_rageclawAI : public NullCreatureAI
{
npc_captured_rageclawAI(Creature* creature) : NullCreatureAI(creature) { }
void Reset() override
{
me->SetFaction(FACTION_FRIENDLY);
DoCast(me, SPELL_KNEEL, true); // Little Hack for kneel - Thanks Illy :P
}
void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
{
if (spell->Id == SPELL_FREE_RAGECLAW)
{
me->RemoveAurasDueToSpell(SPELL_LEFT_CHAIN);
me->RemoveAurasDueToSpell(SPELL_RIGHT_CHAIN);
me->RemoveAurasDueToSpell(SPELL_KNEEL);
me->SetFaction(me->GetCreatureTemplate()->faction);
DoCast(me, SPELL_UNSHACKLED, true);
Talk(SAY_RAGECLAW);
me->GetMotionMaster()->MoveRandom(10);
me->DespawnOrUnsummon(10s);
}
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_captured_rageclawAI(creature);
}
};
/*####
## npc_released_offspring_harkoa
####*/
@@ -973,8 +829,6 @@ void AddSC_zuldrak()
new npc_finklestein();
new go_finklestein_cauldron();
RegisterCreatureAI(npc_overlord_drakuru_betrayal);
new npc_drakuru_shackles();
new npc_captured_rageclaw();
new npc_released_offspring_harkoa();
new npc_crusade_recruit();
new go_scourge_enclosure();