summaryrefslogtreecommitdiff
path: root/src/net/tmwa/guildhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/tmwa/guildhandler.cpp')
-rw-r--r--src/net/tmwa/guildhandler.cpp513
1 files changed, 38 insertions, 475 deletions
diff --git a/src/net/tmwa/guildhandler.cpp b/src/net/tmwa/guildhandler.cpp
index b6c230643..cbb32c3c8 100644
--- a/src/net/tmwa/guildhandler.cpp
+++ b/src/net/tmwa/guildhandler.cpp
@@ -22,21 +22,13 @@
#include "net/tmwa/guildhandler.h"
#include "actorspritemanager.h"
-#include "guild.h"
-#include "event.h"
#include "localplayer.h"
#include "log.h"
#include "playerinfo.h"
-#include "gui/socialwindow.h"
-
#include "net/tmwa/messagein.h"
#include "net/tmwa/protocol.h"
-#include "net/tmwa/gui/guildtab.h"
-
-#include "utils/gettext.h"
-
#include "debug.h"
extern Net::GuildHandler *guildHandler;
@@ -44,10 +36,6 @@ extern Net::GuildHandler *guildHandler;
namespace TmwAthena
{
-GuildTab *guildTab = 0;
-Guild *taGuild;
-bool showBasicInfo(false);
-
GuildHandler::GuildHandler()
{
static const Uint16 _messages[] =
@@ -87,8 +75,6 @@ GuildHandler::GuildHandler()
GuildHandler::~GuildHandler()
{
- delete guildTab;
- guildTab = 0;
}
void GuildHandler::handleMessage(Net::MessageIn &msg)
@@ -98,532 +84,109 @@ void GuildHandler::handleMessage(Net::MessageIn &msg)
switch (msg.getId())
{
case SMSG_GUILD_CREATE_RESPONSE:
- {
- int flag = msg.readInt8();
-
- if (flag == 0)
- {
- // Success
- SERVER_NOTICE(_("Guild created."))
- }
- else if (flag == 1)
- {
- // Already in a guild
- SERVER_NOTICE(_("You are already in guild."))
- }
- else if (flag == 2)
- {
- // Unable to make (likely name already in use)
- SERVER_NOTICE(_("You are already in guild."))
- }
- else if (flag == 3)
- {
- // Emperium check failed
- SERVER_NOTICE(_("Emperium check failed."))
- }
- else
- {
- // Unknown response
- SERVER_NOTICE(_("Unknown server response."))
- }
- }
- break;
+ processGuildCreateResponse(msg);
+ 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);
-
- Guild *g = Guild::getGuild(static_cast<short int>(guildId));
- if (!g)
- break;
-
- g->setName(guildName);
- g->setEmblemId(emblem);
- if (!taGuild)
- taGuild = g;
- if (!guildTab && chatWindow)
- {
- guildTab = new GuildTab();
- if (player_node)
- player_node->addGuild(taGuild);
- memberList(guildId);
- }
-
- if (player_node)
- {
- player_node->setGuild(g);
- player_node->setGuildName(g->getName());
- }
-
- logger->log("Guild position info: %d %d %d %s\n", guildId,
- emblem, posMode, guildName.c_str());
- }
- break;
+ processGuildPositionInfo(msg);
+ break;
case SMSG_GUILD_MEMBER_LOGIN:
{
- int accountId = msg.readInt32(); // Account ID
- int charId = msg.readInt32(); // Char ID
- int online = msg.readInt32(); // Flag
- if (taGuild)
- {
- GuildMember *m = taGuild->getMember(accountId, charId);
- if (m)
- m->setOnline(online);
- }
+ processGuildMemberLogin(msg);
break;
}
case SMSG_GUILD_MASTER_OR_MEMBER:
- msg.readInt32(); // Type (0x57 for member, 0xd7 for master)
+ processGuildMasterOrMember(msg);
break;
case SMSG_GUILD_BASIC_INFO:
- {
- int guildId = msg.readInt32(); // Guild ID
- int level = msg.readInt32(); // Guild level
- int members = msg.readInt32(); // 'Connect member'
- int maxMembers = msg.readInt32(); // 'Max member'
- int avgLevel = msg.readInt32(); // Average level
- int exp = msg.readInt32(); // Exp
- int nextExp = msg.readInt32(); // Next exp
- msg.skip(16); // unused
- std::string name = msg.readString(24); // Name
- std::string master = msg.readString(24); // Master's name
- std::string castle = msg.readString(20); // Castles
- // (ie: "Six Castles" or "None Taken")
-
- if (guildTab && showBasicInfo)
- {
- showBasicInfo = false;
- guildTab->chatLog(strprintf(
- _("Guild name: %s"), name.c_str()), BY_SERVER);
- guildTab->chatLog(strprintf(
- _("Guild master: %s"), master.c_str()), BY_SERVER);
- guildTab->chatLog(strprintf(
- _("Guild level: %d"), level), BY_SERVER);
- guildTab->chatLog(strprintf(
- _("Online members: %d"), members), BY_SERVER);
- guildTab->chatLog(strprintf(
- _("Max members: %d"), maxMembers), BY_SERVER);
- guildTab->chatLog(strprintf(
- _("Average level: %d"), avgLevel), BY_SERVER);
- guildTab->chatLog(strprintf(
- _("Guild exp: %d"), exp), BY_SERVER);
- guildTab->chatLog(strprintf(
- _("Guild next exp: %d"), nextExp), BY_SERVER);
- guildTab->chatLog(strprintf(
- _("Guild castle: %s"), castle.c_str()), BY_SERVER);
- }
-
- Guild *g = Guild::getGuild(static_cast<short int>(guildId));
- if (!g)
- break;
- g->setName(name);
- }
- break;
+ processGuildBasicInfo(msg);
+ break;
case SMSG_GUILD_ALIANCE_INFO:
- {
- int length = msg.readInt16();
- int count = (length - 4) / 32;
-
- for (int i = 0; i < count; i++)
- {
- msg.readInt32(); // 'Opposition'
- msg.readInt32(); // Other guild ID
- msg.readString(24); // Other guild name
- }
- }
- break;
+ processGuildAlianceInfo(msg);
+ break;
case SMSG_GUILD_MEMBER_LIST:
- {
- int length = msg.readInt16();
- int count = (length - 4) / 104;
- if (!taGuild)
- {
- logger->log1("!taGuild");
- break;
- }
-
- taGuild->clearMembers();
-
- for (int i = 0; i < count; i++)
- {
- int id = msg.readInt32(); // Account ID
- int charId = msg.readInt32(); // Char ID
- msg.readInt16(); // Hair
- msg.readInt16(); // Hair color
- int gender = msg.readInt16(); // Gender
- int race = msg.readInt16(); // Class
- int level = msg.readInt16(); // Level
- int exp = msg.readInt32(); // Exp
- int online = msg.readInt32(); // Online
- int pos = msg.readInt32(); // Position
- msg.skip(50); // unused
- std::string name = msg.readString(24); // Name
-
- GuildMember *m = taGuild->addMember(id, charId, name);
- if (m)
- {
- m->setOnline(online);
- m->setID(id);
- m->setCharId(charId);
- if (!gender)
- m->setGender(GENDER_FEMALE);
- else if (gender == 1)
- m->setGender(GENDER_MALE);
- else
- m->setGender(GENDER_UNSPECIFIED);
-
- m->setLevel(level);
- m->setExp(exp);
- m->setPos(pos);
- m->setRace(race);
-// m->setDisplayBold(!pos);
- if (actorSpriteManager)
- {
- Being *being = actorSpriteManager->findBeingByName(
- name, Being::PLAYER);
- if (being)
- {
- being->setGuildName(taGuild->getName());
- if (being->getLevel() != level)
- {
- being->setLevel(level);
- being->updateName();
- }
- }
- }
- }
- }
- taGuild->sort();
- if (actorSpriteManager)
- {
- actorSpriteManager->updatePlayerGuild();
- actorSpriteManager->updatePlayerColors();
- }
- }
- break;
+ processGuildMemberList(msg);
+ break;
case SMSG_GUILD_POS_NAME_LIST:
- {
- if (!taGuild)
- {
- logger->log1("!taGuild");
- break;
- }
-
- int length = msg.readInt16();
- int count = (length - 4) / 28;
-
- for (int i = 0; i < count; i++)
- {
- int id = msg.readInt32(); // ID
- std::string name = msg.readString(24); // Position name
- taGuild->addPos(id, name);
- }
- }
- break;
+ processGuildPosNameList(msg);
+ break;
case SMSG_GUILD_POS_INFO_LIST:
- {
- int length = msg.readInt16();
- 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
- }
- }
- break;
+ processGuildPosInfoList(msg);
+ break;
case SMSG_GUILD_POSITION_CHANGED:
- msg.readInt16(); // Always 44
- msg.readInt32(); // ID
- msg.readInt32(); // Mode
- msg.readInt32(); // Same ID
- msg.readInt32(); // Exp mode
- msg.readString(24); // Name
+ processGuildPositionChanged(msg);
break;
case SMSG_GUILD_MEMBER_POS_CHANGE:
- {
- msg.readInt16(); // Always 16
- int accountId = msg.readInt32(); // Account ID
- int charId = msg.readInt32(); // Char ID
- int pos = msg.readInt32(); // Position
- if (taGuild)
- {
- GuildMember *m = taGuild->getMember(accountId, charId);
- if (m)
- m->setPos(pos);
- }
+ processGuildMemberPosChange(msg);
break;
- }
case SMSG_GUILD_EMBLEM:
- {
- int length = msg.readInt16();
-
- msg.readInt32(); // Guild ID
- msg.readInt32(); // Emblem ID
- msg.skip(length - 12); // Emblem data (unknown format)
- }
- break;
+ processGuildEmblem(msg);
+ break;
case SMSG_GUILD_SKILL_INFO:
- {
- int length = msg.readInt16();
- int count = (length - 6) / 37;
-
- msg.readInt16(); // 'Skill point'
-
- for (int i = 0; i < count; i++)
- {
- msg.readInt16(); // ID
- msg.readInt16(); // 'Info' (unknown atm)
- msg.readInt16(); // unused
- msg.readInt16(); // Level
- msg.readInt16(); // SP
- msg.readInt16(); // 'Range'
- msg.skip(24); // unused
- msg.readInt8(); // Can be increased
- }
- }
- break;
+ processGuildSkillInfo(msg);
+ break;
case SMSG_GUILD_NOTICE:
- {
- std::string msg1 = msg.readString(60); // Mes1
- std::string msg2 = msg.readString(120); // Mes2
- if (guildTab)
- {
- guildTab->chatLog(msg1, BY_SERVER);
- guildTab->chatLog(msg2, BY_SERVER);
- }
+ processGuildNotice(msg);
break;
- }
case SMSG_GUILD_INVITE:
- {
- int guildId = msg.readInt32();
- std::string guildName = msg.readString(24);
-
- if (socialWindow)
- socialWindow->showGuildInvite(guildName, guildId, "");
+ processGuildInvite(msg);
break;
- }
case SMSG_GUILD_INVITE_ACK:
- {
- int flag = msg.readInt8();
- if (!guildTab)
- break;
-
- switch (flag)
- {
- case 0:
- guildTab->chatLog(_("Could not inivte user to guild."),
- BY_SERVER);
- break;
-
- case 1:
- guildTab->chatLog(_("User rejected guild invite."),
- BY_SERVER);
- break;
-
- case 2:
- guildTab->chatLog(_("User is now part of your guild."),
- BY_SERVER);
- break;
-
- case 3:
- guildTab->chatLog(_("Your guild is full."),
- BY_SERVER);
- break;
-
- default:
- guildTab->chatLog(_("Unknown guild invite response."),
- BY_SERVER);
- break;
- }
- }
- break;
+ processGuildInviteAck(msg);
+ break;
case SMSG_GUILD_LEAVE:
- {
- std::string nick = msg.readString(24); // Name
- std::string message = msg.readString(40); // Message
-
- if (taGuild)
- taGuild->removeMember(nick);
-
- if (player_node && nick == player_node->getName())
- {
- if (taGuild)
- {
- taGuild->removeFromMembers();
- taGuild->clearMembers();
- }
- SERVER_NOTICE(_("You have left the guild."))
- delete guildTab;
- guildTab = 0;
-
- if (socialWindow && taGuild)
- socialWindow->removeTab(taGuild);
- if (actorSpriteManager)
- actorSpriteManager->updatePlayerColors();
- }
- else
- {
- if (guildTab)
- {
- guildTab->chatLog(strprintf(
- _("%s has left your guild."),
- nick.c_str()), BY_SERVER);
- }
- if (actorSpriteManager)
- {
- Being *b = actorSpriteManager->findBeingByName(
- nick, Being::PLAYER);
-
- if (b)
- b->clearGuilds();
- if (taGuild)
- taGuild->removeMember(nick);
- }
- }
+ processGuildLeave(msg);
break;
- }
case SMSG_GUILD_EXPULSION:
- {
- std::string nick = msg.readString(24); // Name (of expulsed?)
- std::string message = msg.readString(40); // Message
- msg.skip(24); // unused ("dummy")
- if (taGuild)
- taGuild->removeMember(nick);
-
- if (player_node && nick == player_node->getName())
- {
- if (taGuild)
- {
- taGuild->removeFromMembers();
- taGuild->clearMembers();
- }
- SERVER_NOTICE(_("You was kicked from guild."));
- delete guildTab;
- guildTab = 0;
-
- if (socialWindow && taGuild)
- socialWindow->removeTab(taGuild);
- if (actorSpriteManager)
- actorSpriteManager->updatePlayerColors();
- }
- else
- {
- if (guildTab)
- {
- guildTab->chatLog(strprintf(
- _("%s has kicked from your guild."),
- nick.c_str()), BY_SERVER);
- }
-
- if (actorSpriteManager)
- {
- Being *b = actorSpriteManager->findBeingByName(
- nick, Being::PLAYER);
-
- if (b)
- b->clearGuilds();
- if (taGuild)
- taGuild->removeMember(nick);
- }
- }
+ processGuildExpulsion(msg);
break;
- }
case SMSG_GUILD_EXPULSION_LIST:
- {
- int length = msg.readInt16();
- int count = (length - 4) / 88;
-
- for (int i = 0; i < count; i++)
- {
- msg.readString(24); // Name (of expulsed?)
- msg.readString(24); // 'Acc' (name of expulser?)
- msg.readString(24); // Message
- }
- }
- break;
+ processGuildExpulsionList(msg);
+ break;
case SMSG_GUILD_MESSAGE:
- {
- int msgLength = msg.readInt16() - 4;
-
- if (msgLength <= 0)
- return;
- if (guildTab)
- {
- std::string chatMsg = msg.readString(msgLength);
-
- std::string::size_type pos = chatMsg.find(" : ", 0);
- if (pos != std::string::npos)
- {
- std::string sender_name = ((pos == std::string::npos)
- ? "" : chatMsg.substr(0, pos));
-
- chatMsg.erase(0, pos + 3);
-
- trim(chatMsg);
- guildTab->chatLog(sender_name, chatMsg);
- }
- else
- {
- guildTab->chatLog(chatMsg);
- }
- }
- }
- break;
+ processGuildMessage(msg);
+ break;
case SMSG_GUILD_SKILL_UP:
- msg.readInt16(); // Skill ID
- msg.readInt16(); // Level
- msg.readInt16(); // SP
- msg.readInt16(); // 'Range'
- msg.readInt8(); // unused? (always 1)
+ processGuildSkillUp(msg);
break;
case SMSG_GUILD_REQ_ALLIANCE:
- msg.readInt32(); // Account ID
- msg.readString(24); // Name
+ processGuildReqAlliance(msg);
break;
case SMSG_GUILD_REQ_ALLIANCE_ACK:
- msg.readInt32(); // Flag
+ processGuildReqAllianceAck(msg);
break;
case SMSG_GUILD_DEL_ALLIANCE:
- msg.readInt32(); // Guild ID
- msg.readInt32(); // Flag
+ processGuildDelAlliance(msg);
break;
case SMSG_GUILD_OPPOSITION_ACK:
- msg.readInt8(); // Flag
+ processGuildOppositionAck(msg);
break;
case SMSG_GUILD_BROKEN:
- msg.readInt32(); // Flag
+ processGuildBroken(msg);
break;
default: