Difference between revisions of "Lua Mod API"

From WolfWiki
Jump to: navigation, search
m (configstrings)
Line 1: Line 1:
ETPro now supports serverside mods via the [http://www.lua.org/ lual] scripting language.
+
ETPro now supports serverside mods via the [http://www.lua.org/ lua] scripting language.
  
 
ETPro has an embedded lua 5.0.2 interpreter, and if present will load user-defined scripts from the etpro directory. ETPro also provides an "et" library of function calls for lua to access the server engine, and provides callbacks so a serverside mod may trigger on specific server events.
 
ETPro has an embedded lua 5.0.2 interpreter, and if present will load user-defined scripts from the etpro directory. ETPro also provides an "et" library of function calls for lua to access the server engine, and provides callbacks so a serverside mod may trigger on specific server events.
Line 36: Line 36:
  
 
===printing===
 
===printing===
et.G_Print( string text )<br>
+
et.G_Print( '''text''' )
et.G_LogPrint( string text )<br>
+
:Prints the string '''text''' to the server console.
 +
et.G_LogPrint( '''text''' )
 +
:Prints the string '''text''' to the server console and writes it to the server log.
 
<br>
 
<br>
 
===argument handling===
 
===argument handling===
string args = et.ConcatArgs( integer index )<br>
+
'''args''' = et.ConcatArgs( '''index''' )
integer argcount = et.trap_Argc()<br>
+
:Returns all arguments beginning from '''index''' concatenated into a single string '''args'''
string arg = et.trap_Argv( integer argnum )<br>
+
'''argcount''' = et.trap_Argc()
 +
:Returns a number indicating the number of command line arguments in the command buffer.
 +
'''arg''' = et.trap_Argv( '''argnum''' )
 +
:Returns the contents of the command line argument '''argnum'''.
 
<br>
 
<br>
 
===cvars===
 
===cvars===
string cvarvalue = et.trap_Cvar_Get( string cvarname )<br>
+
'''cvarvalue''' = et.trap_Cvar_Get( '''cvarname''' )
et.trap_Cvar_Set( string cvarname, string cvarvalue )<br>
+
:Returns the value of the cvar '''cvarname'''
 +
et.trap_Cvar_Set( '''cvarname''', '''cvarvalue''' )
 +
:Sets the cvar '''cvarname''' to '''cvarvalue'''
 
<br>
 
<br>
 
===configstrings===
 
===configstrings===
Line 54: Line 61:
 
:Sets the configstring '''index''' to the string '''configstringvalue'''
 
:Sets the configstring '''index''' to the string '''configstringvalue'''
 
<br>
 
<br>
 
 
===server commands===
 
===server commands===
et.trap_SendConsoleCommand( integer when, string command )<br>
+
et.trap_SendConsoleCommand( '''when''', '''command''' )
et.trap_SendServerCommand( integer clientnum, string command )<br>
+
:Sends the command '''command''' to the server console, to be executed '''when''' (see et.EXEC_* constants)
 +
et.trap_SendServerCommand( '''clientnum''', '''command''' )
 +
:Sends the command '''command''' to the client '''clientnum'''. If '''clientnum''' is -1, the '''command''' is broadcast to all connected clients.
 
<br>
 
<br>
 
===userinfo===
 
===userinfo===
string userinfo = et.trap_GetUserinfo( integer clientnum )<br>
+
'''userinfo''' = et.trap_GetUserinfo( '''clientnum''' )
et.trap_SetUserinfo( integer clientnum, string userinfo )<br>
+
:Returns the contents of the userinfo string for the client '''clientnum'''
 +
et.trap_SetUserinfo( '''clientnum''', '''userinfo''' )
 +
:Sets the userinfo string for the client '''clientnum''' to '''userinfo'''
 
<br>
 
<br>
 
===key management utility functions===
 
===key management utility functions===
Line 79: Line 89:
 
:Returns a number indicating the current server time in milliseconds.
 
:Returns a number indicating the current server time in milliseconds.
 
<br>
 
<br>
 
 
===entities===
 
===entities===
integer entnum = et.G_Spawn()<br>
+
'''entnum''' = et.G_Spawn()
integer entnum = et.G_TempEntity( origin, event )<br>
+
:Spawns a new entity and returns the new entity number.
et.G_FreeEntity( integer entnum )<br>
+
'''entnum''' = et.G_TempEntity( '''origin''', '''event''' )
 +
:Spawns a new TempEntity of event type '''event''' and places it at '''origin''' in the world.
 +
et.G_FreeEntity( '''entnum''' )
 +
:Frees the entity '''entnum'''
 
integer entnum = et.G_SpawnGEntityFromSpawnVars( string spawnvar, string spawnvalue, ... )<br>
 
integer entnum = et.G_SpawnGEntityFromSpawnVars( string spawnvar, string spawnvalue, ... )<br>
et.trap_LinkEntity( int entnum )<br>
+
et.trap_LinkEntity( '''entnum''' )
et.trap_UnlinkEntity( int entnum )<br>
+
:Links the entity '''entnum'''
 +
et.trap_UnlinkEntity( '''entnum''' )
 +
:Unlinks the entity '''entnum'''
 
(variable) = et.gentity_get( int entnum, string fieldname )<br>
 
(variable) = et.gentity_get( int entnum, string fieldname )<br>
 
et.gentity_set( int entnum, string fieldname, (variable) )<br>
 
et.gentity_set( int entnum, string fieldname, (variable) )<br>

Revision as of 04:25, 1 November 2005

ETPro now supports serverside mods via the lua scripting language.

ETPro has an embedded lua 5.0.2 interpreter, and if present will load user-defined scripts from the etpro directory. ETPro also provides an "et" library of function calls for lua to access the server engine, and provides callbacks so a serverside mod may trigger on specific server events.

The following standard lua libraries are initialized by default and available to ETPro lua scripts: basic, table, i/o, string, math.

server commands

lua_status

lists all currently loaded lua modules.

cvars

lua_modules

(default "", disabled)
space separated list of lua modules for ETPro to load. modules will be run in the order listed.

lua_allowedmodules

(default "", disabled)
if set, only lua modules with the matching sha1 signatures listed in this cvar will be allowed to load.


changing either cvar will cause all currently loaded modules to quit and be unloaded until the next map_restart.

et library calls

modules

et.RegisterModname( modname )

Registers a descriptive string modname for this mod.

vmnumber = et.FindSelf()

Returns a number indicating the VM slot the current mod is loaded into.

modname, signature = et.FindMod( vmnumber )

Returns the modname and sha1 signature for the mod loaded in the VM slot vmnumber. Returns nil, nil if the VM slot is invalid.

success = et.IPCSend( vmnumber, message )

Sends the string message to the mod in the VM slot indicated by vmnumber. The mod receiving message must have an et_IPCReceive() callback. If the message is successfully sent, success will be 1. On failure it will be 0.


printing

et.G_Print( text )

Prints the string text to the server console.

et.G_LogPrint( text )

Prints the string text to the server console and writes it to the server log.


argument handling

args = et.ConcatArgs( index )

Returns all arguments beginning from index concatenated into a single string args

argcount = et.trap_Argc()

Returns a number indicating the number of command line arguments in the command buffer.

arg = et.trap_Argv( argnum )

Returns the contents of the command line argument argnum.


cvars

cvarvalue = et.trap_Cvar_Get( cvarname )

Returns the value of the cvar cvarname

et.trap_Cvar_Set( cvarname, cvarvalue )

Sets the cvar cvarname to cvarvalue


configstrings

configstringvalue = et.trap_GetConfigstring( index )

Returns the string configstringvalue containing the contents of the configstring index

et.trap_SetConfigstring( index, configstringvalue )

Sets the configstring index to the string configstringvalue


server commands

et.trap_SendConsoleCommand( when, command )

Sends the command command to the server console, to be executed when (see et.EXEC_* constants)

et.trap_SendServerCommand( clientnum, command )

Sends the command command to the client clientnum. If clientnum is -1, the command is broadcast to all connected clients.


userinfo

userinfo = et.trap_GetUserinfo( clientnum )

Returns the contents of the userinfo string for the client clientnum

et.trap_SetUserinfo( clientnum, userinfo )

Sets the userinfo string for the client clientnum to userinfo


key management utility functions

string infostring = et.Info_RemoveKey( string infostring, string key )
string infostring = et.Info_SetValueForKey( string infostring, string key, string value )
string infostring = et.Info_ValueForKey( string infostring, string key )

ET filesystem

integer fd, integer len = et.trap_FS_FOpenFile( string filename, int mode )
string filedata = et.trap_FS_Read( integer fd, integer count )
integer count = et.trap_FS_Write( string filedata, integer count, integer fd )
et.trap_FS_Rename( string oldname, string newname )
et.trap_FS_FCloseFile( integer fd )

miscellaneous

milliseconds = et.trap_Milliseconds()

Returns a number indicating the current server time in milliseconds.


entities

entnum = et.G_Spawn()

Spawns a new entity and returns the new entity number.

entnum = et.G_TempEntity( origin, event )

Spawns a new TempEntity of event type event and places it at origin in the world.

et.G_FreeEntity( entnum )

Frees the entity entnum

integer entnum = et.G_SpawnGEntityFromSpawnVars( string spawnvar, string spawnvalue, ... )
et.trap_LinkEntity( entnum )

Links the entity entnum

et.trap_UnlinkEntity( entnum )

Unlinks the entity entnum

(variable) = et.gentity_get( int entnum, string fieldname )
et.gentity_set( int entnum, string fieldname, (variable) )

callbacks

qagame execution

et_InitGame( integer levelTime, integer randomSeed, integer restart )
et_ShutdownGame( integer restart )
et_RunFrame( integer levelTime )
et_Quit()

client management

string rejectreason = et_ClientConnect( integer clientNum, boolean firstTime, boolean isBot )
et_ClientDisconnect( integer clientNum )
et_ClientBegin( integer clientNum )
et_ClientUserinfoChanged( integer clientNum )

commands

integer intercepted = et_ClientCommand( integer clientNum, string command )
integer intercepted = et_ConsoleCommand()

miscellaneous

et_IPCReceive( vmnumber, message )
et_Print( string text )

defined constants

et.EXEC_NOW
et.EXEC_INSERT
et.EXEC_APPEND
et.FS_READ
et.FS_WRITE
et.FS_APPEND
et.FS_APPEND_SYNC

FAQ

Q: OMG I hate the libary prefix et.* on everything!!11!1oneone
A: table.foreach(et, function (func, value) _G[func] = value; end)

Q: How do a re-load my lua file without restarting the whole server ?
A: Use the following in the server console:

lua_modules ""
lua_modules "mymod.lua" ; map_restart

Note that lua_modules "" must be on a line by itself.