From 128f908908b77b242b749b27879ba2a9f70a94f6 Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Thu, 2 Apr 2009 06:08:23 -0600 Subject: Add some missing handler for eAthena Also expand aAthena's AdminHandler --- src/net/adminhandler.h | 2 + src/net/ea/adminhandler.cpp | 32 +++++++++--- src/net/ea/adminhandler.h | 2 + src/net/ea/maphandler.cpp | 117 ++++++++++++++++++++++++++++++++++++++++++++ src/net/ea/maphandler.h | 46 +++++++++++++++++ src/net/ea/protocol.h | 3 ++ 6 files changed, 196 insertions(+), 6 deletions(-) create mode 100644 src/net/ea/maphandler.cpp create mode 100644 src/net/ea/maphandler.h (limited to 'src/net') diff --git a/src/net/adminhandler.h b/src/net/adminhandler.h index c3a029b1..c6073b4f 100644 --- a/src/net/adminhandler.h +++ b/src/net/adminhandler.h @@ -46,6 +46,8 @@ class AdminHandler virtual void unban(const std::string &name) {} + virtual void mute(int playerId, int type, int limit) {} + // TODO }; } diff --git a/src/net/ea/adminhandler.cpp b/src/net/ea/adminhandler.cpp index 83b798a6..c1194ef1 100644 --- a/src/net/ea/adminhandler.cpp +++ b/src/net/ea/adminhandler.cpp @@ -21,6 +21,7 @@ #include "net/ea/adminhandler.h" +#include "net/ea/chathandler.h" #include "net/ea/protocol.h" #include "net/messagein.h" @@ -39,13 +40,12 @@ #include -#define SERVER_NAME "Server" - AdminHandler *adminHandler; AdminHandler::AdminHandler() { static const Uint16 _messages[] = { + SMSG_ADMIN_KICK_ACK, 0 }; handledMessages = _messages; @@ -54,9 +54,15 @@ AdminHandler::AdminHandler() void AdminHandler::handleMessage(MessageIn &msg) { + int id; switch (msg.getId()) { - case SMSG_WHISPER_RESPONSE: + case SMSG_ADMIN_KICK_ACK: + id = msg.readInt32(); + if (id == 0) + localChatTab->chatLog(_("Kick failed!"), BY_SERVER); + else + localChatTab->chatLog(_("Kick succedded!"), BY_SERVER); break; } } @@ -89,17 +95,31 @@ void AdminHandler::kick(int playerId) void AdminHandler::kick(const std::string &name) { - // Unsupported + chatHandler->talk("@kick " + name); } void AdminHandler::ban(int playerId) {} void AdminHandler::ban(const std::string &name) -{} +{ + chatHandler->talk("@ban " + name); +} void AdminHandler::unban(int playerId) {} void AdminHandler::unban(const std::string &name) -{} +{ + chatHandler->talk("@unban " + name); +} + +void AdminHandler::mute(int playerId, int type, int limit) +{ + return; // Still looking into this + + MessageOut outMsg(CMSG_ADMIN_MUTE); + outMsg.writeInt32(playerId); + outMsg.writeInt8(type); + outMsg.writeInt16(limit); +} diff --git a/src/net/ea/adminhandler.h b/src/net/ea/adminhandler.h index 95dd8072..ae40e9d7 100644 --- a/src/net/ea/adminhandler.h +++ b/src/net/ea/adminhandler.h @@ -49,6 +49,8 @@ class AdminHandler : public MessageHandler, public Net::AdminHandler virtual void unban(int playerId); virtual void unban(const std::string &name); + + virtual void mute(int playerId, int type, int limit); }; extern AdminHandler *adminHandler; diff --git a/src/net/ea/maphandler.cpp b/src/net/ea/maphandler.cpp new file mode 100644 index 00000000..c7fe42d9 --- /dev/null +++ b/src/net/ea/maphandler.cpp @@ -0,0 +1,117 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "net/ea/maphandler.h" + +#include "net/ea/protocol.h" + +#include "net/messagein.h" +#include "net/messageout.h" + +#include "localplayer.h" +#include "log.h" +#include "main.h" + +#include "gui/widgets/chattab.h" + +#include "utils/gettext.h" +#include "utils/stringutils.h" + +MapHandler *mapHandler; + +MapHandler::MapHandler() +{ + static const Uint16 _messages[] = { + SMSG_CONNECTION_PROBLEM, + SMSG_LOGIN_SUCCESS, + SMSG_SERVER_PING, + SMSG_WHO_ANSWER, + 0 + }; + handledMessages = _messages; + mapHandler = this; +} + +void MapHandler::handleMessage(MessageIn &msg) +{ + int code; + unsigned char direction; + + switch (msg.getId()) + { + case SMSG_CONNECTION_PROBLEM: + code = msg.readInt8(); + logger->log("Connection problem: %i", code); + + switch (code) { + case 0: + errorMessage = _("Authentication failed"); + break; + case 2: + errorMessage = _("This account is already logged in"); + break; + default: + errorMessage = _("Unknown connection error"); + break; + } + state = STATE_ERROR; + break; + + case SMSG_LOGIN_SUCCESS: + msg.readInt32(); // server tick + msg.readCoordinates(player_node->mX, player_node->mY, direction); + msg.skip(2); // unknown + logger->log("Protocol: Player start position: (%d, %d), Direction: %d", + player_node->mX, player_node->mY, direction); + state = STATE_GAME; + break; + + case SMSG_SERVER_PING: + // We ignore this for now + // int tick = msg.readInt32() + break; + + case SMSG_WHO_ANSWER: + localChatTab->chatLog("Online users: " + toString(msg.readInt32()), + BY_SERVER); + break; + } +} + +void MapHandler::connect() +{ + // TODO +} + +void MapHandler::mapLoaded(const std::string &mapName) +{ + MessageOut outMsg(CMSG_MAP_LOADED); +} + +void MapHandler::who() +{ + MessageOut outMsg(0x00c1); +} + +void MapHandler::quit() +{ + MessageOut outMsg(CMSG_CLIENT_QUIT); +} diff --git a/src/net/ea/maphandler.h b/src/net/ea/maphandler.h new file mode 100644 index 00000000..c264cf10 --- /dev/null +++ b/src/net/ea/maphandler.h @@ -0,0 +1,46 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * 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. + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef NET_EA_MAPHANDLER_H +#define NET_EA_MAPHANDLER_H + +#include "net/messagehandler.h" +#include "net/net.h" + +class MapHandler : public MessageHandler, public Net::MapHandler +{ + public: + MapHandler(); + + virtual void handleMessage(MessageIn &msg); + + virtual void connect(); + + virtual void mapLoaded(const std::string &mapName); + + virtual void who(); + + virtual void quit(); +}; + +extern MapHandler *mapHandler; + +#endif // NET_EA_MAPHANDLER_H diff --git a/src/net/ea/protocol.h b/src/net/ea/protocol.h index 5a2260e6..356b34a4 100644 --- a/src/net/ea/protocol.h +++ b/src/net/ea/protocol.h @@ -117,6 +117,8 @@ static const int STORAGE_OFFSET = 1; #define SMSG_PLAYER_STORAGE_REMOVE 0x00f6 /**< Remove item/equip from storage */ #define SMSG_PLAYER_STORAGE_CLOSE 0x00f8 /**< Storage access closed */ +#define SMSG_ADMIN_KICK_ACK 0x00cd + /********************************** * Packets from client to server * **********************************/ @@ -166,6 +168,7 @@ static const int STORAGE_OFFSET = 1; #define CMSG_ADMIN_LOCAL_ANNOUNCE 0x019C #define CMSG_ADMIN_HIDE 0x019D #define CMSG_ADMIN_KICK 0x00CC +#define CMSG_ADMIN_MUTE 0x0149 /** Encodes coords and direction in 3 bytes data */ void set_coordinates(char *data, unsigned short x, unsigned short y, unsigned char direction); -- cgit v1.2.3-60-g2f50