From 99be9859a30e84e758ee3bfe7dcc3de33dfa2391 Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Sat, 7 Nov 2009 11:47:24 -0700 Subject: More eAthena guild stuff Also some related chenges elsewhere --- src/net/ea/guildhandler.cpp | 29 +++++++++++++++++++---- src/net/ea/guildhandler.h | 8 +++++-- src/net/ea/inventoryhandler.cpp | 22 +++++++++++------- src/net/ea/inventoryhandler.h | 8 +++---- src/net/ea/protocol.h | 39 ++++++++++++++++++++++++------- src/net/guildhandler.h | 6 ++--- src/net/inventoryhandler.h | 17 +++++++------- src/net/manaserv/guildhandler.cpp | 44 +++++++++++++++++++++-------------- src/net/manaserv/guildhandler.h | 4 ++-- src/net/manaserv/inventoryhandler.cpp | 25 ++++++++++++-------- src/net/manaserv/inventoryhandler.h | 8 +++---- 11 files changed, 136 insertions(+), 74 deletions(-) (limited to 'src/net') diff --git a/src/net/ea/guildhandler.cpp b/src/net/ea/guildhandler.cpp index f4cfc038..0cccd8f4 100644 --- a/src/net/ea/guildhandler.cpp +++ b/src/net/ea/guildhandler.cpp @@ -25,6 +25,7 @@ #include "net/ea/protocol.h" #include "localplayer.h" +#include "log.h" Net::GuildHandler *guildHandler; @@ -102,6 +103,20 @@ void GuildHandler::handleMessage(Net::MessageIn &msg) // TODO } break; + + case SMSG_GUILD_POSITION_INFO: + { + int guildId = msg.readInt32(); + int emblem = msg.readInt32(); + int posMode = msg.readInt32(); + msg.readInt32(); // Unused + msg.readInt8(); // Unused + std::string guildName = msg.readString(24); + + logger->log("Guild position info: %d %d %d %s\n", guildId, + emblem, posMode, guildName.c_str()); + } + break; } } @@ -143,14 +158,20 @@ void GuildHandler::leave(int guildId) msg.writeString("", 30); // Message } -void GuildHandler::kick(int guildId, int playerId) +void GuildHandler::kick(GuildMember member) { - // TODO + MessageOut msg(CMSG_GUILD_EXPULSION); + msg.writeInt32(member.getGuild()->getId()); + msg.writeInt32(member.getID()); // Account ID + msg.writeInt32(0); // Char ID + msg.writeString("", 40); // Message } void GuildHandler::chat(int guildId, const std::string &text) { - // TODO + MessageOut msg(CMSG_GUILD_MESSAGE); + msg.writeInt16(text.size() + 4); + msg.writeString(text); } void GuildHandler::memberList(int guildId) @@ -158,7 +179,7 @@ void GuildHandler::memberList(int guildId) // TODO } -void GuildHandler::changeMemberPostion(int guildId, int playerId, int level) +void GuildHandler::changeMemberPostion(GuildMember member, int level) { // TODO } diff --git a/src/net/ea/guildhandler.h b/src/net/ea/guildhandler.h index e80e4818..f04a56bb 100644 --- a/src/net/ea/guildhandler.h +++ b/src/net/ea/guildhandler.h @@ -45,13 +45,13 @@ class GuildHandler : public Net::GuildHandler, public MessageHandler void leave(int guildId); - void kick(int guildId, int playerId); + void kick(GuildMember member); void chat(int guildId, const std::string &text); void memberList(int guildId); - void changeMemberPostion(int guildId, int playerId, int level); + void changeMemberPostion(GuildMember member, int level); void requestAlliance(int guildId, int otherGuildId); @@ -59,6 +59,10 @@ class GuildHandler : public Net::GuildHandler, public MessageHandler bool response); void endAlliance(int guildId, int otherGuildId); + + private: + // eAthena only supports one guild per player + Guild *mGuild; }; } diff --git a/src/net/ea/inventoryhandler.cpp b/src/net/ea/inventoryhandler.cpp index 8f2b4453..94118ae2 100644 --- a/src/net/ea/inventoryhandler.cpp +++ b/src/net/ea/inventoryhandler.cpp @@ -347,12 +347,12 @@ void InventoryHandler::moveItem(int oldIndex, int newIndex) // Not implemented for eAthena (possible?) } -void InventoryHandler::openStorage() +void InventoryHandler::openStorage(StorageType type) { // Doesn't apply to eAthena, since opening happens through NPCs? } -void InventoryHandler::closeStorage() +void InventoryHandler::closeStorage(StorageType type) { MessageOut outMsg(CMSG_CLOSE_STORAGE); } @@ -374,14 +374,20 @@ void InventoryHandler::moveItem(StorageType source, int slot, int amount, } } -size_t InventoryHandler::getInventorySize() const +size_t InventoryHandler::getSize(StorageType type) const { - return 100; -} + switch (type) + { + case INVENTORY: + return 100; + case STORAGE: + return 300; + case GUILD_STORAGE: + return 1000; + case CART: + return 0; + } -size_t InventoryHandler::getStorageSize() const -{ - return 300; } } // namespace EAthena diff --git a/src/net/ea/inventoryhandler.h b/src/net/ea/inventoryhandler.h index e61ee14b..83a2b440 100644 --- a/src/net/ea/inventoryhandler.h +++ b/src/net/ea/inventoryhandler.h @@ -50,16 +50,14 @@ class InventoryHandler : public MessageHandler, public Net::InventoryHandler void moveItem(int oldIndex, int newIndex); - void openStorage(); + void openStorage(StorageType type); - void closeStorage(); + void closeStorage(StorageType type); void moveItem(StorageType source, int slot, int amount, StorageType destination); - size_t getInventorySize() const; - - size_t getStorageSize() const; + size_t getSize(StorageType type) const; }; } // namespace EAthena diff --git a/src/net/ea/protocol.h b/src/net/ea/protocol.h index e6a417aa..75d0d30e 100644 --- a/src/net/ea/protocol.h +++ b/src/net/ea/protocol.h @@ -163,8 +163,31 @@ static const int STORAGE_OFFSET = 1; #define SMSG_ADMIN_KICK_ACK 0x00cd #define SMSG_GUILD_CREATE_RESPONSE 0x0167 +#define SMSG_GUILD_POSITION_INFO 0x016c +#define SMSG_GUILD_MEMBER_LOGIN 0x016d +#define SMSG_GUILD_MASTER_OR_MEMBER 0x014e +#define SMSG_GUILD_BASIC_INFO 0x01b6 +#define SMSG_GUILD_ALIANCE_INFO 0x014c +#define SMSG_GUILD_MEMBER_LIST 0x0154 +#define SMSG_GUILD_POS_NAME_LIST 0x0166 +#define SMSG_GUILD_POS_INFO_LIST 0x0160 +#define SMSG_GUILD_POSITION_CHANGED 0x0174 +#define SMSG_GUILD_MEMBER_POS_CHANGE 0x0156 +#define SMSG_GUILD_EMBLEM 0x0152 +#define SMSG_GUILD_SKILL_INFO 0x0162 +#define SMSG_GUILD_NOTICE 0x016f +#define SMSG_GUILD_INVITE 0x016a #define SMSG_GUILD_INVITE_ACK 0x0169 -#define SMSG_GUILD_INVITE 0x016A +#define SMSG_GUILD_LEAVE 0x015a +#define SMSG_GUILD_EXPULSION 0x015c +#define SMSG_GUILD_EXPULSION_LIST 0x0163 +#define SMSG_GUILD_MESSAGE 0x017f +#define SMSG_GUILD_SKILL_UP 0x010e +#define SMSG_GUILD_REQ_ALLIANCE 0x0171 +#define SMSG_GUILD_REQ_ALLIANCE_ACK 0x0173 +#define SMSG_GUILD_DEL_ALLIANCE 0x0184 +#define SMSG_GUILD_OPPOSITION_ACK 0x0181 +#define SMSG_GUILD_BROKEN 0x015e #define SMSG_MVP 0x010c @@ -246,22 +269,22 @@ 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_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_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_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_MESSAGE 0x017e #define CMSG_GUILD_OPPOSITION 0x0180 #define CMSG_GUILD_ALLIANCE_DELETE 0x0183 diff --git a/src/net/guildhandler.h b/src/net/guildhandler.h index bba261bc..da44e6cd 100644 --- a/src/net/guildhandler.h +++ b/src/net/guildhandler.h @@ -22,6 +22,7 @@ #ifndef GUILDHANDLER_H #define GUILDHANDLER_H +#include "guild.h" #include "player.h" #include @@ -41,14 +42,13 @@ class GuildHandler virtual void leave(int guildId) = 0; - virtual void kick(int guildId, int playerId) = 0; + virtual void kick(GuildMember member) = 0; virtual void chat(int guildId, const std::string &text) = 0; virtual void memberList(int guildId) = 0; - virtual void changeMemberPostion(int guildId, int playerId, - int level) = 0; + virtual void changeMemberPostion(GuildMember member, int level) = 0; virtual void requestAlliance(int guildId, int otherGuildId) = 0; diff --git a/src/net/inventoryhandler.h b/src/net/inventoryhandler.h index 08caf926..520e390e 100644 --- a/src/net/inventoryhandler.h +++ b/src/net/inventoryhandler.h @@ -45,24 +45,23 @@ class InventoryHandler virtual void moveItem(int oldIndex, int newIndex) = 0; - virtual void openStorage() = 0; - - virtual void closeStorage() = 0; - - //void changeCart() = 0; - enum StorageType { INVENTORY, STORAGE, + GUILD_STORAGE, CART }; + virtual void openStorage(StorageType type) = 0; + + virtual void closeStorage(StorageType type) = 0; + + //void changeCart() = 0; + virtual void moveItem(StorageType source, int slot, int amount, StorageType destination) = 0; - virtual size_t getInventorySize() const = 0; - - virtual size_t getStorageSize() const = 0; + virtual size_t getSize(StorageType type) const = 0; }; } // namespace Net diff --git a/src/net/manaserv/guildhandler.cpp b/src/net/manaserv/guildhandler.cpp index e71f4d20..dfc0e8c5 100644 --- a/src/net/manaserv/guildhandler.cpp +++ b/src/net/manaserv/guildhandler.cpp @@ -111,10 +111,10 @@ void GuildHandler::handleMessage(Net::MessageIn &msg) logger->log("Received CPMSG_GUILD_GET_MEMBERS_RESPONSE"); if(msg.readInt8() == ERRMSG_OK) { - std::string guildMember; + std::string name; bool online; - std::string guildName; Guild *guild; + GuildMember *member; short guildId = msg.readInt16(); guild = player_node->getGuild(guildId); @@ -122,16 +122,17 @@ void GuildHandler::handleMessage(Net::MessageIn &msg) if (!guild) return; - guildName = guild->getName(); + guild->clearMembers(); while(msg.getUnreadLength()) { - guildMember = msg.readString(); + name = msg.readString(); online = msg.readInt8(); - if(guildMember != "") + if(name != "") { - guild->addMember(guildMember); - guildWindow->setOnline(guildName, guildMember, online); + member = new GuildMember(guildId, name); + member->setOnline(online); + guild->addMember(member); } } @@ -143,8 +144,9 @@ void GuildHandler::handleMessage(Net::MessageIn &msg) { logger->log("Received CPMSG_GUILD_UPDATE_LIST"); short guildId = msg.readInt16(); - std::string guildMember = msg.readString(); + std::string name = msg.readString(); char eventId = msg.readInt8(); + GuildMember *member; Guild *guild = player_node->getGuild(guildId); if (guild) @@ -152,23 +154,29 @@ void GuildHandler::handleMessage(Net::MessageIn &msg) switch(eventId) { case GUILD_EVENT_NEW_PLAYER: - guild->addMember(guildMember); - guildWindow->setOnline(guild->getName(), guildMember, - true); + member = new GuildMember(guildId, name); + member->setOnline(true); + guild->addMember(member); break; case GUILD_EVENT_LEAVING_PLAYER: - guild->removeMember(guildMember); + guild->removeMember(name); break; case GUILD_EVENT_ONLINE_PLAYER: - guildWindow->setOnline(guild->getName(), guildMember, - true); + member = guild->getMember(name); + if (member) + { + member->setOnline(true); + } break; case GUILD_EVENT_OFFLINE_PLAYER: - guildWindow->setOnline(guild->getName(), guildMember, - false); + member = guild->getMember(name); + if (member) + { + member->setOnline(false); + } break; default: @@ -292,7 +300,7 @@ void GuildHandler::leave(int guildId) chatServerConnection->send(msg); } -void GuildHandler::kick(int guildId, int playerId) +void GuildHandler::kick(GuildMember member) { // TODO } @@ -309,7 +317,7 @@ void GuildHandler::memberList(int guildId) chatServerConnection->send(msg); } -void GuildHandler::changeMemberPostion(int guildId, int playerId, int level) +void GuildHandler::changeMemberPostion(GuildMember member, int level) { /*MessageOut msg(PCMSG_GUILD_PROMOTE_MEMBER); msg.writeInt16(guildId); diff --git a/src/net/manaserv/guildhandler.h b/src/net/manaserv/guildhandler.h index d80f0b33..3beaf16f 100644 --- a/src/net/manaserv/guildhandler.h +++ b/src/net/manaserv/guildhandler.h @@ -45,13 +45,13 @@ public: void leave(int guildId); - void kick(int guildId, int playerId); + void kick(GuildMember member); void chat(int guildId, const std::string &text); void memberList(int guildId); - void changeMemberPostion(int guildId, int playerId, int level); + void changeMemberPostion(GuildMember member, int level); void requestAlliance(int guildId, int otherGuildId); diff --git a/src/net/manaserv/inventoryhandler.cpp b/src/net/manaserv/inventoryhandler.cpp index 0d0c1b34..e2a579fd 100644 --- a/src/net/manaserv/inventoryhandler.cpp +++ b/src/net/manaserv/inventoryhandler.cpp @@ -66,7 +66,7 @@ void InventoryHandler::handleMessage(Net::MessageIn &msg) case GPMSG_INVENTORY: while (msg.getUnreadLength()) { - int slot = msg.readInt8(); + unsigned int slot = msg.readInt8(); if (slot == 255) { player_node->setMoney(msg.readInt32()); @@ -78,7 +78,7 @@ void InventoryHandler::handleMessage(Net::MessageIn &msg) { player_node->mEquipment->setEquipment(slot, id); } - else if (slot >= 32 && slot < 32 + getInventorySize()) + else if (slot >= 32 && slot < 32 + getSize(INVENTORY)) { int amount = id ? msg.readInt8() : 0; player_node->setInvItem(slot - 32, id, amount); @@ -153,12 +153,12 @@ void InventoryHandler::moveItem(int oldIndex, int newIndex) gameServerConnection->send(msg); } -void InventoryHandler::openStorage() +void InventoryHandler::openStorage(StorageType type) { // TODO } -void InventoryHandler::closeStorage() +void InventoryHandler::closeStorage(StorageType type) { // TODO } @@ -169,14 +169,19 @@ void InventoryHandler::moveItem(StorageType source, int slot, int amount, // TODO } -size_t InventoryHandler::getInventorySize() const +size_t InventoryHandler::getSize(StorageType type) const { - return 50; -} + switch (type) + { + case INVENTORY: + return 50; + case STORAGE: + case GUILD_STORAGE: + return 300; + case CART: + return 0; + } -size_t InventoryHandler::getStorageSize() const -{ - return 300; } } // namespace ManaServ diff --git a/src/net/manaserv/inventoryhandler.h b/src/net/manaserv/inventoryhandler.h index 1f937df9..d3feca0a 100644 --- a/src/net/manaserv/inventoryhandler.h +++ b/src/net/manaserv/inventoryhandler.h @@ -49,16 +49,14 @@ class InventoryHandler : public MessageHandler, Net::InventoryHandler void moveItem(int oldIndex, int newIndex); - void openStorage(); + void openStorage(StorageType type); - void closeStorage(); + void closeStorage(StorageType type); void moveItem(StorageType source, int slot, int amount, StorageType destination); - size_t getInventorySize() const; - - size_t getStorageSize() const; + size_t getSize(StorageType type) const; }; } // namespace ManaServ -- cgit v1.2.3-70-g09d2