public static bool WearNTear_UpdateWear(ref WearNTear __instance) { if (OverrideWearNTear(ref __instance)) { ZNetView m_nview = (ZNetView)AccessTools.Field(typeof(WearNTear), "m_nview").GetValue(__instance); if (m_nview == null || !m_nview.IsValid()) { return(false); } bool shouldUpdate = (bool)AccessTools.Method(typeof(WearNTear), "ShouldUpdate").Invoke(__instance, new object[] { }); if (m_nview.IsOwner() && shouldUpdate) { if (ZNetScene.instance.OutsideActiveArea(__instance.transform.position)) { float maxSupport = (float)AccessTools.Method(typeof(WearNTear), "GetMaxSupport").Invoke(__instance, new object[] { }); AccessTools.Field(typeof(WearNTear), "m_support").SetValue(__instance, maxSupport); m_nview.GetZDO().Set("support", maxSupport); return(false); } float num = 0.0f; bool haveRoof = (bool)AccessTools.Method(typeof(WearNTear), "HaveRoof").Invoke(__instance, new object[] { }); bool shouldDamage = EnvMan.instance.IsWet() && !haveRoof; if ((bool)(UnityEngine.Object)__instance.m_wet) { __instance.m_wet.SetActive(shouldDamage); } if (__instance.m_noRoofWear && (double)__instance.GetHealthPercentage() > minHealthPercentage) { bool isUnderWater = (bool)AccessTools.Method(typeof(WearNTear), "IsUnderWater").Invoke(__instance, new object[] { }); float rainTimer = (float)AccessTools.Field(typeof(WearNTear), "m_rainTimer").GetValue(__instance); float health = m_nview.GetZDO().GetFloat("health", __instance.m_health); if (shouldDamage || isUnderWater) { if ((double)rainTimer == 0.0) { rainTimer = Time.time; } else if ((double)Time.time - (double)rainTimer > 60.0) { rainTimer = Time.time; num += damagePerMinute.Value; if (IsTooMuchDamage(ref __instance, health, num)) { float reduceBy = HowMuchIsTooMuch(ref __instance, health, num); num -= reduceBy; } } } else { rainTimer = 0.0f; } AccessTools.Field(typeof(WearNTear), "m_rainTimer").SetValue(__instance, rainTimer); } if (__instance.m_noSupportWear) { AccessTools.Method(typeof(WearNTear), "UpdateSupport").Invoke(__instance, new object[] { }); bool haveSupport = (bool)AccessTools.Method(typeof(WearNTear), "HaveSupport").Invoke(__instance, new object[] { }); if (!haveSupport) { num = 100f; } } bool canBeRemoved = (bool)AccessTools.Method(typeof(WearNTear), "CanBeRemoved").Invoke(__instance, new object[] { }); if ((double)num > 0.0 && !canBeRemoved) { num = 0.0f; } if ((double)num > 0.0) { __instance.ApplyDamage(num / 100f * __instance.m_health); } } AccessTools.Method(typeof(WearNTear), "UpdateVisual").Invoke(__instance, new object[] { true }); return(false); } else { return(true); } }