mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-16 18:19:55 +00:00
[General] Implement PlayerMomentum packet & associated script functions
This commit is contained in:
parent
273179fd5a
commit
099f85be0a
7 changed files with 58 additions and 3 deletions
|
@ -118,6 +118,16 @@ void PositionFunctions::SetRot(unsigned short pid, double x, double z) noexcept
|
|||
player->position.rot[2] = z;
|
||||
}
|
||||
|
||||
void PositionFunctions::SetMomentum(unsigned short pid, double x, double y, double z) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
player->momentum.pos[0] = x;
|
||||
player->momentum.pos[1] = y;
|
||||
player->momentum.pos[2] = z;
|
||||
}
|
||||
|
||||
void PositionFunctions::SendPos(unsigned short pid) noexcept
|
||||
{
|
||||
Player *player;
|
||||
|
@ -126,3 +136,12 @@ void PositionFunctions::SendPos(unsigned short pid) noexcept
|
|||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_POSITION)->setPlayer(player);
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_POSITION)->Send(false);
|
||||
}
|
||||
|
||||
void PositionFunctions::SendMomentum(unsigned short pid) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_MOMENTUM)->setPlayer(player);
|
||||
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_MOMENTUM)->Send(false);
|
||||
}
|
||||
|
|
|
@ -19,8 +19,10 @@
|
|||
\
|
||||
{"SetPos", PositionFunctions::SetPos},\
|
||||
{"SetRot", PositionFunctions::SetRot},\
|
||||
{"SetMomentum", PositionFunctions::SetMomentum},\
|
||||
\
|
||||
{"SendPos", PositionFunctions::SendPos}
|
||||
{"SendPos", PositionFunctions::SendPos},\
|
||||
{"SendMomentum", PositionFunctions::SendMomentum}
|
||||
|
||||
|
||||
class PositionFunctions
|
||||
|
@ -144,6 +146,20 @@ public:
|
|||
*/
|
||||
static void SetRot(unsigned short pid, double x, double z) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Set the momentum of a player.
|
||||
*
|
||||
* This changes the coordinates recorded for that player's momentum in the server memory, but
|
||||
* does not by itself send a packet.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \param x The X momentum.
|
||||
* \param y The Y momentum.
|
||||
* \param z The Z momentum.
|
||||
* \return void
|
||||
*/
|
||||
static void SetMomentum(unsigned short pid, double x, double y, double z) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Send a PlayerPosition packet about a player.
|
||||
*
|
||||
|
@ -153,6 +169,16 @@ public:
|
|||
* \return void
|
||||
*/
|
||||
static void SendPos(unsigned short pid) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Send a PlayerMomentum packet about a player.
|
||||
*
|
||||
* It is only sent to the affected player.
|
||||
*
|
||||
* \param pid The player ID.
|
||||
* \return void
|
||||
*/
|
||||
static void SendMomentum(unsigned short pid) noexcept;
|
||||
};
|
||||
|
||||
#endif //OPENMW_POSITIONAPI_HPP
|
||||
|
|
|
@ -1002,6 +1002,13 @@ void LocalPlayer::setPosition()
|
|||
updateAnimFlags(true);
|
||||
}
|
||||
|
||||
void LocalPlayer::setMomentum()
|
||||
{
|
||||
MWBase::World *world = MWBase::Environment::get().getWorld();
|
||||
MWWorld::Ptr ptrPlayer = world->getPlayerPtr();
|
||||
world->setInertialForce(ptrPlayer, momentum.asVec3());
|
||||
}
|
||||
|
||||
void LocalPlayer::setCell()
|
||||
{
|
||||
MWBase::World *world = MWBase::Environment::get().getWorld();
|
||||
|
|
|
@ -54,6 +54,7 @@ namespace mwmp
|
|||
void setBounty();
|
||||
void setReputation();
|
||||
void setPosition();
|
||||
void setMomentum();
|
||||
void setCell();
|
||||
void setClass();
|
||||
void setEquipment();
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace mwmp
|
|||
if (!isRequest())
|
||||
{
|
||||
LocalPlayer &localPlayer = static_cast<LocalPlayer&>(*player);
|
||||
//localPlayer.setMomentum();
|
||||
localPlayer.setMomentum();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -294,6 +294,7 @@ namespace mwmp
|
|||
ESM::Position position;
|
||||
ESM::Position direction;
|
||||
ESM::Position previousCellPosition;
|
||||
ESM::Position momentum;
|
||||
ESM::Cell cell;
|
||||
ESM::NPC npc;
|
||||
ESM::NpcStats npcStats;
|
||||
|
|
|
@ -12,5 +12,6 @@ PacketPlayerMomentum::PacketPlayerMomentum(RakNet::RakPeerInterface *peer) : Pla
|
|||
void PacketPlayerMomentum::Packet(RakNet::BitStream *bs, bool send)
|
||||
{
|
||||
PlayerPacket::Packet(bs, send);
|
||||
// Placeholder
|
||||
|
||||
RW(player->momentum.pos, send, 1);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue