mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-23 05:36:23 +00:00
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
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user