diff options
Diffstat (limited to 'src/net/ea/guildhandler.cpp')
-rw-r--r-- | src/net/ea/guildhandler.cpp | 182 |
1 files changed, 182 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 +} + +} |