Exemplo n.º 1
0
        public void OnHurting(HurtingEventArgs ev)
        {
            if (!Tracking.AllowedToDamage(ev.Target, ev.Attacker))
            {
                Log.Debug("Not allowed to damage", Subclass.Instance.Config.Debug);
                ev.IsAllowed = false;
                return;
            }
            if (ev.DamageType != DamageTypes.Falldown && Tracking.PlayersWithSubclasses.ContainsKey(ev.Attacker) &&
                (Tracking.PlayersWithSubclasses[ev.Attacker].OnHitEffects.Count > 0))
            {
                if (Tracking.PlayersWithSubclasses[ev.Attacker].OnHitEffects.Count > 0)
                {
                    foreach (string effect in Tracking.PlayersWithSubclasses[ev.Attacker].OnHitEffects)
                    {
                        if ((rnd.NextDouble() * 100) < Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions[("OnHit" + effect + "Chance")])
                        {
                            ev.Target.ReferenceHub.playerEffectsController.EnableByString(effect,
                                                                                          Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions.ContainsKey(("OnHit" + effect + "Duration")) ?
                                                                                          Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions[("OnHit" + effect + "Duration")] : -1);
                        }
                    }
                }
            }

            if (Tracking.PlayersWithSubclasses.ContainsKey(ev.Target))
            {
                if (Tracking.PlayersWithSubclasses[ev.Target].Abilities.Contains(AbilityType.NoSCP207Damage) && ev.DamageType == DamageTypes.Scp207)
                {
                    ev.IsAllowed = false;
                }

                if (Tracking.PlayersWithSubclasses[ev.Target].Abilities.Contains(AbilityType.NoHumanDamage) && ev.DamageType.isWeapon)
                {
                    ev.IsAllowed = false;
                }

                if (Tracking.PlayersWithSubclasses[ev.Target].Abilities.Contains(AbilityType.NoSCPDamage) && ev.DamageType.isScp)
                {
                    ev.IsAllowed = false;
                }

                if (Tracking.PlayersWithSubclasses[ev.Target].Abilities.Contains(AbilityType.Nimble) &&
                    (rnd.NextDouble() * 100) < (Tracking.PlayersWithSubclasses[ev.Target].FloatOptions.ContainsKey("NimbleChance") ?
                                                Tracking.PlayersWithSubclasses[ev.Target].FloatOptions["NimbleChance"] : 15f))
                {
                    ev.IsAllowed = false;
                }
                if (Tracking.PlayersWithZombies.ContainsKey(ev.Target) && Tracking.PlayersWithZombies[ev.Target].Contains(ev.Attacker))
                {
                    ev.IsAllowed = false;
                }

                if (ev.DamageType == DamageTypes.Grenade && Tracking.PlayersWithSubclasses[ev.Target].Abilities.Contains(AbilityType.GrenadeImmune))
                {
                    Concussed concussedEffect = ev.Target.ReferenceHub.playerEffectsController.GetEffect <Concussed>();
                    concussedEffect.Intensity = 3;
                    ev.Target.ReferenceHub.playerEffectsController.EnableEffect(concussedEffect, 8);
                    Disabled disabledEffect = ev.Target.ReferenceHub.playerEffectsController.GetEffect <Disabled>();
                    disabledEffect.Intensity = 2;
                    ev.Target.ReferenceHub.playerEffectsController.EnableEffect(disabledEffect, 5);
                    ev.IsAllowed = false;
                }
            }

            if (ev.DamageType == DamageTypes.Falldown)
            {
                return;
            }
            if (Tracking.PlayersWithSubclasses.ContainsKey(ev.Attacker) && Tracking.PlayersWithSubclasses[ev.Attacker].Abilities.Contains(AbilityType.LifeSteal))
            {
                ev.Attacker.Health += Mathf.Clamp(ev.Amount * ((Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions.ContainsKey("LifeStealPercent") ?
                                                                Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions["LiftStealPercent"] : 2f) / 100), 0, ev.Attacker.MaxHealth);
            }

            if (Tracking.PlayersWithSubclasses.ContainsKey(ev.Attacker) &&
                Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions.ContainsKey("OnHitDamageMultiplier"))
            {
                ev.Amount *= Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions["OnHitDamageMultiplier"];
            }
        }