Ejemplo n.º 1
0
        public static bool Prefix(Scp173PlayerScript __instance)
        {
            Plugin.Singleton.Functions.CustomBlinkSequence(__instance);

            if (!__instance.iAm173 || (!__instance.isLocalPlayer && !Mirror.NetworkServer.active))
            {
                return(false);
            }

            __instance.AllowMove = true;
            Plugin.Singleton.SomeoneIsLooking = false;

            foreach (Player player in Player.List)
            {
                Scp173PlayerScript playerScript = player.ReferenceHub.characterClassManager.Scp173;

                if (!playerScript.SameClass && (player.Role != RoleType.Tutorial || Events.Instance.Config.CanTutorialBlockScp173) && playerScript.LookFor173(__instance.gameObject, true) && __instance.LookFor173(player.GameObject, false))
                {
                    __instance.AllowMove = false;
                    Plugin.Singleton.SomeoneIsLooking = true;
                    break;
                }
            }

            if (!Plugin.Singleton.SomeoneIsLooking)
            {
                Plugin.Singleton.Functions.SubtractTime(UnityEngine.Time.fixedDeltaTime * Plugin.Singleton.Config.DecreaseRate);
            }

            return(false);
        }
Ejemplo n.º 2
0
        private static void Prefix(Scp173PlayerScript __instance)
        {
            if (Scp173PlayerScript._remainingTime - Time.fixedDeltaTime < 0f)
            {
                var triggers = ListPool <Player> .Shared.Rent();

                foreach (var player in Player.List)
                {
                    if (player.Team != Team.SCP && player.Team != Team.RIP)
                    {
                        Scp173PlayerScript playerScript = player.ReferenceHub.characterClassManager.Scp173;

                        if (playerScript.LookFor173(__instance.gameObject, true))
                        {
                            triggers.Add(player);
                        }
                    }
                }

                if (triggers.Count > 0)
                {
                    Handlers.Scp173.OnBlinking(new BlinkingEventArgs(Player.Get(__instance.gameObject), triggers));
                }

                ListPool <Player> .Shared.Return(triggers);
            }
        }
Ejemplo n.º 3
0
        public static bool Prefix(Scp173PlayerScript __instance)
        {
            BlinkCustomMethod.CustomBlinkingSequence(__instance);

            if (!__instance.iAm173 || (!__instance.isLocalPlayer && !Mirror.NetworkServer.active))
            {
                return(false);
            }
            if (!BlinkCustomMethod.someoneLooking)
            {
                BlinkCustomMethod.reworkSubstractTime -= Time.fixedDeltaTime * BlinkConfigs.decreaseRate;
                if (BlinkCustomMethod.reworkSubstractTime < 0f)
                {
                    BlinkCustomMethod.reworkSubstractTime = 0f;
                }
            }
            __instance._allowMove            = true;
            BlinkCustomMethod.someoneLooking = false;
            foreach (GameObject gameObject in PlayerManager.players)
            {
                Scp173PlayerScript component = gameObject.GetComponent <Scp173PlayerScript>();
                if (!component.SameClass &&
                    component.GetComponent <CharacterClassManager>().CurClass != RoleType.Tutorial &&
                    component.LookFor173(__instance.gameObject, true) &&
                    __instance.LookFor173(component.gameObject, false))
                {
                    __instance._allowMove            = false;
                    BlinkCustomMethod.someoneLooking = true;
                    break;
                }
            }
            return(false);
        }
 private void FixedUpdate()
 {
     this.DoBlinkingSequence();
     if (base.isLocalPlayer && this.iAm173)
     {
         this.allowMove = true;
         foreach (GameObject gameObject in PlayerManager.singleton.players)
         {
             Scp173PlayerScript component = gameObject.GetComponent <Scp173PlayerScript>();
             if (!component.sameClass && component.LookFor173())
             {
                 this.cooldown  = 10;
                 this.allowMove = false;
             }
         }
         this.CheckForInput();
         this.fpc.lookingAtMe = (!this.allowMove && this.cooldown > 0);
         if (this.cooldown >= 0)
         {
             this.cooldown--;
         }
         float num = this.boost_speed.Evaluate(this.ps.GetHealthPercent());
         this.fpc.m_WalkSpeed = num;
         this.fpc.m_RunSpeed  = num;
     }
 }
