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; }
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); }
private void OnGetDataCompleted(string id, string json) { VisionInformation vi = visionInformationList.GetVisionInformationById(id); if (vi != null) { vi.Tags = JsonUtility.FromJson <Tags>(json); vi.IsDirty = true; } }
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); } }
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); }
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); } }
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 }
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; }
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); }
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); } } }
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); }
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); }