diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-08-26 21:39:30 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-08-26 21:39:30 +0300 |
commit | 1fa2a62572a46f34f7216e12814c0e932f5bd2ca (patch) | |
tree | c913d536da80b96104d95ce0ce64680e0353485a /src/net/eathena/guildrecv.cpp | |
parent | da649050e6a92a199e1ba6ec09f456b184e51809 (diff) | |
download | manaplus-1fa2a62572a46f34f7216e12814c0e932f5bd2ca.tar.gz manaplus-1fa2a62572a46f34f7216e12814c0e932f5bd2ca.tar.bz2 manaplus-1fa2a62572a46f34f7216e12814c0e932f5bd2ca.tar.xz manaplus-1fa2a62572a46f34f7216e12814c0e932f5bd2ca.zip |
Move receive code from guildhandler into separate file.
Diffstat (limited to 'src/net/eathena/guildrecv.cpp')
-rw-r--r-- | src/net/eathena/guildrecv.cpp | 152 |
1 files changed, 152 insertions, 0 deletions
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 |