Ejemplo n.º 5
0
        private static bool Prefix(Scp173PlayerScript __instance)
        {
            try
            {
                if ((Scp173PlayerScript._remainingTime - Time.fixedDeltaTime) >= 0f)
                {
                    return(true);
                }
                if (!SynapseController.Server.Map.Round.RoundIsActive)
                {
                    return(true);
                }

                __instance.DoBlinkingSequence();
                if (!__instance.iAm173 || (!__instance.isLocalPlayer && !NetworkServer.active))
                {
                    return(false);
                }

                HashSet <Player> players = new HashSet <Player>();

                //Get all players looking at Scp173
                foreach (GameObject gameObject in PlayerManager.players)
                {
                    Scp173PlayerScript component = gameObject.GetComponent <Scp173PlayerScript>();
                    if (!component.SameClass && component.LookFor173(__instance.gameObject, true) && __instance.LookFor173(component.gameObject, false))
                    {
                        players.Add(gameObject.GetPlayer());
                    }
                }

                var scriptHolder = __instance.gameObject.GetPlayer();
                scriptHolder.Scp173Controller.ConfrontingPlayers = players;

                //If someone is confronting Scp173 when blinking
                if (scriptHolder.Scp173Controller.ConfrontingPlayers.Count != 0)
                {
                    Server.Get.Events.Scp.Scp173.InvokeScp173BlinkEvent(scriptHolder);
                }

                __instance.AllowMove = true;

                //Original
                foreach (GameObject gameObject in PlayerManager.players)
                {
                    Scp173PlayerScript component = gameObject.GetComponent <Scp173PlayerScript>();
                    if (!component.SameClass && component.LookFor173(__instance.gameObject, true) && __instance.LookFor173(component.gameObject, false))
                    {
                        __instance.AllowMove = false;
                        break;
                    }
                }
            }
            catch (System.Exception e)
            {
                Synapse.Api.Logger.Get.Error($"Synapse-Event: Scp173BlinkEvent(Scp173) failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
            }
            return(false);
        }
Ejemplo n.º 6
0
        private static void Postfix(ref bool __result, Scp173PlayerScript __instance, GameObject scp)
        {
            var player = __instance.GetPlayer();
            var peanut = scp.GetPlayer();

            __result = player?.Invisible != true && __result;

            if (peanut.RoleType == RoleType.Scp173 && peanut.Scp173Controller.IgnoredPlayers.Contains(player))
            {
                __result = false;
            }
        }
Ejemplo n.º 7
0
        internal static void CustomBlinkingSequence(Scp173PlayerScript scpScript)
        {
            if (!scpScript.isServer || !scpScript.isLocalPlayer)
            {
                return;
            }

            Scp173PlayerScript._remainingTime      -= Time.fixedDeltaTime;
            Scp173PlayerScript._blinkTimeRemaining -= Time.fixedDeltaTime;

            if (Scp173PlayerScript._remainingTime >= 0f)
            {
                return;
            }

            Scp173PlayerScript._blinkTimeRemaining = scpScript.blinkDuration_see + 0.4f;
            Scp173PlayerScript._remainingTime      = Mathf.Max(BlinkConfigs.minReworkBlinkTime, Random.Range(BlinkConfigs.minBlinkTime, BlinkConfigs.maxBlinkTime) - reworkSubstractTime);

            if (someoneLooking)
            {
                float val = Random.Range(BlinkConfigs.reworkAddMin, BlinkConfigs.reworkAddMax);
                EXILED.Plugin.Debug($"Adding {val} to {reworkSubstractTime}");
                reworkSubstractTime += val;
                // If SCP-173 is sick of your shit, this basically negates an infinite stacking of the blink fatigue ability
                if (reworkSubstractTime > BlinkConfigs.minBlinkTime)
                {
                    reworkSubstractTime = BlinkConfigs.minBlinkTime;
                }
            }
            else
            {
                float val = Random.Range(BlinkConfigs.reworkAddMin, BlinkConfigs.reworkAddMax) * BlinkConfigs.decreaseRate;
                EXILED.Plugin.Debug($"Substracting {val} to {reworkSubstractTime}");
                reworkSubstractTime -= val;
                if (reworkSubstractTime < 0f)
                {
                    reworkSubstractTime = 0f;
                }
            }

            var array = PlayerManager.players;

            for (int i = 0; i < array.Count; i++)
            {
                var comp = array[i].GetComponent <Scp173PlayerScript>();
                if (comp != null)
                {
                    comp.RpcBlinkTime();
                }
            }
        }
Ejemplo n.º 8
0
        public static bool Prefix(Scp173PlayerScript __instance, GameObject scp, bool angleCheck, ref bool __result)
        {
            Log.Debug("Inside 173 patch", Subclass.Instance.Config.Debug);
            //Player player = Player.Get(__instance.netIdentity);
            ReferenceHub hub = ((NetworkBehaviour)__instance).GetComponentInChildren <ReferenceHub>();

            Log.Debug(Player.Get(hub).Id);
            //Log.Debug($"Player is {player?.Nickname}", Subclass.Instance.Config.Debug);
            //if (player != null && Tracking.PlayersWithSubclasses.ContainsKey(player) &&
            //    Tracking.PlayersWithSubclasses[player].Abilities.Contains(AbilityType.Disable173Stop))
            //{
            //    Log.Debug("173 look disabled automatcially", Subclass.Instance.Config.Debug);
            //    __result = false;
            //    return false;
            //}
            return(true);
        }
Ejemplo n.º 9
0
        public static bool Prefix(Scp173PlayerScript __instance)
        {
            if (EventPlugin.Scp173PatchDisable)
            {
                return(true);
            }

            try
            {
                __instance.DoBlinkingSequence();

                if (!__instance.iAm173)
                {
                    return(false);
                }

                __instance._allowMove = true;

                foreach (GameObject player in PlayerManager.players)
                {
                    ReferenceHub hub = player.GetPlayer();

                    if (hub.characterClassManager.CurClass == RoleType.Tutorial)
                    {
                        continue;
                    }

                    Scp173PlayerScript component = player.GetComponent <Scp173PlayerScript>();

                    if (!component.SameClass && component.LookFor173(__instance.gameObject, true) && __instance.LookFor173(component.gameObject, false))
                    {
                        __instance._allowMove = false;
                        break;
                    }
                }

                return(false);
            }
            catch (Exception exception)
            {
                Log.Error($"Scp173Patch error: {exception}");
                return(true);
            }
        }
Ejemplo n.º 10
0
        private static bool Prefix(Scp173PlayerScript __instance, GameObject target)
        {
            try
            {
                if (!__instance._interactRateLimit.CanExecute(true) || target == null)
                {
                    return(false);
                }

                var player = target.GetPlayer();
                var scp    = __instance.GetPlayer();

                if (scp.RoleType != RoleType.Scp173 || !__instance.CanMove(true) || Vector3.Distance(scp.Position, player.Position) >= 3f + __instance.boost_teleportDistance.Evaluate(__instance._ps.GetHealthPercent()))
                {
                    return(false);
                }

                if (!scp.WeaponManager.GetShootPermission(player.ClassManager))
                {
                    return(false);
                }

                SynapseController.Server.Events.Scp.InvokeScpAttack(scp, player, Api.Enum.ScpAttackType.Scp173_Snap, out var allow);

                if (!allow)
                {
                    return(false);
                }

                __instance.RpcSyncAudio();
                scp.ClassManager.RpcPlaceBlood(player.transform.position, 0, 2.2f);
                player.Hurt(999990, DamageTypes.Scp173, scp);
                __instance.TargetHitMarker(scp.Connection);
                return(false);
            }
            catch (Exception e)
            {
                Synapse.Api.Logger.Get.Error($"Synapse-Event: ScpAttackEvent(Scp173) failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
                return(true);
            }
        }
Ejemplo n.º 11
0
        private static bool Prefix(Scp173PlayerScript __instance)
        {
            try
            {
                __instance.DoBlinkingSequence();

                if (!__instance.iAm173)
                {
                    return(false);
                }

                __instance._allowMove = true;

                foreach (GameObject gameObject in PlayerManager.players)
                {
                    Player player = Player.Get(gameObject);

                    if (player.Role == RoleType.Tutorial)
                    {
                        continue;
                    }

                    Scp173PlayerScript component = player.ReferenceHub.GetComponent <Scp173PlayerScript>();

                    if (!component.SameClass && component.LookFor173(__instance.gameObject, true) && __instance.LookFor173(component.gameObject, false))
                    {
                        __instance._allowMove = false;
                        break;
                    }
                }

                return(false);
            }
            catch (Exception exception)
            {
                Log.Error($"Scp173BeingLooked error: {exception}");
                return(true);
            }
        }
Ejemplo n.º 12
0
        private static void SCPMode()
        {
            var ccm = PlayerManager.localPlayer.GetComponent <CharacterClassManager>();
            Scp173PlayerScript   peanut   = ccm.GetComponent <Scp173PlayerScript>();
            Scp049PlayerScript   doctor   = ccm.GetComponent <Scp049PlayerScript>();
            Scp049_2PlayerScript zombie   = ccm.GetComponent <Scp049_2PlayerScript>();
            Scp939PlayerScript   dogo     = ccm.GetComponent <Scp939PlayerScript>();
            Scp096PlayerScript   shyguy   = ccm.GetComponent <Scp096PlayerScript>();
            Scp106PlayerScript   larry    = ccm.GetComponent <Scp106PlayerScript>();
            Scp079PlayerScript   computer = ccm.GetComponent <Scp079PlayerScript>();


            if (peanut.iAm173)
            {
                foreach (GameObject player in PlayerManager.singleton.players)
                {
                    if (Vector3.Distance(PlayerManager.localPlayer.transform.position, player.transform.position) < 4f + peanut.boost_teleportDistance.Evaluate(PlayerManager.localPlayer.GetComponent <PlayerStats>().GetHealthPercent()))
                    {
                        peanut.GetType().GetMethod("HurtPlayer", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(peanut, new object[]
                        {
                            player,
                            "123"
                        });
                    }
                }
            }
            if (doctor.iAm049)
            {
                foreach (GameObject player in PlayerManager.singleton.players)
                {
                    if ((player != PlayerManager.localPlayer) && (Vector3.Distance(PlayerManager.localPlayer.transform.position, player.transform.position) < 3.5f))
                    {
                        doctor.GetType().GetMethod("InfectPlayer", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(doctor, new object[]
                        {
                            player,
                            "123"
                        });
                    }
                }
            }
            if (zombie.iAm049_2)
            {
                foreach (GameObject player in PlayerManager.singleton.players)
                {
                    if ((player != PlayerManager.localPlayer) && (Vector3.Distance(PlayerManager.localPlayer.transform.position, player.transform.position) < 4f))
                    {
                        zombie.CallCmdHurtPlayer(player, "123");
                    }
                }
            }
            if (dogo.iAm939)
            {
                foreach (GameObject player in PlayerManager.singleton.players)
                {
                    // ccm.klasy[player.GetComponent<CharacterClassManager>().curClass].team != Team.SCP
                    if ((player != PlayerManager.localPlayer) && (Vector3.Distance(Camera.main.transform.position, player.transform.position) < 1.3 * dogo.attackDistance))
                    {
                        dogo.CallCmdShoot(player);
                    }
                }
            }
            if (shyguy.iAm096)
            {
                foreach (GameObject player in PlayerManager.singleton.players)
                {
                    if ((Vector3.Distance(Camera.main.transform.position, player.transform.position) < 3.5f))
                    {
                        shyguy.GetType().GetMethod("CallCmdHurtPlayer", BindingFlags.Instance | BindingFlags.Public).Invoke(shyguy, new object[]
                        {
                            player
                        });
                    }
                }
            }
            if (larry.iAm106)
            {
                foreach (GameObject player in PlayerManager.singleton.players)
                {
                    if (Vector3.Distance(Camera.main.transform.position, player.transform.position) < 3.5f)
                    {
                        larry.CallCmdMovePlayer(player, ServerTime.time);
                    }
                }
            }
            if (computer.iAm079)
            {
            }
        }