eluna-scripts-ornfelt/lua/WowEmulationScriptPack/patch/3.3.5...3.3.5-skip-dk.diff

409 lines
21 KiB
Diff
Raw Permalink Normal View History

2023-08-16 00:50:59 +02:00
diff --git a/sql/custom/world/world.DKS.sql b/sql/custom/world/world.DKS.sql
new file mode 100644
index 00000000000..07b32c31df8
--- /dev/null
+++ b/sql/custom/world/world.DKS.sql
@@ -0,0 +1,4 @@
+-- npc id lich king
+-- Original npcflag was 2
+-- no previous scriptname
+UPDATE `creature_template` SET `npcflag`='3', `ScriptName`='npc_tc_skip_lich' WHERE `entry`=25462;
diff --git a/src/server/scripts/Custom/SkipDK.cpp b/src/server/scripts/Custom/SkipDK.cpp
new file mode 100644
index 00000000000..ebc3b753cb0
--- /dev/null
+++ b/src/server/scripts/Custom/SkipDK.cpp
@@ -0,0 +1,323 @@
+/*
+* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+* Skip Death Knight Module
+* Original Module From Single Player Project Consolidated Skip Module
+* Rewritten for TC 335 By Single Player Project Developer MDic
+* Original Concept from conanhun513
+* Assistance and Review by JinnaiX
+*/
+
+#include "AccountMgr.h"
+#include "ScriptMgr.h"
+#include "Player.h"
+#include "Config.h"
+#include "Common.h"
+#include "Chat.h"
+#include "ObjectAccessor.h"
+#include "ObjectMgr.h"
+#include "Player.h"
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "ScriptedGossip.h"
+#include "SharedDefines.h"
+#include "World.h"
+#include "WorldSession.h"
+
+class Trinitycore_skip_deathknight_announce : public PlayerScript
+{
+public:
+ Trinitycore_skip_deathknight_announce() : PlayerScript("Trinitycore_skip_deathknight_announce") { }
+
+ void OnLogin(Player* Player, bool /*firstLogin*/) override
+ {
+ if (sConfigMgr->GetBoolDefault("Skip.Deathknight.Starter.Announce.enable", true))
+ {
+ ChatHandler(Player->GetSession()).SendSysMessage("This server is running the |cff4CFF00Trinitycore Skip Deathknight Starter |rmodule.");
+ }
+ }
+};
+
+class Trinitycore_skip_deathknight : public PlayerScript
+{
+public:
+ Trinitycore_skip_deathknight() : PlayerScript("Trinitycore_skip_deathknight") { }
+
+ void OnLogin(Player* player, bool firstLogin) override
+ {
+ int DKL = sConfigMgr->GetFloatDefault("Skip.Deathknight.Start.Level", 58);
+
+ if (sConfigMgr->GetBoolDefault("Skip.Deathknight.Starter.Enable", true))
+ {
+ if (player->GetAreaId() == 4342)
+ {
+ if (!firstLogin)
+ return;
+ player->SetLevel(DKL);
+ player->LearnSpell(53428, false);//runeforging
+ player->LearnSpell(53441, false);//runeforging
+ player->LearnSpell(53344, false);//runeforging
+ player->LearnSpell(62158, false);//runeforging
+ player->LearnSpell(33391, false);//journeyman riding
+ player->LearnSpell(54586, false);//runeforging credit
+ player->LearnSpell(48778, false);//acherus deathcharger
+ player->LearnSkillRewardedSpells(776, 375);//Runeforging
+ player->LearnSkillRewardedSpells(960, 375);//Runeforging
+ player->EquipNewItem(EQUIPMENT_SLOT_HEAD, 38661, true);//Greathelm of the Scourge Champion
+ player->EquipNewItem(EQUIPMENT_SLOT_WRISTS, 38666, true);//Plated Saronite Bracers
+ player->EquipNewItem(EQUIPMENT_SLOT_WAIST, 38668, true);//The Plaguebringer's Girdle
+ player->EquipNewItem(EQUIPMENT_SLOT_HANDS, 38667, true);//Bloodbane's Gauntlets of Command
+ player->EquipNewItem(EQUIPMENT_SLOT_CHEST, 38665, true);//Saronite War Plate
+ player->EquipNewItem(EQUIPMENT_SLOT_LEGS, 38669, true);//Engraved Saronite Legplates
+ player->EquipNewItem(EQUIPMENT_SLOT_SHOULDERS, 38663, true);// Blood-Soaked Saronite Plated Spaulders
+ player->EquipNewItem(EQUIPMENT_SLOT_FEET, 38670, true);//Greaves of the Slaughter
+ player->EquipNewItem(EQUIPMENT_SLOT_TRINKET1, 38675, true);//Signet of the Dark Brotherhood
+ player->EquipNewItem(EQUIPMENT_SLOT_TRINKET2, 38674, true);//Soul Harvester's Charm
+ player->EquipNewItem(EQUIPMENT_SLOT_FINGER1, 38671, true);//Valanar's Signet Ring
+ player->EquipNewItem(EQUIPMENT_SLOT_FINGER2, 38672, true);// Keleseth's Signet Ring
+ player->AddItem(39320, true);//Sky Darkener's Shroud of Blood
+ player->AddItem(38664, true);//Sky Darkener's Shroud of the Unholy
+ player->AddItem(39322, true);//Shroud of the North Wind
+ player->AddItem(38632, true);//Greatsword of the Ebon Blade
+ player->AddItem(6948, true);//Hearthstone
+ player->AddItem(38707, true);//Runed Soulblade
+ player->AddItem(40483, true);//Insignia of the Scourge
+
+ if (player->GetQuestStatus(12657) == QUEST_STATUS_NONE)//The Might Of The Scourge
+ {
+ player->AddQuest(sObjectMgr->GetQuestTemplate(12657), nullptr);
+ player->RewardQuest(sObjectMgr->GetQuestTemplate(12657), false, player);
+ }
+ if (player->GetQuestStatus(12801) == QUEST_STATUS_NONE)//The Light of Dawn
+ {
+ player->AddQuest(sObjectMgr->GetQuestTemplate(12801), nullptr);
+ player->RewardQuest(sObjectMgr->GetQuestTemplate(12801), false, player);
+ }
+ if (player->GetTeam() == ALLIANCE && player->GetQuestStatus(13188) == QUEST_STATUS_NONE)//Where Kings Walk
+ player->AddQuest(sObjectMgr->GetQuestTemplate(13188), nullptr);
+ else if (player->GetTeam() == HORDE && player->GetQuestStatus(13189) == QUEST_STATUS_NONE)//Saurfang's Blessing
+ player->AddQuest(sObjectMgr->GetQuestTemplate(13189), nullptr);
+ if (player->GetTeam() == ALLIANCE)
+ player->TeleportTo(0, -8833.37f, 628.62f, 94.00f, 1.06f);//Stormwind
+ else
+ player->TeleportTo(1, 1569.59f, -4397.63f, 16.06f, 0.54f);//Orgrimmar
+ ObjectAccessor::SaveAllPlayers();//Save
+ }
+ }
+
+ if (sConfigMgr->GetBoolDefault("GM.Skip.Deathknight.Starter.Enable", true))
+ {
+ if (player->GetSession()->GetSecurity() >= SEC_MODERATOR && player->GetAreaId() == 4342)
+ {
+ if (!firstLogin)
+ return;
+ player->SetLevel(DKL);
+ player->LearnSpell(53428, false);//runeforging
+ player->LearnSpell(53441, false);//runeforging
+ player->LearnSpell(53344, false);//runeforging
+ player->LearnSpell(62158, false);//runeforging
+ player->LearnSpell(33391, false);//journeyman riding
+ player->LearnSpell(54586, false);//runeforging credit
+ player->LearnSpell(48778, false);//acherus deathcharger
+ player->LearnSkillRewardedSpells(776, 375);//Runeforging
+ player->LearnSkillRewardedSpells(960, 375);//Runeforging
+ player->EquipNewItem(EQUIPMENT_SLOT_HEAD, 38661, true);//Greathelm of the Scourge Champion
+ player->EquipNewItem(EQUIPMENT_SLOT_WRISTS, 38666, true);//Plated Saronite Bracers
+ player->EquipNewItem(EQUIPMENT_SLOT_WAIST, 38668, true);//The Plaguebringer's Girdle
+ player->EquipNewItem(EQUIPMENT_SLOT_HANDS, 38667, true);//Bloodbane's Gauntlets of Command
+ player->EquipNewItem(EQUIPMENT_SLOT_CHEST, 38665, true);//Saronite War Plate
+ player->EquipNewItem(EQUIPMENT_SLOT_LEGS, 38669, true);//Engraved Saronite Legplates
+ player->EquipNewItem(EQUIPMENT_SLOT_SHOULDERS, 38663, true);// Blood-Soaked Saronite Plated Spaulders
+ player->EquipNewItem(EQUIPMENT_SLOT_FEET, 38670, true);//Greaves of the Slaughter
+ player->EquipNewItem(EQUIPMENT_SLOT_TRINKET1, 38675, true);//Signet of the Dark Brotherhood
+ player->EquipNewItem(EQUIPMENT_SLOT_TRINKET2, 38674, true);//Soul Harvester's Charm
+ player->EquipNewItem(EQUIPMENT_SLOT_FINGER1, 38671, true);//Valanar's Signet Ring
+ player->EquipNewItem(EQUIPMENT_SLOT_FINGER2, 38672, true);// Keleseth's Signet Ring
+ player->AddItem(39320, true);//Sky Darkener's Shroud of Blood
+ player->AddItem(38664, true);//Sky Darkener's Shroud of the Unholy
+ player->AddItem(39322, true);//Shroud of the North Wind
+ player->AddItem(38632, true);//Greatsword of the Ebon Blade
+ player->AddItem(6948, true);//Hearthstone
+ player->AddItem(38707, true);//Runed Soulblade
+ player->AddItem(40483, true);//Insignia of the Scourge
+
+ if (player->GetQuestStatus(12657) == QUEST_STATUS_NONE)//The Might Of The Scourge
+ {
+ player->AddQuest(sObjectMgr->GetQuestTemplate(12657), nullptr);
+ player->RewardQuest(sObjectMgr->GetQuestTemplate(12657), false, player);
+ }
+ if (player->GetQuestStatus(12801) == QUEST_STATUS_NONE)//The Light of Dawn
+ {
+ player->AddQuest(sObjectMgr->GetQuestTemplate(12801), nullptr);
+ player->RewardQuest(sObjectMgr->GetQuestTemplate(12801), false, player);
+ }
+ if (player->GetTeam() == ALLIANCE && player->GetQuestStatus(13188) == QUEST_STATUS_NONE)//Where Kings Walk
+ player->AddQuest(sObjectMgr->GetQuestTemplate(13188), nullptr);
+ else if (player->GetTeam() == HORDE && player->GetQuestStatus(13189) == QUEST_STATUS_NONE)//Saurfang's Blessing
+ player->AddQuest(sObjectMgr->GetQuestTemplate(13189), nullptr);
+ if (player->GetTeam() == ALLIANCE)
+ player->TeleportTo(0, -8833.37f, 628.62f, 94.00f, 1.06f);//Stormwind
+ else
+ player->TeleportTo(1, 1569.59f, -4397.63f, 16.06f, 0.54f);//Orgrimmar
+ ObjectAccessor::SaveAllPlayers();//Save
+ }
+ }
+ }
+};
+
+#define LOCALE_LICHKING_0 "I wish to skip the Death Knight starter questline."
+#define LOCALE_LICHKING_1 "죽음의 기사 스타터 퀘스트 라인을 건너뛰고 싶습니다."
+#define LOCALE_LICHKING_2 "Je souhaite sauter la série de quêtes de démarrage du Chevalier de la mort."
+#define LOCALE_LICHKING_3 "Ich möchte die Todesritter-Starter-Questreihe überspringen."
+#define LOCALE_LICHKING_4 "我想跳過死亡騎士新手任務線。"
+#define LOCALE_LICHKING_5 "我想跳過死亡騎士新手任務線。"
+#define LOCALE_LICHKING_6 "Deseo saltarme la línea de misiones de inicio del Caballero de la Muerte."
+#define LOCALE_LICHKING_7 "Deseo saltarme la línea de misiones de inicio del Caballero de la Muerte."
+#define LOCALE_LICHKING_8 "Я хочу пропустить начальную цепочку заданий Рыцаря Смерти."
+
+class Trinitycore_optional_deathknight_skip : public CreatureScript
+{
+public:
+ Trinitycore_optional_deathknight_skip() : CreatureScript("npc_tc_skip_lich") { }
+
+ struct npc_SkipLichAI : public ScriptedAI
+ {
+ npc_SkipLichAI(Creature* creature) : ScriptedAI(creature) { }
+
+ bool OnGossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ {
+ player->PrepareQuestMenu(me->GetGUID());
+ }
+
+ if (sConfigMgr->GetBoolDefault("Skip.Deathknight.Optional.Enable", true))
+ {
+ char const* localizedEntry;
+ switch (player->GetSession()->GetSessionDbcLocale())
+ {
+ case LOCALE_koKR: localizedEntry = LOCALE_LICHKING_1; break;
+ case LOCALE_frFR: localizedEntry = LOCALE_LICHKING_2; break;
+ case LOCALE_deDE: localizedEntry = LOCALE_LICHKING_3; break;
+ case LOCALE_zhCN: localizedEntry = LOCALE_LICHKING_4; break;
+ case LOCALE_zhTW: localizedEntry = LOCALE_LICHKING_5; break;
+ case LOCALE_esES: localizedEntry = LOCALE_LICHKING_6; break;
+ case LOCALE_esMX: localizedEntry = LOCALE_LICHKING_7; break;
+ case LOCALE_ruRU: localizedEntry = LOCALE_LICHKING_8; break;
+ case LOCALE_enUS: localizedEntry = LOCALE_LICHKING_0; break;
+ default: localizedEntry = LOCALE_LICHKING_0;
+ }
+ AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, localizedEntry, GOSSIP_SENDER_MAIN, 11);
+ }
+
+ player->TalkedToCreature(me->GetEntry(), me->GetGUID());
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return true;
+ }
+
+ bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ int DKL = sConfigMgr->GetFloatDefault("Skip.Deathknight.Start.Level", 58);
+ CloseGossipMenuFor(player);
+
+ switch (gossipListId)
+ {
+ case 11:
+ AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Yes", GOSSIP_SENDER_MAIN, 12);
+ AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "No", GOSSIP_SENDER_MAIN, 13);
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ break;
+
+ case 12:
+ if (player->GetLevel() <= DKL)
+ {
+ player->SetLevel(DKL);
+ }
+ player->LearnSpell(53428, false);//runeforging
+ player->LearnSpell(53441, false);//runeforging
+ player->LearnSpell(53344, false);//runeforging
+ player->LearnSpell(62158, false);//runeforging
+ player->LearnSpell(33391, false);//journeyman riding
+ player->LearnSpell(54586, false);//runeforging credit
+ player->LearnSpell(48778, false);//acherus deathcharger
+ player->LearnSkillRewardedSpells(776, 375);//Runeforging
+ player->LearnSkillRewardedSpells(960, 375);//Runeforging
+ player->EquipNewItem(EQUIPMENT_SLOT_HEAD, 38661, true);//Greathelm of the Scourge Champion
+ player->EquipNewItem(EQUIPMENT_SLOT_WRISTS, 38666, true);//Plated Saronite Bracers
+ player->EquipNewItem(EQUIPMENT_SLOT_WAIST, 38668, true);//The Plaguebringer's Girdle
+ player->EquipNewItem(EQUIPMENT_SLOT_HANDS, 38667, true);//Bloodbane's Gauntlets of Command
+ player->EquipNewItem(EQUIPMENT_SLOT_CHEST, 38665, true);//Saronite War Plate
+ player->EquipNewItem(EQUIPMENT_SLOT_LEGS, 38669, true);//Engraved Saronite Legplates
+ player->EquipNewItem(EQUIPMENT_SLOT_SHOULDERS, 38663, true);// Blood-Soaked Saronite Plated Spaulders
+ player->EquipNewItem(EQUIPMENT_SLOT_FEET, 38670, true);//Greaves of the Slaughter
+ player->EquipNewItem(EQUIPMENT_SLOT_TRINKET1, 38675, true);//Signet of the Dark Brotherhood
+ player->EquipNewItem(EQUIPMENT_SLOT_TRINKET2, 38674, true);//Soul Harvester's Charm
+ player->EquipNewItem(EQUIPMENT_SLOT_FINGER1, 38671, true);//Valanar's Signet Ring
+ player->EquipNewItem(EQUIPMENT_SLOT_FINGER2, 38672, true);// Keleseth's Signet Ring
+ player->AddItem(39320, true);//Sky Darkener's Shroud of Blood
+ player->AddItem(38664, true);//Sky Darkener's Shroud of the Unholy
+ player->AddItem(39322, true);//Shroud of the North Wind
+ player->AddItem(38632, true);//Greatsword of the Ebon Blade
+ player->AddItem(6948, true);//Hearthstone
+ player->AddItem(38707, true);//Runed Soulblade
+ player->AddItem(40483, true);//Insignia of the Scourge
+
+ if (player->GetQuestStatus(12657) == QUEST_STATUS_NONE)//The Might Of The Scourge
+ {
+ player->AddQuest(sObjectMgr->GetQuestTemplate(12657), nullptr);
+ player->RewardQuest(sObjectMgr->GetQuestTemplate(12657), false, player);
+ }
+ if (player->GetQuestStatus(12801) == QUEST_STATUS_NONE)//The Light of Dawn
+ {
+ player->AddQuest(sObjectMgr->GetQuestTemplate(12801), nullptr);
+ player->RewardQuest(sObjectMgr->GetQuestTemplate(12801), false, player);
+ }
+ if (player->GetTeam() == ALLIANCE && player->GetQuestStatus(13188) == QUEST_STATUS_NONE)//Where Kings Walk
+ player->AddQuest(sObjectMgr->GetQuestTemplate(13188), nullptr);
+ else if (player->GetTeam() == HORDE && player->GetQuestStatus(13189) == QUEST_STATUS_NONE)//Saurfang's Blessing
+ player->AddQuest(sObjectMgr->GetQuestTemplate(13189), nullptr);
+ if (player->GetTeam() == ALLIANCE)
+ player->TeleportTo(0, -8833.37f, 628.62f, 94.00f, 1.06f);//Stormwind
+ else
+ player->TeleportTo(1, 1569.59f, -4397.63f, 16.06f, 0.54f);//Orgrimmar
+ ObjectAccessor::SaveAllPlayers();//Save
+ CloseGossipMenuFor(player);
+ break;
+
+ case 13://close
+ CloseGossipMenuFor(player);
+ break;
+
+ default:
+
+ break;
+ }
+ return true;
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_SkipLichAI(creature);
+ }
+};
+
+void AddSC_skip_StarterArea()
+{
+ new Trinitycore_skip_deathknight_announce;
+ new Trinitycore_skip_deathknight;
+ new Trinitycore_optional_deathknight_skip;
+}
diff --git a/src/server/scripts/Custom/custom_script_loader.cpp b/src/server/scripts/Custom/custom_script_loader.cpp
index 9e5e9ba2bfd..702789c280b 100644
--- a/src/server/scripts/Custom/custom_script_loader.cpp
+++ b/src/server/scripts/Custom/custom_script_loader.cpp
@@ -19,6 +19,9 @@
// The name of this function should match:
// void Add${NameOfDirectory}Scripts()
+void AddSC_skip_StarterArea();
+
void AddCustomScripts()
{
+ AddSC_skip_StarterArea();
}
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index f475d0248e8..ed28b5e296a 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -4125,3 +4125,49 @@ Metric.OverallStatusInterval = 1
#
###################################################################################################
+
+###################################################################################################
+#Skip Death Knight Starting Area#
+#################################
+#
+# Skip Death Knight Starting Area
+# Enable this if you want to skip the Deathknight starting area
+# Start with level 58 DK with Runeforging.
+#
+# Skip.Deathknight.Starter.Announce.enable
+# Description: Announces Module when player logs in.
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+Skip.Deathknight.Starter.Announce.enable = 1
+
+# Skip.DeathKnight.Starter.Enable
+# Active Module for all new accounts regardless of account level. Instant Skip on DK Creation.
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+Skip.Deathknight.Starter.Enable = 0
+
+# GM.Skip.Deathknight.Starter.Enable
+# Active Module for all new accounts of a GM account level ONLY. Instant Skip on DK Creation.
+# Ensure you have Skip.Deathknight.Starter.Enable set to 0 if using this conf.
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+GM.Skip.Deathknight.Starter.Enable = 0
+
+# Skip.Deathknight.Start.Level
+# Adjusted Death Knight Start Level if module is used.
+# Default: 58 - (Default)
+#
+
+Skip.Deathknight.Start.Level = 58
+
+# Skip.Deathknight.Optional.Enable
+# Enables optional to skip when talking to lich king on first creation of dk.
+# Default: 1 - (Active)
+
+Skip.Deathknight.Optional.Enable = 1
+
+#
+###################################################################################################
\ No newline at end of file