summaryrefslogtreecommitdiff
path: root/src/net/beinghandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/beinghandler.cpp')
-rw-r--r--src/net/beinghandler.cpp237
1 files changed, 130 insertions, 107 deletions
diff --git a/src/net/beinghandler.cpp b/src/net/beinghandler.cpp
index 549797f9..ed0fc4b2 100644
--- a/src/net/beinghandler.cpp
+++ b/src/net/beinghandler.cpp
@@ -41,24 +41,25 @@ const int EMOTION_TIME = 150; /**< Duration of emotion icon */
BeingHandler::BeingHandler()
{
static const Uint16 _messages[] = {
- SMSG_BEING_VISIBLE,
- SMSG_BEING_MOVE,
- SMSG_BEING_REMOVE,
- SMSG_BEING_ACTION,
- SMSG_BEING_LEVELUP,
- SMSG_BEING_EMOTION,
- SMSG_BEING_CHANGE_LOOKS,
- SMSG_BEING_NAME_RESPONSE,
- SMSG_PLAYER_UPDATE_1,
- SMSG_PLAYER_UPDATE_2,
- SMSG_PLAYER_MOVE,
- 0x0119,
+ //SMSG_BEING_VISIBLE,
+ //SMSG_BEING_MOVE,
+ //SMSG_BEING_REMOVE,
+ //SMSG_BEING_ACTION,
+ //SMSG_BEING_LEVELUP,
+ //SMSG_BEING_EMOTION,
+ //SMSG_BEING_CHANGE_LOOKS,
+ //SMSG_BEING_NAME_RESPONSE,
+ //SMSG_PLAYER_UPDATE_1,
+ //SMSG_PLAYER_UPDATE_2,
+ //SMSG_PLAYER_MOVE,
+ //0x0119,
+ GPMSG_BEING_ENTER,
0
};
handledMessages = _messages;
}
-void BeingHandler::handleMessage(MessageIn *msg)
+void BeingHandler::handleMessage(MessageIn &msg)
{
Uint32 id;
Uint16 job, speed;
@@ -66,17 +67,21 @@ void BeingHandler::handleMessage(MessageIn *msg)
Sint8 type;
Being *srcBeing, *dstBeing;
- switch (msg->getId())
+ switch (msg.getId())
{
+ case GPMSG_BEING_ENTER:
+ handleBeingEnterMessage(msg);
+ break;
+
case SMSG_BEING_VISIBLE:
case SMSG_BEING_MOVE:
// Information about a being in range
- id = msg->readLong();
- speed = msg->readShort();
- msg->readShort(); // unknown
- msg->readShort(); // unknown
- msg->readShort(); // option
- job = msg->readShort(); // class
+ id = msg.readLong();
+ speed = msg.readShort();
+ msg.readShort(); // unknown
+ msg.readShort(); // unknown
+ msg.readShort(); // option
+ job = msg.readShort(); // class
dstBeing = beingManager->findBeing(id);
@@ -91,7 +96,7 @@ void BeingHandler::handleMessage(MessageIn *msg)
dstBeing = beingManager->createBeing(id, job);
}
- else if (msg->getId() == 0x0078)
+ else if (msg.getId() == 0x0078)
{
dstBeing->clearPath();
dstBeing->mFrame = 0;
@@ -104,33 +109,33 @@ void BeingHandler::handleMessage(MessageIn *msg)
dstBeing->setWalkSpeed(speed);
dstBeing->mJob = job;
- dstBeing->setHairStyle(msg->readShort());
- dstBeing->setWeapon(msg->readShort());
- dstBeing->setVisibleEquipment(3, msg->readShort()); // head bottom
+ dstBeing->setHairStyle(msg.readShort());
+ dstBeing->setWeapon(msg.readShort());
+ dstBeing->setVisibleEquipment(3, msg.readShort()); // head bottom
- if (msg->getId() == SMSG_BEING_MOVE)
+ if (msg.getId() == SMSG_BEING_MOVE)
{
- msg->readLong(); // server tick
+ msg.readLong(); // server tick
}
- msg->readShort(); // shield
- dstBeing->setVisibleEquipment(4, msg->readShort()); // head top
- dstBeing->setVisibleEquipment(5, msg->readShort()); // head mid
- dstBeing->setHairColor(msg->readShort());
- msg->readShort(); // unknown
- msg->readShort(); // head dir
- msg->readShort(); // guild
- msg->readShort(); // unknown
- msg->readShort(); // unknown
- msg->readShort(); // manner
- msg->readShort(); // karma
- msg->readByte(); // unknown
- dstBeing->setSex(1 - msg->readByte()); // sex
-
- if (msg->getId() == SMSG_BEING_MOVE)
+ msg.readShort(); // shield
+ dstBeing->setVisibleEquipment(4, msg.readShort()); // head top
+ dstBeing->setVisibleEquipment(5, msg.readShort()); // head mid
+ dstBeing->setHairColor(msg.readShort());
+ msg.readShort(); // unknown
+ msg.readShort(); // head dir
+ msg.readShort(); // guild
+ msg.readShort(); // unknown
+ msg.readShort(); // unknown
+ msg.readShort(); // manner
+ msg.readShort(); // karma
+ msg.readByte(); // unknown
+ dstBeing->setSex(1 - msg.readByte()); // sex
+
+ if (msg.getId() == SMSG_BEING_MOVE)
{
//Uint16 srcX, srcY, dstX, dstY;
- //msg->readCoordinatePair(srcX, srcY, dstX, dstY);
+ //msg.readCoordinatePair(srcX, srcY, dstX, dstY);
//dstBeing->setAction(Being::STAND);
//dstBeing->mX = srcX;
//dstBeing->mY = srcY;
@@ -138,22 +143,22 @@ void BeingHandler::handleMessage(MessageIn *msg)
}
else
{
- //msg->readCoordinates(dstBeing->mX, dstBeing->mY, dstBeing->mDirection);
+ //msg.readCoordinates(dstBeing->mX, dstBeing->mY, dstBeing->mDirection);
}
- msg->readByte(); // unknown
- msg->readByte(); // unknown
- msg->readByte(); // unknown / sit
+ msg.readByte(); // unknown
+ msg.readByte(); // unknown
+ msg.readByte(); // unknown / sit
break;
case SMSG_BEING_REMOVE:
// A being should be removed or has died
- dstBeing = beingManager->findBeing(msg->readLong());
+ dstBeing = beingManager->findBeing(msg.readLong());
if (!dstBeing)
break;
- if (msg->readByte() == 1)
+ if (msg.readByte() == 1)
{
// Death
switch (dstBeing->getType())
@@ -181,15 +186,15 @@ void BeingHandler::handleMessage(MessageIn *msg)
break;
case SMSG_BEING_ACTION:
- srcBeing = beingManager->findBeing(msg->readLong());
- dstBeing = beingManager->findBeing(msg->readLong());
- msg->readLong(); // server tick
- msg->readLong(); // src speed
- msg->readLong(); // dst speed
- param1 = msg->readShort();
- msg->readShort(); // param 2
- type = msg->readByte();
- msg->readShort(); // param 3
+ srcBeing = beingManager->findBeing(msg.readLong());
+ dstBeing = beingManager->findBeing(msg.readLong());
+ msg.readLong(); // server tick
+ msg.readLong(); // src speed
+ msg.readLong(); // dst speed
+ param1 = msg.readShort();
+ msg.readShort(); // param 2
+ type = msg.readByte();
+ msg.readShort(); // param 3
switch (type)
{
@@ -230,63 +235,63 @@ void BeingHandler::handleMessage(MessageIn *msg)
break;
case SMSG_BEING_LEVELUP:
- if ((Uint32)msg->readLong() == player_node->getId()) {
+ if ((Uint32) msg.readLong() == player_node->getId()) {
logger->log("Level up");
sound.playSfx("sfx/levelup.ogg");
} else {
logger->log("Someone else went level up");
}
- msg->readLong(); // type
+ msg.readLong(); // type
break;
case SMSG_BEING_EMOTION:
- if (!(dstBeing = beingManager->findBeing(msg->readLong())))
+ if (!(dstBeing = beingManager->findBeing(msg.readLong())))
{
break;
}
- dstBeing->mEmotion = msg->readByte();
+ dstBeing->mEmotion = msg.readByte();
dstBeing->mEmotionTime = EMOTION_TIME;
break;
case SMSG_BEING_CHANGE_LOOKS:
{
- if (!(dstBeing = beingManager->findBeing(msg->readLong())))
+ if (!(dstBeing = beingManager->findBeing(msg.readLong())))
{
break;
}
- int type = msg->readByte();
+ int type = msg.readByte();
switch (type) {
case 1:
- dstBeing->setHairStyle(msg->readByte());
+ dstBeing->setHairStyle(msg.readByte());
break;
case 2:
- dstBeing->setWeapon(msg->readByte());
+ dstBeing->setWeapon(msg.readByte());
break;
case 3:
case 4:
case 5:
// Equip/unequip head 3. Bottom 4. Top 5. Middle
- dstBeing->setVisibleEquipment(type, msg->readByte());
+ dstBeing->setVisibleEquipment(type, msg.readByte());
// First 3 slots of mVisibleEquipments are reserved for
// later use, probably accessories.
break;
case 6:
- dstBeing->setHairColor(msg->readByte());
+ dstBeing->setHairColor(msg.readByte());
break;
default:
- printf("c3: %i\n", msg->readByte()); // unsupported
+ printf("c3: %i\n", msg.readByte()); // unsupported
break;
}
}
break;
case SMSG_BEING_NAME_RESPONSE:
- if ((dstBeing = beingManager->findBeing(msg->readLong())))
+ if ((dstBeing = beingManager->findBeing(msg.readLong())))
{
- dstBeing->setName(msg->readString(24));
+ dstBeing->setName(msg.readString(24));
}
break;
@@ -294,12 +299,12 @@ void BeingHandler::handleMessage(MessageIn *msg)
case SMSG_PLAYER_UPDATE_2:
case SMSG_PLAYER_MOVE:
// An update about a player, potentially including movement.
- id = msg->readLong();
- speed = msg->readShort();
- msg->readShort(); // option 1
- msg->readShort(); // option 2
- msg->readShort(); // option
- job = msg->readShort();
+ id = msg.readLong();
+ speed = msg.readShort();
+ msg.readShort(); // option 1
+ msg.readShort(); // option 2
+ msg.readShort(); // option
+ job = msg.readShort();
dstBeing = beingManager->findBeing(id);
@@ -310,57 +315,57 @@ void BeingHandler::handleMessage(MessageIn *msg)
dstBeing->setWalkSpeed(speed);
dstBeing->mJob = job;
- dstBeing->setHairStyle(msg->readShort());
- dstBeing->setWeaponById(msg->readShort()); // item id 1
- msg->readShort(); // item id 2
- dstBeing->setVisibleEquipment(3, msg->readShort()); // head bottom
+ dstBeing->setHairStyle(msg.readShort());
+ dstBeing->setWeaponById(msg.readShort()); // item id 1
+ msg.readShort(); // item id 2
+ dstBeing->setVisibleEquipment(3, msg.readShort()); // head bottom
- if (msg->getId() == SMSG_PLAYER_MOVE)
+ if (msg.getId() == SMSG_PLAYER_MOVE)
{
- msg->readLong(); // server tick
+ msg.readLong(); // server tick
}
- dstBeing->setVisibleEquipment(4, msg->readShort()); // head top
- dstBeing->setVisibleEquipment(5, msg->readShort()); // head mid
- dstBeing->setHairColor(msg->readShort());
- msg->readShort(); // unknown
- msg->readShort(); // head dir
- msg->readLong(); // guild
- msg->readLong(); // emblem
- msg->readShort(); // manner
- msg->readByte(); // karma
- dstBeing->setSex(1 - msg->readByte()); // sex
-
- if (msg->getId() == SMSG_PLAYER_MOVE)
+ dstBeing->setVisibleEquipment(4, msg.readShort()); // head top
+ dstBeing->setVisibleEquipment(5, msg.readShort()); // head mid
+ dstBeing->setHairColor(msg.readShort());
+ msg.readShort(); // unknown
+ msg.readShort(); // head dir
+ msg.readLong(); // guild
+ msg.readLong(); // emblem
+ msg.readShort(); // manner
+ msg.readByte(); // karma
+ dstBeing->setSex(1 - msg.readByte()); // sex
+
+ if (msg.getId() == SMSG_PLAYER_MOVE)
{
//Uint16 srcX, srcY, dstX, dstY;
- //msg->readCoordinatePair(srcX, srcY, dstX, dstY);
+ //msg.readCoordinatePair(srcX, srcY, dstX, dstY);
//dstBeing->mX = srcX;
//dstBeing->mY = srcY;
//dstBeing->setDestination(dstX, dstY);
}
else
{
- //msg->readCoordinates(dstBeing->mX, dstBeing->mY, dstBeing->mDirection);
+ //msg.readCoordinates(dstBeing->mX, dstBeing->mY, dstBeing->mDirection);
}
- msg->readByte(); // unknown
- msg->readByte(); // unknown
+ msg.readByte(); // unknown
+ msg.readByte(); // unknown
- if (msg->getId() == SMSG_PLAYER_UPDATE_1)
+ if (msg.getId() == SMSG_PLAYER_UPDATE_1)
{
- if (msg->readByte() == 2)
+ if (msg.readByte() == 2)
{
dstBeing->setAction(Being::SIT);
}
}
- else if (msg->getId() == SMSG_PLAYER_MOVE)
+ else if (msg.getId() == SMSG_PLAYER_MOVE)
{
- msg->readByte(); // unknown
+ msg.readByte(); // unknown
}
- msg->readByte(); // Lv
- msg->readByte(); // unknown
+ msg.readByte(); // Lv
+ msg.readByte(); // unknown
dstBeing->mWalkTime = tick_time;
dstBeing->mFrame = 0;
@@ -368,9 +373,27 @@ void BeingHandler::handleMessage(MessageIn *msg)
case 0x0119:
// Change in players look
- printf("0x0119 %li %i %i %x %i\n", msg->readLong(),
- msg->readShort(), msg->readShort(), msg->readShort(),
- msg->readByte());
+ printf("0x0119 %li %i %i %x %i\n", msg.readLong(),
+ msg.readShort(), msg.readShort(), msg.readShort(),
+ msg.readByte());
break;
}
}
+
+void
+BeingHandler::handleBeingEnterMessage(MessageIn &msg)
+{
+ // Not sure what do to exactly with this message yet.
+ /*
+ unsigned char type = msg.readByte();
+ unsigned long id = msg.readLong();
+
+ if (type == OBJECT_PLAYER)
+ {
+ std::string name = msg.readString();
+ unsigned char hairStyle = msg.readByte();
+ unsigned char hairColor = msg.readByte();
+ unsigned char gender = msg.readByte();
+ }
+ */
+}