From df8dce4ae8c900ae7f9d8fb53a0280b6a7dec283 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+benjymansy123@users.noreply.github.com> Date: Tue, 5 Jul 2022 12:34:28 -0400 Subject: [PATCH 1/6] fix(DB): Remove `acore.world` from 2022_07_05_00.sql (#12305) --- data/sql/updates/db_world/2022_07_05_00.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/sql/updates/db_world/2022_07_05_00.sql b/data/sql/updates/db_world/2022_07_05_00.sql index 1fd915287..ea7115bc5 100644 --- a/data/sql/updates/db_world/2022_07_05_00.sql +++ b/data/sql/updates/db_world/2022_07_05_00.sql @@ -1,7 +1,7 @@ -- DB update 2022_07_03_07 -> 2022_07_05_00 -- DELETE FROM `waypoint_data` WHERE `id`=518940; -INSERT INTO `acore_world`.`waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES (518940, 1, 3866.84, -672.53, 328.888), (518940, 2, 3866.84, -672.534, 328.888), (518940, 3, 3818.17, -768.04, 314.71), From 9ae2b103fa1cdd8b753be36834c54ec0ac24c1a9 Mon Sep 17 00:00:00 2001 From: ZhengPeiRu21 <98835050+ZhengPeiRu21@users.noreply.github.com> Date: Tue, 5 Jul 2022 11:34:14 -0600 Subject: [PATCH 2/6] fix(DB/Achievements): Critters Killed statistic (#12306) --- data/sql/updates/pending_db_world/rev_1657040899617221100.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1657040899617221100.sql diff --git a/data/sql/updates/pending_db_world/rev_1657040899617221100.sql b/data/sql/updates/pending_db_world/rev_1657040899617221100.sql new file mode 100644 index 000000000..6e3b2e59c --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1657040899617221100.sql @@ -0,0 +1,2 @@ +-- +UPDATE `achievement_criteria_data` SET `value1` = 8 WHERE `criteria_id` = 4958 AND `type` = 8; From 8854117a283c3b8b7bb324f7d71debec1063c89b Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Tue, 5 Jul 2022 17:36:18 +0000 Subject: [PATCH 3/6] chore(DB): import pending files Referenced commit(s): 9ae2b103fa1cdd8b753be36834c54ec0ac24c1a9 --- .../rev_1657040899617221100.sql => db_world/2022_07_05_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1657040899617221100.sql => db_world/2022_07_05_02.sql} (69%) diff --git a/data/sql/updates/pending_db_world/rev_1657040899617221100.sql b/data/sql/updates/db_world/2022_07_05_02.sql similarity index 69% rename from data/sql/updates/pending_db_world/rev_1657040899617221100.sql rename to data/sql/updates/db_world/2022_07_05_02.sql index 6e3b2e59c..a595de268 100644 --- a/data/sql/updates/pending_db_world/rev_1657040899617221100.sql +++ b/data/sql/updates/db_world/2022_07_05_02.sql @@ -1,2 +1,3 @@ +-- DB update 2022_07_05_01 -> 2022_07_05_02 -- UPDATE `achievement_criteria_data` SET `value1` = 8 WHERE `criteria_id` = 4958 AND `type` = 8; From c93fb05515dd1768cda9285154b7916b2c30c4d3 Mon Sep 17 00:00:00 2001 From: Kempec Halk <80704304+Gozzim@users.noreply.github.com> Date: Wed, 6 Jul 2022 03:55:37 +0200 Subject: [PATCH 4/6] feat(Core/Commands): Debug Spell Visuals Command (#12216) * feat(Core/Commands): Debug Spell Visuals Command * feat(DB/Commands): Debug Visual Help * Add missing eol at eof --- .../rev_1656377467861686900.sql | 4 +++ src/server/scripts/Commands/cs_debug.cpp | 25 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 data/sql/updates/pending_db_world/rev_1656377467861686900.sql diff --git a/data/sql/updates/pending_db_world/rev_1656377467861686900.sql b/data/sql/updates/pending_db_world/rev_1656377467861686900.sql new file mode 100644 index 000000000..a5e89a128 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1656377467861686900.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `command` WHERE `name` = 'debug play visual'; +INSERT INTO `command` (`name`, `security`, `help`) VALUES +('debug play visual', 3, 'Syntax: .debug play visual #visualid\r\nPlay spell visual with #visualid.\n#visualid refers to the ID from SpellVisualKit.dbc'); diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index a5cf1b9fa..e0c12e927 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -58,7 +58,8 @@ public: { "cinematic", HandleDebugPlayCinematicCommand, SEC_ADMINISTRATOR, Console::No }, { "movie", HandleDebugPlayMovieCommand, SEC_ADMINISTRATOR, Console::No }, { "sound", HandleDebugPlaySoundCommand, SEC_ADMINISTRATOR, Console::No }, - { "music", HandleDebugPlayMusicCommand, SEC_ADMINISTRATOR, Console::No } + { "music", HandleDebugPlayMusicCommand, SEC_ADMINISTRATOR, Console::No }, + { "visual", HandleDebugVisualCommand, SEC_ADMINISTRATOR, Console::No } }; static ChatCommandTable debugSendCommandTable = { @@ -203,6 +204,28 @@ public: return true; } + static bool HandleDebugVisualCommand(ChatHandler* handler, uint32 visualId) + { + if (!visualId) + { + handler->SendSysMessage(LANG_BAD_VALUE); + handler->SetSentErrorMessage(true); + return false; + } + + Player* player = handler->GetPlayer(); + Unit* target = handler->getSelectedUnit(); + + if (!target) + { + player->SendPlaySpellVisual(visualId); + return true; + } + + player->SendPlaySpellImpact(target->GetGUID(), visualId); + return true; + } + static bool HandleDebugSendSpellFailCommand(ChatHandler* handler, SpellCastResult result, Optional failArg1, Optional failArg2) { WorldPacket data(SMSG_CAST_FAILED, 5); From 7814ac68cc8bd37adfb22ce2c082ead996e188d4 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Wed, 6 Jul 2022 01:57:47 +0000 Subject: [PATCH 5/6] chore(DB): import pending files Referenced commit(s): c93fb05515dd1768cda9285154b7916b2c30c4d3 --- .../rev_1656377467861686900.sql => db_world/2022_07_06_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1656377467861686900.sql => db_world/2022_07_06_00.sql} (86%) diff --git a/data/sql/updates/pending_db_world/rev_1656377467861686900.sql b/data/sql/updates/db_world/2022_07_06_00.sql similarity index 86% rename from data/sql/updates/pending_db_world/rev_1656377467861686900.sql rename to data/sql/updates/db_world/2022_07_06_00.sql index a5e89a128..daf8d0ce1 100644 --- a/data/sql/updates/pending_db_world/rev_1656377467861686900.sql +++ b/data/sql/updates/db_world/2022_07_06_00.sql @@ -1,3 +1,4 @@ +-- DB update 2022_07_05_02 -> 2022_07_06_00 -- DELETE FROM `command` WHERE `name` = 'debug play visual'; INSERT INTO `command` (`name`, `security`, `help`) VALUES From c3d8340e6b6451650fc0a2a971b470e082015389 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Wed, 6 Jul 2022 14:05:45 +0200 Subject: [PATCH 6/6] fix(Core/Gossips): Properly send packet with questgiver query handler. (#12290) Fixes #12215 --- src/server/game/Entities/Creature/GossipDef.cpp | 9 +++++++-- src/server/game/Entities/Creature/GossipDef.h | 8 ++++++-- src/server/game/Handlers/MiscHandler.cpp | 16 ++++++++++++++++ src/server/game/Handlers/QuestHandler.cpp | 6 ++++-- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index 15598c833..842bb9506 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -29,6 +29,7 @@ GossipMenu::GossipMenu() { _menuId = 0; _locale = DEFAULT_LOCALE; + _senderGUID.Clear(); } GossipMenu::~GossipMenu() @@ -188,8 +189,10 @@ void PlayerMenu::ClearMenus() _questMenu.ClearMenu(); } -void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID) const +void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID) { + _gossipMenu.SetSenderGUID(objectGUID); + WorldPacket data(SMSG_GOSSIP_MESSAGE, 24 + _gossipMenu.GetMenuItemCount() * 100 + _questMenu.GetMenuItemCount() * 75); // guess size data << objectGUID; data << uint32(_gossipMenu.GetMenuId()); // new 2.4.0 @@ -234,8 +237,10 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID) const _session->SendPacket(&data); } -void PlayerMenu::SendCloseGossip() const +void PlayerMenu::SendCloseGossip() { + _gossipMenu.SetSenderGUID(ObjectGuid::Empty); + WorldPacket data(SMSG_GOSSIP_COMPLETE, 0); _session->SendPacket(&data); } diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h index 0b8eedfc8..c8f98d684 100644 --- a/src/server/game/Entities/Creature/GossipDef.h +++ b/src/server/game/Entities/Creature/GossipDef.h @@ -213,11 +213,15 @@ public: return _menuItems; } + void SetSenderGUID(ObjectGuid guid) { _senderGUID = guid; } + [[nodiscard]] ObjectGuid GetSenderGUID() const { return _senderGUID; } + private: GossipMenuItemContainer _menuItems; GossipMenuItemDataContainer _menuItemData; uint32 _menuId; LocaleConstant _locale; + ObjectGuid _senderGUID; }; class QuestMenu @@ -266,8 +270,8 @@ public: [[nodiscard]] uint32 GetGossipOptionAction(uint32 selection) const { return _gossipMenu.GetMenuItemAction(selection); } [[nodiscard]] bool IsGossipOptionCoded(uint32 selection) const { return _gossipMenu.IsMenuItemCoded(selection); } - void SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID) const; - void SendCloseGossip() const; + void SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID); + void SendCloseGossip(); void SendPointOfInterest(uint32 poiId) const; /*********************************************************/ diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index dc5b48e68..e3d8912ea 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -98,6 +98,12 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket& recv_data) if (_player->PlayerTalkClass->IsGossipOptionCoded(gossipListId)) recv_data >> code; + // Prevent cheating on C++ scripted menus + if (_player->PlayerTalkClass->GetGossipMenu().GetSenderGUID() != guid) + { + return; + } + Creature* unit = nullptr; GameObject* go = nullptr; Item* item = nullptr; @@ -528,6 +534,16 @@ void WorldSession::HandleSetSelectionOpcode(WorldPacket& recv_data) ObjectGuid guid; recv_data >> guid; + if (!guid) + { + // Clear any active gossip related to current selection if not present at player's client + GossipMenu& gossipMenu = _player->PlayerTalkClass->GetGossipMenu(); + if (gossipMenu.GetSenderGUID() == _player->GetTarget()) + { + _player->PlayerTalkClass->SendCloseGossip(); + } + } + _player->SetSelection(guid); // Change target of current autoshoot spell diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 25366f52a..49e951549 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -38,9 +38,11 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recvData) uint32 questStatus = DIALOG_STATUS_NONE; GossipMenu& gossipMenu = _player->PlayerTalkClass->GetGossipMenu(); - // Did we already get get a gossip menu? if so no need to status query - if (!gossipMenu.Empty()) + // Did we already get a gossip menu with that NPC? if so no need to status query + if (gossipMenu.GetSenderGUID() == guid) + { return; + } Object* questGiver = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT); if (!questGiver)