public static bool DoDamage(DamagePlayerInRadius __instance) { // If this isn't radiation damage, don't handle if (__instance.damageType != DamageType.Radiation) { return(true); } if (__instance.enabled && __instance.gameObject.activeInHierarchy && __instance.damageRadius > 0f) { PlayerDistanceTracker tracker = (PlayerDistanceTracker)AccessTools.Field(typeof(DamagePlayerInRadius), "tracker").GetValue(__instance); float distanceToPlayer = GetDistance(tracker); if (distanceToPlayer <= __instance.damageRadius) { float radiationAmount = Player.main.radiationAmount; if (radiationAmount == 0f) { return(false); } Player.main.GetComponent <LiveMixin>().TakeDamage(__instance.damageAmount, __instance.transform.position, __instance.damageType, null); } } return(false); }
private void Awake() { RadiationTrigger = new GameObject("RadiationTrigger"); RadiationTrigger.transform.SetParent(transform, false); playerDistanceTracker = RadiationTrigger.EnsureComponent <PlayerDistanceTracker>(); radiatePlayerInRange = RadiationTrigger.EnsureComponent <RadiatePlayerInRange>(); damagePlayerInRadius = RadiationTrigger.EnsureComponent <DamagePlayerInRadius>(); }
public static bool DoDamage(DamagePlayerInRadius __instance) { // If this isn't radiation damage, don't handle if (__instance.damageType != DamageType.Radiation) { return(true); } if (__instance.enabled && __instance.gameObject.activeInHierarchy && __instance.damageRadius > 0f) { PlayerDistanceTracker tracker = (PlayerDistanceTracker)AccessTools.Field(typeof(DamagePlayerInRadius), "tracker").GetValue(__instance); float distanceToPlayer = GetDistance(tracker); if (distanceToPlayer <= __instance.damageRadius) { if (__instance.doDebug) { Debug.Log(string.Concat(new object[] { __instance.gameObject.name, ".DamagePlayerInRadius() - dist/damageRadius: ", distanceToPlayer, "/", __instance.damageRadius, " => damageAmount: ", __instance.damageAmount })); } float radiationAmount = Player.main.radiationAmount; if (radiationAmount == 0f) { return(false); } if (__instance.doDebug) { Debug.Log(string.Concat(new object[] { "TakeDamage: ", __instance.damageAmount, " ", __instance.damageType.ToString() })); } Player.main.GetComponent <LiveMixin>().TakeDamage(__instance.damageAmount, __instance.transform.position, __instance.damageType, null); } else if (__instance.doDebug) { Debug.Log(string.Concat(new object[] { __instance.gameObject.name, ".DamagePlayerInRadius() - dist/damageRadius: ", distanceToPlayer, "/", __instance.damageRadius, " => no damage" })); } } return(false); }
public static bool Prefix(DamagePlayerInRadius __instance) { DeathRun.setCause(DeathRun.CAUSE_UNKNOWN_CREATURE); DeathRun.setCauseObject(__instance.gameObject); return(true); }