AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
group_commandscript Class Reference
Inheritance diagram for group_commandscript:
CommandScript ScriptObject

Public Member Functions

 group_commandscript ()
 
ChatCommandTable GetCommands () const override
 
virtual std::vector< Acore::ChatCommands::ChatCommandBuilderGetCommands () const =0
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 

Static Public Member Functions

static bool HandleGroupLeaderCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleGroupDisbandCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleGroupRemoveCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 
static bool HandleGroupJoinCommand (ChatHandler *handler, std::string const &playerInGroup, std::string const &playerName)
 
static bool HandleGroupListCommand (ChatHandler *handler, Optional< PlayerIdentifier > target)
 

Additional Inherited Members

- Protected Member Functions inherited from CommandScript
 CommandScript (const char *name)
 
- Protected Member Functions inherited from ScriptObject
 ScriptObject (const char *name)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ group_commandscript()

group_commandscript::group_commandscript ( )
inline
30: CommandScript("group_commandscript") { }
Definition: ScriptMgr.h:850

Member Function Documentation

◆ GetCommands()

ChatCommandTable group_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

33 {
34 static ChatCommandTable groupCommandTable =
35 {
36 { "list", HandleGroupListCommand, SEC_GAMEMASTER, Console::Yes },
37 { "join", HandleGroupJoinCommand, SEC_GAMEMASTER, Console::No },
38 { "remove", HandleGroupRemoveCommand, SEC_GAMEMASTER, Console::No },
39 { "disband", HandleGroupDisbandCommand, SEC_GAMEMASTER, Console::No },
40 { "leader", HandleGroupLeaderCommand, SEC_GAMEMASTER, Console::No }
41 };
42
43 static ChatCommandTable commandTable =
44 {
45 { "group", groupCommandTable }
46 };
47
48 return commandTable;
49 }
@ SEC_GAMEMASTER
Definition: Common.h:68
std::vector< ChatCommandBuilder > ChatCommandTable
Definition: ChatCommand.h:50
static bool HandleGroupListCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_group.cpp:189
static bool HandleGroupRemoveCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_group.cpp:106
static bool HandleGroupJoinCommand(ChatHandler *handler, std::string const &playerInGroup, std::string const &playerName)
Definition: cs_group.cpp:133
static bool HandleGroupDisbandCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_group.cpp:79
static bool HandleGroupLeaderCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition: cs_group.cpp:51

References HandleGroupDisbandCommand(), HandleGroupJoinCommand(), HandleGroupLeaderCommand(), HandleGroupListCommand(), HandleGroupRemoveCommand(), and SEC_GAMEMASTER.

◆ HandleGroupDisbandCommand()

static bool group_commandscript::HandleGroupDisbandCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
80 {
81 if (!target)
82 {
83 target = PlayerIdentifier::FromTargetOrSelf(handler);
84 }
85
86 if (!target || !target->IsConnected())
87 {
88 return false;
89 }
90
91 Player* player = nullptr;
92 Group* group = nullptr;
93 ObjectGuid guid;
94
95 if (handler->GetPlayerGroupAndGUIDByName(target->GetName().c_str(), player, group, guid))
96 {
97 if (group)
98 {
99 group->Disband();
100 }
101 }
102
103 return true;
104 }
bool GetPlayerGroupAndGUIDByName(const char *cname, Player *&player, Group *&group, ObjectGuid &guid, bool offline=false)
Definition: Chat.cpp:830
static Optional< PlayerIdentifier > FromTargetOrSelf(ChatHandler *handler)
Definition: ChatCommandTags.h:189
Definition: ObjectGuid.h:120
Definition: Player.h:1046
Definition: Group.h:168
void Disband(bool hideDestroy=false)
Definition: Group.cpp:753

References Group::Disband(), Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), and ChatHandler::GetPlayerGroupAndGUIDByName().

Referenced by GetCommands().

◆ HandleGroupJoinCommand()

