summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mana.cbp8
-rw-r--r--mana.config2
-rw-r--r--mana.files4
-rw-r--r--src/CMakeLists.txt4
-rw-r--r--src/Makefile.am4
-rw-r--r--src/gui/guildwindow.cpp18
-rw-r--r--src/gui/guildwindow.h5
-rw-r--r--src/localplayer.cpp11
-rw-r--r--src/net/ea/guildhandler.cpp182
-rw-r--r--src/net/ea/guildhandler.h66
-rw-r--r--src/net/ea/protocol.h23
-rw-r--r--src/net/guildhandler.h30
-rw-r--r--src/net/manaserv/chatserver/guild.cpp99
-rw-r--r--src/net/manaserv/chatserver/guild.h67
-rw-r--r--src/net/manaserv/guildhandler.cpp88
-rw-r--r--src/net/manaserv/guildhandler.h31
-rw-r--r--src/net/net.cpp4
17 files changed, 440 insertions, 206 deletions
diff --git a/mana.cbp b/mana.cbp
index 3f9ceae1..be6e82bc 100644
--- a/mana.cbp
+++ b/mana.cbp
@@ -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
diff --git a/mana.files b/mana.files
index 44b1da72..df081021 100644
--- a/mana.files
+++ b/mana.files
@@ -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()