private static bool BodyInteract(PlayableScps.Scp049 __instance, byte num, GameObject go) { if (num != 0) { return(true); } try { if (!__instance._interactRateLimit.CanExecute(true)) { return(false); } if (go == null || __instance.RemainingServerKillCooldown > 0f) { return(false); } var scp = __instance.GetPlayer(); var player = go.GetPlayer(); if (!SynapseExtensions.GetHarmPermission(scp, player)) { return(false); } if (Vector3.Distance(scp.Position, player.Position) >= PlayableScps.Scp049.AttackDistance * 1.25f) { return(false); } if (Physics.Linecast(scp.Position, player.Position, InventorySystem.Items.MicroHID.MicroHIDItem.WallMask)) { return(false); } ev.Get.Scp.InvokeScpAttack(scp, player, Api.Enum.ScpAttackType.Scp049_Touch, out var allow); if (!allow) { return(false); } player.PlayerStats.DealDamage(new ScpDamageHandler(scp.Hub, 4949f, DeathTranslations.Scp049)); GameCore.Console.AddDebugLog("SCPCTRL", "SCP-049 | Sent 'death time' RPC", MessageImportance.LessImportant, false); scp.Hub.scpsController.RpcTransmit_Byte(0); __instance.RemainingServerKillCooldown = PlayableScps.Scp049.KillCooldown; return(false); } catch (Exception e) { Synapse.Api.Logger.Get.Error($"Synapse-Event: ScpAttackEvent(Scp049) failed!!\n{e}"); return(true); } }
private static bool Prefix(PlayableScps.Scp049 __instance, byte num, GameObject go) { if (num != 0) { return(true); } try { if (!__instance._interactRateLimit.CanExecute(true) || go == null) { return(false); } var scp = __instance.GetPlayer(); var player = go.GetPlayer(); if (player == null || Vector3.Distance(scp.Position, player.Position) >= PlayableScps.Scp049.AttackDistance * 1.25f || !scp.WeaponManager.GetShootPermission(player.ClassManager)) { return(false); } ev.Get.Scp.InvokeScpAttack(scp, player, Api.Enum.ScpAttackType.Scp049_Touch, out var allow); if (!allow) { return(false); } player.Hurt(4949, DamageTypes.Scp049, scp); GameCore.Console.AddDebugLog("SCPCTRL", "SCP-049 | Sent 'death time' RPC", MessageImportance.LessImportant, false); scp.Hub.scpsController.RpcTransmit_Byte(0); return(false); } catch (Exception e) { Synapse.Api.Logger.Get.Error($"Synapse-Event: ScpAttackEvent(Scp049) failed!!\n{e}\nStackTrace:\n{e.StackTrace}"); return(true); } }
private static bool OnInteract(PlayableScps.Scp049 __instance, byte num, GameObject go) { try { if (num != 1 && num != 2) { return(true); } var scp = __instance.GetPlayer(); var ragdoll = go.GetComponent <Ragdoll>().GetRagdoll(); var target = ragdoll.Owner; Get.Scp.Scp049.InvokeRevive(scp, target, ragdoll, num == 2, out var allow); return(allow); } catch (Exception ex) { Synapse.Api.Logger.Get.Error($"Synapse-Event: Scp049ReviveEvent failed!!\n{ex}"); return(true); } }
private static bool Prefix(PlayableScps.Scp049 __instance, byte num, GameObject go) { try { if (num == 2) { if (!__instance._interactRateLimit.CanExecute() || go == null) { return(false); } Ragdoll component = go.GetComponent <Ragdoll>(); if (component == null) { return(false); } ReferenceHub referenceHub = null; foreach (GameObject player in PlayerManager.players) { ReferenceHub hub = ReferenceHub.GetHub(player); if (hub.queryProcessor.PlayerId == component.owner.PlayerId) { referenceHub = hub; break; } } if (referenceHub == null) { Console.AddDebugLog("SCPCTRL", "SCP-049 | Request 'finish recalling' rejected; no target found", MessageImportance.LessImportant); return(false); } if (!__instance._recallInProgressServer || referenceHub.gameObject != __instance._recallObjectServer || __instance._recallProgressServer < 0.85f) { Console.AddDebugLog("SCPCTRL", "SCP-049 | Request 'finish recalling' rejected; Debug code: ", MessageImportance.LessImportant); Console.AddDebugLog("SCPCTRL", "SCP-049 | CONDITION#1 " + (__instance._recallInProgressServer ? "<color=green>PASSED</color>" : ("<color=red>ERROR</color> - " + __instance._recallInProgressServer)), MessageImportance.LessImportant, true); Console.AddDebugLog("SCPCTRL", "SCP-049 | CONDITION#2 " + ((referenceHub.gameObject == __instance._recallObjectServer) ? "<color=green>PASSED</color>" : string.Concat("<color=red>ERROR</color> - ", referenceHub.queryProcessor.PlayerId, "-", (__instance._recallObjectServer == null) ? "null" : ReferenceHub.GetHub(__instance._recallObjectServer).queryProcessor.PlayerId.ToString())), MessageImportance.LessImportant); Console.AddDebugLog("SCPCTRL", "SCP-049 | CONDITION#3 " + ((__instance._recallProgressServer >= 0.85f) ? "<color=green>PASSED</color>" : ("<color=red>ERROR</color> - " + __instance._recallProgressServer)), MessageImportance.LessImportant, true); return(false); } if (referenceHub.characterClassManager.CurClass != RoleType.Spectator) { return(false); } var ev = new FinishingRecallEventArgs(API.Features.Player.Get(referenceHub.gameObject), API.Features.Player.Get(__instance.Hub.gameObject)); Handlers.Scp049.OnFinishingRecall(ev); if (!ev.IsAllowed) { return(false); } Console.AddDebugLog("SCPCTRL", "SCP-049 | Request 'finish recalling' accepted", MessageImportance.LessImportant); RoundSummary.changed_into_zombies++; referenceHub.characterClassManager.SetClassID(RoleType.Scp0492); referenceHub.GetComponent <PlayerStats>().Health = referenceHub.characterClassManager.Classes.Get(RoleType.Scp0492).maxHP; if (component.CompareTag("Ragdoll")) { NetworkServer.Destroy(component.gameObject); } __instance._recallInProgressServer = false; __instance._recallObjectServer = null; __instance._recallProgressServer = 0f; return(false); } if (num != 1) { return(true); } { if (!__instance._interactRateLimit.CanExecute()) { return(false); } if (go == null) { return(false); } Ragdoll component2 = go.GetComponent <Ragdoll>(); if (component2 == null) { Console.AddDebugLog("SCPCTRL", "SCP-049 | Request 'start recalling' rejected; provided object is not a dead body", MessageImportance.LessImportant); return(false); } if (!component2.allowRecall) { Console.AddDebugLog("SCPCTRL", "SCP-049 | Request 'start recalling' rejected; provided object can't be recalled", MessageImportance.LessImportant); return(false); } ReferenceHub referenceHub2 = null; foreach (GameObject player2 in PlayerManager.players) { ReferenceHub hub2 = ReferenceHub.GetHub(player2); if (hub2 != null && hub2.queryProcessor.PlayerId == component2.owner.PlayerId) { referenceHub2 = hub2; break; } } if (referenceHub2 == null) { Console.AddDebugLog("SCPCTRL", "SCP-049 | Request 'start recalling' rejected; target not found", MessageImportance.LessImportant); return(false); } if (Vector3.Distance(component2.transform.position, __instance.Hub.PlayerCameraReference.transform.position) >= PlayableScps.Scp049.ReviveDistance * 1.3f) { return(false); } var ev = new StartingRecallEventArgs(API.Features.Player.Get(referenceHub2.gameObject), API.Features.Player.Get(__instance.Hub.gameObject)); Handlers.Scp049.OnStartingRecall(ev); if (!ev.IsAllowed) { return(false); } Console.AddDebugLog("SCPCTRL", "SCP-049 | Request 'start recalling' accepted", MessageImportance.LessImportant); __instance._recallObjectServer = referenceHub2.gameObject; __instance._recallProgressServer = 0f; __instance._recallInProgressServer = true; return(false); } } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Scp049.StartingAndFinishingRecall: {e}\n{e.StackTrace}"); return(true); } }