Mod Examples

From fCraft Wiki
Revision as of 03:05, 23 June 2011 by F (talk | contribs) (moved Event Examples to Mod Examples)
Jump to navigation Jump to search

This page demonstrates how to use fCraft's event system to add functionality.

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 );