diff --git a/Client/mods/deathmatch/logic/CPacketHandler.cpp b/Client/mods/deathmatch/logic/CPacketHandler.cpp index ab647acf24f..a23ed1cbeb8 100644 --- a/Client/mods/deathmatch/logic/CPacketHandler.cpp +++ b/Client/mods/deathmatch/logic/CPacketHandler.cpp @@ -1000,6 +1000,38 @@ void CPacketHandler::Packet_PlayerList(NetBitStreamInterface& bitStream) pPlayer->GiveWeapon(static_cast(weaponType.data.ucWeaponType), 1); } } + + // Animation + if (bitStream.ReadBit()) + { + std::string blockName, animName; + int time, blendTime; + bool looped, updatePosition, interruptable, freezeLastFrame, taskRestore; + float speed; + double startTime; + + // Read data + bitStream.ReadString(blockName); + bitStream.ReadString(animName); + bitStream.Read(time); + bitStream.ReadBit(looped); + bitStream.ReadBit(updatePosition); + bitStream.ReadBit(interruptable); + bitStream.ReadBit(freezeLastFrame); + bitStream.Read(blendTime); + bitStream.ReadBit(taskRestore); + bitStream.Read(startTime); + bitStream.Read(speed); + + // Run anim + CStaticFunctionDefinitions::SetPedAnimation(*pPlayer, blockName, animName.c_str(), time, blendTime, looped, updatePosition, interruptable, + freezeLastFrame); + pPlayer->m_AnimationCache.startTime = static_cast(startTime); + pPlayer->m_AnimationCache.speed = speed; + pPlayer->m_AnimationCache.progress = 0.0f; + + pPlayer->SetHasSyncedAnim(true); + } } // Set move anim even if not spawned diff --git a/Server/mods/deathmatch/logic/packets/CPlayerListPacket.cpp b/Server/mods/deathmatch/logic/packets/CPlayerListPacket.cpp index fdd3a387eb6..24d424a976b 100644 --- a/Server/mods/deathmatch/logic/packets/CPlayerListPacket.cpp +++ b/Server/mods/deathmatch/logic/packets/CPlayerListPacket.cpp @@ -218,6 +218,25 @@ bool CPlayerListPacket::Write(NetBitStreamInterface& BitStream) const else BitStream.WriteBit(false); } + + const SPlayerAnimData& animData = pPlayer->GetAnimationData(); + bool animRuning = animData.IsAnimating(); + + BitStream.WriteBit(animRuning); + if (animRuning) + { + BitStream.WriteString(animData.blockName); + BitStream.WriteString(animData.animName); + BitStream.Write(animData.time); + BitStream.WriteBit(animData.loop); + BitStream.WriteBit(animData.updatePosition); + BitStream.WriteBit(animData.interruptable); + BitStream.WriteBit(animData.freezeLastFrame); + BitStream.Write(animData.blendTime); + BitStream.WriteBit(animData.taskToBeRestoredOnAnimEnd); + BitStream.Write(static_cast(animData.startTime)); + BitStream.Write(animData.speed); + } } }