public static bool Prefix(Scp096 __instance) { __instance.PlayerState = Scp096PlayerState.Enraged; __instance._attackCooldown = SCP096Re.instance.Config.re096_attack_cooldown; __instance._attacking = false; return(false); }
private static bool Prefix(Scp096 __instance, DoorVariant door) { if (door.GetExactState() >= 1f) { return(false); } IDamageableDoor damageableDoor; PryableDoor gate; if ((damageableDoor = (door as IDamageableDoor)) != null) { if (!damageableDoor.IsDestroyed && door.GetExactState() < 1f && __instance._lastChargedDamageableDoor != damageableDoor && MainClass.singleton.Cfg.Scp.canScp096destroyDoor) { damageableDoor.ServerDamage(250f, DoorDamageType.Scp096); __instance._lastChargedDamageableDoor = damageableDoor; return(false); } } else if ((gate = (door as PryableDoor)) != null && door.GetExactState() == 0f && !door.TargetState) { __instance.Hub.fpc.NetworkmovementOverride = Vector2.zero; __instance._chargeCooldown = 0f; __instance.PryGate(gate); } return(false); }
private static bool Prefix(Scp096 __instance) { var ev = new EnragingEventArgs(__instance, API.Features.Player.Get(__instance.Hub.gameObject)); Handlers.Scp096.OnEnraging(ev); if (!ev.IsAllowed) { return(false); } if (__instance.Enraged) { __instance.AddReset(); } else { __instance.SetMovementSpeed(12f); __instance.SetJumpHeight(10f); __instance.PlayerState = Scp096PlayerState.Enraged; __instance.EnrageTimeLeft = __instance.EnrageTime; } return(false); }
private static bool Prefix(Scp096 __instance) { var ev = new EnragingEventArgs(__instance, API.Features.Player.Get(__instance.Hub)); Handlers.Scp096.OnEnraging(ev); return(ev.IsAllowed); }
private static bool Prefix(Scp096 __instance) { var ev = new CalmingDownEventArgs(__instance, API.Features.Player.Get(__instance.Hub.gameObject)); Handlers.Scp096.OnCalmingDown(ev); return(ev.IsAllowed); }
public static bool Prefix(Scp096 __instance) { __instance.EndCharge(); __instance.SetMovementSpeed(0f); __instance.SetJumpHeight(4f); __instance.ResetShield(); __instance.PlayerState = Scp096PlayerState.Calming; __instance._calmingTime = SCP096Re.instance.Config.re096_calm_time; __instance._targets.Clear(); return(false); }
public static bool Prefix(Scp096 __instance, bool force) { if (!force && (__instance.IsPreWindup || !__instance.CanEnrage)) { return(false); } __instance.SetMovementSpeed(0f); __instance.SetJumpHeight(4f); __instance.PlayerState = Scp096PlayerState.Enraging; __instance._enrageWindupRemaining = SCP096Re.instance.Config.re096_enrage_windup_time; return(false); }
public static bool Prefix(Scp096 __instance) { if (!__instance.CanCharge) { return(false); } __instance.SetMovementSpeed(25f); __instance._chargeTimeRemaining = SCP096Re.instance.Config.re096_charge_time; __instance._chargeCooldown = SCP096Re.instance.Config.re096_charge_cooldown; __instance.PlayerState = Scp096PlayerState.Charging; __instance.Hub.fpc.NetworkmovementOverride = new Vector2(1f, 0f); return(false); }
private static bool Prefix(Scp096 __instance, PryableDoor gate) { if (__instance.Charging && __instance.Enraged && (!gate.TargetState /* && gate.doorType == Door.DoorTypes.HeavyGate */)) { var ev = new StartPryingGateEventArgs(API.Features.Player.Get(__instance.Hub), gate); Handlers.Scp096.OnStartPryingGate(ev); return(ev.IsAllowed); } return(false); }
public static bool Prefix(Scp096 __instance, PlayerStats.HitInfo info) { if (info.GetDamageType().isWeapon&& SCP096Re.instance.Config.re096_damage_add_target) { GameObject playerObject = info.GetPlayerObject(); if (playerObject != null && __instance.CanEnrage) { __instance.AddTarget(playerObject); __instance.Windup(false); } } __instance.TimeUntilShieldRecharge = 10f; return(false); }
public static bool Prefix(Scp096 __instance, PlayerStats.HitInfo info) { try { var allow = true; Events.InvokeScp096AddTarget(info.RHub.GetPlayer(), __instance.GetPlayer(), __instance.PlayerState, ref allow); return(allow); } catch (Exception e) { Log.Info($"Scp096AddTarget Event Error: {e}"); return(true); } }
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); }
public static bool Prefix(Scp096 __instance, GameObject target) { ReferenceHub hub = ReferenceHub.GetHub(target); if (!__instance.CanReceiveTargets || hub == null || __instance._targets.Contains(hub)) { return(false); } if (!__instance._targets.IsEmpty <ReferenceHub>()) { __instance.EnrageTimeLeft += SCP096Re.instance.Config.re096_target_enrage_add; } hub.hints.Show(new TextHint(SCP096Re.instance.Config.re096_target_hint, new HintParameter[] { new StringHintParameter("") }, HintEffectPresets.FadeInAndOut(0.25f, 1f, 0f), 5f)); __instance._targets.Add(hub); __instance.AdjustShield(SCP096Re.instance.Config.re096_shield_per_target); return(false); }
private static bool Prefix(Scp096 __instance, GameObject target) { ReferenceHub hub = ReferenceHub.GetHub(target); if (!__instance.CanReceiveTargets || hub == null || __instance._targets.Contains(hub)) { return(false); } if (!__instance._targets.IsEmpty()) { __instance.AddReset(); } __instance._targets.Add(hub); __instance.AdjustShield(Instance.Config.EnableCustomScp096Shield ? Instance.Config.Scp096Ahp : 200); return(false); }
public static bool Prefix(Scp096 __instance, ReferenceHub player) { if (player.characterClassManager.IsAnyScp()) { return(false); } bool flag = __instance._targets.Contains(player); if (__instance.Hub.playerStats.HurtPlayer(new PlayerStats.HitInfo(flag ? 9696f : 35f, player.LoggedNameFromRefHub(), DamageTypes.Scp096, __instance.Hub.queryProcessor.PlayerId), player.gameObject)) { __instance._targets.Remove(player); NetworkServer.SendToClientOfPlayer <Scp096HitmarkerMessage>(__instance.Hub.characterClassManager.netIdentity, new Scp096HitmarkerMessage(1.35f)); NetworkServer.SendToAll <Scp096OnKillMessage>(default(Scp096OnKillMessage), 0); } if (flag && !SCP096Re.instance.Config.re096_charge_targets_only) { //if (Plugin.Config.GetBool("096_charge_stop_by_player", false)) __instance.EndChargeNextFrame(); } return(false); }
public static bool Prefix(Scp096 __instance, GameObject target) { ReferenceHub hub = ReferenceHub.GetHub(target); if (__instance.CanReceiveTargets && hub != null && !__instance._targets.Contains(hub)) { if (!__instance._targets.IsEmpty <ReferenceHub>()) { __instance.EnrageTimeLeft += __instance.EnrageTimePerReset; } __instance._targets.Add(hub); if (CreativeToolbox.ConfigRef.Config.EnableCustomScp096Shield) { __instance.AdjustShield(CreativeToolbox.ConfigRef.Config.Scp096Ahp); } else { __instance.AdjustShield(250); } } return(false); }
public static bool Prefix(Scp096 __instance, GameObject target) { ReferenceHub hub = ReferenceHub.GetHub(target); if (!__instance.CanReceiveTargets || hub == null || __instance._targets.Contains(hub)) { return(false); } if (!__instance._targets.IsEmpty <ReferenceHub>()) { __instance.AddReset(); } __instance._targets.Add(hub); if (CreativeToolbox.ConfigRef.Config.EnableCustomScp096Shield) { __instance.AdjustShield(CreativeToolbox.ConfigRef.Config.Scp096Ahp); } else { __instance.AdjustShield(200); } return(false); }
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); }
/// <summary> /// Initializes a new instance of the <see cref="CalmingDownEventArgs"/> class. /// </summary> /// <param name="scp096">The <see cref="Scp096"/> instance.</param> /// <param name="player">The player who's controlling SCP-096.</param> /// <param name="isAllowed">Indicates whether the event can be executed or not.</param> public CalmingDownEventArgs(Scp096 scp096, Player player, bool isAllowed = true) : base(scp096, player, isAllowed) { }
private static bool Prefix(PlayerPositionManager __instance) { try { ++__instance._frame; if (__instance._frame != __instance._syncFrequency) { return(false); } __instance._frame = 0; List <GameObject> players = PlayerManager.players; __instance._usedData = players.Count; if (__instance._receivedData == null || __instance._receivedData.Length < __instance._usedData) { __instance._receivedData = new PlayerPositionData[__instance._usedData * 2]; } for (int index = 0; index < __instance._usedData; ++index) { __instance._receivedData[index] = new PlayerPositionData(ReferenceHub.GetHub(players[index])); } if (__instance._transmitBuffer == null || __instance._transmitBuffer.Length < __instance._usedData) { __instance._transmitBuffer = new PlayerPositionData[__instance._usedData * 2]; } foreach (GameObject gameObject in players) { Player player = Player.Get(gameObject); Array.Copy(__instance._receivedData, __instance._transmitBuffer, __instance._usedData); if (player.Role.Is939()) { for (int index = 0; index < __instance._usedData; ++index) { if (__instance._transmitBuffer[index].position.y < 800.0) { ReferenceHub hub2 = ReferenceHub.GetHub(players[index]); if (hub2.characterClassManager.CurRole.team != Team.SCP && hub2.characterClassManager.CurRole.team != Team.RIP && !players[index] .GetComponent <Scp939_VisionController>() .CanSee(player.ReferenceHub.characterClassManager.Scp939)) { __instance._transmitBuffer[index] = new PlayerPositionData(Vector3.up * 6000f, 0.0f, __instance._transmitBuffer[index].playerID); } } } } else if (player.Role != RoleType.Spectator && player.Role != RoleType.Scp079) { for (int index = 0; index < __instance._usedData; ++index) { PlayerPositionData ppd = __instance._transmitBuffer[index]; Player currentTarget = Player.Get(players[index]); Scp096 scp096 = player.ReferenceHub.scpsController.CurrentScp as Scp096; bool canSee = true; if (currentTarget?.ReferenceHub == null) { continue; } if (currentTarget.IsInvisible || player.TargetGhosts.Contains(ppd.playerID)) { canSee = false; } Vector3 vector3 = __instance._transmitBuffer[index].position - player.ReferenceHub.playerMovementSync.RealModelPosition; if (Math.Abs(vector3.y) > 35.0) { canSee = false; } else { float sqrMagnitude = vector3.sqrMagnitude; if (player.ReferenceHub.playerMovementSync.RealModelPosition.y < 800.0) { if (sqrMagnitude >= 1764.0) { canSee = false; continue; } } else if (sqrMagnitude >= 7225.0) { canSee = false; continue; } if (ReferenceHub.TryGetHub(__instance._transmitBuffer[index].playerID, out ReferenceHub hub2)) { if (player.ReferenceHub.scpsController.CurrentScp is Scp096 currentScp && currentScp.Enraged && (!currentScp.HasTarget(hub2) && hub2.characterClassManager.CurRole.team != Team.SCP)) { canSee = false; } else if (hub2.playerEffectsController.GetEffect <Scp268>().Enabled) { bool flag = false; if (scp096 != null) { flag = scp096.HasTarget(hub2); } if (player.ReferenceHub.characterClassManager.CurClass != RoleType.Scp079 && player.ReferenceHub.characterClassManager.CurClass != RoleType.Spectator && !flag) { canSee = false; } } } if (!canSee) { ppd = new PlayerPositionData(Vector3.up * 6000f, 0.0f, ppd.playerID); } __instance._transmitBuffer[index] = ppd; } } } NetworkConnection networkConnection = player.ReferenceHub.characterClassManager.netIdentity.isLocalPlayer ? NetworkServer.localConnection : player.ReferenceHub.characterClassManager.netIdentity.connectionToClient; if (__instance._usedData <= 20) { networkConnection.Send( new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, (byte)__instance._usedData, 0), 1); } else { byte part; for (part = 0; part < __instance._usedData / 20; ++part) { networkConnection.Send(new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, 20, part), 1); } byte count = (byte)(__instance._usedData % (part * 20)); if (count > 0) { networkConnection.Send(new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, count, part), 1); } } } return(false); }
public static bool Prefix(Scp096 __instance) { if (!__instance.CanAttack) { return(false); } __instance._leftAttack = !__instance._leftAttack; __instance._attacking = true; __instance.PlayerState = Scp096PlayerState.Attacking; Transform playerCameraReference = __instance.Hub.PlayerCameraReference; Collider[] array = Physics.OverlapSphere(playerCameraReference.position + playerCameraReference.forward * 1.25f, SCP096Re.instance.Config.re096_attack_radius, LayerMask.GetMask(new string[] { "PlyCenter", "Door", "Glass" })); HashSet <GameObject> hashSet = new HashSet <GameObject>(); float num = 0f; foreach (Collider collider in array) { Door componentInParent = collider.GetComponentInParent <Door>(); if (componentInParent != null) { componentInParent.DestroyDoor(true); if (componentInParent.destroyed && num < 0.5f) { num = 1f; } } else { BreakableWindow componentInParent2 = collider.GetComponentInParent <BreakableWindow>(); if (componentInParent2 != null && num < 0.25f) { componentInParent2.ServerDamageWindow(500f); num = 0.5f; break; } ReferenceHub componentInParent3 = collider.GetComponentInParent <ReferenceHub>(); if (!(componentInParent3 == null) && !(componentInParent3 == __instance.Hub) && hashSet.Add(componentInParent3.gameObject) && !Physics.Linecast(__instance.Hub.transform.position, componentInParent3.transform.position, LayerMask.GetMask(new string[] { "Default", "Door", "Glass" }))) { num = 1.2f; if ((__instance._targets.Contains(componentInParent3) && SCP096Re.instance.Config.re096_hurt_targets_only) || !SCP096Re.instance.Config.re096_hurt_targets_only) { if (__instance.Hub.playerStats.HurtPlayer(new PlayerStats.HitInfo(9696f, __instance.Hub.LoggedNameFromRefHub(), DamageTypes.Scp096, componentInParent3.queryProcessor.PlayerId), componentInParent3.gameObject)) { num = 1.35f; __instance._targets.Remove(componentInParent3); NetworkServer.SendToAll <Scp096OnKillMessage>(default(Scp096OnKillMessage), 0); } } } } } if (num > 0f) { NetworkServer.SendToClientOfPlayer <Scp096HitmarkerMessage>(__instance.Hub.characterClassManager.netIdentity, new Scp096HitmarkerMessage(num)); } __instance._attackDuration = 0.5f; return(false); }
public static bool Prefix(Scp096 __instance, ref float __result) { __result = SCP096Re.instance.Config.re096_max_shield; return(false); }
private static bool Prefix(PlayerPositionManager __instance) { try { ++__instance._frame; if (__instance._frame != __instance._syncFrequency) { return(false); } __instance._frame = 0; List <GameObject> players = PlayerManager.players; __instance._usedData = players.Count; if (__instance._receivedData == null || __instance._receivedData.Length < __instance._usedData) { __instance._receivedData = new PlayerPositionData[__instance._usedData * 2]; } for (int index = 0; index < __instance._usedData; ++index) { __instance._receivedData[index] = new PlayerPositionData(ReferenceHub.GetHub(players[index])); } if (__instance._transmitBuffer == null || __instance._transmitBuffer.Length < __instance._usedData) { __instance._transmitBuffer = new PlayerPositionData[__instance._usedData * 2]; } foreach (GameObject gameObject in players) { Player player = Player.Get(gameObject); if (player == null) { continue; } Array.Copy(__instance._receivedData, __instance._transmitBuffer, __instance._usedData); for (int index = 0; index < __instance._usedData; ++index) { PlayerPositionData ppd = __instance._transmitBuffer[index]; Player currentTarget = Player.Get(players[index]); Scp096 scp096 = player.ReferenceHub.scpsController.CurrentScp as Scp096; bool canSee = true; if (currentTarget == null) { continue; } if (currentTarget.IsInvisible || player.TargetGhosts.Contains(ppd.playerID)) { canSee = false; } else if (player.Role.Is939() && ppd.position.y < 800.0) { if (currentTarget.Team != Team.SCP && currentTarget.Team != Team.RIP && !currentTarget.GameObject.GetComponent <Scp939_VisionController>().CanSee(player.ReferenceHub.characterClassManager.Scp939)) { canSee = false; } } else if (player.Role != RoleType.Scp079 && player.Role != RoleType.Spectator) { if (Math.Abs(ppd.position.y - player.Position.y) > 35) { canSee = false; } else { if (ReferenceHub.TryGetHub(ppd.playerID, out ReferenceHub hub)) { if (scp096 != null && scp096.Enraged && !scp096.HasTarget(hub) && hub.characterClassManager.CurRole.team != Team.SCP) { canSee = false; } else if (hub.playerEffectsController.GetEffect <Scp268>().Enabled&& (scp096 == null || !scp096.HasTarget(hub))) { canSee = false; } } } } if (!canSee) { ppd = new PlayerPositionData(Vector3.up * 6000f, 0.0f, ppd.playerID); } __instance._transmitBuffer[index] = ppd; } NetworkConnection networkConnection = player.ReferenceHub.characterClassManager.netIdentity.isLocalPlayer ? NetworkServer.localConnection : player.ReferenceHub.characterClassManager.netIdentity.connectionToClient; if (__instance._usedData <= 20) { networkConnection.Send(new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, (byte)__instance._usedData, 0), 1); } else { byte part; for (part = 0; part < __instance._usedData / 20; ++part) { networkConnection.Send(new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, 20, part), 1); } byte count = (byte)(__instance._usedData % (part * 20)); if (count > 0) { networkConnection.Send(new PlayerPositionManager.PositionMessage(__instance._transmitBuffer, count, part), 1); } } } return(false); } catch (Exception exception) { Log.Error($"GhostMode error: {exception}"); return(true); } }
/// <summary> /// Initializes a new instance of the <see cref="EnragingEventArgs"/> class. /// </summary> /// <param name="scp096"><inheritdoc cref="Scp096"/></param> /// <param name="player"><inheritdoc cref="Player"/></param> /// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param> public EnragingEventArgs(Scp096 scp096, Player player, bool isAllowed = true) { Scp096 = scp096; Player = player; IsAllowed = isAllowed; }