Вдруг кто нибудь столкнётся с этой проблемой вот решение

bober182

New member
Новичок
Регистрация
14.09.2019
Сообщения
11
Реакции
2
Баллы
0
Возраст
34
Местоположение
Москва
Make Error at C:/Program Files/CMake/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:165 (message): Could NOT find Boost: Found unsuitable version "1.72.0", but required is at least "1.73" (found C:/local/boost_1_72_0, found components: system filesystem program_options iostreams regex) Call Stack (most recent call first): C:/Program Files/CMake/share/cmake-3.18/Modules/FindPa


вам нужно установить boost свежий версий Found unsuitable version "1.72.0", but required is at least "1.73
 

WinWoolF

New member
Команда форума
Администратор
Регистрация
13.10.2013
Сообщения
5 354
Реакции
450
Баллы
0
собственно ответ на всю придуманную проблему находиться в логе ошибки CMake.
Could NOT find Boost: Found unsuitable version "1.72.0"
даже переводчика не нужно, чтоб понять что Симейк не видит библиотек Буста нужной версии.
 

bober182

New member
Новичок
Регистрация
14.09.2019
Сообщения
11
Реакции
2
Баллы
0
Возраст
34
Местоположение
Москва
собственно ответ на всю придуманную проблему находиться в логе ошибки CMake.

даже переводчика не нужно, чтоб понять что Симейк не видит библиотек Буста нужной версии.
мало ли кому пригодится кто не знал
Сообщения автоматически объединены:

собственно ответ на всю придуманную проблему находиться в логе ошибки CMake.

даже переводчика не нужно, чтоб понять что Симейк не видит библиотек Буста нужной версии.
ты мне вот что подскажи совета реально ли в wow Sl сделать как в оригинале с npc хроми что бы выбирать какую компанию проходить
World of Warcraft: The Burning Crusade
World of Warcraft: Wrath of the Lich King
World of Warcraft: Cataclysm
World of Warcraft: Mists of Pandaria
World of Warcraft: Warlords of Draenor
World of Warcraft: Legion
World of Warcraft: Battle for Azeroth
World of Warcraft: Shadowlands
или это реально сложно объяснить
 
Последнее редактирование:

WinWoolF

New member
Команда форума
Администратор
Регистрация
13.10.2013
Сообщения
5 354
Реакции
450
Баллы
0
Объяснить реально сложно. Сделать ещё реальнее сложнее. В таких вопросах конкретно шарит zgn1988, но не думаю, что он вывалит если у него и есть подобное решение в открытый доступ.
 

zgn1988

Dev WoW EMU
Модератор
Регистрация
31.10.2020
Сообщения
53
Реакции
46
Баллы
0
Возраст
35
Местоположение
Россия
Сайт
github.com
реализовать несложно
 

bober182

New member
Новичок
Регистрация
14.09.2019
Сообщения
11
Реакции
2
Баллы
0
Возраст
34
Местоположение
Москва
я смотрю многие создают сервера пиратки и все по отдельности делаю (части хроники или как это выразить) .И не могут сделать в один сервер все части с (время хроми) открыть все рейды и подземелья что бы контент был интересный что не в ходить в один и то же рейд или подземелья что бы сделать как у официалов даже лучше , реально играешь на пиратках интерес пропадает а донаты когда делаю не во благу покупателя а лиж бы заработать содрать деньги особенно сервера могут заработать деньги и закрыть сервер как расплюснуть
реализовать несложно
Сообщения автоматически объединены:

нету в нашей стране наверное опытных программистов или разработчиков когда я раньше играл в ла2 годами и когда сел в первый раз поиграть в wow я понял это 2 разные игры и вов была на мой взгляд на высоте очень красивая игра по крайний мере в SL и ведь даже классику можно сунуть в wow sl это просто пушка
 
Последнее редактирование:

zgn1988

Dev WoW EMU
Модератор
Регистрация
31.10.2020
Сообщения
53
Реакции
46
Баллы
0
Возраст
35
Местоположение
Россия
Сайт
github.com
C++:
From 5f268ea9790d29800e550c38430f20f868602203 Mon Sep 17 00:00:00 2001
From: zgn <zgn88@mail.ru>
Date: Wed, 20 Apr 2022 21:33:19 +0300
Subject: [PATCH] Chromie base staff TODO: quest add, spell script

