1
0

Fix sending incorrect date values on world change

Yak shave: make more things use cTickTime. Fix a couple of incorrect modulo-on-millisecond-value by making them use WorldTickAge.
This commit is contained in:
Tiger Wang
2021-04-05 01:38:43 +01:00
parent a2a2226179
commit 4cd49d7eca
37 changed files with 322 additions and 198 deletions

View File

@@ -1566,20 +1566,23 @@ void cProtocol_1_8_0::SendTitleTimes(int a_FadeInTicks, int a_DisplayTicks, int
void cProtocol_1_8_0::SendTimeUpdate(Int64 a_WorldAge, Int64 a_WorldDate, bool a_DoDaylightCycle)
void cProtocol_1_8_0::SendTimeUpdate(const cTickTimeLong a_WorldAge, const cTickTimeLong a_WorldDate, const bool a_DoDaylightCycle)
{
ASSERT(m_State == 3); // In game mode?
if (!a_DoDaylightCycle)
cPacketizer Pkt(*this, pktTimeUpdate);
Pkt.WriteBEInt64(a_WorldAge.count());
if (a_DoDaylightCycle)
{
Pkt.WriteBEInt64(a_WorldDate.count());
}
else
{
// Negating the date stops time from advancing on the client
// (the std::min construction is to handle the case where the date is exactly zero):
a_WorldDate = std::min(-a_WorldDate, -1LL);
Pkt.WriteBEInt64(std::min(-a_WorldDate.count(), -1LL));
}
cPacketizer Pkt(*this, pktTimeUpdate);
Pkt.WriteBEInt64(a_WorldAge);
Pkt.WriteBEInt64(a_WorldDate);
}