Skip to content

Commit 7b75f69

Browse files
authored
Improve players animation sync (PR #4326)
Continuation of pull request #3520
1 parent bb56667 commit 7b75f69

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

Client/mods/deathmatch/logic/CPacketHandler.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,6 +1000,38 @@ void CPacketHandler::Packet_PlayerList(NetBitStreamInterface& bitStream)
10001000
pPlayer->GiveWeapon(static_cast<eWeaponType>(weaponType.data.ucWeaponType), 1);
10011001
}
10021002
}
1003+
1004+
// Animation
1005+
if (bitStream.ReadBit())
1006+
{
1007+
std::string blockName, animName;
1008+
int time, blendTime;
1009+
bool looped, updatePosition, interruptable, freezeLastFrame, taskRestore;
1010+
float speed;
1011+
double startTime;
1012+
1013+
// Read data
1014+
bitStream.ReadString(blockName);
1015+
bitStream.ReadString(animName);
1016+
bitStream.Read(time);
1017+
bitStream.ReadBit(looped);
1018+
bitStream.ReadBit(updatePosition);
1019+
bitStream.ReadBit(interruptable);
1020+
bitStream.ReadBit(freezeLastFrame);
1021+
bitStream.Read(blendTime);
1022+
bitStream.ReadBit(taskRestore);
1023+
bitStream.Read(startTime);
1024+
bitStream.Read(speed);
1025+
1026+
// Run anim
1027+
CStaticFunctionDefinitions::SetPedAnimation(*pPlayer, blockName, animName.c_str(), time, blendTime, looped, updatePosition, interruptable,
1028+
freezeLastFrame);
1029+
pPlayer->m_AnimationCache.startTime = static_cast<std::int64_t>(startTime);
1030+
pPlayer->m_AnimationCache.speed = speed;
1031+
pPlayer->m_AnimationCache.progress = 0.0f;
1032+
1033+
pPlayer->SetHasSyncedAnim(true);
1034+
}
10031035
}
10041036

10051037
// Set move anim even if not spawned

Server/mods/deathmatch/logic/packets/CPlayerListPacket.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,25 @@ bool CPlayerListPacket::Write(NetBitStreamInterface& BitStream) const
218218
else
219219
BitStream.WriteBit(false);
220220
}
221+
222+
const SPlayerAnimData& animData = pPlayer->GetAnimationData();
223+
bool animRuning = animData.IsAnimating();
224+
225+
BitStream.WriteBit(animRuning);
226+
if (animRuning)
227+
{
228+
BitStream.WriteString(animData.blockName);
229+
BitStream.WriteString(animData.animName);
230+
BitStream.Write(animData.time);
231+
BitStream.WriteBit(animData.loop);
232+
BitStream.WriteBit(animData.updatePosition);
233+
BitStream.WriteBit(animData.interruptable);
234+
BitStream.WriteBit(animData.freezeLastFrame);
235+
BitStream.Write(animData.blendTime);
236+
BitStream.WriteBit(animData.taskToBeRestoredOnAnimEnd);
237+
BitStream.Write(static_cast<double>(animData.startTime));
238+
BitStream.Write(animData.speed);
239+
}
221240
}
222241
}
223242

0 commit comments

Comments
 (0)