---
 sql/custom/world/.gitignore                   |  1 -
 sql/custom/world/2022_04_20_00_custom.sql     | 16 ++++++
 src/server/game/Handlers/MiscHandler.cpp      | 20 +++++++
 src/server/game/Miscellaneous/SharedDefines.h | 10 ++++
 .../game/Server/Packets/MiscPackets.cpp       | 18 +++++++
 src/server/game/Server/Packets/MiscPackets.h  | 29 +++++++++++
 src/server/game/Server/Protocol/Opcodes.cpp   |  6 +--
 src/server/game/Server/WorldSession.h         |  2 +
 src/server/scripts/World/npcs_special.cpp     | 52 +++++++++++++++++++
 9 files changed, 150 insertions(+), 4 deletions(-)
 delete mode 100644 sql/custom/world/.gitignore
 create mode 100644 sql/custom/world/2022_04_20_00_custom.sql

diff --git a/sql/custom/world/.gitignore b/sql/custom/world/.gitignore
deleted file mode 100644
index d1b811b7de..0000000000
--- a/sql/custom/world/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.sql
diff --git a/sql/custom/world/2022_04_20_00_custom.sql b/sql/custom/world/2022_04_20_00_custom.sql
new file mode 100644
index 0000000000..a7c00afab0
--- /dev/null
+++ b/sql/custom/world/2022_04_20_00_custom.sql
@@ -0,0 +1,16 @@
+DELETE FROM `creature_questender` WHERE `quest` IN (62567, 62568);
+INSERT INTO `creature_questender` VALUES
+(167032, 62567),
+(167032, 62568);
+
+UPDATE `creature_template` SET `ScriptName`='npc_chromie_167032' WHERE `entry`=167032;
+
+DELETE FROM `gossip_menu` WHERE `MenuID`=25426;
+INSERT INTO `gossip_menu` VALUES
+(25426, 40347, 38134);
+
+DELETE FROM `gossip_menu_option` WHERE `MenuID`=25426;
+INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `VerifiedBuild`) VALUES
+('25426','0','40','Select a timeline.','0','1','1','38134'),
+('25426','1','40','Select a different timeline.','0','1','1','38134'),
+('25426','2','0','I want to go back to the present, Chromie.','0','1','1','38134');
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index aff58ca046..10c5f87201 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -50,6 +50,7 @@
 #include "ScriptMgr.h"
 #include "Spell.h"
 #include "SpellPackets.h"
+#include "SharedDefines.h"
 #include "WhoListStorage.h"
 #include "WhoPackets.h"
 #include "World.h"
@@ -1179,3 +1180,22 @@ void WorldSession::HandleRequestLatestSplashScreen(WorldPackets::Misc::RequestLa
     splashScreenShowLatest.UISplashScreenID = splashScreen ? splashScreen->ID : 0;
     SendPacket(splashScreenShowLatest.Write());
 }
+
+void WorldSession::HandleChromieTimeSelectExpansionOpcode(WorldPackets::Misc::ChromieTimeSelectExpansion& selectExpansion)
+{
+    if (selectExpansion.Expansion == Cataclysm)
+        _player->CastSpell(_player, 325537, true);
+    else if (selectExpansion.Expansion == Outland)
+        _player->CastSpell(_player, 325400, true);
+    else if (selectExpansion.Expansion == Northrend)
+        _player->CastSpell(_player, 325042, true);
+    else if (selectExpansion.Expansion == Pandaria)
+        _player->CastSpell(_player, 325530, true);
+    else if (selectExpansion.Expansion == Draenor)
+        _player->CastSpell(_player, 325534, true);
+    else if (selectExpansion.Expansion == Legion)
+        _player->CastSpell(_player, 325539, true);
+
+    WorldPackets::Misc::ChromieTimeSelectExpansionSuccess Expansion;
+    SendPacket(Expansion.Write());
+}
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 06f1613427..9486b1c202 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -7848,4 +7848,14 @@ enum WorldState : uint32
     WS_GUILD_WEEKLY_RESET_TIME  = 20050,                     // Next guild week reset time
 };
 
