fix(Scripts/Scholomance): improvements for Kirtonos (#8401)
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1633861396739213700');
|
||||||
|
|
||||||
|
-- Brazier of the Herald
|
||||||
|
SET @ENTRY := 175564;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `entryOrGuid` = @ENTRY AND `source_type` = 1;
|
||||||
|
UPDATE `gameobject_template` SET `AIName` = "SmartGameObjectAI" WHERE `entry` = @ENTRY;
|
||||||
|
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||||
|
(@ENTRY, 1, 0, 0, 70, 0, 100, 0, 2, 0, 0, 0, 34, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'On loot state changed to GO_ACTIVATED - Set instance data #0 to 1');
|
||||||
|
|
||||||
|
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = @ENTRY AND `SourceId` = 1;
|
||||||
|
|
||||||
|
-- remove "inhabit air"
|
||||||
|
UPDATE `creature_template` SET `InhabitType` = 1 WHERE `entry` = 10506;
|
||||||
|
|
||||||
|
-- add sound to emote
|
||||||
|
UPDATE `creature_text` SET `Sound` = 557 WHERE `CreatureID` = 10506;
|
||||||
@@ -97,33 +97,24 @@ public:
|
|||||||
|
|
||||||
void JustDied(Unit* /*killer*/) override
|
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);
|
instance->SetData(DATA_KIRTONOS_THE_HERALD, DONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterEvadeMode() override
|
void EnterEvadeMode() override
|
||||||
{
|
{
|
||||||
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetGuidData(GO_GATE_KIRTONOS)))
|
instance->SetData(DATA_KIRTONOS_THE_HERALD, FAIL);
|
||||||
{
|
|
||||||
gate->SetGoState(GO_STATE_ACTIVE);
|
|
||||||
}
|
|
||||||
|
|
||||||
instance->SetData(DATA_KIRTONOS_THE_HERALD, NOT_STARTED);
|
|
||||||
me->DespawnOrUnsummon(1);
|
me->DespawnOrUnsummon(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IsSummonedBy(Unit* /*summoner*/) override
|
void IsSummonedBy(Unit* /*summoner*/) override
|
||||||
{
|
{
|
||||||
events2.Reset();
|
events2.Reset();
|
||||||
events2.ScheduleEvent(INTRO_1, 500);
|
events2.ScheduleEvent(INTRO_1, 1000);
|
||||||
me->SetDisableGravity(true);
|
me->SetDisableGravity(true);
|
||||||
me->SetReactState(REACT_PASSIVE);
|
me->SetReactState(REACT_PASSIVE);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
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
|
void MovementInform(uint32 type, uint32 id) override
|
||||||
@@ -145,15 +136,12 @@ public:
|
|||||||
{
|
{
|
||||||
case INTRO_1:
|
case INTRO_1:
|
||||||
me->GetMotionMaster()->MovePath(KIRTONOS_PATH, false);
|
me->GetMotionMaster()->MovePath(KIRTONOS_PATH, false);
|
||||||
|
Talk(EMOTE_SUMMONED);
|
||||||
break;
|
break;
|
||||||
case INTRO_2:
|
case INTRO_2:
|
||||||
me->GetMotionMaster()->MovePoint(0, PosMove[0]);
|
me->GetMotionMaster()->MovePoint(0, PosMove[0]);
|
||||||
break;
|
break;
|
||||||
case INTRO_3:
|
case INTRO_3:
|
||||||
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetGuidData(GO_GATE_KIRTONOS)))
|
|
||||||
{
|
|
||||||
gate->SetGoState(GO_STATE_READY);
|
|
||||||
}
|
|
||||||
me->SetFacingTo(0.01745329f);
|
me->SetFacingTo(0.01745329f);
|
||||||
break;
|
break;
|
||||||
case INTRO_4:
|
case INTRO_4:
|
||||||
@@ -166,6 +154,8 @@ public:
|
|||||||
me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
|
me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
|
||||||
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
|
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_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);
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
break;
|
break;
|
||||||
case INTRO_6:
|
case INTRO_6:
|
||||||
@@ -242,7 +232,6 @@ public:
|
|||||||
events.ScheduleEvent(EVENT_WING_FLAP, 13000);
|
events.ScheduleEvent(EVENT_WING_FLAP, 13000);
|
||||||
me->CastSpell(me, SPELL_KIRTONOS_TRANSFORM, true);
|
me->CastSpell(me, SPELL_KIRTONOS_TRANSFORM, true);
|
||||||
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
|
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
|
||||||
|
|
||||||
// Schedule Dominate Mind on every 2nd caster transform
|
// Schedule Dominate Mind on every 2nd caster transform
|
||||||
if ((TransformsCount - 2) % 4 == 0)
|
if ((TransformsCount - 2) % 4 == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
#include "SpellAuras.h"
|
#include "SpellAuras.h"
|
||||||
#include "SpellScript.h"
|
#include "SpellScript.h"
|
||||||
|
|
||||||
|
Position KirtonosSpawn = Position(315.028, 70.5385, 102.15, 0.385971);
|
||||||
|
|
||||||
class instance_scholomance : public InstanceMapScript
|
class instance_scholomance : public InstanceMapScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -81,6 +83,9 @@ public:
|
|||||||
case GO_GATE_GANDLING_ENTRANCE:
|
case GO_GATE_GANDLING_ENTRANCE:
|
||||||
GandlingGatesGUID[6] = go->GetGUID();
|
GandlingGatesGUID[6] = go->GetGUID();
|
||||||
break;
|
break;
|
||||||
|
case GO_BRAZIER_KIRTONOS:
|
||||||
|
BrazierKirtonosGUID = go->GetGUID();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,6 +95,8 @@ public:
|
|||||||
{
|
{
|
||||||
case GO_GATE_KIRTONOS:
|
case GO_GATE_KIRTONOS:
|
||||||
return GateKirtonosGUID;
|
return GateKirtonosGUID;
|
||||||
|
case GO_BRAZIER_KIRTONOS:
|
||||||
|
return BrazierKirtonosGUID;
|
||||||
case GO_GATE_GANDLING_DOWN_NORTH:
|
case GO_GATE_GANDLING_DOWN_NORTH:
|
||||||
return GandlingGatesGUID[0];
|
return GandlingGatesGUID[0];
|
||||||
case GO_GATE_GANDLING_DOWN_EAST:
|
case GO_GATE_GANDLING_DOWN_EAST:
|
||||||
@@ -115,7 +122,46 @@ public:
|
|||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case DATA_KIRTONOS_THE_HERALD:
|
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;
|
break;
|
||||||
case DATA_MINI_BOSSES:
|
case DATA_MINI_BOSSES:
|
||||||
++_miniBosses;
|
++_miniBosses;
|
||||||
@@ -145,7 +191,6 @@ public:
|
|||||||
_rasHuman = data;
|
_rasHuman = data;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveToDB();
|
SaveToDB();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,6 +242,7 @@ public:
|
|||||||
ObjectGuid GateRavenianGUID;
|
ObjectGuid GateRavenianGUID;
|
||||||
ObjectGuid GateBarovGUID;
|
ObjectGuid GateBarovGUID;
|
||||||
ObjectGuid GateIlluciaGUID;
|
ObjectGuid GateIlluciaGUID;
|
||||||
|
ObjectGuid BrazierKirtonosGUID;
|
||||||
|
|
||||||
ObjectGuid GandlingGatesGUID[7]; // 6 is the entrance
|
ObjectGuid GandlingGatesGUID[7]; // 6 is the entrance
|
||||||
ObjectGuid GandlingGUID; // boss
|
ObjectGuid GandlingGUID; // boss
|
||||||
@@ -462,6 +508,7 @@ public:
|
|||||||
case 4:
|
case 4:
|
||||||
me->CastSpell(me->GetVictim(), SHADOWBOLT_VOLLEY_SPELL, true);
|
me->CastSpell(me->GetVictim(), SHADOWBOLT_VOLLEY_SPELL, true);
|
||||||
events.RepeatEvent(urand(11000, 17000));
|
events.RepeatEvent(urand(11000, 17000));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
|
|||||||
@@ -43,11 +43,13 @@ enum TalkGroupIds
|
|||||||
enum CreatureIds
|
enum CreatureIds
|
||||||
{
|
{
|
||||||
NPC_RISEN_GUARDIAN = 11598,
|
NPC_RISEN_GUARDIAN = 11598,
|
||||||
NPC_DARKMASTER_GANDLING = 1853
|
NPC_DARKMASTER_GANDLING = 1853,
|
||||||
|
NPC_KIRTONOS = 10506
|
||||||
};
|
};
|
||||||
|
|
||||||
enum GameobjectIds
|
enum GameobjectIds
|
||||||
{
|
{
|
||||||
|
GO_BRAZIER_KIRTONOS = 175564,
|
||||||
GO_GATE_KIRTONOS = 175570,
|
GO_GATE_KIRTONOS = 175570,
|
||||||
|
|
||||||
GO_GATE_GANDLING_ENTRANCE = 177374,
|
GO_GATE_GANDLING_ENTRANCE = 177374,
|
||||||
|
|||||||
Reference in New Issue
Block a user