diff options
-rw-r--r-- | mana.cbp | 8 | ||||
-rw-r--r-- | mana.config | 2 | ||||
-rw-r--r-- | mana.files | 4 | ||||
-rw-r--r-- | src/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/gui/guildwindow.cpp | 18 | ||||
-rw-r--r-- | src/gui/guildwindow.h | 5 | ||||
-rw-r--r-- | src/localplayer.cpp | 11 | ||||
-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 | ||||
-rw-r--r-- | src/net/guildhandler.h | 30 | ||||
-rw-r--r-- | src/net/manaserv/chatserver/guild.cpp | 99 | ||||
-rw-r--r-- | src/net/manaserv/chatserver/guild.h | 67 | ||||
-rw-r--r-- | src/net/manaserv/guildhandler.cpp | 88 | ||||
-rw-r--r-- | src/net/manaserv/guildhandler.h | 31 | ||||
-rw-r--r-- | src/net/net.cpp | 4 |
17 files changed, 440 insertions, 206 deletions
@@ -533,6 +533,14 @@ <Option target="eAthena" /> <Option target="UNIX eAthena" /> </Unit> + <Unit filename="src\net\ea\guildhandler.cpp"> + <Option target="eAthena" /> + <Option target="Unix eAthena" /> + </Unit> + <Unit filename="src\net\ea\guildhandler.h"> + <Option target="eAthena" /> + <Option target="Unix eAthena" /> + </Unit> <Unit filename="src\net\ea\inventoryhandler.cpp"> <Option target="eAthena" /> <Option target="UNIX eAthena" /> diff --git a/mana.config b/mana.config index f97325b7..643c5d36 100644 --- a/mana.config +++ b/mana.config @@ -1 +1,3 @@ #include "../config.h" +#define MANASERV_SUPPORT +#define EATHENA_SUPPORT @@ -317,6 +317,8 @@ src/net/ea/generalhandler.cpp src/net/ea/generalhandler.h src/net/ea/gui/partytab.cpp src/net/ea/gui/partytab.h +src/net/ea/guildhandler.cpp +src/net/ea/guildhandler.h src/net/ea/inventoryhandler.cpp src/net/ea/inventoryhandler.h src/net/ea/itemhandler.cpp @@ -359,8 +361,6 @@ src/net/manaserv/charhandler.cpp src/net/manaserv/charhandler.h src/net/manaserv/chathandler.cpp src/net/manaserv/chathandler.h -src/net/manaserv/chatserver/guild.cpp -src/net/manaserv/chatserver/guild.h src/net/manaserv/connection.cpp src/net/manaserv/connection.h src/net/manaserv/effecthandler.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5ac29305..ec0430cf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -457,6 +457,8 @@ SET(SRCS_EA net/ea/gamehandler.h net/ea/generalhandler.cpp net/ea/generalhandler.h + net/ea/guildhandler.cpp + net/ea/guildhandler.h net/ea/inventoryhandler.cpp net/ea/inventoryhandler.h net/ea/itemhandler.cpp @@ -491,8 +493,6 @@ SET(SRCS_MANA gui/guildlistbox.h gui/guildwindow.cpp gui/guildwindow.h - net/manaserv/chatserver/guild.cpp - net/manaserv/chatserver/guild.h net/manaserv/adminhandler.cpp net/manaserv/adminhandler.h net/manaserv/beinghandler.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 879d88f7..b91930a4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -395,8 +395,6 @@ mana_SOURCES += \ gui/guildlistbox.h \ gui/guildwindow.cpp \ gui/guildwindow.h \ - net/manaserv/chatserver/guild.cpp \ - net/manaserv/chatserver/guild.h \ net/manaserv/adminhandler.cpp \ net/manaserv/adminhandler.h \ net/manaserv/beinghandler.cpp \ @@ -469,6 +467,8 @@ mana_SOURCES += \ net/ea/gamehandler.h \ net/ea/generalhandler.cpp \ net/ea/generalhandler.h \ + net/ea/guildhandler.cpp \ + net/ea/guildhandler.h \ net/ea/inventoryhandler.cpp \ net/ea/inventoryhandler.h \ net/ea/itemhandler.cpp \ diff --git a/src/gui/guildwindow.cpp b/src/gui/guildwindow.cpp index 83ff12a1..1868de6a 100644 --- a/src/gui/guildwindow.cpp +++ b/src/gui/guildwindow.cpp @@ -38,7 +38,8 @@ #include "log.h" #include "localplayer.h" -#include "net/manaserv/chatserver/guild.h" +#include "net/guildhandler.h" +#include "net/net.h" #include "utils/dtor.h" #include "utils/gettext.h" @@ -132,7 +133,7 @@ void GuildWindow::action(const gcn::ActionEvent &event) short guild = getSelectedGuild(); if (guild) { - ManaServ::ChatServer::Guild::quitGuild(guild); + Net::getGuildHandler()->leave(guild); localChatTab->chatLog(strprintf(_("Guild %s quit."), mGuildTabs->getSelectedTab()->getCaption().c_str()), BY_SERVER); } @@ -146,7 +147,7 @@ void GuildWindow::action(const gcn::ActionEvent &event) return; } // Process guild name to be created, and unfocus. - ManaServ::ChatServer::Guild::createGuild(name); + Net::getGuildHandler()->create(name); // Defocus dialog mFocus = false; @@ -160,7 +161,7 @@ void GuildWindow::action(const gcn::ActionEvent &event) short selectedGuild = getSelectedGuild(); // Process invited user to be created and unfocus. - ManaServ::ChatServer::Guild::invitePlayer(name, selectedGuild); + Net::getGuildHandler()->invite(selectedGuild, name); // Defocus dialog mFocus = false; @@ -170,7 +171,7 @@ void GuildWindow::action(const gcn::ActionEvent &event) else if (eventId == "yes") { logger->log("Sending invitation acceptance."); - ManaServ::ChatServer::Guild::acceptInvite(invitedGuild); + Net::getGuildHandler()->inviteResponse(invitedGuildId, true); } } @@ -238,7 +239,8 @@ short GuildWindow::getSelectedGuild() } void GuildWindow::openAcceptDialog(const std::string &inviterName, - const std::string &guildName) + const std::string &guildName, + const int guildId) { std::string msg = strprintf(_("%s has invited you to join the guild %s."), inviterName.c_str(), guildName.c_str()); @@ -247,13 +249,13 @@ void GuildWindow::openAcceptDialog(const std::string &inviterName, acceptDialog = new ConfirmDialog(_("Accept Guild Invite"), msg, this); acceptDialog->addActionListener(this); - invitedGuild = guildName; + invitedGuildId = guildId; } void GuildWindow::requestMemberList(short guildId) { // Get the list of members for displaying in the guild window. - ManaServ::ChatServer::Guild::getGuildMembers(guildId); + Net::getGuildHandler()->memberList(guildId); } void GuildWindow::removeTab(int guildId) diff --git a/src/gui/guildwindow.h b/src/gui/guildwindow.h index 15f35b00..5afe01dd 100644 --- a/src/gui/guildwindow.h +++ b/src/gui/guildwindow.h @@ -84,7 +84,8 @@ public: /** * Create a dialog for accepting an invite */ - void openAcceptDialog(const std::string &inviterName, const std::string &guildName); + void openAcceptDialog(const std::string &inviterName, + const std::string &guildName, const int guildId); /** * Request member list @@ -117,7 +118,7 @@ private: TabbedArea *mGuildTabs; ScrollArea *mScrollArea; bool mFocus; - std::string invitedGuild; + int invitedGuildId; typedef std::map<std::string, GuildListBox*> GuildListMap; GuildListMap mGuildLists; }; diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 22ca20d1..e736a01c 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -46,6 +46,7 @@ #include "gui/widgets/chattab.h" +#include "net/guildhandler.h" #include "net/inventoryhandler.h" #include "net/net.h" #include "net/partyhandler.h" @@ -54,12 +55,8 @@ #include "net/tradehandler.h" #include "effectmanager.h" -#ifdef MANASERV_SUPPORT #include "guild.h" -#include "net/manaserv/chatserver/guild.h" -#endif - #include "resources/animation.h" #include "resources/imageset.h" #include "resources/itemdb.h" @@ -368,6 +365,10 @@ bool LocalPlayer::checkInviteRights(const std::string &guildName) void LocalPlayer::inviteToGuild(Being *being) { + if (being->getType() != PLAYER) + return; + Player *player = static_cast<Player*>(being); + // TODO: Allow user to choose which guild to invite being to // For now, just invite to the first guild you have permissions to invite with std::map<int, Guild*>::iterator itr = mGuilds.begin(); @@ -376,7 +377,7 @@ void LocalPlayer::inviteToGuild(Being *being) { if (checkInviteRights(itr->second->getName())) { - ManaServ::ChatServer::Guild::invitePlayer(being->getName(), itr->second->getId()); + Net::getGuildHandler()->invite(itr->second->getId(), player); return; } } 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 diff --git a/src/net/guildhandler.h b/src/net/guildhandler.h index d7bd73e6..bba261bc 100644 --- a/src/net/guildhandler.h +++ b/src/net/guildhandler.h @@ -22,36 +22,42 @@ #ifndef GUILDHANDLER_H #define GUILDHANDLER_H +#include "player.h" + #include <iosfwd> namespace Net { + class GuildHandler { public: - virtual void create(const std::string &name) {} + virtual void create(const std::string &name) = 0; - virtual void join(int guildId) {} + virtual void invite(int guildId, const std::string &name) = 0; - virtual void invite(int guidId, int playerId) {} + virtual void invite(int guildId, Player *player) = 0; - virtual void inviteResponse(int guidId, bool response) {} + virtual void inviteResponse(int guildId, bool response) = 0; - virtual void leave(int guidId) {} + virtual void leave(int guildId) = 0; - virtual void kick(int guidId, int playerId) {} + virtual void kick(int guildId, int playerId) = 0; - virtual void chat(int guidId, const std::string &text) {} + virtual void chat(int guildId, const std::string &text) = 0; - virtual void memberList(int guidId) {} + virtual void memberList(int guildId) = 0; - virtual void changeMemberPostion(int guildId, int playerId, int level) {} + virtual void changeMemberPostion(int guildId, int playerId, + int level) = 0; - virtual void requestAlliance(int guildId, int otherGuildId) {} + virtual void requestAlliance(int guildId, int otherGuildId) = 0; - virtual void requestAllianceResponse(int guildId, int otherGuildId, bool response) {} + virtual void requestAllianceResponse(int guildId, int otherGuildId, + bool response) = 0; - virtual void endAlliance(int guildId, int otherGuildId) {} + virtual void endAlliance(int guildId, int otherGuildId) = 0; }; + } #endif // GUILDHANDLER_H diff --git a/src/net/manaserv/chatserver/guild.cpp b/src/net/manaserv/chatserver/guild.cpp deleted file mode 100644 index 1f0990b1..00000000 --- a/src/net/manaserv/chatserver/guild.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - * 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 "guild.h" - -#include "net/manaserv/connection.h" -#include "net/manaserv/messageout.h" -#include "net/manaserv/protocol.h" - -#include "log.h" - -namespace ManaServ -{ - -extern Connection *chatServerConnection; - -void ChatServer::Guild::createGuild(const std::string &name) -{ - logger->log("Sending PCMSG_GUILD_CREATE"); - MessageOut msg(PCMSG_GUILD_CREATE); - - msg.writeString(name); - - chatServerConnection->send(msg); -} - -void ChatServer::Guild::invitePlayer(const std::string &name, short guildId) -{ - logger->log("Sending PCMSG_GUILD_INVITE"); - MessageOut msg(PCMSG_GUILD_INVITE); - - msg.writeInt16(guildId); - msg.writeString(name); - - chatServerConnection->send(msg); -} - -void ChatServer::Guild::acceptInvite(const std::string &name) -{ - logger->log("Sending PCMSG_GUILD_ACCEPT"); - MessageOut msg(PCMSG_GUILD_ACCEPT); - - msg.writeString(name); - - chatServerConnection->send(msg); -} - -void ChatServer::Guild::getGuildMembers(short guildId) -{ - logger->log("Sending PCMSG_GUILD_GET_MEMBERS"); - MessageOut msg(PCMSG_GUILD_GET_MEMBERS); - - msg.writeInt16(guildId); - - chatServerConnection->send(msg); -} - -void ChatServer::Guild::promoteMember(const std::string &name, - short guildId, short level) -{ - logger->log("Sending PCMSG_GUILD_PROMOTE_MEMBER"); - MessageOut msg(PCMSG_GUILD_PROMOTE_MEMBER); - - msg.writeInt16(guildId); - msg.writeString(name); - msg.writeInt8(level); - - chatServerConnection->send(msg); -} - -void ChatServer::Guild::quitGuild(short guildId) -{ - logger->log("Sending PCMSG_GUILD_QUIT"); - MessageOut msg(PCMSG_GUILD_QUIT); - - msg.writeInt16(guildId); - - chatServerConnection->send(msg); -} - -} diff --git a/src/net/manaserv/chatserver/guild.h b/src/net/manaserv/chatserver/guild.h deleted file mode 100644 index 7b9aef04..00000000 --- a/src/net/manaserv/chatserver/guild.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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_MANASERV_CHATSERVER_GUILD_H -#define NET_MANASERV_CHATSERVER_GUILD_H - -#include <iosfwd> - -namespace ManaServ -{ - namespace ChatServer - { - namespace Guild - { - /** - * Create guild. - */ - void createGuild(const std::string &name); - - /** - * Invite a player to your guild. - */ - void invitePlayer(const std::string &name, short guildId); - - /** - * Accept an invite another player has sent to join their guild. - */ - void acceptInvite(const std::string &name); - - /** - * Get a list of members in a guild. - */ - void getGuildMembers(short guildId); - - /** - * Promote guild member - */ - void promoteMember(const std::string &name, short guildId, - short level); - - /** - * Quit guild. - */ - void quitGuild(short guildId); - } - } -} - -#endif // NET_MANASERV_CHATSERVER_GUILD_H diff --git a/src/net/manaserv/guildhandler.cpp b/src/net/manaserv/guildhandler.cpp index d4bf2397..e71f4d20 100644 --- a/src/net/manaserv/guildhandler.cpp +++ b/src/net/manaserv/guildhandler.cpp @@ -23,7 +23,9 @@ #include "net/messagein.h" -#include "net/manaserv/chatserver/guild.h" +#include "net/manaserv/connection.h" +#include "net/manaserv/messagein.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" #include "gui/widgets/channeltab.h" @@ -41,8 +43,12 @@ #include <iostream> +Net::GuildHandler *guildHandler; + namespace ManaServ { +extern Connection *chatServerConnection; + GuildHandler::GuildHandler() { static const Uint16 _messages[] = { @@ -58,6 +64,7 @@ GuildHandler::GuildHandler() }; handledMessages = _messages; + guildHandler = this; } void GuildHandler::handleMessage(Net::MessageIn &msg) @@ -178,9 +185,10 @@ void GuildHandler::handleMessage(Net::MessageIn &msg) logger->log("Received CPMSG_GUILD_INVITED"); std::string inviterName = msg.readString(); std::string guildName = msg.readString(); + int guildId = msg.readInt16(); // Open a dialog asking if the player accepts joining the guild. - guildWindow->openAcceptDialog(inviterName, guildName); + guildWindow->openAcceptDialog(inviterName, guildName, guildId); } break; case CPMSG_GUILD_PROMOTE_MEMBER_RESPONSE: @@ -250,4 +258,80 @@ void GuildHandler::joinedGuild(Net::MessageIn &msg) BY_CHANNEL); } +void GuildHandler::create(const std::string &name) +{ + MessageOut msg(PCMSG_GUILD_CREATE); + msg.writeString(name); + chatServerConnection->send(msg); +} + +void GuildHandler::invite(int guildId, const std::string &name) +{ + MessageOut msg(PCMSG_GUILD_INVITE); + msg.writeInt16(guildId); + msg.writeString(name); + chatServerConnection->send(msg); +} + +void GuildHandler::invite(int guildId, Player *player) +{ + invite(guildId, player->getName()); +} + +void GuildHandler::inviteResponse(int guildId, bool response) +{ + /*MessageOut msg(PCMSG_GUILD_ACCEPT); + msg.writeString(name); + chatServerConnection->send(msg);*/ +} + +void GuildHandler::leave(int guildId) +{ + MessageOut msg(PCMSG_GUILD_QUIT); + msg.writeInt16(guildId); + chatServerConnection->send(msg); +} + +void GuildHandler::kick(int guildId, int playerId) +{ + // TODO +} + +void GuildHandler::chat(int guildId, const std::string &text) +{ + // TODO +} + +void GuildHandler::memberList(int guildId) +{ + MessageOut msg(PCMSG_GUILD_GET_MEMBERS); + msg.writeInt16(guildId); + chatServerConnection->send(msg); +} + +void GuildHandler::changeMemberPostion(int guildId, int playerId, int level) +{ + /*MessageOut msg(PCMSG_GUILD_PROMOTE_MEMBER); + msg.writeInt16(guildId); + msg.writeString(name); + msg.writeInt8(level); + chatServerConnection->send(msg);*/ +} + +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 +} + } // namespace ManaServ diff --git a/src/net/manaserv/guildhandler.h b/src/net/manaserv/guildhandler.h index edf5eb8f..d80f0b33 100644 --- a/src/net/manaserv/guildhandler.h +++ b/src/net/manaserv/guildhandler.h @@ -22,19 +22,44 @@ #ifndef NET_MANASERV_GUILDHANDLER_H #define NET_MANASERV_GUILDHANDLER_H -#include "net/manaserv/messagehandler.h" +#include "net/guildhandler.h" -#include <string> +#include "net/manaserv/messagehandler.h" namespace ManaServ { -class GuildHandler : public MessageHandler +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 guidId, Player *player); + + void inviteResponse(int guidId, 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); + protected: void joinedGuild(Net::MessageIn &msg); }; diff --git a/src/net/net.cpp b/src/net/net.cpp index 91852062..ddf09730 100644 --- a/src/net/net.cpp +++ b/src/net/net.cpp @@ -50,6 +50,7 @@ extern Net::GeneralHandler *generalHandler; extern Net::InventoryHandler *inventoryHandler; extern Net::LoginHandler *loginHandler; extern Net::GameHandler *gameHandler; +extern Net::GuildHandler *guildHandler; extern Net::NpcHandler *npcHandler; extern Net::PartyHandler *partyHandler; extern Net::PlayerHandler *playerHandler; @@ -83,8 +84,7 @@ Net::GeneralHandler *Net::getGeneralHandler() Net::GuildHandler *Net::getGuildHandler() { - // TODO - return 0; + return guildHandler; } Net::InventoryHandler *Net::getInventoryHandler() |