From 75016bf4da8656b049e6050e745cd50793e05780 Mon Sep 17 00:00:00 2001 From: Mykhailo Redko Date: Mon, 22 Jan 2024 14:58:31 +0200 Subject: [PATCH 1/4] Scripts/Commands: .account set seclevel command will update security level for online session (#29600) --- src/server/game/Server/WorldSession.cpp | 2 +- src/server/game/Server/WorldSession.h | 2 +- src/server/scripts/Commands/cs_account.cpp | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 0ce690bd574..d55a3a960a2 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -1345,7 +1345,7 @@ void WorldSession::InitializeSessionCallback(CharacterDatabaseQueryHolder const& SendTutorialsData(); } -rbac::RBACData* WorldSession::GetRBACData() +rbac::RBACData* WorldSession::GetRBACData() const { return _RBACData; } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 828aa415b1c..59e311b1cec 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -454,7 +454,7 @@ class TC_GAME_API WorldSession GameClient* GetGameClient() const { return _gameClient; }; - rbac::RBACData* GetRBACData(); + rbac::RBACData* GetRBACData() const; bool HasPermission(uint32 permissionId); void LoadPermissions(); QueryCallback LoadPermissionsAsync(); diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp index 41664a47f20..e3343ed2fbb 100644 --- a/src/server/scripts/Commands/cs_account.cpp +++ b/src/server/scripts/Commands/cs_account.cpp @@ -788,7 +788,8 @@ class account_commandscript : public CommandScript return false; } - sAccountMgr->UpdateAccountAccess(nullptr, accountId, securityLevel, realmID); + WorldSession const* session = sWorld->FindSession(accountId); + sAccountMgr->UpdateAccountAccess(session ? session->GetRBACData() : nullptr, accountId, securityLevel, realmID); handler->PSendSysMessage(LANG_YOU_CHANGE_SECURITY, accountName->c_str(), securityLevel); return true; From 420cbd7396ca59497328d372ed028d976f23b150 Mon Sep 17 00:00:00 2001 From: Mykhailo Redko Date: Wed, 24 Jan 2024 22:09:01 +0200 Subject: [PATCH 2/4] Core/PacketIO: Implemented CMSG_BUSY_TRADE and CMSG_IGNORE_TRADE (#29570) Closes #29308 --- src/server/game/Entities/Player/Player.cpp | 7 +++---- src/server/game/Entities/Player/Player.h | 2 +- src/server/game/Handlers/TradeHandler.cpp | 17 ++++------------- src/server/game/Server/WorldSession.h | 2 +- 4 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4bc613bb04d..58f514add16 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -13502,17 +13502,16 @@ bool Player::IsUsingTwoHandedWeaponInOneHand() const return true; } -void Player::TradeCancel(bool sendback) +void Player::TradeCancel(bool sendback, TradeStatus status /*= TRADE_STATUS_TRADE_CANCELED*/) { if (m_trade) { Player* trader = m_trade->GetTrader(); - // send yellow "Trade canceled" message to both traders if (sendback) - GetSession()->SendCancelTrade(); + GetSession()->SendCancelTrade(status); - trader->GetSession()->SendCancelTrade(); + trader->GetSession()->SendCancelTrade(status); // cleanup delete m_trade; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index b36b6440e65..5c97be882b7 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1167,7 +1167,7 @@ class TC_GAME_API Player : public Unit, public GridObject Player* GetTrader() const; TradeData* GetTradeData() const { return m_trade; } - void TradeCancel(bool sendback); + void TradeCancel(bool sendback, TradeStatus status = TRADE_STATUS_TRADE_CANCELED); CinematicMgr* GetCinematicMgr() const { return _cinematicMgr; } diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index 048c2930108..4d8588bf7be 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -62,14 +62,12 @@ void WorldSession::SendTradeStatus(TradeStatusInfo const& info) void WorldSession::HandleIgnoreTradeOpcode(WorldPacket& /*recvPacket*/) { - TC_LOG_DEBUG("network", "WORLD: Ignore Trade {}", _player->GetGUID().ToString()); - // recvPacket.print_storage(); + _player->TradeCancel(true, TRADE_STATUS_IGNORE_YOU); } void WorldSession::HandleBusyTradeOpcode(WorldPacket& /*recvPacket*/) { - TC_LOG_DEBUG("network", "WORLD: Busy Trade {}", _player->GetGUID().ToString()); - // recvPacket.print_storage(); + _player->TradeCancel(true, TRADE_STATUS_BUSY); } void WorldSession::SendUpdateTrade(bool trader_data /*= true*/) @@ -570,13 +568,13 @@ void WorldSession::HandleBeginTradeOpcode(WorldPacket& /*recvPacket*/) SendTradeStatus(info); } -void WorldSession::SendCancelTrade() +void WorldSession::SendCancelTrade(TradeStatus status) { if (PlayerRecentlyLoggedOut() || PlayerLogout()) return; TradeStatusInfo info; - info.Status = TRADE_STATUS_TRADE_CANCELED; + info.Status = status; SendTradeStatus(info); } @@ -676,13 +674,6 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket) return; } - if (pOther->GetSocial()->HasIgnore(GetPlayer()->GetGUID())) - { - info.Status = TRADE_STATUS_IGNORE_YOU; - SendTradeStatus(info); - return; - } - if (pOther->GetTeam() != _player->GetTeam() && (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_TRADE) && !GetPlayer()->GetSession()->HasPermission(rbac::RBAC_PERM_ALLOW_TWO_SIDE_TRADE))) diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 59e311b1cec..7d3ee54ba5f 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -529,7 +529,7 @@ class TC_GAME_API WorldSession void SendTradeStatus(TradeStatusInfo const& status); void SendUpdateTrade(bool trader_data = true); - void SendCancelTrade(); + void SendCancelTrade(TradeStatus status); void SendPetitionQueryOpcode(ObjectGuid petitionguid); From 7e28ee442156880f388800639b8fbdbbb7bba491 Mon Sep 17 00:00:00 2001 From: ModoX Date: Tue, 26 Oct 2021 22:58:49 +0200 Subject: [PATCH 3/4] Core/Conditions: Added conditions for AreaTriggers (AreaTrigger.dbc) (#27174) Cherry-picked from 6ebd592 --- src/server/game/Conditions/ConditionMgr.cpp | 9 +++++++++ src/server/game/Conditions/ConditionMgr.h | 2 +- src/server/game/Handlers/MiscHandler.cpp | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 993ad2e02ad..7ab68c1bb39 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -1818,6 +1818,15 @@ bool ConditionMgr::isSourceTypeValid(Condition* cond) const } break; } + case CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED: + { + if (!sAreaTriggerStore.LookupEntry(cond->SourceEntry)) + { + TC_LOG_ERROR("sql.sql", "%s SourceEntry in `condition` table, does not exists in AreaTrigger.dbc, ignoring.", cond->ToString().c_str()); + return false; + } + break; + } case CONDITION_SOURCE_TYPE_TERRAIN_SWAP: { TC_LOG_ERROR("sql.sql", "CONDITION_SOURCE_TYPE_TERRAIN_SWAP: is only for master branch, skipped"); diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index b31ebb9f4bb..ff4ccf61559 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -154,7 +154,7 @@ enum ConditionSourceType CONDITION_SOURCE_TYPE_GRAVEYARD = 27, // only master CONDITION_SOURCE_TYPE_AREATRIGGER = 28, // only master (this refers to dynamically spawned areatriggers, not the ones from AreaTrigger.dbc/db2) CONDITION_SOURCE_TYPE_CONVERSATION_LINE = 29, // only master - CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED = 30, // only master (TODO: cherry-pick) + CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED = 30, CONDITION_SOURCE_TYPE_TRAINER_SPELL = 31, // only master (TODO: cherry-pick) CONDITION_SOURCE_TYPE_OBJECT_ID_VISIBILITY = 32, // only master (TODO: cherry-pick) CONDITION_SOURCE_TYPE_SPAWN_GROUP = 33, // only master (TODO: cherry-pick) diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 8ed5fab016e..eda9900a26e 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -621,6 +621,9 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData) if (player->isDebugAreaTriggers) ChatHandler(player->GetSession()).PSendSysMessage(LANG_DEBUG_AREATRIGGER_REACHED, triggerId); + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED, atEntry->ID, player)) + return; + if (sScriptMgr->OnAreaTrigger(player, atEntry)) return; From b4783d6cace49ae0cfe2b0d5059ba776840b307b Mon Sep 17 00:00:00 2001 From: r4dish Date: Sun, 7 Jan 2024 00:21:46 +0200 Subject: [PATCH 4/4] DB/Misc: Enable tavern in Shadow Vault (Icecrown). It should only work in phase 1. Closes #26292 --- sql/updates/world/3.3.5/2024_01_26_00_world.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/updates/world/3.3.5/2024_01_26_00_world.sql diff --git a/sql/updates/world/3.3.5/2024_01_26_00_world.sql b/sql/updates/world/3.3.5/2024_01_26_00_world.sql new file mode 100644 index 00000000000..43f875acf30 --- /dev/null +++ b/sql/updates/world/3.3.5/2024_01_26_00_world.sql @@ -0,0 +1,7 @@ +-- +DELETE FROM `areatrigger_tavern` WHERE `id` = 5309; +INSERT INTO `areatrigger_tavern` (`id`, `name`) VALUES (5309, 'Shadow Vault'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 30 AND `SourceEntry` = 5309; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(30, 0, 5309, 0, 0, 26, 0, 1, 0, 0, 0, 0, 0, '', 'Shadow Vault tavern requires phase 1.');