forked from mirror/azerothcore-wotlk
fix(Scripts/Quest): Don't Kill the Fat One submission flow (#25685)
This commit is contained in:
@@ -231,7 +231,9 @@ enum UnkorTheRuthless
|
|||||||
FACTION_HOSTILE = 45,
|
FACTION_HOSTILE = 45,
|
||||||
QUEST_DONTKILLTHEFATONE = 9889,
|
QUEST_DONTKILLTHEFATONE = 9889,
|
||||||
|
|
||||||
SPELL_PULVERIZE = 2676
|
SPELL_PULVERIZE = 2676,
|
||||||
|
|
||||||
|
SUBMIT_DURATION = 120000
|
||||||
};
|
};
|
||||||
|
|
||||||
class npc_unkor_the_ruthless : public CreatureScript
|
class npc_unkor_the_ruthless : public CreatureScript
|
||||||
@@ -248,22 +250,28 @@ public:
|
|||||||
{
|
{
|
||||||
npc_unkor_the_ruthlessAI(Creature* creature) : ScriptedAI(creature) { }
|
npc_unkor_the_ruthlessAI(Creature* creature) : ScriptedAI(creature) { }
|
||||||
|
|
||||||
bool CanDoQuest;
|
bool Submitted;
|
||||||
uint32 UnkorUnfriendly_Timer;
|
uint32 UnfriendlyTimer;
|
||||||
uint32 Pulverize_Timer;
|
uint32 PulverizeTimer;
|
||||||
|
|
||||||
void Reset() override
|
void Reset() override
|
||||||
{
|
{
|
||||||
CanDoQuest = false;
|
Submitted = false;
|
||||||
UnkorUnfriendly_Timer = 0;
|
UnfriendlyTimer = 0;
|
||||||
Pulverize_Timer = 3000;
|
PulverizeTimer = 3000;
|
||||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||||
me->SetFaction(FACTION_HOSTILE);
|
me->SetFaction(FACTION_HOSTILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustEngagedWith(Unit* /*who*/) override { }
|
void JustEngagedWith(Unit* /*who*/) override { }
|
||||||
|
|
||||||
void DoNice()
|
bool HasQuestActive(Player* player) const
|
||||||
|
{
|
||||||
|
QuestStatus status = player->GetQuestStatus(QUEST_DONTKILLTHEFATONE);
|
||||||
|
return status == QUEST_STATUS_INCOMPLETE || status == QUEST_STATUS_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Submit()
|
||||||
{
|
{
|
||||||
Talk(SAY_SUBMIT);
|
Talk(SAY_SUBMIT);
|
||||||
me->SetFaction(FACTION_FRIENDLY);
|
me->SetFaction(FACTION_FRIENDLY);
|
||||||
@@ -271,7 +279,8 @@ public:
|
|||||||
me->RemoveAllAuras();
|
me->RemoveAllAuras();
|
||||||
me->GetThreatMgr().ClearAllThreat();
|
me->GetThreatMgr().ClearAllThreat();
|
||||||
me->CombatStop(true);
|
me->CombatStop(true);
|
||||||
UnkorUnfriendly_Timer = 60000;
|
Submitted = true;
|
||||||
|
UnfriendlyTimer = SUBMIT_DURATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DamageTaken(Unit* done_by, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
void DamageTaken(Unit* done_by, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
||||||
@@ -280,61 +289,47 @@ public:
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
Player* player = done_by->ToPlayer();
|
Player* player = done_by->ToPlayer();
|
||||||
if (player && me->HealthBelowPctDamaged(30, damage))
|
if (!player)
|
||||||
{
|
if (Unit* owner = done_by->GetOwner())
|
||||||
if (Group* group = player->GetGroup())
|
player = owner->ToPlayer();
|
||||||
{
|
if (!player || !HasQuestActive(player))
|
||||||
for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
|
return;
|
||||||
{
|
|
||||||
Player* groupie = itr->GetSource();
|
// Cap damage from quest holders so DoTs/pets/burst can't kill him.
|
||||||
if (groupie && groupie->IsInMap(player) &&
|
if (damage >= me->GetHealth())
|
||||||
groupie->GetQuestStatus(QUEST_DONTKILLTHEFATONE) == QUEST_STATUS_INCOMPLETE &&
|
damage = me->GetHealth() - 1;
|
||||||
groupie->GetReqKillOrCastCurrentCount(QUEST_DONTKILLTHEFATONE, 18260) == 10)
|
|
||||||
{
|
if (!me->HealthBelowPctDamaged(30, damage))
|
||||||
groupie->AreaExploredOrEventHappens(QUEST_DONTKILLTHEFATONE);
|
return;
|
||||||
if (!CanDoQuest)
|
|
||||||
CanDoQuest = true;
|
player->GroupEventHappens(QUEST_DONTKILLTHEFATONE, me);
|
||||||
}
|
|
||||||
}
|
if (!Submitted)
|
||||||
}
|
Submit();
|
||||||
else if (player->GetQuestStatus(QUEST_DONTKILLTHEFATONE) == QUEST_STATUS_INCOMPLETE &&
|
|
||||||
player->GetReqKillOrCastCurrentCount(QUEST_DONTKILLTHEFATONE, 18260) == 10)
|
|
||||||
{
|
|
||||||
player->AreaExploredOrEventHappens(QUEST_DONTKILLTHEFATONE);
|
|
||||||
CanDoQuest = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
{
|
{
|
||||||
if (CanDoQuest)
|
if (Submitted)
|
||||||
{
|
{
|
||||||
if (!UnkorUnfriendly_Timer)
|
if (UnfriendlyTimer <= diff)
|
||||||
{
|
{
|
||||||
//DoCast(me, SPELL_QUID9889); //not using spell for now
|
EnterEvadeMode();
|
||||||
DoNice();
|
return;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (UnkorUnfriendly_Timer <= diff)
|
|
||||||
{
|
|
||||||
EnterEvadeMode();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else UnkorUnfriendly_Timer -= diff;
|
|
||||||
}
|
}
|
||||||
|
UnfriendlyTimer -= diff;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (Pulverize_Timer <= diff)
|
if (PulverizeTimer <= diff)
|
||||||
{
|
{
|
||||||
DoCast(me, SPELL_PULVERIZE);
|
DoCast(me, SPELL_PULVERIZE);
|
||||||
Pulverize_Timer = 9000;
|
PulverizeTimer = 9000;
|
||||||
}
|
}
|
||||||
else Pulverize_Timer -= diff;
|
else PulverizeTimer -= diff;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user