예제 #1
0
        public override void OnExecute( ICommandSource src, ICommandArgs args )
        {
            if ( args.Length < 2 )
            {
                ShowUsage( src );
            }
            else
            {
                string name;

                if ( args[0].Is( name = "*console*" ) )
                {
                    CommandWindow.ConsoleInput.onInputText( args.Join( 1 ) );
                }
                else
                {
                    if ( !args[0].IsValidPlayerName )
                    {
                        EssLang.PLAYER_NOT_FOUND.SendTo( src, args[0] );
                        return;
                    }

                    var targetPlayer = args[0].ToPlayer;

                    ChatManager.Instance.askChat( targetPlayer.CSteamId, (byte) EChatMode.GLOBAL, args.Join( 1 ) );

                    name = targetPlayer.CharacterName;
                }

                EssLang.SUDO_EXECUTED.SendTo( src, name, args.Join( 1 ) );
            }
        }
예제 #2
0
        public override void OnExecute( ICommandSource src, ICommandArgs args )
        {
            var player = src.ToPlayer();
            var dist = 1000f;

            if ( args.Length == 1 )
            {
                if ( !args[0].IsDouble )
                    goto usage;
                dist = (float) args[0].ToDouble;
            }

            var eyePos = player.GetEyePosition( dist );

            if ( !eyePos.HasValue )
            {
                EssLang.JUMP_NO_POSITION.SendTo( src );
            }
            else
            {
                var point = eyePos.Value;
                point.y += 6;

                player.Teleport( point );
                EssLang.JUMPED.SendTo( src, point.x, point.y, point.z );
            }
            return;

            usage:
            ShowUsage( src );
        }
예제 #3
0
        public void AscendCommand( ICommandSource src, ICommandArgs args, ICommand cmd )
        {
            if ( args.IsEmpty )
            {
                ShowUsage( src, cmd );
            }
            else if ( !args[0].IsFloat )
            {
                EssLang.INVALID_NUMBER.SendTo( src, args[0] );
            }
            else if ( args[0].ToFloat <= 0 )
            {
                EssLang.MUST_POSITIVE.SendTo( src, args[0] );
            }
            else
            {
                var player = src.ToPlayer();
                var pos = new Vector3(player.Position.x, player.Position.y, player.Position.z);
                var num = args[0].ToFloat;

                pos.y += num;

                player.Teleport( pos );
                player.SendMessage( $"You ascended {num} \"meters\"" );
            }
        }
예제 #4
0
 public void OnExecute( ICommandSource source, ICommandArgs args )
 {
     if ( _hasCommandParameter )
         _methodActionWithCommand( source, args, this );
     else
         _methodAction( source, args );
 }
예제 #5
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            if ( parameters.IsEmpty )
            {
                if ( source.IsConsole )
                    ShowUsage( source );
                else
                    GiveMaxSkills( source.ToPlayer(), false );
            }
            else
            {
                if ( !parameters[0].IsBool || parameters.Length < 2 && source.IsConsole )
                {
                    ShowUsage( source );
                    return;
                }

                var overpower = parameters[0].ToBool;
                var targetPlayer = parameters.Length == 2 ? parameters[1].ToPlayer : source.ToPlayer();

                if ( targetPlayer == null )
                    EssLang.PLAYER_NOT_FOUND.SendTo( source, parameters[1] );
                else
                {
                    GiveMaxSkills( targetPlayer, overpower );

                    if ( source.IsConsole || source.ToPlayer() != targetPlayer )
                        EssLang.MAX_SKILLS_TARGET.SendTo( source, targetPlayer.DisplayName );
                }
            }
        }
예제 #6
0
        /// <summary>
        ///     Queries CanExecute status for the CommandSource's command as a RoutedCommand if possible,
        ///     otherwise as a regular Command.
        /// </summary>
        /// <param name="parameter">The parameter to the ICommandSource.</param>
        /// <param name="commandSource">The ICommandSource being executed.</param>
        internal static bool CanExecuteCommandSource(object parameter, ICommandSource commandSource)
        {
            ICommand command = commandSource.Command;

            if (command != null)
            {
                RoutedCommand routed = command as RoutedCommand;

                if (routed != null)
                {
                    IInputElement target = commandSource.CommandTarget;

                    if (target == null)
                    {
                        target = commandSource as IInputElement;
                    }

                    return routed.CanExecute(parameter, target);
                }
                else
                {
                    return command.CanExecute(parameter);
                }
            }

            return true;
        }
예제 #7
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            if ( parameters.Length == 0 )
            {
                if ( source.IsConsole )
                {
                    ShowUsage( source );
                }
                else
                {
                    var player = source.ToPlayer();

                    EssLang.POSITION.SendTo( player,
                                          player.Position.x,
                                          player.Position.y,
                                          player.Position.z );
                }
            }
            else
            {
                var found = UPlayer.TryGet( parameters[0], p =>
                {
                    EssLang.POSITION_OTHER.SendTo( source,
                        p.DisplayName, p.Position.x, p.Position.y, p.Position.z );
                } );

                if ( !found )
                {
                    EssLang.PLAYER_NOT_FOUND.SendTo( source, parameters[0] );
                }
            }
        }
예제 #8
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            var player = source.ToPlayer();

            if ( parameters.Length == 0 || parameters.Length > 1 )
            {
                ShowUsage( source );
            }
            else if ( !EssProvider.WarpManager.Contains( parameters[0].ToString() ) )
            {
                EssLang.WARP_NOT_EXIST.SendTo( source, parameters[0] );
            }
            else if ( !player.HasPermission( $"essentials.warp.{parameters[0]}" ) )
            {
                EssLang.WARP_NO_PERMISSION.SendTo( source, parameters[0] );
            }
            else
            {
                var dest = EssProvider.WarpManager[parameters[0].ToString()];
                var cooldown = EssProvider.Config.WarpCooldown;

                if ( cooldown > 0 && !player.HasPermission( "essentials.warps.bypasscooldown" ) )
                {
                    EssLang.WARP_COOLDOWN.SendTo( source, cooldown );
                }

                Tasks.New( t =>
                {
                    player.Teleport( dest.Location, dest.Rotation );
                    EssLang.WARP_TELEPORTED.SendTo( source, parameters[0] );
                }).Delay( player.HasPermission( "essentials.warps.bypasscooldown" ) ? 0 : cooldown * 1000 ).Go();
            }
        }
예제 #9
0
        /// <summary>
        ///     Carries out the specified action for the CommandSource's command as a RoutedCommand if possible,
        ///     otherwise as a regular Command.
        /// </summary>
        /// <param name="parameter">The parameter to the ICommandSource.</param>
        /// <param name="commandSource">The ICommandSource being executed.</param>
        internal static void InvokeCommandSource(object parameter, object previewParameter, ICommandSource commandSource, CommandOperation operation)
        {
            ICommand command = commandSource.Command;

            if (command != null)
            {
                RoutedCommand routed = command as RoutedCommand;

                if (routed != null)
                {
                    IInputElement target = commandSource.CommandTarget;

                    if (target == null)
                    {
                        target = commandSource as IInputElement;
                    }

                    if (routed.CanExecute(parameter, target))
                    {
                        //Debug.Assert(operation == CommandOperation.Execute, "We do not support Previewing RoutedCommands.");

                        switch (operation)
                        {
                            case CommandOperation.Execute:
                                routed.Execute(parameter, target);
                                break;
                        }
                    }
                }
                else if (command.CanExecute(parameter))
                {
                    IPreviewCommand previewCommand;
                    switch (operation)
                    {
                        case CommandOperation.Preview:
                            previewCommand = command as IPreviewCommand;
                            if (previewCommand != null)
                            {
                                previewCommand.Preview(previewParameter);
                            }
                            break;
                        case CommandOperation.CancelPreview:
                            previewCommand = command as IPreviewCommand;
                            if (previewCommand != null)
                            {
                                previewCommand.CancelPreview();
                            }
                            break;
                        case CommandOperation.Execute:
                            command.Execute(parameter);
                            break;
                    }
                }
            }
        }
