root/trunk/src/game/Chat.cpp @ 209

Revision 209, 68.8 kB (checked in by yumileroy, 17 years ago)

[svn] Fix some typos.

Original author: megamage
Date: 2008-11-10 17:19:35-06:00

Line 
1/*
2* Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/>
3*
4* Copyright (C) 2008 Trinity <http://www.trinitycore.org/>
5*
6* This program is free software; you can redistribute it and/or modify
7* it under the terms of the GNU General Public License as published by
8* the Free Software Foundation; either version 2 of the License, or
9* (at your option) any later version.
10*
11* This program is distributed in the hope that it will be useful,
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14* GNU General Public License for more details.
15*
16* You should have received a copy of the GNU General Public License
17* along with this program; if not, write to the Free Software
18* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19*/
20
21#include "Common.h"
22#include "Language.h"
23#include "Database/DatabaseEnv.h"
24#include "WorldPacket.h"
25#include "WorldSession.h"
26#include "Opcodes.h"
27#include "Log.h"
28#include "World.h"
29#include "ObjectMgr.h"
30#include "Player.h"
31#include "UpdateMask.h"
32#include "Chat.h"
33#include "MapManager.h"
34#include "GridNotifiersImpl.h"
35#include "CellImpl.h"
36
37bool ChatHandler::load_command_table = true;
38
39ChatCommand * ChatHandler::getCommandTable()
40{
41    static ChatCommand accountSetCommandTable[] =
42    {
43        { "addon",          SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleAccountSetAddonCommand,     "", NULL },
44        { "gmlevel",        SEC_CONSOLE,        true,  &ChatHandler::HandleAccountSetGmLevelCommand,   "", NULL },
45        { "password",       SEC_CONSOLE,        true,  &ChatHandler::HandleAccountSetPasswordCommand,  "", NULL },
46        { NULL,             0,                  false, NULL,                                           "", NULL }
47    };
48
49    static ChatCommand accountCommandTable[] =
50    {
51        { "create",         SEC_CONSOLE,        true,  &ChatHandler::HandleAccountCreateCommand,       "", NULL },
52        { "delete",         SEC_CONSOLE,        true,  &ChatHandler::HandleAccountDeleteCommand,       "", NULL },
53        { "onlinelist",     SEC_CONSOLE,        true,  &ChatHandler::HandleAccountOnlineListCommand,   "", NULL },
54        { "set",            SEC_ADMINISTRATOR,  true,  NULL,                                           "", accountSetCommandTable },
55        { "",               SEC_PLAYER,         false, &ChatHandler::HandleAccountCommand,             "", NULL },
56        { NULL,             0,                  false, NULL,                                           "", NULL }
57    };
58
59    static ChatCommand serverSetCommandTable[] =
60    {
61        { "loglevel",       SEC_CONSOLE,        true,  &ChatHandler::HandleServerSetLogLevelCommand,   "", NULL },
62        { "motd",           SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleServerSetMotdCommand,       "", NULL },
63        { NULL,             0,                  false, NULL,                                           "", NULL }
64    };
65
66    static ChatCommand serverCommandTable[] =
67    {
68        { "corpses",        SEC_GAMEMASTER,     true,  &ChatHandler::HandleServerCorpsesCommand,       "", NULL },
69        { "exit",           SEC_CONSOLE,        true,  &ChatHandler::HandleServerExitCommand,          "", NULL },
70        { "idlerestart",    SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleIdleRestartCommand,         "", NULL },
71        { "idleshutdown",   SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleIdleShutDownCommand,        "", NULL },
72        { "info",           SEC_PLAYER,         true,  &ChatHandler::HandleServerInfoCommand,          "", NULL },
73        { "motd",           SEC_PLAYER,         true,  &ChatHandler::HandleServerMotdCommand,          "", NULL },
74        { "restart",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleRestartCommand,             "", NULL },
75        { "shutdown",       SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleShutDownCommand,            "", NULL },
76        { "set",            SEC_ADMINISTRATOR,  true,  NULL,                                           "", serverSetCommandTable },
77        { NULL,             0,                  false, NULL,                                           "", NULL }
78    };
79
80    static ChatCommand modifyCommandTable[] =
81    {
82        { "hp",             SEC_MODERATOR,      false, &ChatHandler::HandleModifyHPCommand,            "", NULL },
83        { "mana",           SEC_MODERATOR,      false, &ChatHandler::HandleModifyManaCommand,          "", NULL },
84        { "rage",           SEC_MODERATOR,      false, &ChatHandler::HandleModifyRageCommand,          "", NULL },
85        { "energy",         SEC_MODERATOR,      false, &ChatHandler::HandleModifyEnergyCommand,        "", NULL },
86        { "money",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyMoneyCommand,         "", NULL },
87        { "speed",          SEC_MODERATOR,      false, &ChatHandler::HandleModifySpeedCommand,         "", NULL },
88        { "swim",           SEC_MODERATOR,      false, &ChatHandler::HandleModifySwimCommand,          "", NULL },
89        { "scale",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyScaleCommand,         "", NULL },
90        { "bit",            SEC_MODERATOR,      false, &ChatHandler::HandleModifyBitCommand,           "", NULL },
91        { "bwalk",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyBWalkCommand,         "", NULL },
92        { "fly",            SEC_MODERATOR,      false, &ChatHandler::HandleModifyFlyCommand,           "", NULL },
93        { "aspeed",         SEC_MODERATOR,      false, &ChatHandler::HandleModifyASpeedCommand,        "", NULL },
94        { "faction",        SEC_MODERATOR,      false, &ChatHandler::HandleModifyFactionCommand,       "", NULL },
95        { "spell",          SEC_MODERATOR,      false, &ChatHandler::HandleModifySpellCommand,         "", NULL },
96        { "tp",             SEC_MODERATOR,      false, &ChatHandler::HandleModifyTalentCommand,        "", NULL },
97        { "titles",         SEC_MODERATOR,      false, &ChatHandler::HandleModifyKnownTitlesCommand,   "", NULL },
98        { "mount",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyMountCommand,         "", NULL },
99        { "honor",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyHonorCommand,         "", NULL },
100        { "rep",            SEC_MODERATOR,      false, &ChatHandler::HandleModifyRepCommand,           "", NULL },
101        { "arena",          SEC_MODERATOR,      false, &ChatHandler::HandleModifyArenaCommand,         "", NULL },
102        { "drunk",          SEC_MODERATOR,      false, &ChatHandler::HandleDrunkCommand,               "", NULL },
103        { "standstate",     SEC_GAMEMASTER,     false, &ChatHandler::HandleStandStateCommand,          "", NULL },
104        { "morph",          SEC_GAMEMASTER,     false, &ChatHandler::HandleMorphCommand,               "", NULL },
105        { "gender",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleModifyGenderCommand,        "", NULL },
106        { NULL,             0,                  false, NULL,                                           "", NULL }
107    };
108
109    static ChatCommand wpCommandTable[] =
110    {
111        { "show",           SEC_GAMEMASTER,     false, &ChatHandler::HandleWpShowCommand,              "", NULL },
112        { "add",            SEC_GAMEMASTER,     false, &ChatHandler::HandleWpAddCommand,               "", NULL },
113        { "modify",         SEC_GAMEMASTER,     false, &ChatHandler::HandleWpModifyCommand,            "", NULL },
114        { "export",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleWpExportCommand,            "", NULL },
115        { "import",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleWpImportCommand,            "", NULL },
116        { NULL,             0,                  false, NULL,                                           "", NULL }
117    };
118
119    static ChatCommand banCommandTable[] =
120    {
121        { "account",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanAccountCommand,          "", NULL },
122        { "character",      SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanCharacterCommand,        "", NULL },
123        { "ip",             SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanIPCommand,               "", NULL },
124        { NULL,             0,                  false, NULL,                                           "", NULL }
125    };
126
127    static ChatCommand baninfoCommandTable[] =
128    {
129        { "account",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanInfoAccountCommand,      "", NULL },
130        { "character",      SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanInfoCharacterCommand,    "", NULL },
131        { "ip",             SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanInfoIPCommand,           "", NULL },
132        { NULL,             0,                  false, NULL,                                           "", NULL }
133    };
134
135    static ChatCommand banlistCommandTable[] =
136    {
137        { "account",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanListAccountCommand,      "", NULL },
138        { "character",      SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanListCharacterCommand,    "", NULL },
139        { "ip",             SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleBanListIPCommand,           "", NULL },
140        { NULL,             0,                  false, NULL,                                           "", NULL }
141    };
142
143    static ChatCommand unbanCommandTable[] =
144    {
145        { "account",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleUnBanAccountCommand,      "", NULL },
146        { "character",      SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleUnBanCharacterCommand,    "", NULL },
147        { "ip",             SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleUnBanIPCommand,           "", NULL },
148        { NULL,             0,                  false, NULL,                                           "", NULL }
149    };
150
151    static ChatCommand debugCommandTable[] =
152    {
153        { "inarc",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleDebugInArcCommand,          "", NULL },
154        { "spellfail",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleDebugSpellFailCommand,      "", NULL },
155        { "setpoi",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSetPoiCommand,              "", NULL },
156        { "qpartymsg",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSendQuestPartyMsgCommand,   "", NULL },
157        { "qinvalidmsg",    SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSendQuestInvalidMsgCommand, "", NULL },
158        { "equiperr",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleEquipErrorCommand,          "", NULL },
159        { "sellerr",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSellErrorCommand,           "", NULL },
160        { "buyerr",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleBuyErrorCommand,            "", NULL },
161        { "sendopcode",     SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSendOpcodeCommand,          "", NULL },
162        { "uws",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleUpdateWorldStateCommand,    "", NULL },
163        { "ps",             SEC_ADMINISTRATOR,  false, &ChatHandler::HandlePlaySound2Command,          "", NULL },
164        { "scn",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSendChannelNotifyCommand,   "", NULL },
165        { "scm",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSendChatMsgCommand,         "", NULL },
166        { "getitemstate",   SEC_ADMINISTRATOR,  false, &ChatHandler::HandleGetItemState,               "", NULL },
167        { "playsound",      SEC_MODERATOR,      false, &ChatHandler::HandlePlaySoundCommand,           "", NULL },
168        { "update",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleUpdate,                     "", NULL },
169        { "setvalue",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSetValue,                   "", NULL },
170        { "getvalue",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleGetValue,                   "", NULL },
171        { "Mod32Value",     SEC_ADMINISTRATOR,  false, &ChatHandler::HandleMod32Value,                 "", NULL },
172        { "anim",           SEC_GAMEMASTER,     false, &ChatHandler::HandleAnimCommand,                "", NULL },
173        { "lootrecipient",  SEC_GAMEMASTER,     false, &ChatHandler::HandleGetLootRecipient,           "", NULL },
174        { NULL,             0,                  false, NULL,                                           "", NULL }
175    };
176
177    static ChatCommand eventCommandTable[] =
178    {
179        { "activelist",     SEC_GAMEMASTER,     true,  &ChatHandler::HandleEventActiveListCommand,     "", NULL },
180        { "start",          SEC_GAMEMASTER,     true,  &ChatHandler::HandleEventStartCommand,          "", NULL },
181        { "stop",           SEC_GAMEMASTER,     true,  &ChatHandler::HandleEventStopCommand,           "", NULL },
182        { "",               SEC_GAMEMASTER,     true, &ChatHandler::HandleEventInfoCommand,            "", NULL },
183        { NULL,             0,                  false, NULL,                                           "", NULL }
184    };
185
186    static ChatCommand learnCommandTable[] =
187    {
188        { "all",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLearnAllCommand,            "", NULL },
189        { "all_gm",         SEC_GAMEMASTER,     false, &ChatHandler::HandleLearnAllGMCommand,          "", NULL },
190        { "all_crafts",     SEC_GAMEMASTER,     false, &ChatHandler::HandleLearnAllCraftsCommand,      "", NULL },
191        { "all_default",    SEC_MODERATOR,      false, &ChatHandler::HandleLearnAllDefaultCommand,     "", NULL },
192        { "all_lang",       SEC_MODERATOR,      false, &ChatHandler::HandleLearnAllLangCommand,        "", NULL },
193        { "all_myclass",    SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLearnAllMyClassCommand,     "", NULL },
194        { "all_myspells",   SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLearnAllMySpellsCommand,    "", NULL },
195        { "all_mytalents",  SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLearnAllMyTalentsCommand,   "", NULL },
196        { "all_recipes",    SEC_GAMEMASTER,     false, &ChatHandler::HandleLearnAllRecipesCommand,     "", NULL },
197        { "",               SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLearnCommand,               "", NULL },
198        { NULL,             0,                  false, NULL,                                           "", NULL }
199    };
200
201    static ChatCommand reloadCommandTable[] =
202    {
203        { "all",            SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleReloadAllCommand,           "", NULL },
204        { "all_loot",       SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleReloadAllLootCommand,       "", NULL },
205        { "all_npc",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleReloadAllNpcCommand,        "", NULL },
206        { "all_quest",      SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleReloadAllQuestCommand,      "", NULL },
207        { "all_scripts",    SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleReloadAllScriptsCommand,    "", NULL },
208        { "all_spell",      SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleReloadAllSpellCommand,      "", NULL },
209        { "all_item",       SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleReloadAllItemCommand,       "", NULL },
210        { "all_locales",    SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleReloadAllLocalesCommand,    "", NULL },
211
212        { "config",         SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleReloadConfigCommand,        "", NULL },
213
214        { "areatrigger_tavern", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAreaTriggerTavernCommand, "", NULL },
215        { "areatrigger_teleport", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAreaTriggerTeleportCommand, "", NULL },
216        { "areatrigger_involvedrelation",SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestAreaTriggersCommand, "", NULL },
217        { "event_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadEventScriptsCommand, "", NULL },
218        { "command", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCommandCommand, "", NULL },
219        { "creature_involvedrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCreatureQuestInvRelationsCommand,"",NULL },
220        { "creature_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesCreatureCommand, "", NULL },
221        { "creature_questrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCreatureQuestRelationsCommand, "", NULL },
222        { "disenchant_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesDisenchantCommand, "", NULL },
223        { "fishing_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesFishingCommand, "", NULL },
224        { "game_graveyard_zone", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGameGraveyardZoneCommand, "", NULL },
225        { "game_tele", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGameTeleCommand, "", NULL },
226        { "gameobject_involvedrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGOQuestInvRelationsCommand, "", NULL },
227        { "gameobject_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesGameobjectCommand, "", NULL },
228        { "gameobject_questrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGOQuestRelationsCommand, "", NULL },
229        { "gameobject_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGameObjectScriptsCommand, "", NULL },
230        { "item_enchantment_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadItemEnchantementsCommand, "", NULL },
231        { "item_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesItemCommand, "", NULL },
232        { "trinity_string", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadTrinityStringCommand, "", NULL },
233        { "npc_gossip", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadNpcGossipCommand, "", NULL },
234        { "npc_option", SEC_ADMINISTRATOR, true,  &ChatHandler::HandleReloadNpcOptionCommand,   "", NULL },
235        { "npc_trainer", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadNpcTrainerCommand, "", NULL },
236        { "npc_vendor", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadNpcVendorCommand, "", NULL },
237        { "page_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadPageTextsCommand, "", NULL },
238        { "pickpocketing_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesPickpocketingCommand,"",NULL},
239        { "prospecting_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesProspectingCommand,"", NULL },
240        { "quest_mail_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesQuestMailCommand, "", NULL },
241        { "quest_end_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestEndScriptsCommand, "", NULL },
242        { "quest_start_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestStartScriptsCommand, "", NULL },
243        { "quest_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestTemplateCommand, "", NULL },
244        { "reference_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesReferenceCommand, "", NULL },
245        { "reserved_name", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadReservedNameCommand, "", NULL },
246        { "skill_discovery_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSkillDiscoveryTemplateCommand, "", NULL },
247        { "skill_extra_item_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSkillExtraItemTemplateCommand, "", NULL },
248        { "skill_fishing_base_level", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSkillFishingBaseLevelCommand, "", NULL },
249        { "skinning_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesSkinningCommand, "", NULL },
250        { "spell_affect", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellAffectCommand, "", NULL },
251        { "spell_chain", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellChainCommand, "", NULL },
252        { "spell_elixir", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellElixirCommand, "", NULL },
253        { "spell_learn_spell", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellLearnSpellCommand, "", NULL },
254        { "spell_pet_auras", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellPetAurasCommand, "", NULL },
255        { "spell_proc_event", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellProcEventCommand, "", NULL },
256        { "spell_script_target", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellScriptTargetCommand, "", NULL },
257        { "spell_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellScriptsCommand, "", NULL },
258        { "spell_target_position", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellTargetPositionCommand, "", NULL },
259        { "spell_threats", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellThreatsCommand, "", NULL },
260        { "locales_creature", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesCreatureCommand, "", NULL },
261        { "locales_gameobject", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesGameobjectCommand, "", NULL },
262        { "locales_item", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesItemCommand, "", NULL },
263        { "locales_npc_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesNpcTextCommand, "", NULL },
264        { "locales_page_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesPageTextCommand, "", NULL },
265        { "locales_quest", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesQuestCommand, "", NULL },
266
267        { "",                            SEC_ADMINISTRATOR, true,  &ChatHandler::HandleReloadCommand,                        "", NULL },
268        { NULL,                          0,                 false, NULL,                                                     "", NULL }
269    };
270
271    static ChatCommand honorCommandTable[] =
272    {
273        { "add",            SEC_GAMEMASTER,     false, &ChatHandler::HandleAddHonorCommand,            "", NULL },
274        { "addkill",        SEC_GAMEMASTER,     false, &ChatHandler::HandleHonorAddKillCommand,        "", NULL },
275        { "update",         SEC_GAMEMASTER,     false, &ChatHandler::HandleUpdateHonorFieldsCommand,   "", NULL },
276        { NULL,             0,                  false, NULL,                                           "", NULL }
277    };
278
279    static ChatCommand guildCommandTable[] =
280    {
281        { "create",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleGuildCreateCommand,         "", NULL },
282        { "delete",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleGuildDeleteCommand,         "", NULL },
283        { "invite",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleGuildInviteCommand,         "", NULL },
284        { "uninvite",       SEC_GAMEMASTER,     true,  &ChatHandler::HandleGuildUninviteCommand,       "", NULL },
285        { "rank",           SEC_GAMEMASTER,     true,  &ChatHandler::HandleGuildRankCommand,           "", NULL },
286        { NULL,             0,                  false, NULL,                                           "", NULL }
287    };
288
289    static ChatCommand petCommandTable[] =
290    {
291        { "create",         SEC_GAMEMASTER,     false, &ChatHandler::HandleCreatePetCommand,           "", NULL },
292        { "learn",          SEC_GAMEMASTER,     false, &ChatHandler::HandlePetLearnCommand,            "", NULL },
293        { "unlearn",        SEC_GAMEMASTER,     false, &ChatHandler::HandlePetUnlearnCommand,          "", NULL },
294        { "tp",             SEC_GAMEMASTER,     false, &ChatHandler::HandlePetTpCommand,               "", NULL },
295        { NULL,             0,                  false, NULL,                                           "", NULL }
296    };
297
298
299    static ChatCommand groupCommandTable[] =
300    {
301        { "leader",         SEC_ADMINISTRATOR,     false,  &ChatHandler::HandleGroupLeaderCommand,         "", NULL },
302        { "disband",        SEC_ADMINISTRATOR,     false,  &ChatHandler::HandleGroupDisbandCommand,        "", NULL },
303        { "remove",         SEC_ADMINISTRATOR,     false,  &ChatHandler::HandleGroupRemoveCommand,         "", NULL },
304        { NULL,             0,                                     false, NULL,                                           "", NULL }
305    };
306
307    static ChatCommand lookupPlayerCommandTable[] =
308    {
309        { "ip",             SEC_GAMEMASTER,     true,  &ChatHandler::HandleLookupPlayerIpCommand,       "", NULL },
310        { "account",        SEC_GAMEMASTER,     true,  &ChatHandler::HandleLookupPlayerAccountCommand,  "", NULL },
311        { "email",          SEC_GAMEMASTER,     true,  &ChatHandler::HandleLookupPlayerEmailCommand,    "", NULL },
312        { NULL,             0,                  false, NULL,                                            "", NULL }
313    };
314
315    static ChatCommand lookupCommandTable[] =
316    {
317        { "area",           SEC_MODERATOR,      true,  &ChatHandler::HandleLookupAreaCommand,          "", NULL },
318        { "creature",       SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupCreatureCommand,      "", NULL },
319        { "event",          SEC_GAMEMASTER,     true,  &ChatHandler::HandleLookupEventCommand,         "", NULL },
320        { "faction",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupFactionCommand,       "", NULL },
321        { "item",           SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupItemCommand,          "", NULL },
322        { "itemset",        SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupItemSetCommand,       "", NULL },
323        { "object",         SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupObjectCommand,        "", NULL },
324        { "quest",          SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupQuestCommand,         "", NULL },
325        { "player",         SEC_GAMEMASTER,     true,  NULL,                                           "", lookupPlayerCommandTable },
326        { "skill",          SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupSkillCommand,         "", NULL },
327        { "spell",          SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLookupSpellCommand,         "", NULL },
328        { "tele",           SEC_MODERATOR,      true,  &ChatHandler::HandleLookupTeleCommand,          "", NULL },
329        { NULL,             0,                  false, NULL,                                           "", NULL }
330    };
331
332    static ChatCommand resetCommandTable[] =
333    {
334        { "honor",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetHonorCommand,          "", NULL },
335        { "level",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetLevelCommand,          "", NULL },
336        { "spells",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetSpellsCommand,         "", NULL },
337        { "stats",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetStatsCommand,          "", NULL },
338        { "talents",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetTalentsCommand,        "", NULL },
339        { "all",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleResetAllCommand,            "", NULL },
340        { NULL,             0,                  false, NULL,                                           "", NULL }
341    };
342
343    static ChatCommand castCommandTable[] =
344    {
345        { "back",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCastBackCommand,            "", NULL },
346        { "dist",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCastDistCommand,            "", NULL },
347        { "self",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCastSelfCommand,            "", NULL },
348        { "target",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCastTargetCommand,          "", NULL },
349        { "",               SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCastCommand,                "", NULL },
350        { NULL,             0,                  false, NULL,                                           "", NULL }
351    };
352
353    static ChatCommand pdumpCommandTable[] =
354    {
355        { "load",           SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLoadPDumpCommand,           "", NULL },
356        { "write",          SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleWritePDumpCommand,          "", NULL },
357        { NULL,             0,                  false, NULL,                                           "", NULL }
358    };
359
360    static ChatCommand listCommandTable[] =
361    {
362        { "creature",       SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleListCreatureCommand,        "", NULL },
363        { "item",           SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleListItemCommand,            "", NULL },
364        { "object",         SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleListObjectCommand,          "", NULL },
365        { "auras",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleListAurasCommand,           "", NULL },
366        { NULL,             0,                  false, NULL,                                           "", NULL }
367    };
368
369    static ChatCommand teleCommandTable[] =
370    {
371        { "add",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAddTeleCommand,             "", NULL },
372        { "del",            SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleDelTeleCommand,             "", NULL },
373        { "name",           SEC_MODERATOR,      true,  &ChatHandler::HandleNameTeleCommand,            "", NULL },
374        { "group",          SEC_MODERATOR,      false, &ChatHandler::HandleGroupTeleCommand,           "", NULL },
375        { "",               SEC_MODERATOR,      false, &ChatHandler::HandleTeleCommand,                "", NULL },
376        { NULL,             0,                  false, NULL,                                           "", NULL }
377    };
378
379    static ChatCommand npcCommandTable[] =
380    {
381        { "say",            SEC_MODERATOR,      false, &ChatHandler::HandleNpcSayCommand,              "", NULL },
382        { "textemote",      SEC_MODERATOR,      false, &ChatHandler::HandleNpcTextEmoteCommand,        "", NULL },
383        { "add",            SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcAddCommand,              "", NULL },
384        { "delete",         SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcDeleteCommand,           "", NULL },
385        { "spawndist",      SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcSpawnDistCommand,        "", NULL },
386        { "spawntime",      SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcSpawnTimeCommand,        "", NULL },
387        { "factionid",      SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcFactionIdCommand,        "", NULL },
388        { "addmove",        SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcAddMoveCommand,          "", NULL },
389        { "setmovetype",    SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcSetMoveTypeCommand,      "", NULL },
390        { "move",           SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcMoveCommand,             "", NULL },
391        { "changelevel",    SEC_GAMEMASTER,     false, &ChatHandler::HandleChangeLevelCommand,         "", NULL },
392        { "setmodel",       SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcSetModelCommand,         "", NULL },
393        { "additem",        SEC_GAMEMASTER,     false, &ChatHandler::HandleAddVendorItemCommand,       "", NULL },
394        { "delitem",        SEC_GAMEMASTER,     false, &ChatHandler::HandleDelVendorItemCommand,       "", NULL },
395        { "flag",           SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcFlagCommand,             "", NULL },
396        { "changeentry",    SEC_ADMINISTRATOR,  false, &ChatHandler::HandleNpcChangeEntryCommand,      "", NULL },
397        { "info",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleNpcInfoCommand,             "", NULL },
398        { "playemote",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleNpcPlayEmoteCommand,        "", NULL },
399        { "follow",         SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcFollowCommand,           "", NULL },
400        { "unfollow",       SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcUnFollowCommand,         "", NULL },
401        { "whisper",        SEC_MODERATOR,      false, &ChatHandler::HandleNpcWhisperCommand,          "", NULL },
402        { "yell",           SEC_MODERATOR,      false, &ChatHandler::HandleNpcYellCommand,             "", NULL },
403
404        //{ TODO: fix or remove this commands
405        { "name",           SEC_GAMEMASTER,     false, &ChatHandler::HandleNameCommand,                "", NULL },
406        { "subname",        SEC_GAMEMASTER,     false, &ChatHandler::HandleSubNameCommand,             "", NULL },
407        { "addweapon",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAddWeaponCommand,           "", NULL },
408        //}
409
410        { NULL,             0,                  false, NULL,                                           "", NULL }
411    };
412
413    static ChatCommand goCommandTable[] =
414    {
415        { "grid",           SEC_MODERATOR,      false, &ChatHandler::HandleGoGridCommand,              "", NULL },
416        { "creature",       SEC_GAMEMASTER,     false, &ChatHandler::HandleGoCreatureCommand,          "", NULL },
417        { "object",         SEC_GAMEMASTER,     false, &ChatHandler::HandleGoObjectCommand,            "", NULL },
418        { "trigger",        SEC_GAMEMASTER,     false, &ChatHandler::HandleGoTriggerCommand,           "", NULL },
419        { "graveyard",      SEC_GAMEMASTER,     false, &ChatHandler::HandleGoGraveyardCommand,         "", NULL },
420        { "zonexy",         SEC_MODERATOR,      false, &ChatHandler::HandleGoZoneXYCommand,            "", NULL },
421        { "xy",             SEC_MODERATOR,      false, &ChatHandler::HandleGoXYCommand,                "", NULL },
422        { "xyz",            SEC_MODERATOR,      false, &ChatHandler::HandleGoXYZCommand,               "", NULL },
423        { "",               SEC_MODERATOR,      false, &ChatHandler::HandleGoXYZCommand,               "", NULL },
424        { NULL,             0,                  false, NULL,                                           "", NULL }
425    };
426
427    static ChatCommand gobjectCommandTable[] =
428    {
429        { "add",            SEC_GAMEMASTER,     false, &ChatHandler::HandleGameObjectCommand,          "", NULL },
430        { "delete",         SEC_GAMEMASTER,     false, &ChatHandler::HandleDelObjectCommand,           "", NULL },
431        { "target",         SEC_GAMEMASTER,     false, &ChatHandler::HandleTargetObjectCommand,        "", NULL },
432        { "turn",           SEC_GAMEMASTER,     false, &ChatHandler::HandleTurnObjectCommand,          "", NULL },
433        { "move",           SEC_GAMEMASTER,     false, &ChatHandler::HandleMoveObjectCommand,          "", NULL },
434        { "near",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleNearObjectCommand,          "", NULL },
435        { "activate",       SEC_GAMEMASTER,     false, &ChatHandler::HandleActivateObjectCommand,      "", NULL },
436        { NULL,             0,                  false, NULL,                                           "", NULL }
437    };
438
439    static ChatCommand questCommandTable[] =
440    {
441        { "add",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAddQuest,                   "", NULL },
442        { "complete",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCompleteQuest,              "", NULL },
443        { "remove",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleRemoveQuest,                "", NULL },
444        { NULL,             0,                  false, NULL,                                           "", NULL }
445    };
446
447    static ChatCommand gmCommandTable[] =
448    {
449        { "chat",           SEC_MODERATOR,      false, &ChatHandler::HandleGMChatCommand,              "", NULL },
450        { "ingame",         SEC_PLAYER,         true,  &ChatHandler::HandleGMListIngameCommand,        "", NULL },
451        { "list",           SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleGMListFullCommand,          "", NULL },
452        { "visible",        SEC_MODERATOR,      false, &ChatHandler::HandleVisibleCommand,             "", NULL },
453        { "fly",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleFlyModeCommand,             "", NULL },
454        { "",               SEC_MODERATOR,      false, &ChatHandler::HandleGMmodeCommand,              "", NULL },
455        { NULL,             0,                  false, NULL,                                           "", NULL }
456    };
457
458    static ChatCommand instanceCommandTable[] =
459    {
460        { "listbinds",      SEC_MODERATOR,      false, &ChatHandler::HandleInstanceListBindsCommand,   "", NULL },
461        { "unbind",         SEC_MODERATOR,      false, &ChatHandler::HandleInstanceUnbindCommand,      "", NULL },
462        { "stats",          SEC_MODERATOR,      true,  &ChatHandler::HandleInstanceStatsCommand,       "", NULL },
463        { "savedata",       SEC_MODERATOR,      false, &ChatHandler::HandleInstanceSaveDataCommand,    "", NULL },
464        { NULL,             0,                  false, NULL,                                           "", NULL }
465    };
466
467    static ChatCommand commandTable[] =
468    {
469        { "account",        SEC_PLAYER,         true,  NULL,                                           "", accountCommandTable },
470        { "gm",             SEC_MODERATOR,      true,  NULL,                                           "", gmCommandTable },
471        { "npc",            SEC_MODERATOR,      false, NULL,                                           "", npcCommandTable },
472        { "go",             SEC_MODERATOR,      false, NULL,                                           "", goCommandTable },
473        { "learn",          SEC_MODERATOR,      false, NULL,                                           "", learnCommandTable },
474        { "modify",         SEC_MODERATOR,      false, NULL,                                           "", modifyCommandTable },
475        { "debug",          SEC_MODERATOR,      false, NULL,                                           "", debugCommandTable },
476        { "tele",           SEC_MODERATOR,      true,  NULL,                                           "", teleCommandTable },
477        { "event",          SEC_GAMEMASTER,     false, NULL,                                           "", eventCommandTable },
478        { "gobject",        SEC_GAMEMASTER,     false, NULL,                                           "", gobjectCommandTable },
479        { "honor",          SEC_GAMEMASTER,     false, NULL,                                           "", honorCommandTable },
480        { "wp",             SEC_GAMEMASTER,     false, NULL,                                           "", wpCommandTable },
481        { "quest",          SEC_ADMINISTRATOR,  false, NULL,                                           "", questCommandTable },
482        { "reload",         SEC_ADMINISTRATOR,  true,  NULL,                                           "", reloadCommandTable },
483        { "list",           SEC_ADMINISTRATOR,  true,  NULL,                                           "", listCommandTable },
484        { "lookup",         SEC_ADMINISTRATOR,  true,  NULL,                                           "", lookupCommandTable },
485        { "pdump",          SEC_ADMINISTRATOR,  true,  NULL,                                           "", pdumpCommandTable },
486        { "guild",          SEC_ADMINISTRATOR,  true,  NULL,                                           "", guildCommandTable },
487        { "cast",           SEC_ADMINISTRATOR,  false, NULL,                                           "", castCommandTable },
488        { "reset",          SEC_ADMINISTRATOR,  false, NULL,                                           "", resetCommandTable },
489        { "instance",       SEC_ADMINISTRATOR,  true,  NULL,                                           "", instanceCommandTable },
490        { "server",         SEC_ADMINISTRATOR,  true,  NULL,                                           "", serverCommandTable },
491        { "pet",            SEC_GAMEMASTER,     false, NULL,                                           "", petCommandTable },
492
493        { "aura",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAuraCommand,                "", NULL },
494        { "unaura",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleUnAuraCommand,              "", NULL },
495        { "nameannounce",   SEC_MODERATOR,      false, &ChatHandler::HandleNameAnnounceCommand,        "", NULL }, 
496        { "announce",       SEC_MODERATOR,      true,  &ChatHandler::HandleAnnounceCommand,            "", NULL },
497        { "notify",         SEC_MODERATOR,      true,  &ChatHandler::HandleNotifyCommand,              "", NULL },
498        { "goname",         SEC_MODERATOR,      false, &ChatHandler::HandleGonameCommand,              "", NULL },
499        { "namego",         SEC_MODERATOR,      false, &ChatHandler::HandleNamegoCommand,              "", NULL },
500        { "groupgo",        SEC_MODERATOR,      false, &ChatHandler::HandleGroupgoCommand,             "", NULL },
501        { "commands",       SEC_PLAYER,         true,  &ChatHandler::HandleCommandsCommand,            "", NULL },
502        { "demorph",        SEC_GAMEMASTER,     false, &ChatHandler::HandleDeMorphCommand,             "", NULL },
503        { "die",            SEC_ADMINISTRATOR,  false, &ChatHandler::HandleDieCommand,                 "", NULL },
504        { "revive",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleReviveCommand,              "", NULL },
505        { "dismount",       SEC_PLAYER,         false, &ChatHandler::HandleDismountCommand,            "", NULL },
506        { "gps",            SEC_MODERATOR,      false, &ChatHandler::HandleGPSCommand,                 "", NULL },
507        { "guid",           SEC_GAMEMASTER,     false, &ChatHandler::HandleGUIDCommand,                "", NULL },
508        { "help",           SEC_PLAYER,         true,  &ChatHandler::HandleHelpCommand,                "", NULL },
509        { "itemmove",       SEC_GAMEMASTER,     false, &ChatHandler::HandleItemMoveCommand,            "", NULL },
510        { "cooldown",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleCooldownCommand,            "", NULL },
511        { "unlearn",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleUnLearnCommand,             "", NULL },
512        { "distance",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleGetDistanceCommand,         "", NULL },
513        { "recall",         SEC_MODERATOR,      false, &ChatHandler::HandleRecallCommand,              "", NULL },
514        { "save",           SEC_PLAYER,         false, &ChatHandler::HandleSaveCommand,                "", NULL },
515        { "saveall",        SEC_MODERATOR,      true,  &ChatHandler::HandleSaveAllCommand,             "", NULL },
516        { "kick",           SEC_GAMEMASTER,     true,  &ChatHandler::HandleKickPlayerCommand,          "", NULL },
517        { "ban",            SEC_ADMINISTRATOR,  true,  NULL,                                           "", banCommandTable },
518        { "unban",          SEC_ADMINISTRATOR,  true,  NULL,                                           "", unbanCommandTable },
519        { "baninfo",        SEC_ADMINISTRATOR,  false, NULL,                                           "", baninfoCommandTable },
520        { "banlist",        SEC_ADMINISTRATOR,  true,  NULL,                                           "", banlistCommandTable },
521        { "plimit",         SEC_ADMINISTRATOR,  true,  &ChatHandler::HandlePLimitCommand,              "", NULL },
522        { "start",          SEC_PLAYER,         false, &ChatHandler::HandleStartCommand,               "", NULL },
523        { "taxicheat",      SEC_MODERATOR,      false, &ChatHandler::HandleTaxiCheatCommand,           "", NULL },
524        { "allowmove",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAllowMovementCommand,       "", NULL },
525        { "linkgrave",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLinkGraveCommand,           "", NULL },
526        { "neargrave",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleNearGraveCommand,           "", NULL },
527        { "explorecheat",   SEC_ADMINISTRATOR,  false, &ChatHandler::HandleExploreCheatCommand,        "", NULL },
528        { "hover",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleHoverCommand,               "", NULL },
529        { "waterwalk",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleWaterwalkCommand,           "", NULL },
530        { "levelup",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLevelUpCommand,             "", NULL },
531        { "showarea",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleShowAreaCommand,            "", NULL },
532        { "hidearea",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleHideAreaCommand,            "", NULL },
533        { "additem",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAddItemCommand,             "", NULL },
534        { "additemset",     SEC_ADMINISTRATOR,  false, &ChatHandler::HandleAddItemSetCommand,          "", NULL },
535        { "bank",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleBankCommand,                "", NULL },
536        { "wchange",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleChangeWeather,              "", NULL },
537        { "ticket",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleTicketCommand,              "", NULL },
538        { "delticket",      SEC_GAMEMASTER,     true,  &ChatHandler::HandleDelTicketCommand,           "", NULL },
539        { "maxskill",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleMaxSkillCommand,            "", NULL },
540        { "setskill",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleSetSkillCommand,            "", NULL },
541        { "whispers",       SEC_MODERATOR,      false, &ChatHandler::HandleWhispersCommand,            "", NULL },
542        { "pinfo",          SEC_GAMEMASTER,     true,  &ChatHandler::HandlePInfoCommand,               "", NULL },
543        { "password",       SEC_PLAYER,         false, &ChatHandler::HandlePasswordCommand,            "", NULL },
544        { "lockaccount",    SEC_PLAYER,         false, &ChatHandler::HandleLockAccountCommand,         "", NULL },
545        { "respawn",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleRespawnCommand,             "", NULL },
546        { "sendmail",       SEC_MODERATOR,      false, &ChatHandler::HandleSendMailCommand,            "", NULL },
547        { "rename",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleRenameCommand,              "", NULL },
548        { "loadscripts",    SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleLoadScriptsCommand,         "", NULL },
549        { "mute",           SEC_GAMEMASTER,     true,  &ChatHandler::HandleMuteCommand,                "", NULL },
550        { "unmute",         SEC_GAMEMASTER,     true,  &ChatHandler::HandleUnmuteCommand,              "", NULL },
551        { "movegens",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleMovegensCommand,            "", NULL },
552        { "cometome",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleComeToMeCommand,            "", NULL },
553        { "damage",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleDamageCommand,              "", NULL },
554        { "combatstop",     SEC_GAMEMASTER,     false, &ChatHandler::HandleCombatStopCommand,          "", NULL },
555        { "chardelete",     SEC_CONSOLE,        true,  &ChatHandler::HandleCharacterDeleteCommand,     "", NULL },
556        { "sendmessage",    SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleSendMessageCommand,         "", NULL },
557        { "playall",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandlePlayAllCommand,             "", NULL },
558        { "repairitems",    SEC_GAMEMASTER,     false, &ChatHandler::HandleRepairitemsCommand,         "", NULL },
559        { "freeze",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleFreezeCommand,              "", NULL }, 
560        { "unfreeze",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleUnFreezeCommand,            "", NULL }, 
561        { "listfreeze",     SEC_ADMINISTRATOR,  false, &ChatHandler::HandleListFreezeCommand,          "", NULL }, 
562        { "flusharenapoints", SEC_ADMINISTRATOR, false, &ChatHandler::HandleFlushArenaPointsCommand,   "", NULL }, 
563        { "possess",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandlePossessCommand,             "", NULL },
564        { "unpossess",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandleUnPossessCommand,           "", NULL },
565
566        { NULL,             0,                  false, NULL,                                           "", NULL }
567    };
568
569    if(load_command_table)
570    {
571        load_command_table = false;
572
573        QueryResult *result = WorldDatabase.Query("SELECT name,security,help FROM command");
574        if (result)
575        {
576            do
577            {
578                Field *fields = result->Fetch();
579                std::string name = fields[0].GetCppString();
580                for(uint32 i = 0; commandTable[i].Name != NULL; i++)
581                {
582                    if (name == commandTable[i].Name)
583                    {
584                        commandTable[i].SecurityLevel = (uint16)fields[1].GetUInt16();
585                        commandTable[i].Help = fields[2].GetCppString();
586                    }
587                    if(commandTable[i].ChildCommands != NULL)
588                    {
589                        ChatCommand *ptable = commandTable[i].ChildCommands;
590                        for(uint32 j = 0; ptable[j].Name != NULL; j++)
591                        {
592                            // first case for "" named subcommand
593                            if (ptable[j].Name[0]=='\0' && name == commandTable[i].Name ||
594                                name == fmtstring("%s %s", commandTable[i].Name, ptable[j].Name) )
595                            {
596                                ptable[j].SecurityLevel = (uint16)fields[1].GetUInt16();
597                                ptable[j].Help = fields[2].GetCppString();
598                            }
599                        }
600                    }
601                }
602            } while(result->NextRow());
603            delete result;
604        }
605    }
606
607    return commandTable;
608}
609
610const char *ChatHandler::GetTrinityString(int32 entry) const
611{
612    return m_session->GetTrinityString(entry);
613}
614
615bool ChatHandler::isAvailable(ChatCommand const& cmd) const
616{
617    // check security level only for simple  command (without child commands)
618    return m_session->GetSecurity() >= cmd.SecurityLevel;
619}
620
621bool ChatHandler::hasStringAbbr(const char* name, const char* part)
622{
623    // non "" command
624    if( *name )
625    {
626        // "" part from non-"" command
627        if( !*part )
628            return false;
629
630        for(;;)
631        {
632            if( !*part )
633                return true;
634            else if( !*name )
635                return false;
636            else if( tolower( *name ) != tolower( *part ) )
637                return false;
638            ++name; ++part;
639        }
640    }
641    // allow with any for ""
642
643    return true;
644}
645
646void ChatHandler::SendSysMessage(const char *str)
647{
648    WorldPacket data;
649
650    // need copy to prevent corruption by strtok call in LineFromMessage original string
651    char* buf = strdup(str);
652    char* pos = buf;
653
654    while(char* line = LineFromMessage(pos))
655    {
656        FillSystemMessageData(&data, line);
657        m_session->SendPacket(&data);
658    }
659
660    free(buf);
661}
662
663void ChatHandler::SendGlobalSysMessage(const char *str)
664{
665    // Chat output
666    WorldPacket data;
667
668    // need copy to prevent corruption by strtok call in LineFromMessage original string
669    char* buf = strdup(str);
670    char* pos = buf;
671
672    while(char* line = LineFromMessage(pos))
673    {
674        FillSystemMessageData(&data, line);
675        sWorld.SendGlobalMessage(&data);
676    }
677
678    free(buf);
679}
680
681void ChatHandler::SendSysMessage(int32 entry)
682{
683    SendSysMessage(GetTrinityString(entry));
684}
685
686void ChatHandler::PSendSysMessage(int32 entry, ...)
687{
688    const char *format = GetTrinityString(entry);
689    va_list ap;
690    char str [1024];
691    va_start(ap, entry);
692    vsnprintf(str,1024,format, ap );
693    va_end(ap);
694    SendSysMessage(str);
695}
696
697void ChatHandler::PSendSysMessage(const char *format, ...)
698{
699    va_list ap;
700    char str [1024];
701    va_start(ap, format);
702    vsnprintf(str,1024,format, ap );
703    va_end(ap);
704    SendSysMessage(str);
705}
706
707bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, const char* text, std::string fullcmd)
708{
709    char const* oldtext = text;
710    std::string cmd = "";
711
712    while (*text != ' ' && *text != '\0')
713    {
714        cmd += *text;
715        ++text;
716    }
717
718    while (*text == ' ') ++text;
719
720    for(uint32 i = 0; table[i].Name != NULL; i++)
721    {
722        if( !hasStringAbbr(table[i].Name, cmd.c_str()) )
723            continue;
724
725        // select subcommand from child commands list
726        if(table[i].ChildCommands != NULL)
727        {
728            if(!ExecuteCommandInTable(table[i].ChildCommands, text, fullcmd))
729            {
730                if(text && text[0] != '\0')
731                    SendSysMessage(LANG_NO_SUBCMD);
732                else
733                    SendSysMessage(LANG_CMD_SYNTAX);
734
735                ShowHelpForCommand(table[i].ChildCommands,text);
736            }
737
738            return true;
739        }
740
741        // must be available and have handler
742        if(!table[i].Handler || !isAvailable(table[i]))
743            continue;
744
745        SetSentErrorMessage(false);
746        // table[i].Name == "" is special case: send original command to handler
747        if((this->*(table[i].Handler))(strlen(table[i].Name)!=0 ? text : oldtext))
748        {
749            if(table[i].SecurityLevel > SEC_PLAYER)
750            {
751                // chat case
752                if(m_session)
753                {
754                    Player* p = m_session->GetPlayer();
755                    uint64 sel_guid = p->GetSelection();
756                    sLog.outCommand("Command: %s [Player: %s (Account: %u) X: %f Y: %f Z: %f Map: %u Selected: %s (GUID: %u)]",
757                        fullcmd.c_str(),p->GetName(),m_session->GetAccountId(),p->GetPositionX(),p->GetPositionY(),p->GetPositionZ(),p->GetMapId(),
758                        GetLogNameForGuid(sel_guid),GUID_LOPART(sel_guid));
759                }
760            }
761        }
762        // some commands have custom error messages. Don't send the default one in these cases.
763        else if(!sentErrorMessage)
764        {
765            if(!table[i].Help.empty())
766                SendSysMessage(table[i].Help.c_str());
767            else
768                SendSysMessage(LANG_CMD_SYNTAX);
769        }
770
771        return true;
772    }
773
774    return false;
775}
776
777int ChatHandler::ParseCommands(const char* text)
778{
779    ASSERT(text);
780    ASSERT(*text);
781
782    //if(m_session->GetSecurity() == 0)
783    //    return 0;
784
785    /// chat case (.command or !command format)
786    if(m_session)
787    {
788        if(text[0] != '!' && text[0] != '.')
789            return 0;
790    }
791
792    /// ignore single . and ! in line
793    if(strlen(text) < 2)
794        return 0;
795
796    /// ignore messages staring from many dots.
797    if(text[0] == '.' && text[1] == '.' || text[0] == '!' && text[1] == '!')
798        return 0;
799
800    /// skip first . or ! (in console allowed use command with . and ! and without its)
801    if(text[0] == '!' || text[0] == '.')
802        ++text;
803
804    std::string fullcmd = text;                             // original `text` can't be used. It content destroyed in command code processing.
805
806    if(!ExecuteCommandInTable(getCommandTable(), text, fullcmd))
807        SendSysMessage(LANG_NO_CMD);
808
809    return 1;
810}
811
812bool ChatHandler::ShowHelpForSubCommands(ChatCommand *table, char const* cmd, char const* subcmd)
813{
814    std::string list;
815    for(uint32 i = 0; table[i].Name != NULL; ++i)
816    {
817        // must be available (ignore handler existence for show command with possibe avalable subcomands
818        if(!isAvailable(table[i]))
819            continue;
820
821        /// for empty subcmd show all available
822        if( *subcmd && !hasStringAbbr(table[i].Name, subcmd))
823            continue;
824
825        if(m_session)
826            list += "\n    ";
827        else
828            list += "\n\r    ";
829
830        list += table[i].Name;
831
832        if(table[i].ChildCommands)
833            list += " ...";
834    }
835
836    if(list.empty())
837        return false;
838
839    if(table==getCommandTable())
840    {
841        SendSysMessage(LANG_AVIABLE_CMD);
842        PSendSysMessage("%s",list.c_str());
843    }
844    else
845        PSendSysMessage(LANG_SUBCMDS_LIST,cmd,list.c_str());
846
847    return true;
848}
849
850bool ChatHandler::ShowHelpForCommand(ChatCommand *table, const char* cmd)
851{
852    if(*cmd)
853    {
854        for(uint32 i = 0; table[i].Name != NULL; ++i)
855        {
856            // must be available (ignore handler existence for show command with possibe avalable subcomands
857            if(!isAvailable(table[i]))
858                continue;
859
860            if( !hasStringAbbr(table[i].Name, cmd) )
861                continue;
862
863            // have subcommand
864            char const* subcmd = (*cmd) ? strtok(NULL, " ") : "";
865
866            if(table[i].ChildCommands && subcmd && *subcmd)
867            {
868                if(ShowHelpForCommand(table[i].ChildCommands, subcmd))
869                    return true;
870            }
871
872            if(!table[i].Help.empty())
873                SendSysMessage(table[i].Help.c_str());
874
875            if(table[i].ChildCommands)
876                if(ShowHelpForSubCommands(table[i].ChildCommands,table[i].Name,subcmd ? subcmd : ""))
877                    return true;
878
879            return !table[i].Help.empty();
880        }
881    }
882    else
883    {
884        for(uint32 i = 0; table[i].Name != NULL; ++i)
885        {
886            // must be available (ignore handler existence for show command with possibe avalable subcomands
887            if(!isAvailable(table[i]))
888                continue;
889
890            if(strlen(table[i].Name))
891                continue;
892
893            if(!table[i].Help.empty())
894                SendSysMessage(table[i].Help.c_str());
895
896            if(table[i].ChildCommands)
897                if(ShowHelpForSubCommands(table[i].ChildCommands,"",""))
898                    return true;
899
900            return !table[i].Help.empty();
901        }
902    }
903
904    return ShowHelpForSubCommands(table,"",cmd);
905}
906
907//Note: target_guid used only in CHAT_MSG_WHISPER_INFORM mode (in this case channelName ignored)
908void ChatHandler::FillMessageData( WorldPacket *data, WorldSession* session, uint8 type, uint32 language, const char *channelName, uint64 target_guid, const char *message, Unit *speaker)
909{
910    uint32 messageLength = (message ? strlen(message) : 0) + 1;
911
912    data->Initialize(SMSG_MESSAGECHAT, 100);                // guess size
913    *data << uint8(type);
914    if ((type != CHAT_MSG_CHANNEL && type != CHAT_MSG_WHISPER) || language == LANG_ADDON)
915        *data << uint32(language);
916    else
917        *data << uint32(LANG_UNIVERSAL);
918
919    switch(type)
920    {
921        case CHAT_MSG_SAY:
922        case CHAT_MSG_PARTY:
923        case CHAT_MSG_RAID:
924        case CHAT_MSG_GUILD:
925        case CHAT_MSG_OFFICER:
926        case CHAT_MSG_YELL:
927        case CHAT_MSG_WHISPER:
928        case CHAT_MSG_CHANNEL:
929        case CHAT_MSG_RAID_LEADER:
930        case CHAT_MSG_RAID_WARNING:
931        case CHAT_MSG_BG_SYSTEM_NEUTRAL:
932        case CHAT_MSG_BG_SYSTEM_ALLIANCE:
933        case CHAT_MSG_BG_SYSTEM_HORDE:
934        case CHAT_MSG_BATTLEGROUND:
935        case CHAT_MSG_BATTLEGROUND_LEADER:
936            target_guid = session ? session->GetPlayer()->GetGUID() : 0;
937            break;
938        case CHAT_MSG_MONSTER_SAY:
939        case CHAT_MSG_MONSTER_PARTY:
940        case CHAT_MSG_MONSTER_YELL:
941        case CHAT_MSG_MONSTER_WHISPER:
942        case CHAT_MSG_MONSTER_EMOTE:
943        case CHAT_MSG_RAID_BOSS_WHISPER:
944        case CHAT_MSG_RAID_BOSS_EMOTE:
945        {
946            *data << uint64(speaker->GetGUID());
947            *data << uint32(0);                             // 2.1.0
948            *data << uint32(strlen(speaker->GetName()) + 1);
949            *data << speaker->GetName();
950            uint64 listener_guid = 0;
951            *data << uint64(listener_guid);
952            if(listener_guid && !IS_PLAYER_GUID(listener_guid))
953            {
954                *data << uint32(1);                         // string listener_name_length
955                *data << uint8(0);                          // string listener_name
956            }
957            *data << uint32(messageLength);
958            *data << message;
959            *data << uint8(0);
960            return;
961        }
962        default:
963            if (type != CHAT_MSG_REPLY && type != CHAT_MSG_IGNORED && type != CHAT_MSG_DND && type != CHAT_MSG_AFK)
964                target_guid = 0;                            // only for CHAT_MSG_WHISPER_INFORM used original value target_guid
965            break;
966    }
967
968    *data << uint64(target_guid);                           // there 0 for BG messages
969    *data << uint32(0);                                     // can be chat msg group or something
970
971    if (type == CHAT_MSG_CHANNEL)
972    {
973        ASSERT(channelName);
974        *data << channelName;
975    }
976
977    *data << uint64(target_guid);
978    *data << uint32(messageLength);
979    *data << message;
980    if(session != 0 && type != CHAT_MSG_REPLY && type != CHAT_MSG_DND && type != CHAT_MSG_AFK)
981        *data << uint8(session->GetPlayer()->chatTag());
982    else
983        *data << uint8(0);
984}
985
986Player * ChatHandler::getSelectedPlayer()
987{
988    if(!m_session)
989        return NULL;
990
991    uint64 guid  = m_session->GetPlayer()->GetSelection();
992
993    if (guid == 0)
994        return m_session->GetPlayer();
995
996    return objmgr.GetPlayer(guid);
997}
998
999Unit* ChatHandler::getSelectedUnit()
1000{
1001    if(!m_session)
1002        return NULL;
1003
1004    uint64 guid = m_session->GetPlayer()->GetSelection();
1005
1006    if (guid == 0)
1007        return m_session->GetPlayer();
1008
1009    return ObjectAccessor::GetUnit(*m_session->GetPlayer(),guid);
1010}
1011
1012Creature* ChatHandler::getSelectedCreature()
1013{
1014    if(!m_session)
1015        return NULL;
1016
1017    return ObjectAccessor::GetCreatureOrPet(*m_session->GetPlayer(),m_session->GetPlayer()->GetSelection());
1018}
1019
1020char* ChatHandler::extractKeyFromLink(char* text, char const* linkType, char** something1)
1021{
1022    // skip empty
1023    if(!text)
1024        return NULL;
1025
1026    // skip speces
1027    while(*text==' '||*text=='\t'||*text=='\b')
1028        ++text;
1029
1030    if(!*text)
1031        return NULL;
1032
1033    // return non link case
1034    if(text[0]!='|')
1035        return strtok(text, " ");
1036
1037    // [name] Shift-click form |color|linkType:key|h[name]|h|r
1038    // or
1039    // [name] Shift-click form |color|linkType:key:something1:...:somethingN|h[name]|h|r
1040
1041    char* check = strtok(text, "|");                        // skip color
1042    if(!check)
1043        return NULL;                                        // end of data
1044
1045    char* cLinkType = strtok(NULL, ":");                    // linktype
1046    if(!cLinkType)
1047        return NULL;                                        // end of data
1048
1049    if(strcmp(cLinkType,linkType) != 0)
1050    {
1051        strtok(NULL, " ");                                  // skip link tail (to allow continue strtok(NULL,s) use after retturn from function
1052        SendSysMessage(LANG_WRONG_LINK_TYPE);
1053        return NULL;
1054    }
1055
1056    char* cKeys = strtok(NULL, "|");                        // extract keys and values
1057    char* cKeysTail = strtok(NULL, "");
1058
1059    char* cKey = strtok(cKeys, ":|");                       // extract key
1060    if(something1)
1061        *something1 = strtok(NULL, ":|");                   // extract something
1062
1063    strtok(cKeysTail, "]");                                 // restart scan tail and skip name with possible spaces
1064    strtok(NULL, " ");                                      // skip link tail (to allow continue strtok(NULL,s) use after retturn from function
1065    return cKey;
1066}
1067
1068char* ChatHandler::extractKeyFromLink(char* text, char const* const* linkTypes, int* found_idx, char** something1)
1069{
1070    // skip empty
1071    if(!text)
1072        return NULL;
1073
1074    // skip speces
1075    while(*text==' '||*text=='\t'||*text=='\b')
1076        ++text;
1077
1078    if(!*text)
1079        return NULL;
1080
1081    // return non link case
1082    if(text[0]!='|')
1083        return strtok(text, " ");
1084
1085    // [name] Shift-click form |color|linkType:key|h[name]|h|r
1086    // or
1087    // [name] Shift-click form |color|linkType:key:something1:...:somethingN|h[name]|h|r
1088
1089    char* check = strtok(text, "|");                        // skip color
1090    if(!check)
1091        return NULL;                                        // end of data
1092
1093    char* cLinkType = strtok(NULL, ":");                    // linktype
1094    if(!cLinkType)
1095        return NULL;                                        // end of data
1096
1097    for(int i = 0; linkTypes[i]; ++i)
1098    {
1099        if(strcmp(cLinkType,linkTypes[i]) == 0)
1100        {
1101            char* cKeys = strtok(NULL, "|");                // extract keys and values
1102            char* cKeysTail = strtok(NULL, "");
1103
1104            char* cKey = strtok(cKeys, ":|");               // extract key
1105            if(something1)
1106                *something1 = strtok(NULL, ":|");           // extract something
1107
1108            strtok(cKeysTail, "]");                         // restart scan tail and skip name with possible spaces
1109            strtok(NULL, " ");                              // skip link tail (to allow continue strtok(NULL,s) use after return from function
1110            if(found_idx)
1111                *found_idx = i;
1112            return cKey;
1113        }
1114    }
1115
1116    strtok(NULL, " ");                                      // skip link tail (to allow continue strtok(NULL,s) use after return from function
1117    SendSysMessage(LANG_WRONG_LINK_TYPE);
1118    return NULL;
1119}
1120
1121char const *fmtstring( char const *format, ... )
1122{
1123    va_list        argptr;
1124    #define    MAX_FMT_STRING    32000
1125    static char        temp_buffer[MAX_FMT_STRING];
1126    static char        string[MAX_FMT_STRING];
1127    static int        index = 0;
1128    char    *buf;
1129    int len;
1130
1131    va_start(argptr, format);
1132    vsnprintf(temp_buffer,MAX_FMT_STRING, format, argptr);
1133    va_end(argptr);
1134
1135    len = strlen(temp_buffer);
1136
1137    if( len >= MAX_FMT_STRING )
1138        return "ERROR";
1139
1140    if (len + index >= MAX_FMT_STRING-1)
1141    {
1142        index = 0;
1143    }
1144
1145    buf = &string[index];
1146    memcpy( buf, temp_buffer, len+1 );
1147
1148    index += len + 1;
1149
1150    return buf;
1151}
1152
1153GameObject* ChatHandler::GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid,uint32 entry)
1154{
1155    if(!m_session)
1156        return NULL;
1157
1158    Player* pl = m_session->GetPlayer();
1159
1160    GameObject* obj = ObjectAccessor::GetGameObject(*pl, MAKE_NEW_GUID(lowguid, entry, HIGHGUID_GAMEOBJECT));
1161
1162    if(!obj && objmgr.GetGOData(lowguid))                   // guid is DB guid of object
1163    {
1164        // search near player then
1165        CellPair p(Trinity::ComputeCellPair(pl->GetPositionX(), pl->GetPositionY()));
1166        Cell cell(p);
1167        cell.data.Part.reserved = ALL_DISTRICT;
1168
1169        Trinity::GameObjectWithDbGUIDCheck go_check(*pl,lowguid);
1170        Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck> checker(obj,go_check);
1171
1172        TypeContainerVisitor<Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck>, GridTypeMapContainer > object_checker(checker);
1173        CellLock<GridReadGuard> cell_lock(cell, p);
1174        cell_lock->Visit(cell_lock, object_checker, *MapManager::Instance().GetMap(pl->GetMapId(), pl));
1175    }
1176
1177    return obj;
1178}
1179
1180static char const* const spellTalentKeys[] = {
1181    "Hspell",
1182    "Htalent",
1183    0
1184};
1185
1186uint32 ChatHandler::extractSpellIdFromLink(char* text)
1187{
1188    // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r
1189    // number or [name] Shift-click form |color|Htalent:telen_id,rank|h[name]|h|r
1190    int type = 0;
1191    char* rankS = NULL;
1192    char* idS = extractKeyFromLink(text,spellTalentKeys,&type,&rankS);
1193    if(!idS)
1194        return 0;
1195
1196    uint32 id = (uint32)atol(idS);
1197
1198    // spell
1199    if(type==0)
1200        return id;
1201
1202    // talent
1203    TalentEntry const* talentEntry = sTalentStore.LookupEntry(id);
1204    if(!talentEntry)
1205        return 0;
1206
1207    int32 rank = rankS ? (uint32)atol(rankS) : 0;
1208    if(rank >= 5)
1209        return 0;
1210
1211    if(rank < 0)
1212        rank = 0;
1213
1214    return talentEntry->RankID[rank];
1215}
1216
1217GameTele const* ChatHandler::extractGameTeleFromLink(char* text)
1218{
1219    // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r
1220    char* cId = extractKeyFromLink(text,"Htele");
1221    if(!cId)
1222        return false;
1223
1224    // id case (explicit or from shift link)
1225    if(cId[0] >= '0' || cId[0] >= '9')
1226        if(uint32 id = atoi(cId))
1227            return objmgr.GetGameTele(id);
1228
1229    return objmgr.GetGameTele(cId);
1230}
1231
1232const char *ChatHandler::GetName() const
1233{
1234    return m_session->GetPlayer()->GetName();
1235}
1236
1237bool ChatHandler::needReportToTarget(Player* chr) const
1238{
1239    Player* pl = m_session->GetPlayer();
1240    return pl != chr && pl->IsVisibleGloballyFor(chr);
1241}
1242
1243const char *CliHandler::GetTrinityString(int32 entry) const
1244{
1245    return objmgr.GetTrinityStringForDBCLocale(entry);
1246}
1247
1248bool CliHandler::isAvailable(ChatCommand const& cmd) const
1249{
1250    // skip non-console commands in console case
1251    return cmd.AllowConsole;
1252}
1253
1254void CliHandler::SendSysMessage(const char *str)
1255{
1256    m_print(str);
1257    m_print("\r\n");
1258}
1259
1260const char *CliHandler::GetName() const
1261{
1262    return GetTrinityString(LANG_CONSOLE_COMMAND);
1263}
1264
1265bool CliHandler::needReportToTarget(Player* /*chr*/) const
1266{
1267    return true;
1268}
1269
1270bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, Group* &group, uint64 &guid, bool offline)
1271{
1272    plr  = NULL;
1273    guid = 0;
1274
1275    if(cname)
1276    {
1277        std::string name = cname;
1278        if(!name.empty())
1279        {
1280            if(!normalizePlayerName(name))
1281            {
1282                PSendSysMessage(LANG_PLAYER_NOT_FOUND);
1283                SetSentErrorMessage(true);
1284                return false;
1285            }
1286
1287            plr = objmgr.GetPlayer(name.c_str());
1288            if(offline)
1289                guid = objmgr.GetPlayerGUIDByName(name.c_str());
1290        }
1291    }
1292
1293    if(plr)
1294    {
1295        group = plr->GetGroup();
1296        if(!guid || !offline)
1297            guid = plr->GetGUID();
1298    }
1299    else
1300    {
1301        if(getSelectedPlayer())
1302            plr = getSelectedPlayer();
1303        else
1304            plr = m_session->GetPlayer();
1305
1306        if(!guid || !offline)
1307            guid  = plr->GetGUID();
1308        group = plr->GetGroup();
1309    }
1310
1311    return true;
1312}
Note: See TracBrowser for help on using the browser.