summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/net')
-rw-r--r--src/net/ea/guildhandler.cpp56
-rw-r--r--src/net/ea/guildhandler.h50
-rw-r--r--src/net/ea/guildrecv.cpp545
-rw-r--r--src/net/ea/guildrecv.h68
-rw-r--r--src/net/eathena/generalhandler.cpp2
-rw-r--r--src/net/eathena/guildhandler.cpp23
-rw-r--r--src/net/eathena/guildhandler.h17
-rw-r--r--src/net/eathena/guildrecv.cpp520
-rw-r--r--src/net/eathena/guildrecv.h33
-rw-r--r--src/net/eathena/network.cpp1
-rw-r--r--src/net/eathena/packetsin.inc44
-rw-r--r--src/net/tmwa/generalhandler.cpp4
-rw-r--r--src/net/tmwa/guildhandler.cpp11
-rw-r--r--src/net/tmwa/guildhandler.h8
14 files changed, 608 insertions, 774 deletions
diff --git a/src/net/ea/guildhandler.cpp b/src/net/ea/guildhandler.cpp
deleted file mode 100644
index 465b76927..000000000
--- a/src/net/ea/guildhandler.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2016 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/ea/guildhandler.h"
-
-#include "net/ea/guildrecv.h"
-
-#include "gui/widgets/tabs/chat/guildtab.h"
-
-#include "utils/delete2.h"
-
-#include "debug.h"
-
-GuildTab *guildTab = nullptr;
-
-namespace Ea
-{
-GuildHandler::GuildHandler()
-{
- Ea::GuildRecv::showBasicInfo = false;
-}
-
-GuildHandler::~GuildHandler()
-{
- delete2(guildTab);
-}
-
-void GuildHandler::clear() const
-{
- taGuild = nullptr;
-}
-
-ChatTab *GuildHandler::getTab() const
-{
- return guildTab;
-}
-
-} // namespace Ea
diff --git a/src/net/ea/guildhandler.h b/src/net/ea/guildhandler.h
deleted file mode 100644
index 30abd42ce..000000000
--- a/src/net/ea/guildhandler.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2016 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_EA_GUILDHANDLER_H
-#define NET_EA_GUILDHANDLER_H
-
-#include "net/guildhandler.h"
-
-class GuildTab;
-
-namespace Ea
-{
-class GuildHandler notfinal : public Net::GuildHandler
-{
- public:
- GuildHandler();
-
- A_DELETE_COPY(GuildHandler)
-
- virtual ~GuildHandler();
-
- void clear() const override final;
-
- ChatTab *getTab() const override final;
-};
-
-extern Guild *taGuild;
-} // namespace Ea
-
-extern GuildTab *guildTab;
-
-#endif // NET_EA_GUILDHANDLER_H
diff --git a/src/net/ea/guildrecv.cpp b/src/net/ea/guildrecv.cpp
deleted file mode 100644
index c6eac245d..000000000
--- a/src/net/ea/guildrecv.cpp
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2016 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/ea/guildrecv.h"
-
-#include "actormanager.h"
-#include "guild.h"
-#include "notifymanager.h"
-
-#include "being/localplayer.h"
-#include "being/playerinfo.h"
-
-#include "enums/resources/notifytypes.h"
-
-#include "gui/windows/skilldialog.h"
-#include "gui/windows/socialwindow.h"
-
-#include "net/messagein.h"
-
-#include "gui/widgets/tabs/chat/guildtab.h"
-
-#include "utils/delete2.h"
-#include "utils/gettext.h"
-#include "utils/stringutils.h"
-
-#include "debug.h"
-
-extern GuildTab *guildTab;
-
-namespace Ea
-{
-
-Guild *taGuild = nullptr;
-
-namespace GuildRecv
-{
- bool showBasicInfo = false;
-} // namespace GuildRecv
-
-void GuildRecv::processGuildCreateResponse(Net::MessageIn &msg)
-{
- const uint8_t flag = msg.readUInt8("flag");
-
- switch (flag)
- {
- case 0:
- // Success
- NotifyManager::notify(NotifyTypes::GUILD_CREATED);
- break;
-
- case 1:
- // Already in a guild
- NotifyManager::notify(NotifyTypes::GUILD_ALREADY);
- break;
-
- case 2:
- // Unable to make (likely name already in use)
- NotifyManager::notify(NotifyTypes::GUILD_ALREADY);
- break;
-
- case 3:
- // Emperium check failed
- NotifyManager::notify(NotifyTypes::GUILD_EMPERIUM_CHECK_FAILED);
- break;
-
- default:
- // Unknown response
- NotifyManager::notify(NotifyTypes::GUILD_ERROR);
- break;
- }
-}
-
-void GuildRecv::processGuildMasterOrMember(Net::MessageIn &msg)
-{
- msg.readInt32("type"); // Type (0x57 for member, 0xd7 for master)
-}
-
-void GuildRecv::processGuildBasicInfo(Net::MessageIn &msg)
-{
- const int guildId = msg.readInt32("guild id");
- const int level = msg.readInt32("guild level");
- const int members = msg.readInt32("connect member");
- const int maxMembers = msg.readInt32("max member");
- const int avgLevel = msg.readInt32("average level");
- const int exp = msg.readInt32("exp");
- const int nextExp = msg.readInt32("next exp");
- msg.skip(12, "unused");
- const int emblem = msg.readInt32("emblem id");
- std::string name = msg.readString(24, "guild name");
- std::string master = msg.readString(24, "master name");
- std::string castle = msg.readString(16, "castles");
- msg.readInt32("unused");
-
- if (guildTab && showBasicInfo)
- {
- showBasicInfo = false;
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild name: %s"),
- name.c_str()), ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild master: %s"),
- master.c_str()), ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild level: %d"), level),
- ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Online members: %d"),
- members), ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Max members: %d"),
- maxMembers), ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Average level: %d"),
- avgLevel), ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild exp: %d"), exp),
- ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild next exp: %d"),
- nextExp), ChatMsgType::BY_SERVER);
- // TRANSLATORS: guild info message
- guildTab->chatLog(strprintf(_("Guild castle: %s"),
- castle.c_str()), ChatMsgType::BY_SERVER);
- }
-
- Guild *const g = Guild::getGuild(CAST_S16(guildId));
- if (!g)
- return;
- g->setName(name);
- g->setEmblemId(emblem);
-}
-
-void GuildRecv::processGuildAlianceInfo(Net::MessageIn &msg)
-{
- const int length = msg.readInt16("len");
- if (length < 4)
- return;
- const int count = (length - 4) / 32;
-
- for (int i = 0; i < count; i++)
- {
- msg.readInt32("opposition");
- msg.readInt32("guild id");
- msg.readString(24, "guild name");
- }
-}
-
-void GuildRecv::processGuildMemberList(Net::MessageIn &msg)
-{
- const int length = msg.readInt16("len");
- if (length < 4)
- return;
- const int count = (length - 4) / 104;
- if (!taGuild)
- {
- logger->log1("!taGuild");
- return;
- }
-
- taGuild->clearMembers();
-
- int onlineNum = 0;
- int totalNum = 0;
- for (int i = 0; i < count; i++)
- {
- const BeingId id = msg.readBeingId("account id");
- const int charId = msg.readInt32("char id");
- msg.readInt16("hair");
- msg.readInt16("hair color");
- const int gender = msg.readInt16("gender");
- const int race = msg.readInt16("class");
- const int level = msg.readInt16("level");
- const int exp = msg.readInt32("exp");
- const int online = msg.readInt32("online");
- const int pos = msg.readInt32("position");
- msg.skip(50, "unused");
- std::string name = msg.readString(24, "name");
-
- GuildMember *const m = taGuild->addMember(id, charId, name);
- if (m)
- {
- m->setOnline(online);
- m->setID(id);
- m->setCharId(charId);
- m->setGender(Being::intToGender(CAST_U8(gender)));
- m->setLevel(level);
- m->setExp(exp);
- m->setPos(pos);
- m->setRace(race);
- if (actorManager)
- {
- Being *const being = actorManager->findBeingByName(
- name, ActorType::Player);
- if (being)
- {
- being->setGuildName(taGuild->getName());
- if (being->getLevel() != level)
- {
- being->setLevel(level);
- being->updateName();
- }
- }
- }
- if (online)
- onlineNum ++;
- totalNum ++;
- }
- }
- taGuild->sort();
- if (actorManager)
- {
- actorManager->updatePlayerGuild();
- actorManager->updatePlayerColors();
- }
- if (socialWindow)
- socialWindow->updateGuildCounter(onlineNum, totalNum);
-}
-
-void GuildRecv::processGuildPosNameList(Net::MessageIn &msg)
-{
- if (!taGuild)
- {
- logger->log1("!taGuild");
- return;
- }
-
- const int length = msg.readInt16("len");
- if (length < 4)
- return;
- const int count = (length - 4) / 28;
-
- for (int i = 0; i < count; i++)
- {
- const int id = msg.readInt32("position id");
- const std::string name = msg.readString(24, "position name");
- taGuild->addPos(id, name);
- }
-}
-
-void GuildRecv::processGuildPosInfoList(Net::MessageIn &msg)
-{
- const int length = msg.readInt16("len");
- if (length < 4)
- return;
- const int count = (length - 4) / 16;
-
- for (int i = 0; i < count; i++)
- {
- msg.readInt32("id");
- msg.readInt32("mode");
- msg.readInt32("same id");
- msg.readInt32("exp mode");
- }
-}
-
-void GuildRecv::processGuildPositionChanged(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- msg.readInt16("len");
- msg.readInt32("id");
- msg.readInt32("mode");
- msg.readInt32("same ip");
- msg.readInt32("exp mode");
- msg.readString(24, "name");
-}
-
-void GuildRecv::processGuildMemberPosChange(Net::MessageIn &msg)
-{
- msg.readInt16("len");
- const BeingId accountId = msg.readBeingId("account id");
- const int charId = msg.readInt32("char id");
- const int pos = msg.readInt32("position");
- if (taGuild)
- {
- GuildMember *const m = taGuild->getMember(accountId, charId);
- if (m)
- m->setPos(pos);
- }
-}
-
-void GuildRecv::processGuildEmblemData(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- const int length = msg.readInt16("len");
-
- msg.readInt32("guild id");
- msg.readInt32("emblem id");
- if (length < 12)
- return;
- msg.skip(length - 12, "emblem data");
-}
-
-void GuildRecv::processGuildSkillInfo(Net::MessageIn &msg)
-{
- const int count = (msg.readInt16("len") - 6) / 37;
- msg.readInt16("skill points");
-
- if (skillDialog)
- skillDialog->hideSkills(SkillOwner::Guild);
- for (int i = 0; i < count; i++)
- {
- const int skillId = msg.readInt16("skill id");
- const SkillType::SkillType inf = static_cast<SkillType::SkillType>(
- msg.readInt32("inf"));
- const int level = msg.readInt16("skill level");
- const int sp = msg.readInt16("sp");
- const int range = msg.readInt16("range");
- const std::string name = msg.readString(24, "skill name");
- const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable);
- PlayerInfo::setSkillLevel(skillId, level);
- if (skillDialog)
- {
- if (!skillDialog->updateSkill(skillId, range, up, inf, sp))
- {
- skillDialog->addSkill(SkillOwner::Guild,
- skillId, name, level, range, up, inf, sp);
- }
- }
- }
- if (skillDialog)
- skillDialog->updateModels();
-}
-
-void GuildRecv::processGuildNotice(Net::MessageIn &msg)
-{
- const std::string msg1 = msg.readString(60, "msg1");
- const std::string msg2 = msg.readString(120, "msg2");
- if (guildTab)
- {
- guildTab->chatLog(msg1, ChatMsgType::BY_SERVER);
- guildTab->chatLog(msg2, ChatMsgType::BY_SERVER);
- }
-}
-
-void GuildRecv::processGuildInvite(Net::MessageIn &msg)
-{
- const int guildId = msg.readInt32("guild id");
- const std::string guildName = msg.readString(24, "guild name");
-
- if (socialWindow)
- socialWindow->showGuildInvite(guildName, guildId, "");
-}
-
-void GuildRecv::processGuildInviteAck(Net::MessageIn &msg)
-{
- const uint8_t flag = msg.readUInt8("flag");
- if (!guildTab)
- return;
-
- switch (flag)
- {
- case 0:
- NotifyManager::notify(NotifyTypes::GUILD_INVITE_FAILED);
- break;
-
- case 1:
- NotifyManager::notify(NotifyTypes::GUILD_INVITE_REJECTED);
- break;
-
- case 2:
- NotifyManager::notify(NotifyTypes::GUILD_INVITE_JOINED);
- break;
-
- case 3:
- NotifyManager::notify(NotifyTypes::GUILD_INVITE_FULL);
- break;
-
- default:
- NotifyManager::notify(NotifyTypes::GUILD_INVITE_ERROR);
- break;
- }
-}
-
-void GuildRecv::processGuildLeave(Net::MessageIn &msg)
-{
- const std::string nick = msg.readString(24, "nick");
- msg.readString(40, "message");
-
- if (taGuild)
- taGuild->removeMember(nick);
-
- if (!localPlayer)
- return;
-
- if (nick == localPlayer->getName())
- {
- if (taGuild)
- {
- taGuild->removeFromMembers();
- taGuild->clearMembers();
- localPlayer->removeGuild(taGuild->getId());
- }
- NotifyManager::notify(NotifyTypes::GUILD_LEFT);
- delete2(guildTab)
-
- if (socialWindow && taGuild)
- socialWindow->removeTab(taGuild);
- if (actorManager)
- actorManager->updatePlayerColors();
- }
- else
- {
- NotifyManager::notify(NotifyTypes::GUILD_USER_LEFT, nick);
- if (actorManager)
- {
- Being *const b = actorManager->findBeingByName(
- nick, ActorType::Player);
-
- if (b)
- b->clearGuilds();
- if (taGuild)
- taGuild->removeMember(nick);
- }
- }
-}
-
-void GuildRecv::processGuildMessage(Net::MessageIn &msg)
-{
- const int msgLength = msg.readInt16("len") - 4;
-
- if (msgLength <= 0)
- return;
- if (guildTab)
- {
- std::string chatMsg = msg.readString(msgLength, "message");
- const size_t pos = chatMsg.find(" : ", 0);
- if (pos != std::string::npos)
- {
- const std::string sender_name = chatMsg.substr(0, pos);
- chatMsg.erase(0, pos + 3);
- trim(chatMsg);
- guildTab->chatLog(sender_name, chatMsg);
- }
- else
- {
- guildTab->chatLog(chatMsg, ChatMsgType::BY_SERVER);
- }
- }
- else
- {
- DEBUGLOGSTR("invisible guild?");
- msg.readString(msgLength, "message");
- }
-}
-
-void GuildRecv::processGuildSkillUp(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- msg.readInt16("skill id");
- msg.readInt16("level");
- msg.readInt16("sp");
- msg.readInt16("range");
- msg.readUInt8("unused?");
-}
-
-void GuildRecv::processGuildReqAlliance(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- msg.readInt32("id");
- msg.readString(24, "name");
-}
-
-void GuildRecv::processGuildReqAllianceAck(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- msg.readInt32("flag");
-}
-
-void GuildRecv::processGuildDelAlliance(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- msg.readInt32("guild id");
- msg.readInt32("flag");
-}
-
-void GuildRecv::processGuildOppositionAck(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- msg.readUInt8("flag");
-}
-
-void GuildRecv::processGuildBroken(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- msg.readInt32("flag");
-}
-
-void GuildRecv::processGuildExpulsionContinue(const std::string &nick)
-{
- if (taGuild)
- taGuild->removeMember(nick);
-
- if (!localPlayer)
- return;
-
- if (nick == localPlayer->getName())
- {
- if (taGuild)
- {
- taGuild->removeFromMembers();
- taGuild->clearMembers();
- }
- NotifyManager::notify(NotifyTypes::GUILD_KICKED);
- delete2(guildTab)
-
- if (socialWindow && taGuild)
- socialWindow->removeTab(taGuild);
- if (actorManager)
- actorManager->updatePlayerColors();
- }
- else
- {
- NotifyManager::notify(NotifyTypes::GUILD_USER_KICKED, nick);
- if (actorManager)
- {
- Being *const b = actorManager->findBeingByName(
- nick, ActorType::Player);
-
- if (b)
- b->clearGuilds();
- if (taGuild)
- taGuild->removeMember(nick);
- }
- }
-}
-
-} // namespace Ea
diff --git a/src/net/ea/guildrecv.h b/src/net/ea/guildrecv.h
deleted file mode 100644
index 330787bb8..000000000
--- a/src/net/ea/guildrecv.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2016 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_EA_GUILDRECV_H
-#define NET_EA_GUILDRECV_H
-
-#include <string>
-
-namespace Net
-{
- class MessageIn;
-} // namespace Net
-
-class Guild;
-
-namespace Ea
-{
- namespace GuildRecv
- {
- extern bool showBasicInfo;
-
- void processGuildCreateResponse(Net::MessageIn &msg);
- void processGuildMasterOrMember(Net::MessageIn &msg);
- void processGuildBasicInfo(Net::MessageIn &msg);
- void processGuildAlianceInfo(Net::MessageIn &msg);
- void processGuildMemberList(Net::MessageIn &msg);
- void processGuildPosNameList(Net::MessageIn &msg);
- void processGuildPosInfoList(Net::MessageIn &msg);
- void processGuildPositionChanged(Net::MessageIn &msg);
- void processGuildMemberPosChange(Net::MessageIn &msg);
- void processGuildEmblemData(Net::MessageIn &msg);
- void processGuildSkillInfo(Net::MessageIn &msg);
- void processGuildNotice(Net::MessageIn &msg);
- void processGuildInvite(Net::MessageIn &msg);
- void processGuildInviteAck(Net::MessageIn &msg);
- void processGuildLeave(Net::MessageIn &msg);
- void processGuildMessage(Net::MessageIn &msg);
- void processGuildSkillUp(Net::MessageIn &msg);
- void processGuildReqAlliance(Net::MessageIn &msg);
- void processGuildReqAllianceAck(Net::MessageIn &msg);
- void processGuildDelAlliance(Net::MessageIn &msg);
- void processGuildOppositionAck(Net::MessageIn &msg);
- void processGuildBroken(Net::MessageIn &msg);
- void processGuildExpulsionContinue(const std::string &nick);
- } // namespace GuildRecv
-
- extern Guild *taGuild;
-} // namespace Ea
-
-#endif // NET_EA_GUILDRECV_H
diff --git a/src/net/eathena/generalhandler.cpp b/src/net/eathena/generalhandler.cpp
index 36cac3d1d..8663cec06 100644
--- a/src/net/eathena/generalhandler.cpp
+++ b/src/net/eathena/generalhandler.cpp
@@ -198,7 +198,7 @@ void GeneralHandler::gameEnded() const
{
if (socialWindow)
{
- socialWindow->removeTab(Ea::taGuild);
+ socialWindow->removeTab(taGuild);
socialWindow->removeTab(Ea::taParty);
}
diff --git a/src/net/eathena/guildhandler.cpp b/src/net/eathena/guildhandler.cpp
index 42c0bd951..56a661da1 100644
--- a/src/net/eathena/guildhandler.cpp
+++ b/src/net/eathena/guildhandler.cpp
@@ -26,13 +26,18 @@
#include "being/localplayer.h"
#include "being/playerinfo.h"
-#include "net/ea/guildrecv.h"
+#include "gui/widgets/tabs/chat/guildtab.h"
+#include "net/eathena/guildrecv.h"
#include "net/eathena/messageout.h"
#include "net/eathena/protocolout.h"
+#include "utils/delete2.h"
+
#include "debug.h"
+GuildTab *guildTab = nullptr;
+
extern Net::GuildHandler *guildHandler;
extern int packetVersion;
@@ -40,13 +45,25 @@ namespace EAthena
{
GuildHandler::GuildHandler() :
- Ea::GuildHandler()
+ Net::GuildHandler()
{
guildHandler = this;
+ GuildRecv::showBasicInfo = false;
}
GuildHandler::~GuildHandler()
{
+ delete2(guildTab);
+}
+
+void GuildHandler::clear() const
+{
+ taGuild = nullptr;
+}
+
+ChatTab *GuildHandler::getTab() const
+{
+ return guildTab;
}
void GuildHandler::create(const std::string &name) const
@@ -164,7 +181,7 @@ void GuildHandler::info() const
// 3 = skill info
// 4 = expulsion list
- Ea::GuildRecv::showBasicInfo = true;
+ GuildRecv::showBasicInfo = true;
createOutPacket(CMSG_GUILD_REQUEST_INFO);
outMsg.writeInt32(0, "action"); // Request basic info
}
diff --git a/src/net/eathena/guildhandler.h b/src/net/eathena/guildhandler.h
index 3ff9d5042..1a5248517 100644
--- a/src/net/eathena/guildhandler.h
+++ b/src/net/eathena/guildhandler.h
@@ -22,12 +22,14 @@
#ifndef NET_EATHENA_GUILDHANDLER_H
#define NET_EATHENA_GUILDHANDLER_H
-#include "net/ea/guildhandler.h"
+#include "net/guildhandler.h"
+
+class GuildTab;
namespace EAthena
{
-class GuildHandler final : public Ea::GuildHandler
+class GuildHandler final : public Net::GuildHandler
{
public:
GuildHandler();
@@ -36,6 +38,10 @@ class GuildHandler final : public Ea::GuildHandler
~GuildHandler();
+ void clear() const override final;
+
+ ChatTab *getTab() const override final;
+
void create(const std::string &name) const override final;
void invite(const std::string &name) const override final;
@@ -89,11 +95,10 @@ class GuildHandler final : public Ea::GuildHandler
void requestEmblem(const int guildId) const override final;
};
+extern Guild *taGuild;
+
} // namespace EAthena
-namespace Ea
-{
- extern Guild *taGuild;
-}
+extern GuildTab *guildTab;
#endif // NET_EATHENA_GUILDHANDLER_H
diff --git a/src/net/eathena/guildrecv.cpp b/src/net/eathena/guildrecv.cpp
index ec446edf5..2180f798f 100644
--- a/src/net/eathena/guildrecv.cpp
+++ b/src/net/eathena/guildrecv.cpp
@@ -21,35 +21,535 @@
#include "net/eathena/guildrecv.h"
+#include "actormanager.h"
#include "configuration.h"
+#include "notifymanager.h"
#include "being/localplayer.h"
#include "being/playerinfo.h"
+#include "enums/resources/notifytypes.h"
+
#include "gui/windows/chatwindow.h"
+#include "gui/windows/skilldialog.h"
#include "gui/windows/socialwindow.h"
#include "gui/widgets/tabs/chat/guildtab.h"
-#include "net/ea/guildrecv.h"
-
#include "net/messagein.h"
#include "net/eathena/guildhandler.h"
+#include "utils/delete2.h"
+#include "utils/gettext.h"
+
#include "debug.h"
namespace EAthena
{
+Guild *taGuild = nullptr;
+
+namespace GuildRecv
+{
+ bool showBasicInfo = false;
+} // namespace GuildRecv
+
+void GuildRecv::processGuildCreateResponse(Net::MessageIn &msg)
+{
+ const uint8_t flag = msg.readUInt8("flag");
+
+ switch (flag)
+ {
+ case 0:
+ // Success
+ NotifyManager::notify(NotifyTypes::GUILD_CREATED);
+ break;
+
+ case 1:
+ // Already in a guild
+ NotifyManager::notify(NotifyTypes::GUILD_ALREADY);
+ break;
+
+ case 2:
+ // Unable to make (likely name already in use)
+ NotifyManager::notify(NotifyTypes::GUILD_ALREADY);
+ break;
+
+ case 3:
+ // Emperium check failed
+ NotifyManager::notify(NotifyTypes::GUILD_EMPERIUM_CHECK_FAILED);
+ break;
+
+ default:
+ // Unknown response
+ NotifyManager::notify(NotifyTypes::GUILD_ERROR);
+ break;
+ }
+}
+
+void GuildRecv::processGuildMasterOrMember(Net::MessageIn &msg)
+{
+ msg.readInt32("type"); // Type (0x57 for member, 0xd7 for master)
+}
+
+void GuildRecv::processGuildBasicInfo(Net::MessageIn &msg)
+{
+ const int guildId = msg.readInt32("guild id");
+ const int level = msg.readInt32("guild level");
+ const int members = msg.readInt32("connect member");
+ const int maxMembers = msg.readInt32("max member");
+ const int avgLevel = msg.readInt32("average level");
+ const int exp = msg.readInt32("exp");
+ const int nextExp = msg.readInt32("next exp");
+ msg.skip(12, "unused");
+ const int emblem = msg.readInt32("emblem id");
+ std::string name = msg.readString(24, "guild name");
+ std::string master = msg.readString(24, "master name");
+ std::string castle = msg.readString(16, "castles");
+ msg.readInt32("unused");
+
+ if (guildTab && showBasicInfo)
+ {
+ showBasicInfo = false;
+ // TRANSLATORS: guild info message
+ guildTab->chatLog(strprintf(_("Guild name: %s"),
+ name.c_str()), ChatMsgType::BY_SERVER);
+ // TRANSLATORS: guild info message
+ guildTab->chatLog(strprintf(_("Guild master: %s"),
+ master.c_str()), ChatMsgType::BY_SERVER);
+ // TRANSLATORS: guild info message
+ guildTab->chatLog(strprintf(_("Guild level: %d"), level),
+ ChatMsgType::BY_SERVER);
+ // TRANSLATORS: guild info message
+ guildTab->chatLog(strprintf(_("Online members: %d"),
+ members), ChatMsgType::BY_SERVER);
+ // TRANSLATORS: guild info message
+ guildTab->chatLog(strprintf(_("Max members: %d"),
+ maxMembers), ChatMsgType::BY_SERVER);
+ // TRANSLATORS: guild info message
+ guildTab->chatLog(strprintf(_("Average level: %d"),
+ avgLevel), ChatMsgType::BY_SERVER);
+ // TRANSLATORS: guild info message
+ guildTab->chatLog(strprintf(_("Guild exp: %d"), exp),
+ ChatMsgType::BY_SERVER);
+ // TRANSLATORS: guild info message
+ guildTab->chatLog(strprintf(_("Guild next exp: %d"),
+ nextExp), ChatMsgType::BY_SERVER);
+ // TRANSLATORS: guild info message
+ guildTab->chatLog(strprintf(_("Guild castle: %s"),
+ castle.c_str()), ChatMsgType::BY_SERVER);
+ }
+
+ Guild *const g = Guild::getGuild(CAST_S16(guildId));
+ if (!g)
+ return;
+ g->setName(name);
+ g->setEmblemId(emblem);
+}
+
+void GuildRecv::processGuildAlianceInfo(Net::MessageIn &msg)
+{
+ const int length = msg.readInt16("len");
+ if (length < 4)
+ return;
+ const int count = (length - 4) / 32;
+
+ for (int i = 0; i < count; i++)
+ {
+ msg.readInt32("opposition");
+ msg.readInt32("guild id");
+ msg.readString(24, "guild name");
+ }
+}
+
+void GuildRecv::processGuildMemberList(Net::MessageIn &msg)
+{
+ const int length = msg.readInt16("len");
+ if (length < 4)
+ return;
+ const int count = (length - 4) / 104;
+ if (!taGuild)
+ {
+ logger->log1("!taGuild");
+ return;
+ }
+
+ taGuild->clearMembers();
+
+ int onlineNum = 0;
+ int totalNum = 0;
+ for (int i = 0; i < count; i++)
+ {
+ const BeingId id = msg.readBeingId("account id");
+ const int charId = msg.readInt32("char id");
+ msg.readInt16("hair");
+ msg.readInt16("hair color");
+ const int gender = msg.readInt16("gender");
+ const int race = msg.readInt16("class");
+ const int level = msg.readInt16("level");
+ const int exp = msg.readInt32("exp");
+ const int online = msg.readInt32("online");
+ const int pos = msg.readInt32("position");
+ msg.skip(50, "unused");
+ std::string name = msg.readString(24, "name");
+
+ GuildMember *const m = taGuild->addMember(id, charId, name);
+ if (m)
+ {
+ m->setOnline(online);
+ m->setID(id);
+ m->setCharId(charId);
+ m->setGender(Being::intToGender(CAST_U8(gender)));
+ m->setLevel(level);
+ m->setExp(exp);
+ m->setPos(pos);
+ m->setRace(race);
+ if (actorManager)
+ {
+ Being *const being = actorManager->findBeingByName(
+ name, ActorType::Player);
+ if (being)
+ {
+ being->setGuildName(taGuild->getName());
+ if (being->getLevel() != level)
+ {
+ being->setLevel(level);
+ being->updateName();
+ }
+ }
+ }
+ if (online)
+ onlineNum ++;
+ totalNum ++;
+ }
+ }
+ taGuild->sort();
+ if (actorManager)
+ {
+ actorManager->updatePlayerGuild();
+ actorManager->updatePlayerColors();
+ }
+ if (socialWindow)
+ socialWindow->updateGuildCounter(onlineNum, totalNum);
+}
+
+void GuildRecv::processGuildPosNameList(Net::MessageIn &msg)
+{
+ if (!taGuild)
+ {
+ logger->log1("!taGuild");
+ return;
+ }
+
+ const int length = msg.readInt16("len");
+ if (length < 4)
+ return;
+ const int count = (length - 4) / 28;
+
+ for (int i = 0; i < count; i++)
+ {
+ const int id = msg.readInt32("position id");
+ const std::string name = msg.readString(24, "position name");
+ taGuild->addPos(id, name);
+ }
+}
+
+void GuildRecv::processGuildPosInfoList(Net::MessageIn &msg)
+{
+ const int length = msg.readInt16("len");
+ if (length < 4)
+ return;
+ const int count = (length - 4) / 16;
+
+ for (int i = 0; i < count; i++)
+ {
+ msg.readInt32("id");
+ msg.readInt32("mode");
+ msg.readInt32("same id");
+ msg.readInt32("exp mode");
+ }
+}
+
+void GuildRecv::processGuildPositionChanged(Net::MessageIn &msg)
+{
+ UNIMPLIMENTEDPACKET;
+ msg.readInt16("len");
+ msg.readInt32("id");
+ msg.readInt32("mode");
+ msg.readInt32("same ip");
+ msg.readInt32("exp mode");
+ msg.readString(24, "name");
+}
+
+void GuildRecv::processGuildMemberPosChange(Net::MessageIn &msg)
+{
+ msg.readInt16("len");
+ const BeingId accountId = msg.readBeingId("account id");
+ const int charId = msg.readInt32("char id");
+ const int pos = msg.readInt32("position");
+ if (taGuild)
+ {
+ GuildMember *const m = taGuild->getMember(accountId, charId);
+ if (m)
+ m->setPos(pos);
+ }
+}
+
+void GuildRecv::processGuildEmblemData(Net::MessageIn &msg)
+{
+ UNIMPLIMENTEDPACKET;
+ const int length = msg.readInt16("len");
+
+ msg.readInt32("guild id");
+ msg.readInt32("emblem id");
+ if (length < 12)
+ return;
+ msg.skip(length - 12, "emblem data");
+}
+
+void GuildRecv::processGuildSkillInfo(Net::MessageIn &msg)
+{
+ const int count = (msg.readInt16("len") - 6) / 37;
+ msg.readInt16("skill points");
+
+ if (skillDialog)
+ skillDialog->hideSkills(SkillOwner::Guild);
+ for (int i = 0; i < count; i++)
+ {
+ const int skillId = msg.readInt16("skill id");
+ const SkillType::SkillType inf = static_cast<SkillType::SkillType>(
+ msg.readInt32("inf"));
+ const int level = msg.readInt16("skill level");
+ const int sp = msg.readInt16("sp");
+ const int range = msg.readInt16("range");
+ const std::string name = msg.readString(24, "skill name");
+ const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable);
+ PlayerInfo::setSkillLevel(skillId, level);
+ if (skillDialog)
+ {
+ if (!skillDialog->updateSkill(skillId, range, up, inf, sp))
+ {
+ skillDialog->addSkill(SkillOwner::Guild,
+ skillId, name, level, range, up, inf, sp);
+ }
+ }
+ }
+ if (skillDialog)
+ skillDialog->updateModels();
+}
+
+void GuildRecv::processGuildNotice(Net::MessageIn &msg)
+{
+ const std::string msg1 = msg.readString(60, "msg1");
+ const std::string msg2 = msg.readString(120, "msg2");
+ if (guildTab)
+ {
+ guildTab->chatLog(msg1, ChatMsgType::BY_SERVER);
+ guildTab->chatLog(msg2, ChatMsgType::BY_SERVER);
+ }
+}
+
+void GuildRecv::processGuildInvite(Net::MessageIn &msg)
+{
+ const int guildId = msg.readInt32("guild id");
+ const std::string guildName = msg.readString(24, "guild name");
+
+ if (socialWindow)
+ socialWindow->showGuildInvite(guildName, guildId, "");
+}
+
+void GuildRecv::processGuildInviteAck(Net::MessageIn &msg)
+{
+ const uint8_t flag = msg.readUInt8("flag");
+ if (!guildTab)
+ return;
+
+ switch (flag)
+ {
+ case 0:
+ NotifyManager::notify(NotifyTypes::GUILD_INVITE_FAILED);
+ break;
+
+ case 1:
+ NotifyManager::notify(NotifyTypes::GUILD_INVITE_REJECTED);
+ break;
+
+ case 2:
+ NotifyManager::notify(NotifyTypes::GUILD_INVITE_JOINED);
+ break;
+
+ case 3:
+ NotifyManager::notify(NotifyTypes::GUILD_INVITE_FULL);
+ break;
+
+ default:
+ NotifyManager::notify(NotifyTypes::GUILD_INVITE_ERROR);
+ break;
+ }
+}
+
+void GuildRecv::processGuildLeave(Net::MessageIn &msg)
+{
+ const std::string nick = msg.readString(24, "nick");
+ msg.readString(40, "message");
+
+ if (taGuild)
+ taGuild->removeMember(nick);
+
+ if (!localPlayer)
+ return;
+
+ if (nick == localPlayer->getName())
+ {
+ if (taGuild)
+ {
+ taGuild->removeFromMembers();
+ taGuild->clearMembers();
+ localPlayer->removeGuild(taGuild->getId());
+ }
+ NotifyManager::notify(NotifyTypes::GUILD_LEFT);
+ delete2(guildTab)
+
+ if (socialWindow && taGuild)
+ socialWindow->removeTab(taGuild);
+ if (actorManager)
+ actorManager->updatePlayerColors();
+ }
+ else
+ {
+ NotifyManager::notify(NotifyTypes::GUILD_USER_LEFT, nick);
+ if (actorManager)
+ {
+ Being *const b = actorManager->findBeingByName(
+ nick, ActorType::Player);
+
+ if (b)
+ b->clearGuilds();
+ if (taGuild)
+ taGuild->removeMember(nick);
+ }
+ }
+}
+
+void GuildRecv::processGuildMessage(Net::MessageIn &msg)
+{
+ const int msgLength = msg.readInt16("len") - 4;
+
+ if (msgLength <= 0)
+ return;
+ if (guildTab)
+ {
+ std::string chatMsg = msg.readString(msgLength, "message");
+ const size_t pos = chatMsg.find(" : ", 0);
+ if (pos != std::string::npos)
+ {
+ const std::string sender_name = chatMsg.substr(0, pos);
+ chatMsg.erase(0, pos + 3);
+ trim(chatMsg);
+ guildTab->chatLog(sender_name, chatMsg);
+ }
+ else
+ {
+ guildTab->chatLog(chatMsg, ChatMsgType::BY_SERVER);
+ }
+ }
+ else
+ {
+ DEBUGLOGSTR("invisible guild?");
+ msg.readString(msgLength, "message");
+ }
+}
+
+void GuildRecv::processGuildSkillUp(Net::MessageIn &msg)
+{
+ UNIMPLIMENTEDPACKET;
+ msg.readInt16("skill id");
+ msg.readInt16("level");
+ msg.readInt16("sp");
+ msg.readInt16("range");
+ msg.readUInt8("unused?");
+}
+
+void GuildRecv::processGuildReqAlliance(Net::MessageIn &msg)
+{
+ UNIMPLIMENTEDPACKET;
+ msg.readInt32("id");
+ msg.readString(24, "name");
+}
+
+void GuildRecv::processGuildReqAllianceAck(Net::MessageIn &msg)
+{
+ UNIMPLIMENTEDPACKET;
+ msg.readInt32("flag");
+}
+
+void GuildRecv::processGuildDelAlliance(Net::MessageIn &msg)
+{
+ UNIMPLIMENTEDPACKET;
+ msg.readInt32("guild id");
+ msg.readInt32("flag");
+}
+
+void GuildRecv::processGuildOppositionAck(Net::MessageIn &msg)
+{
+ UNIMPLIMENTEDPACKET;
+ msg.readUInt8("flag");
+}
+
+void GuildRecv::processGuildBroken(Net::MessageIn &msg)
+{
+ UNIMPLIMENTEDPACKET;
+ msg.readInt32("flag");
+}
+
+void GuildRecv::processGuildExpulsionContinue(const std::string &nick)
+{
+ if (taGuild)
+ taGuild->removeMember(nick);
+
+ if (!localPlayer)
+ return;
+
+ if (nick == localPlayer->getName())
+ {
+ if (taGuild)
+ {
+ taGuild->removeFromMembers();
+ taGuild->clearMembers();
+ }
+ NotifyManager::notify(NotifyTypes::GUILD_KICKED);
+ delete2(guildTab)
+
+ if (socialWindow && taGuild)
+ socialWindow->removeTab(taGuild);
+ if (actorManager)
+ actorManager->updatePlayerColors();
+ }
+ else
+ {
+ NotifyManager::notify(NotifyTypes::GUILD_USER_KICKED, nick);
+ if (actorManager)
+ {
+ Being *const b = actorManager->findBeingByName(
+ nick, ActorType::Player);
+
+ if (b)
+ b->clearGuilds();
+ if (taGuild)
+ taGuild->removeMember(nick);
+ }
+ }
+}
+
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)
+ if (taGuild)
{
- GuildMember *const m = Ea::taGuild->getMember(id);
+ GuildMember *const m = taGuild->getMember(id);
if (m)
{
m->setX(x);
@@ -74,15 +574,15 @@ void GuildRecv::processGuildPositionInfo(Net::MessageIn &msg)
g->setName(guildName);
g->setEmblemId(emblem);
- if (!Ea::taGuild)
- Ea::taGuild = g;
+ if (!taGuild)
+ taGuild = g;
if (!guildTab && chatWindow)
{
guildTab = new GuildTab(chatWindow);
if (config.getBoolValue("showChatHistory"))
guildTab->loadFromLogFile("#Guild");
if (localPlayer)
- localPlayer->addGuild(Ea::taGuild);
+ localPlayer->addGuild(taGuild);
guildHandler->memberList();
}
@@ -102,9 +602,9 @@ void GuildRecv::processGuildMemberLogin(Net::MessageIn &msg)
msg.readInt16("sex")));
msg.readInt16("hair");
msg.readInt16("hair color");
- if (Ea::taGuild)
+ if (taGuild)
{
- GuildMember *const m = Ea::taGuild->getMember(accountId, charId);
+ GuildMember *const m = taGuild->getMember(accountId, charId);
if (m)
{
m->setOnline(online);
@@ -123,7 +623,7 @@ void GuildRecv::processGuildExpulsion(Net::MessageIn &msg)
const std::string nick = msg.readString(24, "name");
msg.readString(40, "message");
- Ea::GuildRecv::processGuildExpulsionContinue(nick);
+ GuildRecv::processGuildExpulsionContinue(nick);
}
void GuildRecv::processGuildExpulsionList(Net::MessageIn &msg)
diff --git a/src/net/eathena/guildrecv.h b/src/net/eathena/guildrecv.h
index 408b494c6..6bec88f54 100644
--- a/src/net/eathena/guildrecv.h
+++ b/src/net/eathena/guildrecv.h
@@ -22,6 +22,8 @@
#ifndef NET_EATHENA_GUILDRECV_H
#define NET_EATHENA_GUILDRECV_H
+#include <string>
+
namespace Net
{
class MessageIn;
@@ -34,6 +36,31 @@ namespace EAthena
{
namespace GuildRecv
{
+ extern bool showBasicInfo;
+
+ void processGuildCreateResponse(Net::MessageIn &msg);
+ void processGuildMasterOrMember(Net::MessageIn &msg);
+ void processGuildBasicInfo(Net::MessageIn &msg);
+ void processGuildAlianceInfo(Net::MessageIn &msg);
+ void processGuildMemberList(Net::MessageIn &msg);
+ void processGuildPosNameList(Net::MessageIn &msg);
+ void processGuildPosInfoList(Net::MessageIn &msg);
+ void processGuildPositionChanged(Net::MessageIn &msg);
+ void processGuildMemberPosChange(Net::MessageIn &msg);
+ void processGuildEmblemData(Net::MessageIn &msg);
+ void processGuildSkillInfo(Net::MessageIn &msg);
+ void processGuildNotice(Net::MessageIn &msg);
+ void processGuildInvite(Net::MessageIn &msg);
+ void processGuildInviteAck(Net::MessageIn &msg);
+ void processGuildLeave(Net::MessageIn &msg);
+ void processGuildMessage(Net::MessageIn &msg);
+ void processGuildSkillUp(Net::MessageIn &msg);
+ void processGuildReqAlliance(Net::MessageIn &msg);
+ void processGuildReqAllianceAck(Net::MessageIn &msg);
+ void processGuildDelAlliance(Net::MessageIn &msg);
+ void processGuildOppositionAck(Net::MessageIn &msg);
+ void processGuildBroken(Net::MessageIn &msg);
+ void processGuildExpulsionContinue(const std::string &nick);
void processGuildUpdateCoords(Net::MessageIn &msg);
void processGuildPositionInfo(Net::MessageIn &msg);
void processGuildMemberLogin(Net::MessageIn &msg);
@@ -42,12 +69,8 @@ namespace EAthena
void processGuildEmblem(Net::MessageIn &msg);
void processOnlineInfo(Net::MessageIn &msg);
} // namespace GuildRecv
-} // namespace EAthena
-
-namespace Ea
-{
extern Guild *taGuild;
-}
+} // namespace EAthena
extern GuildTab *guildTab;
diff --git a/src/net/eathena/network.cpp b/src/net/eathena/network.cpp
index 9361c4723..d75d7fc6d 100644
--- a/src/net/eathena/network.cpp
+++ b/src/net/eathena/network.cpp
@@ -30,7 +30,6 @@
#include "net/ea/charserverrecv.h"
#include "net/ea/chatrecv.h"
#include "net/ea/gamerecv.h"
-#include "net/ea/guildrecv.h"
#include "net/ea/inventoryrecv.h"
#include "net/ea/itemrecv.h"
#include "net/ea/loginrecv.h"
diff --git a/src/net/eathena/packetsin.inc b/src/net/eathena/packetsin.inc
index 3c7003831..d180a84a4 100644
--- a/src/net/eathena/packetsin.inc
+++ b/src/net/eathena/packetsin.inc
@@ -141,33 +141,33 @@ packet(SMSG_FRIENDS_REQUEST_ACK, 0x0209, 36, &FriendsRecv::processReq
packet(SMSG_GM_CHAT, 0x009a, -1, &ChatRecv::processGmChat, 0);
packet(SMSG_GM_CHAT2, 0x01c3, -1, &ChatRecv::processGmChat2, 0);
packet(SMSG_GRAFFITI_VISIBLE, 0x01c9, 97, &BeingRecv::processGraffiti, 0);
-packet(SMSG_GUILD_ALIANCE_INFO, 0x014c, -1, &Ea::GuildRecv::processGuildAlianceInfo, 0);
+packet(SMSG_GUILD_ALIANCE_INFO, 0x014c, -1, &GuildRecv::processGuildAlianceInfo, 0);
packet(SMSG_GUILD_ALLIANCE_ADDED_DISABLED, 0x0185, 34, nullptr, 0);
-packet(SMSG_GUILD_BASIC_INFO, 0x01b6, 114, &Ea::GuildRecv::processGuildBasicInfo, 0);
-packet(SMSG_GUILD_BROKEN, 0x015e, 6, &Ea::GuildRecv::processGuildBroken, 0);
-packet(SMSG_GUILD_CREATE_RESPONSE, 0x0167, 3, &Ea::GuildRecv::processGuildCreateResponse, 0);
-packet(SMSG_GUILD_DEL_ALLIANCE, 0x0184, 10, &Ea::GuildRecv::processGuildDelAlliance, 0);
+packet(SMSG_GUILD_BASIC_INFO, 0x01b6, 114, &GuildRecv::processGuildBasicInfo, 0);
+packet(SMSG_GUILD_BROKEN, 0x015e, 6, &GuildRecv::processGuildBroken, 0);
+packet(SMSG_GUILD_CREATE_RESPONSE, 0x0167, 3, &GuildRecv::processGuildCreateResponse, 0);
+packet(SMSG_GUILD_DEL_ALLIANCE, 0x0184, 10, &GuildRecv::processGuildDelAlliance, 0);
packet(SMSG_GUILD_EMBLEM, 0x01b4, 12, &GuildRecv::processGuildEmblem, 0);
-packet(SMSG_GUILD_EMBLEM_DATA, 0x0152, -1, &Ea::GuildRecv::processGuildEmblemData, 0);
+packet(SMSG_GUILD_EMBLEM_DATA, 0x0152, -1, &GuildRecv::processGuildEmblemData, 0);
packet(SMSG_GUILD_EXPULSION_LIST, 0x0163, -1, &GuildRecv::processGuildExpulsionList, 0);
-packet(SMSG_GUILD_INVITE, 0x016a, 30, &Ea::GuildRecv::processGuildInvite, 0);
-packet(SMSG_GUILD_INVITE_ACK, 0x0169, 3, &Ea::GuildRecv::processGuildInviteAck, 0);
-packet(SMSG_GUILD_LEAVE, 0x015a, 66, &Ea::GuildRecv::processGuildLeave, 0);
-packet(SMSG_GUILD_MASTER_OR_MEMBER, 0x014e, 6, &Ea::GuildRecv::processGuildMasterOrMember, 0);
-packet(SMSG_GUILD_MEMBER_LIST, 0x0154, -1, &Ea::GuildRecv::processGuildMemberList, 0);
+packet(SMSG_GUILD_INVITE, 0x016a, 30, &GuildRecv::processGuildInvite, 0);
+packet(SMSG_GUILD_INVITE_ACK, 0x0169, 3, &GuildRecv::processGuildInviteAck, 0);
+packet(SMSG_GUILD_LEAVE, 0x015a, 66, &GuildRecv::processGuildLeave, 0);
+packet(SMSG_GUILD_MASTER_OR_MEMBER, 0x014e, 6, &GuildRecv::processGuildMasterOrMember, 0);
+packet(SMSG_GUILD_MEMBER_LIST, 0x0154, -1, &GuildRecv::processGuildMemberList, 0);
packet(SMSG_GUILD_MEMBER_LOGIN, 0x01f2, 20, &GuildRecv::processGuildMemberLogin, 0);
-packet(SMSG_GUILD_MEMBER_POS_CHANGE, 0x0156, -1, &Ea::GuildRecv::processGuildMemberPosChange, 0);
-packet(SMSG_GUILD_MESSAGE, 0x017f, -1, &Ea::GuildRecv::processGuildMessage, 0);
-packet(SMSG_GUILD_NOTICE, 0x016f, 182, &Ea::GuildRecv::processGuildNotice, 0);
-packet(SMSG_GUILD_OPPOSITION_ACK, 0x0181, 3, &Ea::GuildRecv::processGuildOppositionAck, 0);
-packet(SMSG_GUILD_POSITION_CHANGED, 0x0174, -1, &Ea::GuildRecv::processGuildPositionChanged, 0);
+packet(SMSG_GUILD_MEMBER_POS_CHANGE, 0x0156, -1, &GuildRecv::processGuildMemberPosChange, 0);
+packet(SMSG_GUILD_MESSAGE, 0x017f, -1, &GuildRecv::processGuildMessage, 0);
+packet(SMSG_GUILD_NOTICE, 0x016f, 182, &GuildRecv::processGuildNotice, 0);
+packet(SMSG_GUILD_OPPOSITION_ACK, 0x0181, 3, &GuildRecv::processGuildOppositionAck, 0);
+packet(SMSG_GUILD_POSITION_CHANGED, 0x0174, -1, &GuildRecv::processGuildPositionChanged, 0);
packet(SMSG_GUILD_POSITION_INFO, 0x016c, 43, &GuildRecv::processGuildPositionInfo, 0);
-packet(SMSG_GUILD_POS_INFO_LIST, 0x0160, -1, &Ea::GuildRecv::processGuildPosInfoList, 0);
-packet(SMSG_GUILD_POS_NAME_LIST, 0x0166, -1, &Ea::GuildRecv::processGuildPosNameList, 0);
-packet(SMSG_GUILD_REQ_ALLIANCE, 0x0171, 30, &Ea::GuildRecv::processGuildReqAlliance, 0);
-packet(SMSG_GUILD_REQ_ALLIANCE_ACK, 0x0173, 3, &Ea::GuildRecv::processGuildReqAllianceAck, 0);
-packet(SMSG_GUILD_SKILL_INFO, 0x0162, -1, &Ea::GuildRecv::processGuildSkillInfo, 0);
-packet(SMSG_GUILD_SKILL_UP, 0x010e, 11, &Ea::GuildRecv::processGuildSkillUp, 0);
+packet(SMSG_GUILD_POS_INFO_LIST, 0x0160, -1, &GuildRecv::processGuildPosInfoList, 0);
+packet(SMSG_GUILD_POS_NAME_LIST, 0x0166, -1, &GuildRecv::processGuildPosNameList, 0);
+packet(SMSG_GUILD_REQ_ALLIANCE, 0x0171, 30, &GuildRecv::processGuildReqAlliance, 0);
+packet(SMSG_GUILD_REQ_ALLIANCE_ACK, 0x0173, 3, &GuildRecv::processGuildReqAllianceAck, 0);
+packet(SMSG_GUILD_SKILL_INFO, 0x0162, -1, &GuildRecv::processGuildSkillInfo, 0);
+packet(SMSG_GUILD_SKILL_UP, 0x010e, 11, &GuildRecv::processGuildSkillUp, 0);
packet(SMSG_GUILD_UPDATE_COORDS, 0x01eb, 10, &GuildRecv::processGuildUpdateCoords, 0);
packet(SMSG_IGNORE_ALL_RESPONSE, 0x00d2, 4, &Ea::ChatRecv::processIgnoreAllResponse, 0);
packet(SMSG_IGNORE_NICK_ACK, 0x00d1, 4, &ChatRecv::processIgnoreNickAck, 0);
diff --git a/src/net/tmwa/generalhandler.cpp b/src/net/tmwa/generalhandler.cpp
index 71030d748..bf919ce84 100644
--- a/src/net/tmwa/generalhandler.cpp
+++ b/src/net/tmwa/generalhandler.cpp
@@ -202,12 +202,8 @@ void GeneralHandler::gameStarted() const
void GeneralHandler::gameEnded() const
{
if (socialWindow)
- {
- socialWindow->removeTab(Ea::taGuild);
socialWindow->removeTab(Ea::taParty);
- }
- delete2(guildTab);
delete2(partyTab);
}
diff --git a/src/net/tmwa/guildhandler.cpp b/src/net/tmwa/guildhandler.cpp
index 0b3c03990..d3312c727 100644
--- a/src/net/tmwa/guildhandler.cpp
+++ b/src/net/tmwa/guildhandler.cpp
@@ -29,7 +29,7 @@ namespace TmwAthena
{
GuildHandler::GuildHandler() :
- Ea::GuildHandler()
+ Net::GuildHandler()
{
guildHandler = this;
}
@@ -38,6 +38,15 @@ GuildHandler::~GuildHandler()
{
}
+void GuildHandler::clear() const
+{
+}
+
+ChatTab *GuildHandler::getTab() const
+{
+ return nullptr;
+}
+
void GuildHandler::create(const std::string &name A_UNUSED) const
{
}
diff --git a/src/net/tmwa/guildhandler.h b/src/net/tmwa/guildhandler.h
index 16dc3c0df..ff5de76cb 100644
--- a/src/net/tmwa/guildhandler.h
+++ b/src/net/tmwa/guildhandler.h
@@ -22,12 +22,12 @@
#ifndef NET_TMWA_GUILDHANDLER_H
#define NET_TMWA_GUILDHANDLER_H
-#include "net/ea/guildhandler.h"
+#include "net/guildhandler.h"
namespace TmwAthena
{
-class GuildHandler final : public Ea::GuildHandler
+class GuildHandler final : public Net::GuildHandler
{
public:
GuildHandler();
@@ -36,6 +36,10 @@ class GuildHandler final : public Ea::GuildHandler
~GuildHandler();
+ void clear() const override final;
+
+ ChatTab *getTab() const override final;
+
void create(const std::string &name) const override final;
void invite(const std::string &name) const override final;