fix(Scripts/Scholomance): improvements for Kirtonos (#8401)

This commit is contained in:
patou01
2021-11-19 10:03:55 +01:00
committed by GitHub
parent 31de71bf3b
commit 8a570f483c
4 changed files with 75 additions and 21 deletions

View File

@@ -97,33 +97,24 @@ public:
void JustDied(Unit* /*killer*/) override
{
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetGuidData(GO_GATE_KIRTONOS)))
{
gate->SetGoState(GO_STATE_ACTIVE);
}
instance->SetData(DATA_KIRTONOS_THE_HERALD, DONE);
}
void EnterEvadeMode() override
{
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetGuidData(GO_GATE_KIRTONOS)))
{
gate->SetGoState(GO_STATE_ACTIVE);
}
instance->SetData(DATA_KIRTONOS_THE_HERALD, NOT_STARTED);
instance->SetData(DATA_KIRTONOS_THE_HERALD, FAIL);
me->DespawnOrUnsummon(1);
}
void IsSummonedBy(Unit* /*summoner*/) override
{
events2.Reset();
events2.ScheduleEvent(INTRO_1, 500);
events2.ScheduleEvent(INTRO_1, 1000);
me->SetDisableGravity(true);
me->SetReactState(REACT_PASSIVE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
Talk(EMOTE_SUMMONED);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); // for some reason he aggroes if we don't have this.
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); // might not be needed, but guardians and stuff like that could mess up.
}
void MovementInform(uint32 type, uint32 id) override
@@ -145,15 +136,12 @@ public:
{
case INTRO_1:
me->GetMotionMaster()->MovePath(KIRTONOS_PATH, false);
Talk(EMOTE_SUMMONED);
break;
case INTRO_2:
me->GetMotionMaster()->MovePoint(0, PosMove[0]);
break;
case INTRO_3:
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetGuidData(GO_GATE_KIRTONOS)))
{
gate->SetGoState(GO_STATE_READY);
}
me->SetFacingTo(0.01745329f);
break;
case INTRO_4:
@@ -166,6 +154,8 @@ public:
me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
me->SetReactState(REACT_AGGRESSIVE);
break;
case INTRO_6:
@@ -242,7 +232,6 @@ public:
events.ScheduleEvent(EVENT_WING_FLAP, 13000);
me->CastSpell(me, SPELL_KIRTONOS_TRANSFORM, true);
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
// Schedule Dominate Mind on every 2nd caster transform
if ((TransformsCount - 2) % 4 == 0)
{

View File

@@ -24,6 +24,8 @@
#include "SpellAuras.h"
#include "SpellScript.h"
Position KirtonosSpawn = Position(315.028, 70.5385, 102.15, 0.385971);
class instance_scholomance : public InstanceMapScript
{
public:
@@ -81,6 +83,9 @@ public:
case GO_GATE_GANDLING_ENTRANCE:
GandlingGatesGUID[6] = go->GetGUID();
break;
case GO_BRAZIER_KIRTONOS:
BrazierKirtonosGUID = go->GetGUID();
break;
}
}
@@ -90,6 +95,8 @@ public:
{
case GO_GATE_KIRTONOS:
return GateKirtonosGUID;
case GO_BRAZIER_KIRTONOS:
return BrazierKirtonosGUID;
case GO_GATE_GANDLING_DOWN_NORTH:
return GandlingGatesGUID[0];
case GO_GATE_GANDLING_DOWN_EAST:
@@ -115,7 +122,46 @@ public:
switch (type)
{
case DATA_KIRTONOS_THE_HERALD:
_kirtonosState = data;
switch (data)
{
case IN_PROGRESS:
// summon kirtonos and close door
if (_kirtonosState == NOT_STARTED)
{
instance->SummonCreature(NPC_KIRTONOS, KirtonosSpawn);
if (GameObject* gate = instance->GetGameObject(GetGuidData(GO_GATE_KIRTONOS)))
{
gate->SetGoState(GO_STATE_READY);
}
}
_kirtonosState = data;
break;
case FAIL:
// open door and reset brazier
if (GameObject* gate = instance->GetGameObject(GetGuidData(GO_GATE_KIRTONOS)))
{
gate->SetGoState(GO_STATE_ACTIVE);
}
if (GameObject* brazier = instance->GetGameObject(GetGuidData(GO_BRAZIER_KIRTONOS)))
{
brazier->SetGoState(GO_STATE_READY);
brazier->SetLootState(GO_JUST_DEACTIVATED);
brazier->Respawn();
}
_kirtonosState = NOT_STARTED;
break;
case DONE:
// open door
if (GameObject* gate = instance->GetGameObject(GetGuidData(GO_GATE_KIRTONOS)))
{
gate->SetGoState(GO_STATE_ACTIVE);
}
[[fallthrough]];
default:
_kirtonosState = data;
break;
}
break;
case DATA_MINI_BOSSES:
++_miniBosses;
@@ -145,7 +191,6 @@ public:
_rasHuman = data;
break;
}
SaveToDB();
}
@@ -197,6 +242,7 @@ public:
ObjectGuid GateRavenianGUID;
ObjectGuid GateBarovGUID;
ObjectGuid GateIlluciaGUID;
ObjectGuid BrazierKirtonosGUID;
ObjectGuid GandlingGatesGUID[7]; // 6 is the entrance
ObjectGuid GandlingGUID; // boss
@@ -462,6 +508,7 @@ public:
case 4:
me->CastSpell(me->GetVictim(), SHADOWBOLT_VOLLEY_SPELL, true);
events.RepeatEvent(urand(11000, 17000));
break;
}
DoMeleeAttackIfReady();

View File

@@ -43,11 +43,13 @@ enum TalkGroupIds
enum CreatureIds
{
NPC_RISEN_GUARDIAN = 11598,
NPC_DARKMASTER_GANDLING = 1853
NPC_DARKMASTER_GANDLING = 1853,
NPC_KIRTONOS = 10506
};
enum GameobjectIds
{
GO_BRAZIER_KIRTONOS = 175564,
GO_GATE_KIRTONOS = 175570,
GO_GATE_GANDLING_ENTRANCE = 177374,