예제 #10
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            if ( parameters.IsEmpty || ( parameters.Length < 5 && source.IsConsole ) )
            {
                ShowUsage( source );
            }
            else
            {
                var rawId          = parameters[0].ToString();
                var rawAmount      = parameters.Length >= 2 ? parameters[1].ToString() : "1";
                var pos            = source.ToPlayer().Position;

                if ( parameters.Length == 5 )
                {
                    var argPos = parameters.GetVector3( 2 );

                    if ( !argPos.HasValue )
                    {
                        EssLang.INVALID_COORDS.SendTo( source, parameters[2], parameters[3], parameters[4] );
                        return;
                    }

                    pos = argPos.Value;
                }

                ushort amount;

                if ( !ushort.TryParse( rawAmount, out amount ) )
                {
                    EssLang.INVALID_NUMBER.SendTo( source, rawAmount );
                    return;
                }

                var itemAsset = ItemUtil.GetItem( rawId );

                if ( itemAsset.IsAbsent )
                {
                    EssLang.INVALID_ITEM_ID.SendTo( source, rawId );
                    return;
                }

                var item = new Item( itemAsset.Value.id, true );

                for ( var i = 0; i < amount; i++ )
                {
                    ItemManager.dropItem( item, pos, true, true, true );
                }

                if ( parameters.Length == 5 )
                    EssLang.SPAWNED_ITEM_AT.SendTo( source, amount, itemAsset.Value.Name, pos.x, pos.y, pos.z );
                else
                    EssLang.SPAWNED_ITEM.SendTo( source, amount, itemAsset.Value.Name );
            }
        }
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            var respawnedCount = 0;

            UWorld.Animals.ForEach( animal =>
            {
                AnimalManager.sendAnimalAlive( animal, animal.transform.position, 0 );
                respawnedCount++;
            });

            EssLang.RESPAWNED_ANIMALS.SendTo( source, respawnedCount );
        }
        public override void OnExecute( ICommandSource src, ICommandArgs args )
        {
            if ( args.Length == 2 )
            {
                var found = UPlayer.TryGet( args[1], player => {
                    var vehId = args[0];

                    if ( !vehId.IsUshort || !IsValidVehicleId( vehId.ToUshort ) )
                    {
                        EssLang.INVALID_VEHICLE_ID.SendTo( src, vehId );
                    }
                    else
                    {
                        VehicleTool.giveVehicle( player.UnturnedPlayer, vehId.ToUshort );
                        EssLang.SPAWNED_VEHICLE_AT_PLAYER.SendTo( src, args[1] );
                    }
                });

                if ( !found )
                {
                    EssLang.PLAYER_NOT_FOUND.SendTo( src, args[1] );
                }
            }
            else if ( args.Length == 4 )
            {
                var pos = args.GetVector3( 1 );
                var vehId = args[0];

                if ( pos.HasValue )
                {
                    var pVal = pos.Value;

                    if ( !vehId.IsUshort || !IsValidVehicleId( vehId.ToUshort ) )
                    {
                        EssLang.INVALID_VEHICLE_ID.SendTo( src, vehId );
                    }
                    else
                    {
                        SpawnVehicle( pVal, vehId.ToUshort );
                        EssLang.SPAWNED_VEHICLE_AT_POSITION.SendTo( src, pVal.x, pVal.y, pVal.z );
                    }
                }
                else
                {
                    EssLang.INVALID_COORDS.SendTo( src, args[1], args[2], args[3] );
                }
            }
            else
            {
                ShowUsage( src );
            }
        }
예제 #13
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            var warps = (
                from warp in EssProvider.WarpManager.Warps
                where warp.CanUse( source )
                select warp.Name
            ).ToArray();

            if ( warps.Length == 0 )
                EssLang.WARP_NONE.SendTo( source );
            else
                EssLang.WARP_LIST.SendTo( source, string.Join( ", ", warps ) );
        }
예제 #14
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            var kits = (
                from kit in EssProvider.KitManager.Kits
                where kit.CanUse( source )
                select kit.Name
            ).ToList();

            if ( kits.Count == 0 )
                EssLang.KIT_NONE.SendTo( source );
            else
                EssLang.KIT_LIST.SendTo( source, string.Join( ", ", kits.ToArray() ) );
        }
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            var killedCount = 0;

            UWorld.Zombies.ForEach( zombie =>
            {
                if ( zombie.isDead ) return;
                ZombieManager.sendZombieDead( zombie, Vector3.zero );
                killedCount++;
            });

            EssLang.KILLED_ZOMBIES.SendTo( source, killedCount );
        }
예제 #16
0
 /// <summary>
 /// Disconnects command source from the command.
 /// </summary>
 /// <param name="commandSource">Reference to command source.</param>
 /// <param name="command">Reference to the command.</param>
 public static void UnRegisterCommandSource(ICommandSource commandSource, ICommand command)
 {
     if (commandSource == null)
         throw new NullReferenceException("commandSource cannot be null");
     if (command == null)
         throw new NullReferenceException("command cannot be null");
     if (_CommandBindings.Contains(command))
     {
         ArrayList subscribers = (ArrayList)_CommandBindings[command];
         if (subscribers.Contains(commandSource))
             subscribers.Remove(commandSource);
     }
     command.CommandSourceUnregistered(commandSource);
 }
예제 #17
0
        /// <summary>
        /// 当可以执行时给予一个特殊的方法
        /// </summary>
        /// <param name="commandSource">核实命令</param>
        /// <returns></returns>
        public static bool CanExecuteCommandSource(ICommandSource commandSource)
        {
            ICommand baseCommand = commandSource.Command;
            if (baseCommand == null)
                return false;

            object commandParameter = commandSource.CommandParameter;
            IInputElement commandTarget = commandSource.CommandTarget;
            RoutedCommand command = baseCommand as RoutedCommand;
            if (command == null)
                return baseCommand.CanExecute(commandParameter);
            if (commandTarget == null)
                commandTarget = commandSource as IInputElement;
            return command.CanExecute(commandParameter, commandTarget);
        }
예제 #18
0
        public override void OnExecute( ICommandSource src, ICommandArgs args )
        {
            switch ( args.Length )
            {
                case 0:
                    if ( src.IsConsole )
                    {
                        ShowUsage( src );
                        return;
                    }

                    var eyePos = src.ToPlayer().GetEyePosition( 3000 );

                    if ( eyePos.HasValue )
                    {
                        Explode( eyePos.Value );
                    }
                    break;

                case 1:
                    var found = UPlayer.TryGet( args[0], player =>
                        Explode( player.Position )
                    );

                    if ( !found )
                    {
                        EssLang.PLAYER_NOT_FOUND.SendTo( src, args[0] );
                    }
                    break;

                case 3:
                    var pos = args.GetVector3( 0 );

                    if ( pos.HasValue )
                    {
                        Explode( pos.Value );
                    }
                    else
                    {
                        EssLang.INVALID_COORDS.SendTo( src, args[0], args[1], args[2] );
                    }
                    break;

                default:
                    ShowUsage( src );
                    return;
            }
        }
예제 #19
0
 public override void OnExecute( ICommandSource source, ICommandArgs parameters )
 {
     if ( parameters.IsEmpty || parameters.Length > 1 )
     {
         ShowUsage( source );
     }
     else if ( !EssProvider.WarpManager.Contains( parameters[0].ToString() ) )
     {
         EssLang.WARP_NOT_EXIST.SendTo( source, parameters[0] );
     }
     else
     {
         EssProvider.WarpManager.Delete( parameters[0].ToString() );
         EssLang.WARP_REMOVED.SendTo( source, parameters[0] );
     }
 }
예제 #20
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            if ( parameters.Length < 2 )
            {
                ShowUsage( source );
            }
            else
            {
                var target = parameters[0].ToPlayer;

                if ( target == null )
                {
                    EssLang.PLAYER_NOT_FOUND.SendTo( source, parameters[0] );
                }
                else
                {
                    var message = string.Format(
                        EssProvider.Config.PrivateMessageFormat,
                        source.DisplayName,
                        parameters.Join( 1 )
                    );

                    target.SendMessage( message );

                    Spies.ForEach( p =>
                    {
                        UPlayer.From( p ).SendMessage( 
                            $"Spy: ({source.DisplayName} -> {target.CharacterName}): {parameters.Join( 1 )}",
                            Color.gray 
                        );
                    } );

                    if ( Conversations.ContainsKey( source.DisplayName ) )
                    {
                        if ( !Conversations[ source.DisplayName ].Equals( target.DisplayName ) )
                        {
                            Conversations[ source.DisplayName ] = target.CharacterName;
                        }
                    }
                    else
                    {
                        Conversations.Add( source.DisplayName, target.DisplayName );
                    }
                }
            }
        }
예제 #21
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            var displayName = source.DisplayName;

            if ( BackDict.ContainsKey( displayName ) )
            {
                source.ToPlayer().Teleport( BackDict[displayName] );

                BackDict.Remove( displayName );

                EssLang.RETURNED.SendTo( source );
            }
            else
            {
                EssLang.NOT_DIED_YET.SendTo( source );
            }
        }
예제 #22
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            if ( parameters.IsEmpty || parameters.Length > 1 )
            {
                if ( source.IsConsole )
                    source.SendMessage( "Use /ping [player]" );
                else
                    EssLang.PING.SendTo( source, source.ToPlayer().Ping );
            }
            else
            {
                var target = parameters[0].ToPlayer;

                if ( target == null )
                    EssLang.PLAYER_NOT_FOUND.SendTo( source, parameters[0] );
                else
                    EssLang.PING_OTHER.SendTo( source, target.DisplayName, target.Ping );
            }
        }
예제 #23
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            var player = source.ToPlayer();

            if ( parameters.IsEmpty )
            {
                ShowUsage( source );
            }
            else if ( parameters[0].Is( "all" ) )
            {
                player.RocketPlayer.Inventory.Items.ToList().ForEach( item => Repair( player, item ) );
                EssLang.ALL_REPAIRED.SendTo( source );
            }
            else if ( parameters[0].Is( "hand" ) )
            {
                Repair( player, player.RocketPlayer.Inventory.Items[0] );
                EssLang.HAND_REPAIRED.SendTo( source );
            }
        }
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            if ( parameters.IsEmpty )
            {
                if ( source.IsConsole )
                {
                    ShowUsage( source );
                    return;
                }

                var currentVeh = source.ToPlayer().CurrentVehicle;

                if ( currentVeh != null )
                {
                    VehicleManager.sendVehicleFuel( currentVeh, currentVeh.asset.fuel );

                    EssLang.VEHICLE_REFUELED.SendTo( source );
                }
                else
                {
                    EssLang.NOT_IN_VEHICLE.SendTo( source );
                }
            }
            else if ( parameters[0].Is( "all" ) )
            {
                var allVehicles = UWorld.Vehicles;

                lock ( allVehicles )
                {
                    allVehicles
                    .Where( veh => !veh.isExploded && !veh.isUnderwater)
                    .ToList()
                    .ForEach( vehicle =>
                    {
                        VehicleManager.sendVehicleFuel( vehicle, vehicle.asset.fuel );
                    });

                    EssLang.VEHICLE_REFUELED_ALL.SendTo( source );
                }
            }
        }
예제 #25
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            if ( parameters.IsEmpty )
            {
                ShowUsage( source );
            }
            else
            {
                var target = parameters[0].ToPlayer;

                if ( target == null )
                {
                    EssLang.PLAYER_NOT_FOUND.SendTo( source, parameters[0] );
                }
                else
                {
                    target.Kill();
                    EssLang.KILL_PLAYER.SendTo( source, target.DisplayName );
                }
            }
        }
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            var count = 0;

            UWorld.Zombies.ForEach( zombie =>
            {
                ZombieManager.sendZombieAlive(
                    zombie,
                    zombie.type,
                    (byte) zombie.speciality,
                    zombie.shirt,
                    zombie.pants,
                    zombie.hat,
                    zombie.gear,
                    zombie.transform.position,
                    0
                );
                count++;
            });

            EssLang.RESPAWNED_ZOMBIES.SendTo( source, count );
        }
예제 #27
0
        /// <summary>
        /// Connects the Command Source to the Command.
        /// </summary>
        /// <param name="commandSource">Command source to connect to the command.</param>
        /// <param name="command">Reference to the command.</param>
        public static void RegisterCommand(ICommandSource commandSource, ICommand command)
        {
            if (commandSource == null)
                throw new NullReferenceException("commandSource cannot be null");
            if (command == null)
                throw new NullReferenceException("command cannot be null");

            ArrayList subscribers = null;
            if (_CommandBindings.Contains(command))
            {
                subscribers = (ArrayList)_CommandBindings[command];
                if (!subscribers.Contains(commandSource))
                    subscribers.Add(commandSource);
            }
            else
            {
                subscribers = new ArrayList();
                subscribers.Add(commandSource);
                _CommandBindings.Add(command, subscribers);
            }
            command.CommandSourceRegistered(commandSource);
        }
예제 #28
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            var players = new List<UPlayer>( UServer.Players );

            if ( players.Count == 0 )
            {
                EssLang.NO_PLAYERS_FOR_KICK.SendTo( source );
            }
            else
            {
                string noReasonMessage = EssLang.KICK_NO_SPECIFIED_REASON.GetMessage();

                players.ForEach( player =>
                {
                    player.Kick( parameters.IsEmpty
                        ? noReasonMessage
                        : parameters.Join( 0 ) );
                } );

                EssLang.KICKED_ALL.SendTo( source, players.Count );
            }
        }
예제 #29
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            if ( parameters.Length == 0 )
            {
                ShowUsage( source );
            }
            else if ( parameters[0].IsOneOf( new []{ "*", "all" } ) )
            {
                foreach ( var player in UServer.Players.Where( player => player.HasComponent<FrozenPlayer>() ) )
                {
                    player.RemoveComponent<FrozenPlayer>();

                    EssLang.UNFROZEN_PLAYER.SendTo( player, source.DisplayName );
                }

                EssLang.UNFROZEN_ALL.SendTo( source );
            }
            else
            {
                var found = UPlayer.TryGet( parameters[0], player => {
                    if ( !player.HasComponent<FrozenPlayer>() )
                    {
                        EssLang.NOT_FROZEN.SendTo( source, player.DisplayName );
                    }
                    else
                    {
                        player.RemoveComponent<FrozenPlayer>();

                        EssLang.UNFROZEN_SENDER.SendTo( source, player.DisplayName );
                        EssLang.UNFROZEN_PLAYER.SendTo( player, source.DisplayName );
                    }
                } );

                if ( !found )
                {
                    EssLang.PLAYER_NOT_FOUND.SendTo( source, parameters[0] );
                }
            }
        }
예제 #30
0
        public override void OnExecute( ICommandSource source, ICommandArgs parameters )
        {
            switch ( parameters.Length )
            {
                case 1:
                    if ( source.IsConsole )
                    {
                        ShowUsage( source );
                        break;
                    }

                    var player = source.ToPlayer();
                    var warp = new Warp( parameters[0].ToString(),  player.Position, player.Rotation );
                    EssProvider.WarpManager.Add( warp );
                    EssLang.WARP_SET.SendTo( source, parameters[0] );
                    break;

                case 4:
                    var pos = parameters.GetVector3( 1 );

                    if ( pos.HasValue )
                    {
                        warp = new Warp( parameters[0].ToString(), pos.Value, 0.0F );

                        EssProvider.WarpManager.Add( warp );

                        EssLang.WARP_SET.SendTo( source, parameters[0] );
                    }
                    else
                    {
                        EssLang.INVALID_COORDS.SendTo( source, parameters[1], parameters[2], parameters[3] );
                    }
                    break;

                default:
                    ShowUsage( source );
                    break;
            }
        }
예제 #31
0
        private CommandResult ClearCommand(ICommandSource src, ICommandArgs args, ICommand cmd)
        {
            if (args.IsEmpty)
            {
                return(CommandResult.ShowUsage());
            }

            /*
             *  TODO: Options
             *      -i = items
             *      -v = vehicles
             *      -z = zombies
             *      -b = barricades
             *      -s = structures
             *      -a = ALL
             *
             *  /clear -i -z -v = items, zombies, vehicles
             */

            var distance = -1;

            if (args.Length > 1)
            {
                if (src.IsConsole)
                {
                    return(CommandResult.ShowUsage());
                }

                if (!args[1].IsInt)
                {
                    return(CommandResult.Lang("INVALID_NUMBER", args[1]));
                }

                if (args[1].ToInt < 1)
                {
                    return(CommandResult.Lang("NUMBER_BETWEEN", 1, int.MaxValue));
                }

                distance = args[1].ToInt;
            }

            switch (args[0].ToLowerString)
            {
            case "ev":
            case "emptyvehicles":
                if (!src.HasPermission(cmd.Permission + ".emptyvehicles"))
                {
                    return(CommandResult.Lang("COMMAND_NO_PERMISSION"));
                }

                src.SendMessage("This command is instable and can cause bugs.", Color.red);

                var toRemove = new List <uint>();
                UWorld.Vehicles
                .Where(v => v.passengers.All(p => p?.player == null))
                .Where(v => {
                    if (distance == -1)
                    {
                        return(true);
                    }
                    return(Vector3.Distance(v.transform.position, src.ToPlayer().Position) <= distance);
                })
                .Select(v => v.instanceID)
                .ForEach(toRemove.Add);

                toRemove.ForEach(id => {
                    VehicleManager.Instance.SteamChannel.send("tellVehicleDestroy", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, id);
                });

                EssLang.Send(src, "CLEAR_EMPTY_VEHICLES", toRemove.Count);
                break;

            case "v":
            case "vehicle":
                return(CommandResult.Generic("This option is currently disabled."));

            /*
             * if (!src.HasPermission(cmd.Permission + ".vehicles")) {
             *  return CommandResult.Lang("COMMAND_NO_PERMISSION");
             * }
             *
             * new Thread(() => {
             *  UWorld.Vehicles.ForEach(v => {
             *      for (byte i = 0; i < v.passengers.Length; i++) {
             *          if (v.passengers[i] == null ||
             *              v.passengers[i].player == null) continue;
             *
             *          Vector3 point;
             *          byte angle;
             *
             *          v.getExit(i, out point, out angle);
             *          VehicleManager.sendExitVehicle(v, i, point, angle, true);
             *      }
             *  });
             *
             *  VehicleManager.askVehicleDestroyAll();
             *  EssLang.Send(src, "CLEAR_VEHICLES");
             * }).Start();
             * break;*/

            case "i":
            case "items":
                if (!src.HasPermission(cmd.Permission + ".items"))
                {
                    return(CommandResult.Lang("COMMAND_NO_PERMISSION"));
                }

                ItemManager.askClearAllItems();
                EssLang.Send(src, "CLEAR_ITEMS");
                break;

            default:
                return(CommandResult.ShowUsage());
            }

            return(CommandResult.Success());
        }
