mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 10:26:28 +01:00
163 lines
6.8 KiB
C++
Executable File
163 lines
6.8 KiB
C++
Executable File
/*
|
|
* Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
|
|
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
|
|
*
|
|
* 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 2 of the License, or (at your
|
|
* option) 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef TRINITYCORE_CHAT_H
|
|
#define TRINITYCORE_CHAT_H
|
|
|
|
#include "SharedDefines.h"
|
|
#include "Player.h"
|
|
|
|
#include <vector>
|
|
|
|
class ChatHandler;
|
|
class WorldSession;
|
|
class WorldObject;
|
|
class Creature;
|
|
class Player;
|
|
class Unit;
|
|
struct GameTele;
|
|
|
|
class ChatCommand
|
|
{
|
|
public:
|
|
const char * Name;
|
|
uint32 SecurityLevel; // function pointer required correct align (use uint32)
|
|
bool AllowConsole;
|
|
bool (*Handler)(ChatHandler*, const char* args);
|
|
std::string Help;
|
|
ChatCommand* ChildCommands;
|
|
};
|
|
|
|
class ChatHandler
|
|
{
|
|
public:
|
|
WorldSession* GetSession() { return m_session; }
|
|
explicit ChatHandler(WorldSession* session) : m_session(session) {}
|
|
explicit ChatHandler(Player* player) : m_session(player->GetSession()) {}
|
|
virtual ~ChatHandler() {}
|
|
|
|
static void FillMessageData(WorldPacket* data, WorldSession* session, uint8 type, uint32 language, const char *channelName, uint64 target_guid, const char *message, Unit* speaker);
|
|
|
|
void FillMessageData(WorldPacket* data, uint8 type, uint32 language, uint64 target_guid, const char* message)
|
|
{
|
|
FillMessageData(data, m_session, type, language, NULL, target_guid, message, NULL);
|
|
}
|
|
|
|
void FillSystemMessageData(WorldPacket* data, const char* message)
|
|
{
|
|
FillMessageData(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, 0, message);
|
|
}
|
|
|
|
static char* LineFromMessage(char*& pos) { char* start = strtok(pos, "\n"); pos = NULL; return start; }
|
|
|
|
// function with different implementation for chat/console
|
|
virtual const char *GetTrinityString(int32 entry) const;
|
|
virtual void SendSysMessage(const char *str);
|
|
|
|
void SendSysMessage(int32 entry);
|
|
void PSendSysMessage(const char *format, ...) ATTR_PRINTF(2, 3);
|
|
void PSendSysMessage(int32 entry, ...);
|
|
std::string PGetParseString(int32 entry, ...) const;
|
|
|
|
int ParseCommands(const char* text);
|
|
|
|
static ChatCommand* getCommandTable();
|
|
|
|
bool isValidChatMessage(const char* msg);
|
|
void SendGlobalSysMessage(const char *str);
|
|
|
|
bool hasStringAbbr(const char* name, const char* part);
|
|
|
|
// function with different implementation for chat/console
|
|
virtual bool isAvailable(ChatCommand const& cmd) const;
|
|
virtual std::string GetNameLink() const { return GetNameLink(m_session->GetPlayer()); }
|
|
virtual bool needReportToTarget(Player* chr) const;
|
|
virtual LocaleConstant GetSessionDbcLocale() const;
|
|
virtual int GetSessionDbLocaleIndex() const;
|
|
|
|
bool HasLowerSecurity(Player* target, uint64 guid, bool strong = false);
|
|
bool HasLowerSecurityAccount(WorldSession* target, uint32 account, bool strong = false);
|
|
|
|
void SendGlobalGMSysMessage(const char *str);
|
|
Player* getSelectedPlayer();
|
|
Creature* getSelectedCreature();
|
|
Unit* getSelectedUnit();
|
|
WorldObject* getSelectedObject();
|
|
|
|
char* extractKeyFromLink(char* text, char const* linkType, char** something1 = NULL);
|
|
char* extractKeyFromLink(char* text, char const* const* linkTypes, int* found_idx, char** something1 = NULL);
|
|
|
|
// if args have single value then it return in arg2 and arg1 == NULL
|
|
void extractOptFirstArg(char* args, char** arg1, char** arg2);
|
|
char* extractQuotedArg(char* args);
|
|
|
|
uint32 extractSpellIdFromLink(char* text);
|
|
uint64 extractGuidFromLink(char* text);
|
|
GameTele const* extractGameTeleFromLink(char* text);
|
|
bool GetPlayerGroupAndGUIDByName(const char* cname, Player* &player, Group* &group, uint64 &guid, bool offline = false);
|
|
std::string extractPlayerNameFromLink(char* text);
|
|
// select by arg (name/link) or in-game selection online/offline player
|
|
bool extractPlayerTarget(char* args, Player** player, uint64* player_guid = NULL, std::string* player_name = NULL);
|
|
|
|
std::string playerLink(std::string const& name) const { return m_session ? "|cffffffff|Hplayer:"+name+"|h["+name+"]|h|r" : name; }
|
|
std::string GetNameLink(Player* chr) const { return playerLink(chr->GetName()); }
|
|
|
|
GameObject* GetNearbyGameObject();
|
|
GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid, uint32 entry);
|
|
bool HasSentErrorMessage() const { return sentErrorMessage; }
|
|
void SetSentErrorMessage(bool val){ sentErrorMessage = val; }
|
|
static bool LoadCommandTable() { return load_command_table; }
|
|
static void SetLoadCommandTable(bool val) { load_command_table = val; }
|
|
|
|
bool ShowHelpForCommand(ChatCommand* table, const char* cmd);
|
|
protected:
|
|
explicit ChatHandler() : m_session(NULL) {} // for CLI subclass
|
|
static bool SetDataForCommandInTable(ChatCommand* table, const char* text, uint32 security, std::string const& help, std::string const& fullcommand);
|
|
bool ExecuteCommandInTable(ChatCommand* table, const char* text, const std::string& fullcmd);
|
|
bool ShowHelpForSubCommands(ChatCommand* table, char const* cmd, char const* subcmd);
|
|
|
|
private:
|
|
WorldSession* m_session; // != NULL for chat command call and NULL for CLI command
|
|
|
|
// common global flag
|
|
static bool load_command_table;
|
|
bool sentErrorMessage;
|
|
};
|
|
|
|
class CliHandler : public ChatHandler
|
|
{
|
|
public:
|
|
typedef void Print(void*, char const*);
|
|
explicit CliHandler(void* callbackArg, Print* zprint) : m_callbackArg(callbackArg), m_print(zprint) {}
|
|
|
|
// overwrite functions
|
|
const char *GetTrinityString(int32 entry) const;
|
|
bool isAvailable(ChatCommand const& cmd) const;
|
|
void SendSysMessage(const char *str);
|
|
std::string GetNameLink() const;
|
|
bool needReportToTarget(Player* chr) const;
|
|
LocaleConstant GetSessionDbcLocale() const;
|
|
int GetSessionDbLocaleIndex() const;
|
|
|
|
private:
|
|
void* m_callbackArg;
|
|
Print* m_print;
|
|
};
|
|
|
|
#endif
|