diff --git a/data/sql/updates/pending_db_world/rev_1633861396739213700.sql b/data/sql/updates/pending_db_world/rev_1633861396739213700.sql new file mode 100644 index 000000000..fcb9b5b3d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1633861396739213700.sql @@ -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; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp index 462f82b3a..1689d4321 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp @@ -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) { diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp index 096f9bb49..43b7a265e 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp @@ -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(); diff --git a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h index d3071551c..ec77c48b8 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h +++ b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h @@ -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,