예제 #32
0
 private CommandResult StopTasksCommand(ICommandSource src, ICommandArgs args)
 {
     UEssentials.TaskExecutor.DequeueAll();
     return(CommandResult.Success());
 }
예제 #33
0
 /// <summary>
 /// Execute <see cref="ICommandSource.Command"/> using <see cref="ICommandSource.CommandParameter"/> and <see cref="ICommandSource.CommandTarget"/>.
 /// </summary>
 public static void ExecuteCommand(this ICommandSource commandSource)
 {
     CommandHelper.Execute(commandSource.Command, commandSource.CommandParameter, commandSource.CommandTarget);
 }
예제 #34
0
 public void RemoveCommandSource(ICommandSource commandSource)
 {
     m_CommandSources.Remove(commandSource);
 }
예제 #35
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            if (args.IsEmpty || _validInputs.None(i => i.EqualsIgnoreCase(args[0].ToString())))
            {
                return(CommandResult.ShowUsage());
            }
            if (!src.HasPermission($"{Permission}.{args[0]}"))
            {
                return(CommandResult.NoPermission($"{Permission}.{args[0]}"));
            }
            switch (args[0].ToString().ToLower())
            {
            case "start": {
                if (args.Length < 4)
                {
                    return(CommandResult.InvalidArgs("/poll start [name] [duration] [description]"));
                }

                var pollName = args[1].ToString();

                lock (Polls) {
                    if (Polls.ContainsKey(pollName))
                    {
                        return(CommandResult.Lang("POLL_NAME_IN_USE"));
                    }
                }

                var pollDescription = args.Join(3);

                if (args[2].IsInt)
                {
                    var poll = new Poll(
                        pollName,
                        pollDescription,
                        args[2].ToInt
                        );

                    poll.Start();
                }
                else
                {
                    return(CommandResult.Lang("INVALID_NUMBER", args[2]));
                }
                break;
            }

            case "stop": {
                if (args.Length < 2)
                {
                    return(CommandResult.InvalidArgs("/poll stop [name]"));
                }

                var pollName = args[1].ToString();

                if (!PollExists(pollName, src))
                {
                    return(CommandResult.Empty());
                }

                lock (Polls) {
                    Polls[pollName].Stop();
                }
                break;
            }

            case "list": {
                lock (Polls) {
                    if (!Polls.Any())
                    {
                        return(CommandResult.Lang("POLL_NONE"));
                    }

                    EssLang.Send(src, "POLL_LIST");

                    foreach (var poll in Polls.Values)
                    {
                        EssLang.Send(src,
                                     "POLL_LIST_ENTRY",
                                     poll.Name,
                                     poll.Description,
                                     poll.YesVotes,
                                     poll.NoVotes
                                     );
                    }
                }
                break;
            }

            case "info": {
                lock (Polls) {
                    if (!Polls.Any())
                    {
                        return(CommandResult.Lang("POLL_NONE"));
                    }

                    if (args.Length < 2)
                    {
                        return(CommandResult.InvalidArgs("Use /poll info [poll_name]"));
                    }

                    var pollName = args[1].ToString();

                    if (!PollExists(pollName, src))
                    {
                        return(CommandResult.Empty());
                    }

                    var poll = Polls[pollName];

                    EssLang.Send(src, "POLL_INFO", pollName);

                    EssLang.Send(
                        src,
                        "POLL_LIST_ENTRY",
                        pollName,
                        poll.Description,
                        poll.YesVotes,
                        poll.NoVotes
                        );
                }
                break;
            }
            }

            return(CommandResult.Success());
        }
예제 #36
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            if (args.Length == 0 || (args.Length == 1 && src.IsConsole))
            {
                return(CommandResult.ShowUsage());
            }

            if (args.Length == 1)
            {
                var player = src.ToPlayer();

                if (!KitModule.Instance.KitManager.Contains(args[0].ToString()))
                {
                    return(CommandResult.Lang("KIT_NOT_EXIST", args[0]));
                }

                var kitName      = args[0].ToLowerString;
                var requestedKit = KitModule.Instance.KitManager.GetByName(kitName);

                if (!requestedKit.CanUse(player))
                {
                    return(CommandResult.Lang("KIT_NO_PERMISSION"));
                }

                var steamPlayerId = player.CSteamId.m_SteamID;
                var kitCost       = requestedKit.Cost;

                if (kitCost > 0 && UEssentials.EconomyProvider.IsPresent)
                {
                    var ecoProvider = UEssentials.EconomyProvider.Value;

                    if (!ecoProvider.Has(player, kitCost))
                    {
                        return(CommandResult.Lang("KIT_NO_MONEY", kitCost, ecoProvider.CurrencySymbol));
                    }
                }

                if (!src.HasPermission("essentials.bypass.kitcooldown"))
                {
                    var globalCooldown = EssCore.Instance.Config.Kit.GlobalCooldown;

                    if (globalCooldown > 0)
                    {
                        if (GlobalCooldown.ContainsKey(steamPlayerId))
                        {
                            var remainingTime = DateTime.Now - GlobalCooldown[steamPlayerId];

                            if ((remainingTime.TotalSeconds + 1) > globalCooldown)
                            {
                                GlobalCooldown[steamPlayerId] = DateTime.Now;
                            }
                            else
                            {
                                return(CommandResult.Lang("KIT_GLOBAL_COOLDOWN",
                                                          TimeUtil.FormatSeconds((uint)(globalCooldown - remainingTime.TotalSeconds))));
                            }
                        }
                        else
                        {
                            GlobalCooldown.Add(steamPlayerId, DateTime.Now);
                        }
                    }
                    else
                    {
                        var kitCooldown = requestedKit.Cooldown;

                        if (!Cooldowns.ContainsKey(steamPlayerId))
                        {
                            Cooldowns.Add(steamPlayerId, new Dictionary <string, DateTime>());
                        }
                        else if (Cooldowns[steamPlayerId] == null)
                        {
                            Cooldowns[steamPlayerId] = new Dictionary <string, DateTime>();
                        }

                        if (Cooldowns[steamPlayerId].ContainsKey(kitName))
                        {
                            var remainingTime = DateTime.Now - Cooldowns[steamPlayerId][kitName];

                            if ((remainingTime.TotalSeconds + 1) > kitCooldown)
                            {
                                Cooldowns[steamPlayerId][kitName] = DateTime.Now;
                            }
                            else
                            {
                                return(CommandResult.Lang("KIT_COOLDOWN", TimeUtil.FormatSeconds(
                                                              (uint)(kitCooldown - remainingTime.TotalSeconds))));
                            }
                        }
                        else
                        {
                            Cooldowns[steamPlayerId].Add(kitName, DateTime.Now);
                        }
                    }
                }

                if (kitCost > 0)
                {
                    UEssentials.EconomyProvider.IfPresent(ec => {
                        ec.Withdraw(player, kitCost);
                        EssLang.Send(player, "KIT_PAID", kitCost, ec.CurrencySymbol);
                    });
                }

                requestedKit.GiveTo(player);
            }
            else if (args.Length == 2)
            {
                var kitName = args[0].ToLowerString;

                if (!src.HasPermission($"essentials.kit.{kitName}.other"))
                {
                    return(CommandResult.Empty());
                }

                if (!KitModule.Instance.KitManager.Contains(kitName))
                {
                    return(CommandResult.Lang("KIT_NOT_EXIST", kitName));
                }

                var kit = KitModule.Instance.KitManager.GetByName(kitName);

                if (args[1].Equals("*"))
                {
                    UServer.Players.ForEach(kit.GiveTo);
                    EssLang.Send(src, "KIT_GIVEN_SENDER_ALL", kitName);
                }
                else
                {
                    var target = args[1].ToPlayer;

                    if (target == null)
                    {
                        return(CommandResult.Lang("PLAYER_NOT_FOUND", args[1]));
                    }

                    kit.GiveTo(target);
                    EssLang.Send(src, "KIT_GIVEN_SENDER", kitName, target);
                }
            }

            return(CommandResult.Success());
        }
