diff options
Diffstat (limited to 'src/gui/chat.h')
-rw-r--r-- | src/gui/chat.h | 203 |
1 files changed, 175 insertions, 28 deletions
diff --git a/src/gui/chat.h b/src/gui/chat.h index 114b389c..bbca76ad 100644 --- a/src/gui/chat.h +++ b/src/gui/chat.h @@ -1,26 +1,26 @@ /* * The Mana World - * Copyright 2004 The Mana World Development Team + * Copyright (C) 2004 The Mana World Development Team * * This file is part of The Mana World. * - * The Mana World is free software; you can redistribute it and/or modify + * 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 * any later version. * - * The Mana World is distributed in the hope that it will be useful, + * 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 The Mana World; if not, write to the Free Software + * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef _TMW_CHAT_H -#define _TMW_CHAT_H +#ifndef CHAT_H +#define CHAT_H #include <list> #include <string> @@ -31,25 +31,86 @@ #include "window.h" -#include "../guichanfwd.h" - class BrowserBox; +class Channel; +class Recorder; class ScrollArea; class TabbedArea; -class Channel; class ItemLinkHandler; +#ifdef EATHENA_SUPPORT +class Network; +class Party; +#endif enum { - BY_GM = 0, - BY_PLAYER = 1, - BY_OTHER = 2, - BY_SERVER = 3, - BY_CHANNEL = 4, + BY_GM, +#ifdef EATHENA_SUPPORT + BY_PARTY, +#endif + BY_PLAYER, + BY_OTHER, + BY_SERVER, + BY_CHANNEL, + ACT_WHISPER, // getting whispered at + ACT_IS, // equivalent to "/me" on IRC BY_LOGGER }; /** + * gets in between usernick and message text depending on + * message type + */ +#define CAT_NORMAL ": " +#define CAT_IS "" +#define CAT_WHISPER " whispers: " + +#ifdef EATHENA_SUPPORT +/** job dependend identifiers (?) */ +#define SKILL_BASIC 0x0001 +#define SKILL_WARP 0x001b +#define SKILL_STEAL 0x0032 +#define SKILL_ENVENOM 0x0034 + +/** basic skills identifiers */ +#define BSKILL_TRADE 0x0000 +#define BSKILL_EMOTE 0x0001 +#define BSKILL_SIT 0x0002 +#define BSKILL_CREATECHAT 0x0003 +#define BSKILL_JOINPARTY 0x0004 +#define BSKILL_SHOUT 0x0005 +#define BSKILL_PK 0x0006 // ?? +#define BSKILL_SETALLIGN 0x0007 // ?? + +/** reasons why action failed */ +#define RFAIL_SKILLDEP 0x00 +#define RFAIL_INSUFHP 0x01 +#define RFAIL_INSUFSP 0x02 +#define RFAIL_NOMEMO 0x03 +#define RFAIL_SKILLDELAY 0x04 +#define RFAIL_ZENY 0x05 +#define RFAIL_WEAPON 0x06 +#define RFAIL_REDGEM 0x07 +#define RFAIL_BLUEGEM 0x08 +#define RFAIL_OVERWEIGHT 0x09 +#define RFAIL_GENERIC 0x0a + +/** should always be zero if failed */ +#define SKILL_FAILED 0x00 + +struct CHATSKILL +{ + short skill; + short bskill; + short unused; + char success; + char reason; +}; +#endif + +#define DEFAULT_CHAT_WINDOW_SCROLL 7 // 1 means `1/8th of the window size'. + +/** * The chat window. * * \ingroup Interface @@ -62,10 +123,14 @@ class ChatWindow : public Window, /** * Constructor. */ +#ifdef TMWSERV_SUPPORT ChatWindow(); +#else + ChatWindow(Network *network); +#endif /** - * + * Destructor: used to write back values to the config file */ ~ChatWindow(); @@ -75,26 +140,36 @@ class ChatWindow : public Window, */ void widgetResized(const gcn::Event &event); - /** - * Gets the focused tab's name - */ - const std::string& getFocused() const; - - /** - * Clear the tab with the given name - */ - void clearTab(const std::string &tab); + void logic(); /** * Adds a line of text to our message list. Parameters: * * @param line Text message. - * @param own Type of message (usually the owner-type). + * @parem own Type of message (usually the owner-type). * @param channelName which channel to send the message to. */ void chatLog(std::string line, int own = BY_SERVER, - std::string channelName = ""); + std::string channelName = "", + bool ignoreRecord = false); + +#ifdef EATHENA_SUPPORT + /** + * Calls original chat_log() after processing the packet. + */ + void chatLog(CHATSKILL); +#endif + + /** + * Gets the focused tab's name + */ + const std::string& getFocused() const; + + /** + * Clear the tab with the given name + */ + void clearTab(const std::string &tab); /** * Performs action. @@ -111,6 +186,7 @@ class ChatWindow : public Window, */ bool isInputFocused(); +#ifdef TMWSERV_SUPPORT /** * Determines whether the message is a command or message, then * sends the given message to the game server to be said, or to the @@ -135,6 +211,33 @@ class ChatWindow : public Window, void sendToChannel(short channel, const std::string &user, const std::string &msg); +#else + /** + * Determines whether to send a command or an ordinary message, then + * contructs packets & sends them. + * + * @param nick The character's name to display in front. + * @param msg The message text which is to be send. + * + * NOTE: + * The nickname is required by the server, if not specified + * the message may not be sent unless a command was intended + * which requires another packet to be constructed! you can + * achieve this by putting a slash ("/") infront of the + * message followed by the command name and the message. + * of course all slash-commands need implemented handler- + * routines. ;-) + * remember, a line starting with "@" is not a command that needs + * to be parsed rather is sent using the normal chat-packet. + * + * EXAMPLE: + * // for an global announcement /- command + * chatlog.chat_send("", "/announce Hello to all logged in users!"); + * // for simple message by a user /- message + * chatlog.chat_send("Zaeiru", "Hello to all users on the screen!"); + */ + void chatSend(const std::string &nick, std::string msg); +#endif /** Called when key is pressed */ void keyPressed(gcn::KeyEvent &event); @@ -143,7 +246,7 @@ class ChatWindow : public Window, void setInputText(std::string input_str); /** Called to add item to chat */ - void addItemText(int itemid, const std::string &item); + void addItemText(const std::string &item); /** Override to reset mTmpVisible */ void setVisible(bool visible); @@ -151,14 +254,45 @@ class ChatWindow : public Window, /** Check if tab with that name already exists */ bool tabExists(const std::string &tabName); - void logic(); + /** + * Scrolls the chat window + * + * @param amount direction and amount to scroll. Negative numbers scroll + * up, positive numbers scroll down. The absolute amount indicates the + * amount of 1/8ths of chat window real estate that should be scrolled. + */ + void scroll(int amount); + +#ifdef EATHENA_SUPPORT + /** + * party implements the partying chat commands + * + * @param command is the party command to perform + * @param msg is the remainder of the message + */ + void party(const std::string &command, const std::string &msg); +#endif + + /** + * help implements the /help command + * + * @param msg1 is the command that the player needs help on + * @param msg2 is the sub-command relating to the command + */ + void help(const std::string &msg1, const std::string &msg2); private: +#ifdef EATHENA_SUPPORT + Network *mNetwork; +#endif bool mTmpVisible; int mItems; int mItemsKeep; + void whisper(const std::string &nick, std::string msg); + + /** One item in the chat log */ struct CHATLOG { std::string nick; @@ -166,6 +300,11 @@ class ChatWindow : public Window, int own; }; +#ifdef EATHENA_SUPPORT + /** Constructs failed messages for actions */ + std::string const_msg(CHATSKILL); +#endif + /** * A structure combining a BrowserBox with its ScrollArea. */ @@ -196,6 +335,14 @@ class ChatWindow : public Window, typedef History::iterator HistoryIterator; History mHistory; /**< Command history. */ HistoryIterator mCurHist; /**< History iterator. */ + Recorder *mRecorder; /**< Recording class */ + bool mReturnToggles; /**< Marks whether <Return> toggles the chat log + or not */ +#ifdef EATHENA_SUPPORT + char mPartyPrefix; /**< Messages beginning with the prefix are sent to + the party */ + Party *mParty; +#endif }; extern ChatWindow *chatWindow; |