static bool group_commandscript::HandleGroupJoinCommand ( ChatHandler handler,
std::string const &  playerInGroup,
std::string const &  playerName 
)
inlinestatic
134 {
135 if (playerInGroup.empty() || playerName.empty())
136 {
137 return false;
138 }
139
140 Player* playerSource = nullptr;
141 Group* groupSource = nullptr;
142 ObjectGuid guidSource;
143 ObjectGuid guidTarget;
144
145 if (handler->GetPlayerGroupAndGUIDByName(playerInGroup.c_str(), playerSource, groupSource, guidSource, true))
146 {
147 if (groupSource)
148 {
149 Group* groupTarget = nullptr;
150 Player* playerTarget = nullptr;
151
152 if (handler->GetPlayerGroupAndGUIDByName(playerName.c_str(), playerTarget, groupTarget, guidTarget, true))
153 {
154 if (!groupTarget && playerTarget->GetGroup() != groupSource)
155 {
156 if (!groupSource->IsFull())
157 {
158 groupSource->AddMember(playerTarget);
159 groupSource->BroadcastGroupUpdate();
160 handler->PSendSysMessage(LANG_GROUP_PLAYER_JOINED, playerTarget->GetName().c_str(), playerSource->GetName().c_str());
161 return true;
162 }
163 else
164 {
165 // group is full
167 return true;
168 }
169 }
170 else
171 {
172 // group is full or target player already in a group
173 handler->PSendSysMessage(LANG_GROUP_ALREADY_IN_GROUP, playerTarget->GetName().c_str());
174 return true;
175 }
176 }
177 }
178 else
179 {
180 // specified source player is not in a group
181 handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, playerSource->GetName().c_str());
182 return true;
183 }
184 }
185
186 return true;
187 }
@ LANG_GROUP_PLAYER_JOINED
Definition: Language.h:908
@ LANG_GROUP_NOT_IN_GROUP
Definition: Language.h:909
@ LANG_GROUP_FULL
Definition: Language.h:910
@ LANG_GROUP_ALREADY_IN_GROUP
Definition: Language.h:907
void PSendSysMessage(char const *fmt, Args &&... args)
Definition: Chat.h:60
std::string const & GetName() const
Definition: Object.h:446
Group * GetGroup()
Definition: Player.h:2418
void BroadcastGroupUpdate(void)
Definition: Group.cpp:2138
bool AddMember(Player *player)
Definition: Group.cpp:390
bool IsFull() const
Definition: Group.cpp:2199

References Group::AddMember(), Group::BroadcastGroupUpdate(), Player::GetGroup(), WorldObject::GetName(), ChatHandler::GetPlayerGroupAndGUIDByName(), Group::IsFull(), LANG_GROUP_ALREADY_IN_GROUP, LANG_GROUP_FULL, LANG_GROUP_NOT_IN_GROUP, LANG_GROUP_PLAYER_JOINED, and ChatHandler::PSendSysMessage().

Referenced by GetCommands().

◆ HandleGroupLeaderCommand()

static bool group_commandscript::HandleGroupLeaderCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
52 {
53 if (!target)
54 {
55 target = PlayerIdentifier::FromTargetOrSelf(handler);
56 }
57
58 if (!target)
59 {
60 return false;
61 }
62
63 Player* player = nullptr;
64 Group* group = nullptr;
65 ObjectGuid guid;
66
67 if (handler->GetPlayerGroupAndGUIDByName(target->GetName().c_str(), player, group, guid))
68 {
69 if (group && group->GetLeaderGUID() != guid)
70 {
71 group->ChangeLeader(guid);
72 group->SendUpdate();
73 }
74 }
75
76 return true;
77 }
void SendUpdate()
Definition: Group.cpp:1633
void ChangeLeader(ObjectGuid guid)
Definition: Group.cpp:712
ObjectGuid GetLeaderGUID() const
Definition: Group.cpp:2235

References Group::ChangeLeader(), Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), Group::GetLeaderGUID(), ChatHandler::GetPlayerGroupAndGUIDByName(), and Group::SendUpdate().