예제 #37
0
 internal static void ExecuteCommandSource(ICommandSource commandSource)
 {
     CriticalExecuteCommandSource(commandSource, false);
 }
예제 #38
0
 private CommandResult SystemTimeCommand(ICommandSource src, ICommandArgs args)
 {
     src.SendMessage(DateTime.Now, Color.yellow);
     return(CommandResult.Success());
 }
예제 #39
0
        private CommandResult VehicleCommand(ICommandSource src, ICommandArgs args, ICommand cmd)
        {
            switch (args.Length)
            {
            case 1:
                if (src.IsConsole)
                {
                    return(CommandResult.ShowUsage());
                }

                var optAsset = VehicleUtil.GetVehicle(args[0].ToString());

                if (optAsset.IsAbsent)
                {
                    return(CommandResult.LangError("INVALID_VEHICLE_ID", args[0]));
                }

                var id = optAsset.Value.id;

                if (UEssentials.Config.VehicleBlacklist.Contains(id) &&
                    !src.HasPermission("essentials.bypass.blacklist.vehicle"))
                {
                    return(CommandResult.LangError("BLACKLISTED_VEHICLE", $"{optAsset.Value.vehicleName} ({id})"));
                }

                VehicleTool.giveVehicle(src.ToPlayer().UnturnedPlayer, id);

                EssLang.Send(src, "RECEIVED_VEHICLE", optAsset.Value.vehicleName, id);
                break;

            case 2:
                if (!src.HasPermission($"{cmd.Permission}.other"))
                {
                    return(CommandResult.LangError("COMMAND_NO_PERMISSION"));
                }

                optAsset = VehicleUtil.GetVehicle(args[1].ToString());

                if (optAsset.IsAbsent)
                {
                    return(CommandResult.LangError("INVALID_VEHICLE_ID", args[1]));
                }

                var vehAsset = optAsset.Value;

                if (args[0].Equals("*"))
                {
                    UServer.Players.ForEach(p => {
                        VehicleTool.giveVehicle(p.UnturnedPlayer, vehAsset.id);
                    });

                    EssLang.Send(src, "GIVEN_VEHICLE_ALL", vehAsset.vehicleName, vehAsset.id);
                }
                else if (!args[0].IsValidPlayerIdentifier)
                {
                    return(CommandResult.LangError("PLAYER_NOT_FOUND", args[0]));
                }
                else
                {
                    var target = args[0].ToPlayer;
                    VehicleTool.giveVehicle(target.UnturnedPlayer, vehAsset.id);

                    EssLang.Send(src, "GIVEN_VEHICLE", vehAsset.vehicleName, vehAsset.id, target.DisplayName);
                }
                break;

            default:
                return(CommandResult.ShowUsage());
            }

            return(CommandResult.Success());
        }
예제 #40
0
        private CommandResult OnlineCommand(ICommandSource src, ICommandArgs args, ICommand cmd)
        {
            EssLang.Send(src, "ONLINE_PLAYERS", UServer.Players.Count(), UServer.MaxPlayers);

            return(CommandResult.Success());
        }
예제 #41
0
파일: Kit.cs 프로젝트: demiit/uEssentials
 /// <summary>
 /// <returns> If determinated player has permission for this kit </returns>
 /// </summary>
 public bool CanUse(ICommandSource player)
 {
     return(player.HasPermission($"essentials.kit.{Name.ToLowerInvariant()}"));
 }
예제 #42
0
 public void AddCommandSource(ICommandSource commandSource)
 {
     m_CommandSources.Add(commandSource);
 }
예제 #43
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            if (args.Length < 1)
            {
                return(CommandResult.ShowUsage());
            }

            var player   = src.ToPlayer();
            var senderId = player.CSteamId.m_SteamID;

            switch (args[0].ToLowerString)
            {
            case "accept":
            case "a":
            {
                if (!player.HasPermission($"{Permission}.accept"))
                {
                    return(CommandResult.Lang(EssLang.COMMAND_NO_PERMISSION));
                }

                if (!Requests.ContainsValue(senderId))
                {
                    return(CommandResult.Lang(EssLang.TPA_NONE));
                }

                var whoSentId = new List <ulong>(Requests.Keys).FirstOrDefault(k => Requests[k] == senderId);
                var whoSent   = UPlayer.From(new Steamworks.CSteamID(whoSentId));

                /* Should never happen */
                if (whoSent == null)
                {
                    return(CommandResult.Lang(EssLang.TPA_NONE));
                }

                if (whoSent.Stance == EPlayerStance.DRIVING ||
                    whoSent.Stance == EPlayerStance.SITTING)
                {
                    EssLang.CANNOT_TELEPORT_DRIVING.SendTo(whoSent);
                    return(CommandResult.Lang(EssLang.TPA_CANNOT_TELEPORT, whoSent.DisplayName));
                }

                EssLang.TPA_ACCEPTED_SENDER.SendTo(src, whoSent.DisplayName);
                EssLang.TPA_ACCEPTED.SendTo(whoSent, src.DisplayName);
                Requests.Remove(whoSentId);

                var tpaSettings = EssCore.Instance.Config.Tpa;

                if (tpaSettings.TeleportDelay > 0)
                {
                    Tasks.New(t => {
                            if (!whoSent.IsOnline || !player.IsOnline)
                            {
                                return;
                            }
                            whoSent.Teleport(player.Position);
                        }).Delay(tpaSettings.TeleportDelay * 1000).Go();
                }
                else
                {
                    whoSent.Teleport(player.Position);
                }
                break;
            }

            case "deny":
            case "d":
            {
                if (!player.HasPermission($"{Permission}.deny"))
                {
                    return(CommandResult.Lang(EssLang.COMMAND_NO_PERMISSION));
                }

                if (!Requests.ContainsValue(senderId))
                {
                    return(CommandResult.Lang(EssLang.TPA_NONE));
                }

                var whoSentId = new List <ulong>(Requests.Keys).FirstOrDefault(k => Requests[k] == senderId);
                var whoSent   = UPlayer.From(new Steamworks.CSteamID(whoSentId));

                if (whoSent != null)
                {
                    EssLang.TPA_DENIED.SendTo(whoSent, src.DisplayName);
                }

                EssLang.TPA_DENIED_SENDER.SendTo(src, whoSent == null ? "Unknown" : whoSent.DisplayName);
                Requests.Remove(whoSentId);
                break;
            }

            case "cancel":
            case "c":
            {
                if (!player.HasPermission($"{Permission}.cancel"))
                {
                    return(CommandResult.Lang(EssLang.COMMAND_NO_PERMISSION));
                }

                if (!Requests.ContainsKey(senderId))
                {
                    return(CommandResult.Lang(EssLang.TPA_NONE));
                }

                Requests.Remove(senderId);
                EssLang.TPA_CANCELLED.SendTo(src);
                break;
            }

            default:
            {
                if (!player.HasPermission($"{Permission}.send"))
                {
                    return(CommandResult.Lang(EssLang.COMMAND_NO_PERMISSION));
                }

                if (!args[0].IsValidPlayerName)
                {
                    return(CommandResult.Lang(EssLang.PLAYER_NOT_FOUND, args[0]));
                }

                /*
                 *  Cancel current request
                 */
                if (Requests.ContainsKey(senderId))
                {
                    Requests.Remove(senderId);
                }

                var target = args[0].ToPlayer;

                if (target == player)
                {
                    return(CommandResult.Lang(EssLang.TPA_YOURSELF));
                }

                Requests.Add(senderId, target.CSteamId.m_SteamID);
                EssLang.TPA_SENT_SENDER.SendTo(src, target.DisplayName);
                EssLang.TPA_SENT.SendTo(target, src.DisplayName);

                var tpaSettings = EssCore.Instance.Config.Tpa;

                if (tpaSettings.ExpireDelay > 0)
                {
                    Tasks.New(t => {
                            Requests.Remove(senderId);
                        }).Delay(tpaSettings.ExpireDelay * 1000).Go();
                }
                else
                {
                    Requests.Remove(senderId);
                }
                break;
            }
            }

            return(CommandResult.Success());
        }
