mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-08 15:58:04 +00:00
fix(Scripts/TempleOfAhnQiraj): Fix crash caused by permanently spawni… (#13698)
fix(Scripts/TempleOfAhnQiraj): Fix crash caused by permanently spawning a tentacle
This commit is contained in:
@@ -602,11 +602,14 @@ struct npc_eye_tentacle : public ScriptedAI
|
|||||||
portal->SetReactState(REACT_PASSIVE);
|
portal->SetReactState(REACT_PASSIVE);
|
||||||
_portalGUID = portal->GetGUID();
|
_portalGUID = portal->GetGUID();
|
||||||
|
|
||||||
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
|
if (me->ToTempSummon())
|
||||||
{
|
{
|
||||||
if (Creature* creature = summoner->ToCreature())
|
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
|
||||||
{
|
{
|
||||||
creature->AI()->JustSummoned(portal);
|
if (Creature* creature = summoner->ToCreature())
|
||||||
|
{
|
||||||
|
creature->AI()->JustSummoned(portal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -673,11 +676,14 @@ struct npc_claw_tentacle : public ScriptedAI
|
|||||||
portal->SetReactState(REACT_PASSIVE);
|
portal->SetReactState(REACT_PASSIVE);
|
||||||
_portalGUID = portal->GetGUID();
|
_portalGUID = portal->GetGUID();
|
||||||
|
|
||||||
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
|
if (me->ToTempSummon())
|
||||||
{
|
{
|
||||||
if (Creature* creature = summoner->ToCreature())
|
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
|
||||||
{
|
{
|
||||||
creature->AI()->JustSummoned(portal);
|
if (Creature* creature = summoner->ToCreature())
|
||||||
|
{
|
||||||
|
creature->AI()->JustSummoned(portal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -740,11 +746,14 @@ struct npc_giant_claw_tentacle : public ScriptedAI
|
|||||||
portal->SetReactState(REACT_PASSIVE);
|
portal->SetReactState(REACT_PASSIVE);
|
||||||
_portalGUID = portal->GetGUID();
|
_portalGUID = portal->GetGUID();
|
||||||
|
|
||||||
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
|
if (me->ToTempSummon())
|
||||||
{
|
{
|
||||||
if (Creature* creature = summoner->ToCreature())
|
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
|
||||||
{
|
{
|
||||||
creature->AI()->JustSummoned(portal);
|
if (Creature* creature = summoner->ToCreature())
|
||||||
|
{
|
||||||
|
creature->AI()->JustSummoned(portal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -771,24 +780,10 @@ struct npc_giant_claw_tentacle : public ScriptedAI
|
|||||||
void EnterCombat(Unit* /*who*/) override
|
void EnterCombat(Unit* /*who*/) override
|
||||||
{
|
{
|
||||||
DoZoneInCombat();
|
DoZoneInCombat();
|
||||||
|
ScheduleTasks();
|
||||||
_scheduler.Schedule(2s, [this](TaskContext context)
|
|
||||||
{
|
|
||||||
DoCastVictim(SPELL_HAMSTRING);
|
|
||||||
context.Repeat(10s);
|
|
||||||
}).Schedule(5s, [this](TaskContext context)
|
|
||||||
{
|
|
||||||
DoCastSelf(SPELL_THRASH);
|
|
||||||
context.Repeat(10s);
|
|
||||||
}).Schedule(3s, [this](TaskContext /*context*/)
|
|
||||||
{
|
|
||||||
_canAttack = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
ScheduleMeleeCheck();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScheduleMeleeCheck()
|
void ScheduleTasks()
|
||||||
{
|
{
|
||||||
// Check if a target is in melee range
|
// Check if a target is in melee range
|
||||||
_scheduler.Schedule(10s, [this](TaskContext task)
|
_scheduler.Schedule(10s, [this](TaskContext task)
|
||||||
@@ -810,6 +805,17 @@ struct npc_giant_claw_tentacle : public ScriptedAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
task.Repeat();
|
task.Repeat();
|
||||||
|
}).Schedule(2s, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
DoCastVictim(SPELL_HAMSTRING);
|
||||||
|
context.Repeat(10s);
|
||||||
|
}).Schedule(5s, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
DoCastSelf(SPELL_THRASH);
|
||||||
|
context.Repeat(10s);
|
||||||
|
}).Schedule(3s, [this](TaskContext /*context*/)
|
||||||
|
{
|
||||||
|
_canAttack = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -856,13 +862,8 @@ struct npc_giant_claw_tentacle : public ScriptedAI
|
|||||||
DoCastAOE(SPELL_MASSIVE_GROUND_RUPTURE, true);
|
DoCastAOE(SPELL_MASSIVE_GROUND_RUPTURE, true);
|
||||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
|
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
|
||||||
|
|
||||||
ScheduleMeleeCheck();
|
ScheduleTasks();
|
||||||
}
|
}
|
||||||
|
|
||||||
_scheduler.Schedule(3s, [this](TaskContext /*context*/)
|
|
||||||
{
|
|
||||||
_canAttack = true;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
@@ -896,11 +897,14 @@ struct npc_giant_eye_tentacle : public ScriptedAI
|
|||||||
portal->SetReactState(REACT_PASSIVE);
|
portal->SetReactState(REACT_PASSIVE);
|
||||||
_portalGUID = portal->GetGUID();
|
_portalGUID = portal->GetGUID();
|
||||||
|
|
||||||
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
|
if (me->ToTempSummon())
|
||||||
{
|
{
|
||||||
if (Creature* creature = summoner->ToCreature())
|
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
|
||||||
{
|
{
|
||||||
creature->AI()->JustSummoned(portal);
|
if (Creature* creature = summoner->ToCreature())
|
||||||
|
{
|
||||||
|
creature->AI()->JustSummoned(portal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user