aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2013_01_26_00_world_misc.sql8
-rw-r--r--src/server/game/Miscellaneous/Language.h4
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp75
3 files changed, 86 insertions, 1 deletions
diff --git a/sql/updates/world/2013_01_26_00_world_misc.sql b/sql/updates/world/2013_01_26_00_world_misc.sql
new file mode 100644
index 00000000000..429d900d765
--- /dev/null
+++ b/sql/updates/world/2013_01_26_00_world_misc.sql
@@ -0,0 +1,8 @@
+DELETE FROM `trinity_string` WHERE `entry` IN (1149,1150);
+INSERT INTO `trinity_string` (`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`) VALUES
+(1149,'Group type: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(1150,'Name: %s (%s), GUID: %u, Flags: %s, Roles: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+
+DELETE FROM `command` WHERE `name`='group list';
+INSERT INTO `command` (`name`,`security`,`help`) VALUES
+('group list',3,'Syntax: .group list [$CharacterName] \r\nLists all the members of the group/party the player is in.');
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index 1aeb16e9c7e..8b416339bc7 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -851,7 +851,9 @@ enum TrinityStrings
LANG_GROUP_PLAYER_JOINED = 1146,
LANG_GROUP_NOT_IN_GROUP = 1147,
LANG_GROUP_FULL = 1148,
- // Room for more level 3 1149-1199 not used
+ LANG_GROUP_TYPE = 1149,
+ LANG_GROUP_PLAYER_NAME_GUID = 1150,
+ // Room for more level 3 1151-1199 not used
// Debug commands
LANG_CINEMATIC_NOT_EXIST = 1200,
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index e2b5ac9487d..3721f221178 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -33,6 +33,8 @@
#include "ace/INET_Addr.h"
#include "Player.h"
#include "Pet.h"
+#include "LFG.h"
+#include "GroupMGR.h"
class misc_commandscript : public CommandScript
{
@@ -47,6 +49,7 @@ public:
{ "disband", SEC_ADMINISTRATOR, false, &HandleGroupDisbandCommand, "", NULL },
{ "remove", SEC_ADMINISTRATOR, false, &HandleGroupRemoveCommand, "", NULL },
{ "join", SEC_ADMINISTRATOR, false, &HandleGroupJoinCommand, "", NULL },
+ { "list", SEC_ADMINISTRATOR, false, &HandleGroupListCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand petCommandTable[] =
@@ -2781,6 +2784,78 @@ public:
return true;
}
+ static bool HandleGroupListCommand(ChatHandler* handler, char const* args)
+ {
+ Player* playerTarget;
+ uint64 guidTarget;
+ std::string nameTarget;
+
+ uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER);
+
+ if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget))
+ {
+ playerTarget = sObjectMgr->GetPlayerByLowGUID(parseGUID);
+ guidTarget = parseGUID;
+ }
+ else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget))
+ return false;
+
+ Group* groupTarget = NULL;
+ if (playerTarget)
+ groupTarget = playerTarget->GetGroup();
+
+ if (!groupTarget)
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER);
+ stmt->setUInt32(0, guidTarget);
+ PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt);
+ if (resultGroup)
+ groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32());
+ }
+
+ if (groupTarget)
+ {
+ handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party"));
+ Group::MemberSlotList const& members = groupTarget->GetMemberSlots();
+ Group::MemberSlotList::const_iterator itr;
+ for (itr = members.begin(); itr != members.end(); ++itr)
+ {
+ std::ostringstream flags, roles;
+ if ((*itr).flags & MEMBER_FLAG_ASSISTANT)
+ flags << "Assistant ";
+ if ((*itr).flags & MEMBER_FLAG_MAINTANK)
+ flags << "MainTank ";
+ if ((*itr).flags & MEMBER_FLAG_MAINASSIST)
+ flags << "MainAssist ";
+
+ if ((*itr).roles & PLAYER_ROLE_LEADER)
+ roles << "Leader ";
+ if ((*itr).roles & PLAYER_ROLE_TANK)
+ roles << "Tank ";
+ if ((*itr).roles & PLAYER_ROLE_HEALER)
+ roles << "Healer ";
+ if ((*itr).roles & PLAYER_ROLE_DAMAGE)
+ roles << "Damage ";
+
+ Player* p = ObjectAccessor::FindPlayer((*itr).guid);
+ const char* onlineState = (p && p->IsInWorld()) ? "online" : "offline";
+
+ std::string flagsStr = (flags.str().empty()) ? "None" : flags.str();
+ std::string rolesStr = (roles.str().empty()) ? "None" : roles.str();
+
+ handler->PSendSysMessage(LANG_GROUP_PLAYER_NAME_GUID, (*itr).name.c_str(), onlineState, GUID_LOPART((*itr).guid), flagsStr.c_str(), rolesStr.c_str());
+ }
+ return true;
+ }
+ else
+ {
+ handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, nameTarget.c_str());
+ return true;
+ }
+
+ return true;
+ }
+
static bool HandlePlayAllCommand(ChatHandler* handler, char const* args)
{
if (!*args)