Mod Examples

From fCraft Wiki
Revision as of 04:26, 23 June 2011 by F (talk | contribs)
Jump to navigation Jump to search

This page demonstrates how to modify and extend fCraft.

Calling custom code at regular intervals

Code in this example will call BleepTask every 10 seconds.

// Your callback. Implements SchedulerCallback delegate.
void BleepTask( SchedulerTask task ){
    Chat.Say( Player.Console, "bleep" );
}

// Interval at which your callback is called
TimeSpan bleepInterval = TimeSpan.FromSeconds( 10 );

// Adding your callback
Scheduler.NewTask( BleepTask ).RunForever( bleepInterval );

Besides RunForever(TimeSpan), SchedulerTask has many Run* methods for running a task once, several times, or forever - with different delays and at different intervals.


Reacting to server shutdown

There are two events associated with shutdown: Server.ShutdownBegan and Server.ShutdownEnded. Both supply a ShutdownEventArgs object that provides information about the shutdown parameters.

// Subscribing to the event
Server.ShutdownBegan += OnShutdown;

// Event handler
void OnShutdown( object sender, ShutdownEventArgs e ){
    Console.Write( "The end is near! Specifically, it's {0} seconds away.",
                   e.Delay );
    if( e.Restart ){
        Console.Write( "But we will be back shortly." );
    }
}


Adding a new command

New commands can be added by calling CommandManager.RegisterCustomCommand. You need to provide a CommandDescriptor object. If there is any conflict between your command and existing ones, or if some aspect of your command's descriptor is unacceptible, a CommandRegistrationException will be thrown.

// Command descriptor
CommandDescriptor CdBleep = new CommandDescriptor {
    Name = "bleep",
    Aliases = new[] { "bloop" },
    Category = CommandCategory.Chat,
    Permissions = new[] { Permission.Chat },
    Help = "Prints a number of bleeps in chat.",
    Usage = "/bleep [Times]",
    Handler = Bleep
};

// Command handler - must implement CommandHandler delegate
void Bleep( Player player, Command cmd ){
    int numberOfBleeps;

    // try to parse next argument as a number
    if( !cmd.NextInt( out numberOfBleeps ) ){
        // fall back to 10 if no number was given
        numberOfBleeps = 10;
    }

    // check the range
    if( numberOfBleeps < 1 || numberOfBleeps > 32 ){
        player.Message( "Specify between 1 and 32 bleeps." );
        return;
    }

    for( int i=0; i<numberOfBleeps; i++ ){
        Chat.SendGlobal( player, "bleep" );
    }
}

// Registering your command with the server
CommandManager.RegisterCustomCommand( CdBleep );