public static bool Prefix(Scp096PlayerScript __instance, float amount) { try { if (EventPlugin.Scp096PatchDisable) { return(true); } __instance._rageProgress += amount; if (__instance._rageProgress < (double)__instance.rageCurve.Evaluate(Mathf.Min(PlayerManager.players.Count, 20))) { return(false); } bool allow = true; Events.InvokeScp096Enrage(__instance, ref allow); if (allow == false) { return(false); } __instance.Networkenraged = Scp096PlayerScript.RageState.Panic; __instance._rageProgress = 15f; __instance.Invoke("StartRage", 5f); return(false); } catch (Exception e) { Log.Error($"SCP-096 Enrage event: {e}"); return(true); } }
private void CmdOpenDoor(GameObject doorID) { bool flag = false; Door component = doorID.GetComponent <Door>(); if (component.buttons.Count == 0) { flag = this.ChckDis(doorID.transform.position); } if (!flag) { foreach (GameObject gameObject in component.buttons) { if (flag = this.ChckDis(gameObject.transform.position)) { break; } } } if (flag) { Scp096PlayerScript component2 = base.GetComponent <Scp096PlayerScript>(); if (component.destroyedPrefab != null && (!component.isOpen || component.curCooldown > 0f) && component2.iAm096 && component2.enraged == Scp096PlayerScript.RageState.Enraged) { component.DestroyDoor(true); return; } if (component.permissionLevel.ToUpper() == "CHCKPOINT_ACC" && base.GetComponent <CharacterClassManager>().klasy[base.GetComponent <CharacterClassManager>().curClass].team == Team.SCP) { component.ChangeState(); return; } try { if (string.IsNullOrEmpty(component.permissionLevel)) { component.ChangeState(); } else { foreach (string a in this.inv.availableItems[this.inv.curItem].permissions) { if (a == component.permissionLevel) { component.ChangeState(); return; } } this.CallRpcDenied(doorID); } } catch { this.CallRpcDenied(doorID); } } }
static bool Prefix(Scp096PlayerScript __instance, ref Scp096PlayerScript.RageState b) { Player096EnrageEvent ev = new Player096EnrageEvent(); ev.Player = new SmodPlayer(__instance.gameObject); ev.RageProgress = 1f; ev.Script = __instance; ev.EnrageState = (EnrageState)((int)b); EventManager.Manager.HandleEvent <IEventHandler096Enrage>(ev); __instance.rageProgress = ev.RageProgress; b = (Scp096PlayerScript.RageState)((int)ev.EnrageState); return(ev.AllowEnrage); }
private void CmdShoot(string hitboxid, GameObject target, Vector3 hit_point, Vector3 hit_normal, string itemname) { if (this.curWeapon < 0) { return; } if (this.servercd == 0f) { this.CallRpcSyncAudio(this.weapons[this.curWeapon].shootAudio_aac, false); this.CallRpcSyncAnim("Shoot"); Scp096PlayerScript instance = Scp096PlayerScript.instance; this.servercd = 1f / this.weapons[this.curWeapon].fireRate * 0.9f; if (!string.IsNullOrEmpty(hitboxid)) { if (this.GetShootPermission(target.GetComponent <CharacterClassManager>())) { float num = this.weapons[this.curWeapon].damageOverDistance.Evaluate(Vector3.Distance((!TutorialManager.status) ? base.GetComponent <PlyMovementSync>().position : base.transform.position, target.transform.position)); if (hitboxid == "LEG") { num *= this.weapons[this.curWeapon].legDamageMultipiler; } if (hitboxid == "BODY") { num *= this.weapons[this.curWeapon].bodyDamageMultipiler; } if (hitboxid == "HEAD") { num *= this.weapons[this.curWeapon].headDamageMultipiler; } if (hitboxid == "SCP106") { num *= 0.1f; } base.GetComponent <PlayerStats>().HurtPlayer(new PlayerStats.HitInfo(num, "Gunman", "Weapon:" + this.curWeapon), target); } } else { this.CallRpcMakeHole(this.curWeapon, hit_point, Quaternion.FromToRotation(Vector3.up, hit_normal), itemname); } this.inv.items.ModifyDuration(this.curItem, this.inv.items[this.curItem].durability - 1f); } else { MonoBehaviour.print("Shot was too fast!"); } }
public static void InvokeScp096Calm(Scp096PlayerScript script, ref bool allow) { if (Scp096CalmEvent == null) { return; } Scp096CalmEvent ev = new Scp096CalmEvent() { Player = script.gameObject.GetPlayer(), Script = script, Allow = allow }; Scp096CalmEvent.InvokeSafely(ev); allow = ev.Allow; }
public static void InvokeScp096Calm(Scp096PlayerScript script, ref bool allow) { Scp096Calm scp096Calm = Scp096CalmEvent; if (scp096Calm == null) { return; } Scp096CalmEvent ev = new Scp096CalmEvent() { Player = Player.GetPlayer(script.gameObject), Script = script, Allow = allow }; scp096Calm?.Invoke(ref ev); allow = ev.Allow; }
public static bool Prefix(Scp096PlayerScript __instance) { if (!Configs.scp096_high_sensitive) { return(true); } foreach (var player in PlayerManager.players) { ReferenceHub hubs = ReferenceHub.GetHub(player); if (!hubs.characterClassManager.Scp173.SameClass && hubs.characterClassManager.Scp173.LookFor173(__instance.gameObject, true) && __instance._ccm.Scp173.LookFor173(player, false)) { __instance.IncreaseRage(Time.fixedDeltaTime); } } return(false); }
public static bool Prefix(Scp096PlayerScript __instance) { try { if (EventPlugin.Scp096PatchDisable) { return(true); } bool allow = true; Events.InvokeScp096Calm(__instance, ref allow); return(allow); } catch (Exception e) { Log.Error($"SCP-096 Calm event: {e}"); return(true); } }
public static bool Prefix(Scp096PlayerScript __instance) { if (__instance._processLookingQueue.IsEmpty()) { foreach (GameObject player in PlayerManager.players) { __instance._processLookingQueue.Enqueue(player); } } else { GameObject player = __instance._processLookingQueue.Dequeue(); if (player == null || !ReferenceHub.GetHub(player).characterClassManager.IsHuman() || player.GetComponent <FlashEffect>().blinded) { return(false); } Transform transform = player.GetComponent <Scp096PlayerScript>().camera.transform; float num = __instance.lookingTolerance.Evaluate(Vector3.Distance(transform.position, __instance.camera.transform.position)); Vector3 vector3; if (num >= 0.75) { Vector3 forward = transform.forward; vector3 = transform.position - __instance.camera.transform.position; Vector3 normalized = vector3.normalized; if (Vector3.Dot(forward, normalized) >= -(double)num) { return(false); } } Vector3 position = transform.transform.position; vector3 = __instance.camera.transform.position - transform.position; Vector3 normalized1 = vector3.normalized; int layerMask = __instance.layerMask; if (!Physics.Raycast(position, normalized1, out RaycastHit raycastHit, (__instance.gameObject.transform.position.y > 500f ? Plugin.MaxTriggerRangeSurface : Plugin.MaxTriggerRange), layerMask) || (raycastHit.collider.gameObject.layer != 24 || !raycastHit.collider.GetComponentInParent <Scp096PlayerScript>() == __instance)) { return(false); } __instance.IncreaseRage(Time.fixedDeltaTime); } return(false); }
public static bool Prefix(PlayerPositionManager __instance) { try { 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(players[index]); } if (__instance.transmitBuffer == null || __instance.transmitBuffer.Length < __instance.usedData) { __instance.transmitBuffer = new PlayerPositionData[__instance.usedData * 2]; } foreach (GameObject gameObject in players) { CharacterClassManager component1 = gameObject.GetComponent <CharacterClassManager>(); Array.Copy(__instance.receivedData, __instance.transmitBuffer, __instance.usedData); if (component1.CurClass == RoleType.Scp096 || component1.CurClass == RoleType.Scp173) { for (int i = 0; i < __instance.usedData; i++) { ReferenceHub hub = Plugin.GetPlayer(__instance.transmitBuffer[i].playerID.ToString()); if (hub.characterClassManager.CurClass != RoleType.Tutorial) { continue; } Scp049PlayerScript script = hub.GetComponent <Scp049PlayerScript>(); Vector3 fwd = script.plyCam.transform.forward; Vector3 pos = script.gameObject.transform.position; Vector3 position = component1.gameObject.transform.position; float angle = Vector3.Angle(fwd, (pos - position).normalized); Vector3 dir = (pos - position).normalized; Quaternion rot = Quaternion.LookRotation(dir); if (angle <= 80f) { __instance.transmitBuffer[i] = new PlayerPositionData(__instance.transmitBuffer[i].position, Quaternion.Inverse(rot).y, __instance.transmitBuffer[i].playerID, __instance.transmitBuffer[i].uses268); } } } if (component1.CurClass.Is939()) { for (int index = 0; index < __instance.usedData; ++index) { if (__instance.transmitBuffer[index].position.y < 800.0) { CharacterClassManager component2 = players[index].GetComponent <CharacterClassManager>(); if (component2.Classes.SafeGet(component2.CurClass).team != Team.SCP && component2.Classes.SafeGet(component2.CurClass).team != Team.RIP && !players[index] .GetComponent <Scp939_VisionController>() .CanSee(component1.GetComponent <Scp939PlayerScript>())) { __instance.transmitBuffer[index] = new PlayerPositionData(Vector3.up * 6000f, 0.0f, __instance.transmitBuffer[index].playerID); } } } } else if (component1.CurClass == RoleType.Scp096) { Scp096PlayerScript script = component1.GetComponent <Scp096PlayerScript>(); if (script.Networkenraged == Scp096PlayerScript.RageState.Enraged || script.Networkenraged == Scp096PlayerScript.RageState.Panic) { for (int i = 0; i < __instance.usedData; i++) { if (!Plugin.Scp096Targets.Contains(__instance.transmitBuffer[i].playerID)) { __instance.transmitBuffer[i] = new PlayerPositionData(Vector3.up * 6000f, 0f, __instance.transmitBuffer[i].playerID); } } } } else if (component1.CurClass != RoleType.Scp079 && component1.CurClass != RoleType.Spectator) { for (int index = 0; index < __instance.usedData; ++index) { if (__instance.transmitBuffer[index].uses268 || EXILED.EventPlugin.GhostedIds.Contains(__instance.transmitBuffer[index].playerID)) { __instance.transmitBuffer[index] = new PlayerPositionData(Vector3.up * 6000f, 0.0f, __instance.transmitBuffer[index].playerID); } } } NetworkConnection networkConnection = component1.netIdentity.isLocalPlayer ? NetworkServer.localConnection : component1.netIdentity.connectionToClient; if (__instance.usedData <= 20) { networkConnection.Send( new PlayerPositionManager.PositionMessage(__instance.transmitBuffer, (byte)__instance.usedData, 0), 1); } else { byte part; for (part = (byte)0; (int)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 e) { Plugin.Info($"TransmitData Error. {e}"); return(true); } }
public static bool Prefix(PlayerInteract __instance, GameObject doorId) { if (EventPlugin.DoorInteractionEventPatchDisable) { return(true); } try { bool allow = true; if (!__instance._playerInteractRateLimit.CanExecute() || __instance._hc.CufferId > 0 && !__instance.CanDisarmedInteract || (doorId == null || __instance._ccm.CurClass == RoleType.None || __instance._ccm.CurClass == RoleType.Spectator)) { return(false); } Door component1 = doorId.GetComponent <Door>(); if (component1 == null || (component1.buttons.Count == 0 ? (__instance.ChckDis(doorId.transform.position) ? 1 : 0) : (component1.buttons.Any(item => __instance.ChckDis(item.transform.position)) ? 1 : 0)) == 0) { return(false); } Scp096PlayerScript component2 = __instance.GetComponent <Scp096PlayerScript>(); if (component1.destroyedPrefab != null && (!component1.isOpen || component1.curCooldown > 0.0) && (component2.iAm096 && component2.enraged == Scp096PlayerScript.RageState.Enraged)) { if (!__instance._096DestroyLockedDoors && component1.locked && !__instance._sr.BypassMode) { return(false); } component1.DestroyDoor(true); } else { __instance.OnInteract(); if (__instance._sr.BypassMode) { try { Events.InvokeDoorInteract(__instance.gameObject, component1, ref allow); if (allow == false) { __instance.RpcDenied(doorId); return(false); } component1.ChangeState(); } catch (Exception e) { Log.Error($"Door interaction error: {e}"); if (allow) { component1.ChangeState(); } else { __instance.RpcDenied(doorId); } return(false); } } else if (string.Equals(component1.permissionLevel, "CHCKPOINT_ACC", StringComparison.OrdinalIgnoreCase) && __instance.GetComponent <CharacterClassManager>() .Classes.SafeGet(__instance.GetComponent <CharacterClassManager>().CurClass).team == Team.SCP) { try { Events.InvokeDoorInteract(__instance.gameObject, component1, ref allow); if (allow == false) { __instance.RpcDenied(doorId); return(false); } component1.ChangeState(); } catch (Exception e) { Log.Error($"Door interaction error: {e}"); if (allow) { component1.ChangeState(); } else { __instance.RpcDenied(doorId); } } } else { if (string.IsNullOrEmpty(component1.permissionLevel)) { if (component1.locked) { __instance.RpcDenied(doorId); return(false); } try { Events.InvokeDoorInteract(__instance.gameObject, component1, ref allow); if (allow == false) { __instance.RpcDenied(doorId); return(false); } component1.ChangeState(); return(false); } catch (Exception e) { Log.Error($"Door interaction error: {e}"); if (allow) { component1.ChangeState(); } else { __instance.RpcDenied(doorId); } return(false); } } Item item = __instance._inv.GetItemByID(__instance._inv.curItem); if (item != null && item.permissions.Contains(component1.permissionLevel)) { if (!component1.locked) { try { Events.InvokeDoorInteract(__instance.gameObject, component1, ref allow); if (allow == false) { __instance.RpcDenied(doorId); return(false); } component1.ChangeState(); } catch (Exception e) { Log.Error($"Door interaction error: {e}"); if (allow) { component1.ChangeState(); } else { __instance.RpcDenied(doorId); } } } else { __instance.RpcDenied(doorId); } } else { // Let the plugins decide in case the default options to open the door weren't met if (!component1.locked) { // Instead of passing allow as true, pass it as false allow = false; try { Events.InvokeDoorInteract(__instance.gameObject, component1, ref allow); if (allow == false) { __instance.RpcDenied(doorId); return(false); } component1.ChangeState(); } catch (Exception e) { Log.Error($"Door interaction error: {e}"); if (allow) { component1.ChangeState(); } else { __instance.RpcDenied(doorId); } } } else { __instance.RpcDenied(doorId); } } } } return(false); } catch (Exception e) { Log.Error($"DoorInteraction Error: {e}"); return(true); } }
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) { } }
public static bool Prefix(PlayerInteract __instance, GameObject doorId) { if (EventPlugin.DoorInteractionEventPatchDisable) { return(true); } bool allow = true; Door door = doorId.GetComponent <Door>(); try { if (!__instance._playerInteractRateLimit.CanExecute() || __instance._hc.CufferId > 0 && !__instance.CanDisarmedInteract || (doorId == null || __instance._ccm.CurClass == RoleType.None || __instance._ccm.CurClass == RoleType.Spectator)) { return(false); } if (door == null || (door.buttons.Count == 0 ? (__instance.ChckDis(doorId.transform.position) ? 1 : 0) : (door.buttons.Any(item => __instance.ChckDis(item.transform.position)) ? 1 : 0)) == 0) { return(false); } Scp096PlayerScript component2 = __instance.GetComponent <Scp096PlayerScript>(); if (door.destroyedPrefab != null && (!door.isOpen || door.curCooldown > 0.0) && (component2.iAm096 && component2.enraged == Scp096PlayerScript.RageState.Enraged)) { if (!__instance._096DestroyLockedDoors && door.locked && !__instance._sr.BypassMode) { return(false); } door.DestroyDoor(true); } else { __instance.OnInteract(); if (__instance._sr.BypassMode) { allow = true; } else if (string.Equals(door.permissionLevel, "CHCKPOINT_ACC", StringComparison.OrdinalIgnoreCase) && __instance.GetComponent <CharacterClassManager>().Classes.SafeGet(__instance.GetComponent <CharacterClassManager>().CurClass).team == Team.SCP) { allow = true; } else { Item item = __instance._inv.GetItemByID(__instance._inv.curItem); if (string.IsNullOrEmpty(door.permissionLevel)) { allow = !door.locked; } else if (item != null && item.permissions.Contains(door.permissionLevel)) { allow = !door.locked; } else { allow = false; } } Events.InvokeDoorInteract(__instance.gameObject, door, ref allow); if (!allow) { __instance.RpcDenied(doorId); return(false); } door.ChangeState(); } return(false); } catch (Exception exception) { Log.Error($"DoorInteractionEvent error: {exception}"); if (allow) { door.ChangeState(); } else { __instance.RpcDenied(doorId); } return(false); } }