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);
        }
示例#2
0
        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);
 }