summaryrefslogtreecommitdiff
path: root/src/net/tmwa/partyhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/tmwa/partyhandler.cpp')
-rw-r--r--src/net/tmwa/partyhandler.cpp414
1 files changed, 20 insertions, 394 deletions
diff --git a/src/net/tmwa/partyhandler.cpp b/src/net/tmwa/partyhandler.cpp
index 1526100f6..5bbf8baf3 100644
--- a/src/net/tmwa/partyhandler.cpp
+++ b/src/net/tmwa/partyhandler.cpp
@@ -21,36 +21,26 @@
#include "net/tmwa/partyhandler.h"
#include "actorspritemanager.h"
-#include "event.h"
#include "localplayer.h"
#include "log.h"
-#include "gui/socialwindow.h"
-
#include "net/messagein.h"
-#include "net/messageout.h"
#include "net/tmwa/protocol.h"
#include "net/tmwa/gui/partytab.h"
#include "utils/gettext.h"
-#include "utils/stringutils.h"
#include "debug.h"
-#define PARTY_ID 1
-
extern Net::PartyHandler *partyHandler;
namespace TmwAthena
{
-PartyTab *partyTab = 0;
-Party *taParty;
-
-PartyHandler::PartyHandler():
- mShareExp(PARTY_SHARE_UNKNOWN), mShareItems(PARTY_SHARE_UNKNOWN)
+PartyHandler::PartyHandler() :
+ Ea::PartyHandler()
{
static const Uint16 _messages[] =
{
@@ -68,13 +58,10 @@ PartyHandler::PartyHandler():
};
handledMessages = _messages;
partyHandler = this;
- taParty = Party::getParty(1);
}
PartyHandler::~PartyHandler()
{
- delete partyTab;
- partyTab = 0;
}
void PartyHandler::handleMessage(Net::MessageIn &msg)
@@ -82,374 +69,34 @@ void PartyHandler::handleMessage(Net::MessageIn &msg)
switch (msg.getId())
{
case SMSG_PARTY_CREATE:
- if (msg.readInt8())
- SERVER_NOTICE(_("Could not create party."))
- else
- SERVER_NOTICE(_("Party successfully created."))
+ processPartyCreate(msg);
break;
case SMSG_PARTY_INFO:
- {
- bool oldParty = false;
- std::set<std::string> names;
- if (!taParty)
- {
- logger->log1("error: party empty in SMSG_PARTY_INFO");
- taParty = Party::getParty(1);
- }
- if (taParty)
- {
- if (taParty->getNumberOfElements() > 1)
- {
- oldParty = true;
-
- taParty->getNamesSet(names);
- }
- }
-
- if (!player_node)
- logger->log1("error: player_node==0 in SMSG_PARTY_INFO");
-
- if (taParty)
- taParty->clearMembers();
-
- int length = msg.readInt16();
- if (taParty)
- taParty->setName(msg.readString(24));
-
- int count = (length - 28) / 46;
- if (player_node && taParty)
- {
- player_node->setParty(taParty);
- player_node->setPartyName(taParty->getName());
- }
-
- for (int i = 0; i < count; i++)
- {
- int id = msg.readInt32();
- std::string nick = msg.readString(24);
- std::string map = msg.readString(16);
- bool leader = msg.readInt8() == 0;
- bool online = msg.readInt8() == 0;
-
- if (taParty)
- {
- PartyMember *member = 0;
- if (oldParty)
- {
- //member = taParty->getMember(id);
- if (partyTab && names.find(nick) == names.end())
- {
- partyTab->chatLog(strprintf(
- _("%s has joined your party."),
- nick.c_str()), BY_SERVER);
- }
- }
- member = taParty->addMember(id, nick);
-
- if (member)
- {
- member->setLeader(leader);
- member->setOnline(online);
- member->setMap(map);
- }
- }
- }
-
- if (taParty)
- taParty->sort();
-
- if (player_node && taParty)
- {
- player_node->setParty(taParty);
- player_node->setPartyName(taParty->getName());
- }
- }
+ processPartyInfo(msg);
break;
case SMSG_PARTY_INVITE_RESPONSE:
- {
- if (!partyTab)
- break;
-
- std::string nick = msg.readString(24);
-
- switch (msg.readInt8())
- {
- case 0:
- partyTab->chatLog(strprintf(
- _("%s is already a member of a party."),
- nick.c_str()), BY_SERVER);
- break;
- case 1:
- partyTab->chatLog(strprintf(
- _("%s refused your invitation."),
- nick.c_str()), BY_SERVER);
- break;
- case 2:
- partyTab->chatLog(strprintf(
- _("%s is now a member of your party."),
- nick.c_str()), BY_SERVER);
- break;
- case 3:
- partyTab->chatLog(strprintf(
- _("%s can't join your party because party is "
- "full."), nick.c_str()), BY_SERVER);
- break;
- default:
- partyTab->chatLog(strprintf(
- _("QQQ Unknown invite response for %s."),
- nick.c_str()), BY_SERVER);
- break;
- }
- break;
- }
+ processPartyInviteResponse(msg);
+ break;
case SMSG_PARTY_INVITED:
- {
- int id = msg.readInt32();
- std::string partyName = msg.readString(24);
- std::string nick = "";
- Being *being;
-
- if (actorSpriteManager)
- {
- if ((being = actorSpriteManager->findBeing(id)))
- {
- if (being && being->getType() == Being::PLAYER)
- nick = being->getName();
- }
- }
-
- if (socialWindow)
- socialWindow->showPartyInvite(partyName, nick);
- break;
- }
+ processPartyInvited(msg);
+ break;
case SMSG_PARTY_SETTINGS:
- {
- if (!partyTab)
- {
- if (!chatWindow)
- break;
-
- partyTab = new PartyTab();
- }
-
- // These seem to indicate the sharing mode for exp and items
- short exp = msg.readInt16();
- short item = msg.readInt16();
-
- if (!partyTab)
- break;
-
- switch (exp)
- {
- case PARTY_SHARE:
- if (mShareExp == PARTY_SHARE)
- break;
- mShareExp = PARTY_SHARE;
- if (partyTab)
- {
- partyTab->chatLog(
- _("Experience sharing enabled."), BY_SERVER);
- }
- break;
- case PARTY_SHARE_NO:
- if (mShareExp == PARTY_SHARE_NO)
- break;
- mShareExp = PARTY_SHARE_NO;
- if (partyTab)
- {
- partyTab->chatLog(
- _("Experience sharing disabled."), BY_SERVER);
- }
- break;
- case PARTY_SHARE_NOT_POSSIBLE:
- if (mShareExp == PARTY_SHARE_NOT_POSSIBLE)
- break;
- mShareExp = PARTY_SHARE_NOT_POSSIBLE;
- if (partyTab)
- {
- partyTab->chatLog(
- _("Experience sharing not possible."),
- BY_SERVER);
- }
- break;
- default:
- logger->log("QQQ Unknown party exp option: %d\n", exp);
- break;
- }
-
- switch (item)
- {
- case PARTY_SHARE:
- if (mShareItems == PARTY_SHARE)
- break;
- mShareItems = PARTY_SHARE;
- if (partyTab)
- {
- partyTab->chatLog(
- _("Item sharing enabled."), BY_SERVER);
- }
- break;
- case PARTY_SHARE_NO:
- if (mShareItems == PARTY_SHARE_NO)
- break;
- mShareItems = PARTY_SHARE_NO;
- if (partyTab)
- {
- partyTab->chatLog(
- _("Item sharing disabled."), BY_SERVER);
- }
- break;
- case PARTY_SHARE_NOT_POSSIBLE:
- if (mShareItems == PARTY_SHARE_NOT_POSSIBLE)
- break;
- mShareItems = PARTY_SHARE_NOT_POSSIBLE;
- if (partyTab)
- {
- partyTab->chatLog(
- _("Item sharing not possible."), BY_SERVER);
- }
- break;
- default:
- logger->log("QQQ Unknown party item option: %d\n",
- exp);
- break;
- }
- break;
- }
+ processPartySettings(msg);
+ break;
case SMSG_PARTY_MOVE:
- {
- int id = msg.readInt32(); // id
- PartyMember *m = 0;
- if (taParty)
- m = taParty->getMember(id);
- if (m)
- {
- msg.skip(4);
- m->setX(msg.readInt16()); // x
- m->setY(msg.readInt16()); // y
- m->setOnline(msg.readInt8()); // online (if 0)
- msg.readString(24); // party
- msg.readString(24); // nick
- m->setMap(msg.readString(16)); // map
- }
- else
- {
- msg.skip(4);
- msg.readInt16(); // x
- msg.readInt16(); // y
- msg.readInt8(); // online (if 0)
- msg.readString(24); // party
- msg.readString(24); // nick
- msg.readString(16); // map
- }
- }
+ processPartyMove(msg);
break;
case SMSG_PARTY_LEAVE:
- {
- int id = msg.readInt32();
- std::string nick = msg.readString(24);
- msg.readInt8(); // fail
- if (player_node && id == player_node->getId())
- {
- if (taParty)
- {
- taParty->removeFromMembers();
- taParty->clearMembers();
- }
- SERVER_NOTICE(_("You have left the party."))
- delete partyTab;
- partyTab = 0;
-
- if (socialWindow && taParty)
- socialWindow->removeTab(taParty);
- }
- else
- {
- if (partyTab)
- {
- partyTab->chatLog(strprintf(
- _("%s has left your party."),
- nick.c_str()), BY_SERVER);
- }
- if (actorSpriteManager)
- {
- Being *b = actorSpriteManager->findBeing(id);
- if (b && b->getType() == Being::PLAYER)
- b->setParty(0);
- }
- if (taParty)
- taParty->removeMember(id);
- }
- break;
- }
+ processPartyLeave(msg);
+ break;
case SMSG_PARTY_UPDATE_HP:
- {
- int id = msg.readInt32();
- int hp = msg.readInt16();
- int maxhp = msg.readInt16();
- PartyMember *m = 0;
- if (taParty)
- m = taParty->getMember(id);
- if (m)
- {
- m->setHp(hp);
- m->setMaxHp(maxhp);
- }
-
- // The server only sends this when the member is in range, so
- // lets make sure they get the party hilight.
- if (actorSpriteManager && taParty)
- {
- if (Being *b = actorSpriteManager->findBeing(id))
- b->setParty(taParty);
- }
- }
+ processPartyUpdateHp(msg);
break;
case SMSG_PARTY_UPDATE_COORDS:
- {
- int id = msg.readInt32(); // id
- PartyMember *m = 0;
- if (taParty)
- m = taParty->getMember(id);
- if (m)
- {
- m->setX(msg.readInt16()); // x
- m->setY(msg.readInt16()); // y
- }
- else
- {
- msg.readInt16(); // x
- msg.readInt16(); // y
- }
- }
+ processPartyUpdateCoords(msg);
break;
case SMSG_PARTY_MESSAGE:
- {
- int msgLength = msg.readInt16() - 8;
- if (msgLength <= 0)
- return;
-
- int id = msg.readInt32();
- std::string chatMsg = msg.readString(msgLength);
-
- if (taParty)
- {
- PartyMember *member = taParty->getMember(id);
- if (partyTab)
- {
- if (member)
- {
- partyTab->chatLog(member->getName(), chatMsg);
- }
- else
- {
- partyTab->chatLog(strprintf(
- _("An unknown member tried to say: %s"),
- chatMsg.c_str()), BY_SERVER);
- }
- }
- }
- }
+ processPartyMessage(msg);
break;
default:
@@ -463,11 +110,6 @@ void PartyHandler::create(const std::string &name)
outMsg.writeString(name.substr(0, 23), 24);
}
-void PartyHandler::join(int partyId A_UNUSED)
-{
- // TODO?
-}
-
void PartyHandler::invite(Being *being)
{
if (being)
@@ -518,15 +160,15 @@ void PartyHandler::kick(Being *being)
void PartyHandler::kick(const std::string &name)
{
- if (!taParty)
+ if (!Ea::taParty)
return;
- PartyMember *m = taParty->getMember(name);
+ PartyMember *m = Ea::taParty->getMember(name);
if (!m)
{
- if (partyTab)
+ if (Ea::partyTab)
{
- partyTab->chatLog(strprintf(_("%s is not in your party!"),
+ Ea::partyTab->chatLog(strprintf(_("%s is not in your party!"),
name.c_str()), BY_SERVER);
}
return;
@@ -544,12 +186,6 @@ void PartyHandler::chat(const std::string &text)
outMsg.writeString(text, static_cast<int>(text.length()));
}
-void PartyHandler::requestPartyMembers() const
-{
- // Our eAthena doesn't have this message
- // Not needed anyways
-}
-
void PartyHandler::setShareExperience(PartyShare share)
{
if (share == PARTY_SHARE_NOT_POSSIBLE)
@@ -570,14 +206,4 @@ void PartyHandler::setShareItems(PartyShare share)
outMsg.writeInt16(share);
}
-void PartyHandler::reload()
-{
- taParty = Party::getParty(1);
-}
-
-void PartyHandler::clear()
-{
- taParty = 0;
-}
-
} // namespace TmwAthena