Ejemplo n.º 1
0
        public static IEnumerator <float> SetOnCooldown(Player ply, ICommand079 command079)
        {
            if (command079.Cooldown == 0)
            {
                yield break;
            }

            if (!CommandCooldowns.ContainsKey(ply))
            {
                CommandCooldowns.Add(ply, new List <ICommand079> {
                    command079
                });
            }
            else
            {
                CommandCooldowns[ply].Add(command079);
            }

            for (int i = 0; i < Application.targetFrameRate * command079.Cooldown; i++)
            {
                yield return(0f);
            }

            CommandCooldowns[ply].Remove(command079);
            if (!string.IsNullOrEmpty(command079.CommandReady))
            {
                ply.Broadcast(10, command079.CommandReady);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ply">The player object of the Scp079.</param>
        /// <param name="command">The command to check the cooldown of.</param>
        /// <returns></returns>
        public static bool OnCommandCooldown(this Player ply, ICommand079 command)
        {
            if (!Manager.CommandCooldowns.ContainsKey(ply))
            {
                return(false);
            }

            return(Manager.CommandCooldowns[ply].Contains(command));
        }
Ejemplo n.º 3
0
        public static bool RegisterCommand(ICommand079 command079)
        {
            if (!Pro079.Singleton.Config.EnableModules || Commands.Contains(command079))
            {
                return(false);
            }

            Commands.Add(command079);
            return(true);
        }
Ejemplo n.º 4
0
        public bool Execute(ArraySegment <string> arguments, ICommandSender sender, out string response)
        {
            Player ply = Player.Get((sender as CommandSender)?.SenderId);

            if (!ply.IsScp079())
            {
                response = Pro079.Singleton.Translations.NotScp079;
                return(false);
            }

            response = Methods.GetHelp();
            if (arguments.Count == 0)
            {
                return(false);
            }

            ICommand079 command = Methods.GetCommand(arguments.At(0));

            if (command != null)
            {
                if (Pro079.Singleton.Config.EnableCassieCooldown && ply.OnCassieCooldown())
                {
                    response = Pro079.Singleton.Translations.CassieOnCooldown;
                    return(false);
                }

                if (ply.OnCommandCooldown(command))
                {
                    response = Pro079.Singleton.Translations.Cooldown;
                    return(false);
                }

                if (!ply.IsBypassModeEnabled)
                {
                    if (command.Cost > ply.Energy)
                    {
                        response = Pro079.Singleton.Translations.LowEnergy;
                        return(false);
                    }

                    if (command.MinLevel > ply.Level)
                    {
                        response = Pro079.Singleton.Translations.LowLevel;
                        return(false);
                    }
                }

                bool success = command.Execute(arguments, sender, out response);
                if (!success)
                {
                    return(false);
                }

                Manager.CoroutineHandles.Add(Timing.RunCoroutine(Manager.SetOnCooldown(ply, command)));
                if (Pro079.Singleton.Config.EnableCassieCooldown)
                {
                    Manager.CassieCooldowns[ply] =
                        DateTime.Now + TimeSpan.FromSeconds(Pro079.Singleton.Config.CassieCooldown);
                }
                if (!ply.IsBypassModeEnabled)
                {
                    ply.Energy -= command.Cost;
                }

                return(true);
            }

            if (arguments.At(0) == Pro079.Singleton.Translations.UltCmd)
            {
                if (arguments.Count < 2)
                {
                    response = Methods.FormatUltimates();
                    return(true);
                }

                IUltimate079 ultimate = Methods.GetUltimate(arguments.At(1));
                if (ultimate == null)
                {
                    return(true);
                }

                if (ply.OnUltimateCooldown())
                {
                    response = Pro079.Singleton.Translations.Cooldown;
                    return(false);
                }

                if (!ply.IsBypassModeEnabled)
                {
                    if (ply.Energy < ultimate.Cost)
                    {
                        response = Pro079.Singleton.Translations.LowEnergy;
                        return(false);
                    }

                    if (ply.Level < Pro079.Singleton.Config.UltimateLevel)
                    {
                        response = Pro079.Singleton.Translations.LowLevel;
                        return(false);
                    }
                }

                bool success = ultimate.Execute(arguments, sender, out response);

                if (!success)
                {
                    return(false);
                }

                Manager.UltimateCooldowns[ply] = DateTime.Now + TimeSpan.FromSeconds(ultimate.Cooldown);
                if (!ply.IsBypassModeEnabled)
                {
                    ply.Energy -= ultimate.Cost;
                }

                return(true);
            }

            return(true);
        }