Referenced by GetCommands().

◆ HandleGroupListCommand()

static bool group_commandscript::HandleGroupListCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
190 {
191 if (!target)
192 {
193 target = PlayerIdentifier::FromTargetOrSelf(handler);
194 }
195
196 if (!target)
197 {
198 return false;
199 }
200
201 Group* groupTarget = nullptr;
202
203 if (target->IsConnected())
204 {
205 groupTarget = target->GetConnectedPlayer()->GetGroup();
206 }
207
208 if (!groupTarget)
209 {
210 if (ObjectGuid groupGUID = sCharacterCache->GetCharacterGroupGuidByGuid(target->GetGUID()))
211 {
212 groupTarget = sGroupMgr->GetGroupByGUID(groupGUID.GetCounter());
213 }
214 }
215
216 if (!groupTarget)
217 {
218 handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, target->GetName().c_str());
219 return true;
220 }
221
222 handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "Raid" : "Party"), groupTarget->GetMembersCount());
223
224 for (auto const& slot : groupTarget->GetMemberSlots())
225 {
226 std::string flags;
227
228 if (slot.flags & MEMBER_FLAG_ASSISTANT)
229 {
230 flags = "Assistant";
231 }
232
233 if (slot.flags & MEMBER_FLAG_MAINTANK)
234 {
235 if (!flags.empty())
236 {
237 flags.append(", ");
238 }
239
240 flags.append("MainTank");
241 }
242
243 if (slot.flags & MEMBER_FLAG_MAINASSIST)
244 {
245 if (!flags.empty())
246 {
247 flags.append(", ");
248 }
249
250 flags.append("MainAssist");
251 }
252
253 if (flags.empty())
254 {
255 flags = "None";
256 }
257 }
258
259 return true;
260 }
#define sCharacterCache
Definition: CharacterCache.h:83
@ MEMBER_FLAG_ASSISTANT
Definition: Group.h:72
@ MEMBER_FLAG_MAINASSIST
Definition: Group.h:74
@ MEMBER_FLAG_MAINTANK
Definition: Group.h:73
#define sGroupMgr
Definition: GroupMgr.h:51
@ LANG_GROUP_TYPE
Definition: Language.h:911
MemberSlotList const & GetMemberSlots() const
Definition: Group.h:241
uint32 GetMembersCount() const
Definition: Group.h:244
bool isRaidGroup() const
Definition: Group.cpp:2210

References Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), Group::GetMembersCount(), Group::GetMemberSlots(), Group::isRaidGroup(), LANG_GROUP_NOT_IN_GROUP, LANG_GROUP_TYPE, MEMBER_FLAG_ASSISTANT, MEMBER_FLAG_MAINASSIST, MEMBER_FLAG_MAINTANK, ChatHandler::PSendSysMessage(), sCharacterCache, and sGroupMgr.

Referenced by GetCommands().

◆ HandleGroupRemoveCommand()

static bool group_commandscript::HandleGroupRemoveCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
107 {
108 if (!target)
109 {
110 target = PlayerIdentifier::FromTargetOrSelf(handler);
111 }
112
113 if (!target || !target->IsConnected())
114 {
115 return false;
116 }
117
118 Player* player = nullptr;
119 Group* group = nullptr;
120 ObjectGuid guid;
121
122 if (handler->GetPlayerGroupAndGUIDByName(target->GetName().c_str(), player, group, guid, true))
123 {
124 if (group)
125 {
126 group->RemoveMember(guid);
127 }
128 }
129
130 return true;
131 }
bool RemoveMember(ObjectGuid guid, const RemoveMethod &method=GROUP_REMOVEMETHOD_DEFAULT, ObjectGuid kicker=ObjectGuid::Empty, const char *reason=nullptr)
Definition: Group.cpp:546

References Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), ChatHandler::GetPlayerGroupAndGUIDByName(), and Group::RemoveMember().

Referenced by GetCommands().