aboutsummaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authorKingPin <none@none>2008-10-26 13:32:42 -0500
committerKingPin <none@none>2008-10-26 13:32:42 -0500
commita0f843a3ebe505dabe138294dd7c6dbc0dcfe094 (patch)
treee6d8c282355f1affbe5bce524a7d3df23e7e4661 /src/game
parent6f2e0ee48a24dff1ac7acf441b1559e9d7c26657 (diff)
[svn] * Merge CLI Commands with regular commands and give them level4 access. sec_console. Source mangos - thanks to ogeraisi for the amalgamated patch.
* Redid/Fixed/Added some lang strings. * As usual remember this is a trunk rev so stability only guaranteed on northern countries of Mars and western parts of Pluto. No warranties outside the solar system, sorry :( . Check with your local government or dictator on regulations regarding export. --HG-- branch : trunk
Diffstat (limited to 'src/game')
-rw-r--r--src/game/AccountMgr.h1
-rw-r--r--src/game/Chat.cpp835
-rw-r--r--src/game/Chat.h72
-rw-r--r--src/game/Language.h91
-rw-r--r--src/game/Level0.cpp54
-rw-r--r--src/game/Level1.cpp60
-rw-r--r--src/game/Level2.cpp153
-rw-r--r--src/game/Level3.cpp1435
-rw-r--r--src/game/ObjectMgr.h1
-rw-r--r--src/game/PlayerDump.cpp131
-rw-r--r--src/game/PlayerDump.h15
-rw-r--r--src/game/SharedDefines.h16
-rw-r--r--src/game/World.cpp98
-rw-r--r--src/game/World.h58
-rw-r--r--src/game/WorldSession.cpp2
-rw-r--r--src/game/WorldSession.h6
16 files changed, 1976 insertions, 1052 deletions
diff --git a/src/game/AccountMgr.h b/src/game/AccountMgr.h
index 3d86bd78672..0c1703ee2d9 100644
--- a/src/game/AccountMgr.h
+++ b/src/game/AccountMgr.h
@@ -50,7 +50,6 @@ class AccountMgr
bool CheckPassword(uint32 accid, std::string passwd);
uint32 GetId(std::string username);
- uint32 GetIdByGUID(const uint64 &guid) const;
uint32 GetSecurity(uint32 acc_id);
bool GetName(uint32 acc_id, std::string &name);
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index 795471da336..67c79642631 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -38,454 +38,506 @@ bool ChatHandler::load_command_table = true;
ChatCommand * ChatHandler::getCommandTable()
{
+ static ChatCommand accountSetCommandTable[] =
+ {
+ { "addon", SEC_ADMINISTRATOR, true, &ChatHandler::HandleAccountSetAddonCommand, "", NULL },
+ { "gmlevel", SEC_CONSOLE, true, &ChatHandler::HandleAccountSetGmLevelCommand, "", NULL },
+ { "password", SEC_CONSOLE, true, &ChatHandler::HandleAccountSetPasswordCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
+ static ChatCommand accountCommandTable[] =
+ {
+ { "create", SEC_CONSOLE, true, &ChatHandler::HandleAccountCreateCommand, "", NULL },
+ { "delete", SEC_CONSOLE, true, &ChatHandler::HandleAccountDeleteCommand, "", NULL },
+ { "onlinelist", SEC_CONSOLE, true, &ChatHandler::HandleAccountOnlineListCommand, "", NULL },
+ { "set", SEC_ADMINISTRATOR, true, NULL, "", accountSetCommandTable },
+ { "", SEC_PLAYER, false, &ChatHandler::HandleAccountCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
+ static ChatCommand serverSetCommandTable[] =
+ {
+ { "loglevel", SEC_CONSOLE, true, &ChatHandler::HandleServerSetLogLevelCommand, "", NULL },
+ { "motd", SEC_ADMINISTRATOR, true, &ChatHandler::HandleServerSetMotdCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
static ChatCommand serverCommandTable[] =
{
- { "idlerestart", SEC_ADMINISTRATOR, &ChatHandler::HandleIdleRestartCommand, "", NULL },
- { "idleshutdown", SEC_ADMINISTRATOR, &ChatHandler::HandleIdleShutDownCommand, "", NULL },
- { "info", SEC_PLAYER, &ChatHandler::HandleInfoCommand, "", NULL },
- { "restart", SEC_ADMINISTRATOR, &ChatHandler::HandleRestartCommand, "", NULL },
- { "shutdown", SEC_ADMINISTRATOR, &ChatHandler::HandleShutDownCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "corpses", SEC_GAMEMASTER, true, &ChatHandler::HandleServerCorpsesCommand, "", NULL },
+ { "exit", SEC_CONSOLE, true, &ChatHandler::HandleServerExitCommand, "", NULL },
+ { "idlerestart", SEC_ADMINISTRATOR, true, &ChatHandler::HandleIdleRestartCommand, "", NULL },
+ { "idleshutdown", SEC_ADMINISTRATOR, true, &ChatHandler::HandleIdleShutDownCommand, "", NULL },
+ { "info", SEC_PLAYER, true, &ChatHandler::HandleInfoCommand, "", NULL },
+ { "motd", SEC_PLAYER, true, &ChatHandler::HandleServerMotdCommand, "", NULL },
+ { "restart", SEC_ADMINISTRATOR, true, &ChatHandler::HandleRestartCommand, "", NULL },
+ { "shutdown", SEC_ADMINISTRATOR, true, &ChatHandler::HandleShutDownCommand, "", NULL },
+ { "set", SEC_ADMINISTRATOR, true, NULL, "", serverSetCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand modifyCommandTable[] =
{
- { "hp", SEC_MODERATOR, &ChatHandler::HandleModifyHPCommand, "", NULL },
- { "mana", SEC_MODERATOR, &ChatHandler::HandleModifyManaCommand, "", NULL },
- { "rage", SEC_MODERATOR, &ChatHandler::HandleModifyRageCommand, "", NULL },
- { "energy", SEC_MODERATOR, &ChatHandler::HandleModifyEnergyCommand, "", NULL },
- { "money", SEC_MODERATOR, &ChatHandler::HandleModifyMoneyCommand, "", NULL },
- { "speed", SEC_MODERATOR, &ChatHandler::HandleModifySpeedCommand, "", NULL },
- { "swim", SEC_MODERATOR, &ChatHandler::HandleModifySwimCommand, "", NULL },
- { "scale", SEC_MODERATOR, &ChatHandler::HandleModifyScaleCommand, "", NULL },
- { "bit", SEC_MODERATOR, &ChatHandler::HandleModifyBitCommand, "", NULL },
- { "bwalk", SEC_MODERATOR, &ChatHandler::HandleModifyBWalkCommand, "", NULL },
- { "fly", SEC_MODERATOR, &ChatHandler::HandleModifyFlyCommand, "", NULL },
- { "aspeed", SEC_MODERATOR, &ChatHandler::HandleModifyASpeedCommand, "", NULL },
- { "faction", SEC_MODERATOR, &ChatHandler::HandleModifyFactionCommand, "", NULL },
- { "spell", SEC_MODERATOR, &ChatHandler::HandleModifySpellCommand, "", NULL },
- { "tp", SEC_MODERATOR, &ChatHandler::HandleModifyTalentCommand, "", NULL },
- { "titles", SEC_MODERATOR, &ChatHandler::HandleModifyKnownTitlesCommand, "", NULL },
- { "mount", SEC_MODERATOR, &ChatHandler::HandleModifyMountCommand, "", NULL },
- { "honor", SEC_MODERATOR, &ChatHandler::HandleModifyHonorCommand, "", NULL },
- { "rep", SEC_MODERATOR, &ChatHandler::HandleModifyRepCommand, "", NULL },
- { "arena", SEC_MODERATOR, &ChatHandler::HandleModifyArenaCommand, "", NULL },
- { "drunk", SEC_MODERATOR, &ChatHandler::HandleDrunkCommand, "", NULL },
- { "standstate", SEC_GAMEMASTER, &ChatHandler::HandleStandStateCommand, "", NULL },
- { "morph", SEC_GAMEMASTER, &ChatHandler::HandleMorphCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "hp", SEC_MODERATOR, false, &ChatHandler::HandleModifyHPCommand, "", NULL },
+ { "mana", SEC_MODERATOR, false, &ChatHandler::HandleModifyManaCommand, "", NULL },
+ { "rage", SEC_MODERATOR, false, &ChatHandler::HandleModifyRageCommand, "", NULL },
+ { "energy", SEC_MODERATOR, false, &ChatHandler::HandleModifyEnergyCommand, "", NULL },
+ { "money", SEC_MODERATOR, false, &ChatHandler::HandleModifyMoneyCommand, "", NULL },
+ { "speed", SEC_MODERATOR, false, &ChatHandler::HandleModifySpeedCommand, "", NULL },
+ { "swim", SEC_MODERATOR, false, &ChatHandler::HandleModifySwimCommand, "", NULL },
+ { "scale", SEC_MODERATOR, false, &ChatHandler::HandleModifyScaleCommand, "", NULL },
+ { "bit", SEC_MODERATOR, false, &ChatHandler::HandleModifyBitCommand, "", NULL },
+ { "bwalk", SEC_MODERATOR, false, &ChatHandler::HandleModifyBWalkCommand, "", NULL },
+ { "fly", SEC_MODERATOR, false, &ChatHandler::HandleModifyFlyCommand, "", NULL },
+ { "aspeed", SEC_MODERATOR, false, &ChatHandler::HandleModifyASpeedCommand, "", NULL },
+ { "faction", SEC_MODERATOR, false, &ChatHandler::HandleModifyFactionCommand, "", NULL },
+ { "spell", SEC_MODERATOR, false, &ChatHandler::HandleModifySpellCommand, "", NULL },
+ { "tp", SEC_MODERATOR, false, &ChatHandler::HandleModifyTalentCommand, "", NULL },
+ { "titles", SEC_MODERATOR, false, &ChatHandler::HandleModifyKnownTitlesCommand, "", NULL },
+ { "mount", SEC_MODERATOR, false, &ChatHandler::HandleModifyMountCommand, "", NULL },
+ { "honor", SEC_MODERATOR, false, &ChatHandler::HandleModifyHonorCommand, "", NULL },
+ { "rep", SEC_MODERATOR, false, &ChatHandler::HandleModifyRepCommand, "", NULL },
+ { "arena", SEC_MODERATOR, false, &ChatHandler::HandleModifyArenaCommand, "", NULL },
+ { "drunk", SEC_MODERATOR, false, &ChatHandler::HandleDrunkCommand, "", NULL },
+ { "standstate", SEC_GAMEMASTER, false, &ChatHandler::HandleStandStateCommand, "", NULL },
+ { "morph", SEC_GAMEMASTER, false, &ChatHandler::HandleMorphCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand wpCommandTable[] =
{
- { "show", SEC_GAMEMASTER, &ChatHandler::HandleWpShowCommand, "", NULL },
- { "add", SEC_GAMEMASTER, &ChatHandler::HandleWpAddCommand, "", NULL },
- { "modify", SEC_GAMEMASTER, &ChatHandler::HandleWpModifyCommand, "", NULL },
- { "export", SEC_ADMINISTRATOR, &ChatHandler::HandleWpExportCommand, "", NULL },
- { "import", SEC_ADMINISTRATOR, &ChatHandler::HandleWpImportCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "show", SEC_GAMEMASTER, false, &ChatHandler::HandleWpShowCommand, "", NULL },
+ { "add", SEC_GAMEMASTER, false, &ChatHandler::HandleWpAddCommand, "", NULL },
+ { "modify", SEC_GAMEMASTER, false, &ChatHandler::HandleWpModifyCommand, "", NULL },
+ { "export", SEC_ADMINISTRATOR, false, &ChatHandler::HandleWpExportCommand, "", NULL },
+ { "import", SEC_ADMINISTRATOR, false, &ChatHandler::HandleWpImportCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
+ static ChatCommand banCommandTable[] =
+ {
+ { "account", SEC_ADMINISTRATOR, true, &ChatHandler::HandleBanAccountCommand, "", NULL },
+ { "character", SEC_ADMINISTRATOR, true, &ChatHandler::HandleBanCharacterCommand, "", NULL },
+ { "ip", SEC_ADMINISTRATOR, true, &ChatHandler::HandleBanIPCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
+ static ChatCommand baninfoCommandTable[] =
+ {
+ { "account", SEC_ADMINISTRATOR, true, &ChatHandler::HandleBanInfoAccountCommand, "", NULL },
+ { "character", SEC_ADMINISTRATOR, true, &ChatHandler::HandleBanInfoCharacterCommand, "", NULL },
+ { "ip", SEC_ADMINISTRATOR, true, &ChatHandler::HandleBanInfoIPCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
+ static ChatCommand banlistCommandTable[] =
+ {
+ { "account", SEC_ADMINISTRATOR, true, &ChatHandler::HandleBanListAccountCommand, "", NULL },
+ { "character", SEC_ADMINISTRATOR, true, &ChatHandler::HandleBanListCharacterCommand, "", NULL },
+ { "ip", SEC_ADMINISTRATOR, true, &ChatHandler::HandleBanListIPCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
+ static ChatCommand unbanCommandTable[] =
+ {
+ { "account", SEC_ADMINISTRATOR, true, &ChatHandler::HandleUnBanAccountCommand, "", NULL },
+ { "character", SEC_ADMINISTRATOR, true, &ChatHandler::HandleUnBanCharacterCommand, "", NULL },
+ { "ip", SEC_ADMINISTRATOR, true, &ChatHandler::HandleUnBanIPCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
static ChatCommand debugCommandTable[] =
{
- { "inarc", SEC_ADMINISTRATOR, &ChatHandler::HandleDebugInArcCommand, "", NULL },
- { "spellfail", SEC_ADMINISTRATOR, &ChatHandler::HandleDebugSpellFailCommand, "", NULL },
- { "setpoi", SEC_ADMINISTRATOR, &ChatHandler::HandleSetPoiCommand, "", NULL },
- { "qpartymsg", SEC_ADMINISTRATOR, &ChatHandler::HandleSendQuestPartyMsgCommand, "", NULL },
- { "qinvalidmsg", SEC_ADMINISTRATOR, &ChatHandler::HandleSendQuestInvalidMsgCommand, "", NULL },
- { "equiperr", SEC_ADMINISTRATOR, &ChatHandler::HandleEquipErrorCommand, "", NULL },
- { "sellerr", SEC_ADMINISTRATOR, &ChatHandler::HandleSellErrorCommand, "", NULL },
- { "buyerr", SEC_ADMINISTRATOR, &ChatHandler::HandleBuyErrorCommand, "", NULL },
- { "sendopcode", SEC_ADMINISTRATOR, &ChatHandler::HandleSendOpcodeCommand, "", NULL },
- { "uws", SEC_ADMINISTRATOR, &ChatHandler::HandleUpdateWorldStateCommand, "", NULL },
- { "ps", SEC_ADMINISTRATOR, &ChatHandler::HandlePlaySound2Command, "", NULL },
- { "scn", SEC_ADMINISTRATOR, &ChatHandler::HandleSendChannelNotifyCommand, "", NULL },
- { "scm", SEC_ADMINISTRATOR, &ChatHandler::HandleSendChatMsgCommand, "", NULL },
- { "getitemstate", SEC_ADMINISTRATOR, &ChatHandler::HandleGetItemState, "", NULL },
- { "playsound", SEC_MODERATOR, &ChatHandler::HandlePlaySoundCommand, "", NULL },
- { "update", SEC_ADMINISTRATOR, &ChatHandler::HandleUpdate, "", NULL },
- { "setvalue", SEC_ADMINISTRATOR, &ChatHandler::HandleSetValue, "", NULL },
- { "getvalue", SEC_ADMINISTRATOR, &ChatHandler::HandleGetValue, "", NULL },
- { "Mod32Value", SEC_ADMINISTRATOR, &ChatHandler::HandleMod32Value, "", NULL },
- { "anim", SEC_GAMEMASTER, &ChatHandler::HandleAnimCommand, "", NULL },
- { "lootrecipient", SEC_GAMEMASTER, &ChatHandler::HandleGetLootRecipient, "", NULL },
- { "arena", SEC_ADMINISTRATOR, &ChatHandler::HandleDebugArenaCommand, "", NULL },
- { "threatlist", SEC_ADMINISTRATOR, &ChatHandler::HandleDebugThreatList, "", NULL },
- { "hostilrefs", SEC_ADMINISTRATOR, &ChatHandler::HandleDebugHostilRefList, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "inarc", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugInArcCommand, "", NULL },
+ { "spellfail", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSpellFailCommand, "", NULL },
+ { "setpoi", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSetPoiCommand, "", NULL },
+ { "qpartymsg", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSendQuestPartyMsgCommand, "", NULL },
+ { "qinvalidmsg", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSendQuestInvalidMsgCommand, "", NULL },
+ { "equiperr", SEC_ADMINISTRATOR, false, &ChatHandler::HandleEquipErrorCommand, "", NULL },
+ { "sellerr", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSellErrorCommand, "", NULL },
+ { "buyerr", SEC_ADMINISTRATOR, false, &ChatHandler::HandleBuyErrorCommand, "", NULL },
+ { "sendopcode", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSendOpcodeCommand, "", NULL },
+ { "uws", SEC_ADMINISTRATOR, false, &ChatHandler::HandleUpdateWorldStateCommand, "", NULL },
+ { "ps", SEC_ADMINISTRATOR, false, &ChatHandler::HandlePlaySound2Command, "", NULL },
+ { "scn", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSendChannelNotifyCommand, "", NULL },
+ { "scm", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSendChatMsgCommand, "", NULL },
+ { "getitemstate", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGetItemState, "", NULL },
+ { "playsound", SEC_MODERATOR, false, &ChatHandler::HandlePlaySoundCommand, "", NULL },
+ { "update", SEC_ADMINISTRATOR, false, &ChatHandler::HandleUpdate, "", NULL },
+ { "setvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSetValue, "", NULL },
+ { "getvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGetValue, "", NULL },
+ { "Mod32Value", SEC_ADMINISTRATOR, false, &ChatHandler::HandleMod32Value, "", NULL },
+ { "anim", SEC_GAMEMASTER, false, &ChatHandler::HandleAnimCommand, "", NULL },
+ { "lootrecipient", SEC_GAMEMASTER, false, &ChatHandler::HandleGetLootRecipient, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand eventCommandTable[] =
{
- { "activelist", SEC_GAMEMASTER, &ChatHandler::HandleEventActiveListCommand, "", NULL },
- { "start", SEC_GAMEMASTER, &ChatHandler::HandleEventStartCommand, "", NULL },
- { "stop", SEC_GAMEMASTER, &ChatHandler::HandleEventStopCommand, "", NULL },
- { "", SEC_GAMEMASTER, &ChatHandler::HandleEventInfoCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "activelist", SEC_GAMEMASTER, true, &ChatHandler::HandleEventActiveListCommand, "", NULL },
+ { "start", SEC_GAMEMASTER, true, &ChatHandler::HandleEventStartCommand, "", NULL },
+ { "stop", SEC_GAMEMASTER, true, &ChatHandler::HandleEventStopCommand, "", NULL },
+ { "", SEC_GAMEMASTER, true, &ChatHandler::HandleEventInfoCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand learnCommandTable[] =
{
- { "all", SEC_ADMINISTRATOR, &ChatHandler::HandleLearnAllCommand, "", NULL },
- { "all_gm", SEC_GAMEMASTER, &ChatHandler::HandleLearnAllGMCommand, "", NULL },
- { "all_crafts", SEC_GAMEMASTER, &ChatHandler::HandleLearnAllCraftsCommand, "", NULL },
- { "all_default", SEC_MODERATOR, &ChatHandler::HandleLearnAllDefaultCommand, "", NULL },
- { "all_lang", SEC_MODERATOR, &ChatHandler::HandleLearnAllLangCommand, "", NULL },
- { "all_myclass", SEC_ADMINISTRATOR, &ChatHandler::HandleLearnAllMyClassCommand, "", NULL },
- { "all_myspells", SEC_ADMINISTRATOR, &ChatHandler::HandleLearnAllMySpellsCommand, "", NULL },
- { "all_mytalents", SEC_ADMINISTRATOR, &ChatHandler::HandleLearnAllMyTalentsCommand, "", NULL },
- { "all_recipes", SEC_GAMEMASTER, &ChatHandler::HandleLearnAllRecipesCommand, "", NULL },
- { "", SEC_ADMINISTRATOR, &ChatHandler::HandleLearnCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "all", SEC_ADMINISTRATOR, false, &ChatHandler::HandleLearnAllCommand, "", NULL },
+ { "all_gm", SEC_GAMEMASTER, false, &ChatHandler::HandleLearnAllGMCommand, "", NULL },
+ { "all_crafts", SEC_GAMEMASTER, false, &ChatHandler::HandleLearnAllCraftsCommand, "", NULL },
+ { "all_default", SEC_MODERATOR, false, &ChatHandler::HandleLearnAllDefaultCommand, "", NULL },
+ { "all_lang", SEC_MODERATOR, false, &ChatHandler::HandleLearnAllLangCommand, "", NULL },
+ { "all_myclass", SEC_ADMINISTRATOR, false, &ChatHandler::HandleLearnAllMyClassCommand, "", NULL },
+ { "all_myspells", SEC_ADMINISTRATOR, false, &ChatHandler::HandleLearnAllMySpellsCommand, "", NULL },
+ { "all_mytalents", SEC_ADMINISTRATOR, false, &ChatHandler::HandleLearnAllMyTalentsCommand, "", NULL },
+ { "all_recipes", SEC_GAMEMASTER, false, &ChatHandler::HandleLearnAllRecipesCommand, "", NULL },
+ { "", SEC_ADMINISTRATOR, false, &ChatHandler::HandleLearnCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand reloadCommandTable[] =
{
- { "all", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllCommand, "", NULL },
- { "all_loot", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllLootCommand, "", NULL },
- { "all_npc", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllNpcCommand, "", NULL },
- { "all_quest", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllQuestCommand, "", NULL },
- { "all_scripts", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllScriptsCommand, "", NULL },
- { "all_spell", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllSpellCommand, "", NULL },
- { "all_item", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllItemCommand, "", NULL },
- { "all_locales", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllLocalesCommand, "", NULL },
-
- { "config", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadConfigCommand, "", NULL },
-
- { "areatrigger_tavern", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAreaTriggerTavernCommand, "", NULL },
- { "areatrigger_teleport", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAreaTriggerTeleportCommand, "", NULL },
- { "areatrigger_involvedrelation",SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestAreaTriggersCommand, "", NULL },
- { "event_scripts", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadEventScriptsCommand, "", NULL },
- { "command", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCommandCommand, "", NULL },
- { "creature_involvedrelation", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCreatureQuestInvRelationsCommand,"",NULL },
- { "creature_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesCreatureCommand, "", NULL },
- { "creature_questrelation", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCreatureQuestRelationsCommand, "", NULL },
- { "disenchant_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesDisenchantCommand, "", NULL },
- { "fishing_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesFishingCommand, "", NULL },
- { "game_graveyard_zone", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGameGraveyardZoneCommand, "", NULL },
- { "game_tele", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGameTeleCommand, "", NULL },
- { "gameobject_involvedrelation", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGOQuestInvRelationsCommand, "", NULL },
- { "gameobject_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesGameobjectCommand, "", NULL },
- { "gameobject_questrelation", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGOQuestRelationsCommand, "", NULL },
- { "gameobject_scripts", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGameObjectScriptsCommand, "", NULL },
- { "item_enchantment_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadItemEnchantementsCommand, "", NULL },
- { "item_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesItemCommand, "", NULL },
- { "trinity_string", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadTrinityStringCommand, "", NULL },
- { "npc_gossip", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadNpcGossipCommand, "", NULL },
- { "npc_trainer", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadNpcTrainerCommand, "", NULL },
- { "npc_vendor", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadNpcVendorCommand, "", NULL },
- { "page_text", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadPageTextsCommand, "", NULL },
- { "pickpocketing_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesPickpocketingCommand,"",NULL},
- { "prospecting_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesProspectingCommand,"", NULL },
- { "quest_mail_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesQuestMailCommand, "", NULL },
- { "quest_end_scripts", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestEndScriptsCommand, "", NULL },
- { "quest_start_scripts", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestStartScriptsCommand, "", NULL },
- { "quest_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestTemplateCommand, "", NULL },
- { "reference_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesReferenceCommand, "", NULL },
- { "reserved_name", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadReservedNameCommand, "", NULL },
- { "skill_discovery_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSkillDiscoveryTemplateCommand, "", NULL },
- { "skill_extra_item_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSkillExtraItemTemplateCommand, "", NULL },
- { "skill_fishing_base_level", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSkillFishingBaseLevelCommand, "", NULL },
- { "skinning_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesSkinningCommand, "", NULL },
- { "spell_affect", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellAffectCommand, "", NULL },
- { "spell_chain", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellChainCommand, "", NULL },
- { "spell_elixir", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellElixirCommand, "", NULL },
- { "spell_learn_spell", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellLearnSpellCommand, "", NULL },
- { "spell_pet_auras", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellPetAurasCommand, "", NULL },
- { "spell_proc_event", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellProcEventCommand, "", NULL },
- { "spell_script_target", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellScriptTargetCommand, "", NULL },
- { "spell_scripts", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellScriptsCommand, "", NULL },
- { "spell_target_position", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellTargetPositionCommand, "", NULL },
- { "spell_threats", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellThreatsCommand, "", NULL },
- { "spell_disabled", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellDisabledCommand, "", NULL },
- { "locales_creature", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesCreatureCommand, "", NULL },
- { "locales_gameobject", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesGameobjectCommand, "", NULL },
- { "locales_item", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesItemCommand, "", NULL },
- { "locales_npc_text", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesNpcTextCommand, "", NULL },
- { "locales_page_text", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesPageTextCommand, "", NULL },
- { "locales_quest", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLocalesQuestCommand, "", NULL },
- { "", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "all", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllCommand, "", NULL },
+ {"all_loot", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllLootCommand, "", NULL },
+ { "all_npc", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllNpcCommand, "", NULL },
+ { "all_quest", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllQuestCommand, "", NULL },
+ { "all_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllScriptsCommand, "", NULL },
+ { "all_spell", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllSpellCommand, "", NULL },
+ { "all_item", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllItemCommand, "", NULL },
+ { "all_locales", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAllLocalesCommand, "", NULL },
+
+ { "config", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadConfigCommand, "", NULL },
+
+ { "areatrigger_tavern", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAreaTriggerTavernCommand, "", NULL },
+ { "areatrigger_teleport", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAreaTriggerTeleportCommand, "", NULL },
+ { "areatrigger_involvedrelation",SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestAreaTriggersCommand, "", NULL },
+ { "event_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadEventScriptsCommand, "", NULL },
+ { "command", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCommandCommand, "", NULL },
+ { "creature_involvedrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCreatureQuestInvRelationsCommand,"",NULL },
+ { "creature_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesCreatureCommand, "", NULL },
+ { "creature_questrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCreatureQuestRelationsCommand, "", NULL },
+ { "disenchant_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesDisenchantCommand, "", NULL },
+ { "fishing_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesFishingCommand, "", NULL },
+ { "game_graveyard_zone", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGameGraveyardZoneCommand, "", NULL },
+ { "game_tele", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGameTeleCommand, "", NULL },
+ { "gameobject_involvedrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGOQuestInvRelationsCommand, "", NULL },
+ { "gameobject_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesGameobjectCommand, "", NULL },
+ { "gameobject_questrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGOQuestRelationsCommand, "", NULL },
+ { "gameobject_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadGameObjectScriptsCommand, "", NULL },
+ { "item_enchantment_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadItemEnchantementsCommand, "", NULL },
+ { "item_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesItemCommand, "", NULL },
+ { "trinity_string", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadTrinityStringCommand, "", NULL },
+ { "npc_gossip", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadNpcGossipCommand, "", NULL },
+ { "npc_trainer", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadNpcTrainerCommand, "", NULL },
+ { "npc_vendor", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadNpcVendorCommand, "", NULL },
+ { "page_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadPageTextsCommand, "", NULL },
+ { "pickpocketing_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesPickpocketingCommand,"",NULL},
+ { "prospecting_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesProspectingCommand,"", NULL },
+ { "quest_mail_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesQuestMailCommand, "", NULL },
+ { "quest_end_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestEndScriptsCommand, "", NULL },
+ { "quest_start_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestStartScriptsCommand, "", NULL },
+ { "quest_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestTemplateCommand, "", NULL },
+ { "reference_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesReferenceCommand, "", NULL },
+ { "reserved_name", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadReservedNameCommand, "", NULL },
+ { "skill_discovery_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSkillDiscoveryTemplateCommand, "", NULL },
+ { "skill_extra_item_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSkillExtraItemTemplateCommand, "", NULL },
+ { "skill_fishing_base_level", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSkillFishingBaseLevelCommand, "", NULL },
+ { "skinning_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesSkinningCommand, "", NULL },
+ { "spell_affect", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellAffectCommand, "", NULL },
+ { "spell_chain", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellChainCommand, "", NULL },
+ { "spell_elixir", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellElixirCommand, "", NULL },
+ { "spell_learn_spell", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellLearnSpellCommand, "", NULL },
+ { "spell_pet_auras", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellPetAurasCommand, "", NULL },
+ { "spell_proc_event", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellProcEventCommand, "", NULL },
+ { "spell_script_target", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellScriptTargetCommand, "", NULL },
+ { "spell_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellScriptsCommand, "", NULL },
+ { "spell_target_position", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellTargetPositionCommand, "", NULL },
+ { "spell_threats", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellThreatsCommand, "", NULL },
+ { "locales_creature", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesCreatureCommand, "", NULL },
+ { "locales_gameobject", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesGameobjectCommand, "", NULL },
+ { "locales_item", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesItemCommand, "", NULL },
+ { "locales_npc_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesNpcTextCommand, "", NULL },
+ { "locales_page_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesPageTextCommand, "", NULL },
+ { "locales_quest", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesQuestCommand, "", NULL },
+
+ { "", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand honorCommandTable[] =
{
- { "add", SEC_GAMEMASTER, &ChatHandler::HandleAddHonorCommand, "", NULL },
- { "addkill", SEC_GAMEMASTER, &ChatHandler::HandleHonorAddKillCommand, "", NULL },
- { "update", SEC_GAMEMASTER, &ChatHandler::HandleUpdateHonorFieldsCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "add", SEC_GAMEMASTER, false, &ChatHandler::HandleAddHonorCommand, "", NULL },
+ { "addkill", SEC_GAMEMASTER, false, &ChatHandler::HandleHonorAddKillCommand, "", NULL },
+ { "update", SEC_GAMEMASTER, false, &ChatHandler::HandleUpdateHonorFieldsCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand guildCommandTable[] =
{
- { "create", SEC_GAMEMASTER, &ChatHandler::HandleGuildCreateCommand, "", NULL },
- { "delete", SEC_GAMEMASTER, &ChatHandler::HandleGuildDeleteCommand, "", NULL },
- { "invite", SEC_GAMEMASTER, &ChatHandler::HandleGuildInviteCommand, "", NULL },
- { "uninvite", SEC_GAMEMASTER, &ChatHandler::HandleGuildUninviteCommand, "", NULL },
- { "rank", SEC_GAMEMASTER, &ChatHandler::HandleGuildRankCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "create", SEC_GAMEMASTER, true, &ChatHandler::HandleGuildCreateCommand, "", NULL },
+ { "delete", SEC_GAMEMASTER, true, &ChatHandler::HandleGuildDeleteCommand, "", NULL },
+ { "invite", SEC_GAMEMASTER, true, &ChatHandler::HandleGuildInviteCommand, "", NULL },
+ { "uninvite", SEC_GAMEMASTER, true, &ChatHandler::HandleGuildUninviteCommand, "", NULL },
+ { "rank", SEC_GAMEMASTER, true, &ChatHandler::HandleGuildRankCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand groupCommandTable[] =
{
- { "leader", SEC_ADMINISTRATOR, &ChatHandler::HandleGroupLeaderCommand, "", NULL },
- { "disband", SEC_ADMINISTRATOR, &ChatHandler::HandleGroupDisbandCommand, "", NULL },
- { "remove", SEC_ADMINISTRATOR, &ChatHandler::HandleGroupRemoveCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "leader", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGroupLeaderCommand, "", NULL },
+ { "disband", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGroupDisbandCommand, "", NULL },
+ { "remove", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGroupRemoveCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand lookupPlayerCommandTable[] =
{
- { "ip", SEC_GAMEMASTER, &ChatHandler::HandleLookupPlayerIpCommand, "", NULL },
- { "account", SEC_GAMEMASTER, &ChatHandler::HandleLookupPlayerAccountCommand, "", NULL },
- { "email", SEC_GAMEMASTER, &ChatHandler::HandleLookupPlayerEmailCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "ip", SEC_GAMEMASTER, true, &ChatHandler::HandleLookupPlayerIpCommand, "", NULL },
+ { "account", SEC_GAMEMASTER, true, &ChatHandler::HandleLookupPlayerAccountCommand, "", NULL },
+ { "email", SEC_GAMEMASTER, true, &ChatHandler::HandleLookupPlayerEmailCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand lookupCommandTable[] =
{
- { "area", SEC_MODERATOR, &ChatHandler::HandleLookupAreaCommand, "", NULL },
- { "creature", SEC_ADMINISTRATOR, &ChatHandler::HandleLookupCreatureCommand, "", NULL },
- { "event", SEC_GAMEMASTER, &ChatHandler::HandleLookupEventCommand, "", NULL },
- { "faction", SEC_ADMINISTRATOR, &ChatHandler::HandleLookupFactionCommand, "", NULL },
- { "item", SEC_ADMINISTRATOR, &ChatHandler::HandleLookupItemCommand, "", NULL },
- { "itemset", SEC_ADMINISTRATOR, &ChatHandler::HandleLookupItemSetCommand, "", NULL },
- { "object", SEC_ADMINISTRATOR, &ChatHandler::HandleLookupObjectCommand, "", NULL },
- { "quest", SEC_ADMINISTRATOR, &ChatHandler::HandleLookupQuestCommand, "", NULL },
- { "player", SEC_GAMEMASTER, NULL, "", lookupPlayerCommandTable },
- { "skill", SEC_ADMINISTRATOR, &ChatHandler::HandleLookupSkillCommand, "", NULL },
- { "spell", SEC_ADMINISTRATOR, &ChatHandler::HandleLookupSpellCommand, "", NULL },
- { "tele", SEC_MODERATOR, &ChatHandler::HandleLookupTeleCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "area", SEC_MODERATOR, true, &ChatHandler::HandleLookupAreaCommand, "", NULL },
+ { "creature", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLookupCreatureCommand, "", NULL },
+ { "event", SEC_GAMEMASTER, true, &ChatHandler::HandleLookupEventCommand, "", NULL },
+ { "faction", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLookupFactionCommand, "", NULL },
+ { "item", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLookupItemCommand, "", NULL },
+ { "itemset", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLookupItemSetCommand, "", NULL },
+ { "object", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLookupObjectCommand, "", NULL },
+ { "quest", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLookupQuestCommand, "", NULL },
+ { "player", SEC_GAMEMASTER, true, NULL, "", lookupPlayerCommandTable },
+ { "skill", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLookupSkillCommand, "", NULL },
+ { "spell", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLookupSpellCommand, "", NULL },
+ { "tele", SEC_MODERATOR, true, &ChatHandler::HandleLookupTeleCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand resetCommandTable[] =
{
- { "honor", SEC_ADMINISTRATOR, &ChatHandler::HandleResetHonorCommand, "", NULL },
- { "level", SEC_ADMINISTRATOR, &ChatHandler::HandleResetLevelCommand, "", NULL },
- { "spells", SEC_ADMINISTRATOR, &ChatHandler::HandleResetSpellsCommand, "", NULL },
- { "stats", SEC_ADMINISTRATOR, &ChatHandler::HandleResetStatsCommand, "", NULL },
- { "talents", SEC_ADMINISTRATOR, &ChatHandler::HandleResetTalentsCommand, "", NULL },
- { "all", SEC_ADMINISTRATOR, &ChatHandler::HandleResetAllCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "honor", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetHonorCommand, "", NULL },
+ { "level", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetLevelCommand, "", NULL },
+ { "spells", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetSpellsCommand, "", NULL },
+ { "stats", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetStatsCommand, "", NULL },
+ { "talents", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetTalentsCommand, "", NULL },
+ { "all", SEC_ADMINISTRATOR, false, &ChatHandler::HandleResetAllCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand castCommandTable[] =
{
- { "back", SEC_ADMINISTRATOR, &ChatHandler::HandleCastBackCommand, "", NULL },
- { "dist", SEC_ADMINISTRATOR, &ChatHandler::HandleCastDistCommand, "", NULL },
- { "self", SEC_ADMINISTRATOR, &ChatHandler::HandleCastSelfCommand, "", NULL },
- { "target", SEC_ADMINISTRATOR, &ChatHandler::HandleCastTargetCommand, "", NULL },
- { "", SEC_ADMINISTRATOR, &ChatHandler::HandleCastCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "back", SEC_ADMINISTRATOR, false, &ChatHandler::HandleCastBackCommand, "", NULL },
+ { "dist", SEC_ADMINISTRATOR, false, &ChatHandler::HandleCastDistCommand, "", NULL },
+ { "self", SEC_ADMINISTRATOR, false, &ChatHandler::HandleCastSelfCommand, "", NULL },
+ { "target", SEC_ADMINISTRATOR, false, &ChatHandler::HandleCastTargetCommand, "", NULL },
+ { "", SEC_ADMINISTRATOR, false, &ChatHandler::HandleCastCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand pdumpCommandTable[] =
{
- { "load", SEC_ADMINISTRATOR, &ChatHandler::HandleLoadPDumpCommand, "", NULL },
- { "write", SEC_ADMINISTRATOR, &ChatHandler::HandleWritePDumpCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "load", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLoadPDumpCommand, "", NULL },
+ { "write", SEC_ADMINISTRATOR, true, &ChatHandler::HandleWritePDumpCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand listCommandTable[] =
{
- { "creature", SEC_ADMINISTRATOR, &ChatHandler::HandleListCreatureCommand, "", NULL },
- { "item", SEC_ADMINISTRATOR, &ChatHandler::HandleListItemCommand, "", NULL },
- { "object", SEC_ADMINISTRATOR, &ChatHandler::HandleListObjectCommand, "", NULL },
- { "auras", SEC_ADMINISTRATOR, &ChatHandler::HandleListAurasCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "creature", SEC_ADMINISTRATOR, true, &ChatHandler::HandleListCreatureCommand, "", NULL },
+ { "item", SEC_ADMINISTRATOR, true, &ChatHandler::HandleListItemCommand, "", NULL },
+ { "object", SEC_ADMINISTRATOR, true, &ChatHandler::HandleListObjectCommand, "", NULL },
+ { "auras", SEC_ADMINISTRATOR, false, &ChatHandler::HandleListAurasCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand teleCommandTable[] =
{
- { "add", SEC_ADMINISTRATOR, &ChatHandler::HandleAddTeleCommand, "", NULL },
- { "del", SEC_ADMINISTRATOR, &ChatHandler::HandleDelTeleCommand, "", NULL },
- { "name", SEC_MODERATOR, &ChatHandler::HandleNameTeleCommand, "", NULL },
- { "group", SEC_MODERATOR, &ChatHandler::HandleGroupTeleCommand, "", NULL },
- { "", SEC_MODERATOR, &ChatHandler::HandleTeleCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "add", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAddTeleCommand, "", NULL },
+ { "del", SEC_ADMINISTRATOR, true, &ChatHandler::HandleDelTeleCommand, "", NULL },
+ { "name", SEC_MODERATOR, true, &ChatHandler::HandleNameTeleCommand, "", NULL },
+ { "group", SEC_MODERATOR, false, &ChatHandler::HandleGroupTeleCommand, "", NULL },
+ { "", SEC_MODERATOR, false, &ChatHandler::HandleTeleCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand npcCommandTable[] =
{
- { "say", SEC_MODERATOR, &ChatHandler::HandleSayCommand, "", NULL },
- { "whisper", SEC_MODERATOR, &ChatHandler::HandleNpcWhisperCommand, "", NULL },
- { "yell", SEC_MODERATOR, &ChatHandler::HandleYellCommand, "", NULL },
- { "textemote", SEC_MODERATOR, &ChatHandler::HandleTextEmoteCommand, "", NULL },
- { "add", SEC_GAMEMASTER, &ChatHandler::HandleAddSpwCommand, "", NULL },
- { "delete", SEC_GAMEMASTER, &ChatHandler::HandleDelCreatureCommand, "", NULL },
- { "spawndist", SEC_GAMEMASTER, &ChatHandler::HandleSpawnDistCommand, "", NULL },
- { "spawntime", SEC_GAMEMASTER, &ChatHandler::HandleSpawnTimeCommand, "", NULL },
- { "factionid", SEC_GAMEMASTER, &ChatHandler::HandleFactionIdCommand, "", NULL },
- { "addmove", SEC_GAMEMASTER, &ChatHandler::HandleAddMoveCommand, "", NULL },
- { "setmovetype", SEC_GAMEMASTER, &ChatHandler::HandleSetMoveTypeCommand, "", NULL },
- { "move", SEC_GAMEMASTER, &ChatHandler::HandleMoveCreatureCommand, "", NULL },
- { "changelevel", SEC_GAMEMASTER, &ChatHandler::HandleChangeLevelCommand, "", NULL },
- { "setmodel", SEC_GAMEMASTER, &ChatHandler::HandleSetModelCommand, "", NULL },
- { "additem", SEC_GAMEMASTER, &ChatHandler::HandleAddVendorItemCommand, "", NULL },
- { "delitem", SEC_GAMEMASTER, &ChatHandler::HandleDelVendorItemCommand, "", NULL },
- { "flag", SEC_GAMEMASTER, &ChatHandler::HandleNPCFlagCommand, "", NULL },
- { "changeentry", SEC_ADMINISTRATOR, &ChatHandler::HandleChangeEntryCommand, "", NULL },
- { "info", SEC_ADMINISTRATOR, &ChatHandler::HandleNpcInfoCommand, "", NULL },
- { "playemote", SEC_ADMINISTRATOR, &ChatHandler::HandlePlayEmoteCommand, "", NULL },
+ { "say", SEC_MODERATOR, false, &ChatHandler::HandleSayCommand, "", NULL },
+ { "whisper", SEC_MODERATOR, false, &ChatHandler::HandleNpcWhisperCommand, "", NULL },
+ { "yell", SEC_MODERATOR, false, &ChatHandler::HandleYellCommand, "", NULL },
+ { "textemote", SEC_MODERATOR, false, &ChatHandler::HandleTextEmoteCommand, "", NULL },
+ { "add", SEC_GAMEMASTER, false, &ChatHandler::HandleAddSpwCommand, "", NULL },
+ { "delete", SEC_GAMEMASTER, false, &ChatHandler::HandleDelCreatureCommand, "", NULL },
+ { "spawndist", SEC_GAMEMASTER, false, &ChatHandler::HandleSpawnDistCommand, "", NULL },
+ { "spawntime", SEC_GAMEMASTER, false, &ChatHandler::HandleSpawnTimeCommand, "", NULL },
+ { "factionid", SEC_GAMEMASTER, false, &ChatHandler::HandleFactionIdCommand, "", NULL },
+ { "addmove", SEC_GAMEMASTER, false, &ChatHandler::HandleAddMoveCommand, "", NULL },
+ { "setmovetype", SEC_GAMEMASTER, false, &ChatHandler::HandleSetMoveTypeCommand, "", NULL },
+ { "move", SEC_GAMEMASTER, false, &ChatHandler::HandleMoveCreatureCommand, "", NULL },
+ { "changelevel", SEC_GAMEMASTER, false, &ChatHandler::HandleChangeLevelCommand, "", NULL },
+ { "setmodel", SEC_GAMEMASTER, false, &ChatHandler::HandleSetModelCommand, "", NULL },
+ { "additem", SEC_GAMEMASTER, false, &ChatHandler::HandleAddVendorItemCommand, "", NULL },
+ { "delitem", SEC_GAMEMASTER, false, &ChatHandler::HandleDelVendorItemCommand, "", NULL },
+ { "flag", SEC_GAMEMASTER, false, &ChatHandler::HandleNPCFlagCommand, "", NULL },
+ { "changeentry", SEC_ADMINISTRATOR, false, &ChatHandler::HandleChangeEntryCommand, "", NULL },
+ { "info", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNpcInfoCommand, "", NULL },
+ { "playemote", SEC_ADMINISTRATOR, false, &ChatHandler::HandlePlayEmoteCommand, "", NULL },
//{ TODO: fix or remove this commands
- { "name", SEC_GAMEMASTER, &ChatHandler::HandleNameCommand, "", NULL },
- { "subname", SEC_GAMEMASTER, &ChatHandler::HandleSubNameCommand, "", NULL },
- { "addweapon", SEC_ADMINISTRATOR, &ChatHandler::HandleAddWeaponCommand, "", NULL },
+ { "name", SEC_GAMEMASTER, false, &ChatHandler::HandleNameCommand, "", NULL },
+ { "subname", SEC_GAMEMASTER, false, &ChatHandler::HandleSubNameCommand, "", NULL },
+ { "addweapon", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAddWeaponCommand, "", NULL },
//}
- { NULL, 0, NULL, "", NULL }
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand goCommandTable[] =
{
- { "grid", SEC_MODERATOR, &ChatHandler::HandleGoGridCommand, "", NULL },
- { "creature", SEC_GAMEMASTER, &ChatHandler::HandleGoCreatureCommand, "", NULL },
- { "object", SEC_GAMEMASTER, &ChatHandler::HandleGoObjectCommand, "", NULL },
- { "trigger", SEC_GAMEMASTER, &ChatHandler::HandleGoTriggerCommand, "", NULL },
- { "graveyard", SEC_GAMEMASTER, &ChatHandler::HandleGoGraveyardCommand, "", NULL },
- { "zonexy", SEC_MODERATOR, &ChatHandler::HandleGoZoneXYCommand, "", NULL },
- { "xy", SEC_MODERATOR, &ChatHandler::HandleGoXYCommand, "", NULL },
- { "xyz", SEC_MODERATOR, &ChatHandler::HandleGoXYZCommand, "", NULL },
- { "", SEC_MODERATOR, &ChatHandler::HandleGoXYZCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "grid", SEC_MODERATOR, false, &ChatHandler::HandleGoGridCommand, "", NULL },
+ { "creature", SEC_GAMEMASTER, false, &ChatHandler::HandleGoCreatureCommand, "", NULL },
+ { "object", SEC_GAMEMASTER, false, &ChatHandler::HandleGoObjectCommand, "", NULL },
+ { "trigger", SEC_GAMEMASTER, false, &ChatHandler::HandleGoTriggerCommand, "", NULL },
+ { "graveyard", SEC_GAMEMASTER, false, &ChatHandler::HandleGoGraveyardCommand, "", NULL },
+ { "zonexy", SEC_MODERATOR, false, &ChatHandler::HandleGoZoneXYCommand, "", NULL },
+ { "xy", SEC_MODERATOR, false, &ChatHandler::HandleGoXYCommand, "", NULL },
+ { "xyz", SEC_MODERATOR, false, &ChatHandler::HandleGoXYZCommand, "", NULL },
+ { "", SEC_MODERATOR, false, &ChatHandler::HandleGoXYZCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand gobjectCommandTable[] =
{
- { "add", SEC_GAMEMASTER, &ChatHandler::HandleGameObjectCommand, "", NULL },
- { "delete", SEC_GAMEMASTER, &ChatHandler::HandleDelObjectCommand, "", NULL },
- { "target", SEC_GAMEMASTER, &ChatHandler::HandleTargetObjectCommand, "", NULL },
- { "turn", SEC_GAMEMASTER, &ChatHandler::HandleTurnObjectCommand, "", NULL },
- { "move", SEC_GAMEMASTER, &ChatHandler::HandleMoveObjectCommand, "", NULL },
- { "near", SEC_ADMINISTRATOR, &ChatHandler::HandleNearObjectCommand, "", NULL },
- { "state", SEC_ADMINISTRATOR, &ChatHandler::HandleObjectStateCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "add", SEC_GAMEMASTER, false, &ChatHandler::HandleGameObjectCommand, "", NULL },
+ { "delete", SEC_GAMEMASTER, false, &ChatHandler::HandleDelObjectCommand, "", NULL },
+ { "target", SEC_GAMEMASTER, false, &ChatHandler::HandleTargetObjectCommand, "", NULL },
+ { "turn", SEC_GAMEMASTER, false, &ChatHandler::HandleTurnObjectCommand, "", NULL },
+ { "move", SEC_GAMEMASTER, false, &ChatHandler::HandleMoveObjectCommand, "", NULL },
+ { "near", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNearObjectCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand questCommandTable[] =
{
- { "add", SEC_ADMINISTRATOR, &ChatHandler::HandleAddQuest, "", NULL },
- { "complete", SEC_ADMINISTRATOR, &ChatHandler::HandleCompleteQuest, "", NULL },
- { "remove", SEC_ADMINISTRATOR, &ChatHandler::HandleRemoveQuest, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "add", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAddQuest, "", NULL },
+ { "complete", SEC_ADMINISTRATOR, false, &ChatHandler::HandleCompleteQuest, "", NULL },
+ { "remove", SEC_ADMINISTRATOR, false, &ChatHandler::HandleRemoveQuest, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand gmCommandTable[] =
{
- { "chat", SEC_MODERATOR, &ChatHandler::HandleGMChatCommand, "", NULL },
- { "list", SEC_PLAYER, &ChatHandler::HandleGMListCommand, "", NULL },
- { "visible", SEC_MODERATOR, &ChatHandler::HandleVisibleCommand, "", NULL },
- { "fly", SEC_ADMINISTRATOR, &ChatHandler::HandleFlyModeCommand, "", NULL },
- { "", SEC_MODERATOR, &ChatHandler::HandleGMmodeCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "chat", SEC_MODERATOR, false, &ChatHandler::HandleGMChatCommand, "", NULL },
+ { "ingame", SEC_PLAYER, true, &ChatHandler::HandleGMListIngameCommand, "", NULL },
+ { "list", SEC_ADMINISTRATOR, true, &ChatHandler::HandleGMListFullCommand, "", NULL },
+ { "visible", SEC_MODERATOR, false, &ChatHandler::HandleVisibleCommand, "", NULL },
+ { "fly", SEC_ADMINISTRATOR, false, &ChatHandler::HandleFlyModeCommand, "", NULL },
+ { "", SEC_MODERATOR, false, &ChatHandler::HandleGMmodeCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand instanceCommandTable[] =
{
- { "listbinds", SEC_MODERATOR, &ChatHandler::HandleInstanceListBindsCommand, "", NULL },
- { "unbind", SEC_MODERATOR, &ChatHandler::HandleInstanceUnbindCommand, "", NULL },
- { "stats", SEC_MODERATOR, &ChatHandler::HandleInstanceStatsCommand, "", NULL },
- { "savedata", SEC_MODERATOR, &ChatHandler::HandleInstanceSaveDataCommand, "", NULL },
- { NULL, 0, NULL, "", NULL }
+ { "listbinds", SEC_MODERATOR, false, &ChatHandler::HandleInstanceListBindsCommand, "", NULL },
+ { "unbind", SEC_MODERATOR, false, &ChatHandler::HandleInstanceUnbindCommand, "", NULL },
+ { "stats", SEC_MODERATOR, true, &ChatHandler::HandleInstanceStatsCommand, "", NULL },
+ { "savedata", SEC_MODERATOR, false, &ChatHandler::HandleInstanceSaveDataCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
- { "gm", SEC_MODERATOR, NULL, "", gmCommandTable },
- { "npc", SEC_MODERATOR, NULL, "", npcCommandTable },
- { "go", SEC_MODERATOR, NULL, "", goCommandTable },
- { "learn", SEC_MODERATOR, NULL, "", learnCommandTable },
- { "modify", SEC_MODERATOR, NULL, "", modifyCommandTable },
- { "debug", SEC_MODERATOR, NULL, "", debugCommandTable },
- { "tele", SEC_MODERATOR, NULL, "", teleCommandTable },
- { "event", SEC_GAMEMASTER, NULL, "", eventCommandTable },
- { "gobject", SEC_GAMEMASTER, NULL, "", gobjectCommandTable },
- { "honor", SEC_GAMEMASTER, NULL, "", honorCommandTable },
- { "wp", SEC_GAMEMASTER, NULL, "", wpCommandTable },
- { "quest", SEC_ADMINISTRATOR, NULL, "", questCommandTable },
- { "reload", SEC_ADMINISTRATOR, NULL, "", reloadCommandTable },
- { "list", SEC_ADMINISTRATOR, NULL, "", listCommandTable },
- { "lookup", SEC_ADMINISTRATOR, NULL, "", lookupCommandTable },
- { "pdump", SEC_ADMINISTRATOR, NULL, "", pdumpCommandTable },
- { "group", SEC_ADMINISTRATOR, NULL, "", groupCommandTable },
- { "guild", SEC_ADMINISTRATOR, NULL, "", guildCommandTable },
- { "cast", SEC_ADMINISTRATOR, NULL, "", castCommandTable },
- { "reset", SEC_ADMINISTRATOR, NULL, "", resetCommandTable },
- { "instance", SEC_ADMINISTRATOR, NULL, "", instanceCommandTable },
- { "server", SEC_ADMINISTRATOR, NULL, "", serverCommandTable },
-
- { "aura", SEC_ADMINISTRATOR, &ChatHandler::HandleAuraCommand, "", NULL },
- { "unaura", SEC_ADMINISTRATOR, &ChatHandler::HandleUnAuraCommand, "", NULL },
- { "acct", SEC_PLAYER, &ChatHandler::HandleAcctCommand, "", NULL },
- { "nameannounce", SEC_MODERATOR, &ChatHandler::HandleNameAnnounceCommand, "", NULL },
- { "announce", SEC_ADMINISTRATOR, &ChatHandler::HandleAnnounceCommand, "", NULL },
- { "notify", SEC_MODERATOR, &ChatHandler::HandleNotifyCommand, "", NULL },
- { "goname", SEC_MODERATOR, &ChatHandler::HandleGonameCommand, "", NULL },
- { "namego", SEC_MODERATOR, &ChatHandler::HandleNamegoCommand, "", NULL },
- { "groupgo", SEC_MODERATOR, &ChatHandler::HandleGroupgoCommand, "", NULL },
- { "commands", SEC_PLAYER, &ChatHandler::HandleCommandsCommand, "", NULL },
- { "demorph", SEC_GAMEMASTER, &ChatHandler::HandleDeMorphCommand, "", NULL },
- { "die", SEC_ADMINISTRATOR, &ChatHandler::HandleDieCommand, "", NULL },
- { "revive", SEC_ADMINISTRATOR, &ChatHandler::HandleReviveCommand, "", NULL },
- { "dismount", SEC_PLAYER, &ChatHandler::HandleDismountCommand, "", NULL },
- { "gps", SEC_MODERATOR, &ChatHandler::HandleGPSCommand, "", NULL },
- { "guid", SEC_GAMEMASTER, &ChatHandler::HandleGUIDCommand, "", NULL },
- { "help", SEC_PLAYER, &ChatHandler::HandleHelpCommand, "", NULL },
- { "itemmove", SEC_GAMEMASTER, &ChatHandler::HandleItemMoveCommand, "", NULL },
- { "cooldown", SEC_ADMINISTRATOR, &ChatHandler::HandleCooldownCommand, "", NULL },
- { "unlearn", SEC_ADMINISTRATOR, &ChatHandler::HandleUnLearnCommand, "", NULL },
- { "distance", SEC_ADMINISTRATOR, &ChatHandler::HandleGetDistanceCommand, "", NULL },
- { "recall", SEC_MODERATOR, &ChatHandler::HandleRecallCommand, "", NULL },
- { "save", SEC_PLAYER, &ChatHandler::HandleSaveCommand, "", NULL },
- { "saveall", SEC_MODERATOR, &ChatHandler::HandleSaveAllCommand, "", NULL },
- { "kick", SEC_GAMEMASTER, &ChatHandler::HandleKickPlayerCommand, "", NULL },
- { "security", SEC_ADMINISTRATOR, &ChatHandler::HandleSecurityCommand, "", NULL },
- { "ban", SEC_ADMINISTRATOR, &ChatHandler::HandleBanCommand, "", NULL },
- { "unban", SEC_ADMINISTRATOR, &ChatHandler::HandleUnBanCommand, "", NULL },
- { "baninfo", SEC_ADMINISTRATOR, &ChatHandler::HandleBanInfoCommand, "", NULL },
- { "banlist", SEC_ADMINISTRATOR, &ChatHandler::HandleBanListCommand, "", NULL },
- { "plimit", SEC_ADMINISTRATOR, &ChatHandler::HandlePLimitCommand, "", NULL },
- { "start", SEC_PLAYER, &ChatHandler::HandleStartCommand, "", NULL },
- { "taxicheat", SEC_MODERATOR, &ChatHandler::HandleTaxiCheatCommand, "", NULL },
- { "allowmove", SEC_ADMINISTRATOR, &ChatHandler::HandleAllowMovementCommand, "", NULL },
- { "linkgrave", SEC_ADMINISTRATOR, &ChatHandler::HandleLinkGraveCommand, "", NULL },
- { "neargrave", SEC_ADMINISTRATOR, &ChatHandler::HandleNearGraveCommand, "", NULL },
- { "transport", SEC_ADMINISTRATOR, &ChatHandler::HandleSpawnTransportCommand, "", NULL },
- { "explorecheat", SEC_ADMINISTRATOR, &ChatHandler::HandleExploreCheatCommand, "", NULL },
- { "hover", SEC_ADMINISTRATOR, &ChatHandler::HandleHoverCommand, "", NULL },
- { "levelup", SEC_ADMINISTRATOR, &ChatHandler::HandleLevelUpCommand, "", NULL },
- { "showarea", SEC_ADMINISTRATOR, &ChatHandler::HandleShowAreaCommand, "", NULL },
- { "hidearea", SEC_ADMINISTRATOR, &ChatHandler::HandleHideAreaCommand, "", NULL },
- { "additem", SEC_ADMINISTRATOR, &ChatHandler::HandleAddItemCommand, "", NULL },
- { "additemset", SEC_ADMINISTRATOR, &ChatHandler::HandleAddItemSetCommand, "", NULL },
- { "bank", SEC_ADMINISTRATOR, &ChatHandler::HandleBankCommand, "", NULL },
- { "wchange", SEC_ADMINISTRATOR, &ChatHandler::HandleChangeWeather, "", NULL },
- { "ticket", SEC_GAMEMASTER, &ChatHandler::HandleTicketCommand, "", NULL },
- { "delticket", SEC_GAMEMASTER, &ChatHandler::HandleDelTicketCommand, "", NULL },
- { "maxskill", SEC_ADMINISTRATOR, &ChatHandler::HandleMaxSkillCommand, "", NULL },
- { "setskill", SEC_ADMINISTRATOR, &ChatHandler::HandleSetSkillCommand, "", NULL },
- { "whispers", SEC_MODERATOR, &ChatHandler::HandleWhispersCommand, "", NULL },
- { "pinfo", SEC_GAMEMASTER, &ChatHandler::HandlePInfoCommand, "", NULL },
- { "password", SEC_PLAYER, &ChatHandler::HandlePasswordCommand, "", NULL },
- { "lockaccount", SEC_PLAYER, &ChatHandler::HandleLockAccountCommand, "", NULL },
- { "respawn", SEC_ADMINISTRATOR, &ChatHandler::HandleRespawnCommand, "", NULL },
- { "sendmail", SEC_MODERATOR, &ChatHandler::HandleSendMailCommand, "", NULL },
- { "rename", SEC_GAMEMASTER, &ChatHandler::HandleRenameCommand, "", NULL },
- { "loadscripts", SEC_ADMINISTRATOR, &ChatHandler::HandleLoadScriptsCommand, "", NULL },
- { "mute", SEC_GAMEMASTER, &ChatHandler::HandleMuteCommand, "", NULL },
- { "unmute", SEC_GAMEMASTER, &ChatHandler::HandleUnmuteCommand, "", NULL },
- { "movegens", SEC_ADMINISTRATOR, &ChatHandler::HandleMovegensCommand, "", NULL },
- { "cometome", SEC_ADMINISTRATOR, &ChatHandler::HandleComeToMeCommand, "", NULL },
- { "damage", SEC_ADMINISTRATOR, &ChatHandler::HandleDamageCommand, "", NULL },
- { "combatstop", SEC_GAMEMASTER, &ChatHandler::HandleCombatStopCommand, "", NULL },
- { "freeze", SEC_ADMINISTRATOR, &ChatHandler::HandleFreezeCommand, "", NULL },
- { "unfreeze", SEC_ADMINISTRATOR, &ChatHandler::HandleUnFreezeCommand, "", NULL },
- { "listfreeze", SEC_ADMINISTRATOR, &ChatHandler::HandleListFreezeCommand, "", NULL },
- { "flusharenapoints", SEC_ADMINISTRATOR, &ChatHandler::HandleFlushArenaPointsCommand, "", NULL },
-
- { NULL, 0, NULL, "", NULL }
+ { "account", SEC_PLAYER, true, NULL, "", accountCommandTable },
+ { "gm", SEC_MODERATOR, true, NULL, "", gmCommandTable },
+ { "npc", SEC_MODERATOR, false, NULL, "", npcCommandTable },
+ { "go", SEC_MODERATOR, false, NULL, "", goCommandTable },
+ { "learn", SEC_MODERATOR, false, NULL, "", learnCommandTable },
+ { "modify", SEC_MODERATOR, false, NULL, "", modifyCommandTable },
+ { "debug", SEC_MODERATOR, false, NULL, "", debugCommandTable },
+ { "tele", SEC_MODERATOR, true, NULL, "", teleCommandTable },
+ { "event", SEC_GAMEMASTER, false, NULL, "", eventCommandTable },
+ { "gobject", SEC_GAMEMASTER, false, NULL, "", gobjectCommandTable },
+ { "honor", SEC_GAMEMASTER, false, NULL, "", honorCommandTable },
+ { "wp", SEC_GAMEMASTER, false, NULL, "", wpCommandTable },
+ { "quest", SEC_ADMINISTRATOR, false, NULL, "", questCommandTable },
+ { "reload", SEC_ADMINISTRATOR, true, NULL, "", reloadCommandTable },
+ { "list", SEC_ADMINISTRATOR, true, NULL, "", listCommandTable },
+ { "lookup", SEC_ADMINISTRATOR, true, NULL, "", lookupCommandTable },
+ { "pdump", SEC_ADMINISTRATOR, true, NULL, "", pdumpCommandTable },
+ { "guild", SEC_ADMINISTRATOR, true, NULL, "", guildCommandTable },
+ { "cast", SEC_ADMINISTRATOR, false, NULL, "", castCommandTable },
+ { "reset", SEC_ADMINISTRATOR, false, NULL, "", resetCommandTable },
+ { "instance", SEC_ADMINISTRATOR, true, NULL, "", instanceCommandTable },
+ { "server", SEC_ADMINISTRATOR, true, NULL, "", serverCommandTable },
+
+ { "aura", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAuraCommand, "", NULL },
+ { "unaura", SEC_ADMINISTRATOR, false, &ChatHandler::HandleUnAuraCommand, "", NULL },
+ { "announce", SEC_MODERATOR, true, &ChatHandler::HandleAnnounceCommand, "", NULL },
+ { "notify", SEC_MODERATOR, true, &ChatHandler::HandleNotifyCommand, "", NULL },
+ { "goname", SEC_MODERATOR, false, &ChatHandler::HandleGonameCommand, "", NULL },
+ { "namego", SEC_MODERATOR, false, &ChatHandler::HandleNamegoCommand, "", NULL },
+ { "groupgo", SEC_MODERATOR, false, &ChatHandler::HandleGroupgoCommand, "", NULL },
+ { "commands", SEC_PLAYER, true, &ChatHandler::HandleCommandsCommand, "", NULL },
+ { "demorph", SEC_GAMEMASTER, false, &ChatHandler::HandleDeMorphCommand, "", NULL },
+ { "die", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDieCommand, "", NULL },
+ { "revive", SEC_ADMINISTRATOR, false, &ChatHandler::HandleReviveCommand, "", NULL },
+ { "dismount", SEC_PLAYER, false, &ChatHandler::HandleDismountCommand, "", NULL },
+ { "gps", SEC_MODERATOR, false, &ChatHandler::HandleGPSCommand, "", NULL },
+ { "guid", SEC_GAMEMASTER, false, &ChatHandler::HandleGUIDCommand, "", NULL },
+ { "help", SEC_PLAYER, true, &ChatHandler::HandleHelpCommand, "", NULL },
+ { "itemmove", SEC_GAMEMASTER, false, &ChatHandler::HandleItemMoveCommand, "", NULL },
+ { "cooldown", SEC_ADMINISTRATOR, false, &ChatHandler::HandleCooldownCommand, "", NULL },
+ { "unlearn", SEC_ADMINISTRATOR, false, &ChatHandler::HandleUnLearnCommand, "", NULL },
+ { "distance", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGetDistanceCommand, "", NULL },
+ { "recall", SEC_MODERATOR, false, &ChatHandler::HandleRecallCommand, "", NULL },
+ { "save", SEC_PLAYER, false, &ChatHandler::HandleSaveCommand, "", NULL },
+ { "saveall", SEC_MODERATOR, true, &ChatHandler::HandleSaveAllCommand, "", NULL },
+ { "kick", SEC_GAMEMASTER, true, &ChatHandler::HandleKickPlayerCommand, "", NULL },
+ { "ban", SEC_ADMINISTRATOR, true, NULL, "", banCommandTable },
+ { "unban", SEC_ADMINISTRATOR, true, NULL, "", unbanCommandTable },
+ { "baninfo", SEC_ADMINISTRATOR, false, NULL, "", baninfoCommandTable },
+ { "banlist", SEC_ADMINISTRATOR, true, NULL, "", banlistCommandTable },
+ { "plimit", SEC_ADMINISTRATOR, true, &ChatHandler::HandlePLimitCommand, "", NULL },
+ { "start", SEC_PLAYER, false, &ChatHandler::HandleStartCommand, "", NULL },
+ { "taxicheat", SEC_MODERATOR, false, &ChatHandler::HandleTaxiCheatCommand, "", NULL },
+ { "allowmove", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAllowMovementCommand, "", NULL },
+ { "linkgrave", SEC_ADMINISTRATOR, false, &ChatHandler::HandleLinkGraveCommand, "", NULL },
+ { "neargrave", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNearGraveCommand, "", NULL },
+ { "explorecheat", SEC_ADMINISTRATOR, false, &ChatHandler::HandleExploreCheatCommand, "", NULL },
+ { "hover", SEC_ADMINISTRATOR, false, &ChatHandler::HandleHoverCommand, "", NULL },
+ { "levelup", SEC_ADMINISTRATOR, false, &ChatHandler::HandleLevelUpCommand, "", NULL },
+ { "showarea", SEC_ADMINISTRATOR, false, &ChatHandler::HandleShowAreaCommand, "", NULL },
+ { "hidearea", SEC_ADMINISTRATOR, false, &ChatHandler::HandleHideAreaCommand, "", NULL },
+ { "additem", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAddItemCommand, "", NULL },
+ { "additemset", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAddItemSetCommand, "", NULL },
+ { "bank", SEC_ADMINISTRATOR, false, &ChatHandler::HandleBankCommand, "", NULL },
+ { "wchange", SEC_ADMINISTRATOR, false, &ChatHandler::HandleChangeWeather, "", NULL },
+ { "ticket", SEC_GAMEMASTER, true, &ChatHandler::HandleTicketCommand, "", NULL },
+ { "delticket", SEC_GAMEMASTER, true, &ChatHandler::HandleDelTicketCommand, "", NULL },
+ { "maxskill", SEC_ADMINISTRATOR, false, &ChatHandler::HandleMaxSkillCommand, "", NULL },
+ { "setskill", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSetSkillCommand, "", NULL },
+ { "whispers", SEC_MODERATOR, false, &ChatHandler::HandleWhispersCommand, "", NULL },
+ { "pinfo", SEC_GAMEMASTER, true, &ChatHandler::HandlePInfoCommand, "", NULL },
+ { "password", SEC_PLAYER, false, &ChatHandler::HandlePasswordCommand, "", NULL },
+ { "lockaccount", SEC_PLAYER, false, &ChatHandler::HandleLockAccountCommand, "", NULL },
+ { "respawn", SEC_ADMINISTRATOR, false, &ChatHandler::HandleRespawnCommand, "", NULL },
+ { "sendmail", SEC_MODERATOR, false, &ChatHandler::HandleSendMailCommand, "", NULL },
+ { "rename", SEC_GAMEMASTER, true, &ChatHandler::HandleRenameCommand, "", NULL },
+ { "loadscripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLoadScriptsCommand, "", NULL },
+ { "mute", SEC_GAMEMASTER, true, &ChatHandler::HandleMuteCommand, "", NULL },
+ { "unmute", SEC_GAMEMASTER, true, &ChatHandler::HandleUnmuteCommand, "", NULL },
+ { "movegens", SEC_ADMINISTRATOR, false, &ChatHandler::HandleMovegensCommand, "", NULL },
+ { "cometome", SEC_ADMINISTRATOR, false, &ChatHandler::HandleComeToMeCommand, "", NULL },
+ { "damage", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDamageCommand, "", NULL },
+ { "combatstop", SEC_GAMEMASTER, false, &ChatHandler::HandleCombatStopCommand, "", NULL },
+ { "chardelete", SEC_CONSOLE, true, &ChatHandler::HandleCombatStopCommand, "", NULL },
+ { "sendmessage", SEC_ADMINISTRATOR, true, &ChatHandler::HandleSendMessageCommand, "", NULL },
+
+ { NULL, 0, false, NULL, "", NULL }
};
if(load_command_table)
@@ -529,11 +581,17 @@ ChatCommand * ChatHandler::getCommandTable()
return commandTable;
}
-const char *ChatHandler::GetTrinityString(int32 entry)
+const char *ChatHandler::GetTrinityString(int32 entry) const
{
return m_session->GetTrinityString(entry);
}
+bool ChatHandler::isAvailable(ChatCommand const& cmd) const
+{
+ // check security level only for simple command (without child commands)
+ return m_session->GetSecurity() >= cmd.SecurityLevel;
+}
+
bool ChatHandler::hasStringAbbr(const char* name, const char* part)
{
// non "" command
@@ -578,6 +636,7 @@ void ChatHandler::SendSysMessage(const char *str)
void ChatHandler::SendGlobalSysMessage(const char *str)
{
+ // Chat output
WorldPacket data;
// need copy to prevent corruption by strtok call in LineFromMessage original string
@@ -653,8 +712,8 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, const char* text, st
return true;
}
- // check security level only for simple command (without child commands)
- if(m_session->GetSecurity() < table[i].SecurityLevel)
+ // must be available and have handler
+ if(!table[i].Handler || !isAvailable(table[i]))
continue;
SetSentErrorMessage(false);
@@ -663,11 +722,15 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, const char* text, st
{
if(table[i].SecurityLevel > SEC_PLAYER)
{
- Player* p = m_session->GetPlayer();
- uint64 sel_guid = p->GetSelection();
- sLog.outCommand("Command: %s [Player: %s (Account: %u) X: %f Y: %f Z: %f Map: %u Selected: %s (GUID: %u)]",
- fullcmd.c_str(),p->GetName(),m_session->GetAccountId(),p->GetPositionX(),p->GetPositionY(),p->GetPositionZ(),p->GetMapId(),
- GetLogNameForGuid(sel_guid),GUID_LOPART(sel_guid));
+ // chat case
+ if(m_session)
+ {
+ Player* p = m_session->GetPlayer();
+ uint64 sel_guid = p->GetSelection();
+ sLog.outCommand("Command: %s [Player: %s (Account: %u) X: %f Y: %f Z: %f Map: %u Selected: %s (GUID: %u)]",
+ fullcmd.c_str(),p->GetName(),m_session->GetAccountId(),p->GetPositionX(),p->GetPositionY(),p->GetPositionZ(),p->GetMapId(),
+ GetLogNameForGuid(sel_guid),GUID_LOPART(sel_guid));
+ }
}
}
// some commands have custom error messages. Don't send the default one in these cases.
@@ -693,18 +756,24 @@ int ChatHandler::ParseCommands(const char* text)
//if(m_session->GetSecurity() == 0)
// return 0;
- if(text[0] != '!' && text[0] != '.')
- return 0;
+ /// chat case (.command or !command format)
+ if(m_session)
+ {
+ if(text[0] != '!' && text[0] != '.')
+ return 0;
+ }
- // ignore single . and ! in line
+ /// ignore single . and ! in line
if(strlen(text) < 2)
return 0;
- // ignore messages staring from many dots.
+ /// ignore messages staring from many dots.
if(text[0] == '.' && text[1] == '.' || text[0] == '!' && text[1] == '!')
return 0;
- ++text;
+ /// skip first . or ! (in console allowed use command with . and ! and without its)
+ if(text[0] == '!' || text[0] == '.')
+ ++text;
std::string fullcmd = text; // original `text` can't be used. It content destroyed in command code processing.
@@ -719,13 +788,16 @@ bool ChatHandler::ShowHelpForSubCommands(ChatCommand *table, char const* cmd, ch
std::string list;
for(uint32 i = 0; table[i].Name != NULL; ++i)
{
- if(m_session->GetSecurity() < table[i].SecurityLevel)
+ // must be available (ignore handler existence for show command with possibe avalable subcomands
+ if(!isAvailable(table[i]))
continue;
if( *subcmd && !hasStringAbbr(table[i].Name, subcmd))
continue;
(list += "\n ") += table[i].Name;
+ if(table[i].ChildCommands)
+ list += " ...";
}
if(list.empty())
@@ -748,7 +820,8 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand *table, const char* cmd)
{
for(uint32 i = 0; table[i].Name != NULL; ++i)
{
- if(m_session->GetSecurity() < table[i].SecurityLevel)
+ // must be available (ignore handler existence for show command with possibe avalable subcomands
+ if(!isAvailable(table[i]))
continue;
if( !hasStringAbbr(table[i].Name, cmd) )
@@ -777,7 +850,8 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand *table, const char* cmd)
{
for(uint32 i = 0; table[i].Name != NULL; ++i)
{
- if(m_session->GetSecurity() < table[i].SecurityLevel)
+ // must be available (ignore handler existence for show command with possibe avalable subcomands
+ if(!isAvailable(table[i]))
continue;
if(strlen(table[i].Name))
@@ -878,6 +952,9 @@ void ChatHandler::FillMessageData( WorldPacket *data, WorldSession* session, uin
Player * ChatHandler::getSelectedPlayer()
{
+ if(!m_session)
+ return NULL;
+
uint64 guid = m_session->GetPlayer()->GetSelection();
if (guid == 0)
@@ -888,6 +965,9 @@ Player * ChatHandler::getSelectedPlayer()
Unit* ChatHandler::getSelectedUnit()
{
+ if(!m_session)
+ return NULL;
+
uint64 guid = m_session->GetPlayer()->GetSelection();
if (guid == 0)
@@ -898,6 +978,9 @@ Unit* ChatHandler::getSelectedUnit()
Creature* ChatHandler::getSelectedCreature()
{
+ if(!m_session)
+ return NULL;
+
return ObjectAccessor::GetCreatureOrPet(*m_session->GetPlayer(),m_session->GetPlayer()->GetSelection());
}
@@ -1036,6 +1119,9 @@ char const *fmtstring( char const *format, ... )
GameObject* ChatHandler::GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid,uint32 entry)
{
+ if(!m_session)
+ return NULL;
+
Player* pl = m_session->GetPlayer();
GameObject* obj = ObjectAccessor::GetGameObject(*pl, MAKE_NEW_GUID(lowguid, entry, HIGHGUID_GAMEOBJECT));
@@ -1110,6 +1196,23 @@ GameTele const* ChatHandler::extractGameTeleFromLink(char* text)
return objmgr.GetGameTele(cId);
}
+const char *CliHandler::GetTrinityString(int32 entry) const
+{
+ return objmgr.GetTrinityStringForDBCLocale(entry);
+}
+
+bool CliHandler::isAvailable(ChatCommand const& cmd) const
+{
+ // skip non-console commands in console case
+ return cmd.AllowConsole;
+}
+
+void CliHandler::SendSysMessage(const char *str)
+{
+ m_print(str);
+ m_print("\r\n");
+}
+
bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, Group* &group, uint64 &guid, bool offline)
{
plr = NULL;
diff --git a/src/game/Chat.h b/src/game/Chat.h
index 89a6478a11d..72f0a2ec79e 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -35,6 +35,7 @@ class ChatCommand
public:
const char * Name;
uint32 SecurityLevel; // function pointer required correct align (use uint32)
+ bool AllowConsole;
bool (ChatHandler::*Handler)(const char* args);
std::string Help;
ChatCommand * ChildCommands;
@@ -61,9 +62,9 @@ class ChatHandler
static char* LineFromMessage(char*& pos) { char* start = strtok(pos,"\n"); pos = NULL; return start; }
- const char *GetTrinityString(int32 entry);
+ virtual const char *GetTrinityString(int32 entry) const;
- void SendSysMessage( const char *str);
+ virtual void SendSysMessage( const char *str);
void SendSysMessage( int32 entry);
void PSendSysMessage( const char *format, ...) ATTR_PRINTF(2,3);
void PSendSysMessage( int32 entry, ... );
@@ -71,7 +72,12 @@ class ChatHandler
int ParseCommands(const char* text);
protected:
+ explicit ChatHandler() : m_session(NULL) {} // for CLI subclass
+
bool hasStringAbbr(const char* name, const char* part);
+
+ virtual bool isAvailable(ChatCommand const& cmd) const;
+
void SendGlobalSysMessage(const char *str);
bool ExecuteCommandInTable(ChatCommand *table, const char* text, std::string fullcommand);
@@ -80,14 +86,22 @@ class ChatHandler
ChatCommand* getCommandTable();
+ bool HandleAccountCommand(const char* args);
+ bool HandleAccountCreateCommand(const char* args);
+ bool HandleAccountDeleteCommand(const char* args);
+ bool HandleAccountOnlineListCommand(const char* args);
+ bool HandleAccountSetAddonCommand(const char* args);
+ bool HandleAccountSetGmLevelCommand(const char* args);
+ bool HandleAccountSetPasswordCommand(const char* args);
+
bool HandleHelpCommand(const char* args);
bool HandleCommandsCommand(const char* args);
- bool HandleAcctCommand(const char* args);
bool HandleStartCommand(const char* args);
bool HandleInfoCommand(const char* args);
bool HandleDismountCommand(const char* args);
bool HandleSaveCommand(const char* args);
- bool HandleGMListCommand(const char* args);
+ bool HandleGMListIngameCommand(const char* args);
+ bool HandleGMListFullCommand(const char* args);
bool HandleNamegoCommand(const char* args);
bool HandleGonameCommand(const char* args);
@@ -208,6 +222,12 @@ class ChatHandler
bool HandleInstanceStatsCommand(const char* args);
bool HandleInstanceSaveDataCommand(const char * args);
+ bool HandleServerCorpsesCommand(const char* args);
+ bool HandleServerExitCommand(const char* args);
+ bool HandleServerMotdCommand(const char* args);
+ bool HandleServerSetMotdCommand(const char* args);
+ bool HandleServerSetLogLevelCommand(const char* args);
+
bool HandleAddHonorCommand(const char* args);
bool HandleHonorAddKillCommand(const char* args);
bool HandleUpdateHonorFieldsCommand(const char* args);
@@ -257,10 +277,19 @@ class ChatHandler
bool HandleUnFreezeCommand(const char *args);
bool HandleListFreezeCommand(const char* args);
- bool HandleBanCommand(const char* args);
- bool HandleUnBanCommand(const char* args);
- bool HandleBanInfoCommand(const char* args);
- bool HandleBanListCommand(const char* args);
+ bool HandleCharacterDeleteCommand(const char* args);
+ bool HandleBanAccountCommand(const char* args);
+ bool HandleBanCharacterCommand(const char* args);
+ bool HandleBanIPCommand(const char* args);
+ bool HandleUnBanAccountCommand(const char* args);
+ bool HandleUnBanCharacterCommand(const char* args);
+ bool HandleUnBanIPCommand(const char* args);
+ bool HandleBanInfoAccountCommand(const char* args);
+ bool HandleBanInfoCharacterCommand(const char* args);
+ bool HandleBanInfoIPCommand(const char* args);
+ bool HandleBanListAccountCommand(const char* args);
+ bool HandleBanListCharacterCommand(const char* args);
+ bool HandleBanListIPCommand(const char* args);
bool HandleIdleRestartCommand(const char* args);
bool HandleIdleShutDownCommand(const char* args);
bool HandleShutDownCommand(const char* args);
@@ -387,6 +416,7 @@ class ChatHandler
bool HandleCastTargetCommand(const char *args);
bool HandleComeToMeCommand(const char *args);
bool HandleCombatStopCommand(const char *args);
+ bool HandleSendMessageCommand(const char * args);
bool HandleFlushArenaPointsCommand(const char *args);
//! Development Commands
@@ -415,19 +445,39 @@ class ChatHandler
GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid,uint32 entry);
- WorldSession * m_session;
-
// Utility methods for commands
void ShowTicket(uint64 guid, char const* text, char const* time);
uint32 GetTicketIDByNum(uint32 num);
bool LookupPlayerSearchCommand(QueryResult* result, int32 limit);
+ bool HandleBanListHelper(QueryResult* result);
+ bool HandleBanHelper(BanMode mode,char const* args);
+ bool HandleBanInfoHelper(uint32 accountid, char const* accountname);
+ bool HandleUnBanHelper(BanMode mode,char const* args);
void SetSentErrorMessage(bool val){ sentErrorMessage = val;};
private:
+ WorldSession * m_session; // != NULL for chat command call and NULL for CLI command
+
// common global flag
static bool load_command_table;
bool sentErrorMessage;
};
-#endif
+
+class CliHandler : public ChatHandler
+{
+ public:
+ typedef void Print(char const*);
+ explicit CliHandler(Print* zprint) : m_print(zprint) {}
+
+ // overwrite functions
+ const char *GetTrinityString(int32 entry) const;
+ bool isAvailable(ChatCommand const& cmd) const;
+ void SendSysMessage(const char *str);
+
+ private:
+ Print* m_print;
+};
char const *fmtstring( char const *format, ... );
+
+#endif
diff --git a/src/game/Language.h b/src/game/Language.h
index b759f603ff6..b4b4ae5e12f 100644
--- a/src/game/Language.h
+++ b/src/game/Language.h
@@ -79,7 +79,10 @@ enum TrinityStrings
LANG_NPC_TAINER_HELLO = 51,
LANG_COMMAND_INVALID_ITEM_COUNT = 52,
LANG_COMMAND_MAIL_ITEMS_LIMIT = 53,
- // Room for more level 0 54-99 not used
+ LANG_NEW_PASSWORDS_NOT_MATCH = 54,
+ LANG_PASSWORD_TOO_LONG = 55,
+ LANG_MOTD_CURRENT = 56,
+ // Room for more level 0 57-99 not used
// level 1 chat
LANG_GLOBAL_NOTIFY = 100,
@@ -163,7 +166,8 @@ enum TrinityStrings
LANG_MAIL_SENT = 169,
LANG_SOUND_NOT_EXIST = 170,
- // Room for more level 1 171-199 not used
+ LANG_TELEPORTED_TO_BY_CONSOLE = 171,
+ // Room for more level 1 172-199 not used
// level 2 chat
LANG_NO_SELECTION = 200,
@@ -331,7 +335,8 @@ enum TrinityStrings
LANG_UNBAN_UNBANNED = 411,
LANG_UNBAN_ERROR = 412,
- LANG_BANINFO_NOACCOUNT = 413,
+ LANG_ACCOUNT_NOT_EXIST = 413,
+
LANG_BANINFO_NOCHARACTER = 414,
LANG_BANINFO_NOIP = 415,
LANG_BANINFO_NOACCOUNTBAN = 416,
@@ -444,16 +449,16 @@ enum TrinityStrings
LANG_ITEMLIST_AUCTION = 510,
LANG_WRONG_LINK_TYPE = 511,
- LANG_ITEM_LIST = 512,
- LANG_QUEST_LIST = 513,
- LANG_CREATURE_ENTRY_LIST = 514,
- LANG_CREATURE_LIST = 515,
- LANG_GO_ENTRY_LIST = 516,
- LANG_GO_LIST = 517,
- LANG_ITEMSET_LIST = 518,
+ LANG_ITEM_LIST_CHAT = 512,
+ LANG_QUEST_LIST_CHAT = 513,
+ LANG_CREATURE_ENTRY_LIST_CHAT = 514,
+ LANG_CREATURE_LIST_CHAT = 515,
+ LANG_GO_ENTRY_LIST_CHAT = 516,
+ LANG_GO_LIST_CHAT = 517,
+ LANG_ITEMSET_LIST_CHAT = 518,
LANG_TELE_LIST = 519,
LANG_SPELL_LIST = 520,
- LANG_SKILL_LIST = 521,
+ LANG_SKILL_LIST_CHAT = 521,
LANG_GAMEOBJECT_NOT_EXIST = 522,
@@ -526,7 +531,7 @@ enum TrinityStrings
LANG_COMMAND_NEAROBJMESSAGE = 581,
LANG_COMMAND_RAWPAWNTIMES = 582,
- LANG_EVENT_ENTRY_LIST = 583,
+ LANG_EVENT_ENTRY_LIST_CHAT = 583,
LANG_NOEVENTFOUND = 584,
LANG_EVENT_NOT_EXIST = 585,
LANG_EVENT_INFO = 586,
@@ -538,6 +543,14 @@ enum TrinityStrings
LANG_MOVEGENS_DISTRACT = 591,
LANG_COMMAND_LEARN_ALL_RECIPES = 592,
+ LANG_BANLIST_ACCOUNTS = 593,
+ LANG_BANLIST_ACCOUNTS_HEADER = 594,
+ LANG_BANLIST_IPS = 595,
+ LANG_BANLIST_IPS_HEADER = 596,
+ LANG_GMLIST = 597,
+ LANG_GMLIST_HEADER = 598,
+ LANG_GMLIST_EMPTY = 599,
+ // End Level 3 list, continued at 1100
// Battleground
LANG_BG_A_WINS = 600,
@@ -658,14 +671,52 @@ enum TrinityStrings
LANG_ACCOUNT_FOR_PLAYER_NOT_FOUND = 809,
// Room for in-game strings 810-999 not used
- // FREE IDS 1000-9999
- LANG_COMMAND_FREEZE = 1000,
- LANG_COMMAND_FREEZE_ERROR = 1001,
- LANG_COMMAND_FREEZE_WRONG = 1002,
- LANG_COMMAND_UNFREEZE = 1003,
- LANG_COMMAND_NO_FROZEN_PLAYERS = 1004,
- LANG_COMMAND_LIST_FREEZE = 1005,
- LANG_COMMAND_FROZEN_PLAYERS = 1006,
+ // Level 4 (CLI only commands)
+ LANG_COMMAND_EXIT = 1000,
+ LANG_ACCOUNT_DELETED = 1001,
+ LANG_ACCOUNT_NOT_DELETED_SQL_ERROR = 1002,
+ LANG_ACCOUNT_NOT_DELETED = 1003,
+ LANG_ACCOUNT_CREATED = 1004,
+ LANG_ACCOUNT_TOO_LONG = 1005,
+ LANG_ACCOUNT_ALREADY_EXIST = 1006,
+ LANG_ACCOUNT_NOT_CREATED_SQL_ERROR = 1007,
+ LANG_ACCOUNT_NOT_CREATED = 1008,
+ LANG_CHARACTER_DELETED = 1009,
+ LANG_ACCOUNT_LIST_HEADER = 1010,
+ LANG_ACCOUNT_LIST_ERROR = 1011,
+ // Room for more level 4 1012-1099 not used
+
+ // Level 3 (continue)
+ LANG_MOTD_NEW = 1100,
+ LANG_ACCOUNT_SETADDON = 1101,
+ LANG_SENDMESSAGE = 1102,
+ LANG_EVENT_ENTRY_LIST_CONSOLE = 1103,
+ LANG_CREATURE_ENTRY_LIST_CONSOLE = 1104,
+ LANG_ITEM_LIST_CONSOLE = 1105,
+ LANG_ITEMSET_LIST_CONSOLE = 1106,
+ LANG_GO_ENTRY_LIST_CONSOLE = 1107,
+ LANG_QUEST_LIST_CONSOLE = 1108,
+ LANG_SKILL_LIST_CONSOLE = 1109,
+ LANG_CREATURE_LIST_CONSOLE = 1110,
+ LANG_GO_LIST_CONSOLE = 1111,
+ LANG_FILE_OPEN_FAIL = 1112,
+ LANG_ACCOUNT_CHARACTER_LIST_FULL = 1113,
+ LANG_DUMP_BROKEN = 1114,
+ LANG_INVALID_CHARACTER_NAME = 1115,
+ LANG_INVALID_CHARACTER_GUID = 1116,
+ LANG_CHARACTER_GUID_IN_USE = 1117,
+ LANG_ITEMLIST_GUILD = 1118,
+ // Room for more level 3 1119-1199 not used
+
+ // Trinity custom patches 5000-9999
+ LANG_COMMAND_FREEZE = 5000,
+ LANG_COMMAND_FREEZE_ERROR = 5001,
+ LANG_COMMAND_FREEZE_WRONG = 5002,
+ LANG_COMMAND_UNFREEZE = 5003,
+ LANG_COMMAND_NO_FROZEN_PLAYERS = 5004,
+ LANG_COMMAND_LIST_FREEZE = 5005,
+ LANG_COMMAND_FROZEN_PLAYERS = 5006,
+ // Room for more Trinity custom patches 5007-9999
// Use for not-in-svn patches 10000-10999
// opvp hp
diff --git a/src/game/Level0.cpp b/src/game/Level0.cpp
index 3e02d6ca7f4..bea6dd1f91c 100644
--- a/src/game/Level0.cpp
+++ b/src/game/Level0.cpp
@@ -35,15 +35,17 @@
bool ChatHandler::HandleHelpCommand(const char* args)
{
- if(!*args)
- return false;
-
- char* cmd = strtok((char*)args, " ");
+ char* cmd = strtok((char*)args, " ");
if(!cmd)
- return false;
-
- if(!ShowHelpForCommand(getCommandTable(), cmd))
- SendSysMessage(LANG_NO_HELP_CMD);
+ {
+ ShowHelpForCommand(getCommandTable(), "help");
+ ShowHelpForCommand(getCommandTable(), "");
+ }
+ else
+ {
+ if(!ShowHelpForCommand(getCommandTable(), cmd))
+ SendSysMessage(LANG_NO_HELP_CMD);
+ }
return true;
}
@@ -54,7 +56,7 @@ bool ChatHandler::HandleCommandsCommand(const char* args)
return true;
}
-bool ChatHandler::HandleAcctCommand(const char* /*args*/)
+bool ChatHandler::HandleAccountCommand(const char* /*args*/)
{
uint32 gmlevel = m_session->GetSecurity();
PSendSysMessage(LANG_ACCOUNT_LEVEL, gmlevel);
@@ -141,7 +143,7 @@ bool ChatHandler::HandleSaveCommand(const char* /*args*/)
return true;
}
-bool ChatHandler::HandleGMListCommand(const char* /*args*/)
+bool ChatHandler::HandleGMListIngameCommand(const char* /*args*/)
{
bool first = true;
@@ -149,8 +151,9 @@ bool ChatHandler::HandleGMListCommand(const char* /*args*/)
HashMapHolder<Player>::MapType::iterator itr = m.begin();
for(; itr != m.end(); ++itr)
{
- if( itr->second->GetSession()->GetSecurity() && (itr->second->isGameMaster() || sWorld.getConfig(CONFIG_GM_IN_GM_LIST) ) &&
- itr->second->IsVisibleGloballyFor(m_session->GetPlayer()) )
+ if (itr->second->GetSession()->GetSecurity() &&
+ (itr->second->isGameMaster() || sWorld.getConfig(CONFIG_GM_IN_GM_LIST)) &&
+ (!m_session || itr->second->IsVisibleGloballyFor(m_session->GetPlayer())) )
{
if(first)
{
@@ -177,17 +180,24 @@ bool ChatHandler::HandlePasswordCommand(const char* args)
char *new_pass = strtok (NULL, " ");
char *new_pass_c = strtok (NULL, " ");
- if( !old_pass || !new_pass || !new_pass_c )
+ if (!old_pass || !new_pass || !new_pass_c)
return false;
std::string password_old = old_pass;
std::string password_new = new_pass;
std::string password_new_c = new_pass_c;
- if(!accmgr.CheckPassword(m_session->GetAccountId(), password_old) || password_new != password_new_c)
+ if (password_new != password_new_c)
{
- SendSysMessage(LANG_COMMAND_WRONGOLDPASSWORD);
- SetSentErrorMessage(true);
+ SendSysMessage (LANG_NEW_PASSWORDS_NOT_MATCH);
+ SetSentErrorMessage (true);
+ return false;
+ }
+
+ if (!accmgr.CheckPassword (m_session->GetAccountId(), password_old))
+ {
+ SendSysMessage (LANG_COMMAND_WRONGOLDPASSWORD);
+ SetSentErrorMessage (true);
return false;
}
@@ -198,6 +208,11 @@ bool ChatHandler::HandlePasswordCommand(const char* args)
case AOR_OK:
SendSysMessage(LANG_COMMAND_PASSWORD);
break;
+ case AOR_PASS_TOO_LONG:
+ SendSysMessage(LANG_PASSWORD_TOO_LONG);
+ SetSentErrorMessage(true);
+ return false;
+ case AOR_NAME_NOT_EXIST: // not possible case, don't want get account name for output
default:
SendSysMessage(LANG_COMMAND_NOTCHANGEPASSWORD);
SetSentErrorMessage(true);
@@ -233,3 +248,10 @@ bool ChatHandler::HandleLockAccountCommand(const char* args)
SendSysMessage(LANG_USE_BOL);
return true;
}
+
+/// Display the 'Message of the day' for the realm
+bool ChatHandler::HandleServerMotdCommand(const char* /*args*/)
+{
+ PSendSysMessage(LANG_MOTD_CURRENT, sWorld.GetMotd());
+ return true;
+}
diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp
index 9d3ddb3aff8..0e8579b5c00 100644
--- a/src/game/Level1.cpp
+++ b/src/game/Level1.cpp
@@ -1692,62 +1692,65 @@ bool ChatHandler::HandleTeleCommand(const char * args)
bool ChatHandler::HandleLookupAreaCommand(const char* args)
{
- if(!*args)
+ if (!*args)
return false;
std::string namepart = args;
std::wstring wnamepart;
- if(!Utf8toWStr(namepart,wnamepart))
+ if (!Utf8toWStr (namepart,wnamepart))
return false;
uint32 counter = 0; // Counter for figure out that we found smth.
// converting string that we try to find to lower case
- wstrToLower( wnamepart );
+ wstrToLower (wnamepart);
// Search in AreaTable.dbc
- for (uint32 areaflag = 0; areaflag < sAreaStore.GetNumRows(); ++areaflag)
+ for (uint32 areaflag = 0; areaflag < sAreaStore.GetNumRows (); ++areaflag)
{
- AreaTableEntry const *areaEntry = sAreaStore.LookupEntry(areaflag);
- if(areaEntry)
+ AreaTableEntry const *areaEntry = sAreaStore.LookupEntry (areaflag);
+ if (areaEntry)
{
- int loc = m_session->GetSessionDbcLocale();
+ int loc = m_session ? m_session->GetSessionDbcLocale () : sWorld.GetDefaultDbcLocale();
std::string name = areaEntry->area_name[loc];
- if(name.empty())
+ if (name.empty())
continue;
- if(!Utf8FitTo(name, wnamepart))
+ if (!Utf8FitTo (name, wnamepart))
{
loc = 0;
for(; loc < MAX_LOCALE; ++loc)
{
- if(loc==m_session->GetSessionDbcLocale())
+ if (m_session && loc==m_session->GetSessionDbcLocale ())
continue;
name = areaEntry->area_name[loc];
- if(name.empty())
+ if (name.empty ())
continue;
- if (Utf8FitTo(name, wnamepart))
+ if (Utf8FitTo (name, wnamepart))
break;
}
}
- if(loc < MAX_LOCALE)
+ if (loc < MAX_LOCALE)
{
// send area in "id - [name]" format
std::ostringstream ss;
- ss << areaEntry->ID << " - |cffffffff|Harea:" << areaEntry->ID << "|h[" << name << " " << localeNames[loc]<< "]|h|r";
+ if (m_session)
+ ss << areaEntry->ID << " - |cffffffff|Harea:" << areaEntry->ID << "|h[" << name << " " << localeNames[loc]<< "]|h|r";
+ else
+ ss << areaEntry->ID << " - " << name << " " << localeNames[loc];
- SendSysMessage(ss.str().c_str());
+ SendSysMessage (ss.str ().c_str());
++counter;
}
}
}
- if (counter == 0) // if counter == 0 then we found nth
- SendSysMessage(LANG_COMMAND_NOAREAFOUND);
+ if (counter == 0) // if counter == 0 then we found nth
+ SendSysMessage (LANG_COMMAND_NOAREAFOUND);
return true;
}
@@ -1760,6 +1763,7 @@ bool ChatHandler::HandleLookupTeleCommand(const char * args)
SetSentErrorMessage(true);
return false;
}
+
char const* str = strtok((char*)args, " ");
if(!str)
return false;
@@ -1773,9 +1777,9 @@ bool ChatHandler::HandleLookupTeleCommand(const char * args)
// converting string that we try to find to lower case
wstrToLower( wnamepart );
- GameTeleMap const & teleMap = objmgr.GetGameTeleMap();
-
std::ostringstream reply;
+
+ GameTeleMap const & teleMap = objmgr.GetGameTeleMap();
for(GameTeleMap::const_iterator itr = teleMap.begin(); itr != teleMap.end(); ++itr)
{
GameTele const* tele = &itr->second;
@@ -1783,11 +1787,10 @@ bool ChatHandler::HandleLookupTeleCommand(const char * args)
if(tele->wnameLow.find(wnamepart) == std::wstring::npos)
continue;
- reply << " |cffffffff|Htele:";
- reply << itr->first;
- reply << "|h[";
- reply << tele->name;
- reply << "]|h|r\n";
+ if (m_session)
+ reply << " |cffffffff|Htele:" << itr->first << "|h[" << tele->name << "]|h|r\n";
+ else
+ reply << " " << itr->first << " " << tele->name << "\n";
}
if(reply.str().empty())
@@ -2072,8 +2075,13 @@ bool ChatHandler::HandleNameTeleCommand(const char * args)
PSendSysMessage(LANG_TELEPORTING_TO, chr->GetName(),"", tele->name.c_str());
- if (m_session->GetPlayer()->IsVisibleGloballyFor(chr))
- ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, m_session->GetPlayer()->GetName());
+ if (m_session)
+ {
+ if(m_session->GetPlayer()->IsVisibleGloballyFor(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, m_session->GetPlayer()->GetName());
+ }
+ else
+ ChatHandler(chr).SendSysMessage(LANG_TELEPORTED_TO_BY_CONSOLE);
// stop flight if need
if(chr->isInFlight())
diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp
index a449f15dfc3..4164c5cde3c 100644
--- a/src/game/Level2.cpp
+++ b/src/game/Level2.cpp
@@ -42,6 +42,7 @@
#include <iostream>
#include <fstream>
#include <map>
+#include "GlobalEvents.h"
static uint32 ReputationRankStrIndex[MAX_REPUTATION_RANK] =
{
@@ -99,7 +100,7 @@ bool ChatHandler::HandleMuteCommand(const char* args)
security = accmgr.GetSecurity(account_id);
}
- if(security >= m_session->GetSecurity())
+ if(m_session && security >= m_session->GetSecurity())
{
SendSysMessage(LANG_YOURS_SECURITY_IS_LOW);
SetSentErrorMessage(true);
@@ -165,7 +166,7 @@ bool ChatHandler::HandleUnmuteCommand(const char* args)
security = accmgr.GetSecurity(account_id);
}
- if(security >= m_session->GetSecurity())
+ if(m_session && security >= m_session->GetSecurity())
{
SendSysMessage(LANG_YOURS_SECURITY_IS_LOW);
SetSentErrorMessage(true);
@@ -555,38 +556,37 @@ bool ChatHandler::HandleGUIDCommand(const char* /*args*/)
bool ChatHandler::HandleLookupFactionCommand(const char* args)
{
- if(!*args)
+ if (!*args)
return false;
- Player *target = getSelectedPlayer();
- if (!target)
- {
- SendSysMessage(LANG_NO_CHAR_SELECTED);
- SetSentErrorMessage(true);
- return false;
- }
+ // Can be NULL at console call
+ Player *target = getSelectedPlayer ();
std::string namepart = args;
std::wstring wnamepart;
- if(!Utf8toWStr(namepart,wnamepart))
+ if (!Utf8toWStr (namepart,wnamepart))
return false;
// converting string that we try to find to lower case
- wstrToLower( wnamepart );
+ wstrToLower (wnamepart);
uint32 counter = 0; // Counter for figure out that we found smth.
- for (uint32 id = 0; id < sFactionStore.GetNumRows(); id++)
- //for(FactionStateList::const_iterator itr = target->m_factions.begin(); itr != target->m_factions.end(); ++itr)
+ for (uint32 id = 0; id < sFactionStore.GetNumRows(); ++id)
{
- FactionEntry const *factionEntry = sFactionStore.LookupEntry(id);
- //FactionEntry const *factionEntry = sFactionStore.LookupEntry(itr->second.ID);
+ FactionEntry const *factionEntry = sFactionStore.LookupEntry (id);
if (factionEntry)
{
- FactionStateList::const_iterator repItr = target->m_factions.find(factionEntry->reputationListID);
+ FactionState const* repState = NULL;
+ if(target)
+ {
+ FactionStateList::const_iterator repItr = target->m_factions.find (factionEntry->reputationListID);
+ if(repItr != target->m_factions.end())
+ repState = &repItr->second;
+ }
- int loc = m_session->GetSessionDbcLocale();
+ int loc = m_session ? m_session->GetSessionDbcLocale() : sWorld.GetDefaultDbcLocale();
std::string name = factionEntry->name[loc];
if(name.empty())
continue;
@@ -596,7 +596,7 @@ bool ChatHandler::HandleLookupFactionCommand(const char* args)
loc = 0;
for(; loc < MAX_LOCALE; ++loc)
{
- if(loc==m_session->GetSessionDbcLocale())
+ if(m_session && loc==m_session->GetSessionDbcLocale())
continue;
name = factionEntry->name[loc];
@@ -613,26 +613,29 @@ bool ChatHandler::HandleLookupFactionCommand(const char* args)
// send faction in "id - [faction] rank reputation [visible] [at war] [own team] [unknown] [invisible] [inactive]" format
// or "id - [faction] [no reputation]" format
std::ostringstream ss;
- ss << id << " - |cffffffff|Hfaction:" << id << "|h[" << name << " " << localeNames[loc] << "]|h|r";
+ if (m_session)
+ ss << id << " - |cffffffff|Hfaction:" << id << "|h[" << name << " " << localeNames[loc] << "]|h|r";
+ else
+ ss << id << " - " << name << " " << localeNames[loc];
- if (repItr != target->m_factions.end())
+ if (repState) // and then target!=NULL also
{
ReputationRank rank = target->GetReputationRank(factionEntry);
std::string rankName = GetTrinityString(ReputationRankStrIndex[rank]);
ss << " " << rankName << "|h|r (" << target->GetReputation(factionEntry) << ")";
- if(repItr->second.Flags & FACTION_FLAG_VISIBLE)
+ if(repState->Flags & FACTION_FLAG_VISIBLE)
ss << GetTrinityString(LANG_FACTION_VISIBLE);
- if(repItr->second.Flags & FACTION_FLAG_AT_WAR)
+ if(repState->Flags & FACTION_FLAG_AT_WAR)
ss << GetTrinityString(LANG_FACTION_ATWAR);
- if(repItr->second.Flags & FACTION_FLAG_PEACE_FORCED)
+ if(repState->Flags & FACTION_FLAG_PEACE_FORCED)
ss << GetTrinityString(LANG_FACTION_PEACE_FORCED);
- if(repItr->second.Flags & FACTION_FLAG_HIDDEN)
+ if(repState->Flags & FACTION_FLAG_HIDDEN)
ss << GetTrinityString(LANG_FACTION_HIDDEN);
- if(repItr->second.Flags & FACTION_FLAG_INVISIBLE_FORCED)
+ if(repState->Flags & FACTION_FLAG_INVISIBLE_FORCED)
ss << GetTrinityString(LANG_FACTION_INVISIBLE_FORCED);
- if(repItr->second.Flags & FACTION_FLAG_INACTIVE)
+ if(repState->Flags & FACTION_FLAG_INACTIVE)
ss << GetTrinityString(LANG_FACTION_INACTIVE);
}
else
@@ -1702,7 +1705,7 @@ bool ChatHandler::HandleKickPlayerCommand(const char *args)
return false;
}
- if(name==m_session->GetPlayer()->GetName())
+ if(m_session && name==m_session->GetPlayer()->GetName())
{
SendSysMessage(LANG_COMMAND_KICKSELF);
SetSentErrorMessage(true);
@@ -1809,7 +1812,8 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
Field* fields = result->Fetch();
username = fields[0].GetCppString();
security = fields[1].GetUInt32();
- if(m_session->GetSecurity() >= security)
+
+ if(!m_session || m_session->GetSecurity() >= security)
{
last_ip = fields[2].GetCppString();
last_login = fields[3].GetCppString();
@@ -1891,6 +1895,13 @@ bool ChatHandler::HandleTicketCommand(const char* args)
// ticket<end>
if (!px)
{
+ if(!m_session)
+ {
+ SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
size_t count;
QueryResult *result = CharacterDatabase.Query("SELECT COUNT(ticket_id) FROM character_ticket");
if(result)
@@ -1901,13 +1912,22 @@ bool ChatHandler::HandleTicketCommand(const char* args)
else
count = 0;
- PSendSysMessage(LANG_COMMAND_TICKETCOUNT, count, m_session->GetPlayer()->isAcceptTickets() ? GetTrinityString(LANG_ON) : GetTrinityString(LANG_OFF));
+ bool accept = m_session->GetPlayer()->isAcceptTickets();
+
+ PSendSysMessage(LANG_COMMAND_TICKETCOUNT, count, accept ? GetTrinityString(LANG_ON) : GetTrinityString(LANG_OFF));
return true;
}
// ticket on
if(strncmp(px,"on",3) == 0)
{
+ if(!m_session)
+ {
+ SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
m_session->GetPlayer()->SetAcceptTicket(true);
SendSysMessage(LANG_COMMAND_TICKETON);
return true;
@@ -1916,6 +1936,13 @@ bool ChatHandler::HandleTicketCommand(const char* args)
// ticket off
if(strncmp(px,"off",4) == 0)
{
+ if(!m_session)
+ {
+ SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
m_session->GetPlayer()->SetAcceptTicket(false);
SendSysMessage(LANG_COMMAND_TICKETOFF);
return true;
@@ -3590,7 +3617,12 @@ bool ChatHandler::HandleLookupEventCommand(const char* args)
if (Utf8FitTo(descr, wnamepart))
{
char const* active = activeEvents.find(id) != activeEvents.end() ? GetTrinityString(LANG_ACTIVE) : "";
- PSendSysMessage(LANG_EVENT_ENTRY_LIST,id,id,descr.c_str(),active );
+
+ if(m_session)
+ PSendSysMessage(LANG_EVENT_ENTRY_LIST_CHAT,id,id,eventData.description.c_str(),active );
+ else
+ PSendSysMessage(LANG_EVENT_ENTRY_LIST_CONSOLE,id,eventData.description.c_str(),active );
+
++counter;
}
}
@@ -3615,7 +3647,11 @@ bool ChatHandler::HandleEventActiveListCommand(const char* args)
uint32 event_id = *itr;
GameEventData const& eventData = events[event_id];
- PSendSysMessage(LANG_EVENT_ENTRY_LIST,event_id,event_id,eventData.description.c_str(),active );
+ if(m_session)
+ PSendSysMessage(LANG_EVENT_ENTRY_LIST_CHAT,event_id,event_id,eventData.description.c_str(),active );
+ else
+ PSendSysMessage(LANG_EVENT_ENTRY_LIST_CONSOLE,event_id,eventData.description.c_str(),active );
+
++counter;
}
@@ -3848,7 +3884,7 @@ bool ChatHandler::HandleLearnAllRecipesCommand(const char* args)
return false;
}
- if(!*args)
+ if (!*args)
return false;
std::wstring wnamepart;
@@ -3916,54 +3952,54 @@ bool ChatHandler::HandleLearnAllRecipesCommand(const char* args)
bool ChatHandler::HandleLookupPlayerIpCommand(const char* args)
{
- if(!*args)
+ if (!*args)
return false;
- std::string ip = strtok((char*)args, " ");
- char* limit_str = strtok(NULL, " ");
- int32 limit = limit_str ? atoi(limit_str) : -1;
+ std::string ip = strtok ((char*)args, " ");
+ char* limit_str = strtok (NULL, " ");
+ int32 limit = limit_str ? atoi (limit_str) : -1;
- loginDatabase.escape_string(ip);
+ loginDatabase.escape_string (ip);
- QueryResult* result = loginDatabase.PQuery("SELECT id,username FROM account WHERE last_ip = '%s'", ip.c_str());
+ QueryResult* result = loginDatabase.PQuery ("SELECT id,username FROM account WHERE last_ip = '%s'", ip.c_str ());
- return LookupPlayerSearchCommand(result,limit);
+ return LookupPlayerSearchCommand (result,limit);
}
bool ChatHandler::HandleLookupPlayerAccountCommand(const char* args)
{
- if(!*args)
+ if (!*args)
return false;
- std::string account = strtok((char*)args, " ");
- char* limit_str = strtok(NULL, " ");
- int32 limit = limit_str ? atoi(limit_str) : -1;
+ std::string account = strtok ((char*)args, " ");
+ char* limit_str = strtok (NULL, " ");
+ int32 limit = limit_str ? atoi (limit_str) : -1;
- if(!AccountMgr::normilizeString(account))
+ if (!AccountMgr::normilizeString (account))
return false;
- loginDatabase.escape_string(account);
+ loginDatabase.escape_string (account);
- QueryResult* result = loginDatabase.PQuery("SELECT id,username FROM account WHERE username = '%s'", account.c_str());
+ QueryResult* result = loginDatabase.PQuery ("SELECT id,username FROM account WHERE username = '%s'", account.c_str ());
- return LookupPlayerSearchCommand(result,limit);
+ return LookupPlayerSearchCommand (result,limit);
}
bool ChatHandler::HandleLookupPlayerEmailCommand(const char* args)
{
- if(!*args)
+ if (!*args)
return false;
- std::string email = strtok((char*)args, " ");
- char* limit_str = strtok(NULL, " ");
- int32 limit = limit_str ? atoi(limit_str) : -1;
+ std::string email = strtok ((char*)args, " ");
+ char* limit_str = strtok (NULL, " ");
+ int32 limit = limit_str ? atoi (limit_str) : -1;
- loginDatabase.escape_string(email);
+ loginDatabase.escape_string (email);
- QueryResult* result = loginDatabase.PQuery("SELECT id,username FROM account WHERE email = '%s'", email.c_str());
+ QueryResult* result = loginDatabase.PQuery ("SELECT id,username FROM account WHERE email = '%s'", email.c_str ());
- return LookupPlayerSearchCommand(result,limit);
+ return LookupPlayerSearchCommand (result,limit);
}
bool ChatHandler::LookupPlayerSearchCommand(QueryResult* result, int32 limit)
@@ -4009,3 +4045,10 @@ bool ChatHandler::LookupPlayerSearchCommand(QueryResult* result, int32 limit)
return true;
}
+
+/// Triggering corpses expire check in world
+bool ChatHandler::HandleServerCorpsesCommand(const char* /*args*/)
+{
+ CorpsesErase();
+ return true;
+}
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index 71ee2fbab62..c2c8645a27d 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -52,6 +52,7 @@
#include "BattleGroundMgr.h"
#include "InstanceSaveMgr.h"
#include "InstanceData.h"
+#include "AccountMgr.h"
//reload commands
bool ChatHandler::HandleReloadCommand(const char* arg)
@@ -681,56 +682,47 @@ bool ChatHandler::HandleLoadScriptsCommand(const char* args)
return true;
}
-bool ChatHandler::HandleSecurityCommand(const char* args)
+bool ChatHandler::HandleAccountSetGmLevelCommand(const char* args)
{
char* arg1 = strtok((char*)args, " ");
if( !arg1 )
return false;
- char* arg2 = 0;
+ char* arg2 = strtok(NULL, " ");
- std::string targetName;
+ std::string targetAccountName;
uint32 targetAccountId = 0;
uint32 targetSecurity = 0;
+ /// only target player different from self allowed (if targetPlayer!=NULL then not console)
Player* targetPlayer = getSelectedPlayer();
- if(targetPlayer)
+ if(targetPlayer && m_session->GetPlayer()!=targetPlayer)
{
- targetName = targetPlayer->GetName();
+ /// wrong command syntax or unexpected targeting
+ if(arg2)
+ return false;
+
targetAccountId = targetPlayer->GetSession()->GetAccountId();
targetSecurity = targetPlayer->GetSession()->GetSecurity();
- arg2 = arg1;
+ if(!accmgr.GetName(targetAccountId,targetAccountName))
+ {
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,targetAccountName.c_str());
+ SetSentErrorMessage(true);
+ return false;
+ }
}
else
{
- targetName = arg1;
- if(!normalizePlayerName(targetName))
+ targetAccountName = arg1;
+ if(!AccountMgr::normilizeString(targetAccountName))
{
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,targetAccountName.c_str());
SetSentErrorMessage(true);
return false;
}
- targetPlayer = ObjectAccessor::Instance().FindPlayerByName(targetName.c_str());
- if(targetPlayer)
- {
- targetAccountId = targetPlayer->GetSession()->GetAccountId();
- targetSecurity = targetPlayer->GetSession()->GetSecurity();
- }
- else
- {
- uint64 targetGUID = objmgr.GetPlayerGUIDByName(targetName.c_str());
- if(!targetGUID)
- {
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
- SetSentErrorMessage(true);
- return false;
- }
- targetAccountId = objmgr.GetPlayerAccountIdByGUID(targetGUID);
- targetSecurity = accmgr.GetSecurity(targetAccountId);
- }
-
- arg2 = strtok(NULL, " ");
+ targetAccountId = accmgr.GetId(targetAccountName);
+ targetSecurity = accmgr.GetSecurity(targetAccountId);
}
int32 gm = (int32)atoi(arg2);
@@ -741,8 +733,12 @@ bool ChatHandler::HandleSecurityCommand(const char* args)
return false;
}
- // can set security level only for target with less security and to less security that we have
- if(targetSecurity >= m_session->GetSecurity() || uint32(gm) >= m_session->GetSecurity() )
+ /// m_session==NULL only for console
+ uint32 plSecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE;
+
+ /// can set security level only for target with less security and to less security that we have
+ /// This is also reject self apply in fact
+ if(targetSecurity >= plSecurity || uint32(gm) >= plSecurity )
{
SendSysMessage(LANG_YOURS_SECURITY_IS_LOW);
SetSentErrorMessage(true);
@@ -751,18 +747,91 @@ bool ChatHandler::HandleSecurityCommand(const char* args)
if(targetPlayer)
{
- if( targetPlayer != m_session->GetPlayer() )
- ChatHandler(targetPlayer).PSendSysMessage(LANG_YOURS_SECURITY_CHANGED,m_session->GetPlayer()->GetName(), gm);
-
+ ChatHandler(targetPlayer).PSendSysMessage(LANG_YOURS_SECURITY_CHANGED,m_session->GetPlayer()->GetName(), gm);
targetPlayer->GetSession()->SetSecurity(gm);
}
- PSendSysMessage(LANG_YOU_CHANGE_SECURITY, targetName.c_str(), gm);
+ PSendSysMessage(LANG_YOU_CHANGE_SECURITY, targetAccountName.c_str(), gm);
loginDatabase.PExecute("UPDATE account SET gmlevel = '%i' WHERE id = '%u'", gm, targetAccountId);
return true;
}
+/// Set password for account
+bool ChatHandler::HandleAccountSetPasswordCommand(const char* args)
+{
+ if(!*args)
+ return false;
+
+ ///- Get the command line arguments
+ char *szAccount = strtok ((char*)args," ");
+ char *szPassword1 = strtok (NULL," ");
+ char *szPassword2 = strtok (NULL," ");
+
+ if (!szAccount||!szPassword1 || !szPassword2)
+ return false;
+
+ std::string account_name = szAccount;
+ if(!AccountMgr::normilizeString(account_name))
+ {
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 targetAccountId = accmgr.GetId(account_name);
+ if (!targetAccountId)
+ {
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 targetSecurity = accmgr.GetSecurity(targetAccountId);
+
+ /// m_session==NULL only for console
+ uint32 plSecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE;
+
+ /// can set password only for target with less security
+ /// This is also reject self apply in fact
+ if (targetSecurity >= plSecurity)
+ {
+ SendSysMessage (LANG_YOURS_SECURITY_IS_LOW);
+ SetSentErrorMessage (true);
+ return false;
+ }
+
+ if (strcmp(szPassword1,szPassword2))
+ {
+ SendSysMessage (LANG_NEW_PASSWORDS_NOT_MATCH);
+ SetSentErrorMessage (true);
+ return false;
+ }
+
+ AccountOpResult result = accmgr.ChangePassword(targetAccountId, szPassword1);
+
+ switch(result)
+ {
+ case AOR_OK:
+ SendSysMessage(LANG_COMMAND_PASSWORD);
+ break;
+ case AOR_NAME_NOT_EXIST:
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+ SetSentErrorMessage(true);
+ return false;
+ case AOR_PASS_TOO_LONG:
+ SendSysMessage(LANG_PASSWORD_TOO_LONG);
+ SetSentErrorMessage(true);
+ return false;
+ default:
+ SendSysMessage(LANG_COMMAND_NOTCHANGEPASSWORD);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ return true;
+}
+
bool ChatHandler::HandleAllowMovementCommand(const char* /*args*/)
{
if(sWorld.getAllowMovement())
@@ -1976,10 +2045,16 @@ bool ChatHandler::HandleListItemCommand(const char* args)
char* cId = extractKeyFromLink((char*)args,"Hitem");
if(!cId)
return false;
- uint32 item_id = atol(cId);
-
- ItemPrototype const* itemProto = item_id ? itemProto = objmgr.GetItemPrototype(item_id) : NULL;
+ uint32 item_id = atol(cId);
+ if(!item_id)
+ {
+ PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, item_id);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ ItemPrototype const* itemProto = objmgr.GetItemPrototype(item_id);
if(!itemProto)
{
PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, item_id);
@@ -2135,14 +2210,53 @@ bool ChatHandler::HandleListItemCommand(const char* args)
delete result;
}
- if(inv_count+mail_count+auc_count == 0)
+ // guild bank case
+ uint32 guild_count = 0;
+ result=CharacterDatabase.PQuery("SELECT COUNT(item_entry) FROM guild_bank_item WHERE item_entry='%u'",item_id);
+ if(result)
+ {
+ guild_count = (*result)[0].GetUInt32();
+ delete result;
+ }
+
+ result=CharacterDatabase.PQuery(
+ // 0 1 2
+ "SELECT gi.item_guid, gi.guildid, guild.name "
+ "FROM guild_bank_item AS gi, guild WHERE gi.item_entry='%u' AND gi.guildid = guild.guildid LIMIT %u ",
+ item_id,uint32(count));
+
+ if(result)
+ {
+ do
+ {
+ Field *fields = result->Fetch();
+ uint32 item_guid = fields[0].GetUInt32();
+ uint32 guild_guid = fields[1].GetUInt32();
+ std::string guild_name = fields[2].GetCppString();
+
+ char const* item_pos = "[in guild bank]";
+
+ PSendSysMessage(LANG_ITEMLIST_GUILD,item_guid,guild_name.c_str(),guild_guid,item_pos);
+ } while (result->NextRow());
+
+ int64 res_count = result->GetRowCount();
+
+ delete result;
+
+ if(count > res_count)
+ count-=res_count;
+ else if(count)
+ count = 0;
+ }
+
+ if(inv_count+mail_count+auc_count+guild_count == 0)
{
SendSysMessage(LANG_COMMAND_NOITEMFOUND);
SetSentErrorMessage(true);
return false;
}
- PSendSysMessage(LANG_COMMAND_LISTITEMMESSAGE,item_id,inv_count+mail_count+auc_count,inv_count,mail_count,auc_count);
+ PSendSysMessage(LANG_COMMAND_LISTITEMMESSAGE,item_id,inv_count+mail_count+auc_count+guild_count,inv_count,mail_count,auc_count,guild_count);
return true;
}
@@ -2152,16 +2266,21 @@ bool ChatHandler::HandleListObjectCommand(const char* args)
if(!*args)
return false;
- // number or [name] Shift-click form |color|Hgameobject_entry:go_id|h[name]|h|r
+ // number or [name] Shift-click form |color|Hgameobject_entry:go_id|h[name]|h|r
char* cId = extractKeyFromLink((char*)args,"Hgameobject_entry");
if(!cId)
return false;
uint32 go_id = atol(cId);
+ if(!go_id)
+ {
+ PSendSysMessage(LANG_COMMAND_LISTOBJINVALIDID, go_id);
+ SetSentErrorMessage(true);
+ return false;
+ }
GameObjectInfo const * gInfo = objmgr.GetGameObjectInfo(go_id);
-
- if(!go_id || !gInfo)
+ if(!gInfo)
{
PSendSysMessage(LANG_COMMAND_LISTOBJINVALIDID, go_id);
SetSentErrorMessage(true);
@@ -2174,7 +2293,6 @@ bool ChatHandler::HandleListObjectCommand(const char* args)
if(count < 0)
return false;
- Player* pl = m_session->GetPlayer();
QueryResult *result;
uint32 obj_count = 0;
@@ -2185,8 +2303,15 @@ bool ChatHandler::HandleListObjectCommand(const char* args)
delete result;
}
- result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM gameobject WHERE id = '%u' ORDER BY order_ ASC LIMIT %u",
- pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(),go_id,uint32(count));
+ if(m_session)
+ {
+ Player* pl = m_session->GetPlayer();
+ result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM gameobject WHERE id = '%u' ORDER BY order_ ASC LIMIT %u",
+ pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(),go_id,uint32(count));
+ }
+ else
+ result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map FROM gameobject WHERE id = '%u' LIMIT %u",
+ go_id,uint32(count));
if (result)
{
@@ -2199,7 +2324,10 @@ bool ChatHandler::HandleListObjectCommand(const char* args)
float z = fields[3].GetFloat();
int mapid = fields[4].GetUInt16();
- PSendSysMessage(LANG_GO_LIST, guid, guid, gInfo->name, x, y, z, mapid);
+ if (m_session)
+ PSendSysMessage(LANG_GO_LIST_CHAT, guid, guid, gInfo->name, x, y, z, mapid);
+ else
+ PSendSysMessage(LANG_GO_LIST_CONSOLE, guid, gInfo->name, x, y, z, mapid);
} while (result->NextRow());
delete result;
@@ -2238,7 +2366,7 @@ bool ChatHandler::HandleNearObjectCommand(const char* args)
if(!gInfo)
continue;
- PSendSysMessage(LANG_GO_LIST, guid, guid, gInfo->name, x, y, z, mapid);
+ PSendSysMessage(LANG_GO_LIST_CHAT, guid, guid, gInfo->name, x, y, z, mapid);
++count;
} while (result->NextRow());
@@ -2293,16 +2421,21 @@ bool ChatHandler::HandleListCreatureCommand(const char* args)
if(!*args)
return false;
- // number or [name] Shift-click form |color|Hcreature_entry:creature_id|h[name]|h|r
+ // number or [name] Shift-click form |color|Hcreature_entry:creature_id|h[name]|h|r
char* cId = extractKeyFromLink((char*)args,"Hcreature_entry");
if(!cId)
return false;
uint32 cr_id = atol(cId);
+ if(!cr_id)
+ {
+ PSendSysMessage(LANG_COMMAND_INVALIDCREATUREID, cr_id);
+ SetSentErrorMessage(true);
+ return false;
+ }
CreatureInfo const* cInfo = objmgr.GetCreatureTemplate(cr_id);
-
- if(!cr_id || !cInfo)
+ if(!cInfo)
{
PSendSysMessage(LANG_COMMAND_INVALIDCREATUREID, cr_id);
SetSentErrorMessage(true);
@@ -2315,7 +2448,6 @@ bool ChatHandler::HandleListCreatureCommand(const char* args)
if(count < 0)
return false;
- Player* pl = m_session->GetPlayer();
QueryResult *result;
uint32 cr_count = 0;
@@ -2326,8 +2458,15 @@ bool ChatHandler::HandleListCreatureCommand(const char* args)
delete result;
}
- result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM creature WHERE id = '%u' ORDER BY order_ ASC LIMIT %u",
- pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(), cr_id,uint32(count));
+ if(m_session)
+ {
+ Player* pl = m_session->GetPlayer();
+ result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM creature WHERE id = '%u' ORDER BY order_ ASC LIMIT %u",
+ pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(), cr_id,uint32(count));
+ }
+ else
+ result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map FROM creature WHERE id = '%u' LIMIT %u",
+ cr_id,uint32(count));
if (result)
{
@@ -2340,7 +2479,10 @@ bool ChatHandler::HandleListCreatureCommand(const char* args)
float z = fields[3].GetFloat();
int mapid = fields[4].GetUInt16();
- PSendSysMessage(LANG_CREATURE_LIST, guid, guid, cInfo->Name, x, y, z, mapid);
+ if (m_session)
+ PSendSysMessage(LANG_CREATURE_LIST_CHAT, guid, guid, cInfo->Name, x, y, z, mapid);
+ else
+ PSendSysMessage(LANG_CREATURE_LIST_CONSOLE, guid, cInfo->Name, x, y, z, mapid);
} while (result->NextRow());
delete result;
@@ -2373,7 +2515,7 @@ bool ChatHandler::HandleLookupItemCommand(const char* args)
if(!pProto)
continue;
- int loc_idx = m_session->GetSessionDbLocaleIndex();
+ int loc_idx = m_session ? m_session->GetSessionDbLocaleIndex() : objmgr.GetDBCLocaleIndex();
if ( loc_idx >= 0 )
{
ItemLocale const *il = objmgr.GetItemLocale(pProto->ItemId);
@@ -2385,7 +2527,10 @@ bool ChatHandler::HandleLookupItemCommand(const char* args)
if (Utf8FitTo(name, wnamepart))
{
- PSendSysMessage(LANG_ITEM_LIST, id, id, name.c_str());
+ if (m_session)
+ PSendSysMessage(LANG_ITEM_LIST_CHAT, id, id, name.c_str());
+ else
+ PSendSysMessage(LANG_ITEM_LIST_CONSOLE, id, name.c_str());
++counter;
continue;
}
@@ -2399,7 +2544,10 @@ bool ChatHandler::HandleLookupItemCommand(const char* args)
if (Utf8FitTo(name, wnamepart))
{
- PSendSysMessage(LANG_ITEM_LIST, id, id, name.c_str());
+ if (m_session)
+ PSendSysMessage(LANG_ITEM_LIST_CHAT, id, id, name.c_str());
+ else
+ PSendSysMessage(LANG_ITEM_LIST_CONSOLE, id, name.c_str());
++counter;
}
}
@@ -2432,8 +2580,8 @@ bool ChatHandler::HandleLookupItemSetCommand(const char* args)
ItemSetEntry const *set = sItemSetStore.LookupEntry(id);
if(set)
{
- int loc = m_session->GetSessionDbcLocale();
- std::string name = set->name[m_session->GetSessionDbcLocale()];
+ int loc = m_session ? m_session->GetSessionDbcLocale() : sWorld.GetDefaultDbcLocale();
+ std::string name = set->name[loc];
if(name.empty())
continue;
@@ -2442,10 +2590,10 @@ bool ChatHandler::HandleLookupItemSetCommand(const char* args)
loc = 0;
for(; loc < MAX_LOCALE; ++loc)
{
- if(loc==m_session->GetSessionDbcLocale())
+ if(m_session && loc==m_session->GetSessionDbcLocale())
continue;
- name = set->name[m_session->GetSessionDbcLocale()];
+ name = set->name[loc];
if(name.empty())
continue;
@@ -2457,7 +2605,10 @@ bool ChatHandler::HandleLookupItemSetCommand(const char* args)
if(loc < MAX_LOCALE)
{
// send item set in "id - [namedlink locale]" format
- PSendSysMessage(LANG_ITEMSET_LIST,id,id,name.c_str(),localeNames[loc]);
+ if (m_session)
+ PSendSysMessage(LANG_ITEMSET_LIST_CHAT,id,id,name.c_str(),localeNames[loc]);
+ else
+ PSendSysMessage(LANG_ITEMSET_LIST_CONSOLE,id,name.c_str(),localeNames[loc]);
++counter;
}
}
@@ -2469,16 +2620,11 @@ bool ChatHandler::HandleLookupItemSetCommand(const char* args)
bool ChatHandler::HandleLookupSkillCommand(const char* args)
{
- Player* target = getSelectedPlayer();
- if(!target)
- {
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
- SetSentErrorMessage(true);
+ if (!*args)
return false;
- }
- if(!*args)
- return false;
+ // can be NULL in console call
+ Player* target = getSelectedPlayer();
std::string namepart = args;
std::wstring wnamepart;
@@ -2497,7 +2643,7 @@ bool ChatHandler::HandleLookupSkillCommand(const char* args)
SkillLineEntry const *skillInfo = sSkillLineStore.LookupEntry(id);
if(skillInfo)
{
- int loc = m_session->GetSessionDbcLocale();
+ int loc = m_session ? m_session->GetSessionDbcLocale() : sWorld.GetDefaultDbcLocale();
std::string name = skillInfo->name[loc];
if(name.empty())
continue;
@@ -2507,7 +2653,7 @@ bool ChatHandler::HandleLookupSkillCommand(const char* args)
loc = 0;
for(; loc < MAX_LOCALE; ++loc)
{
- if(loc==m_session->GetSessionDbcLocale())
+ if(m_session && loc==m_session->GetSessionDbcLocale())
continue;
name = skillInfo->name[loc];
@@ -2521,8 +2667,15 @@ bool ChatHandler::HandleLookupSkillCommand(const char* args)
if(loc < MAX_LOCALE)
{
+ char const* knownStr = "";
+ if(target && target->HasSkill(id))
+ knownStr = GetTrinityString(LANG_KNOWN);
+
// send skill in "id - [namedlink locale]" format
- PSendSysMessage(LANG_SKILL_LIST,id,id,name.c_str(),localeNames[loc],(target->HasSkill(id) ? m_session->GetTrinityString(LANG_KNOWN) : ""));
+ if (m_session)
+ PSendSysMessage(LANG_SKILL_LIST_CHAT,id,id,name.c_str(),localeNames[loc],knownStr);
+ else
+ PSendSysMessage(LANG_SKILL_LIST_CONSOLE,id,name.c_str(),localeNames[loc],knownStr);
++counter;
}
@@ -2535,16 +2688,11 @@ bool ChatHandler::HandleLookupSkillCommand(const char* args)
bool ChatHandler::HandleLookupSpellCommand(const char* args)
{
- Player* target = getSelectedPlayer();
- if( !target )
- {
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
- SetSentErrorMessage(true);
+ if (!*args)
return false;
- }
- if(!*args)
- return false;
+ // can be NULL at console call
+ Player* target = getSelectedPlayer();
std::string namepart = args;
std::wstring wnamepart;
@@ -2563,7 +2711,7 @@ bool ChatHandler::HandleLookupSpellCommand(const char* args)
SpellEntry const *spellInfo = sSpellStore.LookupEntry(id);
if(spellInfo)
{
- int loc = m_session->GetSessionDbcLocale();
+ int loc = m_session ? m_session->GetSessionDbcLocale() : sWorld.GetDefaultDbcLocale();
std::string name = spellInfo->SpellName[loc];
if(name.empty())
continue;
@@ -2573,7 +2721,7 @@ bool ChatHandler::HandleLookupSpellCommand(const char* args)
loc = 0;
for(; loc < MAX_LOCALE; ++loc)
{
- if(loc==m_session->GetSessionDbcLocale())
+ if(m_session && loc==m_session->GetSessionDbcLocale())
continue;
name = spellInfo->SpellName[loc];
@@ -2587,14 +2735,14 @@ bool ChatHandler::HandleLookupSpellCommand(const char* args)
if(loc < MAX_LOCALE)
{
- bool known = target->HasSpell(id);
+ bool known = target && target->HasSpell(id);
bool learn = (spellInfo->Effect[0] == SPELL_EFFECT_LEARN_SPELL);
uint32 telentCost = GetTalentSpellCost(id);
bool talent = (telentCost > 0);
bool passive = IsPassiveSpell(id);
- bool active = target->HasAura(id,0) || target->HasAura(id,1) || target->HasAura(id,2);
+ bool active = target && (target->HasAura(id,0) || target->HasAura(id,1) || target->HasAura(id,2));
// unit32 used to prevent interpreting uint8 as char at output
// find rank of learned spell for learning spell, or talent rank
@@ -2602,13 +2750,19 @@ bool ChatHandler::HandleLookupSpellCommand(const char* args)
// send spell in "id - [name, rank N] [talent] [passive] [learn] [known]" format
std::ostringstream ss;
- ss << id << " - |cffffffff|Hspell:" << id << "|h[" << name;
+ if (m_session)
+ ss << id << " - |cffffffff|Hspell:" << id << "|h[" << name;
+ else
+ ss << id << " - " << name;
// include rank in link name
if(rank)
ss << GetTrinityString(LANG_SPELL_RANK) << rank;
- ss << " " << localeNames[loc] << "]|h|r";
+ if (m_session)
+ ss << " " << localeNames[loc] << "]|h|r";
+ else
+ ss << " " << localeNames[loc];
if(talent)
ss << GetTrinityString(LANG_TALENT);
@@ -2634,16 +2788,11 @@ bool ChatHandler::HandleLookupSpellCommand(const char* args)
bool ChatHandler::HandleLookupQuestCommand(const char* args)
{
- Player* target = getSelectedPlayer();
- if( !target )
- {
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
- SetSentErrorMessage(true);
+ if (!*args)
return false;
- }
- if(!*args)
- return false;
+ // can be NULL at console call
+ Player* target = getSelectedPlayer();
std::string namepart = args;
std::wstring wnamepart;
@@ -2661,7 +2810,7 @@ bool ChatHandler::HandleLookupQuestCommand(const char* args)
{
Quest * qinfo = iter->second;
- int loc_idx = m_session->GetSessionDbLocaleIndex();
+ int loc_idx = m_session ? m_session->GetSessionDbLocaleIndex() : objmgr.GetDBCLocaleIndex();
if ( loc_idx >= 0 )
{
QuestLocale const *il = objmgr.GetQuestLocale(qinfo->GetQuestId());
@@ -2673,20 +2822,28 @@ bool ChatHandler::HandleLookupQuestCommand(const char* args)
if (Utf8FitTo(title, wnamepart))
{
- QuestStatus status = target->GetQuestStatus(qinfo->GetQuestId());
-
char const* statusStr = "";
- if(status == QUEST_STATUS_COMPLETE)
+
+ if(target)
{
- if(target->GetQuestRewardStatus(qinfo->GetQuestId()))
- statusStr = GetTrinityString(LANG_COMMAND_QUEST_REWARDED);
- else
- statusStr = GetTrinityString(LANG_COMMAND_QUEST_COMPLETE);
+ QuestStatus status = target->GetQuestStatus(qinfo->GetQuestId());
+
+ if(status == QUEST_STATUS_COMPLETE)
+ {
+ if(target->GetQuestRewardStatus(qinfo->GetQuestId()))
+ statusStr = GetTrinityString(LANG_COMMAND_QUEST_REWARDED);
+ else
+ statusStr = GetTrinityString(LANG_COMMAND_QUEST_COMPLETE);
+ }
+ else if(status == QUEST_STATUS_INCOMPLETE)
+ statusStr = GetTrinityString(LANG_COMMAND_QUEST_ACTIVE);
}
- else if(status == QUEST_STATUS_INCOMPLETE)
- statusStr = GetTrinityString(LANG_COMMAND_QUEST_ACTIVE);
+
+ if (m_session)
+ PSendSysMessage(LANG_QUEST_LIST_CHAT,qinfo->GetQuestId(),qinfo->GetQuestId(),title.c_str(),statusStr);
+ else
+ PSendSysMessage(LANG_QUEST_LIST_CONSOLE,qinfo->GetQuestId(),title.c_str(),statusStr);
- PSendSysMessage(LANG_QUEST_LIST,qinfo->GetQuestId(),qinfo->GetQuestId(),title.c_str(),(status == QUEST_STATUS_COMPLETE ? GetTrinityString(LANG_COMPLETE) : (status == QUEST_STATUS_INCOMPLETE ? GetTrinityString(LANG_ACTIVE) : "") ));
++counter;
continue;
}
@@ -2700,20 +2857,28 @@ bool ChatHandler::HandleLookupQuestCommand(const char* args)
if (Utf8FitTo(title, wnamepart))
{
- QuestStatus status = target->GetQuestStatus(qinfo->GetQuestId());
-
char const* statusStr = "";
- if(status == QUEST_STATUS_COMPLETE)
+
+ if(target)
{
- if(target->GetQuestRewardStatus(qinfo->GetQuestId()))
- statusStr = GetTrinityString(LANG_COMMAND_QUEST_REWARDED);
- else
- statusStr = GetTrinityString(LANG_COMMAND_QUEST_COMPLETE);
+ QuestStatus status = target->GetQuestStatus(qinfo->GetQuestId());
+
+ if(status == QUEST_STATUS_COMPLETE)
+ {
+ if(target->GetQuestRewardStatus(qinfo->GetQuestId()))
+ statusStr = GetTrinityString(LANG_COMMAND_QUEST_REWARDED);
+ else
+ statusStr = GetTrinityString(LANG_COMMAND_QUEST_COMPLETE);
+ }
+ else if(status == QUEST_STATUS_INCOMPLETE)
+ statusStr = GetTrinityString(LANG_COMMAND_QUEST_ACTIVE);
}
- else if(status == QUEST_STATUS_INCOMPLETE)
- statusStr = GetTrinityString(LANG_COMMAND_QUEST_ACTIVE);
+
+ if (m_session)
+ PSendSysMessage(LANG_QUEST_LIST_CHAT,qinfo->GetQuestId(),qinfo->GetQuestId(),title.c_str(),statusStr);
+ else
+ PSendSysMessage(LANG_QUEST_LIST_CONSOLE,qinfo->GetQuestId(),title.c_str(),statusStr);
- PSendSysMessage(LANG_QUEST_LIST,qinfo->GetQuestId(),qinfo->GetQuestId(), title.c_str(),(status == QUEST_STATUS_COMPLETE ? GetTrinityString(LANG_COMPLETE) : (status == QUEST_STATUS_INCOMPLETE ? GetTrinityString(LANG_ACTIVE) : "") ));
++counter;
}
}
@@ -2726,39 +2891,43 @@ bool ChatHandler::HandleLookupQuestCommand(const char* args)
bool ChatHandler::HandleLookupCreatureCommand(const char* args)
{
- if(!*args)
+ if (!*args)
return false;
std::string namepart = args;
std::wstring wnamepart;
// converting string that we try to find to lower case
- if(!Utf8toWStr(namepart,wnamepart))
+ if (!Utf8toWStr (namepart,wnamepart))
return false;
- wstrToLower(wnamepart);
+ wstrToLower (wnamepart);
uint32 counter = 0;
- for (uint32 id = 0; id< sCreatureStorage.MaxEntry; id++ )
+ for (uint32 id = 0; id< sCreatureStorage.MaxEntry; ++id)
{
- CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(id);
+ CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo> (id);
if(!cInfo)
continue;
- int loc_idx = m_session->GetSessionDbLocaleIndex();
- if ( loc_idx >= 0 )
+ int loc_idx = m_session ? m_session->GetSessionDbLocaleIndex() : objmgr.GetDBCLocaleIndex();
+ if (loc_idx >= 0)
{
- CreatureLocale const *cl = objmgr.GetCreatureLocale(id);
+ CreatureLocale const *cl = objmgr.GetCreatureLocale (id);
if (cl)
{
- if (cl->Name.size() > loc_idx && !cl->Name[loc_idx].empty())
+ if (cl->Name.size() > loc_idx && !cl->Name[loc_idx].empty ())
{
std::string name = cl->Name[loc_idx];
- if (Utf8FitTo(name, wnamepart))
+ if (Utf8FitTo (name, wnamepart))
{
- PSendSysMessage(LANG_CREATURE_ENTRY_LIST, id, id, name.c_str());
+ if (m_session)
+ PSendSysMessage (LANG_CREATURE_ENTRY_LIST_CHAT, id, id, name.c_str ());
+ else
+ PSendSysMessage (LANG_CREATURE_ENTRY_LIST_CONSOLE, id, name.c_str ());
+
++counter;
continue;
}
@@ -2767,18 +2936,21 @@ bool ChatHandler::HandleLookupCreatureCommand(const char* args)
}
std::string name = cInfo->Name;
- if(name.empty())
+ if (name.empty ())
continue;
if (Utf8FitTo(name, wnamepart))
{
- PSendSysMessage(LANG_CREATURE_ENTRY_LIST,id,id,name.c_str());
+ if (m_session)
+ PSendSysMessage (LANG_CREATURE_ENTRY_LIST_CHAT, id, id, name.c_str ());
+ else
+ PSendSysMessage (LANG_CREATURE_ENTRY_LIST_CONSOLE, id, name.c_str ());
++counter;
}
}
if (counter==0)
- SendSysMessage(LANG_COMMAND_NOCREATUREFOUND);
+ SendSysMessage (LANG_COMMAND_NOCREATUREFOUND);
return true;
}
@@ -2805,7 +2977,7 @@ bool ChatHandler::HandleLookupObjectCommand(const char* args)
if(!gInfo)
continue;
- int loc_idx = m_session->GetSessionDbLocaleIndex();
+ int loc_idx = m_session ? m_session->GetSessionDbLocaleIndex() : objmgr.GetDBCLocaleIndex();
if ( loc_idx >= 0 )
{
GameObjectLocale const *gl = objmgr.GetGameObjectLocale(id);
@@ -2817,7 +2989,10 @@ bool ChatHandler::HandleLookupObjectCommand(const char* args)
if (Utf8FitTo(name, wnamepart))
{
- PSendSysMessage(LANG_GO_ENTRY_LIST, id, id, name.c_str());
+ if (m_session)
+ PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, id, id, name.c_str());
+ else
+ PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, id, name.c_str());
++counter;
continue;
}
@@ -2831,7 +3006,10 @@ bool ChatHandler::HandleLookupObjectCommand(const char* args)
if(Utf8FitTo(name, wnamepart))
{
- PSendSysMessage(LANG_GO_ENTRY_LIST, id, id, name.c_str());
+ if (m_session)
+ PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, id, id, name.c_str());
+ else
+ PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, id, name.c_str());
++counter;
}
}
@@ -2856,86 +3034,82 @@ bool ChatHandler::HandleGuildCreateCommand(const char* args)
if (!*args)
return false;
- Guild *guild;
- Player * player;
- char *lname,*gname;
- std::string guildname;
-
- lname = strtok((char*)args, " ");
- gname = strtok(NULL, "");
+ char *lname = strtok ((char*)args, " ");
+ char *gname = strtok (NULL, "");
- if(!lname)
+ if (!lname)
return false;
- else if(!gname)
+
+ if (!gname)
{
- SendSysMessage(LANG_INSERT_GUILD_NAME);
- SetSentErrorMessage(true);
+ SendSysMessage (LANG_INSERT_GUILD_NAME);
+ SetSentErrorMessage (true);
return false;
}
- guildname = gname;
- player = ObjectAccessor::Instance().FindPlayerByName(lname);
+ std::string guildname = gname;
- if(!player)
+ Player* player = ObjectAccessor::Instance ().FindPlayerByName (lname);
+ if (!player)
{
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
- SetSentErrorMessage(true);
+ SendSysMessage (LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage (true);
return false;
}
- if(!player->GetGuildId())
+ if (player->GetGuildId())
{
- guild = new Guild;
- if(!guild->create(player->GetGUID(),guildname))
- {
- delete guild;
- SendSysMessage(LANG_GUILD_NOT_CREATED);
- SetSentErrorMessage(true);
- return false;
- }
+ SendSysMessage (LANG_PLAYER_IN_GUILD);
+ return true;
+ }
- objmgr.AddGuild(guild);
+ Guild *guild = new Guild;
+ if (!guild->create (player->GetGUID (),guildname))
+ {
+ delete guild;
+ SendSysMessage (LANG_GUILD_NOT_CREATED);
+ SetSentErrorMessage (true);
+ return false;
}
- else
- SendSysMessage(LANG_PLAYER_IN_GUILD);
-
+
+ objmgr.AddGuild (guild);
return true;
}
bool ChatHandler::HandleGuildInviteCommand(const char *args)
{
- if(!*args)
+ if (!*args)
return false;
- char* par1 = strtok((char*)args, " ");
+ char* par1 = strtok ((char*)args, " ");
char* par2 = strtok (NULL, "");
if(!par1 || !par2)
return false;
std::string glName = par2;
- Guild* targetGuild = objmgr.GetGuildByName(glName);
- if(!targetGuild)
+ Guild* targetGuild = objmgr.GetGuildByName (glName);
+ if (!targetGuild)
return false;
std::string plName = par1;
- if(!normalizePlayerName(plName))
+ if (!normalizePlayerName (plName))
{
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
- SetSentErrorMessage(true);
+ SendSysMessage (LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage (true);
return false;
}
uint64 plGuid = 0;
- if(Player* targetPlayer = ObjectAccessor::Instance().FindPlayerByName(plName.c_str()))
- plGuid = targetPlayer->GetGUID();
+ if (Player* targetPlayer = ObjectAccessor::Instance ().FindPlayerByName (plName.c_str ()))
+ plGuid = targetPlayer->GetGUID ();
else
- plGuid = objmgr.GetPlayerGUIDByName(plName.c_str());
+ plGuid = objmgr.GetPlayerGUIDByName (plName.c_str ());
- if(!plGuid)
+ if (!plGuid)
false;
// players's guild membership checked in AddMember before add
- if(!targetGuild->AddMember(plGuid,targetGuild->GetLowestRank()))
+ if (!targetGuild->AddMember (plGuid,targetGuild->GetLowestRank ()))
return false;
return true;
@@ -2943,107 +3117,109 @@ bool ChatHandler::HandleGuildInviteCommand(const char *args)
bool ChatHandler::HandleGuildUninviteCommand(const char *args)
{
- if(!*args)
+ if (!*args)
return false;
- char* par1 = strtok((char*)args, " ");
+ char* par1 = strtok ((char*)args, " ");
if(!par1)
return false;
+
std::string plName = par1;
- if(!normalizePlayerName(plName))
+ if (!normalizePlayerName (plName))
{
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
- SetSentErrorMessage(true);
+ SendSysMessage (LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage (true);
return false;
}
uint64 plGuid = 0;
uint32 glId = 0;
- if(Player* targetPlayer = ObjectAccessor::Instance().FindPlayerByName(plName.c_str()))
+ if (Player* targetPlayer = ObjectAccessor::Instance ().FindPlayerByName (plName.c_str ()))
{
- plGuid = targetPlayer->GetGUID();
- glId = targetPlayer->GetGuildId();
+ plGuid = targetPlayer->GetGUID ();
+ glId = targetPlayer->GetGuildId ();
}
else
{
- plGuid = objmgr.GetPlayerGUIDByName(plName.c_str());
- glId = Player::GetGuildIdFromDB(plGuid);
+ plGuid = objmgr.GetPlayerGUIDByName (plName.c_str ());
+ glId = Player::GetGuildIdFromDB (plGuid);
}
- if(!plGuid || !glId)
+ if (!plGuid || !glId)
return false;
- Guild* targetGuild = objmgr.GetGuildById(glId);
- if(!targetGuild)
+ Guild* targetGuild = objmgr.GetGuildById (glId);
+ if (!targetGuild)
return false;
- targetGuild->DelMember(plGuid);
+ targetGuild->DelMember (plGuid);
return true;
}
bool ChatHandler::HandleGuildRankCommand(const char *args)
{
- if(!*args)
+ if (!*args)
return false;
- char* par1 = strtok((char*)args, " ");
- char* par2 = strtok(NULL, " ");
- if(!par1 || !par2)
+ char* par1 = strtok ((char*)args, " ");
+ char* par2 = strtok (NULL, " ");
+ if (!par1 || !par2)
return false;
+
std::string plName = par1;
- if(!normalizePlayerName(plName))
+ if (!normalizePlayerName (plName))
{
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
- SetSentErrorMessage(true);
+ SendSysMessage (LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage (true);
return false;
}
uint64 plGuid = 0;
uint32 glId = 0;
- if(Player* targetPlayer = ObjectAccessor::Instance().FindPlayerByName(plName.c_str()))
+ if (Player* targetPlayer = ObjectAccessor::Instance ().FindPlayerByName (plName.c_str ()))
{
- plGuid = targetPlayer->GetGUID();
- glId = targetPlayer->GetGuildId();
+ plGuid = targetPlayer->GetGUID ();
+ glId = targetPlayer->GetGuildId ();
}
else
{
- plGuid = objmgr.GetPlayerGUIDByName(plName.c_str());
- glId = Player::GetGuildIdFromDB(plGuid);
+ plGuid = objmgr.GetPlayerGUIDByName (plName.c_str ());
+ glId = Player::GetGuildIdFromDB (plGuid);
}
- if(!plGuid || !glId)
+ if (!plGuid || !glId)
return false;
- Guild* targetGuild = objmgr.GetGuildById(glId);
- if(!targetGuild)
+ Guild* targetGuild = objmgr.GetGuildById (glId);
+ if (!targetGuild)
return false;
- uint32 newrank = uint32(atoi(par2));
- if(newrank > targetGuild->GetLowestRank())
+ uint32 newrank = uint32 (atoi (par2));
+ if (newrank > targetGuild->GetLowestRank ())
return false;
- targetGuild->ChangeRank(plGuid,newrank);
+ targetGuild->ChangeRank (plGuid,newrank);
return true;
}
bool ChatHandler::HandleGuildDeleteCommand(const char* args)
{
- if(!*args)
+ if (!*args)
return false;
- char* par1 = strtok((char*)args, " ");
- if(!par1)
+ char* par1 = strtok ((char*)args, " ");
+ if (!par1)
return false;
std::string gld = par1;
- Guild* targetGuild = objmgr.GetGuildByName(gld);
- if(!targetGuild)
+ Guild* targetGuild = objmgr.GetGuildByName (gld);
+ if (!targetGuild)
return false;
- targetGuild->Disband();
+ targetGuild->Disband ();
return true;
}
@@ -3471,11 +3647,6 @@ bool ChatHandler::HandleNearGraveCommand(const char* args)
return true;
}
-bool ChatHandler::HandleSpawnTransportCommand(const char* /*args*/)
-{
- return true;
-}
-
//play npc emote
bool ChatHandler::HandlePlayEmoteCommand(const char* args)
{
@@ -4720,238 +4891,470 @@ bool ChatHandler::HandleCompleteQuest(const char* args)
return true;
}
-bool ChatHandler::HandleBanCommand(const char* args)
+bool ChatHandler::HandleBanAccountCommand(const char* args)
{
- if(!args)
- return false;
+ return HandleBanHelper(BAN_ACCOUNT,args);
+}
- char* type = strtok((char*)args, " ");
+bool ChatHandler::HandleBanCharacterCommand(const char* args)
+{
+ return HandleBanHelper(BAN_CHARACTER,args);
+}
- if(!type)
+bool ChatHandler::HandleBanIPCommand(const char* args)
+{
+ return HandleBanHelper(BAN_IP,args);
+}
+
+bool ChatHandler::HandleBanHelper(BanMode mode, const char* args)
+{
+ if(!args)
return false;
- char* nameOrIP = strtok(NULL, " ");
- if(!nameOrIP)
+ char* cnameOrIP = strtok ((char*)args, " ");
+ if (!cnameOrIP)
return false;
- char* duration = strtok(NULL," ");
+ std::string nameOrIP = cnameOrIP;
+
+ char* duration = strtok (NULL," ");
if(!duration || !atoi(duration))
return false;
- char* reason = strtok(NULL,"");
+ char* reason = strtok (NULL,"");
if(!reason)
return false;
- switch(sWorld.BanAccount(type, nameOrIP, duration, reason,m_session->GetPlayerName()))
+ switch(mode)
+ {
+ case BAN_ACCOUNT:
+ if(!AccountMgr::normilizeString(nameOrIP))
+ {
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,nameOrIP.c_str());
+ SetSentErrorMessage(true);
+ return false;
+ }
+ break;
+ case BAN_CHARACTER:
+ if(!normalizePlayerName(nameOrIP))
+ {
+ SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage(true);
+ return false;
+ }
+ break;
+ case BAN_IP:
+ if(!IsIPAddress(nameOrIP.c_str()))
+ return false;
+ break;
+ }
+
+ switch(sWorld.BanAccount(mode, nameOrIP, duration, reason,m_session ? m_session->GetPlayerName() : ""))
{
case BAN_SUCCESS:
if(atoi(duration)>0)
- PSendSysMessage(LANG_BAN_YOUBANNED,nameOrIP,secsToTimeString(TimeStringToSecs(duration),true).c_str(),reason);
+ PSendSysMessage(LANG_BAN_YOUBANNED,nameOrIP.c_str(),secsToTimeString(TimeStringToSecs(duration),true).c_str(),reason);
else
- PSendSysMessage(LANG_BAN_YOUPERMBANNED,nameOrIP,reason);
+ PSendSysMessage(LANG_BAN_YOUPERMBANNED,nameOrIP.c_str(),reason);
break;
case BAN_SYNTAX_ERROR:
return false;
case BAN_NOTFOUND:
- PSendSysMessage(LANG_BAN_NOTFOUND,type,nameOrIP);
- break;
+ switch(mode)
+ {
+ default:
+ PSendSysMessage(LANG_BAN_NOTFOUND,"account",nameOrIP.c_str());
+ break;
+ case BAN_CHARACTER:
+ PSendSysMessage(LANG_BAN_NOTFOUND,"character",nameOrIP.c_str());
+ break;
+ case BAN_IP:
+ PSendSysMessage(LANG_BAN_NOTFOUND,"ip",nameOrIP.c_str());
+ break;
+
+ }
+ SetSentErrorMessage(true);
+ return false;
}
return true;
}
-bool ChatHandler::HandleUnBanCommand(const char* args)
+bool ChatHandler::HandleUnBanAccountCommand(const char* args)
{
- if(!args)
- return false;
- char* type = strtok((char*)args, " ");
- if(!type)
- return false;
- char* nameOrIP = strtok(NULL, " ");
-
- if(!nameOrIP)
- return false;
+ return HandleUnBanHelper(BAN_ACCOUNT,args);
+}
- if(sWorld.RemoveBanAccount(type,nameOrIP))
- PSendSysMessage(LANG_UNBAN_UNBANNED,nameOrIP);
- else
- PSendSysMessage(LANG_UNBAN_ERROR,nameOrIP);
+bool ChatHandler::HandleUnBanCharacterCommand(const char* args)
+{
+ return HandleUnBanHelper(BAN_CHARACTER,args);
+}
- return true;
+bool ChatHandler::HandleUnBanIPCommand(const char* args)
+{
+ return HandleUnBanHelper(BAN_IP,args);
}
-bool ChatHandler::HandleBanInfoCommand(const char* args)
+bool ChatHandler::HandleUnBanHelper(BanMode mode, const char* args)
{
if(!args)
return false;
- char* cType = strtok((char*)args, " ");
- char* cnameOrIP = strtok(NULL, "");
- if(!cType || !cnameOrIP)
+ char* cnameOrIP = strtok ((char*)args, " ");
+ if(!cnameOrIP)
return false;
std::string nameOrIP = cnameOrIP;
- std::string type = cType;
- if (!IsIPAddress(cnameOrIP) && type=="ip")
- return false;
-
- Field *fields;
- if(type != "ip")
+ switch(mode)
{
- //look the accountid up
- uint32 accountid;
- std::string accountname;
- if(type == "account")
- {
- loginDatabase.escape_string(nameOrIP);
- QueryResult *result = loginDatabase.PQuery("SELECT id, username FROM account WHERE username = '%s'",nameOrIP.c_str());
- if (!result)
+ case BAN_ACCOUNT:
+ if(!AccountMgr::normilizeString(nameOrIP))
{
- PSendSysMessage(LANG_BANINFO_NOACCOUNT);
- return true;
- }
- fields = result->Fetch();
- accountid = fields[0].GetUInt32();
- accountname = fields[1].GetCppString();
- delete result;
- }
- else if(type == "character")
- {
- if(!normalizePlayerName(nameOrIP))
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,nameOrIP.c_str());
+ SetSentErrorMessage(true);
+ return false;
+ }
+ break;
+ case BAN_CHARACTER:
+ if(!normalizePlayerName(nameOrIP))
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
+ break;
+ case BAN_IP:
+ if(!IsIPAddress(nameOrIP.c_str()))
+ return false;
+ break;
+ }
- accountid = objmgr.GetPlayerAccountIdByPlayerName (nameOrIP);
- if (!accountid)
- {
- PSendSysMessage(LANG_BANINFO_NOCHARACTER);
- return true;
- }
-
- if (!accmgr.GetName (accountid,accountname))
- {
- PSendSysMessage(LANG_BANINFO_NOCHARACTER);
- return true;
- }
- }
- else
- return false;
+ if(sWorld.RemoveBanAccount(mode,nameOrIP))
+ PSendSysMessage(LANG_UNBAN_UNBANNED,nameOrIP.c_str());
+ else
+ PSendSysMessage(LANG_UNBAN_ERROR,nameOrIP.c_str());
- QueryResult *result = loginDatabase.PQuery("SELECT FROM_UNIXTIME(bandate), unbandate-bandate, active, unbandate,banreason,bannedby FROM account_banned WHERE id = '%u' ORDER BY bandate ASC",accountid);
- if(!result)
- {
- PSendSysMessage(LANG_BANINFO_NOACCOUNTBAN, accountname.c_str());
- return true;
- }
+ return true;
+}
- PSendSysMessage(LANG_BANINFO_BANHISTORY,accountname.c_str());
- do
- {
- fields = result->Fetch();
-
- time_t unbandate = time_t(fields[3].GetUInt64());
- bool active = false;
- if(fields[2].GetBool() && (fields[1].GetUInt64() == (uint64)0 ||unbandate >= time(NULL)) )
- active = true;
- bool permanent = (fields[1].GetUInt64() == (uint64)0);
- std::string bantime = permanent?GetTrinityString(LANG_BANINFO_INFINITE):secsToTimeString(fields[1].GetUInt64(), true);
- PSendSysMessage(LANG_BANINFO_HISTORYENTRY,
- fields[0].GetString(), bantime.c_str(), active ? GetTrinityString(LANG_BANINFO_YES):GetTrinityString(LANG_BANINFO_NO), fields[4].GetString(), fields[5].GetString());
- }while (result->NextRow());
+bool ChatHandler::HandleBanInfoAccountCommand(const char* args)
+{
+ if(!args)
+ return false;
- delete result;
+ char* cname = strtok((char*)args, "");
+ if(!cname)
+ return false;
+
+ std::string account_name = cname;
+ if(!AccountMgr::normilizeString(account_name))
+ {
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+ SetSentErrorMessage(true);
+ return false;
}
- else
+
+ uint32 accountid = accmgr.GetId(account_name);
+ if(!accountid)
{
- loginDatabase.escape_string(nameOrIP);
- QueryResult *result = loginDatabase.PQuery("SELECT ip, FROM_UNIXTIME(bandate), FROM_UNIXTIME(unbandate), unbandate-UNIX_TIMESTAMP(), banreason,bannedby,unbandate-bandate FROM ip_banned WHERE ip = '%s'",nameOrIP.c_str());
- if(!result)
- {
- PSendSysMessage(LANG_BANINFO_NOIP);
- return true;
- }
- fields = result->Fetch();
- bool permanent = (fields[6].GetUInt64()==(uint64)0);
- PSendSysMessage(LANG_BANINFO_IPENTRY,
- fields[0].GetString(), fields[1].GetString(), permanent ? GetTrinityString(LANG_BANINFO_NEVER):fields[2].GetString(),
- permanent ? GetTrinityString(LANG_BANINFO_INFINITE):secsToTimeString(fields[3].GetUInt64(), true).c_str(), fields[4].GetString(), fields[5].GetString());
- delete result;
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+ return true;
}
- return true;
+
+ return HandleBanInfoHelper(accountid,account_name.c_str());
}
-bool ChatHandler::HandleBanListCommand(const char* args)
+bool ChatHandler::HandleBanInfoCharacterCommand(const char* args)
{
- loginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");
- if(!*args)
+ if(!args)
return false;
- char* cType = strtok((char*)args, " ");
- char* cFilter = strtok(NULL, "");
- if(!cType || !cFilter)
+
+ char* cname = strtok ((char*)args, "");
+ if(!cname)
return false;
- std::string Filter = cFilter;
- std::string Type = cType;
- loginDatabase.escape_string(Filter);
- QueryResult* result = NULL;
- Field *fields = NULL;
- if(Type == "ip")
- {
- result = loginDatabase.PQuery("SELECT ip FROM ip_banned WHERE ip "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'"),Filter.c_str());
- if(!result)
- {
- PSendSysMessage(LANG_BANLIST_NOIP);
- return true;
- }
- PSendSysMessage(LANG_BANLIST_MATCHINGIP);
- do
- {
- fields = result->Fetch();
- PSendSysMessage("%s",fields[0].GetString());
- } while (result->NextRow());
+ std::string name = cname;
+ if(!normalizePlayerName(name))
+ {
+ SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage(true);
+ return false;
+ }
- delete result;
+ uint32 accountid = objmgr.GetPlayerAccountIdByPlayerName(name);
+ if(!accountid)
+ {
+ SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ std::string accountname;
+ if(!accmgr.GetName(accountid,accountname))
+ {
+ PSendSysMessage(LANG_BANINFO_NOCHARACTER);
return true;
}
- //lookup accountid
- if(Type == "account")
+
+ return HandleBanInfoHelper(accountid,accountname.c_str());
+}
+
+bool ChatHandler::HandleBanInfoHelper(uint32 accountid, char const* accountname)
+{
+ QueryResult *result = loginDatabase.PQuery("SELECT FROM_UNIXTIME(bandate), unbandate-bandate, active, unbandate,banreason,bannedby FROM account_banned WHERE id = '%u' ORDER BY bandate ASC",accountid);
+ if(!result)
{
- result = loginDatabase.PQuery("SELECT id FROM account WHERE username "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'"),Filter.c_str());
- if (!result)
- {
- PSendSysMessage(LANG_BANLIST_NOACCOUNT);
- return true;
- }
- //do not delete result
+ PSendSysMessage(LANG_BANINFO_NOACCOUNTBAN, accountname);
+ return true;
}
- else if(Type == "characters")
+
+ PSendSysMessage(LANG_BANINFO_BANHISTORY,accountname);
+ do
{
- result = CharacterDatabase.PQuery("SELECT account FROM characters, WHERE name "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'"),Filter.c_str());
- if (!result)
- {
- PSendSysMessage(LANG_BANLIST_NOCHARACTER);
- return true;
- }
+ Field* fields = result->Fetch();
+
+ time_t unbandate = time_t(fields[3].GetUInt64());
+ bool active = false;
+ if(fields[2].GetBool() && (fields[1].GetUInt64() == (uint64)0 ||unbandate >= time(NULL)) )
+ active = true;
+ bool permanent = (fields[1].GetUInt64() == (uint64)0);
+ std::string bantime = permanent?GetTrinityString(LANG_BANINFO_INFINITE):secsToTimeString(fields[1].GetUInt64(), true);
+ PSendSysMessage(LANG_BANINFO_HISTORYENTRY,
+ fields[0].GetString(), bantime.c_str(), active ? GetTrinityString(LANG_BANINFO_YES):GetTrinityString(LANG_BANINFO_NO), fields[4].GetString(), fields[5].GetString());
+ }while (result->NextRow());
+
+ delete result;
+ return true;
+}
+
+bool ChatHandler::HandleBanInfoIPCommand(const char* args)
+{
+ if(!args)
+ return false;
+
+ char* cIP = strtok ((char*)args, "");
+ if(!cIP)
+ return false;
+
+ if (!IsIPAddress(cIP))
+ return false;
+
+ std::string IP = cIP;
+
+ loginDatabase.escape_string(IP);
+ QueryResult *result = loginDatabase.PQuery("SELECT ip, FROM_UNIXTIME(bandate), FROM_UNIXTIME(unbandate), unbandate-UNIX_TIMESTAMP(), banreason,bannedby,unbandate-bandate FROM ip_banned WHERE ip = '%s'",IP.c_str());
+ if(!result)
+ {
+ PSendSysMessage(LANG_BANINFO_NOIP);
+ return true;
}
- else
+
+ Field *fields = result->Fetch();
+ bool permanent = !fields[6].GetUInt64();
+ PSendSysMessage(LANG_BANINFO_IPENTRY,
+ fields[0].GetString(), fields[1].GetString(), permanent ? GetTrinityString(LANG_BANINFO_NEVER):fields[2].GetString(),
+ permanent ? GetTrinityString(LANG_BANINFO_INFINITE):secsToTimeString(fields[3].GetUInt64(), true).c_str(), fields[4].GetString(), fields[5].GetString());
+ delete result;
+ return true;
+}
+
+bool ChatHandler::HandleBanListCharacterCommand(const char* args)
+{
+ loginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");
+
+ char* cFilter = strtok ((char*)args, " ");
+ if(!cFilter)
return false;
+ std::string filter = cFilter;
+ loginDatabase.escape_string(filter);
+ QueryResult* result = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'"),filter.c_str());
+ if (!result)
+ {
+ PSendSysMessage(LANG_BANLIST_NOCHARACTER);
+ return true;
+ }
+
+ return HandleBanListHelper(result);
+}
+
+bool ChatHandler::HandleBanListAccountCommand(const char* args)
+{
+ loginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");
+
+ char* cFilter = strtok((char*)args, " ");
+ std::string filter = cFilter ? cFilter : "";
+ loginDatabase.escape_string(filter);
+
+ QueryResult* result;
+
+ if(filter.empty())
+ {
+ result = loginDatabase.Query("SELECT account.id, username FROM account, account_banned"
+ " WHERE account.id = account_banned.id AND active = 1 GROUP BY account.id");
+ }
+ else
+ {
+ result = loginDatabase.PQuery("SELECT account.id, username FROM account, account_banned"
+ " WHERE account.id = account_banned.id AND active = 1 AND username "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'")" GROUP BY account.id",
+ filter.c_str());
+ }
+
+ if (!result)
+ {
+ PSendSysMessage(LANG_BANLIST_NOACCOUNT);
+ return true;
+ }
+
+ return HandleBanListHelper(result);
+}
+
+bool ChatHandler::HandleBanListHelper(QueryResult* result)
+{
PSendSysMessage(LANG_BANLIST_MATCHINGACCOUNT);
- do
+
+ // Chat short output
+ if(m_session)
{
- fields = result->Fetch();
- uint32 accountid = fields[0].GetUInt32();
- QueryResult* banresult = loginDatabase.PQuery("SELECT account.username FROM account,account_banned WHERE account_banned.id='%u' AND account_banned.active = '1' AND account_banned.id=account.id",accountid);
- if(banresult)
+ do
+ {
+ Field* fields = result->Fetch();
+ uint32 accountid = fields[0].GetUInt32();
+
+ QueryResult* banresult = loginDatabase.PQuery("SELECT account.username FROM account,account_banned WHERE account_banned.id='%u' AND account_banned.id=account.id",accountid);
+ if(banresult)
+ {
+ Field* fields2 = banresult->Fetch();
+ PSendSysMessage("%s",fields2[0].GetString());
+ delete banresult;
+ }
+ } while (result->NextRow());
+ }
+ // Console wide output
+ else
+ {
+ SendSysMessage(LANG_BANLIST_ACCOUNTS);
+ SendSysMessage("===============================================================================");
+ SendSysMessage(LANG_BANLIST_ACCOUNTS_HEADER);
+ do
+ {
+ SendSysMessage("-------------------------------------------------------------------------------");
+ Field *fields = result->Fetch();
+ uint32 account_id = fields[0].GetUInt32 ();
+
+ std::string account_name;
+
+ // "account" case, name can be get in same quary
+ if(result->GetFieldCount() > 1)
+ account_name = fields[1].GetCppString();
+ // "character" case, name need extract from another DB
+ else
+ accmgr.GetName (account_id,account_name);
+
+ // No SQL injection. id is uint32.
+ QueryResult *banInfo = loginDatabase.PQuery("SELECT bandate,unbandate,bannedby,banreason FROM account_banned WHERE id = %u ORDER BY unbandate", account_id);
+ if (banInfo)
+ {
+ Field *fields2 = banInfo->Fetch();
+ do
+ {
+ time_t t_ban = fields2[0].GetUInt64();
+ tm* aTm_ban = localtime(&t_ban);
+
+ if (fields2[0].GetUInt64() == fields2[1].GetUInt64())
+ {
+ PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|",
+ account_name.c_str(),aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min,
+ fields2[2].GetString(),fields2[3].GetString());
+ }
+ else
+ {
+ time_t t_unban = fields2[1].GetUInt64();
+ tm* aTm_unban = localtime(&t_unban);
+ PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
+ account_name.c_str(),aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min,
+ aTm_unban->tm_year%100, aTm_unban->tm_mon+1, aTm_unban->tm_mday, aTm_unban->tm_hour, aTm_unban->tm_min,
+ fields2[2].GetString(),fields2[3].GetString());
+ }
+ }while ( banInfo->NextRow() );
+ delete banInfo;
+ }
+ }while( result->NextRow() );
+ SendSysMessage("===============================================================================");
+ }
+
+ delete result;
+ return true;
+}
+
+bool ChatHandler::HandleBanListIPCommand(const char* args)
+{
+ loginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");
+
+ char* cFilter = strtok((char*)args, " ");
+ std::string filter = cFilter ? cFilter : "";
+ loginDatabase.escape_string(filter);
+
+ QueryResult* result;
+
+ if(filter.empty())
+ {
+ result = loginDatabase.Query ("SELECT ip,bandate,unbandate,bannedby,banreason FROM ip_banned"
+ " WHERE (bandate=unbandate OR unbandate>UNIX_TIMESTAMP())"
+ " ORDER BY unbandate" );
+ }
+ else
+ {
+ result = loginDatabase.PQuery( "SELECT ip,bandate,unbandate,bannedby,banreason FROM ip_banned"
+ " WHERE (bandate=unbandate OR unbandate>UNIX_TIMESTAMP()) AND ip "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'")
+ " ORDER BY unbandate",filter.c_str() );
+ }
+
+ if(!result)
+ {
+ PSendSysMessage(LANG_BANLIST_NOIP);
+ return true;
+ }
+
+ PSendSysMessage(LANG_BANLIST_MATCHINGIP);
+ // Chat short output
+ if(m_session)
+ {
+ do
+ {
+ Field* fields = result->Fetch();
+ PSendSysMessage("%s",fields[0].GetString());
+ }while (result->NextRow());
+ }
+ // Console wide output
+ else
+ {
+ SendSysMessage(LANG_BANLIST_IPS);SendSysMessage("===============================================================================");
+ SendSysMessage(LANG_BANLIST_IPS_HEADER);
+ do
{
- Field* fields2 = banresult->Fetch();
- PSendSysMessage("%s",fields2[0].GetString());
- delete banresult;
- }
- } while (result->NextRow());
+ SendSysMessage("-------------------------------------------------------------------------------");
+ Field *fields = result->Fetch();
+ time_t t_ban = fields[1].GetUInt64();
+ tm* aTm_ban = localtime(&t_ban);
+ if ( fields[1].GetUInt64() == fields[2].GetUInt64() )
+ {
+ PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|",
+ fields[0].GetString(), aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min,
+ fields[3].GetString(), fields[4].GetString());
+ }
+ else
+ {
+ time_t t_unban = fields[2].GetUInt64();
+ tm* aTm_unban = localtime(&t_unban);
+ PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
+ fields[0].GetString(), aTm_ban->tm_year%100, aTm_ban->tm_mon+1, aTm_ban->tm_mday, aTm_ban->tm_hour, aTm_ban->tm_min,
+ aTm_unban->tm_year%100, aTm_unban->tm_mon+1, aTm_unban->tm_mday, aTm_unban->tm_hour, aTm_unban->tm_min,
+ fields[3].GetString(), fields[4].GetString());
+ }
+ }while( result->NextRow() );
+ SendSysMessage("===============================================================================");
+ }
delete result;
return true;
@@ -5012,37 +5415,111 @@ bool ChatHandler::HandleFlyModeCommand(const char* args)
bool ChatHandler::HandleLoadPDumpCommand(const char *args)
{
- if(!args)
+ if (!args)
return false;
- char * file = strtok((char*)args, " "); if(!file) return false;
- char * acc = strtok(NULL, " "); if(!acc) return false;
- if(!file || !acc)
+ char * file = strtok((char*)args, " ");
+ if(!file)
+ return false;
+
+ char * account = strtok(NULL, " ");
+ if(!account)
+ return false;
+
+ std::string account_name = account;
+ if(!AccountMgr::normilizeString(account_name))
+ {
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+ SetSentErrorMessage(true);
return false;
+ }
- uint32 account_id = accmgr.GetId(acc);
+ uint32 account_id = accmgr.GetId(account_name);
if(!account_id)
{
- account_id = atoi(acc);
- if(account_id)
+ account_id = atoi(account); // use original string
+ if(!account_id)
{
- std::string acc_name;
- if(!accmgr.GetName(account_id,acc_name))
- return false;
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+ SetSentErrorMessage(true);
+ return false;
}
- else
+ }
+
+ if(!accmgr.GetName(account_id,account_name))
+ {
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ char* guid_str = NULL;
+ char* name_str = strtok(NULL, " ");
+
+ std::string name;
+ if(name_str)
+ {
+ name = name_str;
+ // normalize the name if specified and check if it exists
+ if(!normalizePlayerName(name))
+ {
+ PSendSysMessage(LANG_INVALID_CHARACTER_NAME);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ if(!ObjectMgr::IsValidName(name,true))
+ {
+ PSendSysMessage(LANG_INVALID_CHARACTER_NAME);
+ SetSentErrorMessage(true);
return false;
- }
-
- char * name = strtok(NULL, " ");
- char * guid_str = name ? strtok(NULL, " ") : NULL;
-
- uint32 guid = guid_str ? atoi(guid_str) : 0;
-
- if(PlayerDumpReader().LoadDump(file, account_id, name ? name : "", guid))
- PSendSysMessage(LANG_COMMAND_IMPORT_SUCCESS);
- else
- PSendSysMessage(LANG_COMMAND_IMPORT_FAILED);
+ }
+
+ guid_str = strtok(NULL, " ");
+ }
+
+ uint32 guid = 0;
+
+ if(guid_str)
+ {
+ guid = atoi(guid_str);
+ if(!guid)
+ {
+ PSendSysMessage(LANG_INVALID_CHARACTER_GUID);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ if(objmgr.GetPlayerAccountIdByGUID(guid))
+ {
+ PSendSysMessage(LANG_CHARACTER_GUID_IN_USE,guid);
+ SetSentErrorMessage(true);
+ return false;
+ }
+ }
+
+ switch(PlayerDumpReader().LoadDump(file, account_id, name, guid))
+ {
+ case DUMP_SUCCESS:
+ PSendSysMessage(LANG_COMMAND_IMPORT_SUCCESS);
+ break;
+ case DUMP_FILE_OPEN_ERROR:
+ PSendSysMessage(LANG_FILE_OPEN_FAIL,file);
+ SetSentErrorMessage(true);
+ return false;
+ case DUMP_FILE_BROKEN:
+ PSendSysMessage(LANG_DUMP_BROKEN,file);
+ SetSentErrorMessage(true);
+ return false;
+ case DUMP_TOO_MANY_CHARS:
+ PSendSysMessage(LANG_ACCOUNT_CHARACTER_LIST_FULL,account_name,account_id);
+ SetSentErrorMessage(true);
+ return false;
+ default:
+ PSendSysMessage(LANG_COMMAND_IMPORT_FAILED);
+ SetSentErrorMessage(true);
+ return false;
+ }
return true;
}
@@ -5086,10 +5563,27 @@ bool ChatHandler::HandleWritePDumpCommand(const char *args)
if(!guid)
guid = atoi(p2);
- if (PlayerDumpWriter().WriteDump(file, guid))
- PSendSysMessage(LANG_COMMAND_EXPORT_SUCCESS);
- else
- PSendSysMessage(LANG_COMMAND_EXPORT_FAILED);
+ if(!objmgr.GetPlayerAccountIdByGUID(guid))
+ {
+ PSendSysMessage(LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ switch(PlayerDumpWriter().WriteDump(file, guid))
+ {
+ case DUMP_SUCCESS:
+ PSendSysMessage(LANG_COMMAND_EXPORT_SUCCESS);
+ break;
+ case DUMP_FILE_OPEN_ERROR:
+ PSendSysMessage(LANG_FILE_OPEN_FAIL,file);
+ SetSentErrorMessage(true);
+ return false;
+ default:
+ PSendSysMessage(LANG_COMMAND_EXPORT_FAILED);
+ SetSentErrorMessage(true);
+ return false;
+ }
return true;
}
@@ -5573,6 +6067,135 @@ bool ChatHandler::HandleInstanceSaveDataCommand(const char * /*args*/)
return true;
}
+/// Display the list of GMs
+bool ChatHandler::HandleGMListFullCommand(const char* /*args*/)
+{
+ ///- Get the accounts with GM Level >0
+ QueryResult *result = loginDatabase.Query( "SELECT username,gmlevel FROM account WHERE gmlevel > 0" );
+ if(result)
+ {
+ SendSysMessage(LANG_GMLIST);
+ SendSysMessage("========================");
+ SendSysMessage(LANG_GMLIST_HEADER);
+ SendSysMessage("========================");
+
+ ///- Circle through them. Display username and GM level
+ do
+ {
+ Field *fields = result->Fetch();
+ PSendSysMessage("|%15s|%6s|", fields[0].GetString(),fields[1].GetString());
+ } while( result->NextRow() );
+
+ PSendSysMessage("========================");
+ delete result;
+ }
+ else
+ PSendSysMessage(LANG_GMLIST_EMPTY);
+ return true;
+}
+
+/// Define the 'Message of the day' for the realm
+bool ChatHandler::HandleServerSetMotdCommand(const char* args)
+{
+ sWorld.SetMotd(args);
+ PSendSysMessage(LANG_MOTD_NEW, args);
+ return true;
+}
+
+/// Set/Unset the expansion level for an account
+bool ChatHandler::HandleAccountSetAddonCommand(const char* args)
+{
+ ///- Get the command line arguments
+ char *szAcc = strtok((char*)args," ");
+ char *szExp = strtok(NULL," ");
+
+ if(!szAcc)
+ return false;
+
+ std::string account_name;
+ uint32 account_id;
+
+ if(!szExp)
+ {
+ Player* player = getSelectedPlayer();
+ if(!player)
+ return false;
+
+ account_id = player->GetSession()->GetAccountId();
+ accmgr.GetName(account_id,account_name);
+ szExp = szAcc;
+ }
+ else
+ {
+ ///- Convert Account name to Upper Format
+ account_name = szAcc;
+ if(!AccountMgr::normilizeString(account_name))
+ {
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ account_id = accmgr.GetId(account_name);
+ if(!account_id)
+ {
+ PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str());
+ SetSentErrorMessage(true);
+ return false;
+ }
+ }
+
+ int lev=atoi(szExp); //get int anyway (0 if error)
+ if(lev < 0)
+ return false;
+
+ // No SQL injection
+ loginDatabase.PExecute("UPDATE account SET expansion = '%d' WHERE id = '%u'",lev,account_id);
+ PSendSysMessage(LANG_ACCOUNT_SETADDON,account_name.c_str(),account_id,lev);
+ return true;
+}
+
+/// Send a message to a player in game
+bool ChatHandler::HandleSendMessageCommand(const char* args)
+{
+ ///- Get the command line arguments
+ char* name_str = strtok((char*)args, " ");
+ char* msg_str = strtok(NULL, "");
+
+ if(!name_str || !msg_str)
+ return false;
+
+ std::string name = name_str;
+
+ if(!normalizePlayerName(name))
+ return false;
+
+ ///- Find the player and check that he is not logging out.
+ Player *rPlayer = objmgr.GetPlayer(name.c_str());
+ if(!rPlayer)
+ {
+ SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ if(rPlayer->GetSession()->isLogingOut())
+ {
+ SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ ///- Send the message
+ //Use SendAreaTriggerMessage for fastest delivery.
+ rPlayer->GetSession()->SendAreaTriggerMessage("%s", msg_str);
+ rPlayer->GetSession()->SendAreaTriggerMessage("|cffff0000[Message from administrator]:|r");
+
+ //Confirmation message
+ PSendSysMessage(LANG_SENDMESSAGE,name.c_str(),msg_str);
+ return true;
+}
+
bool ChatHandler::HandleFreezeCommand(const char *args)
{
std::string name;
diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h
index 6567b4716bd..e1bc3dfcfef 100644
--- a/src/game/ObjectMgr.h
+++ b/src/game/ObjectMgr.h
@@ -680,6 +680,7 @@ class ObjectMgr
}
const char *GetTrinityString(int32 entry, int locale_idx) const;
const char *GetTrinityStringForDBCLocale(int32 entry) const { return GetTrinityString(entry,DBCLocaleIndex); }
+ int32 GetDBCLocaleIndex() const { return DBCLocaleIndex; }
void SetDBCLocaleIndex(uint32 lang) { DBCLocaleIndex = GetIndexForLocale(LocaleConstant(lang)); }
void AddCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_guid, uint32 instance);
diff --git a/src/game/PlayerDump.cpp b/src/game/PlayerDump.cpp
index e6f68122f9b..78f90bc9c9e 100644
--- a/src/game/PlayerDump.cpp
+++ b/src/game/PlayerDump.cpp
@@ -26,7 +26,7 @@
#include "ObjectMgr.h"
// Character Dump tables
-#define DUMP_TABLE_COUNT 20
+#define DUMP_TABLE_COUNT 19
struct DumpTable
{
@@ -258,11 +258,8 @@ void StoreGUID(QueryResult *result,uint32 data,uint32 field, std::set<uint32>& g
}
// Writing - High-level functions
-bool PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type)
+void PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type)
{
- if (!tableFrom || !tableTo)
- return false;
-
GUIDs const* guids = NULL;
char const* fieldname = NULL;
@@ -280,7 +277,7 @@ bool PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tabl
// for guid set stop if set is empty
if(guids && guids->empty())
- return true; // nothing to do
+ return; // nothing to do
// setup for guids case start position
GUIDs::const_iterator guids_itr;
@@ -298,7 +295,7 @@ bool PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tabl
QueryResult *result = CharacterDatabase.PQuery("SELECT * FROM %s WHERE %s", tableFrom, wherestr.c_str());
if(!result)
- return false;
+ return;
do
{
@@ -328,8 +325,6 @@ bool PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tabl
delete result;
}
while(guids && guids_itr != guids->end()); // not set case iterate single time, set case iterate for all guids
-
- return true;
}
std::string PlayerDumpWriter::GetDump(uint32 guid)
@@ -338,28 +333,29 @@ std::string PlayerDumpWriter::GetDump(uint32 guid)
for(int i = 0; i < DUMP_TABLE_COUNT; i++)
DumpTable(dump, guid, dumpTables[i].name, dumpTables[i].name, dumpTables[i].type);
- // TODO: Add instance/group/gifts..
+ // TODO: Add instance/group..
// TODO: Add a dump level option to skip some non-important tables
return dump;
}
-bool PlayerDumpWriter::WriteDump(std::string file, uint32 guid)
+DumpReturn PlayerDumpWriter::WriteDump(std::string file, uint32 guid)
{
FILE *fout = fopen(file.c_str(), "w");
- if (!fout) { sLog.outError("Failed to open file!\r\n"); return false; }
+ if (!fout)
+ return DUMP_FILE_OPEN_ERROR;
std::string dump = GetDump(guid);
fprintf(fout,"%s\n",dump.c_str());
fclose(fout);
- return true;
+ return DUMP_SUCCESS;
}
// Reading - High-level functions
-#define ROLLBACK {CharacterDatabase.RollbackTransaction(); fclose(fin); return false;}
+#define ROLLBACK(DR) {CharacterDatabase.RollbackTransaction(); fclose(fin); return (DR);}
-bool PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string name, uint32 guid)
+DumpReturn PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string name, uint32 guid)
{
// check character count
{
@@ -372,13 +368,12 @@ bool PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string na
delete result;
if (charcount >= 10)
- {
- return false;
- }
+ return DUMP_TOO_MANY_CHARS;
}
}
FILE *fin = fopen(file.c_str(), "r");
- if(!fin) return false;
+ if(!fin)
+ return DUMP_FILE_OPEN_ERROR;
QueryResult * result = NULL;
char newguid[20], chraccount[20], newpetid[20], currpetid[20], lastpetid[20];
@@ -434,8 +429,7 @@ bool PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string na
if(!fgets(buf, 32000, fin))
{
if(feof(fin)) break;
- sLog.outError("LoadPlayerDump: File read error!");
- ROLLBACK;
+ ROLLBACK(DUMP_FILE_BROKEN);
}
std::string line; line.assign(buf);
@@ -449,7 +443,7 @@ bool PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string na
if(tn.empty())
{
sLog.outError("LoadPlayerDump: Can't extract table name from line: '%s'!", line.c_str());
- ROLLBACK;
+ ROLLBACK(DUMP_FILE_BROKEN);
}
DumpTableType type;
@@ -466,27 +460,37 @@ bool PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string na
if (i == DUMP_TABLE_COUNT)
{
sLog.outError("LoadPlayerDump: Unknown table: '%s'!", tn.c_str());
- ROLLBACK;
+ ROLLBACK(DUMP_FILE_BROKEN);
}
// change the data to server values
switch(type)
{
case DTT_CHAR_TABLE:
- if(!changenth(line, 1, newguid)) ROLLBACK;
+ if(!changenth(line, 1, newguid))
+ ROLLBACK(DUMP_FILE_BROKEN);
break;
case DTT_CHARACTER: // character t.
{
- if(!changenth(line, 1, newguid)) ROLLBACK;
+ if(!changenth(line, 1, newguid))
+ ROLLBACK(DUMP_FILE_BROKEN);
// guid, data field:guid, items
- if(!changenth(line, 2, chraccount)) ROLLBACK;
+ if(!changenth(line, 2, chraccount))
+ ROLLBACK(DUMP_FILE_BROKEN);
+
std::string vals = getnth(line, 3);
- if(!changetoknth(vals, OBJECT_FIELD_GUID+1, newguid)) ROLLBACK;
+ if(!changetoknth(vals, OBJECT_FIELD_GUID+1, newguid))
+ ROLLBACK(DUMP_FILE_BROKEN);
+
for(uint16 field = PLAYER_FIELD_INV_SLOT_HEAD; field < PLAYER_FARSIGHT; field++)
- if(!changetokGuid(vals, field+1, items, objmgr.m_hiItemGuid, true)) ROLLBACK;
- if(!changenth(line, 3, vals.c_str())) ROLLBACK;
+ if(!changetokGuid(vals, field+1, items, objmgr.m_hiItemGuid, true))
+ ROLLBACK(DUMP_FILE_BROKEN);
+
+ if(!changenth(line, 3, vals.c_str()))
+ ROLLBACK(DUMP_FILE_BROKEN);
+
if (name == "")
{
// check if the original name already exists
@@ -498,38 +502,51 @@ bool PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string na
{
delete result;
// rename on login: `at_login` field 30 in raw field list
- if(!changenth(line, 30, "1")) ROLLBACK;
+ if(!changenth(line, 30, "1"))
+ ROLLBACK(DUMP_FILE_BROKEN);
}
}
- else if(!changenth(line, 4, name.c_str())) ROLLBACK;
+ else if(!changenth(line, 4, name.c_str()))
+ ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_INVENTORY: // character_inventory t.
{
- if(!changenth(line, 1, newguid)) ROLLBACK;
+ if(!changenth(line, 1, newguid))
+ ROLLBACK(DUMP_FILE_BROKEN);
// bag, item
- if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid, true)) ROLLBACK;
- if(!changeGuid(line, 4, items, objmgr.m_hiItemGuid)) ROLLBACK;
+ if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid, true))
+ ROLLBACK(DUMP_FILE_BROKEN);
+ if(!changeGuid(line, 4, items, objmgr.m_hiItemGuid))
+ ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_ITEM: // item_instance t.
{
// item, owner, data field:item, owner guid
- if(!changeGuid(line, 1, items, objmgr.m_hiItemGuid)) ROLLBACK;
- if(!changenth(line, 2, newguid)) ROLLBACK;
+ if(!changeGuid(line, 1, items, objmgr.m_hiItemGuid))
+ ROLLBACK(DUMP_FILE_BROKEN);
+ if(!changenth(line, 2, newguid))
+ ROLLBACK(DUMP_FILE_BROKEN);
+
std::string vals = getnth(line,3);
- if(!changetokGuid(vals, OBJECT_FIELD_GUID+1, items, objmgr.m_hiItemGuid)) ROLLBACK;
- if(!changetoknth(vals, ITEM_FIELD_OWNER+1, newguid)) ROLLBACK;
- if(!changenth(line, 3, vals.c_str())) ROLLBACK;
+ if(!changetokGuid(vals, OBJECT_FIELD_GUID+1, items, objmgr.m_hiItemGuid))
+ ROLLBACK(DUMP_FILE_BROKEN);
+ if(!changetoknth(vals, ITEM_FIELD_OWNER+1, newguid))
+ ROLLBACK(DUMP_FILE_BROKEN);
+ if(!changenth(line, 3, vals.c_str()))
+ ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_ITEM_GIFT: // character_gift
{
// guid,item_guid,
- if(!changenth(line, 1, newguid)) ROLLBACK;
- if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid)) ROLLBACK;
+ if(!changenth(line, 1, newguid))
+ ROLLBACK(DUMP_FILE_BROKEN);
+ if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid))
+ ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_PET: // character_pet t
@@ -551,8 +568,10 @@ bool PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string na
}
// item, entry, owner, ...
- if(!changenth(line, 1, newpetid)) ROLLBACK;
- if(!changenth(line, 3, newguid)) ROLLBACK;
+ if(!changenth(line, 1, newpetid))
+ ROLLBACK(DUMP_FILE_BROKEN);
+ if(!changenth(line, 3, newguid))
+ ROLLBACK(DUMP_FILE_BROKEN);
break;
}
@@ -562,27 +581,34 @@ bool PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string na
// lookup currpetid and match to new inserted pet id
std::map<uint32, uint32> :: const_iterator petids_iter = petids.find(atoi(currpetid));
- if(petids_iter == petids.end()) ROLLBACK; // couldn't find new inserted id
+ if(petids_iter == petids.end()) // couldn't find new inserted id
+ ROLLBACK(DUMP_FILE_BROKEN);
snprintf(newpetid, 20, "%d", petids_iter->second);
- if(!changenth(line, 1, newpetid)) ROLLBACK;
+ if(!changenth(line, 1, newpetid))
+ ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_MAIL: // mail
{
// id,messageType,stationery,sender,receiver
- if(!changeGuid(line, 1, mails, objmgr.m_mailid)) ROLLBACK;
- if(!changenth(line, 5, newguid)) ROLLBACK;
+ if(!changeGuid(line, 1, mails, objmgr.m_mailid))
+ ROLLBACK(DUMP_FILE_BROKEN);
+ if(!changenth(line, 5, newguid))
+ ROLLBACK(DUMP_FILE_BROKEN);
break;
}
case DTT_MAIL_ITEM: // mail_items
{
// mail_id,item_guid,item_template,receiver
- if(!changeGuid(line, 1, mails, objmgr.m_mailid)) ROLLBACK;
- if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid)) ROLLBACK;
- if(!changenth(line, 4, newguid)) ROLLBACK;
+ if(!changeGuid(line, 1, mails, objmgr.m_mailid))
+ ROLLBACK(DUMP_FILE_BROKEN);
+ if(!changeGuid(line, 2, items, objmgr.m_hiItemGuid))
+ ROLLBACK(DUMP_FILE_BROKEN);
+ if(!changenth(line, 4, newguid))
+ ROLLBACK(DUMP_FILE_BROKEN);
break;
}
default:
@@ -590,7 +616,8 @@ bool PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string na
break;
}
- if(!CharacterDatabase.Execute(line.c_str())) ROLLBACK;
+ if(!CharacterDatabase.Execute(line.c_str()))
+ ROLLBACK(DUMP_FILE_BROKEN);
}
CharacterDatabase.CommitTransaction();
@@ -603,5 +630,5 @@ bool PlayerDumpReader::LoadDump(std::string file, uint32 account, std::string na
fclose(fin);
- return true;
+ return DUMP_SUCCESS;
}
diff --git a/src/game/PlayerDump.h b/src/game/PlayerDump.h
index 6f5b6eed1e7..af5462e1fd6 100644
--- a/src/game/PlayerDump.h
+++ b/src/game/PlayerDump.h
@@ -73,6 +73,15 @@ enum DumpTableType
DTT_ITEM_TEXT, // <- item_text // item_text
};
+enum DumpReturn
+{
+ DUMP_SUCCESS,
+ DUMP_FILE_OPEN_ERROR,
+ DUMP_TOO_MANY_CHARS,
+ DUMP_UNEXPECTED_END,
+ DUMP_FILE_BROKEN,
+};
+
class PlayerDump
{
protected:
@@ -85,11 +94,11 @@ class PlayerDumpWriter : public PlayerDump
PlayerDumpWriter() {}
std::string GetDump(uint32 guid);
- bool WriteDump(std::string file, uint32 guid);
+ DumpReturn WriteDump(std::string file, uint32 guid);
private:
typedef std::set<uint32> GUIDs;
- bool DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type);
+ void DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type);
std::string GenerateWhereStr(char const* field, GUIDs const& guids, GUIDs::const_iterator& itr);
std::string GenerateWhereStr(char const* field, uint32 guid);
@@ -104,7 +113,7 @@ class PlayerDumpReader : public PlayerDump
public:
PlayerDumpReader() {}
- bool LoadDump(std::string file, uint32 account, std::string name, uint32 guid);
+ DumpReturn LoadDump(std::string file, uint32 account, std::string name, uint32 guid);
};
#endif
diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h
index f950a9ceb6c..26cd729f887 100644
--- a/src/game/SharedDefines.h
+++ b/src/game/SharedDefines.h
@@ -2167,4 +2167,20 @@ enum ResponseCodes
CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 0x59,
CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 0x5A,
};
+
+/// Ban function modes
+enum BanMode
+{
+ BAN_ACCOUNT,
+ BAN_CHARACTER,
+ BAN_IP
+};
+
+/// Ban function return codes
+enum BanReturn
+{
+ BAN_SUCCESS,
+ BAN_SYNTAX_ERROR,
+ BAN_NOTFOUND
+};
#endif
diff --git a/src/game/World.cpp b/src/game/World.cpp
index 8bdea8996ec..de89643257f 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -2264,45 +2264,43 @@ bool World::KickPlayer(std::string playerName)
}
/// Ban an account or ban an IP address, duration will be parsed using TimeStringToSecs if it is positive, otherwise permban
-uint8 World::BanAccount(std::string type, std::string nameOrIP, std::string duration, std::string reason, std::string author)
+BanReturn World::BanAccount(BanMode mode, std::string nameOrIP, std::string duration, std::string reason, std::string author)
{
loginDatabase.escape_string(nameOrIP);
loginDatabase.escape_string(reason);
std::string safe_author=author;
loginDatabase.escape_string(safe_author);
- if(type != "ip" && !normalizePlayerName(nameOrIP))
- return BAN_NOTFOUND; // Nobody to ban
-
uint32 duration_secs = TimeStringToSecs(duration);
QueryResult *resultAccounts = NULL; //used for kicking
///- Update the database with ban information
-
- if(type=="ip")
- {
- //No SQL injection as strings are escaped
- resultAccounts = loginDatabase.PQuery("SELECT id FROM account WHERE last_ip = '%s'",nameOrIP.c_str());
- loginDatabase.PExecute("INSERT INTO ip_banned VALUES ('%s',UNIX_TIMESTAMP(),UNIX_TIMESTAMP()+%u,'%s','%s')",nameOrIP.c_str(),duration_secs,safe_author.c_str(),reason.c_str());
+ switch(mode)
+ {
+ case BAN_IP:
+ //No SQL injection as strings are escaped
+ resultAccounts = loginDatabase.PQuery("SELECT id FROM account WHERE last_ip = '%s'",nameOrIP.c_str());
+ loginDatabase.PExecute("INSERT INTO ip_banned VALUES ('%s',UNIX_TIMESTAMP(),UNIX_TIMESTAMP()+%u,'%s','%s')",nameOrIP.c_str(),duration_secs,safe_author.c_str(),reason.c_str());
+ break;
+ case BAN_ACCOUNT:
+ //No SQL injection as string is escaped
+ resultAccounts = loginDatabase.PQuery("SELECT id FROM account WHERE username = '%s'",nameOrIP.c_str());
+ break;
+ case BAN_CHARACTER:
+ //No SQL injection as string is escaped
+ resultAccounts = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'",nameOrIP.c_str());
+ break;
+ default:
+ return BAN_SYNTAX_ERROR;
}
- else if(type=="account")
- {
- //No SQL injection as string is escaped
- resultAccounts = loginDatabase.PQuery("SELECT id FROM account WHERE username = '%s'",nameOrIP.c_str());
- }
- else if(type=="character")
- {
- //No SQL injection as string is escaped
- resultAccounts = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'",nameOrIP.c_str());
- }
- else
- return BAN_SYNTAX_ERROR; //Syntax problem
-
- if(!resultAccounts)
- if(type=="ip")
- return BAN_SUCCESS; // ip correctly banned but nobody affected (yet)
- else
- return BAN_NOTFOUND; // Nobody to ban
+
+ if(!resultAccounts)
+ {
+ if(mode==BAN_IP)
+ return BAN_SUCCESS;
+ else
+ return BAN_NOTFOUND; // Nobody to ban
+ }
///- Disconnect all affected players (for IP it can be several)
do
@@ -2310,13 +2308,14 @@ uint8 World::BanAccount(std::string type, std::string nameOrIP, std::string dura
Field* fieldsAccount = resultAccounts->Fetch();
uint32 account = fieldsAccount->GetUInt32();
- if(type != "ip")
+ if(mode!=BAN_IP)
+ {
//No SQL injection as strings are escaped
loginDatabase.PExecute("INSERT INTO account_banned VALUES ('%u', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+%u, '%s', '%s', '1')",
account,duration_secs,safe_author.c_str(),reason.c_str());
+ }
- WorldSession* sess = FindSession(account);
- if( sess )
+ if (WorldSession* sess = FindSession(account))
if(std::string(sess->GetPlayerName()) != author)
sess->KickPlayer();
}
@@ -2327,9 +2326,9 @@ uint8 World::BanAccount(std::string type, std::string nameOrIP, std::string dura
}
/// Remove a ban from an account or IP address
-bool World::RemoveBanAccount(std::string type, std::string nameOrIP)
+bool World::RemoveBanAccount(BanMode mode, std::string nameOrIP)
{
- if(type == "ip")
+ if (mode == BAN_IP)
{
loginDatabase.escape_string(nameOrIP);
loginDatabase.PExecute("DELETE FROM ip_banned WHERE ip = '%s'",nameOrIP.c_str());
@@ -2337,20 +2336,11 @@ bool World::RemoveBanAccount(std::string type, std::string nameOrIP)
else
{
uint32 account=0;
- if(type == "account")
- {
- if (!AccountMgr::normilizeString (nameOrIP))
- return false;
-
+ if (mode == BAN_ACCOUNT)
account = accmgr.GetId (nameOrIP);
- }
- else if(type == "character")
- {
- if(!normalizePlayerName(nameOrIP))
- return false;
-
+ else if (mode == BAN_CHARACTER)
account = objmgr.GetPlayerAccountIdByPlayerName (nameOrIP);
- }
+
if(!account)
return false;
@@ -2503,20 +2493,24 @@ void World::UpdateSessions( time_t diff )
// This handles the issued and queued CLI commands
void World::ProcessCliCommands()
{
- if (cliCmdQueue.empty()) return;
+ if (cliCmdQueue.empty())
+ return;
- CliCommandHolder *command;
- pPrintf p_zprintf;
+ CliCommandHolder::Print* zprint;
while (!cliCmdQueue.empty())
{
sLog.outDebug("CLI command under processing...");
- command = cliCmdQueue.next();
- command->Execute();
- p_zprintf=command->GetOutputMethod();
+ CliCommandHolder *command = cliCmdQueue.next();
+
+ zprint = command->m_print;
+
+ CliHandler(zprint).ParseCommands(command->m_command);
+
delete command;
}
+
// print the console message here so it looks right
- p_zprintf("TC> ");
+ zprint("TC> ");
}
void World::InitResultQueue()
diff --git a/src/game/World.h b/src/game/World.h
index 764c442d5a3..26746fa71de 100644
--- a/src/game/World.h
+++ b/src/game/World.h
@@ -28,6 +28,7 @@
#include "Common.h"
#include "Timer.h"
#include "Policies/Singleton.h"
+#include "SharedDefines.h"
#include <map>
#include <set>
@@ -40,7 +41,6 @@ class Player;
class Weather;
struct ScriptAction;
struct ScriptInfo;
-class CliCommandHolder;
class SqlResultQueue;
class QueryResult;
class WorldSocket;
@@ -296,14 +296,6 @@ enum RealmZone
REALM_ZONE_CN9 = 29 // basic-Latin at create, any at login
};
-/// Ban function return codes
-enum BanReturn
-{
- BAN_SUCCESS,
- BAN_SYNTAX_ERROR,
- BAN_NOTFOUND
-};
-
// DB scripting commands
#define SCRIPT_COMMAND_TALK 0 // source = unit, target=any, datalong ( 0=say, 1=whisper, 2=yell, 3=emote text)
#define SCRIPT_COMMAND_EMOTE 1 // source = unit, datalong = anim_id
@@ -321,37 +313,23 @@ enum BanReturn
#define SCRIPT_COMMAND_REMOVE_AURA 14 // source (datalong2!=0) or target (datalong==0) unit, datalong = spell_id
#define SCRIPT_COMMAND_CAST_SPELL 15 // source (datalong2!=0) or target (datalong==0) unit, datalong = spell_id
-/// CLI related stuff, define here to prevent cyclic dependancies
+/// Storage class for commands issued for delayed execution
+struct CliCommandHolder
+{
+ typedef void Print(const char*);
-typedef int(* pPrintf)(const char*,...);
-typedef void(* pCliFunc)(char *,pPrintf);
+ char *m_command;
+ Print* m_print;
-/// Command Template class
-struct CliCommand
-{
- char const * cmd;
- pCliFunc Func;
- char const * description;
-};
+ CliCommandHolder(const char *command, Print* zprint)
+ : m_print(zprint)
+ {
+ size_t len = strlen(command)+1;
+ m_command = new char[len];
+ memcpy(m_command, command, len);
+ }
-/// Storage class for commands issued for delayed execution
-class CliCommandHolder
-{
- private:
- const CliCommand *cmd;
- char *args;
- pPrintf m_zprintf;
- public:
- CliCommandHolder(const CliCommand *command, const char *arguments, pPrintf p_zprintf)
- : cmd(command), m_zprintf(p_zprintf)
- {
- size_t len = strlen(arguments)+1;
- args = new char[len];
- memcpy(args, arguments, len);
- }
- ~CliCommandHolder() { delete[] args; }
- void Execute() const { cmd->Func(args, m_zprintf); }
- pPrintf GetOutputMethod() const {return (m_zprintf);}
+ ~CliCommandHolder() { delete[] m_command; }
};
/// The World
@@ -474,8 +452,8 @@ class World
void KickAll();
void KickAllLess(AccountTypes sec);
void KickAllQueued();
- uint8 BanAccount(std::string type, std::string nameOrIP, std::string duration, std::string reason, std::string author);
- bool RemoveBanAccount(std::string type, std::string nameOrIP);
+ BanReturn BanAccount(BanMode mode, std::string nameOrIP, std::string duration, std::string reason, std::string author);
+ bool RemoveBanAccount(BanMode mode, std::string nameOrIP);
void ScriptsStart(std::map<uint32, std::multimap<uint32, ScriptInfo> > const& scripts, uint32 id, Object* source, Object* target);
void ScriptCommandStart(ScriptInfo const& script, uint32 delay, Object* source, Object* target);
@@ -492,7 +470,7 @@ class World
static float GetVisibleObjectGreyDistance() { return m_VisibleObjectGreyDistance; }
void ProcessCliCommands();
- void QueueCliCommand(CliCommandHolder* command) { cliCmdQueue.add(command); }
+ void QueueCliCommand( CliCommandHolder::Print* zprintf, char const* input ) { cliCmdQueue.add(new CliCommandHolder(input, zprintf)); }
void UpdateResultQueue();
void InitResultQueue();
diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp
index 9583df10cb1..7d9e2a365ac 100644
--- a/src/game/WorldSession.cpp
+++ b/src/game/WorldSession.cpp
@@ -466,7 +466,7 @@ void WorldSession::SendNotification(int32 string_id,...)
}
}
-const char * WorldSession::GetTrinityString( int32 entry )
+const char * WorldSession::GetTrinityString( int32 entry ) const
{
return objmgr.GetTrinityString(entry,GetSessionDbLocaleIndex());
}
diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h
index 346184f6a24..fc3866868cd 100644
--- a/src/game/WorldSession.h
+++ b/src/game/WorldSession.h
@@ -194,9 +194,9 @@ class TRINITY_DLL_SPEC WorldSession
time_t m_muteTime;
// Locales
- LocaleConstant GetSessionDbcLocale() { return m_sessionDbcLocale; }
- int GetSessionDbLocaleIndex() { return m_sessionDbLocaleIndex; }
- const char *GetTrinityString(int32 entry);
+ LocaleConstant GetSessionDbcLocale() const { return m_sessionDbcLocale; }
+ int GetSessionDbLocaleIndex() const { return m_sessionDbLocaleIndex; }
+ const char *GetTrinityString(int32 entry) const;
uint32 GetLatency() const { return m_latency; }
void SetLatency(uint32 latency) { m_latency = latency; }