summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
authorJared Adams <jaxad0127@gmail.com>2009-11-03 18:59:10 -0700
committerJared Adams <jaxad0127@gmail.com>2009-11-03 18:59:10 -0700
commit6ec98a246ee9915cdcc4a58f5de6882e415adc2f (patch)
tree45add22f8dfc85c45910cad41db79c979310c113 /src/net
parent75dbcb1b780fe3fc2f09cbcdc05f9559446ef482 (diff)
downloadmana-6ec98a246ee9915cdcc4a58f5de6882e415adc2f.tar.gz
mana-6ec98a246ee9915cdcc4a58f5de6882e415adc2f.tar.bz2
mana-6ec98a246ee9915cdcc4a58f5de6882e415adc2f.tar.xz
mana-6ec98a246ee9915cdcc4a58f5de6882e415adc2f.zip
Move ManaServ guild code into GuildHandler
Ad start eAthena's GuildHandler
Diffstat (limited to 'src/net')
-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
9 files changed, 405 insertions, 185 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
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()