Example #1
0
    private void CreateVisionPoint(VisionInformation vi)
    {
        if (vi.SceneObject == null)
        {
            // Make sure that this is not called from inside the asynchronous call
            // it will cause issues because you need to call it from the main thread
            vi.SceneObject = Instantiate(Resources.Load("VisionPoint", typeof(GameObject))) as GameObject;
        }

        if (vi.SceneObject != null)
        {
            vi.SceneObject.transform.position = vi.SpatialHitPoint;
            vi.SceneObject.transform.rotation = vi.SpatialHitRotation;

            TextMesh mesh = vi.SceneObject.GetComponentInChildren <TextMesh>();
            if (mesh != null)
            {
                string tags = "";

                foreach (Tag tag in vi.Tags.tags)
                {
                    tags += string.Format("{0} ({1})\r\n", tag.name, tag.confidence);
                }

                mesh.text = tags;
            }
        }

        vi.IsDirty = false;
    }
Example #2
0
        public static bool Prefix(PlayableScps.Scp096 __instance, VisionInformation info)
        {
            PlayableScpsController playableScpsController;
            bool whitelisted = info.Source.GetComponent <AdditionalPlayerAbilities>() != null && info.Source.GetComponent <AdditionalPlayerAbilities>().scp096whitelisted;

            Exiled.API.Features.Log.Info("Патчим агр скромника, результат: " + whitelisted);
            if (!info.Looking || !info.RaycastHit || !info.RaycastResult.transform.gameObject.TryGetComponent <PlayableScpsController>(out playableScpsController) || playableScpsController.CurrentScp == null || playableScpsController.CurrentScp != __instance || whitelisted)
            {
                return(false);
            }
            float delay = (1f - info.DotProduct) / 0.25f * (Vector3.Distance(info.Source.transform.position, info.Target.transform.position) * 0.1f);

            if (!__instance.Calming)
            {
                __instance.AddTarget(info.Source);
            }
            if (__instance.CanEnrage && info.Source != null)
            {
                __instance.PreWindup(delay);
                if (NetworkServer.active)
                {
                    NetworkServer.SendToAll <Scp096TriggerMessage>(new Scp096TriggerMessage(info.Target, info.Source), 0);
                }
            }

            return(false);
        }
Example #3
0
    private void OnGetDataCompleted(string id, string json)
    {
        VisionInformation vi = visionInformationList.GetVisionInformationById(id);

        if (vi != null)
        {
            vi.Tags = JsonUtility.FromJson <Tags>(json);

            vi.IsDirty = true;
        }
    }
Example #4
0
        private static bool Prefix(PlayableScps.Scp096 __instance)
        {
            try
            {
                if (__instance._flash.Enabled)
                {
                    return(false);
                }
                var vector = __instance.Hub.transform.TransformPoint(PlayableScps.Scp096._headOffset);
                foreach (var player in Server.Get.Players)
                {
                    var characterClassManager = player.ClassManager;
                    if (characterClassManager.CurClass != RoleType.Spectator && !(player.Hub == __instance.Hub) && !characterClassManager.IsAnyScp() && Vector3.Dot((player.CameraReference.position - vector).normalized, __instance.Hub.PlayerCameraReference.forward) >= 0.1f)
                    {
                        var visionInformation = VisionInformation.GetVisionInformation(player.Hub, vector, -0.1f, 60f, true, true, __instance.Hub.localCurrentRoomEffects);
                        if (visionInformation.IsLooking)
                        {
                            float delay = visionInformation.LookingAmount / 0.25f * (visionInformation.Distance * 0.1f);
                            if (!__instance.Calming)
                            {
                                if (player.Invisible || Server.Get.Configs.SynapseConfiguration.CantRage096.Contains(player.RoleID))
                                {
                                    continue;
                                }

                                if (player.RealTeam == Team.SCP && !Server.Get.Configs.SynapseConfiguration.ScpTrigger096)
                                {
                                    continue;
                                }

                                Server.Get.Events.Scp.Scp096.InvokeScpTargetEvent(player, __instance.GetPlayer(), __instance.PlayerState, out var allow);
                                __instance.AddTarget(player.gameObject);
                                if (!allow)
                                {
                                    continue;
                                }
                            }
                            if (__instance.CanEnrage && player.gameObject != null)
                            {
                                __instance.PreWindup(delay);
                            }
                        }
                    }
                }
                return(false);
            }
            catch (Exception e)
            {
                Synapse.Api.Logger.Get.Error($"Synapse-Event: Scp096AddTargetEvent failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
                return(true);
            }
        }
Example #5
0
    public void OnTapped()
    {
        // create new vision information
        VisionInformation vi = new VisionInformation();

        vi.Id = Guid.NewGuid().ToString();
        visionInformationList.Add(vi.Id, vi);

        // get hit point
        GetHitPoint(vi.Id);

        // take photo and enrich vision information
        mgr.TakePhoto(vi.Id, OnPhotoReady);
    }
Example #6
0
 public static bool Prefix(Scp096 __instance, VisionInformation info)
 {
     try
     {
         var allow = true;
         Events.InvokeScp096AddTarget(info.Source.GetPlayer(), __instance.GetPlayer(), __instance.PlayerState, ref allow);
         return(allow);
     }
     catch (Exception e)
     {
         Log.Info($"Scp096AddTarget Event Error: {e}");
         return(true);
     }
 }
Example #7
0
    public void OnPhotoReady(string id, byte[] photo, Matrix4x4 cameraToWorldMatrix, Resolution cameraResolution)
    {
        VisionInformation vi = visionInformationList.GetVisionInformationById(id);

        if (vi != null)
        {
            vi.Matrix = cameraToWorldMatrix;
        }

#if !UNITY_EDITOR
        VisionAPI visionAPI = new VisionAPI();

        visionAPI.GetDataAsync(id, ConfigSettingscs.VisionURL, photo, ConfigSettingscs.VisionKey, OnGetDataCompleted);
#endif
    }
Example #8
0
        public void Postfix(PlayableScps.Scp096 __instance, VisionInformation __result, GameObject source)
        {
            VisionInformation visionInformation = new VisionInformation
            {
                Source     = source,
                Target     = __instance.Hub.gameObject,
                RaycastHit = false,
                Looking    = false
            };

            if (source == __instance.Hub.gameObject)
            {
                __result = visionInformation;
                return;
            }
            Transform playerCameraReference = ReferenceHub.GetHub(source).PlayerCameraReference;
            Vector3   position  = __instance.Hub.PlayerCameraReference.position;
            Vector3   position2 = playerCameraReference.position;

            visionInformation.Distance = Vector3.Distance(position2, position);
            float num  = -Vector3.Dot((position2 - position).normalized, playerCameraReference.forward);
            float num2 = -Vector3.Dot((position - position2).normalized, __instance.Hub.PlayerCameraReference.forward);

            visionInformation.DotProduct = num;
            visionInformation.Looking    = true;
            if (num < MoreConfig.singleton.Config.Scp096Config.triggerBounds1 || num2 < MoreConfig.singleton.Config.Scp096Config.triggerBounds2)
            {
                visionInformation.Looking = false;
                __result = visionInformation;
                return;
            }
            if (visionInformation.Distance > ((__instance.Hub.transform.position.y > 980f) ? MoreConfig.singleton.Config.Scp096Config.surfaceTriggerDistance : MoreConfig.singleton.Config.Scp096Config.triggerDistance))
            {
                __result = visionInformation;
                return;
            }
            RaycastHit raycastResult;

            if (!Physics.Raycast(visionInformation.Source.transform.position, (visionInformation.Target.transform.position - visionInformation.Source.transform.position).normalized, out raycastResult, MoreConfig.singleton.Config.Scp096Config.surfaceTriggerDistance, PlayableScps.Scp096.VisionLayerMask))
            {
                __result = visionInformation;
                return;
            }
            visionInformation.RaycastHit    = true;
            visionInformation.RaycastResult = raycastResult;
            __result = visionInformation;
        }
Example #9
0
        public static bool Prefix(Scp096 __instance)
        {
            if (__instance._flash.IsEnabled)
            {
                return(false);
            }

            Vector3 vector = __instance.Hub.transform.TransformPoint(Scp096._headOffset);

            foreach (KeyValuePair <GameObject, ReferenceHub> keyValuePair in ReferenceHub.GetAllHubs())
            {
                ReferenceHub          value = keyValuePair.Value;
                CharacterClassManager characterClassManager = value.characterClassManager;
                if (characterClassManager.CurClass != RoleType.Spectator &&
                    !value.isDedicatedServer &&
                    !(value == __instance.Hub) &&
                    !characterClassManager.IsAnyScp() &&
                    Vector3.Dot((value.PlayerCameraReference.position - vector).normalized, __instance.Hub.PlayerCameraReference.forward) >= 0.1f)
                {
                    VisionInformation visionInformation = VisionInformation.GetVisionInformation(value, vector, -0.1f, 60f, true, true, __instance.Hub.localCurrentRoomEffects, 0);
                    bool toEnrage = visionInformation.IsLooking;

                    //Add touch check
                    if (!toEnrage && SanyaPlugin.Instance.Config.Scp096TouchEnrageDistance > visionInformation.Distance)
                    {
                        toEnrage = !Physics.Linecast(value.PlayerCameraReference.position, vector, VisionInformation.VisionLayerMask);
                    }

                    if (toEnrage)
                    {
                        float delay = visionInformation.LookingAmount / 0.25f * (visionInformation.Distance * 0.1f);
                        if (!__instance.Calming)
                        {
                            __instance.AddTarget(value.gameObject);
                        }
                        if (__instance.CanEnrage && value.gameObject != null)
                        {
                            __instance.PreWindup(delay);
                        }
                    }
                }
            }

            return(false);
        }
Example #10
0
    private void GetHitPoint(string id)
    {
        var headPosition  = Camera.main.transform.position;
        var gazeDirection = Camera.main.transform.forward;

        RaycastHit hitInfo;

        if (Physics.Raycast(headPosition, gazeDirection, out hitInfo, 30.0f, SpatialMappingManager.SpatialMappingMask, QueryTriggerInteraction.Collide))
        {
            VisionInformation vi = visionInformationList.GetVisionInformationById(id);

            if (vi != null)
            {
                vi.SpatialHitPoint    = hitInfo.point;
                vi.SpatialHitRotation = Quaternion.LookRotation(gazeDirection);
            }
        }
    }
Example #11
0
        private static bool Prefix(Scp096 __instance)
        {
            if (__instance._flash.Enabled)
            {
                return(false);
            }
            Exiled.API.Features.Player scp096 = Exiled.API.Features.Player.Get(__instance.Hub);
            if (scp096.IsNPC() && !NPCS.Npc.Dictionary[__instance.Hub.gameObject].ProcessSCPLogic)
            {
                return(false);
            }
            Vector3 vector = __instance.Hub.transform.TransformPoint(Scp096._headOffset);

            foreach (System.Collections.Generic.KeyValuePair <GameObject, global::ReferenceHub> keyValuePair in global::ReferenceHub.GetAllHubs())
            {
                global::ReferenceHub          value = keyValuePair.Value;
                global::CharacterClassManager characterClassManager = value.characterClassManager;
                NPCS.Npc npc = NPCS.Npc.Dictionary.ContainsKey(keyValuePair.Key) ? NPCS.Npc.Dictionary[keyValuePair.Key] : null;
                if (characterClassManager.CurClass != global::RoleType.Spectator && !(value == __instance.Hub) && !characterClassManager.IsAnyScp() && Vector3.Dot((value.PlayerCameraReference.position - vector).normalized, __instance.Hub.PlayerCameraReference.forward) >= 0.1f && (npc == null || npc.ShouldTrigger096))
                {
                    VisionInformation visionInformation = VisionInformation.GetVisionInformation(value, vector, -0.1f, 60f, true, true, __instance.Hub.localCurrentRoomEffects);
                    if (visionInformation.IsLooking)
                    {
                        float delay = visionInformation.LookingAmount / 0.25f * (visionInformation.Distance * 0.1f);
                        if (!__instance.Calming)
                        {
                            __instance.AddTarget(value.gameObject);
                        }
                        if (__instance.CanEnrage && value.gameObject != null)
                        {
                            __instance.PreWindup(delay);
                        }
                    }
                }
            }
            return(false);
        }
Example #12
0
        private IEnumerator <float> Invisibility(Player player)
        {
            Log.Debug($"{nameof(Scp575)}: {nameof(Invisibility)}: Starting 268 loop for {player.Nickname}", Plugin.Singleton.Config.Debug);
            for (;;)
            {
                foreach (Player ply in Player.List)
                {
                    if (VisionInformation.GetVisionInformation(ply.ReferenceHub, player.Position, -2f, 40f, false, false, ply.ReferenceHub.localCurrentRoomEffects).IsLooking)
                    {
                        player.IsInvisible = false;
                        break;
                    }

                    player.IsInvisible = true;
                }

                if (!player.CurrentRoom.LightsOff)
                {
                    player.CurrentRoom.TurnOffLights(10f);
                }

                yield return(Timing.WaitForSeconds(0.25f));
            }
        }
 public static bool Prefix(PlayableScps.Scp096 __instance)
 {
     if (((PlayableScp)__instance).isLocalPlayer)
     {
         __instance._abilityManager.RunInputs();
         CursorManager.ChangeMouseVisibility(LockReason.Scp096, (__instance.Charging || (__instance.TryingNotToCry || __instance.PryingGate)) ? MouseVisibilityType.InvisibleButCantMove : MouseVisibilityType.Invisible, false);
         if (!__instance.PlayerState.IsOffensive() && !__instance._visionTargets.IsEmpty <TargetComponent>())
         {
             foreach (TargetComponent component in __instance._visionTargets)
             {
                 if (component != null)
                 {
                     component.IsTarget = false;
                 }
             }
             __instance._visionTargets.Clear();
         }
         if (__instance.TryingNotToCry && (__instance.Hub.fpc.PlySpeed != Vector2.zero))
         {
             Scp096InputMessage message = new Scp096InputMessage
             {
                 InputState = Scp096InputState.None
             };
             NetworkClient.Send <Scp096InputMessage>(message, 0);
         }
     }
     if (NetworkServer.active)
     {
         __instance.UpdateShield();
         __instance.UpdateEnrage();
         __instance.UpdateCharging();
         __instance.UpdatePry();
         foreach (GameObject obj2 in PlayerManager.players)
         {
             CharacterClassManager manager = obj2.GetComponent <CharacterClassManager>();
             if (manager == null || ((manager.CurClass != RoleType.Spectator) && !manager.IsAnyScp()))
             {
                 Player player = Player.Get(obj2);
                 if (player != null && Tracking.PlayersWithSubclasses.ContainsKey(player) &&
                     Tracking.PlayersWithSubclasses[player].Abilities.Contains(AbilityType.Disable096Trigger))
                 {
                     continue;
                 }
                 VisionInformation visionInformation = __instance.GetVisionInformation(obj2);
                 if (visionInformation.Looking)
                 {
                     __instance.ParseVisionInformation(visionInformation);
                 }
             }
         }
         foreach (KeyValuePair <GameObject, Door> pair in PlayableScps.Scp096.takenDoors)
         {
             if (pair.Value.isOpen)
             {
                 PlayableScps.Scp096 scp = PlayableScps.Scp096.Get096FromPlayerObject(pair.Key);
                 if (scp != null)
                 {
                     if (pair.Key == null)
                     {
                         PlayableScps.Scp096.takenDoors.Remove(pair.Key);
                     }
                     else
                     {
                         scp.ResetState();
                     }
                     break;
                 }
             }
         }
     }
     return(false);
 }