TrinityCore
Loading...
Searching...
No Matches
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 "DBCStores.h"
28#include "DatabaseEnv.h"
29#include "DisableMgr.h"
30#include "Language.h"
31#include "ObjectMgr.h"
32#include "OutdoorPvP.h"
33#include "Player.h"
34#include "RBAC.h"
35#include "SpellMgr.h"
36
37using namespace Trinity::ChatCommands;
38
40{
41public:
42 disable_commandscript() : CommandScript("disable_commandscript") { }
43
45 {
46 static ChatCommandTable removeDisableCommandTable =
47 {
56 };
57 static ChatCommandTable addDisableCommandTable =
58 {
67 };
68 static ChatCommandTable disableCommandTable =
69 {
70 { "add", addDisableCommandTable },
71 { "remove", removeDisableCommandTable },
72 };
73 static ChatCommandTable commandTable =
74 {
75 { "disable", disableCommandTable },
76 };
77 return commandTable;
78 }
79
80 static bool HandleAddDisables(ChatHandler* handler, DisableType disableType, uint32 entry, Optional<uint16> flags, Tail disableComment)
81 {
82 char const* disableTypeStr = "";
83
84 switch (disableType)
85 {
87 {
88 if (!sSpellMgr->GetSpellInfo(entry))
89 {
91 handler->SetSentErrorMessage(true);
92 return false;
93 }
94 disableTypeStr = "spell";
95 break;
96 }
98 {
99 if (!sObjectMgr->GetQuestTemplate(entry))
100 {
102 handler->SetSentErrorMessage(true);
103 return false;
104 }
105 disableTypeStr = "quest";
106 break;
107 }
108 case DISABLE_TYPE_MAP:
109 {
110 if (!sMapStore.LookupEntry(entry))
111 {
113 handler->SetSentErrorMessage(true);
114 return false;
115 }
116 disableTypeStr = "map";
117 break;
118 }
120 {
121 if (!sBattlemasterListStore.LookupEntry(entry))
122 {
124 handler->SetSentErrorMessage(true);
125 return false;
126 }
127 disableTypeStr = "battleground";
128 break;
129 }
131 {
132 if (!sAchievementCriteriaStore.LookupEntry(entry))
133 {
135 handler->SetSentErrorMessage(true);
136 return false;
137 }
138 disableTypeStr = "achievement criteria";
139 break;
140 }
142 {
143 if (entry > MAX_OUTDOORPVP_TYPES)
144 {
146 handler->SetSentErrorMessage(true);
147 return false;
148 }
149 disableTypeStr = "outdoorpvp";
150 break;
151 }
153 {
154 if (!sMapStore.LookupEntry(entry))
155 {
157 handler->SetSentErrorMessage(true);
158 return false;
159 }
160 disableTypeStr = "vmap";
161 break;
162 }
164 {
165 if (!sMapStore.LookupEntry(entry))
166 {
168 handler->SetSentErrorMessage(true);
169 return false;
170 }
171 disableTypeStr = "mmap";
172 break;
173 }
175 {
176 if (!sMapStore.LookupEntry(entry))
177 {
179 handler->SetSentErrorMessage(true);
180 return false;
181 }
182 disableTypeStr = "lfg map";
183 break;
184 }
185 default:
186 break;
187 }
188
190 stmt->setUInt32(0, entry);
191 stmt->setUInt8(1, disableType);
192 PreparedQueryResult result = WorldDatabase.Query(stmt);
193 if (result)
194 {
195 handler->PSendSysMessage("This %s (Id: %u) is already disabled.", disableTypeStr, entry);
196 handler->SetSentErrorMessage(true);
197 return false;
198 }
199
200 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_DISABLES);
201 stmt->setUInt32(0, entry);
202 stmt->setUInt8(1, disableType);
203 stmt->setUInt16(2, flags.value_or<uint16>(0));
204 stmt->setStringView(3, disableComment);
205 WorldDatabase.Execute(stmt);
206
207 handler->PSendSysMessage("Add Disabled %s (Id: %u) for reason " STRING_VIEW_FMT, disableTypeStr, entry, STRING_VIEW_FMT_ARG(disableComment));
208 return true;
209 }
210
211 static bool HandleAddDisableSpellCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
212 {
213 return HandleAddDisables(handler, DISABLE_TYPE_SPELL, entry, flags, disableComment);
214 }
215
216 static bool HandleAddDisableQuestCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
217 {
218 return HandleAddDisables(handler, DISABLE_TYPE_QUEST, entry, flags, disableComment);
219 }
220
221 static bool HandleAddDisableMapCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
222 {
223 return HandleAddDisables(handler, DISABLE_TYPE_MAP, entry, flags, disableComment);
224 }
225
227 {
228 return HandleAddDisables(handler, DISABLE_TYPE_BATTLEGROUND, entry, flags, disableComment);
229 }
230
232 {
233 return HandleAddDisables(handler, DISABLE_TYPE_ACHIEVEMENT_CRITERIA, entry, flags, disableComment);
234 }
235
237 {
238 return HandleAddDisables(handler, DISABLE_TYPE_OUTDOORPVP, entry, flags, disableComment);
239 }
240
241 static bool HandleAddDisableVmapCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
242 {
243 return HandleAddDisables(handler, DISABLE_TYPE_VMAP, entry, flags, disableComment);
244 }
245
246 static bool HandleAddDisableMMapCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
247 {
248 return HandleAddDisables(handler, DISABLE_TYPE_MMAP, entry, flags, disableComment);
249 }
250
251 static bool HandleRemoveDisables(ChatHandler* handler, DisableType disableType, uint32 entry)
252 {
253 std::string disableTypeStr = "";
254
255 switch (disableType)
256 {
258 disableTypeStr = "spell";
259 break;
261 disableTypeStr = "quest";
262 break;
263 case DISABLE_TYPE_MAP:
264 disableTypeStr = "map";
265 break;
267 disableTypeStr = "battleground";
268 break;
270 disableTypeStr = "achievement criteria";
271 break;
273 disableTypeStr = "outdoorpvp";
274 break;
276 disableTypeStr = "vmap";
277 break;
279 disableTypeStr = "mmap";
280 break;
282 disableTypeStr = "lfg map";
283 break;
284 default:
285 break;
286 }
287
289 stmt->setUInt32(0, entry);
290 stmt->setUInt8(1, disableType);
291 PreparedQueryResult result = WorldDatabase.Query(stmt);
292 if (!result)
293 {
294 handler->PSendSysMessage("This %s (Id: %u) is not disabled.", disableTypeStr.c_str(), entry);
295 handler->SetSentErrorMessage(true);
296 return false;
297 }
298
299 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_DISABLES);
300 stmt->setUInt32(0, entry);
301 stmt->setUInt8(1, disableType);
302 WorldDatabase.Execute(stmt);
303
304 handler->PSendSysMessage("Remove Disabled %s (Id: %u)", disableTypeStr.c_str(), entry);
305 return true;
306 }
307
309 {
310 return HandleRemoveDisables(handler, DISABLE_TYPE_SPELL, entry);
311 }
312
314 {
315 return HandleRemoveDisables(handler, DISABLE_TYPE_QUEST, entry);
316 }
317
319 {
320 return HandleRemoveDisables(handler, DISABLE_TYPE_MAP, entry);
321 }
322
324 {
325 return HandleRemoveDisables(handler, DISABLE_TYPE_BATTLEGROUND, entry);
326 }
327
332
334 {
335 return HandleRemoveDisables(handler, DISABLE_TYPE_OUTDOORPVP, entry);
336 }
337
339 {
340 return HandleRemoveDisables(handler, DISABLE_TYPE_VMAP, entry);
341 }
342
344 {
345 return HandleRemoveDisables(handler, DISABLE_TYPE_MMAP, entry);
346 }
347};
348
DBCStorage< AchievementCriteriaEntry > sAchievementCriteriaStore(AchievementCriteriafmt)
DBCStorage< BattlemasterListEntry > sBattlemasterListStore(BattlemasterListEntryfmt)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
#define STRING_VIEW_FMT_ARG(str)
Definition Define.h:126
#define STRING_VIEW_FMT
Definition Define.h:125
uint16_t uint16
Definition Define.h:134
uint32_t uint32
Definition Define.h:133
uint16 flags
DisableType
Definition DisableMgr.h:26
@ DISABLE_TYPE_SPELL
Definition DisableMgr.h:27
@ 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_ACHIEVEMENT_CRITERIA
Definition DisableMgr.h:31
@ DISABLE_TYPE_LFG_MAP
Definition DisableMgr.h:35
@ DISABLE_TYPE_OUTDOORPVP
Definition DisableMgr.h:32
@ LANG_COMMAND_NO_ACHIEVEMENT_CRITERIA_FOUND
Definition Language.h:1092
@ LANG_COMMAND_NOMAPFOUND
Definition Language.h:1071
@ LANG_COMMAND_NO_BATTLEGROUND_FOUND
Definition Language.h:1091
@ LANG_COMMAND_NOSPELLFOUND
Definition Language.h:508
@ LANG_COMMAND_QUEST_NOTFOUND
Definition Language.h:535
@ LANG_COMMAND_NO_OUTDOOR_PVP_FORUND
Definition Language.h:1093
#define sObjectMgr
Definition ObjectMgr.h:1721
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:738
@ WORLD_DEL_DISABLES
@ WORLD_INS_DISABLES
@ WORLD_SEL_DISABLES
void SetSentErrorMessage(bool val)
Definition Chat.h:134
void PSendSysMessage(char const *fmt, Args &&... args)
Definition Chat.h:69
void setUInt16(uint8 index, uint16 value)
void setUInt32(uint8 index, uint32 value)
void setStringView(uint8 index, std::string_view value)
void setUInt8(uint8 index, uint8 value)
static bool HandleRemoveDisableOutdoorPvPCommand(ChatHandler *handler, uint32 entry)
static bool HandleRemoveDisableMMapCommand(ChatHandler *handler, uint32 entry)
static bool HandleAddDisableVmapCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
static bool HandleAddDisableOutdoorPvPCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
static bool HandleAddDisableSpellCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
ChatCommandTable GetCommands() const override
static bool HandleRemoveDisableQuestCommand(ChatHandler *handler, uint32 entry)
static bool HandleAddDisableAchievementCriteriaCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
static bool HandleAddDisableMapCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
static bool HandleRemoveDisableBattlegroundCommand(ChatHandler *handler, uint32 entry)
static bool HandleAddDisables(ChatHandler *handler, DisableType disableType, uint32 entry, Optional< uint16 > flags, Tail disableComment)
static bool HandleRemoveDisableSpellCommand(ChatHandler *handler, uint32 entry)
static bool HandleRemoveDisableVmapCommand(ChatHandler *handler, uint32 entry)
static bool HandleRemoveDisableMapCommand(ChatHandler *handler, uint32 entry)
static bool HandleAddDisableBattlegroundCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
static bool HandleRemoveDisableAchievementCriteriaCommand(ChatHandler *handler, uint32 entry)
static bool HandleAddDisableQuestCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
static bool HandleAddDisableMMapCommand(ChatHandler *handler, uint32 entry, Optional< uint16 > flags, Tail disableComment)
static bool HandleRemoveDisables(ChatHandler *handler, DisableType disableType, uint32 entry)
void AddSC_disable_commandscript()
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:50
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_ACHIEVEMENT_CRITERIA
Definition RBAC.h:233
@ RBAC_PERM_COMMAND_DISABLE_ADD_BATTLEGROUND
Definition RBAC.h:225
@ RBAC_PERM_COMMAND_DISABLE_ADD_VMAP
Definition RBAC.h:231
@ RBAC_PERM_COMMAND_DISABLE_ADD_SPELL
Definition RBAC.h:230
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_VMAP
Definition RBAC.h:240
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_MMAP
Definition RBAC.h:236
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_SPELL
Definition RBAC.h:239
@ RBAC_PERM_COMMAND_DISABLE_ADD_OUTDOORPVP
Definition RBAC.h:228
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_MAP
Definition RBAC.h:235
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_BATTLEGROUND
Definition RBAC.h:234
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_QUEST
Definition RBAC.h:238
@ RBAC_PERM_COMMAND_DISABLE_ADD_MMAP
Definition RBAC.h:227
@ RBAC_PERM_COMMAND_DISABLE_ADD_MAP
Definition RBAC.h:226
@ RBAC_PERM_COMMAND_DISABLE_ADD_QUEST
Definition RBAC.h:229
@ RBAC_PERM_COMMAND_DISABLE_REMOVE_OUTDOORPVP
Definition RBAC.h:237
@ RBAC_PERM_COMMAND_DISABLE_ADD_ACHIEVEMENT_CRITERIA
Definition RBAC.h:224