TrinityCore
cs_disable.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18/* ScriptData
19Name: disable_commandscript
20%Complete: 100
21Comment: All disable related commands
22Category: commandscripts
23EndScriptData */
24
25#include "ScriptMgr.h"
26#include "Chat.h"
27#include "ChatCommand.h"
28#include "CriteriaHandler.h"
29#include "DatabaseEnv.h"
30#include "DB2Stores.h"
31#include "DisableMgr.h"
32#include "Language.h"
33#include "ObjectMgr.h"
34#include "OutdoorPvP.h"
35#include "Player.h"
36#include "RBAC.h"
37#include "SpellMgr.h"
38
39using namespace Trinity::ChatCommands;
40
42{
43public:
44 disable_commandscript() : CommandScript("disable_commandscript") { }
45
47 {
48 static ChatCommandTable removeDisableCommandTable =
49 {
58 };
59 static ChatCommandTable addDisableCommandTable =
60 {
69 };
70 static ChatCommandTable disableCommandTable =
71 {
72 { "add", addDisableCommandTable },
73 { "remove", removeDisableCommandTable },
74 };
75 static ChatCommandTable commandTable =
76 {
77 { "disable", disableCommandTable },
78 };
79 return commandTable;
80 }
81
82 static bool HandleAddDisables(ChatHandler* handler, DisableType disableType, uint32 entry, Optional<uint16> flags, Tail disableComment)
83 {
84 char const* disableTypeStr = "";
85
86 switch (disableType)
87 {
89 {
90 if (!sSpellMgr->GetSpellInfo(entry, DIFFICULTY_NONE))
91 {
93 handler->SetSentErrorMessage(true);
94 return false;
95 }
96 disableTypeStr = "spell";
97 break;
98 }
100 {
101 if (!sObjectMgr->GetQuestTemplate(entry))
102 {
104 handler->SetSentErrorMessage(true);
105 return false;
106 }
107 disableTypeStr = "quest";
108 break;
109 }
110 case DISABLE_TYPE_MAP:
111 {
112 if (!sMapStore.LookupEntry(entry))
113 {
115 handler->SetSentErrorMessage(true);
116 return false;
117 }
118 disableTypeStr = "map";
119 break;
120 }
122 {
123 if (!sBattlemasterListStore.LookupEntry(entry))
124 {
126 handler->SetSentErrorMessage(true);
127 return false;
128 }
129 disableTypeStr = "battleground";
130 break;
131 }
133 {
134 if (!sCriteriaMgr->GetCriteria(entry))
135 {
137 handler->SetSentErrorMessage(true);
138 return false;
139 }
140 disableTypeStr = "criteria";
141 break;
142 }
144 {
145 if (entry > MAX_OUTDOORPVP_TYPES)
146 {
148 handler->SetSentErrorMessage(true);
149 return false;
150 }
151 disableTypeStr = "outdoorpvp";
152 break;
153 }
155 {
156 if (!sMapStore.LookupEntry(entry))
157 {
159 handler->SetSentErrorMessage(true);
160 return false;
161 }
162 disableTypeStr = "vmap";
163 break;
164 }
166 {
167 if (!sMapStore.LookupEntry(entry))
168 {
170 handler->SetSentErrorMessage(true);
171 return false;
172 }
173 disableTypeStr = "mmap";
174 break;
175 }
177 {
178 if (!sMapStore.LookupEntry(entry))
179 {
181 handler->SetSentErrorMessage(true);
182 return false;
183 }
184 disableTypeStr = "lfg map";
185 break;
186 }
187 default:
188 break;
189 }
190
192 stmt->setUInt32(0, entry);
193 stmt->setUInt8(1, disableType);
194 PreparedQueryResult result = WorldDatabase.Query(stmt);
195 if (result)
196 {
197 handler->PSendSysMessage("This %s (Id: %u) is already disabled.", disableTypeStr, entry);
198 handler->SetSentErrorMessage(true);
199 return false;
200 }
201
202 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_DISABLES);
203 stmt->setUInt32(0, entry);
204 stmt->setUInt8(1, disableType);
205 stmt->setUInt16(2, flags.value_or<uint16>(0));
206 stmt->setStringView(3, disableComment);
207 WorldDatabase.Execute(stmt);
208
209 handler->PSendSysMessage("Add Disabled %s (Id: %u) for reason " STRING_VIEW_FMT, disableTypeStr, entry, STRING_VIEW_FMT_ARG(disableComment));
210 return true;
211 }
212
213 static bool HandleAddDisableSpellCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
214 {
215 return HandleAddDisables(handler, DISABLE_TYPE_SPELL, entry, flags, disableComment);
216 }
217
218 static bool HandleAddDisableQuestCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
219 {
220 return HandleAddDisables(handler, DISABLE_TYPE_QUEST, entry, flags, disableComment);
221 }
222
223 static bool HandleAddDisableMapCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
224 {
225 return HandleAddDisables(handler, DISABLE_TYPE_MAP, entry, flags, disableComment);
226 }
227
229 {
230 return HandleAddDisables(handler, DISABLE_TYPE_BATTLEGROUND, entry, flags, disableComment);
231 }
232
233 static bool HandleAddDisableCriteriaCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
234 {
235 return HandleAddDisables(handler, DISABLE_TYPE_CRITERIA, entry, flags, disableComment);
236 }
237
239 {
240 return HandleAddDisables(handler, DISABLE_TYPE_OUTDOORPVP, entry, flags, disableComment);
241 }
242
243 static bool HandleAddDisableVmapCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
244 {
245 return HandleAddDisables(handler, DISABLE_TYPE_VMAP, entry, flags, disableComment);
246 }
247
248 static bool HandleAddDisableMMapCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
249 {
250 return HandleAddDisables(handler, DISABLE_TYPE_MMAP, entry, flags, disableComment);
251 }
252
253 static bool HandleRemoveDisables(ChatHandler* handler, DisableType disableType, uint32 entry)
254 {
255 char const* disableTypeStr = "";
256
257 switch (disableType)
258 {
260 disableTypeStr = "spell";
261 break;
263 disableTypeStr = "quest";
264 break;
265 case DISABLE_TYPE_MAP:
266 disableTypeStr = "map";
267 break;
269 disableTypeStr = "battleground";
270 break;
272 disableTypeStr = "criteria";
273 break;
275 disableTypeStr = "outdoorpvp";
276 break;
278 disableTypeStr = "vmap";
279 break;
281 disableTypeStr = "mmap";
282 break;
284 disableTypeStr = "lfg map";
285 break;
286 default:
287 break;
288 }
289
291 stmt->setUInt32(0, entry);
292 stmt->setUInt8(1, disableType);
293 PreparedQueryResult result = WorldDatabase.Query(stmt);
294 if (!result)
295 {
296 handler->PSendSysMessage("This %s (Id: %u) is not disabled.", disableTypeStr, entry);
297 handler->SetSentErrorMessage(true);
298 return false;
299 }
300
301 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_DISABLES);
302 stmt->setUInt32(0, entry);
303 stmt->setUInt8(1, disableType);
304 WorldDatabase.Execute(stmt);
305
306 handler->PSendSysMessage("Remove Disabled %s (Id: %u)", disableTypeStr, entry);
307 return true;
308 }
309
311 {
312 return HandleRemoveDisables(handler, DISABLE_TYPE_SPELL, entry);
313 }
314
316 {
317 return HandleRemoveDisables(handler, DISABLE_TYPE_QUEST, entry);
318 }
319
321 {
322 return HandleRemoveDisables(handler, DISABLE_TYPE_MAP, entry);
323 }
324
326 {
327 return HandleRemoveDisables(handler, DISABLE_TYPE_BATTLEGROUND, entry);
328 }
329
331 {
332 return HandleRemoveDisables(handler, DISABLE_TYPE_CRITERIA, entry);
333 }
334
336 {
337 return HandleRemoveDisables(handler, DISABLE_TYPE_OUTDOORPVP, entry);
338 }
339
341 {
342 return HandleRemoveDisables(handler, DISABLE_TYPE_VMAP, entry);
343 }
344
346 {
347 return HandleRemoveDisables(handler, DISABLE_TYPE_MMAP, entry);
348 }
349};
350
352{
354}
#define sCriteriaMgr
DB2Storage< BattlemasterListEntry > sBattlemasterListStore("BattlemasterList.db2", &BattlemasterListLoadInfo::Instance)
DB2Storage< MapEntry > sMapStore("Map.db2", &MapLoadInfo::Instance)
@ DIFFICULTY_NONE
Definition: DBCEnums.h:874
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition: DatabaseEnv.cpp:20
#define STRING_VIEW_FMT_ARG(str)
Definition: Define.h:135
#define STRING_VIEW_FMT
Definition: Define.h:134
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
uint16 flags
Definition: DisableMgr.cpp:49
DisableType
Definition: DisableMgr.h:26
@ DISABLE_TYPE_SPELL
Definition: DisableMgr.h:27
@ DISABLE_TYPE_CRITERIA
Definition: DisableMgr.h:31
@ DISABLE_TYPE_MMAP
Definition: DisableMgr.h:34
@ DISABLE_TYPE_VMAP
Definition: DisableMgr.h:33
@ DISABLE_TYPE_QUEST
Definition: DisableMgr.h:28
@ DISABLE_TYPE_MAP
Definition: DisableMgr.h:29
@ DISABLE_TYPE_BATTLEGROUND
Definition: DisableMgr.h:30
@ DISABLE_TYPE_LFG_MAP
Definition: DisableMgr.h:35
@ DISABLE_TYPE_OUTDOORPVP
Definition: DisableMgr.h:32
@ LANG_COMMAND_NO_ACHIEVEMENT_CRITERIA_FOUND
Definition: Language.h:1089
@ LANG_COMMAND_NOMAPFOUND
Definition: Language.h:1068
@ LANG_COMMAND_NO_BATTLEGROUND_FOUND
Definition: Language.h:1088
@ LANG_COMMAND_NOSPELLFOUND
Definition: Language.h:505
@ LANG_COMMAND_QUEST_NOTFOUND
Definition: Language.h:532
@ LANG_COMMAND_NO_OUTDOOR_PVP_FORUND
Definition: Language.h:1090
#define sObjectMgr
Definition: ObjectMgr.h:1946
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:25
@ MAX_OUTDOORPVP_TYPES
Definition: OutdoorPvP.h:36
Role Based Access Control related classes definition.
#define sSpellMgr
Definition: SpellMgr.h:849
@ WORLD_DEL_DISABLES
Definition: WorldDatabase.h:81
@ WORLD_INS_DISABLES
Definition: WorldDatabase.h:80
@ WORLD_SEL_DISABLES
Definition: WorldDatabase.h:79
void PSendSysMessage(const char *fmt, Args &&... args)
Definition: Chat.h:57
void SetSentErrorMessage(bool val)
Definition: Chat.h:114
void setStringView(const uint8 index, const std::string_view value)
void setUInt8(const uint8 index, const uint8 value)
void setUInt32(const uint8 index, const uint32 value)
void setUInt16(const uint8 index, const uint16 value)
static bool HandleRemoveDisableOutdoorPvPCommand(ChatHandler *handler, uint32 entry)
Definition: cs_disable.cpp:335
static bool HandleRemoveDisableMMapCommand(ChatHandler *handler, uint32 entry)
Definition: cs_disable.cpp:345
static bool HandleAddDisableVmapCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
Definition: cs_disable.cpp:243
static bool HandleAddDisableOutdoorPvPCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
Definition: cs_disable.cpp:238
static bool HandleAddDisableSpellCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
Definition: cs_disable.cpp:213
ChatCommandTable GetCommands() const override
Definition: cs_disable.cpp:46
static bool HandleRemoveDisableQuestCommand(ChatHandler *handler, uint32 entry)
Definition: cs_disable.cpp:315
static bool HandleAddDisableMapCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
Definition: cs_disable.cpp:223
static bool HandleRemoveDisableBattlegroundCommand(ChatHandler *handler, uint32 entry)
Definition: cs_disable.cpp:325
static bool HandleAddDisableCriteriaCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
Definition: cs_disable.cpp:233
static bool HandleAddDisables(ChatHandler *handler, DisableType disableType, uint32 entry, Optional< uint16 > flags, Tail disableComment)
Definition: cs_disable.cpp:82
static bool HandleRemoveDisableSpellCommand(ChatHandler *handler, uint32 entry)
Definition: cs_disable.cpp:310
static bool HandleRemoveDisableVmapCommand(ChatHandler *handler, uint32 entry)
Definition: cs_disable.cpp:340
static bool HandleRemoveDisableMapCommand(ChatHandler *handler, uint32 entry)
Definition: cs_disable.cpp:320
static bool HandleAddDisableBattlegroundCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
Definition: cs_disable.cpp:228
static bool HandleRemoveDisableCriteriaCommand(ChatHandler *handler, uint32 entry)
Definition: cs_disable.cpp:330
static bool HandleAddDisableQuestCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
Definition: cs_disable.cpp:218
static bool HandleAddDisableMMapCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
Definition: cs_disable.cpp:248
static bool HandleRemoveDisables(ChatHandler *handler, DisableType disableType, uint32 entry)
Definition: cs_disable.cpp:253
void AddSC_disable_commandscript()
Definition: cs_disable.cpp:351
std::vector< ChatCommandBuilder > ChatCommandTable
Definition: ChatCommand.h:49
@ RBAC_PERM_COMMAND_DISABLE_ADD_BATTLEGROUND
Definition: RBAC.h:223
@ RBAC_PERM_COMMAND_DISABLE_ADD_VMAP
Definition: RBAC.h:229
@ RBAC_PERM_COMMAND_DISABLE_ADD_CRITERIA
Definition: RBAC.h:222
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_CRITERIA
Definition: RBAC.h:231
@ RBAC_PERM_COMMAND_DISABLE_ADD_SPELL
Definition: RBAC.h:228
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_VMAP
Definition: RBAC.h:238
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_MMAP
Definition: RBAC.h:234
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_SPELL
Definition: RBAC.h:237
@ RBAC_PERM_COMMAND_DISABLE_ADD_OUTDOORPVP
Definition: RBAC.h:226
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_MAP
Definition: RBAC.h:233
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_BATTLEGROUND
Definition: RBAC.h:232
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_QUEST
Definition: RBAC.h:236
@ RBAC_PERM_COMMAND_DISABLE_ADD_MMAP
Definition: RBAC.h:225
@ RBAC_PERM_COMMAND_DISABLE_ADD_MAP
Definition: RBAC.h:224
@ RBAC_PERM_COMMAND_DISABLE_ADD_QUEST
Definition: RBAC.h:227
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_OUTDOORPVP
Definition: RBAC.h:235