3 const int GET_LIFETIME_TRIES_MAX = 3;
10 int m_iTriesToGetLifetime;
12 float m_LifetimeAdjusted =
float.MIN;
13 float m_LastLifetime =
float.MIN;
16 void CorpseData(notnull
PlayerBase player,
int time_of_death)
19 m_iLastUpdateTime = time_of_death;
20 m_iTimeOfDeath = time_of_death;
24 m_iTriesToGetLifetime = 0;
27 void UpdateCorpseState(
bool force_check =
false)
29 if (m_iMaxLifetime <= 0 )
31 if ( m_iCorpseState ==
PlayerConstants.CORPSE_STATE_DECAYED && !force_check )
38 m_iMaxLifetime = m_Player.GetLifetime();
39 if (m_iMaxLifetime <= 0)
41 ++m_iTriesToGetLifetime;
43 if (m_iTriesToGetLifetime >= GET_LIFETIME_TRIES_MAX)
50 m_iMaxLifetime -= 30 * m_iTriesToGetLifetime;
51 m_Player.SetLifetime(m_iMaxLifetime);
55 if (m_LifetimeAdjusted ==
float.
MIN)
56 m_LifetimeAdjusted = m_iMaxLifetime;
58 if (m_LastLifetime ==
float.
MIN)
59 m_LastLifetime = m_iMaxLifetime;
61 float lifetime = m_Player.GetLifetime();
65 m_LastLifetime = lifetime;
69 int corpseStateOld = m_iCorpseState;
70 float delta = lifetime - m_LastLifetime;
73 if (FeatureTimeAccel.GetFeatureTimeAccelEnabled(ETimeAccelCategories.FOOD_DECAY))
76 timeAccel = FeatureTimeAccel.GetFeatureTimeAccelValue();
81 m_LifetimeAdjusted += delta;
83 float corpseFreshness = 0.0;
84 if (m_iMaxLifetime != 0)
85 corpseFreshness = m_LifetimeAdjusted / m_iMaxLifetime;
91 else if (corpseFreshness <= PlayerConstants.CORPSE_THRESHOLD_MEDIUM && corpseFreshness >
PlayerConstants.CORPSE_THRESHOLD_DECAYED)
101 if (corpseStateOld != m_iCorpseState)
103 m_Player.m_CorpseState = m_iCorpseState;
104 m_Player.SetSynchDirty();
107 m_LastLifetime = lifetime;
112 return !m_Player.GetIsFrozen();