Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
cs_guild.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6/* ScriptData
7Name: guild_commandscript
8%Complete: 100
9Comment: All guild related commands
10Category: commandscripts
11EndScriptData */
12
13#include "AchievementMgr.h"
14#include "Chat.h"
15#include "Guild.h"
16#include "GuildMgr.h"
17#include "Language.h"
18#include "ObjectAccessor.h"
19#include "ScriptMgr.h"
20
22{
23public:
24 guild_commandscript() : CommandScript("guild_commandscript") { }
25
26 std::vector<ChatCommand> GetCommands() const
27 {
28 static std::vector<ChatCommand> guildCommandTable =
29 {
36 };
37 static std::vector<ChatCommand> commandTable =
38 {
39 { "guild", rbac::RBAC_PERM_COMMAND_GUILD, true, NULL, "", guildCommandTable },
40 };
41 return commandTable;
42 }
43
52 static bool HandleGuildCreateCommand(ChatHandler* handler, char const* args)
53 {
54 if (!*args)
55 return false;
56
57 // if not guild name only (in "") then player name
58 Player* target;
59 if (!handler->extractPlayerTarget(*args != '"' ? (char*)args : NULL, &target))
60 return false;
61
62 char* tailStr = *args != '"' ? strtok(NULL, "") : (char*)args;
63 if (!tailStr)
64 return false;
65
66 char* guildStr = handler->extractQuotedArg(tailStr);
67 if (!guildStr)
68 return false;
69
70 std::string guildName = guildStr;
71
72 if (target->GetGuildId())
73 {
75 return true;
76 }
77
78 Guild* guild = new Guild;
79 if (!guild->Create(target, guildName))
80 {
81 delete guild;
83 handler->SetSentErrorMessage(true);
84 return false;
85 }
86
87 sGuildMgr->AddGuild(guild);
88
89 return true;
90 }
91
92 static bool HandleGuildDeleteCommand(ChatHandler* handler, char const* args)
93 {
94 if (!*args)
95 return false;
96
97 char* guildStr = handler->extractQuotedArg((char*)args);
98 if (!guildStr)
99 return false;
100
101 std::string guildName = guildStr;
102
103 Guild* targetGuild = sGuildMgr->GetGuildByName(guildName);
104 if (!targetGuild)
105 return false;
106
107 targetGuild->Disband();
108 delete targetGuild;
109
110 return true;
111 }
112
113 static bool HandleGuildInviteCommand(ChatHandler* handler, char const* args)
114 {
115 if (!*args)
116 return false;
117
118 // if not guild name only (in "") then player name
119 uint64 targetGuid;
120 if (!handler->extractPlayerTarget(*args != '"' ? (char*)args : NULL, NULL, &targetGuid))
121 return false;
122
123 char* tailStr = *args != '"' ? strtok(NULL, "") : (char*)args;
124 if (!tailStr)
125 return false;
126
127 char* guildStr = handler->extractQuotedArg(tailStr);
128 if (!guildStr)
129 return false;
130
131 std::string guildName = guildStr;
132 Guild* targetGuild = sGuildMgr->GetGuildByName(guildName);
133 if (!targetGuild)
134 return false;
135
136 // player's guild membership checked in AddMember before add
137 return targetGuild->AddMember(targetGuid);
138 }
139
140 static bool HandleGuildUninviteCommand(ChatHandler* handler, char const* args)
141 {
142 Player* target;
143 uint64 targetGuid;
144 if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid))
145 return false;
146
147 uint32 guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid);
148 if (!guildId)
149 return false;
150
151 Guild* targetGuild = sGuildMgr->GetGuildById(guildId);
152 if (!targetGuild)
153 return false;
154
155 targetGuild->DeleteMember(targetGuid, false, true, true);
156 return true;
157 }
158
159 static bool HandleGuildRankCommand(ChatHandler* handler, char const* args)
160 {
161 char* nameStr;
162 char* rankStr;
163 handler->extractOptFirstArg((char*)args, &nameStr, &rankStr);
164 if (!rankStr)
165 return false;
166
167 Player* target;
168 uint64 targetGuid;
169 std::string target_name;
170 if (!handler->extractPlayerTarget(nameStr, &target, &targetGuid, &target_name))
171 return false;
172
173 uint32 guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid);
174 if (!guildId)
175 return false;
176
177 Guild* targetGuild = sGuildMgr->GetGuildById(guildId);
178 if (!targetGuild)
179 return false;
180
181 uint8 newRank = uint8(atoi(rankStr));
182 return targetGuild->ChangeMemberRank(targetGuid, newRank);
183 }
184
185 static bool HandleGuildRenameCommand(ChatHandler* handler, char const* _args)
186 {
187 if (!*_args)
188 return false;
189
190 char* args = (char*)_args;
191
192 char const* oldGuildStr = handler->extractQuotedArg(args);
193 if (!oldGuildStr)
194 {
196 handler->SetSentErrorMessage(true);
197 return false;
198 }
199
200 char const* newGuildStr = handler->extractQuotedArg(strtok(NULL, ""));
201 if (!newGuildStr)
202 {
204 handler->SetSentErrorMessage(true);
205 return false;
206 }
207
208 Guild* guild = sGuildMgr->GetGuildByName(oldGuildStr);
209 if (!guild)
210 {
211 handler->PSendSysMessage(LANG_COMMAND_COULDNOTFIND, oldGuildStr);
212 handler->SetSentErrorMessage(true);
213 return false;
214 }
215
216 if (sGuildMgr->GetGuildByName(newGuildStr))
217 {
219 handler->SetSentErrorMessage(true);
220 return false;
221 }
222
223 if (!guild->SetName(newGuildStr))
224 {
226 handler->SetSentErrorMessage(true);
227 return false;
228 }
229
230 handler->PSendSysMessage(LANG_GUILD_RENAME_DONE, oldGuildStr, newGuildStr);
231 return true;
232 }
233};
234
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
#define sGuildMgr
Definition GuildMgr.h:53
@ LANG_GUILD_NOT_CREATED
Definition Language.h:489
@ LANG_PLAYER_IN_GUILD
Definition Language.h:488
@ LANG_GUILD_RENAME_DONE
Definition Language.h:97
@ LANG_COMMAND_COULDNOTFIND
Definition Language.h:414
@ LANG_GUILD_RENAME_ALREADY_EXISTS
Definition Language.h:96
@ LANG_BAD_VALUE
Definition Language.h:117
@ LANG_INSERT_GUILD_NAME
Definition Language.h:486
void extractOptFirstArg(char *args, char **arg1, char **arg2)
Definition Chat.cpp:1237
char * extractQuotedArg(char *args)
Definition Chat.cpp:1255
void PSendSysMessage(const char *format,...) ATTR_PRINTF(2
Definition Chat.cpp:221
void SetSentErrorMessage(bool val)
Definition Chat.h:114
bool extractPlayerTarget(char *args, Player **player, uint64 *player_guid=NULL, std::string *player_name=NULL)
Definition Chat.cpp:1184
virtual void SendSysMessage(const char *str)
Definition Chat.cpp:153
CommandScript(const char *name)
Definition Guild.h:324
bool Create(Player *pLeader, std::string const &name)
Definition Guild.cpp:1178
bool ChangeMemberRank(uint64 guid, uint8 newRank)
Definition Guild.cpp:2973
bool AddMember(uint64 guid, uint8 rankId=GUILD_RANK_NONE)
Definition Guild.cpp:2828
void Disband()
Definition Guild.cpp:1239
bool SetName(std::string const &name)
Definition Guild.cpp:1341
void DeleteMember(uint64 guid, bool isDisbanding=false, bool isKicked=false, bool canDeleteGuild=false)
Definition Guild.cpp:2908
static uint32 GetGuildIdFromDB(uint64 guid)
Definition Player.cpp:8020
uint32 GetGuildId() const
Definition Player.h:2291
static bool HandleGuildCreateCommand(ChatHandler *handler, char const *args)
GM command level 3 - Create a guild.
Definition cs_guild.cpp:52
static bool HandleGuildDeleteCommand(ChatHandler *handler, char const *args)
Definition cs_guild.cpp:92
static bool HandleGuildUninviteCommand(ChatHandler *handler, char const *args)
Definition cs_guild.cpp:140
static bool HandleGuildRenameCommand(ChatHandler *handler, char const *_args)
Definition cs_guild.cpp:185
static bool HandleGuildRankCommand(ChatHandler *handler, char const *args)
Definition cs_guild.cpp:159
std::vector< ChatCommand > GetCommands() const
Definition cs_guild.cpp:26
static bool HandleGuildInviteCommand(ChatHandler *handler, char const *args)
Definition cs_guild.cpp:113
void AddSC_guild_commandscript()
Definition cs_guild.cpp:235
@ RBAC_PERM_COMMAND_GUILD_UNINVITE
Definition RBAC.h:293
@ RBAC_PERM_COMMAND_GUILD_INVITE
Definition RBAC.h:292
@ RBAC_PERM_COMMAND_GUILD
Definition RBAC.h:289
@ RBAC_PERM_COMMAND_GUILD_RANK
Definition RBAC.h:294
@ RBAC_PERM_COMMAND_GUILD_RENAME
Definition RBAC.h:295
@ RBAC_PERM_COMMAND_GUILD_CREATE
Definition RBAC.h:290
@ RBAC_PERM_COMMAND_GUILD_DELETE
Definition RBAC.h:291