// this must be called on round start btw public static void InitializeStalky106() { Scp106PlayerScript.stalky106LastTick = 0f; Scp106PlayerScript.stalkyCd = Time.time + ConfigFile.ModConfig.MattyMod.SCP106.InitCooldown; Scp106PlayerScript.disableFor = Time.time + 12f; Timing.RunCoroutine(Scp106PlayerScript.StalkyCooldownAnnounce(ConfigFile.ModConfig.MattyMod.SCP106.InitCooldown), 1); }
private static bool Prefix(Scp106PlayerScript __instance) { var allow = true; Events.InvokeScp106CreatePortalEvent(__instance.gameObject.GetPlayer(), ref allow); return(allow); }
private static bool Prefix(Scp106PlayerScript __instance) { if (!__instance._interactRateLimit.CanExecute(false) || !__instance.GetComponent <FallDamage>().isGrounded) { return(false); } var ev = new TeleportingEventArgs(API.Features.Player.Get(__instance.gameObject), __instance.portalPosition); Scp106.OnTeleporting(ev); __instance.portalPosition = ev.PortalPosition; if (!ev.IsAllowed) { return(false); } if (__instance.iAm106 && __instance.portalPosition != Vector3.zero && !__instance.goingViaThePortal) { Timing.RunCoroutine(__instance._DoTeleportAnimation(), Segment.Update); } return(true); }
public static bool Prefix(Scp106PlayerScript __instance) { try { if (!__instance._interactRateLimit.CanExecute(true)) { return(false); } if (!__instance.GetComponent <FallDamage>().isGrounded) { return(false); } bool allow = true; Events.InvokeScp106Teleport(__instance.gameObject, __instance.portalPosition, ref allow); if (!allow) { return(false); } if (__instance.iAm106 && __instance.portalPosition != Vector3.zero && !__instance.goingViaThePortal) { Timing.RunCoroutine(__instance._DoTeleportAnimation(), Segment.Update); } return(true); } catch (Exception e) { Log.Error($"SCP106Portal Error: {e}"); return(true); } }
// Token: 0x0600122F RID: 4655 private IEnumerator <float> StalkCoroutine(Broadcast bc) { List <GameObject> list = new List <GameObject>(); foreach (GameObject gameObject in PlayerManager.players) { if (gameObject.GetComponent <CharacterClassManager>().CurClass != RoleType.ChaosInsurgency && gameObject.GetComponent <CharacterClassManager>().CurClass != RoleType.Spectator && gameObject.GetComponent <CharacterClassManager>().CurClass != RoleType.Tutorial && gameObject.GetComponent <CharacterClassManager>().IsHuman()) { list.Add(gameObject); } } if (list.Count < 1) { bc.TargetAddElement(base.connectionToClient, "No valid player found.", 4U, false); yield break; } Scp106PlayerScript.stalky106LastTick = Time.time; GameObject gameObject2; RaycastHit raycastHit; do { int index = UnityEngine.Random.Range(0, list.Count); gameObject2 = list[index]; Physics.Raycast(new Ray(gameObject2.transform.position, -Vector3.up), out raycastHit, 10f, this.teleportPlacementMask); if (Vector3.Distance(gameObject2.transform.position, new Vector3(0f, -1998f, 0f)) < 40f) { gameObject2 = null; raycastHit.point = Vector3.zero; } list.RemoveAt(index); }while (raycastHit.point.Equals(Vector3.zero) && list.Count > 0); if (gameObject2 == null) { bc.TargetAddElement(base.connectionToClient, "No valid player found.", 4U, false); yield break; } if (raycastHit.point.Equals(Vector3.zero)) { bc.TargetAddElement(base.connectionToClient, "An error has ocurred. Try it again in a few seconds.", 4U, false); yield break; } this.MovePortal(raycastHit.point - Vector3.up); Scp106PlayerScript.stalkyCd = Time.time + ConfigFile.ModConfig.MattyMod.SCP106.Cooldown; Timing.RunCoroutine(Scp106PlayerScript.StalkyCooldownAnnounce(ConfigFile.ModConfig.MattyMod.SCP106.Cooldown), 1); Scp106PlayerScript.stalky106LastTick = Time.time; Scp106PlayerScript.disableFor = Time.time + 10f; string text = ConfigFile.ModConfig.MattyMod.SCP106.Messages.Stalk; text = text.Replace("\\n", Environment.NewLine); text = text.Replace("$time", ConfigFile.ModConfig.MattyMod.SCP106.Cooldown.ToString()); text = text.Replace("$name", gameObject2.GetComponent <NicknameSync>().MyNick); text = text.Replace("$class", Scp106PlayerScript.parser[(int)gameObject2.GetComponent <CharacterClassManager>().CurClass]); bc.TargetAddElement(base.connectionToClient, text, 5U, false); yield break; }
private static IEnumerator <float> ForceTeleportLarry(Scp106PlayerScript script) { yield return(MEC.Timing.WaitForSeconds(StalkyConfigs.autoDelay)); do { script.CallCmdUsePortal(); yield return(MEC.Timing.WaitForOneFrame); }while (!script.goingViaThePortal); }
public static bool Prefix(Scp106PlayerScript __instance) { if (ForceDisable) { return(true); } if (!__instance.GetComponent <FallDamage>().isGrounded || !__instance.iAm106 || __instance.goingViaThePortal) { return(false); } return(StalkyMethods.Stalk(__instance)); }
private static bool Prefix(Scp106PlayerScript __instance) { try { Server.Get.Events.Scp.Scp106.InvokePortalCreateEvent(__instance.GetPlayer(), out var allow); return(allow); } catch (Exception e) { Logger.Get.Error($"Synapse-Event: Scp106PortalCreate failed!!\n{e}\nStackTrace:\n{e.StackTrace}"); return(true); } }
public void Explode(bool inWarhead) { bool flag = this.health > 0 && (inWarhead || base.transform.position.y < 900f); if (this.ccm.curClass == 3) { Scp106PlayerScript component = base.GetComponent <Scp106PlayerScript>(); component.DeletePortal(); if (component.goingViaThePortal) { flag = true; } } if (flag) { this.HurtPlayer(new PlayerStats.HitInfo(999999f, "WORLD", "NUKE"), base.gameObject); } }
public static IEnumerator <float> PortalProcedure(Scp106PlayerScript script, Vector3 pos) { yield return(MEC.Timing.WaitForOneFrame); Scp106PlayerScript component = PlayerManager.localPlayer.GetComponent <Scp106PlayerScript>(); component.NetworkportalPosition = pos; Animator anim = component.portalPrefab.GetComponent <Animator>(); anim.SetBool("activated", false); component.portalPrefab.transform.position = pos; if (StalkyConfigs.autoTp) { Stalky106.Coroutines.Add(MEC.Timing.RunCoroutine(ForceTeleportLarry(script), MEC.Segment.FixedUpdate)); } yield return(MEC.Timing.WaitForSeconds(1f)); anim.SetBool("activated", true); }
internal static bool Stalk(Scp106PlayerScript scp106Script) { // If Stalky is disabled by force, don't even create a portal for the guy // Avoids 1-frame trick to (probably unintentionally) "cancel" the Stalk. if (StalkyMethods.disableFor > Time.time) { return(false); } float timeDifference = Time.time - StalkyMethods.stalky106LastTime; float cdAux = StalkyMethods.StalkyCooldown; Broadcast bc = PlayerManager.localPlayer.GetComponent <Broadcast>(); if (timeDifference > 6f) { StalkyMethods.stalky106LastTime = Time.time; if (cdAux < 0) { bc.TargetClearElements(scp106Script.connectionToClient); bc.TargetAddElement(scp106Script.connectionToClient, StalkyConfigs.doubleClick, 6u, false); } return(true); } else { bc.TargetClearElements(scp106Script.connectionToClient); if (cdAux > 0) { StalkyMethods.stalky106LastTime = Time.time; int i = 0; for (; i < 5 && cdAux > i; i++) { bc.TargetAddElement(scp106Script.connectionToClient, StalkyConfigs.cooldownmsg.Replace("$time", (cdAux - i).ToString("00")), 1u, false); } StalkyMethods.disableFor = Time.time + i + 1; return(true); } StalkyMethods.disableFor = Time.time + 4; Stalky106.Coroutines.Add(MEC.Timing.RunCoroutine(StalkyMethods.StalkCoroutine(scp106Script, bc), MEC.Segment.Update)); return(false); } }
/// <summary> /// Prefix of <see cref="Scp106PlayerScript.CallCmdMakePortal"/>. /// </summary> /// <param name="__instance">The <see cref="Scp106PlayerScript"/> instance.</param> /// <returns>Returns a value indicating whether the original method has to be executed or not.</returns> private static bool Prefix(Scp106PlayerScript __instance) { if (!__instance._interactRateLimit.CanExecute(true) || !__instance.GetComponent <FallDamage>().isGrounded) { return(false); } bool rayCastHit = Physics.Raycast(new Ray(__instance.transform.position, -__instance.transform.up), out RaycastHit raycastHit, 10f, __instance.teleportPlacementMask); var ev = new CreatingPortalEventArgs(API.Features.Player.Get(__instance.gameObject), raycastHit.point - Vector3.up); Scp106.OnCreatingPortal(ev); Debug.DrawRay(__instance.transform.position, -__instance.transform.up, Color.red, 10f); if (ev.IsAllowed && __instance.iAm106 && !__instance.goingViaThePortal && rayCastHit) { __instance.SetPortalPosition(ev.Position); } return(false); }
public static bool Prefix(Scp106PlayerScript __instance) { if (EventPlugin.Scp106CreatedPortalEventDisable) { return(true); } try { if (!__instance._interactRateLimit.CanExecute(true) || !__instance.GetComponent <FallDamage>().isGrounded) { return(false); } bool rayCastHit = Physics.Raycast(new Ray(__instance.transform.position, -__instance.transform.up), out RaycastHit raycastHit, 10f, __instance.teleportPlacementMask); bool allow = true; Vector3 portalPosition = raycastHit.point - Vector3.up; Events.InvokeScp106CreatedPortal(__instance.gameObject, ref allow, ref portalPosition); Debug.DrawRay(__instance.transform.position, -__instance.transform.up, Color.red, 10f); if (allow && __instance.iAm106 && !__instance.goingViaThePortal && rayCastHit) { __instance.SetPortalPosition(portalPosition); } return(false); } catch (Exception exception) { Log.Error($"Scp106CreatedPortalEvent error: {exception}"); return(true); } }
private static void SetPortal(Scp106PlayerScript script, Vector3 pos, Vector3 pos2) { }
private static bool Prefix(Scp106PlayerScript __instance, GameObject ply, int t) { try { if (!__instance._iawRateLimit.CanExecute(true) || ply == null) { return(false); } var scp = __instance.GetPlayer(); var player = ply.GetPlayer(); if (player == null || player.GodMode || !ServerTime.CheckSynchronization(t) || !__instance.iAm106 || Vector3.Distance(scp.Position, player.Position) >= 3f) { return(false); } if (!scp.WeaponManager.GetShootPermission(player.ClassManager)) { return(false); } EventHandler.Get.Scp.InvokeScpAttack(scp, player, Api.Enum.ScpAttackType.Scp106_Grab, out var allow); if (!allow) { return(false); } scp.ClassManager.RpcPlaceBlood(player.Position, 1, 2f); __instance.TargetHitMarker(scp.Connection); if (Scp106PlayerScript._blastDoor.isClosed) { player.Hurt(500, DamageTypes.Scp106, scp); } else { player.Hurt(40, DamageTypes.Scp106, scp); player.Position = Vector3.down * 1998.5f; foreach (var scp079 in Scp079PlayerScript.instances) { var room = player.ClassManager.Scp079.GetOtherRoom(); var filter = new Scp079Interactable.InteractableType[] { Scp079Interactable.InteractableType.Door, Scp079Interactable.InteractableType.Light, Scp079Interactable.InteractableType.Lockdown, Scp079Interactable.InteractableType.Tesla, Scp079Interactable.InteractableType.ElevatorUse, }; var flag = true; foreach (var interaction in scp079.ReturnRecentHistory(12f, filter)) { foreach (var zoneRoom in interaction.interactable.currentZonesAndRooms) { if (zoneRoom.currentZone == room.currentZone && zoneRoom.currentRoom == room.currentRoom) { flag = true; } } } if (flag) { scp079.RpcGainExp(ExpGainType.PocketAssist, player.RoleType); } } if (player.RoleType == RoleType.Spectator) { return(false); } EventHandler.Get.Scp.Scp106.InvokePocketDimensionEnterEvent(player, scp, ref allow); if (!allow) { return(false); } scp.Scp106Controller.PocketPlayers.Add(player); player.PlayerEffectsController.GetEffect <CustomPlayerEffects.Corroding>().IsInPd = true; player.GiveEffect(Api.Enum.Effect.Corroding); } return(false); } catch (Exception e) { Logger.Get.Error($"Synapse-Event: PocketDimEnter/ScpAttackEvent(106) failed!!\n{e}\nStackTrace:\n{e.StackTrace}"); return(true); } }
public static IEnumerator <float> StalkCoroutine(Scp106PlayerScript script, Broadcast bc) { List <ReferenceHub> list = new List <ReferenceHub>(); foreach (ReferenceHub rh in Player.GetHubs()) { Role role = rh.characterClassManager.Classes.SafeGet(rh.characterClassManager.CurClass); if (!alwaysIgnore.Contains(role.roleId) && !StalkyConfigs.ignoreRoles.Contains((int)role.roleId) && !StalkyConfigs.ignoreTeams.Contains((int)EXILED.Plugin.GetTeam(role.roleId))) { list.Add(rh); } } if (list.IsEmpty()) { bc.TargetAddElement(script.connectionToClient, StalkyConfigs.noTargetsLeft, 4U, false); yield break; } // Wait one frame after computing the players yield return(MEC.Timing.WaitForOneFrame); stalky106LastTime = Time.time; ReferenceHub target; Vector3 portalPosition; do { int index = UnityEngine.Random.Range(0, list.Count); target = list[index]; Physics.Raycast(new Ray(target.transform.position, -Vector3.up), out RaycastHit raycastHit, 10f, script.teleportPlacementMask); // If the raycast isn't succesful, the point will be (0, 0, 0), basically Vector3.zero portalPosition = raycastHit.point; list.RemoveAt(index); }while ((portalPosition.Equals(Vector3.zero) || Vector3.Distance(portalPosition, Stalky106.pocketDimension) < 40f) && list.Count > 0); if (target == null || (Vector3.Distance(portalPosition, Stalky106.pocketDimension) < 40f)) { bc.TargetAddElement(script.connectionToClient, StalkyConfigs.noTargetsLeft, 4U, false); yield break; } if (portalPosition.Equals(Vector3.zero)) { bc.TargetAddElement(script.connectionToClient, StalkyConfigs.error, 4U, false); yield break; } // Wait another frame after the while loops that goes over players. // Only useful for +100 player servers and the potatest server in this case, but it goes to show how to do these. yield return(MEC.Timing.WaitForOneFrame); Stalky106.Coroutines.Add(MEC.Timing.RunCoroutine(PortalProcedure(script, portalPosition - Vector3.up), MEC.Segment.Update)); StalkyCooldown = StalkyConfigs.cooldownCfg; stalky106LastTime = Time.time; disableFor = Time.time + 10f; if (!StalkyConfigs.parsedRoleNames.TryGetValue((int)target.characterClassManager.CurClass, out string className)) { className = defaultRoleNames[(int)target.characterClassManager.CurClass]; } string data = StalkyConfigs.newStalkMessage.Replace("$player", target.nicknameSync.Network_myNickSync).Replace("$class", className).Replace("$cd", StalkyConfigs.cooldownCfg.ToString()); bc.TargetAddElement(script.connectionToClient, data, 6U, false); }
private static bool Prefix(Scp106PlayerScript __instance, GameObject ply, int t) { try { if (!__instance._iawRateLimit.CanExecute(true) || ply == null) { return(false); } ReferenceHub hub = ReferenceHub.GetHub(ply); CharacterClassManager ccm = hub != null ? hub.characterClassManager : null; if (ccm == null) { return(false); } if (!ServerTime.CheckSynchronization(t) || !__instance.iAm106 || Vector3.Distance(hub.playerMovementSync.RealModelPosition, ply.transform.position) >= 3f || !ccm.IsHuman() || ccm.GodMode || ccm.CurRole.team == Team.SCP) { return(false); } Vector3 position = ply.transform.position; float num1 = Vector3.Distance(__instance._hub.playerMovementSync.RealModelPosition, position); float num2 = Math.Abs(__instance._hub.playerMovementSync.RealModelPosition.y - position.y); if ((num1 >= 1.8179999589920044 && num2 < 1.0199999809265137) || (num1 >= 2.0999999046325684 && num2 < 1.9500000476837158) || ((num1 >= 2.6500000953674316 && num2 < 2.200000047683716) || (num1 >= 3.200000047683716 && num2 < 3.0)) || num1 >= 3.640000104904175) { __instance._hub.characterClassManager.TargetConsolePrint(__instance.connectionToClient, $"106 MovePlayer command rejected - too big distance (code: T1). Distance: {num1}, Y Diff: {num2}.", "gray"); } else if (Physics.Linecast(__instance._hub.playerMovementSync.RealModelPosition, ply.transform.position, __instance._hub.weaponManager.raycastServerMask)) { __instance._hub.characterClassManager.TargetConsolePrint(__instance.connectionToClient, $"106 MovePlayer command rejected - collider found between you and the target (code: T2). Distance: {num1}, Y Diff: {num2}.", "gray"); } else { var instanceHub = ReferenceHub.GetHub(__instance.gameObject); instanceHub.characterClassManager.RpcPlaceBlood(ply.transform.position, 1, 2f); __instance.TargetHitMarker(__instance.connectionToClient, __instance.captureCooldown); if (Scp106PlayerScript._blastDoor.isClosed) { instanceHub.characterClassManager.RpcPlaceBlood(ply.transform.position, 1, 2f); instanceHub.playerStats.HurtPlayer(new PlayerStats.HitInfo(500f, instanceHub.LoggedNameFromRefHub(), DamageTypes.Scp106, instanceHub.playerId), ply); } else { Scp079Interactable.ZoneAndRoom otherRoom = hub.scp079PlayerScript.GetOtherRoom(); Scp079Interactable.InteractableType[] filter = new Scp079Interactable.InteractableType[] { Scp079Interactable.InteractableType.Door, Scp079Interactable.InteractableType.Light, Scp079Interactable.InteractableType.Lockdown, Scp079Interactable.InteractableType.Tesla, Scp079Interactable.InteractableType.ElevatorUse, }; foreach (Scp079PlayerScript scp079PlayerScript in Scp079PlayerScript.instances) { bool flag = false; foreach (Scp079Interaction scp079Interaction in scp079PlayerScript.ReturnRecentHistory(12f, filter)) { foreach (Scp079Interactable.ZoneAndRoom zoneAndRoom in scp079Interaction.interactable .currentZonesAndRooms) { if (zoneAndRoom.currentZone == otherRoom.currentZone && zoneAndRoom.currentRoom == otherRoom.currentRoom) { flag = true; } } } if (flag) { scp079PlayerScript.RpcGainExp(ExpGainType.PocketAssist, ccm.CurClass); } } var ev = new EnteringPocketDimensionEventArgs(API.Features.Player.Get(ply), Vector3.down * 1998.5f, API.Features.Player.Get(instanceHub)); Exiled.Events.Handlers.Player.OnEnteringPocketDimension(ev); if (!ev.IsAllowed) { return(false); } hub.playerMovementSync.OverridePosition(ev.Position, 0f, true); instanceHub.playerStats.HurtPlayer(new PlayerStats.HitInfo(40f, instanceHub.LoggedNameFromRefHub(), DamageTypes.Scp106, instanceHub.playerId), ply); } PlayerEffectsController effectsController = hub.playerEffectsController; effectsController.GetEffect <Corroding>().IsInPd = true; effectsController.EnableEffect <Corroding>(0.0f, false); } return(false); } catch (Exception e) { Exiled.API.Features.Log.Error($"{typeof(EnteringPocketDimension).FullName}:\n{e}"); return(true); } }
public IEnumerator <float> _106PortalAnimation(Player player) { GameObject gameObject = player.GetGameObject() as GameObject; Scp106PlayerScript ply106 = gameObject.GetComponent <Scp106PlayerScript>(); PlyMovementSync pms = gameObject.GetComponent <PlyMovementSync>(); if (ply106.goingViaThePortal) { yield break; } ply106.goingViaThePortal = true; if (PocketTrap.instance.Animation) { pms.SetAllowInput(false); for (float i = 0f; i < 50; i++) { var pos = gameObject.transform.position; pos.y -= i * 0.01f; pms.SetPosition(pos); yield return(0f); } if (AlphaWarheadController.host.doorsClosed) { if (player.TeamRole.Team != Smod2.API.Team.SCP) { player.Damage(500, DamageType.POCKET); } } else { if (player.TeamRole.Team != Smod2.API.Team.SCP) { player.Damage(40, DamageType.SCP_106); } pms.SetPosition(Vector3.down * 1997f); } pms.SetAllowInput(true); } else { if (AlphaWarheadController.host.doorsClosed) { if (player.TeamRole.Team != Smod2.API.Team.SCP) { player.Damage(500, DamageType.POCKET); } } else { if (player.TeamRole.Team != Smod2.API.Team.SCP) { player.Damage(40, DamageType.SCP_106); } pms.SetPosition(Vector3.down * 1997f); } } yield return(Timing.WaitForSeconds(Cooltime)); ply106.goingViaThePortal = false; yield break; }
private static bool Prefix(Scp106PlayerScript __instance, GameObject ply, int t) { try { if (!__instance._iawRateLimit.CanExecute(true) || ply == null) { return(false); } ReferenceHub hub = ReferenceHub.GetHub(ply); CharacterClassManager ccm = hub != null ? hub.characterClassManager : null; if (ccm == null) { return(false); } if (!ServerTime.CheckSynchronization(t) || !__instance.iAm106 || Vector3.Distance(hub.playerMovementSync.RealModelPosition, ply.transform.position) >= 3f || !ccm.IsHuman() || ccm.GodMode || ccm.CurRole.team == Team.SCP) { return(false); } var instanceHub = ReferenceHub.GetHub(__instance.gameObject); instanceHub.characterClassManager.RpcPlaceBlood(ply.transform.position, 1, 2f); __instance.TargetHitMarker(__instance.connectionToClient); if (Scp106PlayerScript._blastDoor.isClosed) { instanceHub.characterClassManager.RpcPlaceBlood(ply.transform.position, 1, 2f); instanceHub.playerStats.HurtPlayer(new PlayerStats.HitInfo(500f, instanceHub.LoggedNameFromRefHub(), DamageTypes.Scp106, instanceHub.playerId), ply); } else { Scp079Interactable.ZoneAndRoom otherRoom = hub.scp079PlayerScript.GetOtherRoom(); Scp079Interactable.InteractableType[] filter = new Scp079Interactable.InteractableType[] { Scp079Interactable.InteractableType.Door, Scp079Interactable.InteractableType.Light, Scp079Interactable.InteractableType.Lockdown, Scp079Interactable.InteractableType.Tesla, Scp079Interactable.InteractableType.ElevatorUse, }; foreach (Scp079PlayerScript scp079PlayerScript in Scp079PlayerScript.instances) { bool flag = false; foreach (Scp079Interaction scp079Interaction in scp079PlayerScript.ReturnRecentHistory(12f, filter)) { foreach (Scp079Interactable.ZoneAndRoom zoneAndRoom in scp079Interaction.interactable .currentZonesAndRooms) { if (zoneAndRoom.currentZone == otherRoom.currentZone && zoneAndRoom.currentRoom == otherRoom.currentRoom) { flag = true; } } } if (flag) { scp079PlayerScript.RpcGainExp(ExpGainType.PocketAssist, ccm.CurClass); } } var ev = new EnteringPocketDimensionEventArgs(API.Features.Player.Get(ply), Vector3.down * 1998.5f, API.Features.Player.Get(instanceHub)); Player.OnEnteringPocketDimension(ev); if (!ev.IsAllowed) { return(false); } hub.playerMovementSync.OverridePosition(ev.Position, 0f, true); instanceHub.playerStats.HurtPlayer(new PlayerStats.HitInfo(40f, instanceHub.LoggedNameFromRefHub(), DamageTypes.Scp106, instanceHub.playerId), ply); } PlayerEffectsController effectsController = hub.playerEffectsController; effectsController.GetEffect <Corroding>().IsInPd = true; effectsController.EnableEffect <Corroding>(0.0f, false); return(false); } catch (Exception e) { Exiled.API.Features.Log.Error($"{typeof(EnteringPocketDimension).FullName}:\n{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(Scp106PlayerScript __instance, GameObject ply, int t) { try { if (!__instance._iawRateLimit.CanExecute()) { return(false); } if (ply == null) { return(false); } var player = ply.GetPlayer(); var charClassManager = player.ClassManager; if (charClassManager == null || charClassManager.GodMode || charClassManager.IsAnyScp()) { return(false); } if (!ServerTime.CheckSynchronization(t) || !__instance.iAm106 || Vector3.Distance(__instance.hub.playerMovementSync.RealModelPosition, ply.transform.position) >= 3f || !charClassManager.IsHuman()) { return(false); } if (Scp106PlayerScript._blastDoor.isClosed) { __instance.hub.characterClassManager.RpcPlaceBlood(ply.transform.position, 1, 2f); __instance.hub.playerStats.HurtPlayer( new PlayerStats.HitInfo(500f, $"{__instance.GetComponent<NicknameSync>().MyNick} ({__instance.hub.characterClassManager.UserId})", DamageTypes.Scp106, __instance.GetComponent <RemoteAdmin.QueryProcessor>().PlayerId), ply); } else { foreach (var scp079PlayerScript in Scp079PlayerScript.instances) { var otherRoom = ply.GetComponent <Scp079PlayerScript>().GetOtherRoom(); var filter = new[] { Scp079Interactable.InteractableType.Door, Scp079Interactable.InteractableType.Light, Scp079Interactable.InteractableType.Lockdown, Scp079Interactable.InteractableType.Tesla, Scp079Interactable.InteractableType.ElevatorUse }; var flag = false; foreach (var zoneAndRoom in from scp079Interaction in scp079PlayerScript.ReturnRecentHistory(12f, filter) from zoneAndRoom in scp079Interaction.interactable .currentZonesAndRooms where zoneAndRoom.currentZone == otherRoom.currentZone && zoneAndRoom.currentRoom == otherRoom.currentRoom select zoneAndRoom) { flag = true; } if (flag) { scp079PlayerScript.RpcGainExp(ExpGainType.PocketAssist, player.ClassManager.CurClass); } } } var canEnter = true; Events.InvokePocketDimensionEnterEvent(player, ref canEnter); if (!canEnter) { return(false); } __instance.hub.playerStats.HurtPlayer( new PlayerStats.HitInfo(40f, $"{__instance.GetComponent<NicknameSync>().MyNick} ({__instance.hub.characterClassManager.UserId})", DamageTypes.Scp106, __instance.GetComponent <RemoteAdmin.QueryProcessor>().PlayerId), ply); player.Position = Vector3.down * 1998.5f; player.EffectsController.GetEffect <Corroding>().IsInPd = true; player.EffectsController.EnableEffect <Corroding>(); return(false); } catch (Exception e) { Log.Error($"PocketDimEnter Err: {e}"); return(true); } }
public static bool Prefix(Scp106PlayerScript __instance, GameObject ply, int t) { if (EventPlugin.Scp106PocketDimensionDamageEventPatchDisable) return true; try { if (!__instance._iawRateLimit.CanExecute(true)) return false; if (ply == null) return false; CharacterClassManager component = ply.GetComponent<CharacterClassManager>(); if (component == null) return false; if (!ServerTime.CheckSynchronization(t) || !__instance.iAm106 || Vector3.Distance(__instance.GetComponent<PlyMovementSync>().RealModelPosition, ply.transform.position) >= 3f || !component.IsHuman()) return false; CharacterClassManager component2 = ply.GetComponent<CharacterClassManager>(); if (component2.GodMode) return false; if (component2.Classes.SafeGet(component2.CurClass).team == Team.SCP) return false; __instance.GetComponent<CharacterClassManager>().RpcPlaceBlood(ply.transform.position, 1, 2f); if (Scp106PlayerScript.blastDoor.isClosed) { __instance.GetComponent<CharacterClassManager>().RpcPlaceBlood(ply.transform.position, 1, 2f); __instance.GetComponent<PlayerStats>().HurtPlayer( new PlayerStats.HitInfo(500f, __instance.GetComponent<NicknameSync>().MyNick + " (" + __instance.GetComponent<CharacterClassManager>().UserId + ")", DamageTypes.Scp106, __instance.GetComponent<QueryProcessor>().PlayerId), ply); } else { CharacterClassManager component3 = ply.GetComponent<CharacterClassManager>(); // 079 shit foreach (Scp079PlayerScript scp079PlayerScript in Scp079PlayerScript.instances) { Scp079Interactable.ZoneAndRoom otherRoom = ply.GetComponent<Scp079PlayerScript>().GetOtherRoom(); Scp079Interactable.InteractableType[] filter = new Scp079Interactable.InteractableType[] { Scp079Interactable.InteractableType.Door, Scp079Interactable.InteractableType.Light, Scp079Interactable.InteractableType.Lockdown, Scp079Interactable.InteractableType.Tesla, Scp079Interactable.InteractableType.ElevatorUse }; bool flag = false; foreach (Scp079Interaction scp079Interaction in scp079PlayerScript.ReturnRecentHistory(12f, filter)) { foreach (Scp079Interactable.ZoneAndRoom zoneAndRoom in scp079Interaction.interactable .currentZonesAndRooms) { if (zoneAndRoom.currentZone == otherRoom.currentZone && zoneAndRoom.currentRoom == otherRoom.currentRoom) { flag = true; } } } if (flag) { scp079PlayerScript.RpcGainExp(ExpGainType.PocketAssist, component3.CurClass); } } // Invoke enter bool allowEnter = true; Events.InvokePocketDimEnter(ply, ref allowEnter); if (!allowEnter) return false; ply.GetComponent<PlyMovementSync>().OverridePosition(Vector3.down * 1998.5f, 0f, true); // Invoke damage. bool allowDamage = true; Events.InvokePocketDimDamage(ply, ref allowDamage); if (allowDamage) __instance.GetComponent<PlayerStats>().HurtPlayer( new PlayerStats.HitInfo(40f, __instance.GetComponent<NicknameSync>().MyNick + " (" + __instance.GetComponent<CharacterClassManager>().UserId + ")", DamageTypes.Scp106, __instance.GetComponent<QueryProcessor>().PlayerId), ply); } PlayerEffectsController componentInParent = ply.GetComponentInParent<PlayerEffectsController>(); componentInParent.GetEffect<Corroding>("Corroding").isInPd = true; componentInParent.EnableEffect("Corroding"); return false; } catch (Exception exception) { Log.Error($"PocketDimDamageEvent error: {exception}"); return true; } }
private static bool Prefix(Scp106PlayerScript __instance, GameObject ply, int t) { try { if (!__instance._iawRateLimit.CanExecute(true)) { return(false); } if (ply == null) { return(false); } ReferenceHub hub = ReferenceHub.GetHub(ply); CharacterClassManager component = hub.characterClassManager; if (component == null) { return(false); } if (!ServerTime.CheckSynchronization(t) || !__instance.iAm106 || Vector3.Distance(__instance.GetComponent <PlayerMovementSync>().RealModelPosition, ply.transform.position) >= 3f || !component.IsHuman()) { return(false); } if (component.GodMode) { return(false); } if (component.Classes.SafeGet(component.CurClass).team == Team.SCP) { return(false); } __instance.GetComponent <CharacterClassManager>().RpcPlaceBlood(ply.transform.position, 1, 2f); if (Scp106PlayerScript._blastDoor.isClosed) { __instance.GetComponent <CharacterClassManager>().RpcPlaceBlood(ply.transform.position, 1, 2f); __instance.GetComponent <PlayerStats>().HurtPlayer( new PlayerStats.HitInfo(500f, __instance.GetComponent <NicknameSync>().MyNick + " (" + __instance.GetComponent <CharacterClassManager>().UserId + ")", DamageTypes.Scp106, __instance.GetComponent <QueryProcessor>().PlayerId), ply); } else { CharacterClassManager component3 = ply.GetComponent <CharacterClassManager>(); foreach (Scp079PlayerScript scp079PlayerScript in Scp079PlayerScript.instances) { Scp079Interactable.ZoneAndRoom otherRoom = ply.GetComponent <Scp079PlayerScript>().GetOtherRoom(); Scp079Interactable.InteractableType[] filter = new Scp079Interactable.InteractableType[] { Scp079Interactable.InteractableType.Door, Scp079Interactable.InteractableType.Light, Scp079Interactable.InteractableType.Lockdown, Scp079Interactable.InteractableType.Tesla, Scp079Interactable.InteractableType.ElevatorUse, }; bool flag = false; foreach (Scp079Interaction scp079Interaction in scp079PlayerScript.ReturnRecentHistory(12f, filter)) { foreach (Scp079Interactable.ZoneAndRoom zoneAndRoom in scp079Interaction.interactable .currentZonesAndRooms) { if (zoneAndRoom.currentZone == otherRoom.currentZone && zoneAndRoom.currentRoom == otherRoom.currentRoom) { flag = true; } } } if (flag) { scp079PlayerScript.RpcGainExp(ExpGainType.PocketAssist, component3.CurClass); } } var ev = new EnteringPocketDimensionEventArgs(API.Features.Player.Get(ply), Vector3.down * 1998.5f); Player.OnEnteringPocketDimension(ev); if (!ev.IsAllowed) { return(false); } ply.GetComponent <PlayerMovementSync>().OverridePosition(ev.Position, 0f, true); __instance.GetComponent <PlayerStats>().HurtPlayer( new PlayerStats.HitInfo(40f, __instance.GetComponent <NicknameSync>().MyNick + " (" + __instance.GetComponent <CharacterClassManager>().UserId + ")", DamageTypes.Scp106, __instance.GetComponent <QueryProcessor>().PlayerId), ply); } PlayerEffectsController effectsController = hub.playerEffectsController; effectsController.GetEffect <Corroding>().IsInPd = true; effectsController.EnableEffect <Corroding>(0.0f, false); return(false); } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.EnteringPocketDimension: {e}\n{e.StackTrace}"); return(true); } }
private static bool MovePlayer(Scp106PlayerScript __instance, GameObject ply, int t) { try { if (!__instance._iawRateLimit.CanExecute(true) || ply == null || !__instance.iAm106) { return(false); } var scp = __instance.GetPlayer(); var player = ply.GetPlayer(); if (player == null || player.GodMode || !ServerTime.CheckSynchronization(t) || !player.ClassManager.IsHuman()) { return(false); } if (!SynapseExtensions.GetHarmPermission(scp, player)) { return(false); } var pos = player.Position; var num = Vector3.Distance(scp.Position, pos); var num2 = Math.Abs(scp.Position.y - pos.y); if ((num >= 1.818f && num2 < 1.02f) || (num >= 3.4f && num2 < 1.95f) || (num >= 3.7f && num2 < 2.2f) || (num >= 3.9f && num2 < 3f) || num >= 4.2f) { __instance._hub.characterClassManager.TargetConsolePrint(scp.Connection, string.Format("106 MovePlayer command rejected - too big distance (code: T1). Distance: {0}, Y Diff: {1}.", num, num2), "gray"); return(false); } if (Physics.Linecast(scp.Position, player.Position, MicroHIDItem.WallMask)) { __instance._hub.characterClassManager.TargetConsolePrint(scp.Connection, string.Format("106 MovePlayer command rejected - collider found between you and the target (code: T2). Distance: {0}, Y Diff: {1}.", num, num2), "gray"); return(false); } EventHandler.Get.Scp.InvokeScpAttack(scp, player, Api.Enum.ScpAttackType.Scp106_Grab, out var allow); if (!allow) { return(false); } scp.ClassManager.RpcPlaceBlood(player.Position, 1, 2f); __instance.TargetHitMarker(scp.Connection, __instance.captureCooldown); __instance._currentServerCooldown = __instance.captureCooldown; if (Scp106PlayerScript._blastDoor.isClosed) { __instance._hub.characterClassManager.RpcPlaceBlood(player.Position, 1, 2f); player.PlayerStats.DealDamage(new ScpDamageHandler(__instance._hub, PlayerStatsSystem.DeathTranslations.PocketDecay)); } else { EventHandler.Get.Scp.Scp106.InvokePocketDimensionEnterEvent(player, scp, ref allow); if (!allow) { return(false); } foreach (var script in Scp079PlayerScript.instances) { script.ServerProcessKillAssist(player.Hub, ExpGainType.PocketAssist); } player.Hub.scp106PlayerScript.GrabbedPosition = player.Hub.playerMovementSync.RealModelPosition; player.PlayerStats.DealDamage(new ScpDamageHandler(__instance._hub, 40f, PlayerStatsSystem.DeathTranslations.PocketDecay)); player.Position = Vector3.down * 1998.5f; scp.Scp106Controller.PocketPlayers.Add(player); } player.PlayerEffectsController.EnableEffect <CustomPlayerEffects.Corroding>(0f, false); return(false); } catch (Exception e) { Logger.Get.Error($"Synapse-Event: PocketDimEnter/ScpAttackEvent(106) failed!!\n{e}"); return(true); } }