summaryrefslogtreecommitdiff
path: root/src/net/ea/beinghandler.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-03-21 19:20:13 +0300
committerAndrei Karas <akaras@inbox.ru>2015-03-21 19:20:13 +0300
commitf047361a2306705b85ee6074c7d47434d80fa4d3 (patch)
tree208c4972b8da2217a006759fae9d847bc0c42356 /src/net/ea/beinghandler.cpp
parentb55dc94736c2402df4e2376fd5e49966eddd6694 (diff)
downloadmv-f047361a2306705b85ee6074c7d47434d80fa4d3.tar.gz
mv-f047361a2306705b85ee6074c7d47434d80fa4d3.tar.bz2
mv-f047361a2306705b85ee6074c7d47434d80fa4d3.tar.xz
mv-f047361a2306705b85ee6074c7d47434d80fa4d3.zip
Revert "Move processBeingAction from ea namespace into tmwa."
This reverts commit 4688d64d9881d296193b03d3dd6f5a7305bbf3a7.
Diffstat (limited to 'src/net/ea/beinghandler.cpp')
-rw-r--r--src/net/ea/beinghandler.cpp91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/net/ea/beinghandler.cpp b/src/net/ea/beinghandler.cpp
index 58e7c334c..54f13472e 100644
--- a/src/net/ea/beinghandler.cpp
+++ b/src/net/ea/beinghandler.cpp
@@ -166,6 +166,97 @@ void BeingHandler::processSkillDamage(Net::MessageIn &msg)
BLOCK_END("BeingHandler::processSkillDamage")
}
+void BeingHandler::processBeingAction(Net::MessageIn &msg)
+{
+ BLOCK_START("BeingHandler::processBeingAction")
+ if (!actorManager)
+ {
+ BLOCK_END("BeingHandler::processBeingAction")
+ return;
+ }
+
+ Being *const srcBeing = actorManager->findBeing(
+ msg.readInt32("src being id"));
+ Being *const dstBeing = actorManager->findBeing(
+ msg.readInt32("dst being id"));
+
+ msg.readInt32("tick");
+ const int srcSpeed = msg.readInt32("src speed");
+ msg.readInt32("dst speed");
+ const int param1 = msg.readInt16("param1");
+ msg.readInt16("param 2");
+ const uint8_t type = msg.readUInt8("type");
+ msg.readInt16("param 3");
+
+ switch (type)
+ {
+ case AttackType::HIT: // Damage
+ case AttackType::CRITICAL: // Critical Damage
+ case AttackType::MULTI: // Critical Damage
+ case AttackType::REFLECT: // Reflected Damage
+ case AttackType::FLEE: // Lucky Dodge
+ if (srcBeing)
+ {
+ if (srcSpeed && srcBeing->getType() == ActorType::Player)
+ srcBeing->setAttackDelay(srcSpeed);
+ // attackid=1, type
+ srcBeing->handleAttack(dstBeing, param1, 1);
+ if (srcBeing->getType() == ActorType::Player)
+ srcBeing->setAttackTime();
+ }
+ if (dstBeing)
+ {
+ dstBeing->takeDamage(srcBeing, param1,
+ static_cast<AttackType::Type>(type));
+ }
+ break;
+
+ case 0x01: // dead or pickup?
+ break;
+ // tmw server can send here garbage?
+// if (srcBeing)
+// srcBeing->setAction(BeingAction::DEAD, 0);
+
+ case 0x02: // Sit
+ if (srcBeing)
+ {
+ srcBeing->setAction(BeingAction::SIT, 0);
+ if (srcBeing->getType() == ActorType::Player)
+ {
+ srcBeing->setMoveTime();
+ if (localPlayer)
+ localPlayer->imitateAction(srcBeing, BeingAction::SIT);
+ }
+ }
+ break;
+
+ case 0x03: // Stand up
+ if (srcBeing)
+ {
+ srcBeing->setAction(BeingAction::STAND, 0);
+ if (srcBeing->getType() == ActorType::Player)
+ {
+ srcBeing->setMoveTime();
+ if (localPlayer)
+ {
+ localPlayer->imitateAction(srcBeing,
+ BeingAction::STAND);
+ }
+ }
+ }
+ break;
+ default:
+ logger->log("QQQ1 SMSG_BEING_ACTION:");
+ if (srcBeing)
+ logger->log("srcBeing:" + toString(srcBeing->getId()));
+ if (dstBeing)
+ logger->log("dstBeing:" + toString(dstBeing->getId()));
+ logger->log("type: " + toString(type));
+ break;
+ }
+ BLOCK_END("BeingHandler::processBeingAction")
+}
+
void BeingHandler::processBeingEmotion(Net::MessageIn &msg)
{
BLOCK_START("BeingHandler::processBeingEmotion")