diff options
Diffstat (limited to 'src/net/eathena')
-rw-r--r-- | src/net/eathena/beingrecv.cpp | 34 | ||||
-rw-r--r-- | src/net/eathena/beingrecv.h | 4 |
2 files changed, 37 insertions, 1 deletions
diff --git a/src/net/eathena/beingrecv.cpp b/src/net/eathena/beingrecv.cpp index f794b8091..690ae2552 100644 --- a/src/net/eathena/beingrecv.cpp +++ b/src/net/eathena/beingrecv.cpp @@ -363,7 +363,7 @@ void BeingRecv::processBeingVisible(Net::MessageIn &msg) msg.readCoordinates(x, y, dir, "position"); msg.readInt8("xs"); msg.readInt8("ys"); - msg.readUInt8("action type"); + applyPlayerAction(msg, dstBeing, msg.readUInt8("action type")); dstBeing->setTileCoords(x, y); if (job == 45 && socialWindow && outfitWindow) @@ -1680,4 +1680,36 @@ void BeingRecv::processSolveCharName(Net::MessageIn &msg) actorManager->addChar(id, name); } +void BeingRecv::applyPlayerAction(Net::MessageIn &msg, + Being *const being, + const uint8_t type) +{ + if (!being) + return; + switch (type) + { + case 0: + being->setAction(BeingAction::STAND, 0); + localPlayer->imitateAction(being, BeingAction::STAND); + break; + + case 1: + if (being->getCurrentAction() != BeingAction::DEAD) + { + being->setAction(BeingAction::DEAD, 0); + being->recalcSpritesOrder(); + } + break; + + case 2: + being->setAction(BeingAction::SIT, 0); + localPlayer->imitateAction(being, BeingAction::SIT); + break; + + default: + UNIMPLIMENTEDPACKET; + break; + } +} + } // namespace EAthena diff --git a/src/net/eathena/beingrecv.h b/src/net/eathena/beingrecv.h index ed51f1b4e..0c26d07b7 100644 --- a/src/net/eathena/beingrecv.h +++ b/src/net/eathena/beingrecv.h @@ -115,6 +115,10 @@ namespace EAthena const BeingId id, const int16_t job, const BeingType::BeingType beingType); + void applyPlayerAction(Net::MessageIn &msg, + Being *const being, + const uint8_t type); + } // namespace BeingRecv } // namespace EAthena |