예제 #44
0
 public CommandEvent([NotNull] ICommand command, ICommandArgs args, ICommandSource src)
 {
     Command   = command;
     Arguments = args;
     Source    = src;
 }
예제 #45
0
 private CommandResult ClsCommand(ICommandSource src, ICommandArgs args)
 {
     Console.Clear();
     return(CommandResult.Success());
 }
예제 #46
0
 public static void Execute(ICommandSource source)
 {
     Execute(source, source.CommandParameter);
 }
 public CommandPosExecuteEvent(ICommand command, ICommandArgs args, ICommandSource src,
                               CommandResult result) : base(command, args, src)
 {
     Preconditions.NotNull(result, "result cannot be null");
     Result = result;
 }
예제 #48
0
        private CommandResult VehicleFeaturesCommand(ICommandSource src, ICommandArgs args, ICommand cmd)
        {
            var toggleVal = GetToggleValue(args[1]);

            if (!toggleVal.HasValue)
            {
                return(CommandResult.LangError("INVALID_BOOLEAN", args[1]));
            }

            var player    = src.ToPlayer();
            var component = player.GetComponent <VehicleFeatures>() ?? player.AddComponent <VehicleFeatures>();

            switch (args[0].ToLowerString)
            {
            case "autorefuel":
                if (!src.HasPermission($"{cmd.Permission}.autorefuel"))
                {
                    return(CommandResult.NoPermission($"{cmd.Permission}.autorefuel"));
                }
                if (toggleVal.Value)
                {
                    component.AutoRefuel = true;
                    EssLang.Send(src, "AUTO_REFUEL_ENABLED");
                }
                else
                {
                    component.AutoRefuel = false;
                    EssLang.Send(src, "AUTO_REFUEL_DISABLED");
                }
                break;

            case "autorepair":
                if (!src.HasPermission($"{cmd.Permission}.autorepair"))
                {
                    return(CommandResult.NoPermission($"{cmd.Permission}.autorepair"));
                }
                if (toggleVal.Value)
                {
                    component.AutoRepair = true;
                    EssLang.Send(src, "AUTO_REPAIR_ENABLED");
                }
                else
                {
                    component.AutoRepair = false;
                    EssLang.Send(src, "AUTO_REPAIR_DISABLED");
                }
                break;

            case "all":
                if (!src.HasPermission($"{cmd.Permission}.all"))
                {
                    return(CommandResult.NoPermission($"{cmd.Permission}.all"));
                }
                if (toggleVal.Value)
                {
                    component.AutoRepair = true;
                    component.AutoRefuel = true;
                    EssLang.Send(src, "AUTO_REPAIR_ENABLED");
                    EssLang.Send(src, "AUTO_REFUEL_ENABLED");
                }
                else
                {
                    component.AutoRepair = false;
                    component.AutoRefuel = false;
                    EssLang.Send(src, "AUTO_REPAIR_DISABLED");
                    EssLang.Send(src, "AUTO_REFUEL_DISABLED");
                }
                break;

            default:
                return(CommandResult.ShowUsage());
            }

            return(CommandResult.Success());
        }
예제 #49
0
 /// <summary>
 /// <returns> If determinated player has permission for this kit </returns>
 /// </summary>
 public bool CanUse(ICommandSource player)
 {
     return(player.HasPermission($"essentials.kit.{Name}"));
 }
예제 #50
0
        private CommandResult ItemCommand(ICommandSource src, ICommandArgs args, ICommand cmd)
        {
            switch (args.Length)
            {
            /*
             *  /i [item]
             */
            case 1:
                if (src.IsConsole)
                {
                    return(CommandResult.ShowUsage());
                }
                GiveItem(src, src.ToPlayer(), args[0], One);
                break;

            /*
             *  /i [item] [amount]
             *  /i [player] [item]
             *  /i all [item]
             */
            case 2:
                if (args[1].IsInt)
                {
                    if (src.IsConsole)
                    {
                        return(CommandResult.ShowUsage());
                    }
                    GiveItem(src, src.ToPlayer(), args[0], args[1]);
                }
                else if (args[0].Equals("*"))
                {
                    GiveItem(src, null, args[1], One, true);
                }
                else if (!args[0].IsValidPlayerIdentifier)
                {
                    return(CommandResult.LangError("PLAYER_NOT_FOUND", args[0]));
                }
                else
                {
                    GiveItem(src, args[0].ToPlayer, args[1], One);
                }
                break;

            /*
             *  /i [player] [item] [amount]
             *  /i all [item] [amount]
             */
            case 3:
                if (args[0].Equals("*"))
                {
                    GiveItem(src, null, args[1], args[2], true);
                }
                else if (!args[0].IsValidPlayerIdentifier)
                {
                    return(CommandResult.LangError("PLAYER_NOT_FOUND", args[0]));
                }
                else
                {
                    GiveItem(src, args[0].ToPlayer, args[1], args[2]);
                }
                break;

            default:
                return(CommandResult.ShowUsage());
            }

            return(CommandResult.Success());
        }
예제 #51
0
        private CommandResult SkillCommand(ICommandSource src, ICommandArgs args)
        {
            switch (args.Length)
            {
            // /skill [skill] [value]
            case 2:
                if (src.IsConsole)
                {
                    return(CommandResult.ShowUsage());
                }

                var optSkill = USkill.FromName(args[0].ToString());

                if (optSkill.IsAbsent)
                {
                    return(CommandResult.Lang("INVALID_SKILL", args[0]));
                }

                var  player = src.ToPlayer();
                byte value;

                if (args[1].Equals("max"))
                {
                    value = player.GetSkill(optSkill.Value).max;
                }
                else if (args[1].IsInt)
                {
                    if (args[1].ToInt <0 || args[1].ToInt> byte.MaxValue)
                    {
                        return(CommandResult.Lang("NEGATIVE_OR_LARGE"));
                    }

                    value = (byte)args[1].ToInt;
                }
                else
                {
                    return(CommandResult.Lang("INVALID_NUMBER", args[1]));
                }

                player.SetSkillLevel(optSkill.Value, value);
                EssLang.Send(src, "SKILL_SET", optSkill.Value.Name.Capitalize(), args[1]);
                break;

            // /skill [player|*] [skill] [value]
            case 3:
                if (args[0].Equals("*"))
                {
                    if (!UServer.Players.Any())
                    {
                        return(CommandResult.Lang("ANYONE_ONLINE"));
                    }

                    player = UServer.Players.First();
                }
                else
                {
                    if (!args[0].IsValidPlayerIdentifier)
                    {
                        return(CommandResult.Lang("PLAYER_NOT_FOUND"));
                    }

                    player = args[0].ToPlayer;
                }

                optSkill = USkill.FromName(args[1].ToString());

                if (optSkill.IsAbsent)
                {
                    return(CommandResult.Lang("INVALID_SKILL", args[0]));
                }

                if (args[2].Equals("max"))
                {
                    value = player.GetSkill(optSkill.Value).max;
                }
                else if (args[2].IsInt)
                {
                    if (args[2].ToInt <0 || args[2].ToInt> byte.MaxValue)
                    {
                        return(CommandResult.Lang("NEGATIVE_OR_LARGE"));
                    }

                    value = (byte)args[2].ToInt;
                }
                else
                {
                    return(CommandResult.Lang("INVALID_NUMBER", args[2]));
                }

                if (args[0].Equals("*"))
                {
                    UServer.Players.ForEach(p => p.SetSkillLevel(optSkill.Value, value));
                    EssLang.Send(src, "SKILL_SET_ALL", optSkill.Value.Name.Capitalize(), args[2]);
                }
                else
                {
                    player.SetSkillLevel(optSkill.Value, value);
                    EssLang.Send(src, "SKILL_SET_PLAYER", optSkill.Value.Name.Capitalize(),
                                 player.CharacterName, args[2]);
                }
                break;

            default:
                return(CommandResult.ShowUsage());
            }
            return(CommandResult.Success());
        }
