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

@@ -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;

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,