aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarbenium <carbenium@outlook.com>2021-06-26 22:43:13 +0200
committerShauren <shauren.trinity@gmail.com>2022-03-12 22:47:34 +0100
commit3c37dddeecd15c2bc7970b5d15199b1a03e5e18c (patch)
tree95f8d09e562d71bf9d6a6302e587933c47807df4
parent0c1a5e239cae76df2caffc75a4dccec873ec5b3e (diff)
Core/ChatCommands: AccountIdentifier from current target
(cherry picked from commit 8ee92147a5435600992d7269b98edd5d36cd8924)
-rw-r--r--src/server/game/Chat/ChatCommands/ChatCommandTags.cpp16
-rw-r--r--src/server/game/Chat/ChatCommands/ChatCommandTags.h9
2 files changed, 25 insertions, 0 deletions
diff --git a/src/server/game/Chat/ChatCommands/ChatCommandTags.cpp b/src/server/game/Chat/ChatCommands/ChatCommandTags.cpp
index b5b29193312..9caf55b9723 100644
--- a/src/server/game/Chat/ChatCommands/ChatCommandTags.cpp
+++ b/src/server/game/Chat/ChatCommands/ChatCommandTags.cpp
@@ -24,6 +24,8 @@
#include "ObjectAccessor.h"
#include "ObjectMgr.h"
#include "Player.h"
+#include "World.h"
+#include "WorldSession.h"
using namespace Trinity::Impl::ChatCommands;
@@ -58,6 +60,9 @@ ChatCommandResult Trinity::ChatCommands::QuotedString::TryConsume(ChatHandler co
return std::nullopt;
}
+Trinity::ChatCommands::AccountIdentifier::AccountIdentifier(WorldSession& session)
+ : _id(session.GetAccountId()), _name(session.GetAccountName()), _session(&session) {}
+
ChatCommandResult Trinity::ChatCommands::AccountIdentifier::TryConsume(ChatHandler const* handler, std::string_view args)
{
std::string_view text;
@@ -70,6 +75,7 @@ ChatCommandResult Trinity::ChatCommands::AccountIdentifier::TryConsume(ChatHandl
if (!Utf8ToUpperOnlyLatin(_name))
return GetTrinityString(handler, LANG_CMDPARSER_INVALID_UTF8);
_id = AccountMgr::GetId(_name);
+ _session = sWorld->FindSession(_id);
if (_id) // account with name exists, we are done
return next;
@@ -78,6 +84,7 @@ ChatCommandResult Trinity::ChatCommands::AccountIdentifier::TryConsume(ChatHandl
if (!id)
return FormatTrinityString(handler, LANG_CMDPARSER_ACCOUNT_NAME_NO_EXIST, STRING_VIEW_FMT_ARG(_name));
_id = *id;
+ _session = sWorld->FindSession(_id);
if (AccountMgr::GetName(_id, _name))
return next;
@@ -85,6 +92,15 @@ ChatCommandResult Trinity::ChatCommands::AccountIdentifier::TryConsume(ChatHandl
return FormatTrinityString(handler, LANG_CMDPARSER_ACCOUNT_ID_NO_EXIST, _id);
}
+Optional<Trinity::ChatCommands::AccountIdentifier> Trinity::ChatCommands::AccountIdentifier::FromTarget(ChatHandler* handler)
+{
+ if (Player* player = handler->GetPlayer())
+ if (Player* target = player->GetSelectedPlayer())
+ if (WorldSession* session = target->GetSession())
+ return { *session };
+ return std::nullopt;
+}
+
ChatCommandResult Trinity::ChatCommands::PlayerIdentifier::TryConsume(ChatHandler const* handler, std::string_view args)
{
Variant<Hyperlink<player>, ObjectGuid::LowType, std::string_view> val;
diff --git a/src/server/game/Chat/ChatCommands/ChatCommandTags.h b/src/server/game/Chat/ChatCommands/ChatCommandTags.h
index b72d2d60465..19daf234deb 100644
--- a/src/server/game/Chat/ChatCommands/ChatCommandTags.h
+++ b/src/server/game/Chat/ChatCommands/ChatCommandTags.h
@@ -36,6 +36,7 @@
class ChatHandler;
class Player;
+class WorldSession;
namespace Trinity::Impl::ChatCommands
{
@@ -150,18 +151,26 @@ namespace Trinity::ChatCommands
{
using value_type = uint32;
+ AccountIdentifier() : _id(), _name(), _session(nullptr) {}
+ AccountIdentifier(WorldSession& session);
+
operator uint32() const { return _id; }
operator std::string const& () const { return _name; }
operator std::string_view() const { return _name; }
uint32 GetID() const { return _id; }
std::string const& GetName() const { return _name; }
+ bool IsConnected() { return _session != nullptr; }
+ WorldSession* GetConnectedSession() { return _session; }
ChatCommandResult TryConsume(ChatHandler const* handler, std::string_view args);
+ static Optional<AccountIdentifier> FromTarget(ChatHandler* handler);
+
private:
uint32 _id;
std::string _name;
+ WorldSession* _session;
};
struct TC_GAME_API PlayerIdentifier : Trinity::Impl::ChatCommands::ContainerTag