예제 #52
0
        private CommandResult ClearCommand(ICommandSource src, ICommandArgs args, ICommand cmd)
        {
            if (args.IsEmpty)
            {
                return(CommandResult.ShowUsage());
            }

            /*
             *  TODO: Options
             *      -i = items
             *      -v = vehicles
             *      -z = zombies
             *      -b = barricades
             *      -s = structures
             *      -a = ALL
             *
             *  /clear -i -z -v = items, zombies, vehicles
             */

            var distance = -1;

            if (args.Length > 1)
            {
                if (src.IsConsole)
                {
                    return(CommandResult.ShowUsage());
                }

                if (!args[1].IsInt)
                {
                    return(CommandResult.LangError("INVALID_NUMBER", args[1]));
                }

                if (args[1].ToInt < 1)
                {
                    return(CommandResult.LangError("NUMBER_BETWEEN", 1, int.MaxValue));
                }

                distance = args[1].ToInt;
            }

            switch (args[0].ToLowerString)
            {
            case "ev":
            case "emptyvehicles":
                if (!src.HasPermission(cmd.Permission + ".emptyvehicles"))
                {
                    return(CommandResult.LangError("COMMAND_NO_PERMISSION"));
                }

                src.SendMessage("This command is unstable and can cause bugs.", Color.yellow);

                var numRemoved = 0;
                //VehicleManager.vehicles
                //    .Where(v => v.passengers.All(p => p?.player == null)) // Check if it's has no passengers
                //    .Where(v =>
                //    {
                //        if (v.id == 186 || v.id == 187) return false; // Ignore trains; TODO: config blacklist for this?
                //        if (distance == -1) return true;

                //        return Vector3.Distance(v.transform.position, src.ToPlayer().Position) <= distance;
                //    })
                //    .Select(v => v.instanceID)
                //    .ToList()
                //    .ForEach(id =>
                //    {
                //        VehicleManager.instance.channel.send("tellVehicleDestroy", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, id);
                //        numRemoved++;
                //    });
                //VehicleManager.vehicles
                //   .Where(v => v.passengers.All(p => p?.player == null)) // Check if it's has no passengers
                //   .Where(v =>
                //   {
                //       if (v.id == 186 || v.id == 187) return false; // Ignore trains; TODO: config blacklist for this?
                //        if (distance == -1) return true;

                //       return Vector3.Distance(v.transform.position, src.ToPlayer().Position) <= distance;
                //   })
                //   .Select(v => v.instanceID)
                //   .ToList()
                //   .ForEach(id =>
                //   {
                //       VehicleManager.instance.channel.send("tellVehicleDestroy", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, id);
                //       numRemoved++;
                //   });
                for (byte i = 0; i < VehicleManager.vehicles.Count; i++)
                {
                    VehicleManager.instance.channel.send("tellVehicleDestroy", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, VehicleManager.vehicles[i].instanceID);
                    numRemoved++;
                }
                for (byte i = 0; i < VehicleManager.vehicles.Count; i++)
                {
                    VehicleManager.instance.channel.send("tellVehicleDestroy", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, VehicleManager.vehicles[i].instanceID);
                    numRemoved++;
                }
                //while (VehicleManager.vehicles.Count != 0)
                //{
                //    for (byte i = 0; i < VehicleManager.vehicles.Count; i++)
                //    {
                //        VehicleManager.instance.channel.send("tellVehicleDestroy", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, VehicleManager.vehicles[i].instanceID);
                //        numRemoved++;
                //    }
                //}
                //for (byte i = (byte)(VehicleManager.vehicles.Count - 1); i >= 0 ; i--)
                //{
                //    VehicleManager.instance.channel.send("tellVehicleDestroy", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, VehicleManager.vehicles[i].instanceID);
                //    numRemoved++;
                //}

                //InteractableVehicle[] vehicles = new InteractableVehicle[VehicleManager.vehicles.Count];
                //for (byte i = 0; i < VehicleManager.vehicles.Count; i++)
                //{
                //    vehicles[i] = VehicleManager.vehicles[i];
                //}
                //Console.WriteLine($"VehicleManager.vehicles.Count: {VehicleManager.vehicles.Count}");
                //int len = (VehicleManager.vehicles.Count - 1);
                //for (int index1 = len; index1 >= 0; index1--)
                //{
                //    Console.WriteLine($"index1: {index1}");
                //    //VehicleManager.vehicles.Remove(VehicleManager.vehicles[index1]);
                //    UnityEngine.Object.Destroy((UnityEngine.Object)VehicleManager.vehicles[index1].gameObject);
                //}
                //Console.WriteLine($"VehicleManager.vehicles.Count: {VehicleManager.vehicles.Count}");
                //VehicleManager.respawnVehicleIndex = (ushort)0;
                //VehicleManager.vehicles.Clear();

                //for (byte i = 1; i < vehicles.Length - 1; i++)
                //{
                //    if (vehicles[i].passengers != null || vehicles[i].passengers.Length != 0 || vehicles[i].id == 186 || vehicles[i].id == 187)
                //        continue;
                //    VehicleManager.instance.channel.send("tellVehicleDestroy", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, vehicles[i].instanceID);
                //}

                EssLang.Send(src, "CLEAR_EMPTY_VEHICLES", numRemoved);
                break;

            case "i":
            case "items":
                if (!src.HasPermission(cmd.Permission + ".items"))
                {
                    return(CommandResult.LangError("COMMAND_NO_PERMISSION"));
                }

                ItemManager.askClearAllItems();
                EssLang.Send(src, "CLEAR_ITEMS");
                break;

            default:
                return(CommandResult.ShowUsage());
            }

            return(CommandResult.Success());
        }
예제 #53
0
        private static void GiveItem(ICommandSource src, UPlayer target, ICommandArgument itemArg,
                                     ICommandArgument amountArg, bool allPlayers = false)
        {
            if (!src.HasPermission("essentials.command.item.other") && target != src)
            {
                EssLang.Send(src, "COMMAND_NO_PERMISSION");
                return;
            }

            var optAsset = ItemUtil.GetItem(itemArg.ToString());

            if (optAsset.IsAbsent)
            {
                EssLang.Send(src, "ITEM_NOT_FOUND", itemArg);
                return;
            }

            if (UEssentials.Config.GiveItemBlacklist.Contains(optAsset.Value.id) &&
                !src.HasPermission("essentials.bypass.blacklist.item"))
            {
                EssLang.Send(src, "BLACKLISTED_ITEM", $"{optAsset.Value.itemName} ({optAsset.Value.Id})");
                return;
            }

            ushort amt = 1;

            if (amountArg != null)
            {
                if (!amountArg.IsShort)
                {
                    EssLang.Send(src, "INVALID_NUMBER", amountArg);
                }
                else if (amountArg.ToShort <= 0)
                {
                    EssLang.Send(src, "MUST_POSITIVE");
                }
                else
                {
                    amt = amountArg.ToUShort;
                    goto give;
                }
                return;
            }

give:
            var asset = optAsset.Value;
            var playersToReceive = new List <UPlayer>();
            var item             = new Item(asset.id, true);

            if (asset is ItemFuelAsset)
            {
                item.Metadata[0] = 244;
                item.Metadata[1] = 1;
            }

            if (!src.HasPermission("essentials.bypass.itemlimit") && amt > UEssentials.Config.ItemSpawnLimit)
            {
                amt = UEssentials.Config.ItemSpawnLimit;
                EssLang.Send(src, "ITEM_LIMIT", amt);
            }

            if (allPlayers)
            {
                UServer.Players.ForEach(playersToReceive.Add);
                EssLang.Send(src, "GIVEN_ITEM_ALL", amt, asset.Name, asset.Id);
            }
            else
            {
                playersToReceive.Add(target);

                if (!src.IsConsole && src.ToPlayer() == target)
                {
                    goto give2;
                }

                EssLang.Send(src, "GIVEN_ITEM", amt, asset.Name, asset.Id, target.CharacterName);
            }

give2:
            playersToReceive.ForEach(p => {
                var success = p.GiveItem(item, amt, true);

                EssLang.Send(p, "RECEIVED_ITEM", amt, asset.Name, asset.Id);

                if (!success)
                {
                    EssLang.Send(p, "INVENTORY_FULL");
                }
            });
        }
예제 #54
0
 /// <summary>
 /// Determines whether the <see cref="ICommandSource.Command"/> can be executed using <see cref="ICommandSource.CommandParameter"/> and <see cref="ICommandSource.CommandTarget"/>.
 /// </summary>
 /// <returns>Returns the commands result of CanExecute.</returns>
 public static bool CanExecuteCommand(this ICommandSource commandSource)
 {
     return(CommandHelper.CanExecute(commandSource.Command, commandSource.CommandParameter, commandSource.CommandTarget));
 }
