Merge pull request #1296 from mc-server/LuaAPI
Added SetDoDaylightCycle() and IsDaylightCycleEnabled() to cWorld.
This commit is contained in:
commit
8f0c4911f7
@ -341,8 +341,8 @@ void cClientHandle::Authenticate(const AString & a_Name, const AString & a_UUID,
|
|||||||
m_Protocol->SendWeather(World->GetWeather());
|
m_Protocol->SendWeather(World->GetWeather());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send time
|
// Send time:
|
||||||
m_Protocol->SendTimeUpdate(World->GetWorldAge(), World->GetTimeOfDay());
|
m_Protocol->SendTimeUpdate(World->GetWorldAge(), World->GetTimeOfDay(), World->IsDaylightCycleEnabled());
|
||||||
|
|
||||||
// Send contents of the inventory window
|
// Send contents of the inventory window
|
||||||
m_Protocol->SendWholeInventory(*m_Player->GetWindow());
|
m_Protocol->SendWholeInventory(*m_Player->GetWindow());
|
||||||
@ -2589,9 +2589,9 @@ void cClientHandle::SendThunderbolt(int a_BlockX, int a_BlockY, int a_BlockZ)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cClientHandle::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay)
|
void cClientHandle::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle)
|
||||||
{
|
{
|
||||||
m_Protocol->SendTimeUpdate(a_WorldAge, a_TimeOfDay);
|
m_Protocol->SendTimeUpdate(a_WorldAge, a_TimeOfDay, a_DoDaylightCycle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ public:
|
|||||||
void SendTabCompletionResults(const AStringVector & a_Results);
|
void SendTabCompletionResults(const AStringVector & a_Results);
|
||||||
void SendTeleportEntity (const cEntity & a_Entity);
|
void SendTeleportEntity (const cEntity & a_Entity);
|
||||||
void SendThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ);
|
void SendThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ);
|
||||||
void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay);
|
void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle); // tolua_export
|
||||||
void SendUnloadChunk (int a_ChunkX, int a_ChunkZ);
|
void SendUnloadChunk (int a_ChunkX, int a_ChunkZ);
|
||||||
void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity);
|
void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity);
|
||||||
void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4);
|
void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4);
|
||||||
|
@ -116,7 +116,7 @@ public:
|
|||||||
virtual void SendTabCompletionResults(const AStringVector & a_Results) = 0;
|
virtual void SendTabCompletionResults(const AStringVector & a_Results) = 0;
|
||||||
virtual void SendTeleportEntity (const cEntity & a_Entity) = 0;
|
virtual void SendTeleportEntity (const cEntity & a_Entity) = 0;
|
||||||
virtual void SendThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ) = 0;
|
virtual void SendThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ) = 0;
|
||||||
virtual void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay) = 0;
|
virtual void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle) = 0;
|
||||||
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) = 0;
|
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) = 0;
|
||||||
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) = 0;
|
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) = 0;
|
||||||
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) = 0;
|
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) = 0;
|
||||||
|
@ -1072,8 +1072,11 @@ void cProtocol125::SendThunderbolt(int a_BlockX, int a_BlockY, int a_BlockZ)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cProtocol125::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay)
|
void cProtocol125::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle)
|
||||||
{
|
{
|
||||||
|
// This protocol doesn't support a_DoDaylightCycle on false.
|
||||||
|
UNUSED(a_DoDaylightCycle);
|
||||||
|
|
||||||
cCSLock Lock(m_CSPacket);
|
cCSLock Lock(m_CSPacket);
|
||||||
WriteByte (PACKET_UPDATE_TIME);
|
WriteByte (PACKET_UPDATE_TIME);
|
||||||
// Use a_WorldAge for daycount, and a_TimeOfDay for the proper time of day:
|
// Use a_WorldAge for daycount, and a_TimeOfDay for the proper time of day:
|
||||||
|
@ -88,7 +88,7 @@ public:
|
|||||||
virtual void SendTabCompletionResults(const AStringVector & a_Results) override;
|
virtual void SendTabCompletionResults(const AStringVector & a_Results) override;
|
||||||
virtual void SendTeleportEntity (const cEntity & a_Entity) override;
|
virtual void SendTeleportEntity (const cEntity & a_Entity) override;
|
||||||
virtual void SendThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
virtual void SendThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
||||||
virtual void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay) override;
|
virtual void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle) override;
|
||||||
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
||||||
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override {}
|
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override {}
|
||||||
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
||||||
|
@ -130,8 +130,14 @@ void cProtocol142::SendSoundParticleEffect(int a_EffectID, int a_SrcX, int a_Src
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cProtocol142::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay)
|
void cProtocol142::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle)
|
||||||
{
|
{
|
||||||
|
if (!a_DoDaylightCycle)
|
||||||
|
{
|
||||||
|
// When writing a "-" before the number the client ignores it but it will stop the client-side time expiration.
|
||||||
|
a_TimeOfDay = std::min(-a_TimeOfDay, -1LL);
|
||||||
|
}
|
||||||
|
|
||||||
cCSLock Lock(m_CSPacket);
|
cCSLock Lock(m_CSPacket);
|
||||||
WriteByte (PACKET_UPDATE_TIME);
|
WriteByte (PACKET_UPDATE_TIME);
|
||||||
WriteInt64(a_WorldAge);
|
WriteInt64(a_WorldAge);
|
||||||
|
@ -34,7 +34,7 @@ public:
|
|||||||
// Sending commands (alphabetically sorted):
|
// Sending commands (alphabetically sorted):
|
||||||
virtual void SendPickupSpawn (const cPickup & a_Pickup) override;
|
virtual void SendPickupSpawn (const cPickup & a_Pickup) override;
|
||||||
virtual void SendSoundParticleEffect(int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data) override;
|
virtual void SendSoundParticleEffect(int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data) override;
|
||||||
virtual void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay) override;
|
virtual void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle) override;
|
||||||
|
|
||||||
// Specific packet parsers:
|
// Specific packet parsers:
|
||||||
virtual int ParseLocaleViewDistance(void) override;
|
virtual int ParseLocaleViewDistance(void) override;
|
||||||
|
@ -1289,9 +1289,14 @@ void cProtocol172::SendThunderbolt(int a_BlockX, int a_BlockY, int a_BlockZ)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cProtocol172::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay)
|
void cProtocol172::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle)
|
||||||
{
|
{
|
||||||
ASSERT(m_State == 3); // In game mode?
|
ASSERT(m_State == 3); // In game mode?
|
||||||
|
if (!a_DoDaylightCycle)
|
||||||
|
{
|
||||||
|
// When writing a "-" before the number the client ignores it but it will stop the client-side time expiration.
|
||||||
|
a_TimeOfDay = std::min(-a_TimeOfDay, -1LL);
|
||||||
|
}
|
||||||
|
|
||||||
cPacketizer Pkt(*this, 0x03);
|
cPacketizer Pkt(*this, 0x03);
|
||||||
Pkt.WriteInt64(a_WorldAge);
|
Pkt.WriteInt64(a_WorldAge);
|
||||||
|
@ -120,7 +120,7 @@ public:
|
|||||||
virtual void SendTabCompletionResults(const AStringVector & a_Results) override;
|
virtual void SendTabCompletionResults(const AStringVector & a_Results) override;
|
||||||
virtual void SendTeleportEntity (const cEntity & a_Entity) override;
|
virtual void SendTeleportEntity (const cEntity & a_Entity) override;
|
||||||
virtual void SendThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
virtual void SendThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
||||||
virtual void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay) override;
|
virtual void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle) override;
|
||||||
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
||||||
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override;
|
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override;
|
||||||
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
||||||
|
@ -716,10 +716,10 @@ void cProtocolRecognizer::SendThunderbolt(int a_BlockX, int a_BlockY, int a_Bloc
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cProtocolRecognizer::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay)
|
void cProtocolRecognizer::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle)
|
||||||
{
|
{
|
||||||
ASSERT(m_Protocol != NULL);
|
ASSERT(m_Protocol != NULL);
|
||||||
m_Protocol->SendTimeUpdate(a_WorldAge, a_TimeOfDay);
|
m_Protocol->SendTimeUpdate(a_WorldAge, a_TimeOfDay, a_DoDaylightCycle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ public:
|
|||||||
virtual void SendTabCompletionResults(const AStringVector & a_Results) override;
|
virtual void SendTabCompletionResults(const AStringVector & a_Results) override;
|
||||||
virtual void SendTeleportEntity (const cEntity & a_Entity) override;
|
virtual void SendTeleportEntity (const cEntity & a_Entity) override;
|
||||||
virtual void SendThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
virtual void SendThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
||||||
virtual void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay) override;
|
virtual void SendTimeUpdate (Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle) override;
|
||||||
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
||||||
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override;
|
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override;
|
||||||
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
||||||
|
@ -243,6 +243,7 @@ cWorld::cWorld(const AString & a_WorldName, eDimension a_Dimension, const AStrin
|
|||||||
#endif
|
#endif
|
||||||
m_Dimension(a_Dimension),
|
m_Dimension(a_Dimension),
|
||||||
m_IsSpawnExplicitlySet(false),
|
m_IsSpawnExplicitlySet(false),
|
||||||
|
m_IsDaylightCycleEnabled(true),
|
||||||
m_WorldAgeSecs(0),
|
m_WorldAgeSecs(0),
|
||||||
m_TimeOfDaySecs(0),
|
m_TimeOfDaySecs(0),
|
||||||
m_WorldAge(0),
|
m_WorldAge(0),
|
||||||
@ -576,6 +577,7 @@ void cWorld::Start(void)
|
|||||||
m_bEnabledPVP = IniFile.GetValueSetB("Mechanics", "PVPEnabled", true);
|
m_bEnabledPVP = IniFile.GetValueSetB("Mechanics", "PVPEnabled", true);
|
||||||
m_bUseChatPrefixes = IniFile.GetValueSetB("Mechanics", "UseChatPrefixes", true);
|
m_bUseChatPrefixes = IniFile.GetValueSetB("Mechanics", "UseChatPrefixes", true);
|
||||||
m_VillagersShouldHarvestCrops = IniFile.GetValueSetB("Monsters", "VillagersShouldHarvestCrops", true);
|
m_VillagersShouldHarvestCrops = IniFile.GetValueSetB("Monsters", "VillagersShouldHarvestCrops", true);
|
||||||
|
m_IsDaylightCycleEnabled = IniFile.GetValueSetB("General", "IsDaylightCycleEnabled", true);
|
||||||
int GameMode = IniFile.GetValueSetI("General", "Gamemode", (int)m_GameMode);
|
int GameMode = IniFile.GetValueSetI("General", "Gamemode", (int)m_GameMode);
|
||||||
int Weather = IniFile.GetValueSetI("General", "Weather", (int)m_Weather);
|
int Weather = IniFile.GetValueSetI("General", "Weather", (int)m_Weather);
|
||||||
|
|
||||||
@ -797,6 +799,7 @@ void cWorld::Stop(void)
|
|||||||
IniFile.SetValueI("Physics", "TNTShrapnelLevel", (int)m_TNTShrapnelLevel);
|
IniFile.SetValueI("Physics", "TNTShrapnelLevel", (int)m_TNTShrapnelLevel);
|
||||||
IniFile.SetValueB("Mechanics", "CommandBlocksEnabled", m_bCommandBlocksEnabled);
|
IniFile.SetValueB("Mechanics", "CommandBlocksEnabled", m_bCommandBlocksEnabled);
|
||||||
IniFile.SetValueB("Mechanics", "UseChatPrefixes", m_bUseChatPrefixes);
|
IniFile.SetValueB("Mechanics", "UseChatPrefixes", m_bUseChatPrefixes);
|
||||||
|
IniFile.SetValueB("General", "IsDaylightCycleEnabled", m_IsDaylightCycleEnabled);
|
||||||
IniFile.SetValueI("General", "Weather", (int)m_Weather);
|
IniFile.SetValueI("General", "Weather", (int)m_Weather);
|
||||||
IniFile.SetValueI("General", "TimeInTicks", m_TimeOfDay);
|
IniFile.SetValueI("General", "TimeInTicks", m_TimeOfDay);
|
||||||
IniFile.WriteFile(m_IniFileName);
|
IniFile.WriteFile(m_IniFileName);
|
||||||
@ -828,8 +831,12 @@ void cWorld::Tick(float a_Dt, int a_LastTickDurationMSec)
|
|||||||
SetChunkData(**itr);
|
SetChunkData(**itr);
|
||||||
} // for itr - SetChunkDataQueue[]
|
} // for itr - SetChunkDataQueue[]
|
||||||
|
|
||||||
// We need sub-tick precision here, that's why we store the time in seconds and calculate ticks off of it
|
|
||||||
m_WorldAgeSecs += (double)a_Dt / 1000.0;
|
m_WorldAgeSecs += (double)a_Dt / 1000.0;
|
||||||
|
m_WorldAge = (Int64)(m_WorldAgeSecs * 20.0);
|
||||||
|
|
||||||
|
if (m_IsDaylightCycleEnabled)
|
||||||
|
{
|
||||||
|
// We need sub-tick precision here, that's why we store the time in seconds and calculate ticks off of it
|
||||||
m_TimeOfDaySecs += (double)a_Dt / 1000.0;
|
m_TimeOfDaySecs += (double)a_Dt / 1000.0;
|
||||||
|
|
||||||
// Wrap time of day each 20 minutes (1200 seconds)
|
// Wrap time of day each 20 minutes (1200 seconds)
|
||||||
@ -838,7 +845,6 @@ void cWorld::Tick(float a_Dt, int a_LastTickDurationMSec)
|
|||||||
m_TimeOfDaySecs -= 1200.0;
|
m_TimeOfDaySecs -= 1200.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_WorldAge = (Int64)(m_WorldAgeSecs * 20.0);
|
|
||||||
m_TimeOfDay = (Int64)(m_TimeOfDaySecs * 20.0);
|
m_TimeOfDay = (Int64)(m_TimeOfDaySecs * 20.0);
|
||||||
|
|
||||||
// Updates the sky darkness based on current time of day
|
// Updates the sky darkness based on current time of day
|
||||||
@ -850,6 +856,7 @@ void cWorld::Tick(float a_Dt, int a_LastTickDurationMSec)
|
|||||||
BroadcastTimeUpdate();
|
BroadcastTimeUpdate();
|
||||||
m_LastTimeUpdate = m_WorldAge;
|
m_LastTimeUpdate = m_WorldAge;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Add entities waiting in the queue to be added:
|
// Add entities waiting in the queue to be added:
|
||||||
{
|
{
|
||||||
@ -2251,7 +2258,7 @@ void cWorld::BroadcastTimeUpdate(const cClientHandle * a_Exclude)
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ch->SendTimeUpdate(m_WorldAge, m_TimeOfDay);
|
ch->SendTimeUpdate(m_WorldAge, m_TimeOfDay, m_IsDaylightCycleEnabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
src/World.h
12
src/World.h
@ -146,6 +146,16 @@ public:
|
|||||||
|
|
||||||
int GetTicksUntilWeatherChange(void) const { return m_WeatherInterval; }
|
int GetTicksUntilWeatherChange(void) const { return m_WeatherInterval; }
|
||||||
|
|
||||||
|
/** Is the daylight cyclus enabled? */
|
||||||
|
virtual bool IsDaylightCycleEnabled(void) const { return m_IsDaylightCycleEnabled; }
|
||||||
|
|
||||||
|
/** Sets the daylight cyclus to true/false. */
|
||||||
|
virtual void SetDaylightCycleEnabled(bool a_IsDaylightCycleEnabled)
|
||||||
|
{
|
||||||
|
m_IsDaylightCycleEnabled = a_IsDaylightCycleEnabled;
|
||||||
|
BroadcastTimeUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
virtual Int64 GetWorldAge (void) const override { return m_WorldAge; }
|
virtual Int64 GetWorldAge (void) const override { return m_WorldAge; }
|
||||||
virtual Int64 GetTimeOfDay(void) const override { return m_TimeOfDay; }
|
virtual Int64 GetTimeOfDay(void) const override { return m_TimeOfDay; }
|
||||||
|
|
||||||
@ -158,6 +168,7 @@ public:
|
|||||||
{
|
{
|
||||||
m_TimeOfDay = a_TimeOfDay;
|
m_TimeOfDay = a_TimeOfDay;
|
||||||
m_TimeOfDaySecs = (double)a_TimeOfDay / 20.0;
|
m_TimeOfDaySecs = (double)a_TimeOfDay / 20.0;
|
||||||
|
UpdateSkyDarkness();
|
||||||
BroadcastTimeUpdate();
|
BroadcastTimeUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -868,6 +879,7 @@ private:
|
|||||||
bool m_BroadcastDeathMessages;
|
bool m_BroadcastDeathMessages;
|
||||||
bool m_BroadcastAchievementMessages;
|
bool m_BroadcastAchievementMessages;
|
||||||
|
|
||||||
|
bool m_IsDaylightCycleEnabled;
|
||||||
double m_WorldAgeSecs; // World age, in seconds. Is only incremented, cannot be set by plugins.
|
double m_WorldAgeSecs; // World age, in seconds. Is only incremented, cannot be set by plugins.
|
||||||
double m_TimeOfDaySecs; // Time of day in seconds. Can be adjusted. Is wrapped to zero each day.
|
double m_TimeOfDaySecs; // Time of day in seconds. Can be adjusted. Is wrapped to zero each day.
|
||||||
Int64 m_WorldAge; // World age in ticks, calculated off of m_WorldAgeSecs
|
Int64 m_WorldAge; // World age in ticks, calculated off of m_WorldAgeSecs
|
||||||
|
Loading…
x
Reference in New Issue
Block a user