Skip to content

Commit a8e4967

Browse files
committed
Fix 0.7 messages being recorded to server demos
Always repack messages as 0.6 before recording them to server demos, as server demos should only contain 0.6 messages. This previously caused error messages to be logged when playing server demos that contained messages sent to 0.7 players. For example, passing the first checkpoint in the Tutorial map causes `protocol7::CNetMsg_Sv_Checkpoint` to be sent, which is an invalid message in 0.6 demos. Note that messages to individual clients are now also recorded to demos independent from the result of calling `CAntibot::OnEngineServerMessage`, which is consistent with the behavior when sending messages to all clients with client ID `-1`.
1 parent 0656f20 commit a8e4967

File tree

1 file changed

+25
-20
lines changed

1 file changed

+25
-20
lines changed

src/engine/server/server.cpp

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -945,32 +945,37 @@ int CServer::SendMsg(CMsgPacker *pMsg, int Flags, int ClientId)
945945
}
946946
else
947947
{
948-
CPacker Pack;
949-
if(!RepackMsg(pMsg, Pack, m_aClients[ClientId].m_Sixup))
950-
return -1;
951-
952-
Packet.m_ClientId = ClientId;
953-
Packet.m_pData = Pack.Data();
954-
Packet.m_DataSize = Pack.Size();
955-
956-
if(Antibot()->OnEngineServerMessage(ClientId, Packet.m_pData, Packet.m_DataSize, Flags))
957-
{
958-
return 0;
959-
}
960-
961948
// write message to demo recorders
962-
if(!(Flags & MSGFLAG_NORECORD))
949+
if(!(Flags & MSGFLAG_NORECORD) &&
950+
(m_aDemoRecorder[ClientId].IsRecording() || m_aDemoRecorder[RECORDER_MANUAL].IsRecording() || m_aDemoRecorder[RECORDER_AUTO].IsRecording()))
963951
{
964-
if(m_aDemoRecorder[ClientId].IsRecording())
965-
m_aDemoRecorder[ClientId].RecordMessage(Pack.Data(), Pack.Size());
966-
if(m_aDemoRecorder[RECORDER_MANUAL].IsRecording())
967-
m_aDemoRecorder[RECORDER_MANUAL].RecordMessage(Pack.Data(), Pack.Size());
968-
if(m_aDemoRecorder[RECORDER_AUTO].IsRecording())
969-
m_aDemoRecorder[RECORDER_AUTO].RecordMessage(Pack.Data(), Pack.Size());
952+
CPacker Pack6;
953+
if(RepackMsg(pMsg, Pack6, false)) // server only records 0.6 messages to demos
954+
{
955+
if(m_aDemoRecorder[ClientId].IsRecording())
956+
m_aDemoRecorder[ClientId].RecordMessage(Pack6.Data(), Pack6.Size());
957+
if(m_aDemoRecorder[RECORDER_MANUAL].IsRecording())
958+
m_aDemoRecorder[RECORDER_MANUAL].RecordMessage(Pack6.Data(), Pack6.Size());
959+
if(m_aDemoRecorder[RECORDER_AUTO].IsRecording())
960+
m_aDemoRecorder[RECORDER_AUTO].RecordMessage(Pack6.Data(), Pack6.Size());
961+
}
970962
}
971963

972964
if(!(Flags & MSGFLAG_NOSEND))
965+
{
966+
CPacker Pack;
967+
if(!RepackMsg(pMsg, Pack, m_aClients[ClientId].m_Sixup))
968+
return -1;
969+
970+
Packet.m_ClientId = ClientId;
971+
Packet.m_pData = Pack.Data();
972+
Packet.m_DataSize = Pack.Size();
973+
if(Antibot()->OnEngineServerMessage(ClientId, Packet.m_pData, Packet.m_DataSize, Flags))
974+
{
975+
return 0;
976+
}
973977
m_NetServer.Send(&Packet);
978+
}
974979
}
975980

976981
return 0;

0 commit comments

Comments
 (0)