+enum ChromieTime
+{
+    Cataclysm = 5,
+    Outland   = 6,
+    Northrend = 7,
+    Pandaria  = 8,
+    Draenor   = 9,
+    Legion    = 10
+};
+
 #endif
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index efb9da38cc..28ca3d2f18 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -773,3 +773,21 @@ WorldPacket const* WorldPackets::Misc::DisplayToast::Write()
 
     return &_worldPacket;
 }
+
+WorldPacket const* WorldPackets::Misc::ChromieTimeOpenNpc::Write()
+{
+    _worldPacket << ObjectGUID;
+   
+    return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Misc::ChromieTimeSelectExpansionSuccess::Write()
+{
+    return &_worldPacket;
+}
+
+void WorldPackets::Misc::ChromieTimeSelectExpansion::Read()
+{
+    _worldPacket >> ObjectGUID;
+    _worldPacket >> Expansion;
+}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 5bf83f3597..78dbc8d889 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -988,6 +988,35 @@ namespace WorldPackets
             ::Gender Gender = GENDER_NONE;
             uint32 CurrencyID = 0;
         };
+
+        class ChromieTimeSelectExpansion final : public ClientPacket
+        {
+        public:
+            ChromieTimeSelectExpansion(WorldPacket && packet) : ClientPacket(CMSG_CHROMIE_TIME_SELECT_EXPANSION, std::move(packet)) { }
+           
+            void Read() override;
+
+            ObjectGuid ObjectGUID;
+            uint32 Expansion = 0;
+        };
+       
+        class ChromieTimeOpenNpc  final : public ServerPacket
+        {
+        public:
+            ChromieTimeOpenNpc() : ServerPacket(SMSG_CHROMIE_TIME_OPEN_NPC, 11) { }
+           
+            WorldPacket const* Write() override;
+           
+            ObjectGuid ObjectGUID;
+        };
+       
+        class ChromieTimeSelectExpansionSuccess  final : public ServerPacket
+        {
+        public:
+            ChromieTimeSelectExpansionSuccess() : ServerPacket(SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS) { }
+           
+            WorldPacket const* Write() override;
+        };
     }
 }
 
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 5f932030f3..eaded8f12d 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -315,7 +315,7 @@ void OpcodeTable::Initialize()
     DEFINE_HANDLER(CMSG_CHECK_CHARACTER_NAME_AVAILABILITY,                  STATUS_AUTHED,    PROCESS_THREADUNSAFE, &WorldSession::HandleCheckCharacterNameAvailability);
     DEFINE_HANDLER(CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID,                   STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
     DEFINE_HANDLER(CMSG_CHOICE_RESPONSE,                                    STATUS_LOGGEDIN,  PROCESS_INPLACE,      &WorldSession::HandlePlayerChoiceResponse);
-    DEFINE_HANDLER(CMSG_CHROMIE_TIME_SELECT_EXPANSION,                      STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+    DEFINE_HANDLER(CMSG_CHROMIE_TIME_SELECT_EXPANSION,                      STATUS_LOGGEDIN,  PROCESS_THREADUNSAFE, &WorldSession::HandleChromieTimeSelectExpansionOpcode);
     DEFINE_HANDLER(CMSG_CLAIM_WEEKLY_REWARD,                                STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
     DEFINE_HANDLER(CMSG_CLEAR_NEW_APPEARANCE,                               STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
     DEFINE_HANDLER(CMSG_CLEAR_RAID_MARKER,                                  STATUS_LOGGEDIN,  PROCESS_THREADUNSAFE, &WorldSession::HandleClearRaidMarker);
@@ -1149,8 +1149,8 @@ void OpcodeTable::Initialize()
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHECK_ABANDON_NPE,                       STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT,STATUS_NEVER,        CONNECTION_TYPE_REALM);
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHECK_WARGAME_ENTRY,                     STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
-    DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_OPEN_NPC,                   STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
-    DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS,   STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
+    DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_OPEN_NPC,                   STATUS_NEVER,        CONNECTION_TYPE_REALM);
+    DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS,   STATUS_NEVER,        CONNECTION_TYPE_REALM);
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLAIM_RAF_REWARD_RESPONSE,               STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_ALL_SPELL_CHARGES,                 STATUS_NEVER,        CONNECTION_TYPE_INSTANCE);
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_BOSS_EMOTES,                       STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 96debb5151..81e2207fd8 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -521,6 +521,7 @@ namespace WorldPackets
         class CloseInteraction;
         class ConversationLineStarted;
         class RequestLatestSplashScreen;
