diff options
Diffstat (limited to 'src/net/eathena')
-rw-r--r-- | src/net/eathena/guildhandler.cpp | 170 | ||||
-rw-r--r-- | src/net/eathena/guildhandler.h | 13 | ||||
-rw-r--r-- | src/net/eathena/guildrecv.cpp | 152 | ||||
-rw-r--r-- | src/net/eathena/guildrecv.h | 47 |
4 files changed, 233 insertions, 149 deletions
diff --git a/src/net/eathena/guildhandler.cpp b/src/net/eathena/guildhandler.cpp index 31f1edba7..d6a07091d 100644 --- a/src/net/eathena/guildhandler.cpp +++ b/src/net/eathena/guildhandler.cpp @@ -32,6 +32,11 @@ #include "gui/widgets/tabs/chat/guildtab.h" +#include "net/ea/guildrecv.h" + +#include "net/ea/guildrecv.h" + +#include "net/eathena/guildrecv.h" #include "net/eathena/messageout.h" #include "net/eathena/protocol.h" @@ -92,115 +97,115 @@ void GuildHandler::handleMessage(Net::MessageIn &msg) switch (msg.getId()) { case SMSG_GUILD_CREATE_RESPONSE: - processGuildCreateResponse(msg); + Ea::GuildRecv::processGuildCreateResponse(msg); break; case SMSG_GUILD_POSITION_INFO: - processGuildPositionInfo(msg); + GuildRecv::processGuildPositionInfo(msg); break; case SMSG_GUILD_MEMBER_LOGIN: - processGuildMemberLogin(msg); + GuildRecv::processGuildMemberLogin(msg); break; case SMSG_GUILD_MASTER_OR_MEMBER: - processGuildMasterOrMember(msg); + Ea::GuildRecv::processGuildMasterOrMember(msg); break; case SMSG_GUILD_BASIC_INFO: - processGuildBasicInfo(msg); + Ea::GuildRecv::processGuildBasicInfo(msg); break; case SMSG_GUILD_ALIANCE_INFO: - processGuildAlianceInfo(msg); + Ea::GuildRecv::processGuildAlianceInfo(msg); break; case SMSG_GUILD_MEMBER_LIST: - processGuildMemberList(msg); + Ea::GuildRecv::processGuildMemberList(msg); break; case SMSG_GUILD_POS_NAME_LIST: - processGuildPosNameList(msg); + Ea::GuildRecv::processGuildPosNameList(msg); break; case SMSG_GUILD_POS_INFO_LIST: - processGuildPosInfoList(msg); + Ea::GuildRecv::processGuildPosInfoList(msg); break; case SMSG_GUILD_POSITION_CHANGED: - processGuildPositionChanged(msg); + Ea::GuildRecv::processGuildPositionChanged(msg); break; case SMSG_GUILD_MEMBER_POS_CHANGE: - processGuildMemberPosChange(msg); + Ea::GuildRecv::processGuildMemberPosChange(msg); break; case SMSG_GUILD_EMBLEM_DATA: - processGuildEmblemData(msg); + Ea::GuildRecv::processGuildEmblemData(msg); break; case SMSG_GUILD_SKILL_INFO: - processGuildSkillInfo(msg); + Ea::GuildRecv::processGuildSkillInfo(msg); break; case SMSG_GUILD_NOTICE: - processGuildNotice(msg); + Ea::GuildRecv::processGuildNotice(msg); break; case SMSG_GUILD_INVITE: - processGuildInvite(msg); + Ea::GuildRecv::processGuildInvite(msg); break; case SMSG_GUILD_INVITE_ACK: - processGuildInviteAck(msg); + Ea::GuildRecv::processGuildInviteAck(msg); break; case SMSG_GUILD_LEAVE: - processGuildLeave(msg); + Ea::GuildRecv::processGuildLeave(msg); break; case SMSG_GUILD_EXPULSION: - processGuildExpulsion(msg); + GuildRecv::processGuildExpulsion(msg); break; case SMSG_GUILD_EXPULSION_LIST: - processGuildExpulsionList(msg); + GuildRecv::processGuildExpulsionList(msg); break; case SMSG_GUILD_MESSAGE: - processGuildMessage(msg); + Ea::GuildRecv::processGuildMessage(msg); break; case SMSG_GUILD_SKILL_UP: - processGuildSkillUp(msg); + Ea::GuildRecv::processGuildSkillUp(msg); break; case SMSG_GUILD_REQ_ALLIANCE: - processGuildReqAlliance(msg); + Ea::GuildRecv::processGuildReqAlliance(msg); break; case SMSG_GUILD_REQ_ALLIANCE_ACK: - processGuildReqAllianceAck(msg); + Ea::GuildRecv::processGuildReqAllianceAck(msg); break; case SMSG_GUILD_DEL_ALLIANCE: - processGuildDelAlliance(msg); + Ea::GuildRecv::processGuildDelAlliance(msg); break; case SMSG_GUILD_OPPOSITION_ACK: - processGuildOppositionAck(msg); + Ea::GuildRecv::processGuildOppositionAck(msg); break; case SMSG_GUILD_BROKEN: - processGuildBroken(msg); + Ea::GuildRecv::processGuildBroken(msg); break; case SMSG_GUILD_UPDATE_COORDS: - processGuildUpdateCoords(msg); + GuildRecv::processGuildUpdateCoords(msg); break; case SMSG_GUILD_EMBLEM: - processGuildEmblem(msg); + GuildRecv::processGuildEmblem(msg); break; default: @@ -208,22 +213,6 @@ void GuildHandler::handleMessage(Net::MessageIn &msg) } } -void GuildHandler::processGuildUpdateCoords(Net::MessageIn &msg) -{ - const BeingId id = msg.readBeingId("account id"); - const int x = msg.readInt16("x"); - const int y = msg.readInt16("y"); - if (Ea::taGuild) - { - GuildMember *const m = Ea::taGuild->getMember(id); - if (m) - { - m->setX(x); - m->setY(y); - } - } -} - void GuildHandler::create(const std::string &name) const { createOutPacket(CMSG_GUILD_CREATE); @@ -326,7 +315,7 @@ void GuildHandler::info() // 3 = skill info // 4 = expulsion list - showBasicInfo = true; + Ea::GuildRecv::showBasicInfo = true; createOutPacket(CMSG_GUILD_REQUEST_INFO); outMsg.writeInt32(0, "action"); // Request basic info } @@ -359,97 +348,6 @@ void GuildHandler::checkMaster() const createOutPacket(CMSG_GUILD_CHECK_MASTER); } -void GuildHandler::processGuildPositionInfo(Net::MessageIn &msg) -{ - const int guildId = msg.readInt32("guild id"); - const int emblem = msg.readInt32("elblem id"); - PlayerInfo::setGuildPositionFlags( - static_cast<GuildPositionFlags::Type>(msg.readInt32("mode"))); - msg.readUInt8("guild master"); - msg.readInt32("unused"); - std::string guildName = msg.readString(24, "guild name"); - - Guild *const g = Guild::getGuild(static_cast<int16_t>(guildId)); - if (!g) - return; - - g->setName(guildName); - g->setEmblemId(emblem); - if (!Ea::taGuild) - Ea::taGuild = g; - if (!guildTab && chatWindow) - { - guildTab = new GuildTab(chatWindow); - if (config.getBoolValue("showChatHistory")) - guildTab->loadFromLogFile("#Guild"); - if (localPlayer) - localPlayer->addGuild(Ea::taGuild); - guildHandler->memberList(); - } - - if (localPlayer) - { - localPlayer->setGuild(g); - localPlayer->setGuildName(g->getName()); - } -} - -void GuildHandler::processGuildMemberLogin(Net::MessageIn &msg) -{ - const BeingId accountId = msg.readBeingId("account id"); - const int charId = msg.readInt32("char id"); - const int online = msg.readInt32("flag"); - const GenderT gender = Being::intToGender(static_cast<uint8_t>( - msg.readInt16("sex"))); - msg.readInt16("hair"); - msg.readInt16("hair color"); - if (Ea::taGuild) - { - GuildMember *const m = Ea::taGuild->getMember(accountId, charId); - if (m) - { - m->setOnline(online); - if (online) - m->setGender(gender); - if (guildTab) - guildTab->showOnline(m->getName(), fromBool(online, Online)); - if (socialWindow) - socialWindow->updateGuildCounter(); - } - } -} - -void GuildHandler::processGuildExpulsion(Net::MessageIn &msg) -{ - const std::string nick = msg.readString(24, "name"); - msg.readString(40, "message"); - - processGuildExpulsionContinue(nick); -} - -void GuildHandler::processGuildExpulsionList(Net::MessageIn &msg) -{ - const int length = msg.readInt16("len"); - if (length < 4) - return; - - const int count = (length - 4) / 64; - - for (int i = 0; i < count; i++) - { - msg.readString(24, "name"); - msg.readString(40, "message"); - } -} - -void GuildHandler::processGuildEmblem(Net::MessageIn &msg) -{ - UNIMPLIMENTEDPACKET; - msg.readBeingId("being id"); - msg.readInt32("guild id"); - msg.readInt16("emblem id"); -} - void GuildHandler::requestAlliance(const Being *const being) const { if (!being) diff --git a/src/net/eathena/guildhandler.h b/src/net/eathena/guildhandler.h index 4f2add867..5d6ed40e0 100644 --- a/src/net/eathena/guildhandler.h +++ b/src/net/eathena/guildhandler.h @@ -91,19 +91,6 @@ class GuildHandler final : public Ea::GuildHandler, public MessageHandler void changeEmblem(std::string emblem) const override final; void requestEmblem(const int guildId) const override final; - - protected: - static void processGuildUpdateCoords(Net::MessageIn &msg); - - static void processGuildPositionInfo(Net::MessageIn &msg); - - static void processGuildMemberLogin(Net::MessageIn &msg); - - static void processGuildExpulsion(Net::MessageIn &msg); - - static void processGuildExpulsionList(Net::MessageIn &msg); - - static void processGuildEmblem(Net::MessageIn &msg); }; } // namespace EAthena diff --git a/src/net/eathena/guildrecv.cpp b/src/net/eathena/guildrecv.cpp new file mode 100644 index 000000000..007bff852 --- /dev/null +++ b/src/net/eathena/guildrecv.cpp @@ -0,0 +1,152 @@ +/* + * The ManaPlus Client + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#include "net/eathena/guildrecv.h" + +#include "actormanager.h" +#include "configuration.h" + +#include "being/localplayer.h" +#include "being/playerinfo.h" + +#include "gui/windows/chatwindow.h" +#include "gui/windows/socialwindow.h" + +#include "gui/widgets/tabs/chat/guildtab.h" + +#include "net/ea/guildrecv.h" + +#include "net/eathena/messageout.h" +#include "net/eathena/protocol.h" + +#include "debug.h" + +namespace EAthena +{ + +void GuildRecv::processGuildUpdateCoords(Net::MessageIn &msg) +{ + const BeingId id = msg.readBeingId("account id"); + const int x = msg.readInt16("x"); + const int y = msg.readInt16("y"); + if (Ea::taGuild) + { + GuildMember *const m = Ea::taGuild->getMember(id); + if (m) + { + m->setX(x); + m->setY(y); + } + } +} + +void GuildRecv::processGuildPositionInfo(Net::MessageIn &msg) +{ + const int guildId = msg.readInt32("guild id"); + const int emblem = msg.readInt32("elblem id"); + PlayerInfo::setGuildPositionFlags( + static_cast<GuildPositionFlags::Type>(msg.readInt32("mode"))); + msg.readUInt8("guild master"); + msg.readInt32("unused"); + std::string guildName = msg.readString(24, "guild name"); + + Guild *const g = Guild::getGuild(static_cast<int16_t>(guildId)); + if (!g) + return; + + g->setName(guildName); + g->setEmblemId(emblem); + if (!Ea::taGuild) + Ea::taGuild = g; + if (!guildTab && chatWindow) + { + guildTab = new GuildTab(chatWindow); + if (config.getBoolValue("showChatHistory")) + guildTab->loadFromLogFile("#Guild"); + if (localPlayer) + localPlayer->addGuild(Ea::taGuild); + guildHandler->memberList(); + } + + if (localPlayer) + { + localPlayer->setGuild(g); + localPlayer->setGuildName(g->getName()); + } +} + +void GuildRecv::processGuildMemberLogin(Net::MessageIn &msg) +{ + const BeingId accountId = msg.readBeingId("account id"); + const int charId = msg.readInt32("char id"); + const int online = msg.readInt32("flag"); + const GenderT gender = Being::intToGender(static_cast<uint8_t>( + msg.readInt16("sex"))); + msg.readInt16("hair"); + msg.readInt16("hair color"); + if (Ea::taGuild) + { + GuildMember *const m = Ea::taGuild->getMember(accountId, charId); + if (m) + { + m->setOnline(online); + if (online) + m->setGender(gender); + if (guildTab) + guildTab->showOnline(m->getName(), fromBool(online, Online)); + if (socialWindow) + socialWindow->updateGuildCounter(); + } + } +} + +void GuildRecv::processGuildExpulsion(Net::MessageIn &msg) +{ + const std::string nick = msg.readString(24, "name"); + msg.readString(40, "message"); + + Ea::GuildRecv::processGuildExpulsionContinue(nick); +} + +void GuildRecv::processGuildExpulsionList(Net::MessageIn &msg) +{ + const int length = msg.readInt16("len"); + if (length < 4) + return; + + const int count = (length - 4) / 64; + + for (int i = 0; i < count; i++) + { + msg.readString(24, "name"); + msg.readString(40, "message"); + } +} + +void GuildRecv::processGuildEmblem(Net::MessageIn &msg) +{ + UNIMPLIMENTEDPACKET; + msg.readBeingId("being id"); + msg.readInt32("guild id"); + msg.readInt16("emblem id"); +} + +} // namespace EAthena diff --git a/src/net/eathena/guildrecv.h b/src/net/eathena/guildrecv.h new file mode 100644 index 000000000..57bb18f49 --- /dev/null +++ b/src/net/eathena/guildrecv.h @@ -0,0 +1,47 @@ +/* + * The ManaPlus Client + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef NET_EATHENA_GUILDRECV_H +#define NET_EATHENA_GUILDRECV_H + +#include "net/ea/guildhandler.h" + +#include "net/eathena/messagehandler.h" + +namespace EAthena +{ + namespace GuildRecv + { + void processGuildUpdateCoords(Net::MessageIn &msg); + void processGuildPositionInfo(Net::MessageIn &msg); + void processGuildMemberLogin(Net::MessageIn &msg); + void processGuildExpulsion(Net::MessageIn &msg); + void processGuildExpulsionList(Net::MessageIn &msg); + void processGuildEmblem(Net::MessageIn &msg); + } // namespace GuildRecv +} // namespace EAthena + +namespace Ea +{ + extern Guild *taGuild; +} + +#endif // NET_EATHENA_GUILDRECV_H |