コード例 #1
0
ファイル: Client.cs プロジェクト: Cyanox62/HealthOnKill
        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);
        }
コード例 #2
0
 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));
     }
 }
コード例 #3
0
ファイル: EventHandlers.cs プロジェクト: KrisPrs/SCP-008-X
 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);
 }
コード例 #4
0
 private void OnFinishingRecall(FinishingRecallEventArgs ev)
 {
     if (!previousRoles.ContainsKey(ev.Target))
     {
         previousRoles.Add(ev.Target, ev.Target.Role);
     }
     else
     {
         previousRoles[ev.Target] = ev.Target.Role;
     }
 }
コード例 #5
0
ファイル: Client.cs プロジェクト: lettucellama/HealthOnKill
 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;
     }
 }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
 /// <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);
コード例 #9
0
        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);
            }
        }
コード例 #10
0
        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);
            }
        }
コード例 #11
0
        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);
            }
        }