/* * Ascent MMORPG Server * Copyright (C) 2005-2007 Ascent Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #ifndef WOWSERVER_CHAT_H #define WOWSERVER_CHAT_H class ChatHandler; class WorldSession; class Player; class Unit; enum ChatMsg { CHAT_MSG_ADDON = -1, CHAT_MSG_SAY = 0x00, CHAT_MSG_PARTY = 0x01, CHAT_MSG_RAID = 0x02, CHAT_MSG_GUILD = 0x03, CHAT_MSG_OFFICER = 0x04, CHAT_MSG_YELL = 0x05, CHAT_MSG_WHISPER = 0x06, CHAT_MSG_WHISPER_INFORM = 0x07, CHAT_MSG_EMOTE = 0x08, CHAT_MSG_TEXT_EMOTE = 0x09, CHAT_MSG_SYSTEM = 0x0A, CHAT_MSG_MONSTER_SAY = 0x0B, CHAT_MSG_MONSTER_YELL = 0x0C, CHAT_MSG_MONSTER_EMOTE = 0x0D, CHAT_MSG_CHANNEL = 0x0E, CHAT_MSG_CHANNEL_JOIN = 0x0F, CHAT_MSG_CHANNEL_LEAVE = 0x10, CHAT_MSG_CHANNEL_LIST = 0x11, CHAT_MSG_CHANNEL_NOTICE = 0x12, CHAT_MSG_CHANNEL_NOTICE_USER = 0x13, CHAT_MSG_AFK = 0x14, CHAT_MSG_DND = 0x15, CHAT_MSG_COMBAT_LOG = 0x16, CHAT_MSG_IGNORED = 0x17, CHAT_MSG_SKILL = 0x18, CHAT_MSG_LOOT = 0x19, CHAT_MSG_BATTLEGROUND_EVENT = 0x53, CHAT_MSG_RAIDLEADER = 0x57, CHAT_MSG_RAIDWARNING = 0x58, }; enum Languages { LANG_UNIVERSAL = 0x00, LANG_ORCISH = 0x01, LANG_DARNASSIAN = 0x02, LANG_TAURAHE = 0x03, LANG_DWARVISH = 0x06, LANG_COMMON = 0x07, LANG_DEMONIC = 0x08, LANG_TITAN = 0x09, LANG_THELASSIAN = 0x0A, LANG_DRACONIC = 0x0B, LANG_KALIMAG = 0x0C, LANG_GNOMISH = 0x0D, LANG_TROLL = 0x0E, NUM_LANGUAGES = 0x0E }; /*#define MSG_COLOR_YELLOW "|r" #define MSG_COLOR_RED "|cffff2020" #define MSG_COLOR_GREEN "|c1f40af20" #define MSG_COLOR_LIGHTRED "|cffff6060"*/ #define MSG_COLOR_LIGHTRED "|cffff6060" #define MSG_COLOR_LIGHTBLUE "|cff00ccff" #define MSG_COLOR_BLUE "|cff0000ff" #define MSG_COLOR_GREEN "|cff00ff00" #define MSG_COLOR_RED "|cffff0000" #define MSG_COLOR_GOLD "|cffffcc00" #define MSG_COLOR_GREY "|cff888888" #define MSG_COLOR_WHITE "|cffffffff" #define MSG_COLOR_SUBWHITE "|cffbbbbbb" #define MSG_COLOR_MAGENTA "|cffff00ff" #define MSG_COLOR_YELLOW "|cffffff00" #define MSG_COLOR_CYAN "|cff00ffff" #define CHECKSESSION if(m_session == NULL) return NULL; \ if(m_session->GetPlayer() == NULL) return NULL; class ChatCommand { public: const char * Name; char CommandGroup; bool (ChatHandler::*Handler)(const char* args, WorldSession *m_session) ; std::string Help; ChatCommand * ChildCommands; uint32 NormalValueField; uint32 MaxValueField; uint16 ValueType; // 0 = nothing, 1 = uint, 2 = float }; class SERVER_DECL CommandTableStorage : public Singleton { ChatCommand * _modifyCommandTable; ChatCommand * _debugCommandTable; ChatCommand * _waypointCommandTable; ChatCommand * _GMTicketCommandTable; ChatCommand * _GameObjectCommandTable; ChatCommand * _BattlegroundCommandTable; ChatCommand * _NPCCommandTable; ChatCommand * _CheatCommandTable; ChatCommand * _honorCommandTable; ChatCommand * _petCommandTable; ChatCommand * _recallCommandTable; ChatCommand * _commandTable; ChatCommand * GetSubCommandTable(const char * name); public: void Init(); void Dealloc(); void Load(); void Override(const char * command, const char * level); inline ChatCommand * Get() { return _commandTable; } }; class SERVER_DECL ChatHandler : public Singleton { friend class CommandTableStorage; public: ChatHandler(); ~ChatHandler(); WorldPacket * FillMessageData( uint32 type, uint32 language, const char* message,uint64 guid, uint8 flag = 0) const; WorldPacket * FillSystemMessageData( const char* message ) const; int ParseCommands(const char* text, WorldSession *session); void SystemMessage(WorldSession *m_session, const char *message, ...); void ColorSystemMessage(WorldSession *m_session, const char *colorcode, const char *message, ...); void RedSystemMessage(WorldSession *m_session, const char *message, ...); void GreenSystemMessage(WorldSession *m_session, const char *message, ...); void BlueSystemMessage(WorldSession *m_session, const char *message, ...); void RedSystemMessageToPlr(Player* plr, const char *message, ...); void GreenSystemMessageToPlr(Player* plr, const char *message, ...); void BlueSystemMessageToPlr(Player* plr, const char *message, ...); void SystemMessageToPlr(Player *plr, const char *message, ...); protected: bool hasStringAbbr(const char* s1, const char* s2); void SendMultilineMessage(WorldSession *m_session, const char *str); bool ExecuteCommandInTable(ChatCommand *table, const char* text, WorldSession *m_session); bool ShowHelpForCommand(WorldSession *m_session, ChatCommand *table, const char* cmd); ChatCommand* getCommandTable(); // Level 0 commands bool HandleHelpCommand(const char* args, WorldSession *m_session); bool HandleCommandsCommand(const char* args, WorldSession *m_session); bool HandleNYICommand(const char* args, WorldSession *m_session); bool HandleAcctCommand(const char* args, WorldSession *m_session); bool HandleStartCommand(const char* args, WorldSession *m_session); bool HandleInfoCommand(const char* args, WorldSession *m_session); bool HandleDismountCommand(const char* args, WorldSession *m_session); bool HandleSaveCommand(const char* args, WorldSession *m_session); bool HandleGMListCommand(const char* args, WorldSession *m_session); // Level 1 commands bool CmdSetValueField(WorldSession *m_session, uint32 field, uint32 fieldmax, const char *fieldname, const char* args); bool CmdSetFloatField(WorldSession *m_session, uint32 field, uint32 fieldmax, const char *fieldname, const char* args); bool HandleSummonCommand(const char* args, WorldSession *m_session); bool HandleAppearCommand(const char* args, WorldSession *m_session); bool HandleAnnounceCommand(const char* args, WorldSession *m_session); bool HandleWAnnounceCommand(const char* args, WorldSession *m_session); bool HandleGMOnCommand(const char* args, WorldSession *m_session); bool HandleGMOffCommand(const char* args, WorldSession *m_session); bool HandleGPSCommand(const char* args, WorldSession *m_session); bool HandleKickCommand(const char* args, WorldSession *m_session); bool HandleTaxiCheatCommand(const char* args, WorldSession *m_session); bool HandleModifySpeedCommand(const char* args, WorldSession *m_session); // Debug Commands bool HandleDebugInFrontCommand(const char* args, WorldSession *m_session); bool HandleShowReactionCommand(const char* args, WorldSession *m_session); bool HandleAIMoveCommand(const char* args, WorldSession *m_session); bool HandleMoveInfoCommand(const char* args, WorldSession *m_session); bool HandleDistanceCommand(const char* args, WorldSession *m_session); bool HandleFaceCommand(const char* args, WorldSession *m_session); bool HandleSetBytesCommand(const char* args, WorldSession *m_session); bool HandleGetBytesCommand(const char* args, WorldSession *m_session); bool HandleDebugLandWalk(const char* args, WorldSession *m_session); bool HandleDebugUnroot(const char* args, WorldSession *m_session); bool HandleDebugRoot(const char* args, WorldSession *m_session); bool HandleDebugWaterWalk(const char* args, WorldSession *m_session); bool HandleAggroRangeCommand(const char* args, WorldSession *m_session); bool HandleKnockBackCommand(const char* args, WorldSession *m_session); bool HandleFadeCommand(const char* args, WorldSession *m_session); bool HandleThreatModCommand(const char* args, WorldSession *m_session); bool HandleCalcThreatCommand(const char* args, WorldSession *m_session); bool HandleThreatListCommand(const char* args, WorldSession *m_session); bool HandleNpcSpawnLinkCommand(const char* args, WorldSession *m_session); bool HandleGoStateLinkCommand(const char* args, WorldSession *m_session); bool HandleSilentPlayerCommand(const char* args, WorldSession *m_session); bool HandleDebugDumpCoordsCommmand(const char * args, WorldSession * m_session); bool HandleSendRunSpeedChange(const char * args, WorldSession * m_session); //WayPoint Commands bool HandleWPAddCommand(const char* args, WorldSession *m_session); bool HandleWPShowCommand(const char* args, WorldSession *m_session); bool HandleWPHideCommand(const char* args, WorldSession *m_session); bool HandleWPDeleteCommand(const char* args, WorldSession *m_session); bool HandleWPFlagsCommand(const char* args, WorldSession *m_session); bool HandleWPMoveHereCommand(const char* args, WorldSession *m_session); bool HandleWPWaitCommand(const char* args, WorldSession *m_session); bool HandleWPEmoteCommand(const char* args, WorldSession *m_session); bool HandleWPSkinCommand(const char* args, WorldSession *m_session); bool HandleWPChangeNoCommand(const char* args, WorldSession *m_session); bool HandleWPInfoCommand(const char* args, WorldSession *m_session); bool HandleWPMoveTypeCommand(const char* args, WorldSession *m_session); bool HandleSaveWaypoints(const char* args, WorldSession * m_session); bool HandleGenerateWaypoints(const char* args, WorldSession * m_session); bool HandleDeleteWaypoints(const char* args, WorldSession * m_session); // Level 2 commands bool HandleGUIDCommand(const char* args, WorldSession *m_session); bool HandleNameCommand(const char* args, WorldSession *m_session); bool HandleSubNameCommand(const char* args, WorldSession *m_session); bool HandleDeleteCommand(const char* args, WorldSession *m_session); bool HandleDeMorphCommand(const char* args, WorldSession *m_session); bool HandleItemCommand(const char* args, WorldSession *m_session); bool HandleItemRemoveCommand(const char* args, WorldSession *m_session); bool HandleRunCommand(const char* args, WorldSession *m_session); bool HandleNPCFlagCommand(const char* args, WorldSession *m_session); bool HandleSaveAllCommand(const char* args, WorldSession *m_session); bool HandleRegenerateGossipCommand(const char* args, WorldSession *m_session); bool CreateGuildCommand(const char* args, WorldSession *m_session); bool HandleStartBGCommand(const char* args, WorldSession *m_session); bool HandlePauseBGCommand(const char* args, WorldSession *m_session); bool HandleResetScoreCommand(const char* args, WorldSession *m_session); bool HandleBGInfoCommnad(const char *args, WorldSession *m_session); bool HandleInvincibleCommand(const char *args, WorldSession *m_session); bool HandleInvisibleCommand(const char *args, WorldSession *m_session); bool HandleKillCommand(const char *args, WorldSession *m_session); bool HandleAddSpiritCommand(const char *args, WorldSession *m_session); bool HandleNPCFactionCommand(const char *args, WorldSession *m_session); bool HandleCreatureSpawnCommand(const char *args, WorldSession *m_session); bool HandleGOSelect(const char *args, WorldSession *m_session); bool HandleGODelete(const char *args, WorldSession *m_session); bool HandleGOSpawn(const char *args, WorldSession *m_session); bool HandleGOInfo(const char *args, WorldSession *m_session); bool HandleGOEnable(const char *args, WorldSession *m_session); bool HandleGOActivate(const char* args, WorldSession *m_session); bool HandleGORotate(const char * args, WorldSession * m_session); bool HandleGOMove(const char * args, WorldSession * m_session); bool HandleAddAIAgentCommand(const char* args, WorldSession *m_session); bool HandleDelAIAgentCommand(const char* args, WorldSession *m_session); bool HandleListAIAgentCommand(const char* args, WorldSession *m_session); // Level 3 commands bool HandleRenameGuildCommand(const char* args, WorldSession *m_session); bool HandleMassSummonCommand(const char* args, WorldSession *m_session); bool HandleSecurityCommand(const char* args, WorldSession *m_session); bool HandleWorldPortCommand(const char* args, WorldSession *m_session); bool HandleAddWeaponCommand(const char* args, WorldSession *m_session); bool HandleAllowMovementCommand(const char* args, WorldSession *m_session); bool HandleMoveCommand(const char* args, WorldSession *m_session); bool HandleLearnCommand(const char* args, WorldSession *m_session); bool HandleReviveCommand(const char* args, WorldSession *m_session); bool HandleMorphCommand(const char* args, WorldSession *m_session); bool HandleAddGraveCommand(const char* args, WorldSession *m_session); bool HandleAddSHCommand(const char* args, WorldSession *m_session); bool HandleExploreCheatCommand(const char* args, WorldSession *m_session); bool HandleLevelUpCommand(const char* args, WorldSession *m_session); bool HandleGMTicketGetAllCommand(const char* args, WorldSession *m_session); bool HandleGMTicketGetByIdCommand(const char* args, WorldSession *m_session); bool HandleGMTicketDelByIdCommand(const char* args, WorldSession *m_session); bool HandleAddSkillCommand(const char* args, WorldSession *m_session); bool HandleAddInvItemCommand(const char* args, WorldSession *m_session); bool HandleWeatherCommand(const char* args, WorldSession *m_session); bool HandleGetRankCommand(const char* args, WorldSession *m_session); bool HandleSetRankCommand(const char* args, WorldSession *m_session); bool HandleResetReputationCommand(const char* args, WorldSession *m_session); bool HandleLearnSkillCommand(const char* args, WorldSession *m_session); bool HandleModifySkillCommand(const char* args, WorldSession *m_session); bool HandleRemoveSkillCommand(const char* args, WorldSession *m_session); bool HandleNpcInfoCommand(const char* args, WorldSession *m_session); bool HandleEmoteCommand(const char* args, WorldSession *m_session); bool HandleIncreaseWeaponSkill(const char* args, WorldSession *m_session); bool HandleCastSpellCommand(const char* args, WorldSession *m_session); bool HandleCastSpellNECommand(const char* args, WorldSession *m_session); bool HandleCellDeleteCommand(const char* args, WorldSession *m_session); bool HandleAddRestXPCommand(const char* args, WorldSession *m_session); bool HandleModifyGoldCommand(const char* args, WorldSession *m_session); bool HandleGenerateNameCommand(const char* args, WorldSession *m_session); bool HandleMonsterSayCommand(const char* args, WorldSession *m_session); bool HandleMonsterYellCommand(const char* args, WorldSession* m_session); bool HandleNpcComeCommand(const char* args, WorldSession* m_session); bool HandleBattlegroundCommand(const char* args, WorldSession *m_session); bool HandleSetWorldStateCommand(const char* args, WorldSession *m_session); bool HandlePlaySoundCommand(const char* args, WorldSession *m_session); bool HandleSetBattlefieldStatusCommand(const char* args, WorldSession *m_session); bool HandleAttackerInfoCommand(const char* args, WorldSession *m_session); bool HandleShowAttackersCommand(const char* args, WorldSession *m_session); bool HandleNpcReturnCommand(const char* args, WorldSession* m_session); bool HandleCreateAccountCommand(const char* args, WorldSession *m_session); bool HandleSetRateCommand(const char* args, WorldSession* m_session); bool HandleGetRateCommand(const char* args, WorldSession* m_session); bool HandleResetLevelCommand(const char* args, WorldSession *m_session); bool HandleResetTalentsCommand(const char* args, WorldSession *m_session); bool HandleResetSpellsCommand(const char* args, WorldSession *m_session); bool HandleNpcFollowCommand(const char* args, WorldSession * m_session); bool HandleFormationLink1Command(const char* args, WorldSession * m_session); bool HandleFormationLink2Command(const char* args, WorldSession * m_session); bool HandleNullFollowCommand(const char* args, WorldSession * m_session); bool HandleFormationClearCommand(const char* args, WorldSession * m_session); bool HandleResetSkillsCommand(const char* args, WorldSession * m_session); bool HandlePlayerInfo(const char* args, WorldSession * m_session); //Ban bool HandleBanCharacterCommand(const char* args, WorldSession *m_session); bool HandleUnBanCharacterCommand(const char* args, WorldSession *m_session); //BG bool HandleSetBGScoreCommand(const char* args, WorldSession *m_session); Player* getSelectedChar(WorldSession *m_session, bool showerror = true); Creature * getSelectedCreature(WorldSession *m_session, bool showerror = true); bool HandleGOScale(const char* args, WorldSession *m_session); bool HandleUptimeCommand(const char* args, WorldSession* m_session); bool HandleReviveStringcommand(const char* args, WorldSession* m_session); bool HandleMountCommand(const char* args, WorldSession* m_session); bool HandleGetPosCommand(const char* args, WorldSession* m_session); bool HandleGetTransporterTime(const char* args, WorldSession* m_session); bool HandleSendItemPushResult(const char* args, WorldSession* m_session); bool HandleGOAnimProgress(const char * args, WorldSession * m_session); bool HandleGOExport(const char * args, WorldSession * m_session); bool HandleNpcExport(const char * args, WorldSession * m_session); bool HandleRemoveAurasCommand(const char *args, WorldSession *m_session); bool HandleParalyzeCommand(const char* args, WorldSession *m_session); bool HandleUnParalyzeCommand(const char* args, WorldSession *m_session); bool HandleSetMotdCommand(const char* args, WorldSession* m_session); bool HandleAddItemSetCommand(const char* args, WorldSession* m_session); bool HandleTriggerCommand(const char* args, WorldSession* m_session); bool HandleModifyValueCommand(const char* args, WorldSession* m_session); bool HandleModifyBitCommand(const char* args, WorldSession* m_session); bool HandleGoInstanceCommand(const char* args, WorldSession* m_session); bool HandleCreateInstanceCommand(const char* args, WorldSession* m_session); bool HandleBattlegroundExitCommand(const char* args, WorldSession* m_session); bool HandleExitInstanceCommand(const char* args, WorldSession* m_session); bool HandleCooldownCheatCommand(const char* args, WorldSession* m_session); bool HandleCastTimeCheatCommand(const char* args, WorldSession* m_session); bool HandlePowerCheatCommand(const char* args, WorldSession* m_session); bool HandleGodModeCommand(const char* args, WorldSession* m_session); bool HandleShowCheatsCommand(const char* args, WorldSession* m_session); bool HandleFlySpeedCheatCommand(const char* args, WorldSession* m_session); bool HandleStackCheatCommand(const char* args, WorldSession * m_session); bool HandleFlyCommand(const char* args, WorldSession* m_session); bool HandleLandCommand(const char* args, WorldSession* m_session); bool HandleDBReloadCommand(const char* args, WorldSession* m_session); bool HandleResetHPCommand(const char* args, WorldSession* m_session); // honor bool HandleAddHonorCommand(const char* args, WorldSession* m_session); bool HandleAddKillCommand(const char* args, WorldSession* m_session); bool HandleGlobalHonorDailyMaintenanceCommand(const char* args, WorldSession* m_session); bool HandleNextDayCommand(const char* args, WorldSession* m_session); bool HandlePVPCreditCommand(const char* args, WorldSession* m_session); bool HandleSpawnSpiritGuideCommand(const char* args, WorldSession * m_session); bool HandleUnlearnCommand(const char* args, WorldSession * m_session); bool HandleModifyLevelCommand(const char* args, WorldSession* m_session); // pet bool HandleCreatePetCommand(const char* args, WorldSession* m_session); bool HandleAddPetSpellCommand(const char* args, WorldSession* m_session); bool HandleRemovePetSpellCommand(const char* args, WorldSession* m_session); bool HandleEnableRenameCommand(const char* args, WorldSession* m_session); bool HandleRenamePetCommand(const char* args, WorldSession* m_session); bool HandleShutdownCommand(const char* args, WorldSession* m_session); bool HandleShutdownRestartCommand(const char* args, WorldSession* m_session); bool HandleAllowWhispersCommand(const char* args, WorldSession* m_session); bool HandleBlockWhispersCommand(const char* args, WorldSession* m_session); bool HandleAdvanceAllSkillsCommand(const char* args, WorldSession* m_session); bool HandleKillBySessionCommand(const char* args, WorldSession* m_session); bool HandleKillByPlayerCommand(const char* args, WorldSession* m_session); bool HandleUnlockMovementCommand(const char* args, WorldSession* m_session); bool HandleCastAllCommand(const char* args, WorldSession* m_session); //Recall Commands bool HandleRecallListCommand(const char* args, WorldSession *m_session); bool HandleRecallGoCommand(const char* args, WorldSession *m_session); bool HandleRecallAddCommand(const char* args, WorldSession *m_session); bool HandleRecallDelCommand(const char* args, WorldSession *m_session); bool HandleModPeriodCommand(const char* args, WorldSession * m_session); bool HandleGlobalPlaySoundCommand(const char* args, WorldSession * m_session); bool HandleRecallPortPlayerCommand(const char* args, WorldSession * m_session); bool HandleBanAccountCommand(const char * args, WorldSession * m_session); bool HandleIPBanCommand(const char * args, WorldSession * m_session); bool HandleIPUnBanCommand(const char * args, WorldSession * m_session); bool HandleRemoveItemCommand(const char * args, WorldSession * m_session); bool HandleRenameCommand(const char * args, WorldSession * m_session); bool HandleForceRenameCommand(const char * args, WorldSession * m_session); bool HandleGetStandingCommand(const char * args, WorldSession * m_session); bool HandleSetStandingCommand(const char * args, WorldSession * m_session); bool HandleGetBaseStandingCommand(const char * args, WorldSession * m_session); bool HandleReloadAccountsCommand(const char * args, WorldSession * m_session); bool HandleLookupItemCommand(const char * args, WorldSession * m_session); bool HandleLookupCreatureCommand(const char * args, WorldSession * m_session); bool HandleLookupObjectCommand(const char * args, WorldSession * m_session); bool HandleLookupSpellCommand(const char * args, WorldSession * m_session); bool HandleReloadScriptsCommand(const char * args, WorldSession * m_session); bool HandleNpcPossessCommand(const char * args, WorldSession * m_session); bool HandleNpcUnPossessCommand(const char * args, WorldSession * m_session); bool HandleChangePasswordCommand(const char * args, WorldSession * m_session); bool HandleRehashCommand(const char * args, WorldSession * m_session); /** AI AGENT DEBUG COMMANDS */ bool HandleAIAgentDebugBegin(const char * args, WorldSession * m_session); bool HandleAIAgentDebugContinue(const char * args, WorldSession * m_session); bool HandleAIAgentDebugSkip(const char * args, WorldSession * m_session); bool HandleAddGuardCommand(const char * args, WorldSession * m_session); }; #define sChatHandler ChatHandler::getSingleton() #endif