diff options
Diffstat (limited to 'src/net/ea')
-rw-r--r-- | src/net/ea/guildhandler.cpp | 182 | ||||
-rw-r--r-- | src/net/ea/guildhandler.h | 66 | ||||
-rw-r--r-- | src/net/ea/protocol.h | 23 |
3 files changed, 271 insertions, 0 deletions
diff --git a/src/net/ea/guildhandler.cpp b/src/net/ea/guildhandler.cpp new file mode 100644 index 00000000..f4cfc038 --- /dev/null +++ b/src/net/ea/guildhandler.cpp @@ -0,0 +1,182 @@ +/* + * The Mana World + * Copyright (C) 2009 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/guildhandler.h" + +#include "net/ea/messagein.h" +#include "net/ea/protocol.h" + +#include "localplayer.h" + +Net::GuildHandler *guildHandler; + +namespace EAthena { + +GuildHandler::GuildHandler() +{ + static const Uint16 _messages[] = { + SMSG_GUILD_CREATE_RESPONSE, + SMSG_GUILD_INVITE_ACK, + SMSG_GUILD_INVITE, + 0 + }; + handledMessages = _messages; + + guildHandler = this; +} + +void GuildHandler::handleMessage(Net::MessageIn &msg) +{ + switch (msg.getId()) + { + case SMSG_GUILD_CREATE_RESPONSE: + { + int flag = msg.readInt8(); + + if (flag == 0) + { + // Success + } + else if (flag == 1) + { + // Already in a guild + } + else if (flag == 2) + { + // Unable to make (likely name already in use) + } + else if (flag == 3) + { + // Emperium check failed + } + } + break; + case SMSG_GUILD_INVITE_ACK: + { + int flag = msg.readInt8(); + + if (flag == 0) + { + // Fail (already in guild, busy, etc) + } + else if (flag == 1) + { + // Rejected + } + else if (flag == 2) + { + // Accepted + } + else if (flag == 3) + { + // Guild full + } + } + break; + + case SMSG_GUILD_INVITE: + { + int guildId = msg.readInt32(); + std::string guildName = msg.readString(24); + + printf("Guild invite for %d (%s)\n", guildId, guildName.c_str()); + + // TODO + } + break; + } +} + +void GuildHandler::create(const std::string &name) +{ + MessageOut msg(CMSG_GUILD_CREATE); + msg.writeInt32(0); // Unused + msg.writeString(name, 24); +} + +void GuildHandler::invite(int guildId, const std::string &name) +{ + // TODO +} + +void GuildHandler::invite(int guildId, Player *player) +{ + MessageOut msg(CMSG_GUILD_INVITE); + msg.writeInt32(player->getId()); + msg.writeInt32(0); // Unused + msg.writeInt32(0); // Unused +} + +void GuildHandler::inviteResponse(int guildId, bool response) +{ + MessageOut msg(CMSG_GUILD_INVITE_REPLY); + msg.writeInt32(guildId); + msg.writeInt8(response); + msg.writeInt8(0); // Unused + msg.writeInt16(0); // Unused +} + +void GuildHandler::leave(int guildId) +{ + MessageOut msg(CMSG_GUILD_LEAVE); + msg.writeInt32(guildId); + msg.writeInt32(0); // Account ID + msg.writeInt32(player_node->getId()); + msg.writeString("", 30); // Message +} + +void GuildHandler::kick(int guildId, int playerId) +{ + // TODO +} + +void GuildHandler::chat(int guildId, const std::string &text) +{ + // TODO +} + +void GuildHandler::memberList(int guildId) +{ + // TODO +} + +void GuildHandler::changeMemberPostion(int guildId, int playerId, int level) +{ + // TODO +} + +void GuildHandler::requestAlliance(int guildId, int otherGuildId) +{ + // TODO +} + +void GuildHandler::requestAllianceResponse(int guildId, int otherGuildId, + bool response) +{ + // TODO +} + +void GuildHandler::endAlliance(int guildId, int otherGuildId) +{ + // TODO +} + +} diff --git a/src/net/ea/guildhandler.h b/src/net/ea/guildhandler.h new file mode 100644 index 00000000..e80e4818 --- /dev/null +++ b/src/net/ea/guildhandler.h @@ -0,0 +1,66 @@ +/* + * The Mana World + * Copyright (C) 2009 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_GUILDHANDLER_H +#define NET_EA_GUILDHANDLER_H + +#include "net/guildhandler.h" + +#include "net/ea/messagehandler.h" + +namespace EAthena { + +class GuildHandler : public Net::GuildHandler, public MessageHandler +{ + public: + GuildHandler(); + + void handleMessage(Net::MessageIn &msg); + + void create(const std::string &name); + + void invite(int guildId, const std::string &name); + + void invite(int guildId, Player *player); + + void inviteResponse(int guildId, bool response); + + void leave(int guildId); + + void kick(int guildId, int playerId); + + void chat(int guildId, const std::string &text); + + void memberList(int guildId); + + void changeMemberPostion(int guildId, int playerId, int level); + + void requestAlliance(int guildId, int otherGuildId); + + void requestAllianceResponse(int guildId, int otherGuildId, + bool response); + + void endAlliance(int guildId, int otherGuildId); +}; + +} + +#endif // NET_EA_GUILDHANDLER_H diff --git a/src/net/ea/protocol.h b/src/net/ea/protocol.h index 1e093e91..e6a417aa 100644 --- a/src/net/ea/protocol.h +++ b/src/net/ea/protocol.h @@ -162,6 +162,10 @@ static const int STORAGE_OFFSET = 1; #define SMSG_ADMIN_KICK_ACK 0x00cd +#define SMSG_GUILD_CREATE_RESPONSE 0x0167 +#define SMSG_GUILD_INVITE_ACK 0x0169 +#define SMSG_GUILD_INVITE 0x016A + #define SMSG_MVP 0x010c /********************************** @@ -242,4 +246,23 @@ static const int STORAGE_OFFSET = 1; #define CMSG_ADMIN_KICK 0x00CC #define CMSG_ADMIN_MUTE 0x0149 +#define CMSG_GUILD_CHECK_MASTER 0x014D +#define CMSG_GUILD_REQUEST_INFO 0x014F +#define CMSG_GUILD_REQUEST_EMBLEM 0x0151 +#define CMSG_GUILD_CHANGE_EMBLEM 0x0153 +#define CMSG_GUILD_CHANGE_MEMBER_POS 0x0155 +#define CMSG_GUILD_LEAVE 0x0159 +#define CMSG_GUILD_EXPULSION 0x015B +#define CMSG_GUILD_BREAK 0x015D +#define CMSG_GUILD_CHANGE_POS_INFO 0x0161 +#define CMSG_GUILD_CREATE 0x0165 +#define CMSG_GUILD_INVITE 0x0168 +#define CMSG_GUILD_INVITE_REPLY 0x016B +#define CMSG_GUILD_CHANGE_NOTICE 0x016E +#define CMSG_GUILD_ALLIANCE_REQUEST 0x0170 +#define CMSG_GUILD_ALLIANCE_REPLY 0x0172 +#define CMSG_GUILD_MESSAGE 0x017E +#define CMSG_GUILD_OPPOSITION 0x0180 +#define CMSG_GUILD_ALLIANCE_DELETE 0x0183 + #endif |