private static bool ProcessDamage(AttackerDamageHandler __instance, ReferenceHub ply)
        {
            try
            {
                var curClass = ply.characterClassManager.CurClass;
                if (__instance.CheckSpawnProtection(__instance.Attacker.Hub, ply))
                {
                    __instance.Damage = 0f;
                    return(false);
                }
                if (ply.networkIdentity.netId == __instance.Attacker.NetId || __instance.ForceFullFriendlyFire)
                {
                    if (!__instance.AllowSelfDamage && !__instance.ForceFullFriendlyFire)
                    {
                        __instance.Damage = 0f;
                        return(false);
                    }
                    __instance.IsSuicide = true;
                }
                else if (!HitboxIdentity.CheckFriendlyFire(__instance.Attacker.Hub, ply))
                {
                    __instance.Damage        *= AttackerDamageHandler._ffMultiplier;
                    __instance.IsFriendlyFire = true;
                }

                return(false);
            }
            catch (Exception ex)
            {
                Logger.Get.Error($"Synapse-FF: ProcessDamage failed!!\n{ex}");
                return(true);
            }
        }
Esempio n. 2
0
 private static void ProcessPlayers(FlashbangGrenade grenade, List <Player> players)
 {
     foreach (Player player in players)
     {
         if (HitboxIdentity.CheckFriendlyFire(grenade.PreviousOwner.Role, player.ReferenceHub.characterClassManager.CurClass))
         {
             grenade.ProcessPlayer(player.ReferenceHub);
         }
     }
 }
        private static bool ExplodeDestructible(ExplosionGrenade __instance, IDestructible dest, Footprinting.Footprint attacker, Vector3 pos, ExplosionGrenade setts, out bool __result)
        {
            __result = false;
            try
            {
                if (Physics.Linecast(dest.CenterOfMass, pos, InventorySystem.Items.MicroHID.MicroHIDItem.WallMask))
                {
                    return(false);
                }
                Vector3      a         = dest.CenterOfMass - pos;
                float        magnitude = a.magnitude;
                float        num       = setts._playerDamageOverDistance.Evaluate(magnitude);
                ReferenceHub referenceHub;
                bool         flag = ReferenceHub.TryGetHubNetID(dest.NetworkId, out referenceHub);
                if (flag && referenceHub.characterClassManager.CurRole.team == Team.SCP)
                {
                    num *= setts._scpDamageMultiplier;
                }
                Vector3 force = (1f - magnitude / setts._maxRadius) * (a / magnitude) * setts._rigidbodyLiftForce + Vector3.up * setts._rigidbodyLiftForce;
                if (num > 0f && dest.Damage(num, new PlayerStatsSystem.ExplosionDamageHandler(attacker, force, num, 50), dest.CenterOfMass) && flag)
                {
                    float num2  = setts._effectDurationOverDistance.Evaluate(magnitude);
                    bool  flag2 = attacker.Hub == referenceHub;
                    if (num2 > 0f && (flag2 || HitboxIdentity.CheckFriendlyFire(attacker.Hub, referenceHub, false)))
                    {
                        float minimalDuration = setts._minimalDuration;
                        ExplosionGrenade.TriggerEffect <CustomPlayerEffects.Burned>(referenceHub, num2 * setts._burnedDuration, minimalDuration);
                        ExplosionGrenade.TriggerEffect <CustomPlayerEffects.Deafened>(referenceHub, num2 * setts._deafenedDuration, minimalDuration);
                        ExplosionGrenade.TriggerEffect <CustomPlayerEffects.Concussed>(referenceHub, num2 * setts._concussedDuration, minimalDuration);
                    }
                    if (!flag2 && attacker.Hub != null)
                    {
                        Hitmarker.SendHitmarker(attacker.Hub, 1f);
                    }
                    referenceHub.inventory.connectionToClient.Send(new GunHitMessage(false, num, pos), 0);
                }

                __result = true;
                return(false);
            }
            catch (Exception ex)
            {
                Logger.Get.Error($"Synapse-FF: ExplodeDestructible failed!!\n{ex}");
                return(true);
            }
        }
        private static bool PlayExplosionEffects(FlashbangGrenade __instance)
        {
            try
            {
                float time = __instance._blindingOverDistance.keys[__instance._blindingOverDistance.length - 1].time;
                float num  = time * time;
                foreach (KeyValuePair <GameObject, ReferenceHub> keyValuePair in ReferenceHub.GetAllHubs())
                {
                    if (!(keyValuePair.Value == null) && (__instance.transform.position - keyValuePair.Value.transform.position).sqrMagnitude <= num && !(keyValuePair.Value == __instance.PreviousOwner.Hub) && HitboxIdentity.CheckFriendlyFire(__instance.PreviousOwner.Hub, keyValuePair.Value, false))
                    {
                        __instance.ProcessPlayer(keyValuePair.Value);
                    }
                }

                return(false);
            }
            catch (Exception ex)
            {
                Logger.Get.Error($"Synapse-FF: PlayExplosionFlash failed!!\n{ex}");
                return(true);
            }
        }
