summaryrefslogtreecommitdiff
path: root/src/net/ea
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/ea
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/ea')
-rw-r--r--src/net/ea/guildhandler.cpp182
-rw-r--r--src/net/ea/guildhandler.h66
-rw-r--r--src/net/ea/protocol.h23
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