Silent Creating Custom Menu

From MyGamingTalk
Revision as of 13:26, 13 September 2015 by Gaoesa (talk | contribs) (→‎Properties)

Customized Server Menus

Starting from silEnT 0.9.0, server admins have the option to have a second, server customized menu. This is opposed to editing the official menus.

The second menu is always opened automatically if present when player opens the menus by pressing ESC. If the user clicks either menu, the official or the server custom menu, the other menu automatically closes. The server custom menus have the same commands as the official menus, with the exception that onOpen event can not be defined. If onOpen is defined, it is ignored.

Following is an example of a server custom menu:

Example

Customized server menu has one requirement, there must be a file called menus_server_custom.txt. This file is used exactly like the old menus.txt. It defines the .menu files that are loaded for the custom menu. An example:

// menu defs
// 
{
	loadMenu { "ui/custom_main.menu" }
	loadMenu { "ui/rules.menu" }
}

The custom_main.menu defined in the menus_server_custom.txt in this example, could look like this:

#include "ui/menudef.h"

// Defines //

#define WINDOW_X		16
#define WINDOW_Y		232
#define WINDOW_WIDTH	160
#define WINDOW_HEIGHT	60

#define GROUP_NAME		"grpCustomMain"

// Macros //

#include "ui/menumacros.h"

// Main Menu //

menuDef {
	name		"custom_main"
	visible		0
	fullscreen	0
	rect		WINDOW_X WINDOW_Y WINDOW_WIDTH WINDOW_HEIGHT
	style		0
	
	onEsc {
		close custom_main ;
	}

// Window //

	WINDOW( "^7Example", 232 )
	
// Buttons //

	BUTTON( 6, 32, WINDOW_WIDTH-12, 18, "^7Rules", .3, 14, close custom_main ; open rules )
}

And finally, the rules.menu could look something like this:

#include "ui/menudef.h"

// Defines //

#define WINDOW_X		100
#define WINDOW_Y		16
#define WINDOW_WIDTH	128
#define WINDOW_HEIGHT	152
#define GROUP_NAME		"grpRules"

// Macros //

#include "ui/menumacros.h"
		
// Options Menu //
	
menuDef {
	name		"rules"
	visible		0
	fullscreen	0
	rect		WINDOW_X WINDOW_Y WINDOW_WIDTH WINDOW_HEIGHT
	style		WINDOW_STYLE_FILLED
	
	onESC {
		close rules ;
		open custom_main
	}

// Window //

	WINDOW( "RULES", 94 )
	
	... Stuff for players to read in menu controls ...
}

Note that the menu is not complete. You can delete the "... Stuff for players to read in menu controls ..." or insert some controls that work in its place.

The resulting files need to be packed into a zip file that is renamed to pk3 so that all the menu files and the "menus_server_custom.txt" are in and under ui directory.

Properties

  • When user opens the menus, both the official menu and the server customized menu are opened. The menus are opened in a way that the official menu is always on top in case the two menus overlap.
  • If user clicks a button in either menu, the other menu is automatically closed by the mod. This also includes the case when user presses ESC to close the menus.
  • The onOpen event is ignored in the custom menus.
  • Menu files in the etmain directory or the official menus can not be modified and the server refuses to start if it detects such modifications.
  • Old way of customizing the menus still work if the user already has the menus or he manually adds the menus. The restriction is that the server can not reference pk3 files that modify the menus.