+        class ChromieTimeSelectExpansion;
     }
 
     namespace Movement
@@ -1735,6 +1736,7 @@ class TC_GAME_API WorldSession
         void HandleRequestCategoryCooldowns(WorldPackets::Spells::RequestCategoryCooldowns& requestCategoryCooldowns);
         void HandleCloseInteraction(WorldPackets::Misc::CloseInteraction& closeInteraction);
         void HandleConversationLineStarted(WorldPackets::Misc::ConversationLineStarted& conversationLineStarted);
+        void HandleChromieTimeSelectExpansionOpcode(WorldPackets::Misc::ChromieTimeSelectExpansion& selectExpansion);
 
         // Adventure Journal
         void HandleAdventureJournalOpenQuest(WorldPackets::AdventureJournal::AdventureJournalOpenQuest& openQuest);
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index e4c5af9010..e4b25ea997 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -39,6 +39,7 @@
 #include "SpellMgr.h"
 #include "TemporarySummon.h"
 #include "Vehicle.h"
+#include "MiscPackets.h"
 
 /*########
 # npc_air_force_bots
@@ -2350,6 +2351,56 @@ private:
     TaskScheduler _scheduler;
 };
 
+enum Chromie
+{
+    GOSSIP_MENU_SELECT_CHROMIE_TIME = 25426
+};
+
+struct npc_chromie_167032 : public ScriptedAI
+{
+    npc_chromie_167032(Creature* creature) : ScriptedAI(creature) { }
+
+    bool OnGossipHello(Player* player) override
+    {
+        if (me->IsQuestGiver())
+            player->PrepareQuestMenu(me->GetGUID());
+
+        AddGossipItemFor(player, GOSSIP_MENU_SELECT_CHROMIE_TIME, GOSSIP_OPTION_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+        AddGossipItemFor(player, GOSSIP_MENU_SELECT_CHROMIE_TIME, GOSSIP_OPTION_1 + 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+        AddGossipItemFor(player, GOSSIP_MENU_SELECT_CHROMIE_TIME, GOSSIP_OPTION_1 + 2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+        SendGossipMenuFor(player, GOSSIP_MENU_SELECT_CHROMIE_TIME, me->GetGUID());
+
+        return true;
+    }
+
+    void SendChromieTimeMenu(Player* player)
+    {
+        WorldPackets::Misc::ChromieTimeOpenNpc worldpark;
+        worldpark.ObjectGUID = me->GetGUID();
+        player->GetSession()->SendPacket(worldpark.Write());
+    }
+
+    bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+    {
+        uint32 const sender = player->PlayerTalkClass->GetGossipOptionSender(gossipListId);
+        uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+        ClearGossipMenuFor(player);
+
+        switch (action)
+        {
+        case GOSSIP_ACTION_INFO_DEF + 1:
+        case GOSSIP_ACTION_INFO_DEF + 2:
+            SendChromieTimeMenu(player);
+            break;
+        case GOSSIP_ACTION_INFO_DEF + 3:
+            break;
+        }
+        return true;
+    }
+
+
+};
+
 void AddSC_npcs_special()
 {
     new npc_air_force_bots();
@@ -2374,4 +2425,5 @@ void AddSC_npcs_special()
     new npc_argent_squire_gruntling();
     new npc_bountiful_table();
     RegisterCreatureAI(npc_gen_void_zone);
+    RegisterCreatureAI(npc_chromie_167032);
 }
--
2.35.2.windows.1

тебе останется сделать скрипт спеллов времени чтоб вешали баф и давали соответствующий первый квест
 

bober182

New member
Новичок
Регистрация
14.09.2019
Сообщения
11
Реакции
2
Баллы
0
Возраст
34
Местоположение
Москва
C++:
From 5f268ea9790d29800e550c38430f20f868602203 Mon Sep 17 00:00:00 2001
From: zgn <zgn88@mail.ru>
Date: Wed, 20 Apr 2022 21:33:19 +0300
Subject: [PATCH] Chromie base staff TODO: quest add, spell script

---
 sql/custom/world/.gitignore                   |  1 -
 sql/custom/world/2022_04_20_00_custom.sql     | 16 ++++++
 src/server/game/Handlers/MiscHandler.cpp      | 20 +++++++
 src/server/game/Miscellaneous/SharedDefines.h | 10 ++++
 .../game/Server/Packets/MiscPackets.cpp       | 18 +++++++
 src/server/game/Server/Packets/MiscPackets.h  | 29 +++++++++++
 src/server/game/Server/Protocol/Opcodes.cpp   |  6 +--
 src/server/game/Server/WorldSession.h         |  2 +
 src/server/scripts/World/npcs_special.cpp     | 52 +++++++++++++++++++
 9 files changed, 150 insertions(+), 4 deletions(-)
 delete mode 100644 sql/custom/world/.gitignore
 create mode 100644 sql/custom/world/2022_04_20_00_custom.sql

diff --git a/sql/custom/world/.gitignore b/sql/custom/world/.gitignore
deleted file mode 100644
index d1b811b7de..0000000000
--- a/sql/custom/world/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.sql
diff --git a/sql/custom/world/2022_04_20_00_custom.sql b/sql/custom/world/2022_04_20_00_custom.sql
new file mode 100644
index 0000000000..a7c00afab0
--- /dev/null
+++ b/sql/custom/world/2022_04_20_00_custom.sql
@@ -0,0 +1,16 @@
+DELETE FROM `creature_questender` WHERE `quest` IN (62567, 62568);
+INSERT INTO `creature_questender` VALUES
+(167032, 62567),
+(167032, 62568);
+
+UPDATE `creature_template` SET `ScriptName`='npc_chromie_167032' WHERE `entry`=167032;
+
+DELETE FROM `gossip_menu` WHERE `MenuID`=25426;
+INSERT INTO `gossip_menu` VALUES
+(25426, 40347, 38134);
+
+DELETE FROM `gossip_menu_option` WHERE `MenuID`=25426;
+INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `VerifiedBuild`) VALUES
+('25426','0','40','Select a timeline.','0','1','1','38134'),
+('25426','1','40','Select a different timeline.','0','1','1','38134'),
+('25426','2','0','I want to go back to the present, Chromie.','0','1','1','38134');
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index aff58ca046..10c5f87201 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -50,6 +50,7 @@
 #include "ScriptMgr.h"
 #include "Spell.h"
 #include "SpellPackets.h"
+#include "SharedDefines.h"
 #include "WhoListStorage.h"
 #include "WhoPackets.h"
 #include "World.h"
@@ -1179,3 +1180,22 @@ void WorldSession::HandleRequestLatestSplashScreen(WorldPackets::Misc::RequestLa
     splashScreenShowLatest.UISplashScreenID = splashScreen ? splashScreen->ID : 0;
     SendPacket(splashScreenShowLatest.Write());
 }
+
+void WorldSession::HandleChromieTimeSelectExpansionOpcode(WorldPackets::Misc::ChromieTimeSelectExpansion& selectExpansion)
+{
+    if (selectExpansion.Expansion == Cataclysm)
+        _player->CastSpell(_player, 325537, true);
+    else if (selectExpansion.Expansion == Outland)
+        _player->CastSpell(_player, 325400, true);
+    else if (selectExpansion.Expansion == Northrend)
+        _player->CastSpell(_player, 325042, true);
+    else if (selectExpansion.Expansion == Pandaria)
+        _player->CastSpell(_player, 325530, true);
+    else if (selectExpansion.Expansion == Draenor)
+        _player->CastSpell(_player, 325534, true);
+    else if (selectExpansion.Expansion == Legion)
+        _player->CastSpell(_player, 325539, true);
+
+    WorldPackets::Misc::ChromieTimeSelectExpansionSuccess Expansion;
+    SendPacket(Expansion.Write());
+}
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 06f1613427..9486b1c202 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -7848,4 +7848,14 @@ enum WorldState : uint32
     WS_GUILD_WEEKLY_RESET_TIME  = 20050,                     // Next guild week reset time
 };
 
+enum ChromieTime
+{
+    Cataclysm = 5,
+    Outland   = 6,
+    Northrend = 7,
+    Pandaria  = 8,
+    Draenor   = 9,
+    Legion    = 10
+};
+
 #endif
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index efb9da38cc..28ca3d2f18 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -773,3 +773,21 @@ WorldPacket const* WorldPackets::Misc::DisplayToast::Write()
 
     return &_worldPacket;
 }
+
+WorldPacket const* WorldPackets::Misc::ChromieTimeOpenNpc::Write()
+{
+    _worldPacket << ObjectGUID;
+  
+    return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Misc::ChromieTimeSelectExpansionSuccess::Write()
+{
+    return &_worldPacket;
+}
+
+void WorldPackets::Misc::ChromieTimeSelectExpansion::Read()
+{
+    _worldPacket >> ObjectGUID;
+    _worldPacket >> Expansion;
+}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 5bf83f3597..78dbc8d889 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -988,6 +988,35 @@ namespace WorldPackets
             ::Gender Gender = GENDER_NONE;
             uint32 CurrencyID = 0;
         };
+
+        class ChromieTimeSelectExpansion final : public ClientPacket
+        {
+        public:
+            ChromieTimeSelectExpansion(WorldPacket && packet) : ClientPacket(CMSG_CHROMIE_TIME_SELECT_EXPANSION, std::move(packet)) { }
+          
+            void Read() override;
+
+            ObjectGuid ObjectGUID;
+            uint32 Expansion = 0;
+        };
+      
+        class ChromieTimeOpenNpc  final : public ServerPacket
+        {
+        public:
+            ChromieTimeOpenNpc() : ServerPacket(SMSG_CHROMIE_TIME_OPEN_NPC, 11) { }
+          
+            WorldPacket const* Write() override;
+          
+            ObjectGuid ObjectGUID;
+        };
+      
+        class ChromieTimeSelectExpansionSuccess  final : public ServerPacket
+        {
+        public:
+            ChromieTimeSelectExpansionSuccess() : ServerPacket(SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS) { }
+          
+            WorldPacket const* Write() override;
+        };
     }
 }
 
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 5f932030f3..eaded8f12d 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -315,7 +315,7 @@ void OpcodeTable::Initialize()
     DEFINE_HANDLER(CMSG_CHECK_CHARACTER_NAME_AVAILABILITY,                  STATUS_AUTHED,    PROCESS_THREADUNSAFE, &WorldSession::HandleCheckCharacterNameAvailability);
     DEFINE_HANDLER(CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID,                   STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
     DEFINE_HANDLER(CMSG_CHOICE_RESPONSE,                                    STATUS_LOGGEDIN,  PROCESS_INPLACE,      &WorldSession::HandlePlayerChoiceResponse);
-    DEFINE_HANDLER(CMSG_CHROMIE_TIME_SELECT_EXPANSION,                      STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+    DEFINE_HANDLER(CMSG_CHROMIE_TIME_SELECT_EXPANSION,                      STATUS_LOGGEDIN,  PROCESS_THREADUNSAFE, &WorldSession::HandleChromieTimeSelectExpansionOpcode);
     DEFINE_HANDLER(CMSG_CLAIM_WEEKLY_REWARD,                                STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
     DEFINE_HANDLER(CMSG_CLEAR_NEW_APPEARANCE,                               STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
     DEFINE_HANDLER(CMSG_CLEAR_RAID_MARKER,                                  STATUS_LOGGEDIN,  PROCESS_THREADUNSAFE, &WorldSession::HandleClearRaidMarker);
@@ -1149,8 +1149,8 @@ void OpcodeTable::Initialize()
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHECK_ABANDON_NPE,                       STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT,STATUS_NEVER,        CONNECTION_TYPE_REALM);
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHECK_WARGAME_ENTRY,                     STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
-    DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_OPEN_NPC,                   STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
-    DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS,   STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
+    DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_OPEN_NPC,                   STATUS_NEVER,        CONNECTION_TYPE_REALM);
+    DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS,   STATUS_NEVER,        CONNECTION_TYPE_REALM);
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLAIM_RAF_REWARD_RESPONSE,               STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_ALL_SPELL_CHARGES,                 STATUS_NEVER,        CONNECTION_TYPE_INSTANCE);
     DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_BOSS_EMOTES,                       STATUS_UNHANDLED,    CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 96debb5151..81e2207fd8 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -521,6 +521,7 @@ namespace WorldPackets
         class CloseInteraction;
         class ConversationLineStarted;
         class RequestLatestSplashScreen;
+        class ChromieTimeSelectExpansion;
     }
 
     namespace Movement
@@ -1735,6 +1736,7 @@ class TC_GAME_API WorldSession
         void HandleRequestCategoryCooldowns(WorldPackets::Spells::RequestCategoryCooldowns& requestCategoryCooldowns);
         void HandleCloseInteraction(WorldPackets::Misc::CloseInteraction& closeInteraction);
         void HandleConversationLineStarted(WorldPackets::Misc::ConversationLineStarted& conversationLineStarted);
+        void HandleChromieTimeSelectExpansionOpcode(WorldPackets::Misc::ChromieTimeSelectExpansion& selectExpansion);
 
         // Adventure Journal
         void HandleAdventureJournalOpenQuest(WorldPackets::AdventureJournal::AdventureJournalOpenQuest& openQuest);
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index e4c5af9010..e4b25ea997 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -39,6 +39,7 @@
 #include "SpellMgr.h"
 #include "TemporarySummon.h"
 #include "Vehicle.h"
+#include "MiscPackets.h"
 
 /*########
 # npc_air_force_bots
@@ -2350,6 +2351,56 @@ private:
     TaskScheduler _scheduler;
 };
 
+enum Chromie
+{
+    GOSSIP_MENU_SELECT_CHROMIE_TIME = 25426
+};
+
+struct npc_chromie_167032 : public ScriptedAI
+{
+    npc_chromie_167032(Creature* creature) : ScriptedAI(creature) { }
+
+    bool OnGossipHello(Player* player) override
+    {
+        if (me->IsQuestGiver())
+            player->PrepareQuestMenu(me->GetGUID());
+
+        AddGossipItemFor(player, GOSSIP_MENU_SELECT_CHROMIE_TIME, GOSSIP_OPTION_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+        AddGossipItemFor(player, GOSSIP_MENU_SELECT_CHROMIE_TIME, GOSSIP_OPTION_1 + 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+        AddGossipItemFor(player, GOSSIP_MENU_SELECT_CHROMIE_TIME, GOSSIP_OPTION_1 + 2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+        SendGossipMenuFor(player, GOSSIP_MENU_SELECT_CHROMIE_TIME, me->GetGUID());
+
+        return true;
+    }
+
+    void SendChromieTimeMenu(Player* player)
+    {
+        WorldPackets::Misc::ChromieTimeOpenNpc worldpark;
+        worldpark.ObjectGUID = me->GetGUID();
+        player->GetSession()->SendPacket(worldpark.Write());
+    }
+
+    bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+    {
+        uint32 const sender = player->PlayerTalkClass->GetGossipOptionSender(gossipListId);
+        uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+        ClearGossipMenuFor(player);
+
+        switch (action)
+        {
+        case GOSSIP_ACTION_INFO_DEF + 1:
+        case GOSSIP_ACTION_INFO_DEF + 2:
+            SendChromieTimeMenu(player);
+            break;
+        case GOSSIP_ACTION_INFO_DEF + 3:
+            break;
+        }
+        return true;
+    }
+
+
+};
+
 void AddSC_npcs_special()
 {
     new npc_air_force_bots();
@@ -2374,4 +2425,5 @@ void AddSC_npcs_special()
     new npc_argent_squire_gruntling();
     new npc_bountiful_table();
     RegisterCreatureAI(npc_gen_void_zone);
+    RegisterCreatureAI(npc_chromie_167032);
 }
--
2.35.2.windows.1

тебе останется сделать скрипт спеллов времени чтоб вешали баф и давали соответствующий первый квест
Спасибо Большое
 
Верх Низ