Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- npc_sk_undying_shadows(Creature* cre) : ScriptedAI(cre)
- {
- instance = me->GetInstanceScript();
- me->SetReactState(REACT_PASSIVE);
- }
- ObjectGuid fixateGuid;
- InstanceScript* instance;
- uint32 checkTimer = 0;
- bool isDead = false;
- void IsSummonedBy(Unit* summoner) override
- {
- if (instance->GetBossState(DATA_SPIRIT_KINGS) != IN_PROGRESS)
- {
- me->DespawnOrUnsummon(500);
- return;
- }
- if (summoner && summoner->isAlive())
- {
- fixateGuid = summoner->GetGUID();
- me->AddAura(SPELL_UNDYING_SHADOWS_FIXATE, summoner);
- }
- checkTimer = 500;
- DoCast(me, SPELL_UNDYING_SHADOWS_VISUAL_IS_ALIVE, true);
- }
- void SpellHitTarget(Unit* target, const SpellInfo* spell) override
- {
- if (target && spell->Id == SPELL_UNDYING_SHADOWS_FIXATE)
- fixateGuid = target->GetGUID();
- }
- void DamageTaken(Unit* attacker, uint32& damage) override
- {
- if (damage >= me->GetHealth())
- {
- damage = 0;
- if (!isDead)
- {
- isDead = true;
- if (auto plr = me->GetPlayer(*me, fixateGuid))
- plr->RemoveAura(SPELL_UNDYING_SHADOWS_FIXATE);
- me->SetHealth(1);
- me->RemoveAura(SPELL_UNDYING_SHADOWS_VISUAL_IS_ALIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->GetMotionMaster()->Clear();
- me->AddDelayedEvent(500, [=]()-> void
- {
- DoCast(me, SPELL_UNDYING_SHADOWS_VISUAL_IS_DEAD, true);
- DoCast(me, SPELL_COALESCING_SHADOWS, true);
- DoCast(me, SPELL_SHRINK_STACKER, true);
- });
- }
- }
- }
- void UpdateAI(uint32 diff) override
- {
- if (checkTimer)
- if (checkTimer <= diff)
- {
- if (instance->GetBossState(DATA_SPIRIT_KINGS) == IN_PROGRESS)
- {
- checkTimer = 500;
- if (!isDead)
- {
- auto plr = me->GetPlayer(*me, fixateGuid);
- if (!plr || !plr->isAlive() || !plr->HasAura(SPELL_UNDYING_SHADOWS_FIXATE))
- {
- checkTimer = 1000;
- DoCast(me, SPELL_UNDYING_SHADOWS_FIXATE, true);
- }
- else
- me->GetMotionMaster()->MovePoint(1, plr->GetPosition(), false);
- }
- }
- else
- {
- checkTimer = 0;
- me->DespawnOrUnsummon(500);
- }
- }
- else
- checkTimer -= diff;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement