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
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 
uint16 GetTotalAvailableHooks ()
 

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)
 
static bool HandleGroupReviveCommand (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, uint16 totalAvailableHooks=0)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ group_commandscript()

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

Member Function Documentation

◆ GetCommands()

ChatCommandTable group_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

33 {
34 static ChatCommandTable groupCommandTable =
35 {
42 };
43
44 static ChatCommandTable commandTable =
45 {
46 { "group", groupCommandTable }
47 };
48
49 return commandTable;
50 }
static bool HandleGroupReviveCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_group.cpp:263
static bool HandleGroupListCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_group.cpp:190
static bool HandleGroupRemoveCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_group.cpp:107
static bool HandleGroupJoinCommand(ChatHandler *handler, std::string const &playerInGroup, std::string const &playerName)
Definition cs_group.cpp:134
static bool HandleGroupDisbandCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_group.cpp:80
static bool HandleGroupLeaderCommand(ChatHandler *handler, Optional< PlayerIdentifier > target)
Definition cs_group.cpp:52
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46
@ RBAC_PERM_COMMAND_GROUP_DISBAND
Definition RBAC.h:305
@ RBAC_PERM_COMMAND_GROUP_LIST
Definition RBAC.h:308
@ RBAC_PERM_COMMAND_GROUP_REMOVE
Definition RBAC.h:306
@ RBAC_PERM_COMMAND_GROUP_LEADER
Definition RBAC.h:304
@ RBAC_PERM_COMMAND_GROUP_JOIN
Definition RBAC.h:307
@ RBAC_PERM_COMMAND_GROUP_REVIVE
Definition RBAC.h:636

References HandleGroupDisbandCommand(), HandleGroupJoinCommand(), HandleGroupLeaderCommand(), HandleGroupListCommand(), HandleGroupRemoveCommand(), HandleGroupReviveCommand(), rbac::RBAC_PERM_COMMAND_GROUP_DISBAND, rbac::RBAC_PERM_COMMAND_GROUP_JOIN, rbac::RBAC_PERM_COMMAND_GROUP_LEADER, rbac::RBAC_PERM_COMMAND_GROUP_LIST, rbac::RBAC_PERM_COMMAND_GROUP_REMOVE, and rbac::RBAC_PERM_COMMAND_GROUP_REVIVE.

◆ HandleGroupDisbandCommand()

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

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
135 {
136 if (playerInGroup.empty() || playerName.empty())
137 {
138 return false;
139 }
140
141 Player* playerSource = nullptr;
142 Group* groupSource = nullptr;
143 ObjectGuid guidSource;
144 ObjectGuid guidTarget;
145
146 if (handler->GetPlayerGroupAndGUIDByName(playerInGroup.c_str(), playerSource, groupSource, guidSource, true))
147 {
148 if (groupSource)
149 {
150 Group* groupTarget = nullptr;
151 Player* playerTarget = nullptr;
152
153 if (handler->GetPlayerGroupAndGUIDByName(playerName.c_str(), playerTarget, groupTarget, guidTarget, true))
154 {
155 if (!groupTarget && playerTarget->GetGroup() != groupSource)
156 {
157 if (!groupSource->IsFull())
158 {
159 groupSource->AddMember(playerTarget);
160 groupSource->BroadcastGroupUpdate();
161 handler->PSendSysMessage(LANG_GROUP_PLAYER_JOINED, playerTarget->GetName(), playerSource->GetName());
162 return true;
163 }
164 else
165 {
166 // group is full
168 return true;
169 }
170 }
171 else
172 {
173 // group is full or target player already in a group
174 handler->PSendSysMessage(LANG_GROUP_ALREADY_IN_GROUP, playerTarget->GetName());
175 return true;
176 }
177 }
178 }
179 else
180 {
181 // specified source player is not in a group
182 handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, playerSource->GetName());
183 return true;
184 }
185 }
186
187 return true;
188 }
@ LANG_GROUP_PLAYER_JOINED
Definition Language.h:947
@ LANG_GROUP_NOT_IN_GROUP
Definition Language.h:948
@ LANG_GROUP_FULL
Definition Language.h:949
@ LANG_GROUP_ALREADY_IN_GROUP
Definition Language.h:946
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:219
void BroadcastGroupUpdate(void)
Definition Group.cpp:2212
bool AddMember(Player *player)
Definition Group.cpp:390
bool IsFull() const
Definition Group.cpp:2273
Group * GetGroup()
Definition Player.h:2505
std::string const & GetName() const
Definition Object.h:528

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
53 {
54 if (!target)
55 {
56 target = PlayerIdentifier::FromTargetOrSelf(handler);
57 }
58
59 if (!target)
60 {
61 return false;
62 }
63
64 Player* player = nullptr;
65 Group* group = nullptr;
66 ObjectGuid guid;
67
68 if (handler->GetPlayerGroupAndGUIDByName(target->GetName().c_str(), player, group, guid))
69 {
70 if (group && group->GetLeaderGUID() != guid)
71 {
72 group->ChangeLeader(guid);
73 group->SendUpdate();
74 }
75 }
76
77 return true;
78 }
void SendUpdate()
Definition Group.cpp:1668
void ChangeLeader(ObjectGuid guid)
Definition Group.cpp:684
ObjectGuid GetLeaderGUID() const
Definition Group.cpp:2309

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

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
108 {
109 if (!target)
110 {
111 target = PlayerIdentifier::FromTargetOrSelf(handler);
112 }
113
114 if (!target || !target->IsConnected())
115 {
116 return false;
117 }
118
119 Player* player = nullptr;
120 Group* group = nullptr;
121 ObjectGuid guid;
122
123 if (handler->GetPlayerGroupAndGUIDByName(target->GetName().c_str(), player, group, guid, true))
124 {
125 if (group)
126 {
127 group->RemoveMember(guid);
128 }
129 }
130
131 return true;
132 }
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().

◆ HandleGroupReviveCommand()

static bool group_commandscript::HandleGroupReviveCommand ( ChatHandler handler,
Optional< PlayerIdentifier target 
)
inlinestatic
264 {
265 if (!target)
266 target = PlayerIdentifier::FromTargetOrSelf(handler);
267
268 if (!target)
269 return false;
270
271 Player* targetPlayer = target->GetConnectedPlayer();
272 Group* group = targetPlayer->GetGroup();
273 std::string nameLink = handler->playerLink(target->GetName());
274
275 if (!group)
276 {
277 handler->SendErrorMessage(LANG_NOT_IN_GROUP, nameLink);
278 return false;
279 }
280
281 for (GroupReference* it = group->GetFirstMember(); it != nullptr; it = it->next())
282 {
283 Player* target = it->GetSource();
284 if (target)
285 {
286 target->RemoveAurasDueToSpell(27827); // Spirit of Redemption
287 target->ResurrectPlayer(!AccountMgr::IsPlayerAccount(target->GetSession()->GetSecurity()) ? 1.0f : 0.5f);
288 target->SpawnCorpseBones();
289 target->SaveToDB(false, false);
290 }
291 }
292
293 return true;
294 }
@ LANG_NOT_IN_GROUP
Definition Language.h:153
static bool IsPlayerAccount(uint32 gmlevel)
Definition AccountMgr.cpp:324
std::string playerLink(std::string const &name) const
Definition Chat.h:231
void SendErrorMessage(uint32 entry)
Definition Chat.cpp:224
Definition GroupReference.h:27
GroupReference * GetFirstMember()
Definition Group.h:243
void SaveToDB(bool create, bool logout)
Definition PlayerStorage.cpp:7122
void SpawnCorpseBones(bool triggerSave=true)
Definition Player.cpp:4604
WorldSession * GetSession() const
Definition Player.h:2020
void ResurrectPlayer(float restore_percent, bool applySickness=false)
Definition Player.cpp:4386
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:5171
AccountTypes GetSecurity() const
Definition WorldSession.h:441

References Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), Group::GetFirstMember(), Player::GetGroup(), WorldSession::GetSecurity(), Player::GetSession(), AccountMgr::IsPlayerAccount(), LANG_NOT_IN_GROUP, ChatHandler::playerLink(), Unit::RemoveAurasDueToSpell(), Player::ResurrectPlayer(), Player::SaveToDB(), ChatHandler::SendErrorMessage(), and Player::SpawnCorpseBones().

Referenced by GetCommands().


The documentation for this class was generated from the following file: