mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Script/Commands: Implement command to list the members of a group/party.
This commit is contained in:
8
sql/updates/world/2013_01_26_00_world_misc.sql
Normal file
8
sql/updates/world/2013_01_26_00_world_misc.sql
Normal file
@@ -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.');
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user