Esempio n. 5
0
        private static bool ChargePlayer(PlayableScps.Scp096 __instance, ReferenceHub player)
        {
            try
            {
                var scp    = __instance.GetPlayer();
                var target = player.GetPlayer();
                if (!HitboxIdentity.CheckFriendlyFire(scp.Hub, target.Hub))
                {
                    return(false);
                }

                if (Physics.Linecast(scp.transform.position, player.transform.position, LayerMask.GetMask(new string[]
                {
                    "Default",
                    "Door",
                    "Glass"
                })))
                {
                    return(false);
                }

                if (__instance._chargeHitTargets.Contains(player))
                {
                    return(false);
                }


                try
                {
                    ev.Get.Scp.InvokeScpAttack(scp, target, Api.Enum.ScpAttackType.Scp096_Tear, out var allow);
                    if (!allow)
                    {
                        return(false);
                    }
                }
                catch (Exception e)
                {
                    Synapse.Api.Logger.Get.Error($"Synapse-Event: ScpAttackEvent(Scp096-Charge) failed!!\n{e}");
                }

                var flag   = __instance._targets.Contains(player);
                var damage = flag ? 9696f : 40f;
                var flag2  = player.playerStats.DealDamage(new Scp096DamageHandler(__instance, damage, Scp096DamageHandler.AttackType.Charge));
                __instance._chargeHitTargets.Add(player);

                if (flag2)
                {
                    __instance._targets.Remove(player);

                    Hitmarker.SendHitmarker(__instance.Hub, 1.35f);
                    if (!__instance._chargeKilled)
                    {
                        __instance._chargeCooldownPenaltyAmount++;
                        __instance._chargeKilled = true;
                    }
                }
                if (flag)
                {
                    __instance.EndChargeNextFrame();
                }

                return(false);
            }
            catch (Exception e)
            {
                Synapse.Api.Logger.Get.Error($"Synapse-Event: Scp096AttackEvent(Charge) failed!!\n{e}");
                return(true);
            }
        }
Esempio n. 6
0
        private static bool Pry(PlayableScps.Scp096 __instance)
        {
            try
            {
                if (!__instance.PryingGate)
                {
                    return(false);
                }

                var num = Physics.OverlapSphereNonAlloc(__instance.Hub.playerMovementSync.RealModelPosition, 0.5f, PlayableScps.Scp096._sphereHits, LayerMask.GetMask(new string[]
                {
                    "Hitbox"
                }));

                if (num <= 0)
                {
                    return(false);
                }

                for (int i = 0; i < num; i++)
                {
                    ReferenceHub componentInParent = PlayableScps.Scp096._sphereHits[i].gameObject.GetComponentInParent <ReferenceHub>();

                    if (componentInParent == null || componentInParent == __instance.Hub)
                    {
                        continue;
                    }

                    var scp    = __instance.GetPlayer();
                    var target = componentInParent.GetPlayer();
                    if (!HitboxIdentity.CheckFriendlyFire(scp.Hub, target.Hub))
                    {
                        continue;
                    }
                    try
                    {
                        ev.Get.Scp.InvokeScpAttack(scp, target, Api.Enum.ScpAttackType.Scp096_Tear, out var allow);
                        if (!allow)
                        {
                            continue;
                        }
                    }
                    catch (Exception e)
                    {
                        Synapse.Api.Logger.Get.Error($"Synapse-Event: ScpAttackEvent(Scp096-Charge) failed!!\n{e}");
                    }

                    // if (__instance.Hub.playerStats.HurtPlayer(new PlayerStats.HitInfo(9696f, null, DamageTypes.Scp096, __instance.Hub.playerId, false), componentInParent.gameObject, false, true))
                    if (componentInParent.playerStats.DealDamage(new Scp096DamageHandler(__instance, 9696f, Scp096DamageHandler.AttackType.GateKill)))
                    {
                        if (__instance._targets.Contains(componentInParent))
                        {
                            __instance._targets.Remove(componentInParent);
                        }

                        NetworkServer.SendToAll(default(PlayableScps.Messages.Scp096OnKillMessage), 0);
                    }
                }
                if (Physics.Raycast(__instance.Hub.PlayerCameraReference.position, __instance.Hub.PlayerCameraReference.forward, 2f, LayerMask.GetMask(new string[]
                {
                    "Default"
                })))
                {
                    __instance.EndChargeNextFrame();
                }

                return(false);
            }
            catch (Exception e)
            {
                Synapse.Api.Logger.Get.Error($"Synapse-Event: Scp096AttackEvent(Pry) failed!!\n{e}");
                return(true);
            }
        }