internal void OnZombieRaised(FinishingRecallEventArgs ev) { int health = HealthOnKill.instance.Config.isHealthRegenRandom ? (int)ev.Scp049.Health + Random.Range(HealthOnKill.instance.Config.scp049HealthOnZombieRaisedRandomLowerBounds, HealthOnKill.instance.Config.scp049HealthOnZombieRaisedRandomUpperBounds) : (int)ev.Scp049.Health + HealthOnKill.instance.Config.scp049HealthOnZomebieRaisedSet; ev.Scp049.Health = Mathf.Clamp(health, 0f, ev.Scp049.MaxHealth); }
public void OnRecallZombie(FinishingRecallEventArgs ev) { if (isToggled && Round.IsStarted && PlayerXP.instance.Config.Scp049ZombieCreated > 0 && ev.Scp049.UserId != ev.Target.UserId) { int xp = CalcXP(ev.Scp049, PlayerXP.instance.Config.Scp049ZombieCreated); AddXP(ev.Scp049.UserId, xp, PlayerXP.instance.Config.Scp049CreateZombieMessage.Replace("{xp}", xp.ToString()).Replace("{target}", ev.Target.Nickname)); } }
public void OnRevived(FinishingRecallEventArgs ev) { if (SCP008X.Instance.Config.Scp008Buff >= 0) { ev.Target.ArtificialHealth += SCP008X.Instance.Config.Scp008Buff; Log.Debug($"Added {SCP008X.Instance.Config.Scp008Buff} AHP to {ev.Target}.", SCP008X.Instance.Config.DebugMode); } ev.Target.Health = SCP008X.Instance.Config.ZombieHealth; Log.Debug($"Set {ev.Target}'s HP to {SCP008X.Instance.Config.Scp008Buff}.", SCP008X.Instance.Config.DebugMode); ev.Target.ShowHint($"<color=yellow><b>SCP-008</b></color>\n{SCP008X.Instance.Config.SpawnHint}", 20f); }
private void OnFinishingRecall(FinishingRecallEventArgs ev) { if (!previousRoles.ContainsKey(ev.Target)) { previousRoles.Add(ev.Target, ev.Target.Role); } else { previousRoles[ev.Target] = ev.Target.Role; } }
public void OnZombieRaised(FinishingRecallEventArgs ev) { if (HealthOnKill.instance.Config.isHealthRegenRandom) { int rand = r.Next(HealthOnKill.instance.Config.scp049HealthOnZombieRaisedRandomLowerBounds, HealthOnKill.instance.Config.scp049HealthOnZombieRaisedRandomUpperBounds); int health = (int)ev.Scp049.Health + rand; ev.Scp049.Health = health < ev.Scp049.MaxHealth ? health : ev.Scp049.MaxHealth; } else { int health = (int)ev.Scp049.Health + HealthOnKill.instance.Config.scp049HealthOnZomebieRaisedSet; ev.Scp049.Health = health < ev.Scp049.MaxHealth ? health : ev.Scp049.MaxHealth; } }
internal void FinishingRecall(FinishingRecallEventArgs ev) { if (Plugin.Instance.Config.FinishingRecall == "") { return; } string message = Plugin.Instance.Config.FinishingRecall.Replace("%049name%", ev.Scp049.Nickname.ToString()); message = message.Replace("%049hp%", ev.Scp049.Health.ToString()); message = message.Replace("%targetname%", ev.Target.Nickname.ToString()); message = message.Replace("%targetteam%", ev.Target.Team.ToString()); if (Plugin.Instance.Config.debug_to_console) { Log.Debug(message: "[ " + Plugin.Instance.Config.scp049_name + "] " + message); } Plugin.sendWebHook(Plugin.Instance.Config.scp049_url, message, Plugin.Instance.Config.scp049_name); }
public void OnFinishingRecall(FinishingRecallEventArgs ev) { // Check if round is still in progress if (!RoundSummary.RoundInProgress()) { return; } // Counter for every player the Doctor has cured. Scp049AbilityController.CureCounter++; if (Scp049AbilityController.CureCounter == Instance.Config.DoctorConfigs.MinCures) { // Notify the Doctor that the buff is now active. foreach (Player scp049 in Player.Get(RoleType.Scp049)) { scp049.HintDisplay.Show(new TextHint(Instance.Config.Translations.PassiveActivationMessage, new HintParameter[] { new StringHintParameter("") }, null, 5f)); } // Run the actual EngageBuff corouting every 5 seconds. Timing.RunCoroutine(Scp049AbilityController.EngageBuff(), "SCP049_Passive"); Timing.RunCoroutine(Scp049AbilityController.StartCooldownTimer(), "SCP049_Active_Cooldown"); } // Increase the percentage zombies get healed for by the HealthPercentageMultiplier if the config option is set to 1 (percentage of missing hp mode) if (Instance.Config.DoctorConfigs.HealType == 1 && Scp049AbilityController.CureCounter > Instance.Config.DoctorConfigs.MinCures) { Scp049AbilityController.HealAmountPercentage *= Instance.Config.DoctorConfigs.HealPercentageMultiplier; } // Heal the doctor for the configured percentage if it's missing health if the config option for it is set to true if (Instance.Config.DoctorConfigs.AllowDocSelfHeal) { Scp049AbilityController.ApplySelfHeal(ev.Scp049, Instance.Config.DoctorConfigs.DocMissingHealthPercentage); } }
/// <summary> /// Called before SCP-049 finishes recalling a player. /// </summary> /// <param name="ev">The <see cref="FinishingRecallEventArgs"/> instance.</param> public static void OnFinishingRecall(FinishingRecallEventArgs ev) => FinishingRecall.InvokeSafely(ev);
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); } }
private static bool Prefix(PlayableScps.Scp049 __instance, byte num, GameObject go) { try { switch (num) { case 1: { 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); } if (component2.CurrentTime > Scp049.ReviveEligibilityDuration) { Console.AddDebugLog("SCPCTRL", "SCP-049 | Request 'start recalling' rejected; provided object has decayed too far", MessageImportance.LessImportant); return(false); } // Removed useless FOREACH ReferenceHub referenceHub2 = ReferenceHub.GetHub(component2.owner.PlayerId); if (referenceHub2 == null) { Console.AddDebugLog("SCPCTRL", "SCP-049 | Request 'start recalling' rejected; target not found", MessageImportance.LessImportant); return(false); } bool flag = false; Rigidbody[] componentsInChildren = component2.GetComponentsInChildren <Rigidbody>(); for (int i = 0; i < componentsInChildren.Length; i++) { Console.AddDebugLog("SCPCTRL", "SCP-049 | Request 'start recalling' accepted", MessageImportance.LessImportant); if (Vector3.Distance(componentsInChildren[i].transform.position, __instance.Hub.PlayerCameraReference.transform.position) <= Scp049.ReviveDistance * 1.3f) { flag = true; referenceHub2.characterClassManager.NetworkDeathPosition = __instance.Hub.playerMovementSync.RealModelPosition; break; } } if (!flag) { Console.AddDebugLog("SCPCTRL", "SCP - 049 | Request 'start recalling' rejected; Distance was too great.", MessageImportance.LessImportant); break; } 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); } case 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); } default: return(true); } return(false); } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Scp049.StartingAndFinishingRecall: {e}\n{e.StackTrace}"); return(true); } }
private static bool Prefix(Scp049 __instance, byte num, GameObject go) { 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) { return(false); } if (!__instance._recallInProgressServer || referenceHub.gameObject != __instance._recallObjectServer || __instance._recallProgressServer < 0.85f) { return(false); } if (referenceHub.characterClassManager.CurClass != RoleType.Spectator && !API.IsGhost(Player.Get(referenceHub))) { return(false); } var ev = new FinishingRecallEventArgs(Player.Get(referenceHub.gameObject), Player.Get(__instance.Hub.gameObject)); Exiled.Events.Handlers.Scp049.OnFinishingRecall(ev); if (!ev.IsAllowed) { return(false); } RoundSummary.changed_into_zombies++; referenceHub.characterClassManager.SetClassID(RoleType.Scp0492, CharacterClassManager.SpawnReason.Revived); 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); } else { return(true); } }