예제 #55
0
 public static bool CanExecute(ICommandSource source)
 {
     return(CanExecute(source.Command, source.CommandParameter, source.CommandTarget));
 }
예제 #56
0
        private CommandResult SuicideCommand(ICommandSource src, ICommandArgs args)
        {
            src.ToPlayer().Suicide();

            return(CommandResult.Success());
        }
예제 #57
0
 public CommandPosExecuteEvent(ICommand command, ICommandArgs args,
                               ICommandSource src, CommandResult result) : base(command, args, src)
 {
     Result = result;
 }
예제 #58
0
 /// <summary>
 /// Check If source has permission to use this warp
 /// </summary>
 /// <param name="source">Source that you want to check if is authorized</param>
 /// <returns>If source has permission to use this warp</returns>
 public bool CanUse(ICommandSource source)
 {
     return(source.HasPermission($"essentials.warp.{Name.ToLowerInvariant()}"));
 }
예제 #59
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            var player = src.ToPlayer();

            if (args.Length < 1)
            {
                return(CommandResult.ShowUsage());
            }

            var  name                 = args[0].ToString();
            uint cooldown             = 0;
            var  resetCooldownWhenDie = false;
            var  cost                 = 0d;

            if (KitModule.Instance.KitManager.Contains(name))
            {
                return(CommandResult.Lang(EssLang.KIT_ALREADY_EXIST, name));
            }

            if (args.Length > 1)
            {
                if (!args[1].IsInt)
                {
                    return(CommandResult.Lang(EssLang.INVALID_NUMBER, args[1]));
                }

                if (args[1].ToInt < 0)
                {
                    return(CommandResult.Lang(EssLang.MUST_POSITIVE));
                }

                cooldown = args[1].ToUint;
            }

            if (args.Length > 2)
            {
                if (!args[2].IsBool)
                {
                    return(CommandResult.Lang(EssLang.INVALID_BOOLEAN, args[2]));
                }

                resetCooldownWhenDie = args[2].ToBool;
            }

            if (args.Length > 3)
            {
                if (!args[3].IsDouble)
                {
                    return(CommandResult.Lang(EssLang.INVALID_NUMBER, args[3]));
                }

                if (args[3].ToDouble < 0)
                {
                    return(CommandResult.Lang(EssLang.MUST_POSITIVE));
                }

                cost = args[3].ToDouble;
            }

            var inventory = player.Inventory;
            var clothing  = player.Clothing;
            var items     = new List <AbstractKitItem>();

            Action <byte> addItemsFromPage = page =>
            {
                var count = inventory.getItemCount(page);

                for (byte index = 0; index < count; index++)
                {
                    var item = inventory.getItem(page, index).item;

                    if (item == null)
                    {
                        continue;
                    }

                    var     asset = GetItem(item.id).Value;
                    KitItem kitItem;

                    if (asset is ItemWeaponAsset)
                    {
                        var ammo     = GetWeaponAmmo(item);
                        var firemode = GetWeaponFiremode(item).OrElse(EFiremode.SAFETY);

                        var kItem = new KitItemWeapon(item.id, item.Durability, 1, ammo.OrElse(0), firemode)
                        {
                            Magazine = GetWeaponAttachment(item, AttachmentType.MAGAZINE).OrElse(null),
                            Barrel   = GetWeaponAttachment(item, AttachmentType.BARREL).OrElse(null),
                            Sight    = GetWeaponAttachment(item, AttachmentType.SIGHT).OrElse(null),
                            Grip     = GetWeaponAttachment(item, AttachmentType.GRIP).OrElse(null),
                            Tactical = GetWeaponAttachment(item, AttachmentType.TACTICAL).OrElse(null)
                        };

                        kitItem = kItem;
                    }
                    else if (asset is ItemMagazineAsset || asset is ItemSupplyAsset)
                    {
                        kitItem = new KitItemMagazine(item.id, item.Durability, 1, item.Amount);
                    }
                    else
                    {
                        kitItem = new KitItem(item.id, item.Durability, 1);
                    }

                    kitItem.Metadata = item.Metadata;

                    items.Add(kitItem);
                }
            };

            addItemsFromPage(0);   // Primary slot
            addItemsFromPage(1);   // Secondary slot
            addItemsFromPage(2);   // Hands

            // Backpack

            if (clothing.backpack != 0)
            {
                items.Add(new KitItem(clothing.backpack, clothing.backpackQuality, 1)
                {
                    Metadata = clothing.backpackState
                });
            }

            addItemsFromPage(3);

            // End Backpack

            // Shirt

            if (clothing.shirt != 0)
            {
                items.Add(new KitItem(clothing.shirt, clothing.shirtQuality, 1)
                {
                    Metadata = clothing.shirtState
                });
            }

            addItemsFromPage(5);

            // End Shirt

            // Vest

            if (clothing.vest != 0)
            {
                items.Add(new KitItem(clothing.vest, clothing.vestQuality, 1)
                {
                    Metadata = clothing.vestState
                });
            }

            addItemsFromPage(4);

            // End Vest

            // Pants

            if (clothing.pants != 0)
            {
                items.Add(new KitItem(clothing.pants, clothing.pantsQuality, 1)
                {
                    Metadata = clothing.pantsState
                });
            }

            addItemsFromPage(6);

            // End Pants

            // Mask, Glasses & Hat

            if (clothing.mask != 0)
            {
                items.Add(new KitItem(clothing.mask, clothing.maskQuality, 1)
                {
                    Metadata = clothing.maskState
                });
            }

            if (clothing.hat != 0)
            {
                items.Add(new KitItem(clothing.hat, clothing.hatQuality, 1)
                {
                    Metadata = clothing.hatState
                });
            }

            if (clothing.glasses != 0)
            {
                items.Add(new KitItem(clothing.glasses, clothing.glassesQuality, 1)
                {
                    Metadata = clothing.glassesState
                });
            }

            // End Mask, Glasses & Hat

            var kit = new Kit(name, cooldown, (decimal)cost, resetCooldownWhenDie)
            {
                Items = items
            };

            KitModule.Instance.KitManager.Add(kit);
            EssLang.CREATED_KIT.SendTo(src, name);

            return(CommandResult.Success());
        }
예제 #60
0
        public override CommandResult OnExecute( ICommandSource src, ICommandArgs args )
        {
            if ( args.IsEmpty )
            {
                if ( src.IsConsole )
                {
                    return CommandResult.ShowUsage();
                }
            }
            else if ( !src.HasPermission( Permission + ".other" ) )
            {
                return CommandResult.Lang( EssLang.COMMAND_NO_PERMISSION );
            }

            var player = args.Length > 0 ? args[0].ToPlayer : src.ToPlayer();

            if ( player == null )
            {
                return CommandResult.Lang( EssLang.PLAYER_NOT_FOUND, args[0] );
            }

            var playerInventory = player.Inventory;

            // "Remove "models" of items from player "body""
            player.Channel.send( "tellSlot", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, (byte) 0, (byte) 0, new byte[0] );
            player.Channel.send( "tellSlot", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, (byte) 1, (byte) 0, new byte[0] );
            
            // Remove items
            for ( byte page = 0; page < 8; page++ )
            {
                var count = playerInventory.getItemCount( page );
                
                for ( byte index = 0; index < count; index++ )
                {
                    playerInventory.removeItem( page, 0 );
                }
            }

            // Remove clothes

            // Remove unequipped cloths
            System.Action removeUnequipped = () =>
            {
                for ( byte i = 0; i < playerInventory.getItemCount( 2 ); i++ )
                {
                    playerInventory.removeItem( 2, 0 );
                }
            };

            // Unequip & remove from inventory
            player.UnturnedPlayer.clothing.askWearBackpack( 0, 0, new byte[0], true );
            removeUnequipped();

            player.UnturnedPlayer.clothing.askWearGlasses( 0, 0, new byte[0], true  );
            removeUnequipped();

            player.UnturnedPlayer.clothing.askWearHat( 0, 0, new byte[0], true  );
            removeUnequipped();

            player.UnturnedPlayer.clothing.askWearPants( 0, 0, new byte[0], true  );
            removeUnequipped();

            player.UnturnedPlayer.clothing.askWearMask( 0, 0, new byte[0], true  );
            removeUnequipped();

            player.UnturnedPlayer.clothing.askWearShirt( 0, 0, new byte[0], true  );
            removeUnequipped();

            player.UnturnedPlayer.clothing.askWearVest( 0, 0, new byte[0], true  );
            removeUnequipped();

            EssLang.INVENTORY_CLEAN.SendTo( player );

            return CommandResult.Success();
        }