<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wolfwiki.anime.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ReyalP</id>
	<title>WolfWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wolfwiki.anime.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ReyalP"/>
	<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php/Special:Contributions/ReyalP"/>
	<updated>2026-11-08T12:37:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:ReyalP&amp;diff=2926</id>
		<title>User:ReyalP</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:ReyalP&amp;diff=2926"/>
		<updated>2008-04-01T23:32:12Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* ETPro/Lua libraries, modules and examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.sonic.net/~rfm/et/bananet.png&lt;br /&gt;
==ETPro/Lua libraries, modules and examples==&lt;br /&gt;
;Follow the link to the source code for more detailed information about each item.&lt;br /&gt;
;Exploit fixes [http://bani.anime.net/banimod/forums/viewtopic.php?t=6777 see this thread for details] last updated April 1 2008 (no foolin&#039;)&lt;br /&gt;
[http://www.collectivecomputing.com/~reed/et/lua/combinedfixes.lua combinedfixes.lua]&lt;br /&gt;
* prevent crash or information disclosure via the ws command (previously wsfix.lua)&lt;br /&gt;
* perform some sanity checking on userinfo (previously userinfocheck.lua)&lt;br /&gt;
* prevent crash from etpro guid hacks. (previously guidcheck.lua)&lt;br /&gt;
* limit number of connections from a given IP. (previously fakeplimit.lua)&lt;br /&gt;
Note the individual fixes were previously available in separate modules, however they now depend on each other so I am no longer maintaining the individual modules. You can find the old modules in obsolete/ from the above URL, but be aware that they have &#039;&#039;&#039;NOT&#039;&#039;&#039; been upated to reflect the latest bug fixes.&lt;br /&gt;
;Older stuff&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/autoref.lua autoref.lua] lua module to give people referee status, based on IP or PB GUID. Requires etconst.lua&amp;lt;br&amp;gt; &#039;&#039;&#039;WARNING&#039;&#039;&#039;: The GUID this uses might be spoofed by malicious clients. The IP might also be spoofed if you don&#039;t use combinedfixes.lua&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/etconst.lua etconst.lua] some common constants from the et header files, converted to lua.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/luacon.lua luacon.lua] library provides a lua command in the server console, for interactive testing.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/luaconmod.lua luaconmod.lua] runs luacon as module.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/cvarobj.lua cvarobj.lua] metamethods example. Allows using cvars like normal lua variables.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/dumptable.lua dumptable.lua] recursively display contents of a table.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/obsolete/noteamflood.lua noteamflood.lua] prevent people from flooding &amp;quot;team&amp;quot; commands. No longer needed with etpro 3.2.6.&lt;br /&gt;
&lt;br /&gt;
==Map editing stuff==&lt;br /&gt;
; tjlview, a plugin for viewing [[TrickJumpLines]] in [http://www.qeradiant.com/ GtkRadiant 1.4]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/readme_tjlview-a0.1.txt readme]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/tjlview-a0.1-src.zip source]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/tjlview-linux.zip windows and linux binaries]&lt;br /&gt;
; readme for bkgrnd2d plugin (the plugin itself is included in GTKRadiant 1.4)&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/readme_bkgrnd2d-b0.25.txt readme_bkgrnd2d-b0.25.txt]&lt;br /&gt;
&lt;br /&gt;
==Contact==&lt;br /&gt;
* &#039;&#039;&#039;email&#039;&#039;&#039; reyalp (at) gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;[[IRC]]&#039;&#039;&#039; #etpro on freenode or quakenet, #n-warriors on gamesurge&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:ReyalP&amp;diff=2922</id>
		<title>User:ReyalP</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:ReyalP&amp;diff=2922"/>
		<updated>2008-03-24T03:23:34Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* ETPro/Lua libraries, modules and examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.sonic.net/~rfm/et/bananet.png&lt;br /&gt;
==ETPro/Lua libraries, modules and examples==&lt;br /&gt;
;Follow the link to the source code for more detailed information about each item.&lt;br /&gt;
;Exploit fixes [http://bani.anime.net/banimod/forums/viewtopic.php?t=6777 see this thread for details] last updated March 23 2008.&lt;br /&gt;
*[http://www.collectivecomputing.com/~reed/et/lua/wsfix.lua wsfix.lua] prevent crash or information disclosure via the ws command&lt;br /&gt;
*[http://www.collectivecomputing.com/~reed/et/lua/userinfocheck.lua userinfocheck.lua] perform some sanity checking on userinfo&lt;br /&gt;
*[http://www.collectivecomputing.com/~reed/et/lua/guidcheck.lua guidcheck.lua] prevent crash from etpro guid hacks. Note you &#039;&#039;&#039;MUST&#039;&#039;&#039; use userinfocheck.lua with this, or use combined fixes.&lt;br /&gt;
*[http://www.collectivecomputing.com/~reed/et/lua/fakeplimit.lua fakeplimit.lua] limit number of connections from a given IP. This should not be used without userinfocheck.lua, as the IP might be spoofed otherwise.&lt;br /&gt;
*[http://www.collectivecomputing.com/~reed/et/lua/combinedfixes.lua combinedfixes.lua] all of the above merged into a single module.&lt;br /&gt;
;Older stuff&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/autoref.lua autoref.lua] lua module to give people referee status, based on IP or PB GUID. Requires etconst.lua&amp;lt;br&amp;gt; WARNING: The GUID this uses might be spoofed by malicious clients. The IP might also be spoofed if you don&#039;t use userinfocheck.lua&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/etconst.lua etconst.lua] some common constants from the et header files, converted to lua.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/luacon.lua luacon.lua] library provides a lua command in the server console, for interactive testing.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/luaconmod.lua luaconmod.lua] runs luacon as module.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/cvarobj.lua cvarobj.lua] metamethods example. Allows using cvars like normal lua variables.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/dumptable.lua dumptable.lua] recursively display contents of a table.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/noteamflood.lua noteamflood.lua] prevent people from flooding &amp;quot;team&amp;quot; commands. No longer needed with etpro 3.2.6.&lt;br /&gt;
&lt;br /&gt;
==Map editing stuff==&lt;br /&gt;
; tjlview, a plugin for viewing [[TrickJumpLines]] in [http://www.qeradiant.com/ GtkRadiant 1.4]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/readme_tjlview-a0.1.txt readme]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/tjlview-a0.1-src.zip source]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/tjlview-linux.zip windows and linux binaries]&lt;br /&gt;
; readme for bkgrnd2d plugin (the plugin itself is included in GTKRadiant 1.4)&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/readme_bkgrnd2d-b0.25.txt readme_bkgrnd2d-b0.25.txt]&lt;br /&gt;
&lt;br /&gt;
==Contact==&lt;br /&gt;
* &#039;&#039;&#039;email&#039;&#039;&#039; reyalp (at) gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;[[IRC]]&#039;&#039;&#039; #etpro on freenode or quakenet, #n-warriors on gamesurge&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Lua_Mod_API&amp;diff=2921</id>
		<title>Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Lua_Mod_API&amp;diff=2921"/>
		<updated>2008-03-23T21:42:00Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: warning about etprint&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__&lt;br /&gt;
[[ETPro]] now supports server-side mods via the [http://www.lua.org/ Lua] scripting language. For more information about Lua, visit the [http://www.lua.org/manual/5.0/ Reference manual], the online edition of the book [http://www.lua.org/pil/ Programming in Lua] or the [http://lua-users.org/wiki/ lua-users wiki]. A list of text editors for coding LUA can be found [http://wiki.ptokax.ath.cx/doku.php/misc/editors here].&lt;br /&gt;
&lt;br /&gt;
ETPro has an embedded Lua 5.0.2 interpreter, and if present will load user-defined scripts from the ETPro directory.  It also provides an &amp;quot;et&amp;quot; library of function calls for Lua that allow access to the server engine, and provides callbacks so a server side mod may trigger on specific server events.&lt;br /&gt;
&lt;br /&gt;
The following standard Lua libraries are initialized by default and available to ETPro Lua scripts:&lt;br /&gt;
[http://www.lua.org/manual/5.0/manual.html#5.1 basic], [http://www.lua.org/manual/5.0/manual.html#5.4 table], [http://www.lua.org/manual/5.0/manual.html#5.6 i/o], [http://www.lua.org/manual/5.0/manual.html#5.7 os] (available features vary depending on your OS), [http://www.lua.org/manual/5.0/manual.html#5.3 string], [http://www.lua.org/manual/5.0/manual.html#5.5 math].&lt;br /&gt;
&lt;br /&gt;
A list of ETPro mods can be found [[:Category:ETPro:Mods|here]].&lt;br /&gt;
&lt;br /&gt;
A tutorial about ETPro Lua scripting can be found [[Lua Tutorials|here]].&lt;br /&gt;
&lt;br /&gt;
API requests can be discussed at the [[Talk:Lua_Mod_API|Lua Mod API talk page]].&lt;br /&gt;
&lt;br /&gt;
==client commands==&lt;br /&gt;
===lua_status===&lt;br /&gt;
:lists all currently loaded lua modules.&lt;br /&gt;
:&#039;&#039;lua mods cannot override this client command.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==server commands==&lt;br /&gt;
===lua_status===&lt;br /&gt;
:lists all currently loaded lua modules.&lt;br /&gt;
&lt;br /&gt;
==cvars==&lt;br /&gt;
===lua_modules===&lt;br /&gt;
:(default &amp;quot;&amp;quot;, disabled)&lt;br /&gt;
:space separated list of lua modules for ETPro to load. modules will be run in the order listed.&lt;br /&gt;
&lt;br /&gt;
===lua_allowedmodules===&lt;br /&gt;
:(default &amp;quot;&amp;quot;, disabled)&lt;br /&gt;
:if set, only lua modules with the matching sha1 signatures listed in this cvar will be allowed to load.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:changing either cvar will cause all currently loaded modules to :quit and be unloaded until the next map_restart.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==et library calls==&lt;br /&gt;
&lt;br /&gt;
===modules===&lt;br /&gt;
et.RegisterModname( &#039;&#039;&#039;modname&#039;&#039;&#039; )&lt;br /&gt;
:Registers a descriptive string &#039;&#039;&#039;modname&#039;&#039;&#039; for this mod.&lt;br /&gt;
&#039;&#039;&#039;vmnumber&#039;&#039;&#039; = et.FindSelf()&lt;br /&gt;
:Returns a number indicating the VM slot the current mod is loaded into.&lt;br /&gt;
&#039;&#039;&#039;modname&#039;&#039;&#039;, &#039;&#039;&#039;signature&#039;&#039;&#039; = et.FindMod( &#039;&#039;&#039;vmnumber&#039;&#039;&#039; )&lt;br /&gt;
:Returns the &#039;&#039;&#039;modname&#039;&#039;&#039; and sha1 &#039;&#039;&#039;signature&#039;&#039;&#039; for the mod loaded in the VM slot &#039;&#039;&#039;vmnumber&#039;&#039;&#039;. Returns nil, nil if the VM slot is invalid.&lt;br /&gt;
&#039;&#039;&#039;success&#039;&#039;&#039; = et.IPCSend( &#039;&#039;&#039;vmnumber&#039;&#039;&#039;, &#039;&#039;&#039;message&#039;&#039;&#039; )&lt;br /&gt;
:Sends the string &#039;&#039;&#039;message&#039;&#039;&#039; to the mod in the VM slot indicated by &#039;&#039;&#039;vmnumber&#039;&#039;&#039;. The mod receiving &#039;&#039;&#039;message&#039;&#039;&#039; must have an &#039;&#039;et_IPCReceive()&#039;&#039; callback. If the message is successfully sent, &#039;&#039;&#039;success&#039;&#039;&#039; will be 1. On failure it will be 0. See the [[Lua:IPC|Lua IPC]] page for a simple example.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===printing===&lt;br /&gt;
et.G_Print( &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Prints the string &#039;&#039;&#039;text&#039;&#039;&#039; to the server console.&lt;br /&gt;
et.G_LogPrint( &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Prints the string &#039;&#039;&#039;text&#039;&#039;&#039; to the server console and writes it to the server log.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===argument handling===&lt;br /&gt;
These functions are to be used within the [[#commands|command callback functions]].&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;args&#039;&#039;&#039; = et.ConcatArgs( &#039;&#039;&#039;index&#039;&#039;&#039; )&lt;br /&gt;
:Returns all arguments beginning from &#039;&#039;&#039;index&#039;&#039;&#039; concatenated into a single string &#039;&#039;&#039;args&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;argcount&#039;&#039;&#039; = et.trap_Argc()&lt;br /&gt;
:Returns a number indicating the number of command line arguments in the command buffer.&lt;br /&gt;
&#039;&#039;&#039;arg&#039;&#039;&#039; = et.trap_Argv( &#039;&#039;&#039;argnum&#039;&#039;&#039; )&lt;br /&gt;
:Returns the contents of the command line argument &#039;&#039;&#039;argnum&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===cvars===&lt;br /&gt;
&#039;&#039;&#039;cvarvalue&#039;&#039;&#039; = et.trap_Cvar_Get( &#039;&#039;&#039;cvarname&#039;&#039;&#039; )&lt;br /&gt;
:Returns the value of the cvar &#039;&#039;&#039;cvarname&#039;&#039;&#039; as a string. If there is no cvar named &#039;&#039;&#039;cvarname&#039;&#039;&#039;, returns a zero length string. &lt;br /&gt;
et.trap_Cvar_Set( &#039;&#039;&#039;cvarname&#039;&#039;&#039;, &#039;&#039;&#039;cvarvalue&#039;&#039;&#039; )&lt;br /&gt;
:Sets the cvar &#039;&#039;&#039;cvarname&#039;&#039;&#039; to &#039;&#039;&#039;cvarvalue&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===configstrings===&lt;br /&gt;
&#039;&#039;&#039;configstringvalue&#039;&#039;&#039; = et.trap_GetConfigstring( &#039;&#039;&#039;index&#039;&#039;&#039; )&lt;br /&gt;
:Returns the string &#039;&#039;&#039;configstringvalue&#039;&#039;&#039; containing the contents of the configstring &#039;&#039;&#039;index&#039;&#039;&#039;&lt;br /&gt;
et.trap_SetConfigstring( &#039;&#039;&#039;index&#039;&#039;&#039;, &#039;&#039;&#039;configstringvalue&#039;&#039;&#039; )&lt;br /&gt;
:Sets the configstring &#039;&#039;&#039;index&#039;&#039;&#039; to the string &#039;&#039;&#039;configstringvalue&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===server===&lt;br /&gt;
et.trap_SendConsoleCommand( &#039;&#039;&#039;when&#039;&#039;&#039;, &#039;&#039;&#039;command&#039;&#039;&#039; )&lt;br /&gt;
:Sends the command &#039;&#039;&#039;command&#039;&#039;&#039; to the server console, to be executed &#039;&#039;&#039;when&#039;&#039;&#039; (see et.EXEC_* constants)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===clients===&lt;br /&gt;
et.trap_DropClient( &#039;&#039;&#039;clientnum&#039;&#039;&#039;, &#039;&#039;&#039;reason&#039;&#039;&#039;, &#039;&#039;&#039;ban_time&#039;&#039;&#039; )&lt;br /&gt;
:Disconnects &#039;&#039;&#039;clientnum&#039;&#039;&#039; from the server, with descriptive string &#039;&#039;&#039;reason&#039;&#039;&#039; reported to clients. &#039;&#039;&#039;ban_time&#039;&#039;&#039; is the time in seconds to ban the client from the server. &#039;&#039;&#039;ban_time&#039;&#039;&#039; is optional and may be entirely omitted, in which case the ban time defaults to the cvar &#039;&#039;b_defaultbantime&#039;&#039;&lt;br /&gt;
et.trap_SendServerCommand( &#039;&#039;&#039;clientnum&#039;&#039;&#039;, &#039;&#039;&#039;[[SendServerCommand|command]]&#039;&#039;&#039; )&lt;br /&gt;
:Sends the command &#039;&#039;&#039;[[SendServerCommand|command]]&#039;&#039;&#039; to the client &#039;&#039;&#039;clientnum&#039;&#039;&#039;. If &#039;&#039;&#039;clientnum&#039;&#039;&#039; is -1, the &#039;&#039;&#039;[[SendServerCommand|command]]&#039;&#039;&#039; is broadcast to all connected clients.&lt;br /&gt;
et.G_Say( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;mode&#039;&#039;&#039;, &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Sends a chat command on behalf of client &#039;&#039;&#039;clientNum&#039;&#039;&#039; with the mode &#039;&#039;&#039;mode&#039;&#039;&#039; (see et.SAY_* constants) and chat text &#039;&#039;&#039;text&#039;&#039;&#039;.&lt;br /&gt;
et.ClientUserinfoChanged( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Loads the new [[Userinfo]] of &#039;&#039;&#039;clientNum&#039;&#039;&#039; and stores it in the configstring and client variables&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===userinfo===&lt;br /&gt;
&#039;&#039;&#039;userinfo&#039;&#039;&#039; = et.trap_GetUserinfo( &#039;&#039;&#039;clientnum&#039;&#039;&#039; )&lt;br /&gt;
:Returns the contents of the [[Userinfo]] string for the client &#039;&#039;&#039;clientnum&#039;&#039;&#039;&lt;br /&gt;
et.trap_SetUserinfo( &#039;&#039;&#039;clientnum&#039;&#039;&#039;, &#039;&#039;&#039;userinfo&#039;&#039;&#039; )&lt;br /&gt;
:Sets the [[Userinfo]] string for the client &#039;&#039;&#039;clientnum&#039;&#039;&#039; to &#039;&#039;&#039;userinfo&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===string utility functions===&lt;br /&gt;
&#039;&#039;&#039;infostring&#039;&#039;&#039; = et.Info_RemoveKey( &#039;&#039;&#039;infostring&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039; )&lt;br /&gt;
:Removes key &#039;&#039;&#039;key&#039;&#039;&#039; from infostring &#039;&#039;&#039;infostring&#039;&#039;&#039; and returns the modified infostring.&lt;br /&gt;
&#039;&#039;&#039;infostring&#039;&#039;&#039; = et.Info_SetValueForKey( &#039;&#039;&#039;infostring&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039;, &#039;&#039;&#039;value&#039;&#039;&#039; )&lt;br /&gt;
:Sets the key &#039;&#039;&#039;key&#039;&#039;&#039; in the infostring &#039;&#039;&#039;infostring&#039;&#039;&#039; to &#039;&#039;&#039;value&#039;&#039;&#039; and returns the modified infostring. If &#039;&#039;&#039;value&#039;&#039;&#039; is an empty string, &#039;&#039;&#039;key&#039;&#039;&#039; is removed from the string. &lt;br /&gt;
&#039;&#039;&#039;keyvalue&#039;&#039;&#039; = et.Info_ValueForKey( &#039;&#039;&#039;infostring&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039; )&lt;br /&gt;
:Returns the value of the key &#039;&#039;&#039;key&#039;&#039;&#039; in the infostring &#039;&#039;&#039;infostring&#039;&#039;&#039;. If &#039;&#039;&#039;key&#039;&#039;&#039; is not present in the string, an empty string is returned.&lt;br /&gt;
&#039;&#039;&#039;cleanstring&#039;&#039;&#039; = et.Q_CleanStr( &#039;&#039;&#039;string&#039;&#039;&#039; )&lt;br /&gt;
:Returns &#039;&#039;&#039;string&#039;&#039;&#039; stripped of all color codes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ET filesystem===&lt;br /&gt;
&#039;&#039;&#039;fd&#039;&#039;&#039;, &#039;&#039;&#039;len&#039;&#039;&#039; = et.trap_FS_FOpenFile( &#039;&#039;&#039;filename&#039;&#039;&#039;, &#039;&#039;&#039;mode&#039;&#039;&#039; )&lt;br /&gt;
:Attempts to open the file &#039;&#039;&#039;filename&#039;&#039;&#039; with the access mode &#039;&#039;&#039;mode&#039;&#039;&#039; (see et.FS_ constants). Returns the filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039; and file length &#039;&#039;&#039;len&#039;&#039;&#039;. On error, &#039;&#039;&#039;len&#039;&#039;&#039; returns -1.&lt;br /&gt;
&#039;&#039;&#039;filedata&#039;&#039;&#039; = et.trap_FS_Read( fd, count )&lt;br /&gt;
:Reads &#039;&#039;&#039;count&#039;&#039;&#039; bytes from filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;count&#039;&#039;&#039; = et.trap_FS_Write( &#039;&#039;&#039;filedata&#039;&#039;&#039;, &#039;&#039;&#039;count&#039;&#039;&#039;, &#039;&#039;&#039;fd&#039;&#039;&#039; )&lt;br /&gt;
:Attempts to write &#039;&#039;&#039;count&#039;&#039;&#039; bytes of &#039;&#039;&#039;filedata&#039;&#039;&#039; to filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039;. Returns number of bytes successfully written.&lt;br /&gt;
et.trap_FS_Rename( &#039;&#039;&#039;oldname&#039;&#039;&#039;, &#039;&#039;&#039;newname&#039;&#039;&#039; )&lt;br /&gt;
:Renames file &#039;&#039;&#039;oldname&#039;&#039;&#039; to &#039;&#039;&#039;newname&#039;&#039;&#039;.&lt;br /&gt;
et.trap_FS_FCloseFile( &#039;&#039;&#039;fd&#039;&#039;&#039; )&lt;br /&gt;
:Closes filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===indexes===&lt;br /&gt;
&#039;&#039;&#039;soundindex&#039;&#039;&#039; = et.G_SoundIndex( &#039;&#039;&#039;filename&#039;&#039;&#039; )&lt;br /&gt;
:Returns an index to the soundfile indicated by &#039;&#039;&#039;filename&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;modelindex&#039;&#039;&#039; = et.G_ModelIndex( &#039;&#039;&#039;filename&#039;&#039;&#039; )&lt;br /&gt;
:Returns an index to the model indicated by &#039;&#039;&#039;filename&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===sound===&lt;br /&gt;
et.G_globalSound( &#039;&#039;&#039;sound&#039;&#039;&#039; )&lt;br /&gt;
:Plays the global sound indicated by the filename &#039;&#039;&#039;sound&#039;&#039;&#039;.&lt;br /&gt;
et.G_Sound( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;soundindex&#039;&#039;&#039; )&lt;br /&gt;
:Plays the sound &#039;&#039;&#039;soundindex&#039;&#039;&#039; at the location of entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===miscellaneous===&lt;br /&gt;
&#039;&#039;&#039;milliseconds&#039;&#039;&#039; = et.trap_Milliseconds()&lt;br /&gt;
:Returns a number indicating the current server time in milliseconds.&lt;br /&gt;
et.G_Damage( &#039;&#039;&#039;target&#039;&#039;&#039;, &#039;&#039;&#039;inflictor&#039;&#039;&#039;, &#039;&#039;&#039;attacker&#039;&#039;&#039;, &#039;&#039;&#039;damage&#039;&#039;&#039;, &#039;&#039;&#039;[[etdamage|dflags]]&#039;&#039;&#039;, &#039;&#039;&#039;[[etdamage|mod]]&#039;&#039;&#039; )&lt;br /&gt;
:Does &#039;&#039;&#039;damage&#039;&#039;&#039; amount of damage on &#039;&#039;&#039;target&#039;&#039;&#039; inflicted by &#039;&#039;&#039;inflictor&#039;&#039;&#039; and cased by &#039;&#039;&#039;attacker&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;target&#039;&#039;&#039;, &#039;&#039;&#039;inflictor&#039;&#039;&#039;, &#039;&#039;&#039;attacker&#039;&#039;&#039; are entity numbers&lt;br /&gt;
:&#039;&#039;&#039;[[etdamage|dflags]]&#039;&#039;&#039; is a [[Bitmask-cvar|bitflag]] number to decide how the damage is inflickted, see &#039;&#039;&#039;[[etdamage|dflags]]&#039;&#039;&#039; [[etdamage|flaglist]]&lt;br /&gt;
:&#039;&#039;&#039;[[etdamage|mod]]&#039;&#039;&#039; is a number from 0 up to 64 o set the type of damage, see &#039;&#039;&#039;[[etdamage|mod]]&#039;&#039;&#039; [[etdamage|list]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===entities===&lt;br /&gt;
&#039;&#039;&#039;entnum&#039;&#039;&#039; = et.G_Spawn()&lt;br /&gt;
:Spawns a new entity and returns the new entity number.&lt;br /&gt;
&#039;&#039;&#039;entnum&#039;&#039;&#039; = et.G_TempEntity( &#039;&#039;&#039;origin&#039;&#039;&#039;, &#039;&#039;&#039;event&#039;&#039;&#039; )&lt;br /&gt;
:Spawns a new TempEntity of event type &#039;&#039;&#039;event&#039;&#039;&#039; and places it at &#039;&#039;&#039;origin&#039;&#039;&#039; in the world.&lt;br /&gt;
et.G_FreeEntity( &#039;&#039;&#039;entnum&#039;&#039;&#039; )&lt;br /&gt;
:Frees the entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;spawnval&#039;&#039;&#039; = et.G_GetSpawnVar( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039; )&lt;br /&gt;
:Returns the value of spawnvar &#039;&#039;&#039;key&#039;&#039;&#039; for entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
et.G_SetSpawnVar( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039;, &#039;&#039;&#039;value&#039;&#039;&#039; )&lt;br /&gt;
:Sets the spawnvar &#039;&#039;&#039;key&#039;&#039;&#039; to &#039;&#039;&#039;value&#039;&#039;&#039; for entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;integer entnum&#039;&#039;&#039; = et.G_SpawnGEntityFromSpawnVars( string spawnvar, string spawnvalue, ... )&lt;br /&gt;
:This function can only be called inside the &#039;&#039;&#039;et_InitGame&#039;&#039;&#039; callback&lt;br /&gt;
et.trap_LinkEntity( &#039;&#039;&#039;entnum&#039;&#039;&#039; )&lt;br /&gt;
:Links the entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
et.trap_UnlinkEntity( &#039;&#039;&#039;entnum&#039;&#039;&#039; )&lt;br /&gt;
:Unlinks the entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;(variable)&#039;&#039;&#039; = et.gentity_get ( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039; &#039;&#039;,arrayindex&#039;&#039; )&lt;br /&gt;
:Gets the value of &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039; from entity &#039;&#039;&#039;entnum&#039;&#039;&#039; out of the g_entity struct. For NULL entities or clients, &#039;&#039;nil&#039;&#039; is returned.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;arrayindex&#039;&#039; is used to specify which element of an array entity field to get. It is required when accessing array type fields. Entity field array indexes start at 0.&lt;br /&gt;
et.gentity_set( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039;, &#039;&#039;arrayindex,&#039;&#039; &#039;&#039;&#039;(value)&#039;&#039;&#039; )&lt;br /&gt;
:Sets the value of &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039; from entity &#039;&#039;&#039;entnum&#039;&#039;&#039; in the g_entity struct to &#039;&#039;&#039;(value)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;arrayindex&#039;&#039; is used to specify which element of an array entity field to set.&lt;br /&gt;
et.G_AddEvent( &#039;&#039;&#039;ent&#039;&#039;&#039;, &#039;&#039;&#039;event&#039;&#039;&#039;, &#039;&#039;&#039;eventparm&#039;&#039;&#039;&#039; )&lt;br /&gt;
:Adds event &#039;&#039;&#039;event&#039;&#039;&#039; whit eventparameter &#039;&#039;&#039;eventparm&#039;&#039;&#039;&#039; to entity &#039;&#039;&#039;ent&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==callbacks==&lt;br /&gt;
&lt;br /&gt;
===qagame execution===&lt;br /&gt;
et_InitGame( &#039;&#039;&#039;levelTime&#039;&#039;&#039;, &#039;&#039;&#039;randomSeed&#039;&#039;&#039;, &#039;&#039;&#039;restart&#039;&#039;&#039; )&lt;br /&gt;
:Called when qagame initializes. &#039;&#039;&#039;levelTime&#039;&#039;&#039; is the current level time in milliseconds. &#039;&#039;&#039;randomSeed&#039;&#039;&#039; is a number that can be used to seed random number generators. &#039;&#039;&#039;restart&#039;&#039;&#039; indicates if et_InitGame() is being called due to a map restart (1) or not (0).&lt;br /&gt;
et_ShutdownGame( &#039;&#039;&#039;restart&#039;&#039;&#039; )&lt;br /&gt;
:Called when qagame shuts down. &#039;&#039;&#039;restart&#039;&#039;&#039; indicates if the shutdown is being called due to a map_restart (1) or not (0).&lt;br /&gt;
et_RunFrame( &#039;&#039;&#039;levelTime&#039;&#039;&#039; )&lt;br /&gt;
:Called when qagame runs a server frame. &#039;&#039;&#039;levelTime&#039;&#039;&#039; is the current level time in milliseconds.&lt;br /&gt;
et_Quit()&lt;br /&gt;
:Called when ETPro unloads the mod. The mod should close all open filedescriptors and perform all cleanup.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===client management===&lt;br /&gt;
&#039;&#039;&#039;rejectreason&#039;&#039;&#039; = et_ClientConnect( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;firstTime&#039;&#039;&#039;, &#039;&#039;&#039;isBot&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client attempts to connect to the server. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id, &#039;&#039;&#039;firstTime&#039;&#039;&#039; indicates if this is a new connection (1) or a reconnection (0). &#039;&#039;&#039;isBot&#039;&#039;&#039; indicates if the client is a bot (1) or not (0). If the mod accepts the connection, it should return nil. Otherwise, the mod should return a string describing the reason the client connection was rejected.&lt;br /&gt;
et_ClientDisconnect( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client disconnects. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id.&lt;br /&gt;
et_ClientBegin( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client begins (becomes active, and enters the gameworld). &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id.&lt;br /&gt;
et_ClientUserinfoChanged( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client&#039;s [[Userinfo]] string has changed. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id.&lt;br /&gt;
:&#039;&#039;&#039;note:&#039;&#039;&#039; In ETPro 3.2.6 and below, this only gets called when the players CS_PLAYERS config string changes, rather than every time the userinfo changes. This only happens for a subset of userinfo fields.&lt;br /&gt;
et_ClientSpawn( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;revived&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client is spawned. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id. &#039;&#039;&#039;revived&#039;&#039;&#039; is 1 if the client was spawned by being revived.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===commands===&lt;br /&gt;
&#039;&#039;&#039;intercepted&#039;&#039;&#039; = et_ClientCommand( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;command&#039;&#039;&#039; )&lt;br /&gt;
:Called when a command is received from a client. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id. &#039;&#039;&#039;command&#039;&#039;&#039; is the command. The mod should return 1 if the command was intercepted by the mod, and 0 if the command was ignored by the mod and should be passed through to the server (and other mods in the chain).&lt;br /&gt;
:The actual command can be accessed through the [[#argument_handling|argument handling]] functions, as seen in the [[ETPro:Lua Sample Code]].&lt;br /&gt;
&#039;&#039;&#039;intercepted&#039;&#039;&#039; = et_ConsoleCommand()&lt;br /&gt;
:Called when a command is entered on the server console. The mod should return 1 if the command was intercepted by the mod, and 0 if the command was ignored by the mod and should be passed through to the server (and other mods in the chain).&lt;br /&gt;
:The actual command can be accessed through the [[#argument_handling|argument handling]] functions, as seen in the [[ETPro:Lua Sample Code]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===xp===&lt;br /&gt;
et_UpgradeSkill( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039; )&lt;br /&gt;
:Called when client on slot &#039;&#039;&#039;cno&#039;&#039;&#039; gets an upgrade on skill &#039;&#039;&#039;skill&#039;&#039;&#039;. Return -1 to override (abort) the qagame function, anything else to &amp;quot;passthrough&amp;quot;. Callback may modify skills (or do anything else it wants) during passthrough. &lt;br /&gt;
et_SetPlayerSkill( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039; )&lt;br /&gt;
:Called when clients (on slot &#039;&#039;&#039;cno&#039;&#039;&#039;) skill level &#039;&#039;&#039;skill&#039;&#039;&#039; is set. Return -1 to override (abort) the qagame function, anything else to &amp;quot;passthrough&amp;quot;. Callback may modify skills (or do anything else it wants) during passthrough.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===miscellaneous===&lt;br /&gt;
et_IPCReceive( &#039;&#039;&#039;vmnumber&#039;&#039;&#039;, &#039;&#039;&#039;message&#039;&#039;&#039; )&lt;br /&gt;
:Called when another mod sends an et.IPCSend() message to this mod. &#039;&#039;&#039;vmnumber&#039;&#039;&#039; is the VM slot number of the sender, and &#039;&#039;&#039;message&#039;&#039;&#039; is the message.&lt;br /&gt;
et_Print( &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Called whenever the server or qagame prints a string to the console.&lt;br /&gt;
:&#039;&#039;&#039;WARNING!&#039;&#039;&#039; &#039;&#039;text&#039;&#039; may contain a player name + their chat message. This makes it &#039;&#039;&#039;very easy&#039;&#039;&#039; to spoof. &#039;&#039;&#039;DO NOT TRUST STRINGS OBTAINED IN THIS WAY&#039;&#039;&#039;&lt;br /&gt;
et_Obituary( &#039;&#039;&#039;victim&#039;&#039;&#039;, &#039;&#039;&#039;killer&#039;&#039;&#039;, &#039;&#039;&#039;meansOfDeath&#039;&#039;&#039; )&lt;br /&gt;
:Called whenever a player is killed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==predefined constants==&lt;br /&gt;
et.EXEC_NOW&amp;lt;br&amp;gt;&lt;br /&gt;
et.EXEC_INSERT&amp;lt;br&amp;gt;&lt;br /&gt;
et.EXEC_APPEND&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_READ&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_WRITE&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_APPEND&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_APPEND_SYNC&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_ALL&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_TEAM&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_BUDDY&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_TEAMNL&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
et.HOSTARCH&lt;br /&gt;
:set to WIN32 or UNIX depending on the host architecture qagame is running on.&lt;br /&gt;
LUA_PATH&lt;br /&gt;
:set to fs_homepath/fs_game/?.lua in order to ease use of the [http://www.lua.org/pil/8.1.html require] function.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==configs==&lt;br /&gt;
If a config is loaded, all modules are shutdown and reloaded. If a &#039;&#039;certified&#039;&#039; config is loaded, all modules are shutdown and reloaded, and additionally the following functions are disabled: &#039;&#039;&#039;require()&#039;&#039;&#039;, &#039;&#039;&#039;loadfile()&#039;&#039;&#039;, &#039;&#039;&#039;loadlib()&#039;&#039;&#039;, &#039;&#039;&#039;loadstring()&#039;&#039;&#039;, &#039;&#039;&#039;dofile()&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==caveats==&lt;br /&gt;
Like qagame, lua modules are unloaded and reloaded on map_restart and map changes. This means that all global variables and other information is lost. Mods may choose to store persistent data in cvars or external files.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
&lt;br /&gt;
Q: OMG I hate the libary prefix et.* on everything!!11!1oneone&amp;lt;br&amp;gt;&lt;br /&gt;
A: table.foreach(et, function (func, value) _G[func] = value; end)&lt;br /&gt;
&lt;br /&gt;
Q: How do a reload my lua file without restarting the whole server?&amp;lt;br&amp;gt;&lt;br /&gt;
A: Use &#039;&#039;map_restart&#039;&#039;, &#039;&#039;reset_match&#039;&#039; or simply change the map.&lt;br /&gt;
&lt;br /&gt;
Q: Can I see some sample code?&amp;lt;br&amp;gt;&lt;br /&gt;
A: [[ETPro:Lua Sample Code|Lua sample code]]&lt;br /&gt;
&lt;br /&gt;
Q: Is there a list of [[ETPro]] Lua mods?&amp;lt;br&amp;gt;&lt;br /&gt;
A: Yes, [[:Category:ETPro:Mods|here]].&lt;br /&gt;
&lt;br /&gt;
Q: OMG my mod doesn&#039;t work!&amp;lt;br&amp;gt;&lt;br /&gt;
A: Make sure you added your mod&#039;s filename to the lua_modules cvar (e.g. set lua_modules mymod.lua).&lt;br /&gt;
&lt;br /&gt;
Q: OMG why has et_ClientSay been removed?&amp;lt;br&amp;gt;&lt;br /&gt;
A: That&#039;s a secret but, to keep the function as it was, just add the following code to your et_ClientCommand() function&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;	-- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
	-- so here&#039;s a wrapper for that&lt;br /&gt;
		arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
		&lt;br /&gt;
		if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
		elseif arg0 == &amp;quot;say_team&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_TEAM, et.ConcatArgs(1))&lt;br /&gt;
		elseif arg0 == &amp;quot;say_buddy&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_BUDDY, et.ConcatArgs(1))&lt;br /&gt;
		elseif arg0 == &amp;quot;say_teamnl&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_TEAMNL, et.ConcatArgs(1))&lt;br /&gt;
		end&lt;br /&gt;
	-- et_ClientSay wrapper end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Lua]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=WolfWiki:Community_Portal&amp;diff=2819</id>
		<title>WolfWiki:Community Portal</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=WolfWiki:Community_Portal&amp;diff=2819"/>
		<updated>2007-11-07T00:42:31Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Leagues / Competitions */  twl no longer does et&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The WolfWiki Community portal is a place to list community news sites, competitions, mod sites, and other ET/ETPro related resources. Links added here should be of general interest to the ET community, not just promotion of a particular clan or server.&lt;br /&gt;
== News Sites ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.et-center.com/ ET-Center]&lt;br /&gt;
* [http://www.crossfire.nu/ Crossfire.nu]&lt;br /&gt;
* [http://www.gamestv.org/ GamesTV.org]&lt;br /&gt;
* [http://www.swertcw.com/ sweRTCW]&lt;br /&gt;
* [http://www.planetwolfenstein.com/ Planet Wolfenstein]&lt;br /&gt;
* [http://www.etnation.co.uk/ ETNation.co.uk]&lt;br /&gt;
* [http://www.splashdamage.com/ SplashDamage.com]&lt;br /&gt;
* [http://www.planetwolfenstein.de/ PlanetWolfenstein.de]&lt;br /&gt;
* [http://www.rtcw.co.uk/ rtcw.co.uk]&lt;br /&gt;
* [http://velocity.lunarpages.com/index.html Unofficial Enemy Territory Strategy Guide]&lt;br /&gt;
* [http://www.planetwolfenstein.com/4newbies/ RTCW 4 Newbies]&lt;br /&gt;
* [http://www.enemy-territory.com Enemy Territory Resource Site]&lt;br /&gt;
* [http://www.geheimgemein.de/kallisti/ Kallisti.et Enemy Territory Fun Community]&lt;br /&gt;
* [http://www.et-scene.de/news.php ET-Scene.de (German)]&lt;br /&gt;
&lt;br /&gt;
== Leagues / Competitions ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.clanbase.com/ Clanbase]&lt;br /&gt;
* [http://www.sta-league.org/ Stronger Than All]&lt;br /&gt;
* [http://www.et-cup.net/ ET-Cup]&lt;br /&gt;
* [http://www.warleagues.com/ Warleagues]&lt;br /&gt;
* [http://www.frenchy-cup.com/ Frenchy-Cup european]&lt;br /&gt;
* [http://et-gather.be/ #et.gather Fast Gaming Cup]&lt;br /&gt;
* [http://www.gamearena.com.au/forums/et/ GameArena - Australian Community]&lt;br /&gt;
&lt;br /&gt;
== Mods ==&lt;br /&gt;
&lt;br /&gt;
* [http://stealthy.foolishgames.net/ FalckonET]&lt;br /&gt;
* [http://www.truecombat.com/intro.php TC:Elite]&lt;br /&gt;
* [http://www.omni-bot.com/ Omni-Bot]&lt;br /&gt;
* [http://www.priceofpeace.net/ The Price of Peace]&lt;br /&gt;
* [http://www.etpub.org/news.php ETPub]&lt;br /&gt;
* [http://jaymod.clanfu.org/ Jaymod]&lt;br /&gt;
* [http://www.splashdamage.com/index.php?name=pnPHPbb2&amp;amp;file=viewtopic&amp;amp;t=7522 ET-Mod-Project-List]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Fieldname&amp;diff=2750</id>
		<title>Fieldname</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Fieldname&amp;diff=2750"/>
		<updated>2007-05-24T22:18:59Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: warning on field descriptions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__&lt;br /&gt;
==Entity Fieldnames==&lt;br /&gt;
List of fields supported by [[Lua Mod API#entities|et.gentity_get() and et.gentity_set()]] functions&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pitatable columns=3 headlines=&amp;quot;field;type;access&amp;quot; widths=&amp;quot;180;120;60&amp;quot; headerfontcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;
activator;entity;RO;&lt;br /&gt;
chain;entity;RW;&lt;br /&gt;
classname;string;RW;&lt;br /&gt;
client.inactivityTime;integer;RW;&lt;br /&gt;
client.inactivityWarning;qboolean;RW;&lt;br /&gt;
clipmask;integer;?;&lt;br /&gt;
closespeed;float;RW;&lt;br /&gt;
count;integer;RW;&lt;br /&gt;
count2;integer;RW;&lt;br /&gt;
damage;integer;RW;&lt;br /&gt;
deathType;meansOfDeath_t;RW;&lt;br /&gt;
delay;float;RW;&lt;br /&gt;
dl_atten;integer;RW;&lt;br /&gt;
dl_color;vec3;RW;&lt;br /&gt;
dl_shader;string;RO;&lt;br /&gt;
dl_stylestring;string;RO;&lt;br /&gt;
duration;float;RW;&lt;br /&gt;
end_size;integer;RW;&lt;br /&gt;
enemy;entity;RW;&lt;br /&gt;
flags;bitflag;RO;&lt;br /&gt;
harc;float;RW;&lt;br /&gt;
health;integer;RW;&lt;br /&gt;
inuse;qboolean;RO;&lt;br /&gt;
isProp;qboolean;RO;&lt;br /&gt;
item;string;RW;&lt;br /&gt;
key;integer;RW;&lt;br /&gt;
message;string;RW;&lt;br /&gt;
methodOfDeath;integer;RW;&lt;br /&gt;
mg42BaseEnt;integer;RW;&lt;br /&gt;
missionLevel;integer;RW;&lt;br /&gt;
model;string;RO;&lt;br /&gt;
model2;string;RO;&lt;br /&gt;
nextTrain;entity;RW;&lt;br /&gt;
noise_index;integer;RW;&lt;br /&gt;
origin;vec3;RW;&lt;br /&gt;
pers.connected;connected_t;?;&lt;br /&gt;
pers.netname;string;?;&lt;br /&gt;
pers.localClient;qboolean;?;&lt;br /&gt;
pers.initialSpawn;qboolean;?; &lt;br /&gt;
pers.enterTime;integer;?;&lt;br /&gt;
pers.connectTime;integer;?; &lt;br /&gt;
pers.teamState.state;teamstatestate_t;?;&lt;br /&gt;
pers.voteCount;integer;?;&lt;br /&gt;
pers.teamVoteCount;integer;?; &lt;br /&gt;
pers.complaints;integer;?; &lt;br /&gt;
pers.complaintClient;integer;?; &lt;br /&gt;
pers.complaintEndTime;integer;?; &lt;br /&gt;
pers.lastReinforceTime;integer;?; &lt;br /&gt;
pers.applicationClient;integer;?; &lt;br /&gt;
pers.applicationEndTime;integer;?; &lt;br /&gt;
pers.invitationClient;integer;?; &lt;br /&gt;
pers.invitationEndTime;integer;?; &lt;br /&gt;
pers.propositionClient;integer;?; &lt;br /&gt;
pers.propositionClient2;integer;?; &lt;br /&gt;
pers.propositionEndTime;integer;?; &lt;br /&gt;
pers.autofireteamEndTime;integer;?; &lt;br /&gt;
pers.autofireteamCreateEndTime;integer;?; &lt;br /&gt;
pers.autofireteamJoinEndTime;integer;?; &lt;br /&gt;
pers.lastSpawnTime;integer;?;&lt;br /&gt;
pers.ready;qboolean;?;&lt;br /&gt;
prevTrain;entity;RW;&lt;br /&gt;
props_frame_state;integer;RO;&lt;br /&gt;
ps.stats;integer array;RW; &lt;br /&gt;
ps.persistant;integer array;RW;&lt;br /&gt;
ps.ping;integer;?;&lt;br /&gt;
ps.powerups;integer array;RW;&lt;br /&gt;
ps.ammo;integer array;RW; &lt;br /&gt;
ps.ammoclip;integer array;RW;&lt;br /&gt;
r.absmax;vec3;RO;&lt;br /&gt;
r.absmin;vec3;RO;&lt;br /&gt;
r.bmodel;qboolean;RO;&lt;br /&gt;
r.contents;integer;RW;&lt;br /&gt;
r.currentAngles;vec3;RW;&lt;br /&gt;
r.currentOrigin;vec3;RW;&lt;br /&gt;
r.eventTime;integer;RW;&lt;br /&gt;
r.linkcount;integer;RO;&lt;br /&gt;
r.linked;qboolean;RO;&lt;br /&gt;
r.maxs;vec3;RW;&lt;br /&gt;
r.mins;vec3;RW;&lt;br /&gt;
r.ownerNum;integer;RW;&lt;br /&gt;
r.singleClient;integer;RW;&lt;br /&gt;
r.svFlags;integer;RW;&lt;br /&gt;
r.worldflags;integer;RO;&lt;br /&gt;
radius;integer;RW;&lt;br /&gt;
random;float;RW;&lt;br /&gt;
rotate;vec3;RW;&lt;br /&gt;
s.angles;vec3;RW;&lt;br /&gt;
s.angles2;vec3;RW;&lt;br /&gt;
s.apos;trajectory;RW;&lt;br /&gt;
s.clientNum;integer;RW;&lt;br /&gt;
s.constantLight;integer;RW;&lt;br /&gt;
s.density;integer;RW;&lt;br /&gt;
s.dl_intensity;integer;RW;&lt;br /&gt;
s.dmgFlags;integer;RW;&lt;br /&gt;
s.eFlags;integer;RW;&lt;br /&gt;
s.eType;integer;?;&lt;br /&gt;
s.effect1Time;integer;RW;&lt;br /&gt;
s.effect2Time;integer;RW;&lt;br /&gt;
s.effect3Time;integer;RW;&lt;br /&gt;
s.frame;integer;RW;&lt;br /&gt;
s.groundEntityNum;integer;RO;&lt;br /&gt;
s.loopSound;integer;RW;&lt;br /&gt;
s.modelindex;integer;RW;&lt;br /&gt;
s.modelindex2;integer;RW;&lt;br /&gt;
s.number;integer;RO;&lt;br /&gt;
s.onFireEnd;integer;RW;&lt;br /&gt;
s.onFireStart;integer;RW;&lt;br /&gt;
s.origin;vec3;?;&lt;br /&gt;
s.origin2;vec3;?;&lt;br /&gt;
s.pos;trajectory;RW;&lt;br /&gt;
s.powerups;integer;RO;&lt;br /&gt;
s.solid;integer;RW;&lt;br /&gt;
s.teamNum;integer;RW;&lt;br /&gt;
s.time;integer;RW;&lt;br /&gt;
s.time2;integer;RW;&lt;br /&gt;
s.weapon;integer;RO;&lt;br /&gt;
scriptName;string;RO;&lt;br /&gt;
sess.sessionTeam;team_t;RW;&lt;br /&gt;
sess.spectatorTime;integer;RW;&lt;br /&gt;
sess.spectatorState;spectatorState_t;RW;&lt;br /&gt;
sess.spectatorClient;entity;RW;&lt;br /&gt;
sess.latchSpectatorClient;integer;RW;&lt;br /&gt;
sess.playerType;integer;RW;&lt;br /&gt;
sess.playerWeapon;integer;RW;&lt;br /&gt;
sess.playerWeapon2;integer;RW;&lt;br /&gt;
sess.spawnObjectiveIndex;integer;RW;&lt;br /&gt;
sess.latchPlayerType;integer;RW;&lt;br /&gt;
sess.latchPlayerWeapon;integer;RW;&lt;br /&gt;
sess.latchPlayerWeapon2;integer;RW;&lt;br /&gt;
sess.damage_given;integer;RW;&lt;br /&gt;
sess.damage_received;integer;RW;&lt;br /&gt;
sess.deaths;integer;RW;&lt;br /&gt;
sess.game_points;integer;RW;&lt;br /&gt;
sess.gibs;integer;RW;&lt;br /&gt;
sess.kills;integer;RW;&lt;br /&gt;
sess.medals;integer array;RW;&lt;br /&gt;
sess.muted;qboolean;RW;&lt;br /&gt;
sess.rank;integer;RW;&lt;br /&gt;
sess.referee;integer;RW;&lt;br /&gt;
sess.rounds;integer;RW;&lt;br /&gt;
sess.semiadmin;integer;RW;&lt;br /&gt;
sess.skill;integer array;RW;&lt;br /&gt;
sess.spec_invite;integer;RW;&lt;br /&gt;
sess.spec_team;integer;RW;&lt;br /&gt;
sess.suicides;integer;RW;&lt;br /&gt;
sess.team_damage;integer;RW;&lt;br /&gt;
sess.team_kills;integer;RW;&lt;br /&gt;
sess.team_received;integer;RW;&lt;br /&gt;
sess.aWeaponStats;weapon_stat_t;RW;&lt;br /&gt;
spawnflags;integer;RO;&lt;br /&gt;
spawnitem;string;RO;&lt;br /&gt;
speed;float;RW;&lt;br /&gt;
splashDamage;integer;RW;&lt;br /&gt;
splashMethodOfDeath;integer;RW;&lt;br /&gt;
splashRadius;integer;RW;&lt;br /&gt;
start_size;integer;RW;&lt;br /&gt;
tagName;string;RO;&lt;br /&gt;
tagParent;entity;RW;&lt;br /&gt;
takedamage;boolean;RW;&lt;br /&gt;
tankLink;entity;RW;&lt;br /&gt;
target;string;RW;&lt;br /&gt;
TargetAngles;vec3;RW;&lt;br /&gt;
TargetFlag;integer;RO;&lt;br /&gt;
targetname;string;RO;&lt;br /&gt;
teamchain;entity;RW;&lt;br /&gt;
teammaster;entity;RW;&lt;br /&gt;
track;string;RO;&lt;br /&gt;
varc;float;RW;&lt;br /&gt;
wait;float;RW;&lt;br /&gt;
waterlevel;integer;RO;&lt;br /&gt;
watertype;integer;RO;&lt;br /&gt;
&amp;lt;/pitatable&amp;gt;&lt;br /&gt;
:&#039;&#039;note&#039;&#039;: all the sess.* fields will return nil unless the entity is associated with client slot &amp;lt; sv_maxclients.&lt;br /&gt;
:&#039;&#039;note&#039;&#039;: all array variables need to be get or set with an additional parameter.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==ET variable types==&lt;br /&gt;
&lt;br /&gt;
===qboolean===&lt;br /&gt;
:a &#039;&#039;&#039;qboolean&#039;&#039;&#039; is a boolean value.&lt;br /&gt;
:0 is represented by the lua value false&lt;br /&gt;
:1 is represented by the lua value true&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===vec3===&lt;br /&gt;
:a &#039;&#039;&#039;vec3_t&#039;&#039;&#039; is a 3-element array of numbers (C definition: typedef float vec3_t[3];). It is usually used to store and process coordinates in 3D space.&amp;lt;br&amp;gt;&lt;br /&gt;
:In etpro-lua a vector is an array (table indexed by integers) containing 3 numbers. It can be accessed by&lt;br /&gt;
:doing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin = et.gentity_get(entNum,&amp;quot;r.currentOrigin&amp;quot;) --a vec3 value&lt;br /&gt;
x,y,z = origin[1],origin[2],origin[3]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===array===&lt;br /&gt;
:The fields listed as having type &#039;&#039;&#039;array&#039;&#039;&#039; represent an entity value which is an array. Individual elements of the array are accessed by passing the desired index in the &#039;&#039;arrayindex&#039;&#039; argument to the et.gentity_get and et.gentity_set functions. Valid array indexes are integers from 0 up to some field specific maximum. The &#039;&#039;arrayindex&#039;&#039; argument is &#039;&#039;&#039;required&#039;&#039;&#039; when accessing array type fields, so only one element of an array can be accessed in a given call to the gentity_* functions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===trajectory===&lt;br /&gt;
:a &#039;&#039;&#039;trajectory&#039;&#039;&#039; is returned as a lua table described below&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  trDuration = &amp;lt;number&amp;gt;, --- int&lt;br /&gt;
  trTime = &amp;lt;number&amp;gt;, -- int&lt;br /&gt;
  trType = &amp;lt;number&amp;gt;, -- see below for allowed values&lt;br /&gt;
  trBase = &amp;lt;vec3_t&amp;gt;, -- vec3, as described above&lt;br /&gt;
  trDelta = &amp;lt;vec3_t&amp;gt; -- also a vec3&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
: the allowed values for trType (along with the enum names and original comments from the ET source), are as follows. Note &lt;br /&gt;
: that not all values make sense for all entity types &lt;br /&gt;
&amp;lt;pitatable columns=3 headlines=&amp;quot;number;type;discription&amp;quot; widths=&amp;quot;40;160;450&amp;quot; headerfontcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;
1;TR_STATIONARY;&lt;br /&gt;
2;TR_INTERPOLATE;non-parametric, but interpolate between snapshots;&lt;br /&gt;
3;TR_LINEAR;&lt;br /&gt;
4;TR_LINEAR_STOP;&lt;br /&gt;
5;TR_LINEAR_STOP_BACK;reverse movement can be different than forward;&lt;br /&gt;
6;TR_SINE;value = base + sin( time / duration ) * delta;&lt;br /&gt;
7;TR_GRAVITY;&lt;br /&gt;
8;TR_GRAVITY_LOW;&lt;br /&gt;
9;TR_GRAVITY_FLOAT;super low grav with no gravity acceleration;&lt;br /&gt;
10;TR_GRAVITY_PAUSED;has stopped, but trace to see if it should be switched back to TR_GRAVITY;&lt;br /&gt;
11;TR_ACCELERATE;&lt;br /&gt;
12;TR_DECCELERATE;&lt;br /&gt;
13;TR_SPLINE;&lt;br /&gt;
14;TR_LINEAR_PATH;&lt;br /&gt;
&amp;lt;/pitatable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===entity===&lt;br /&gt;
:The fields listed as having type &#039;&#039;&#039;enitity&#039;&#039;&#039; return an entity number or nil. Entity numbers are integers from 0 through 1023. Some of the entity numbers have special meanings:&lt;br /&gt;
:0 - (sv_privateclients - 1) are reserved for clients who connect with the private slot password&lt;br /&gt;
:0 - 63 are reserved for clients. A client&#039;s entity number is also its client number (as shown by /players for example)&lt;br /&gt;
:1022 is the &#039;&#039;&#039;worldspawn&#039;&#039;&#039; entity&lt;br /&gt;
:1023 is &#039;&#039;&#039;ENTITYNUM_NONE&#039;&#039;&#039; which is used instead of null in C under some circumstances to indicate no entity. This is needed where an entity number will be passed over the network.&lt;br /&gt;
:&#039;&#039;Note&#039;&#039;: Some other fields not listed as type &#039;entity&#039; may take an entity number value. &#039;&#039;&#039;mg42BaseEnt&#039;&#039;&#039; and &#039;&#039;&#039;s.number&#039;&#039;&#039; are examples.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===meansOfDeath===&lt;br /&gt;
:a &#039;&#039;&#039;meansOfDeath_t&#039;&#039;&#039; is a number indicating the [[etdamage|Method of Death]] Click  [[etdamage|here]] for a list with possible value&#039;s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Field details ==&lt;br /&gt;
&#039;&#039;&#039;WARNING&#039;&#039;&#039;&lt;br /&gt;
The following are incomplete, and likely contain errors. Also be aware that the meaning of many fields depends on which entity the field belongs to. &amp;quot;damage&amp;quot; on one entity may have a completely different meaning on another. When in doubt, consult the ET source. ETPro may differ slightly, but the majority of entity fields are the same. The full meaning of a given field can ONLY be obtained from the source. &lt;br /&gt;
&lt;br /&gt;
=== classname ===&lt;br /&gt;
Entity class name.&lt;br /&gt;
* &#039;&#039;nil&#039;&#039; if entity is not in use&lt;br /&gt;
* &#039;&#039;player&#039;&#039; for game client&lt;br /&gt;
* &#039;&#039;team_WOLF_objective&#039;&#039; for objective entity&lt;br /&gt;
etc.&lt;br /&gt;
&lt;br /&gt;
=== client.inactivityTime ===&lt;br /&gt;
Timestamp of when the client was last active. Seems to be 44000000 + server uptime in ms.&lt;br /&gt;
&lt;br /&gt;
=== damage ===&lt;br /&gt;
Probably related to damage entity deals (e.g. fire, barbed wire). 2 for player entity.&lt;br /&gt;
&lt;br /&gt;
=== health ===&lt;br /&gt;
Health of the entity (e.g. player&#039;s health for a client, damage needed to disable stationary MG for stationary MG etc.)&lt;br /&gt;
&lt;br /&gt;
=== inuse ===&lt;br /&gt;
Indicates whether the entity number is used. Specially for entity numbers reserved for clients, indicates whether client slot is used.&lt;br /&gt;
&lt;br /&gt;
=== message ===&lt;br /&gt;
Message associated with the entity (e.g. &amp;quot;Side door&amp;quot; for side door objective entity). nil for player entities.&lt;br /&gt;
&lt;br /&gt;
=== origin ===&lt;br /&gt;
* for living player and some visible entities (like tank), position in map&lt;br /&gt;
* dosen&#039;t work for spectating player&lt;br /&gt;
&lt;br /&gt;
=== s.origin ===&lt;br /&gt;
* for spectator in freelook, the spectator&#039;s position&lt;br /&gt;
&lt;br /&gt;
=== pers.netname ===&lt;br /&gt;
For player, their nickname.&lt;br /&gt;
&lt;br /&gt;
=== ps.ammo ===&lt;br /&gt;
Array. For each weapon, tells how many bullets/whatever the player has in spare clips.&lt;br /&gt;
&lt;br /&gt;
=== ps.ammoclip ===&lt;br /&gt;
Array. For each weapon, tells how many bullets/whatever the player has in current clip.&lt;br /&gt;
&lt;br /&gt;
=== sess.sessionTeam ===&lt;br /&gt;
Player&#039;s team:&lt;br /&gt;
* 1 = red&lt;br /&gt;
* 2 = blue&lt;br /&gt;
* 3 = spectator&lt;br /&gt;
&lt;br /&gt;
=== sess.spectatorState ===&lt;br /&gt;
* 1 = free spectator&lt;br /&gt;
* 2 = spectator following another player&lt;br /&gt;
&lt;br /&gt;
=== sess.spectatorClient ===&lt;br /&gt;
Entity number of player the spectator is following.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;br /&gt;
[[Category:Lua]]&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Fieldname&amp;diff=2749</id>
		<title>Talk:Fieldname</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Fieldname&amp;diff=2749"/>
		<updated>2007-05-24T22:13:55Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* ps.velocity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;someone feel free to make this table pretty.&lt;br /&gt;
&lt;br /&gt;
Roger that. --Rookie One 03:31, 13 November 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
// Comment by Deus 13:22, 13 November 2005 (CET)&lt;br /&gt;
I liked the former one more.&lt;br /&gt;
I thought about some colorisation like red for readonly and green for r/w. maybe some mouseover stuff, or just the one tr light the next darker, to have a better viewability ?&lt;br /&gt;
// End of Deus Comment&lt;br /&gt;
&lt;br /&gt;
Alright, I&#039;ll restore the previous borders and add some colour. --Rookie One 04:33, 13 November 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
That was just my suggestion. Maybe this differs from banis view of beautification :) --Deus 04:46, 13 November 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
== use of color...bad! ==&lt;br /&gt;
&lt;br /&gt;
use of color to convey specific data (ro/rw) is bad. red/green is the worst possible choice too :)&amp;lt;br&amp;gt;&lt;br /&gt;
consider someone who is colorblind. check the article via http://colorfilter.wickline.org/ to see how bad this is.&lt;br /&gt;
but it looks bad even for those who aren&#039;t color blind :P&lt;br /&gt;
&lt;br /&gt;
Yeah, reyalP, I also thought it&#039;s weird to initialize the table like that, but wasn&#039;t sure. ;) --Rookie One 06:26, 17 November 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
== Question ==&lt;br /&gt;
&lt;br /&gt;
Is there a article describing each fieldname?&lt;br /&gt;
: No. To understand what they do, you need to look at the ET gamecode. Some Quake3 coding articles might also help you. It would be nice if someone documented some of the more common/interesting ones, but documenting them all would be a huge task. In the future, if you are looking for something, you can see all the pages in the wiki at [[Special:Allpages]]. If you have questions about specific fields, you can try asking on the [http://bani.anime.net/banimod/forums/viewforum.php?f=17 ETPro modding forum] Also, please sign your comments with &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
::- [[User:ReyalP|ReyalP]] 18:53, 15 May 2006 (PDT)&lt;br /&gt;
::I added descriptions of fields I *think* I know meaning of. Most times it&#039;s a wild guess based on my observations tho. Hope someone will correct my mistakes and add some more. -[[User:Major Zeman|Major Zeman]] 02:28, 20 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
I ve waited for a week and my account is still not activated by admin :&amp;lt;&lt;br /&gt;
&lt;br /&gt;
[[User:Kotoko|Kotoko]] 00:01, 16 May 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
== making &#039;flags&#039; writable ==&lt;br /&gt;
&lt;br /&gt;
What about making the field &#039;&#039;flags&#039;&#039; read-write? I run a trickjump server and it would be very handy if I could give people the nofatigue flag so they never go out of stamina.&lt;br /&gt;
:Maybe [[User:Nano|Nano]]&#039;s adrenaline.lua is a solution for you? (yeah I know responding to one year old commants again) -[[User:Major Zeman|Major Zeman]] 09:44, 21 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== ps.velocity ==&lt;br /&gt;
Any chance of getting ps.velocity field as R/W in some next etpro release? -[[User:Major Zeman|Major Zeman]] 09:44, 21 May 2007 (PDT)&lt;br /&gt;
: Yes, this will most likely be in the next release. The lua API talk page is the place to request features BTW. -15:13, 24 May 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User_talk:ReyalP&amp;diff=2739</id>
		<title>User talk:ReyalP</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User_talk:ReyalP&amp;diff=2739"/>
		<updated>2007-05-07T00:05:20Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* unref? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;in your etconst it says at top :&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;-- [23:10] &amp;lt;|Rain|&amp;gt; 2 became CS_ETPRO_INFO instead of CS_MUSIC, because I needed the version info before any more configstrings were parsed&lt;br /&gt;
-- [23:10] &amp;lt;|Rain|&amp;gt; and CS_MUSIC moved up to 53&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;but u still got CS_MUSIC at 2 --2good&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:yup. Since I had no idea what you&#039;d do with either of those config strings, I just left things as I got them found them in the etmain sdk. [[User:ReyalP|ReyalP]]&lt;br /&gt;
&lt;br /&gt;
three [[User:ReyalP|ReyalP]] or [[User:ReyalP|ReyalP]] 13:25, 16 November 2005 (PST) four ?&lt;br /&gt;
&lt;br /&gt;
thats nice but oh well ok i dont care i dont use it myself its a lityle this i made out of my debuglib that was a print function that works like a printf you add variables and dont care but it is since it will check each variable first [[User:=FF=im2good4u|=FF=Im2good4u]] 13:45, 16 November 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
== autoref.lua ==&lt;br /&gt;
&lt;br /&gt;
I &amp;lt;font color=red&amp;gt;&#039;&#039;&#039;&amp;lt;3&#039;&#039;&#039;&amp;lt;/font&amp;gt; this module.  Thanks.  --[[User:Ouroboro|ouroboro]] 16:50, 12 June 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
== unref? ==&lt;br /&gt;
&lt;br /&gt;
Hi, don&#039;t you know about any way, rcon or lua, how to unref a client that has reffed themselves with password? You can&#039;t unref them from ref, neither through /rcon ref unreferee [num].&lt;br /&gt;
&lt;br /&gt;
I tired with lua, I can make the client think they got reffed/unreffed using configstrings (keys &amp;quot;ref&amp;quot; and &amp;quot;p&amp;quot;), but the server still sees no change in the client status. - [[User:Major Zeman|Major Zeman]] 07:00, 6 May 2007 (PDT)&lt;br /&gt;
:kick them and change the ref pass ?&lt;br /&gt;
:you could also try changing sess.referee - [[User:ReyalP|ReyalP]] 15:02, 6 May 2007 (PDT)&lt;br /&gt;
::lol, that&#039;s basically the &amp;quot;solution&amp;quot; I took. I think I tried sess.referee too, I might try to put it all together later. Thanks anyways :) - [[User:Major Zeman|Major Zeman]] 15:30, 6 May 2007 (PDT)&lt;br /&gt;
:::you may be able to get some insight by looking at the ref commands in the ET SDK. Of course, etpro doesn&#039;t do everything exactly the same way. - [[User:ReyalP|ReyalP]] 17:05, 6 May 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User_talk:ReyalP&amp;diff=2735</id>
		<title>User talk:ReyalP</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User_talk:ReyalP&amp;diff=2735"/>
		<updated>2007-05-06T22:02:14Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;in your etconst it says at top :&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;-- [23:10] &amp;lt;|Rain|&amp;gt; 2 became CS_ETPRO_INFO instead of CS_MUSIC, because I needed the version info before any more configstrings were parsed&lt;br /&gt;
-- [23:10] &amp;lt;|Rain|&amp;gt; and CS_MUSIC moved up to 53&amp;lt;code&amp;gt;&amp;lt;br&amp;gt;but u still got CS_MUSIC at 2 --2good&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:yup. Since I had no idea what you&#039;d do with either of those config strings, I just left things as I got them found them in the etmain sdk. [[User:ReyalP|ReyalP]]&lt;br /&gt;
&lt;br /&gt;
three [[User:ReyalP|ReyalP]] or [[User:ReyalP|ReyalP]] 13:25, 16 November 2005 (PST) four ?&lt;br /&gt;
&lt;br /&gt;
thats nice but oh well ok i dont care i dont use it myself its a lityle this i made out of my debuglib that was a print function that works like a printf you add variables and dont care but it is since it will check each variable first [[User:=FF=im2good4u|=FF=Im2good4u]] 13:45, 16 November 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
== autoref.lua ==&lt;br /&gt;
&lt;br /&gt;
I &amp;lt;font color=red&amp;gt;&#039;&#039;&#039;&amp;lt;3&#039;&#039;&#039;&amp;lt;/font&amp;gt; this module.  Thanks.  --[[User:Ouroboro|ouroboro]] 16:50, 12 June 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
== unref? ==&lt;br /&gt;
&lt;br /&gt;
Hi, don&#039;t you know about any way, rcon or lua, how to unref a client that has reffed themselves with password? You can&#039;t unref them from ref, neither through /rcon ref unreferee [num].&lt;br /&gt;
&lt;br /&gt;
I tired with lua, I can make the client think they got reffed/unreffed using configstrings (keys &amp;quot;ref&amp;quot; and &amp;quot;p&amp;quot;), but the server still sees no change in the client status.&lt;br /&gt;
:- [[User:Major Zeman|Major Zeman]] 07:00, 6 May 2007 (PDT)&lt;br /&gt;
:kick them and change the ref pass ?&lt;br /&gt;
:you could also try changing sess.referee - [[User:ReyalP|ReyalP]] 15:02, 6 May 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:ReyalP&amp;diff=2726</id>
		<title>User:ReyalP</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:ReyalP&amp;diff=2726"/>
		<updated>2007-04-27T20:33:06Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* ETPro/Lua libraries, modules and examples */ sploits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.sonic.net/~rfm/et/bananet.png&lt;br /&gt;
==ETPro/Lua libraries, modules and examples==&lt;br /&gt;
;Follow the link to the source code for more detailed information about each item.&lt;br /&gt;
;Exploit fixes [http://bani.anime.net/banimod/forums/viewtopic.php?t=6777 see this thread for details]&lt;br /&gt;
*[http://www.collectivecomputing.com/~reed/et/lua/wsfix.lua wsfix.lua] prevent crash or information disclosure via the ws command&lt;br /&gt;
*[http://www.collectivecomputing.com/~reed/et/lua/userinfocheck.lua userinfocheck.lua] perform some sanity checking on userinfo&lt;br /&gt;
*[http://www.collectivecomputing.com/~reed/et/lua/guidcheck.lua guidcheck.lua] prevent crash from etpro guid hacks&lt;br /&gt;
*[http://www.collectivecomputing.com/~reed/et/lua/fakeplimit.lua fakeplimit.lua] limit number of connections from a given IP. This should not be used without userinfocheck.lua, as the IP might be spoofed otherwise.&lt;br /&gt;
*[http://www.collectivecomputing.com/~reed/et/lua/combinedfixes.lua combinedfixes.lua] all of the above merged into a single module.&lt;br /&gt;
;Older stuff&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/autoref.lua autoref.lua] lua module to give people referee status, based on IP or PB GUID. Requires etconst.lua&amp;lt;br&amp;gt; WARNING: The GUID this uses might be spoofed by malicious clients. The IP might also be spoofed if you don&#039;t use userinfocheck.lua&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/etconst.lua etconst.lua] some common constants from the et header files, converted to lua.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/luacon.lua luacon.lua] library provides a lua command in the server console, for interactive testing.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/luaconmod.lua luaconmod.lua] runs luacon as module.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/cvarobj.lua cvarobj.lua] metamethods example. Allows using cvars like normal lua variables.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/dumptable.lua dumptable.lua] recursively display contents of a table.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/noteamflood.lua noteamflood.lua] prevent people from flooding &amp;quot;team&amp;quot; commands. No longer needed with etpro 3.2.6.&lt;br /&gt;
&lt;br /&gt;
==Map editing stuff==&lt;br /&gt;
; tjlview, a plugin for viewing [[TrickJumpLines]] in [http://www.qeradiant.com/ GtkRadiant 1.4]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/readme_tjlview-a0.1.txt readme]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/tjlview-a0.1-src.zip source]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/tjlview-linux.zip windows and linux binaries]&lt;br /&gt;
; readme for bkgrnd2d plugin (the plugin itself is included in GTKRadiant 1.4)&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/readme_bkgrnd2d-b0.25.txt readme_bkgrnd2d-b0.25.txt]&lt;br /&gt;
&lt;br /&gt;
==Contact==&lt;br /&gt;
* &#039;&#039;&#039;email&#039;&#039;&#039; reyalp (at) gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;[[IRC]]&#039;&#039;&#039; #etpro on freenode or quakenet, #n-warriors on gamesurge&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=SemiAdmin&amp;diff=2725</id>
		<title>SemiAdmin</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=SemiAdmin&amp;diff=2725"/>
		<updated>2007-04-24T02:23:17Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* b_semiAdminCmds# */ cvars and cfgs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Semi Admins&#039;&#039;&#039; are admins who can perform only certain commands without having full referee or rcon access.&lt;br /&gt;
The commands each semiadmin can perform and the password each needs for logging in are defined via cvars.&lt;br /&gt;
&lt;br /&gt;
==cvar overview==&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #CCCCFF;&amp;quot;&lt;br /&gt;
!width=&amp;quot;200&amp;quot;|cvar&lt;br /&gt;
!width=&amp;quot;100&amp;quot;|default&lt;br /&gt;
!description&lt;br /&gt;
|- style=&amp;quot;background-color: #F4F4F4;&amp;quot;&lt;br /&gt;
|&amp;lt;tt style=&amp;quot;color: green;&amp;quot;&amp;gt;b_semiAdminLevels&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|The number of semiadmin levels.&lt;br /&gt;
|- style=&amp;quot;background-color: #EEEEEE;&amp;quot;&lt;br /&gt;
|&amp;lt;tt style=&amp;quot;color: green;&amp;quot;&amp;gt;b_semiAdminPass#&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot; style=&amp;quot;color: gray;&amp;quot;|undefined&lt;br /&gt;
|Defines the password for each semiadmin level, where # is the level to set the password for.&lt;br /&gt;
|- style=&amp;quot;background-color: #F4F4F4;&amp;quot;&lt;br /&gt;
|&amp;lt;tt style=&amp;quot;color:green;&amp;quot;&amp;gt;b_semiAdminCmds#&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot; style=&amp;quot;color: gray;&amp;quot;|undefined&lt;br /&gt;
|A space-seperated list of commands a level # semiadmin can use.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==cvar descriptions==&lt;br /&gt;
&lt;br /&gt;
===b_semiAdminLevels===&lt;br /&gt;
&lt;br /&gt;
Defines the number of semiadmin levels to use. Valid values are 0–999. The default value of 0 disables semiadmin functionality.&lt;br /&gt;
 set b_semiAdminLevels 3   // you will have 3 semiadmin levels&lt;br /&gt;
&lt;br /&gt;
===b_semiAdminPass#===&lt;br /&gt;
&lt;br /&gt;
Sets the password for each semiadmin level. # is the level to set the password for. Every level must have its own password.&lt;br /&gt;
 set b_semiAdminPass1 &amp;quot;foo&amp;quot;   // foo is the password to log in as a level 1 semiadmin&lt;br /&gt;
&lt;br /&gt;
===b_semiAdminCmds#===&lt;br /&gt;
&lt;br /&gt;
A space-seperated list of commands a semiadmin with level # is allowed to perform. Be carefull with commands like &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vstr&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
 set b_semiAdminCmds1 &amp;quot;clientkick say kick&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In addition to built in commands, you can permit semi-admins to exec .cfg files or vstr cvars. &lt;br /&gt;
If blah is in b_semiAdminCmds# &amp;lt;code&amp;gt;sa blah&amp;lt;/code&amp;gt; looks for a file named blah.cfg and then a cvar named blah.cvar, and finally a builtin command named blah.&lt;br /&gt;
&lt;br /&gt;
==Example configuration==&lt;br /&gt;
&lt;br /&gt;
 set b_semiAdminLevels   &amp;quot;3&amp;quot;                 // we will have 3 semiadmin levels&lt;br /&gt;
 set b_semiAdminPass1    &amp;quot;foo&amp;quot;               // foo is the password for level 1&lt;br /&gt;
 set b_semiAdminPass2    &amp;quot;bar&amp;quot;               // the password for level 2&lt;br /&gt;
 set b_semiAdminPass3    &amp;quot;foobar&amp;quot;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;set b_semiAdminPass4    &amp;quot;wrong&amp;quot;             // will not work since we have only defined 3 semiadmin levels&amp;lt;/span&amp;gt;&lt;br /&gt;
 set b_semiAdminCmds1    &amp;quot;say map_restart&amp;quot;&lt;br /&gt;
 set b_semiAdminCmds2    &amp;quot;kick say clientkick g_friendyfire&amp;quot;         // level 2 is allowed to change the cvar g_friendlyfire&lt;br /&gt;
 set b_semiAdminCmds3    &amp;quot;set kick clientkick exec&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The above lines will create 3 semiadmin levels. Each level has its own password and an own list of commands which can be used by a semiadmin with that level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Usage of the semiadmin functionality==&lt;br /&gt;
&lt;br /&gt;
To log in as a semiadmin use the command &amp;lt;code&amp;gt;/semiadminlogin &amp;lt;password&amp;gt;&amp;lt;/code&amp;gt; or the shorter one &amp;lt;code&amp;gt;/sal &amp;lt;password&amp;gt;&amp;lt;/code&amp;gt;. Performing a command is done via the commands &amp;lt;code&amp;gt;/semiadmin &amp;lt;command&amp;gt;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/sa &amp;lt;command&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Some commands send information back, like the rcon command &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;. These information will not be sent back to the semiadmin.&lt;br /&gt;
&lt;br /&gt;
Typing &amp;lt;code&amp;gt;/sa&amp;lt;/code&amp;gt; without any parameters will give you a list of commands you’re allowed to perform.&lt;br /&gt;
&lt;br /&gt;
 /sal baz                              // login with the password baz&lt;br /&gt;
 /semiadmin say Hello all              // perform the command &amp;quot;say Hello all&amp;quot;&lt;br /&gt;
 /sa                                   // shows you a list of commands you’re able to perform&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User_talk:Major_Zeman&amp;diff=2722</id>
		<title>User talk:Major Zeman</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User_talk:Major_Zeman&amp;diff=2722"/>
		<updated>2007-04-21T01:32:12Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Just a quick note: the cl_guid in userinfo is pretty easy to spoof. -[[User:ReyalP|ReyalP]] 15:18, 20 April 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
:- Is that the etpro one or the pb&#039;s one? Thought it was pb&#039;s one :S (fortunately I don&#039;t use it for anything important) Any suggestions what would be better there? Anyways, thanks for the warning --[[User:Major Zeman|Major Zeman]] 15:28, 20 April 2007 (PDT)&lt;br /&gt;
:: cl_guid is the pb GUID. If you are just using it for stats restore or something like that, it&#039;s not an issue. If you are using it for authentication, you should be aware of this. You could get it from sending PB commands (which get it internally rather than from userinfo AFAIK) to the console and reading it back from the log file, but this is a serious pain. It is also still possible to spoof, although much harder. Even if you are using it for authentication, to steal someone elses ID would require knowing their full PB GUID, which isn&#039;t normally visible to other players. Of course, server logs and PB screenshots can leak this information out. -[[User:ReyalP|ReyalP]] 18:32, 20 April 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User_talk:Major_Zeman&amp;diff=2719</id>
		<title>User talk:Major Zeman</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User_talk:Major_Zeman&amp;diff=2719"/>
		<updated>2007-04-20T22:18:57Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Just a quick note: the cl_guid in userinfo is pretty easy to spoof. -[[User:ReyalP|ReyalP]] 15:18, 20 April 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=ETTV:Viewer%27s_Guide&amp;diff=2711</id>
		<title>ETTV:Viewer&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=ETTV:Viewer%27s_Guide&amp;diff=2711"/>
		<updated>2007-04-04T04:28:14Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Known Issues */  support requests don&amp;#039;t go here.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ETTV Viewer&#039;s Guide ==&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
ETTV is a modification that allows anybody to spectate Enemy Territory matches without actually being on the server the teams are playing on. The purpose is so that you have have thousands of people all able to watch an exciting match live, without being able to interfere or otherwise cause problems with the match.&lt;br /&gt;
&lt;br /&gt;
The ETTV modification is supplied within the ETPro modification, you do not need any further modification unless you intend to run an [[ETTV:Server_Configuration|ETTV Server]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Watching ETTV ===&lt;br /&gt;
Simply connect to an ETTV server like any other Enemy Territory server. Once you are connected it will look and feel very much like you are in spectator mode on any normal server.&lt;br /&gt;
&lt;br /&gt;
There are some issues which occur frequently enough to make it worth noting here, however. &lt;br /&gt;
&lt;br /&gt;
* ETTV servers frequently do not allow clients (that&#039;s you/your game) to auto-download any missing files. You should try to ensure you &#039;&#039;&#039;have the correct patch, modification and custom map versions before you join&#039;&#039;&#039;. This is usually, but not necessarily the latest official version. If you do not have the correct versions you may be unable to join, or disconnected at some point during viewing.&lt;br /&gt;
&lt;br /&gt;
*  &#039;&#039;&#039;Do not be concerned about interfering with the match&#039;&#039;&#039;, you cant. The ETTV server you join is essentially playing a live demo of the match which is actually being played on another server. You can spectate freely and talk crap with the other viewers on the same ETTV server, thats it. Chat from ETTV viewers is distinguished from chat in the match by the red &amp;quot;ETTV&amp;quot; preceding it.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Connecting via IP address&#039;&#039;&#039; (command-line or console) is identical to any other Enemy Territory server. If you&#039;ve been given the IP address of an ETTV server and are wondering what to do with it, open the console (usually by pressing the key under ESCape, often the ~ or ` key) and use the following command (including the forwardslash) -  &amp;lt;tt&amp;gt;/connect ip.add.ress:port&amp;lt;/tt&amp;gt;&lt;br /&gt;
:(for example: &amp;lt;tt&amp;gt;/connect 62.75.178.112:27962&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Additional Controls ===&lt;br /&gt;
* cycle between everybody on the server (who shows up on the scoresheet)&lt;br /&gt;
:fire &amp;lt;tt&amp;gt;&amp;lt;Left Mouse button&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* cycle following only objective carriers&lt;br /&gt;
:Prone + (fire / altweapon) &amp;lt;tt&amp;gt;&amp;lt;X + LeftMouse&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* cycle following only spectators / shoutcasters&lt;br /&gt;
:Zoom + (fire / altweapon) &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;B + LeftMouse&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Jump directly to following a player in view&lt;br /&gt;
: Press activate while pointing crosshair at player&lt;br /&gt;
* return to free floating mode.&lt;br /&gt;
: Press jump or activate &amp;lt;tt&amp;gt;&amp;lt;Spacebar&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Generally Useful Tips ===&lt;br /&gt;
*  Chats from other ETTV spectators can be hidden with the console command &amp;lt;tt&amp;gt;/tvchat off&amp;lt;/tt&amp;gt;, and re-enabled with &amp;lt;tt&amp;gt;/tvchat on&amp;lt;/tt&amp;gt;. All chat done on ETTV won&#039;t be seen on the game server (luckily). If certain chatters start to irritate you, you can easily ignore specific people with the &amp;lt;tt&amp;gt;/ignore&amp;lt;/tt&amp;gt; command and can use the &amp;lt;tt&amp;gt;/unignore&amp;lt;/tt&amp;gt; command to show their chat messages again.&lt;br /&gt;
&lt;br /&gt;
*  To spectate a specific player through their eyes, open console and put in the command &amp;lt;tt&amp;gt;/players&amp;lt;/tt&amp;gt;, and notice the player number. Now just &amp;lt;tt&amp;gt;/follow x&amp;lt;/tt&amp;gt;. If you&#039;re new to Enemy Territory, you might find it most entertaining to follow a shoutcaster, if there is one.&lt;br /&gt;
&lt;br /&gt;
*  Viewing ETTV in a window can be convenient while you find other IP&#039;s, talk in IRC, or access WinAmp, for example. To do this, you can go to the options screen and set a resolution which is smaller than your desktop screen resolution, and then select windowed mode.  Alternatively, enter &amp;lt;tt&amp;gt;/r_mode 3&amp;lt;/tt&amp;gt; into console, and then hit ALT+Enter. &lt;br /&gt;
&lt;br /&gt;
* Normal cvar restrictions dont apply when viewing demos, nor do they (usually) when viewing ETTV. This is OK because you&#039;re not playing against anyone. Several leagues remove the foliage (all the grassy stuff) on Radar because it hurts performance and, some say, isnt good for competitive gaming. As an ETTV viewer you can remove it via console: &amp;lt;tt&amp;gt;/r_drawfoliage 0&amp;lt;/tt&amp;gt;. To further incrase performance you can remove wolffog (an effect which &amp;quot;adds&amp;quot; fog to the map, sometimes restricting the viewing distance [e.g. Railgun]) by setting &amp;lt;tt&amp;gt;r_wolffog 0&amp;lt;/tt&amp;gt;. You might want to ensure that is reset to 1 before you join a normal gameserver however.&lt;br /&gt;
&lt;br /&gt;
* ETTV is generally not live; normally a few minute long delay is added so competing teams cannot have another member watching and sending participants advantagous information.&lt;br /&gt;
&lt;br /&gt;
== Shoutcasts ==&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Shoutcast shoutcast] is essentially a match commentary, broadcast over something akin to internet radio. The shoutcaster is usually someone heavily involved with the ET community and listening to the shoutcast greatly enhances the entertainment value of ETTV.&lt;br /&gt;
&lt;br /&gt;
A shoutcast is completely seperate from ETTV however, to listen to a shoutcast you will need to open the URL with a suitable program - [http://winamp.com/ WinAmp] being one of many such programs. The shoutcast URL is often available at the same place you found the ETTV details for the match you want to watch.&lt;br /&gt;
&lt;br /&gt;
Like ETTV, shoutcasts are usually not totally live - normally a few minutes delay is added so competing teams cannot have another member watching or listening in and sending participants advantagous information. Typically ETTV has a longer delay than the shoutcast does, so the result is ETTV and shoutcast are out of sync.&lt;br /&gt;
&lt;br /&gt;
Fortunately it isnt the other way around, because you can pause WinAmp to syncronise the two. Simply listen for some event in the shoutcast (often shoutcaster will read out the time on the clock for this purpose, or you can listen for event&#039;s like &#039;FIGHT!&#039; or &#039;dynamite planted&#039;) and immediately hit pause. When the event occurs in ETTV, hit play again. This can be easier if you view ETTV in windowed mode, also if you make a mistake and pause WinAmp for too long, reconnect to the shoutcast URL.&lt;br /&gt;
&lt;br /&gt;
== Replaying ETTV demos on a local Windows server ==&lt;br /&gt;
&lt;br /&gt;
If you have ETTV Demo files (*.tv84), you can watch them locally on your windows machine. in order to do so, you will need a ETTV-Server. Download the latest version (currently: http://bani.anime.net/banimod/forums/viewtopic.php?t=6529) and proceed with the following steps:&lt;br /&gt;
&lt;br /&gt;
* Extract all files except &amp;lt;i&amp;gt;tvgame.mp.i386.(so|dll)&amp;lt;/i&amp;gt; into your &amp;quot;Wolfenstein - Enemy Territory&amp;quot; root directory (&amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; etmain). &lt;br /&gt;
* The &amp;lt;i&amp;gt;tvgame.mp.i386.(so|dll)&amp;lt;/i&amp;gt; file goes into the etpro directory.&lt;br /&gt;
* Put the *.tv_84 files in your &amp;lt;i&amp;gt;etpro\demos&amp;lt;/i&amp;gt; directory  &lt;br /&gt;
* Create a shortcut to ETTV.exe (Right click in explorer windows, &amp;quot;new...&amp;quot; -&amp;gt; &amp;quot;Shortcut&amp;quot;). &lt;br /&gt;
* Change the program call in the shortcut (Right click, &amp;quot;Properties&amp;quot;) to: &#039;&amp;lt;i&amp;gt;&amp;quot;path&amp;lt;/i&amp;gt;\ettv.exe&amp;quot; +set fs_game etpro +set ettv_autoplay 1 +demo demo0000&#039;&lt;br /&gt;
&lt;br /&gt;
When you double click on the shortcut, ETTV should come up displaying a console and starting the playback. Note that the demo files are required to be named like &amp;lt;i&amp;gt;demo0000.tv_84, demo0001.tv_84, etc.&amp;lt;/i&amp;gt; in order to work like this. The server will autoplay all demos in successive order. You can now start your ET and connect to your local server (choose &amp;quot;Internet Play&amp;quot;, then &amp;quot;connect to IP&amp;quot; &amp;lt;i&amp;gt;127.0.0.1&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Known Issues ====&lt;br /&gt;
You have to install the complete etpro package for servers - the pk3 file that clients have is not enough.&lt;br /&gt;
&lt;br /&gt;
You may encounter MAX_GAMESTATE_CHARS while playing back demos. To prevent this, make sure only the .pk3 files actually required to play the demo are installed, and make sure things like serverinfo cvars, motds etc are as short as possible. If you still encounter this after taking these steps, posting on the [http://bani.anime.net/banimod/forums/viewforum.php?f=18 ETTV forum] is suggested.&lt;br /&gt;
&lt;br /&gt;
This short How-To was written on request for gamestv.org, they are hereby permitted to use this text on their own site.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [http://www.gamestv.org/ GamesTV.org] is an ETTV listings site.&lt;br /&gt;
* [http://www.radioitg.com/schedule.php Radio iTG&#039;s schedule] is a source of shoutcasts.&lt;br /&gt;
* [http://www.gamestah.com/ Gamestah] is a source of Australian shoutcasts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ETTV]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Fieldname&amp;diff=2705</id>
		<title>Fieldname</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Fieldname&amp;diff=2705"/>
		<updated>2007-03-06T03:55:44Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: make boolean description more accurate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__&lt;br /&gt;
==Entity Fieldnames==&lt;br /&gt;
List of fields supported by [[Lua Mod API#entities|et.gentity_get() and et.gentity_set()]] functions&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pitatable columns=3 headlines=&amp;quot;field;type;access&amp;quot; widths=&amp;quot;180;120;60&amp;quot; headerfontcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;
activator;entity;RO;&lt;br /&gt;
chain;entity;RW;&lt;br /&gt;
classname;string;RW;&lt;br /&gt;
client.inactivityTime;integer;RW;&lt;br /&gt;
client.inactivityWarning;qboolean;RW;&lt;br /&gt;
clipmask;integer;?;&lt;br /&gt;
closespeed;float;RW;&lt;br /&gt;
count;integer;RW;&lt;br /&gt;
count2;integer;RW;&lt;br /&gt;
damage;integer;RW;&lt;br /&gt;
deathType;meansOfDeath_t;RW;&lt;br /&gt;
delay;float;RW;&lt;br /&gt;
dl_atten;integer;RW;&lt;br /&gt;
dl_color;vec3;RW;&lt;br /&gt;
dl_shader;string;RO;&lt;br /&gt;
dl_stylestring;string;RO;&lt;br /&gt;
duration;float;RW;&lt;br /&gt;
end_size;integer;RW;&lt;br /&gt;
enemy;entity;RW;&lt;br /&gt;
flags;bitflag;RO;&lt;br /&gt;
harc;float;RW;&lt;br /&gt;
health;integer;RW;&lt;br /&gt;
inuse;qboolean;RO;&lt;br /&gt;
isProp;qboolean;RO;&lt;br /&gt;
item;string;RW;&lt;br /&gt;
key;integer;RW;&lt;br /&gt;
message;string;RW;&lt;br /&gt;
methodOfDeath;integer;RW;&lt;br /&gt;
mg42BaseEnt;integer;RW;&lt;br /&gt;
missionLevel;integer;RW;&lt;br /&gt;
model;string;RO;&lt;br /&gt;
model2;string;RO;&lt;br /&gt;
nextTrain;entity;RW;&lt;br /&gt;
noise_index;integer;RW;&lt;br /&gt;
origin;vec3;RW;&lt;br /&gt;
pers.connected;connected_t;?;&lt;br /&gt;
pers.netname;string;?;&lt;br /&gt;
pers.localClient;qboolean;?;&lt;br /&gt;
pers.initialSpawn;qboolean;?; &lt;br /&gt;
pers.enterTime;integer;?;&lt;br /&gt;
pers.connectTime;integer;?; &lt;br /&gt;
pers.teamState.state;teamstatestate_t;?;&lt;br /&gt;
pers.voteCount;integer;?;&lt;br /&gt;
pers.teamVoteCount;integer;?; &lt;br /&gt;
pers.complaints;integer;?; &lt;br /&gt;
pers.complaintClient;integer;?; &lt;br /&gt;
pers.complaintEndTime;integer;?; &lt;br /&gt;
pers.lastReinforceTime;integer;?; &lt;br /&gt;
pers.applicationClient;integer;?; &lt;br /&gt;
pers.applicationEndTime;integer;?; &lt;br /&gt;
pers.invitationClient;integer;?; &lt;br /&gt;
pers.invitationEndTime;integer;?; &lt;br /&gt;
pers.propositionClient;integer;?; &lt;br /&gt;
pers.propositionClient2;integer;?; &lt;br /&gt;
pers.propositionEndTime;integer;?; &lt;br /&gt;
pers.autofireteamEndTime;integer;?; &lt;br /&gt;
pers.autofireteamCreateEndTime;integer;?; &lt;br /&gt;
pers.autofireteamJoinEndTime;integer;?; &lt;br /&gt;
pers.lastSpawnTime;integer;?;&lt;br /&gt;
pers.ready;qboolean;?;&lt;br /&gt;
prevTrain;entity;RW;&lt;br /&gt;
props_frame_state;integer;RO;&lt;br /&gt;
ps.stats;integer array;RW; &lt;br /&gt;
ps.persistant;integer array;RW;&lt;br /&gt;
ps.ping;integer;?;&lt;br /&gt;
ps.powerups;integer array;RW;&lt;br /&gt;
ps.ammo;integer array;RW; &lt;br /&gt;
ps.ammoclip;integer array;RW;&lt;br /&gt;
r.absmax;vec3;RO;&lt;br /&gt;
r.absmin;vec3;RO;&lt;br /&gt;
r.bmodel;qboolean;RO;&lt;br /&gt;
r.contents;integer;RW;&lt;br /&gt;
r.currentAngles;vec3;RW;&lt;br /&gt;
r.currentOrigin;vec3;RW;&lt;br /&gt;
r.eventTime;integer;RW;&lt;br /&gt;
r.linkcount;integer;RO;&lt;br /&gt;
r.linked;qboolean;RO;&lt;br /&gt;
r.maxs;vec3;RW;&lt;br /&gt;
r.mins;vec3;RW;&lt;br /&gt;
r.ownerNum;integer;RW;&lt;br /&gt;
r.singleClient;integer;RW;&lt;br /&gt;
r.svFlags;integer;RW;&lt;br /&gt;
r.worldflags;integer;RO;&lt;br /&gt;
radius;integer;RW;&lt;br /&gt;
random;float;RW;&lt;br /&gt;
rotate;vec3;RW;&lt;br /&gt;
s.angles;vec3;RW;&lt;br /&gt;
s.angles2;vec3;RW;&lt;br /&gt;
s.apos;trajectory;RW;&lt;br /&gt;
s.clientNum;integer;RW;&lt;br /&gt;
s.constantLight;integer;RW;&lt;br /&gt;
s.density;integer;RW;&lt;br /&gt;
s.dl_intensity;integer;RW;&lt;br /&gt;
s.dmgFlags;integer;RW;&lt;br /&gt;
s.eFlags;integer;RW;&lt;br /&gt;
s.eType;integer;?;&lt;br /&gt;
s.effect1Time;integer;RW;&lt;br /&gt;
s.effect2Time;integer;RW;&lt;br /&gt;
s.effect3Time;integer;RW;&lt;br /&gt;
s.frame;integer;RW;&lt;br /&gt;
s.groundEntityNum;integer;RO;&lt;br /&gt;
s.loopSound;integer;RW;&lt;br /&gt;
s.modelindex;integer;RW;&lt;br /&gt;
s.modelindex2;integer;RW;&lt;br /&gt;
s.number;integer;RO;&lt;br /&gt;
s.onFireEnd;integer;RW;&lt;br /&gt;
s.onFireStart;integer;RW;&lt;br /&gt;
s.origin;vec3;?;&lt;br /&gt;
s.origin2;vec3;?;&lt;br /&gt;
s.pos;trajectory;RW;&lt;br /&gt;
s.powerups;integer;RO;&lt;br /&gt;
s.solid;integer;RW;&lt;br /&gt;
s.teamNum;integer;RW;&lt;br /&gt;
s.time;integer;RW;&lt;br /&gt;
s.time2;integer;RW;&lt;br /&gt;
s.weapon;integer;RO;&lt;br /&gt;
scriptName;string;RO;&lt;br /&gt;
sess.sessionTeam;team_t;RW;&lt;br /&gt;
sess.spectatorTime;integer;RW;&lt;br /&gt;
sess.spectatorState;spectatorState_t;RW;&lt;br /&gt;
sess.spectatorClient;integer;RW;&lt;br /&gt;
sess.latchSpectatorClient;integer;RW;&lt;br /&gt;
sess.playerType;integer;RW;&lt;br /&gt;
sess.playerWeapon;integer;RW;&lt;br /&gt;
sess.playerWeapon2;integer;RW;&lt;br /&gt;
sess.spawnObjectiveIndex;integer;RW;&lt;br /&gt;
sess.latchPlayerType;integer;RW;&lt;br /&gt;
sess.latchPlayerWeapon;integer;RW;&lt;br /&gt;
sess.latchPlayerWeapon2;integer;RW;&lt;br /&gt;
sess.damage_given;integer;RW;&lt;br /&gt;
sess.damage_received;integer;RW;&lt;br /&gt;
sess.deaths;integer;RW;&lt;br /&gt;
sess.game_points;integer;RW;&lt;br /&gt;
sess.gibs;integer;RW;&lt;br /&gt;
sess.kills;integer;RW;&lt;br /&gt;
sess.medals;integer array;RW;&lt;br /&gt;
sess.muted;qboolean;RW;&lt;br /&gt;
sess.rank;integer;RW;&lt;br /&gt;
sess.referee;integer;RW;&lt;br /&gt;
sess.rounds;integer;RW;&lt;br /&gt;
sess.semiadmin;integer;RW;&lt;br /&gt;
sess.skill;integer array;RW;&lt;br /&gt;
sess.spec_invite;integer;RW;&lt;br /&gt;
sess.spec_team;integer;RW;&lt;br /&gt;
sess.suicides;integer;RW;&lt;br /&gt;
sess.team_damage;integer;RW;&lt;br /&gt;
sess.team_kills;integer;RW;&lt;br /&gt;
sess.team_received;integer;RW;&lt;br /&gt;
sess.aWeaponStats;weapon_stat_t;RW;&lt;br /&gt;
spawnflags;integer;RO;&lt;br /&gt;
spawnitem;string;RO;&lt;br /&gt;
speed;float;RW;&lt;br /&gt;
splashDamage;integer;RW;&lt;br /&gt;
splashMethodOfDeath;integer;RW;&lt;br /&gt;
splashRadius;integer;RW;&lt;br /&gt;
start_size;integer;RW;&lt;br /&gt;
tagName;string;RO;&lt;br /&gt;
tagParent;entity;RW;&lt;br /&gt;
takedamage;boolean;RW;&lt;br /&gt;
tankLink;entity;RW;&lt;br /&gt;
target;string;RW;&lt;br /&gt;
TargetAngles;vec3;RW;&lt;br /&gt;
TargetFlag;integer;RO;&lt;br /&gt;
targetname;string;RO;&lt;br /&gt;
teamchain;entity;RW;&lt;br /&gt;
teammaster;entity;RW;&lt;br /&gt;
track;string;RO;&lt;br /&gt;
varc;float;RW;&lt;br /&gt;
wait;float;RW;&lt;br /&gt;
waterlevel;integer;RO;&lt;br /&gt;
watertype;integer;RO;&lt;br /&gt;
&amp;lt;/pitatable&amp;gt;&lt;br /&gt;
:&#039;&#039;note&#039;&#039;: all the sess.* fields will return nil unless the entity is associated with client slot &amp;lt; sv_maxclients.&lt;br /&gt;
:&#039;&#039;note&#039;&#039;: all array variables need to be get or set with an additional parameter.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==ET variable types==&lt;br /&gt;
&lt;br /&gt;
===qboolean===&lt;br /&gt;
:a &#039;&#039;&#039;qboolean&#039;&#039;&#039; is a boolean value.&lt;br /&gt;
:0 is represented by the lua value false&lt;br /&gt;
:1 is represented by the lua value true&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===vec3===&lt;br /&gt;
:a &#039;&#039;&#039;vec3_t&#039;&#039;&#039; is a 3-element array of numbers (C definition: typedef float vec3_t[3];). It is usually used to store and process coordinates in 3D space.&amp;lt;br&amp;gt;&lt;br /&gt;
:In etpro-lua a vector is an array (table indexed by integers) containing 3 numbers. It can be accessed by&lt;br /&gt;
:doing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin = et.gentity_get(entNum,&amp;quot;r.currentOrigin&amp;quot;) --a vec3 value&lt;br /&gt;
x,y,z = origin[1],origin[2],origin[3]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===array===&lt;br /&gt;
:The fields listed as having type &#039;&#039;&#039;array&#039;&#039;&#039; represent an entity value which is an array. Individual elements of the array are accessed by passing the desired index in the &#039;&#039;arrayindex&#039;&#039; argument to the et.gentity_get and et.gentity_set functions. Valid array indexes are integers from 0 up to some field specific maximum. The &#039;&#039;arrayindex&#039;&#039; argument is &#039;&#039;&#039;required&#039;&#039;&#039; when accessing array type fields, so only one element of an array can be accessed in a given call to the gentity_* functions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===trajectory===&lt;br /&gt;
:a &#039;&#039;&#039;trajectory&#039;&#039;&#039; is returned as a lua table described below&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  trDuration = &amp;lt;number&amp;gt;, --- int&lt;br /&gt;
  trTime = &amp;lt;number&amp;gt;, -- int&lt;br /&gt;
  trType = &amp;lt;number&amp;gt;, -- see below for allowed values&lt;br /&gt;
  trBase = &amp;lt;vec3_t&amp;gt;, -- vec3, as described above&lt;br /&gt;
  trDelta = &amp;lt;vec3_t&amp;gt; -- also a vec3&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
: the allowed values for trType (along with the enum names and original comments from the ET source), are as follows. Note &lt;br /&gt;
: that not all values make sense for all entity types &lt;br /&gt;
&amp;lt;pitatable columns=3 headlines=&amp;quot;number;type;discription&amp;quot; widths=&amp;quot;40;160;450&amp;quot; headerfontcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;
1;TR_STATIONARY;&lt;br /&gt;
2;TR_INTERPOLATE;non-parametric, but interpolate between snapshots;&lt;br /&gt;
3;TR_LINEAR;&lt;br /&gt;
4;TR_LINEAR_STOP;&lt;br /&gt;
5;TR_LINEAR_STOP_BACK;reverse movement can be different than forward;&lt;br /&gt;
6;TR_SINE;value = base + sin( time / duration ) * delta;&lt;br /&gt;
7;TR_GRAVITY;&lt;br /&gt;
8;TR_GRAVITY_LOW;&lt;br /&gt;
9;TR_GRAVITY_FLOAT;super low grav with no gravity acceleration;&lt;br /&gt;
10;TR_GRAVITY_PAUSED;has stopped, but trace to see if it should be switched back to TR_GRAVITY;&lt;br /&gt;
11;TR_ACCELERATE;&lt;br /&gt;
12;TR_DECCELERATE;&lt;br /&gt;
13;TR_SPLINE;&lt;br /&gt;
14;TR_LINEAR_PATH;&lt;br /&gt;
&amp;lt;/pitatable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===entity===&lt;br /&gt;
:The fields listed as having type &#039;&#039;&#039;enitity&#039;&#039;&#039; return an entity number or nil. Entity numbers are integers from 0 through 1023. Some of the entity numbers have special meanings:&lt;br /&gt;
:0 - (sv_privateclients - 1) are reserved for clients who connect with the private slot password&lt;br /&gt;
:0 - 63 are reserved for clients. A client&#039;s entity number is also its client number (as shown by /players for example)&lt;br /&gt;
:1022 is the &#039;&#039;&#039;worldspawn&#039;&#039;&#039; entity&lt;br /&gt;
:1023 is &#039;&#039;&#039;ENTITYNUM_NONE&#039;&#039;&#039; which is used instead of null in C under some circumstances to indicate no entity. This is needed where an entity number will be passed over the network.&lt;br /&gt;
:&#039;&#039;Note&#039;&#039;: Some other fields not listed as type &#039;entity&#039; may take an entity number value. &#039;&#039;&#039;mg42BaseEnt&#039;&#039;&#039; and &#039;&#039;&#039;s.number&#039;&#039;&#039; are examples.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===meansOfDeath===&lt;br /&gt;
:a &#039;&#039;&#039;meansOfDeath_t&#039;&#039;&#039; is a number indicating the [[etdamage|Method of Death]] Click  [[etdamage|here]] for a list with possible value&#039;s&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Lua_Mod_API&amp;diff=2703</id>
		<title>Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Lua_Mod_API&amp;diff=2703"/>
		<updated>2007-02-28T05:01:43Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: et_ClientUserinfoChanged note, old et.G_TempEntity warning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__&lt;br /&gt;
[[ETPro]] now supports server-side mods via the [http://www.lua.org/ Lua] scripting language. For more information about Lua, visit the [http://www.lua.org/manual/5.0/ Reference manual], the online edition of the book [http://www.lua.org/pil/ Programming in Lua] or the [http://lua-users.org/wiki/ lua-users wiki].&lt;br /&gt;
&lt;br /&gt;
ETPro has an embedded Lua 5.0.2 interpreter, and if present will load user-defined scripts from the ETPro directory.  It also provides an &amp;quot;et&amp;quot; library of function calls for Lua that allow access to the server engine, and provides callbacks so a server side mod may trigger on specific server events.&lt;br /&gt;
&lt;br /&gt;
The following standard Lua libraries are initialized by default and available to ETPro Lua scripts:&lt;br /&gt;
[http://www.lua.org/manual/5.0/manual.html#5.1 basic], [http://www.lua.org/manual/5.0/manual.html#5.4 table], [http://www.lua.org/manual/5.0/manual.html#5.6 i/o], [http://www.lua.org/manual/5.0/manual.html#5.7 os] (available features vary depending on your OS), [http://www.lua.org/manual/5.0/manual.html#5.3 string], [http://www.lua.org/manual/5.0/manual.html#5.5 math].&lt;br /&gt;
&lt;br /&gt;
A list of ETPro mods can be found [[:Category:ETPro:Mods|here]].&lt;br /&gt;
&lt;br /&gt;
A tutorial about ETPro Lua scripting can be found [[Lua Tutorials|here]].&lt;br /&gt;
&lt;br /&gt;
API requests can be discussed at the [[Talk:Lua_Mod_API|Lua Mod API talk page]].&lt;br /&gt;
&lt;br /&gt;
==client commands==&lt;br /&gt;
===lua_status===&lt;br /&gt;
:lists all currently loaded lua modules.&lt;br /&gt;
:&#039;&#039;lua mods cannot override this client command.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==server commands==&lt;br /&gt;
===lua_status===&lt;br /&gt;
:lists all currently loaded lua modules.&lt;br /&gt;
&lt;br /&gt;
==cvars==&lt;br /&gt;
===lua_modules===&lt;br /&gt;
:(default &amp;quot;&amp;quot;, disabled)&lt;br /&gt;
:space separated list of lua modules for ETPro to load. modules will be run in the order listed.&lt;br /&gt;
&lt;br /&gt;
===lua_allowedmodules===&lt;br /&gt;
:(default &amp;quot;&amp;quot;, disabled)&lt;br /&gt;
:if set, only lua modules with the matching sha1 signatures listed in this cvar will be allowed to load.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:changing either cvar will cause all currently loaded modules to :quit and be unloaded until the next map_restart.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==et library calls==&lt;br /&gt;
&lt;br /&gt;
===modules===&lt;br /&gt;
et.RegisterModname( &#039;&#039;&#039;modname&#039;&#039;&#039; )&lt;br /&gt;
:Registers a descriptive string &#039;&#039;&#039;modname&#039;&#039;&#039; for this mod.&lt;br /&gt;
&#039;&#039;&#039;vmnumber&#039;&#039;&#039; = et.FindSelf()&lt;br /&gt;
:Returns a number indicating the VM slot the current mod is loaded into.&lt;br /&gt;
&#039;&#039;&#039;modname&#039;&#039;&#039;, &#039;&#039;&#039;signature&#039;&#039;&#039; = et.FindMod( &#039;&#039;&#039;vmnumber&#039;&#039;&#039; )&lt;br /&gt;
:Returns the &#039;&#039;&#039;modname&#039;&#039;&#039; and sha1 &#039;&#039;&#039;signature&#039;&#039;&#039; for the mod loaded in the VM slot &#039;&#039;&#039;vmnumber&#039;&#039;&#039;. Returns nil, nil if the VM slot is invalid.&lt;br /&gt;
&#039;&#039;&#039;success&#039;&#039;&#039; = et.IPCSend( &#039;&#039;&#039;vmnumber&#039;&#039;&#039;, &#039;&#039;&#039;message&#039;&#039;&#039; )&lt;br /&gt;
:Sends the string &#039;&#039;&#039;message&#039;&#039;&#039; to the mod in the VM slot indicated by &#039;&#039;&#039;vmnumber&#039;&#039;&#039;. The mod receiving &#039;&#039;&#039;message&#039;&#039;&#039; must have an &#039;&#039;et_IPCReceive()&#039;&#039; callback. If the message is successfully sent, &#039;&#039;&#039;success&#039;&#039;&#039; will be 1. On failure it will be 0. See the [[Lua:IPC|Lua IPC]] page for a simple example.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===printing===&lt;br /&gt;
et.G_Print( &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Prints the string &#039;&#039;&#039;text&#039;&#039;&#039; to the server console.&lt;br /&gt;
et.G_LogPrint( &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Prints the string &#039;&#039;&#039;text&#039;&#039;&#039; to the server console and writes it to the server log.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===argument handling===&lt;br /&gt;
These functions are to be used within the [[#commands|command callback functions]].&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;args&#039;&#039;&#039; = et.ConcatArgs( &#039;&#039;&#039;index&#039;&#039;&#039; )&lt;br /&gt;
:Returns all arguments beginning from &#039;&#039;&#039;index&#039;&#039;&#039; concatenated into a single string &#039;&#039;&#039;args&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;argcount&#039;&#039;&#039; = et.trap_Argc()&lt;br /&gt;
:Returns a number indicating the number of command line arguments in the command buffer.&lt;br /&gt;
&#039;&#039;&#039;arg&#039;&#039;&#039; = et.trap_Argv( &#039;&#039;&#039;argnum&#039;&#039;&#039; )&lt;br /&gt;
:Returns the contents of the command line argument &#039;&#039;&#039;argnum&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===cvars===&lt;br /&gt;
&#039;&#039;&#039;cvarvalue&#039;&#039;&#039; = et.trap_Cvar_Get( &#039;&#039;&#039;cvarname&#039;&#039;&#039; )&lt;br /&gt;
:Returns the value of the cvar &#039;&#039;&#039;cvarname&#039;&#039;&#039; as a string. If there is no cvar named &#039;&#039;&#039;cvarname&#039;&#039;&#039;, returns a zero length string. &lt;br /&gt;
et.trap_Cvar_Set( &#039;&#039;&#039;cvarname&#039;&#039;&#039;, &#039;&#039;&#039;cvarvalue&#039;&#039;&#039; )&lt;br /&gt;
:Sets the cvar &#039;&#039;&#039;cvarname&#039;&#039;&#039; to &#039;&#039;&#039;cvarvalue&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===configstrings===&lt;br /&gt;
&#039;&#039;&#039;configstringvalue&#039;&#039;&#039; = et.trap_GetConfigstring( &#039;&#039;&#039;index&#039;&#039;&#039; )&lt;br /&gt;
:Returns the string &#039;&#039;&#039;configstringvalue&#039;&#039;&#039; containing the contents of the configstring &#039;&#039;&#039;index&#039;&#039;&#039;&lt;br /&gt;
et.trap_SetConfigstring( &#039;&#039;&#039;index&#039;&#039;&#039;, &#039;&#039;&#039;configstringvalue&#039;&#039;&#039; )&lt;br /&gt;
:Sets the configstring &#039;&#039;&#039;index&#039;&#039;&#039; to the string &#039;&#039;&#039;configstringvalue&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===server===&lt;br /&gt;
et.trap_SendConsoleCommand( &#039;&#039;&#039;when&#039;&#039;&#039;, &#039;&#039;&#039;command&#039;&#039;&#039; )&lt;br /&gt;
:Sends the command &#039;&#039;&#039;command&#039;&#039;&#039; to the server console, to be executed &#039;&#039;&#039;when&#039;&#039;&#039; (see et.EXEC_* constants)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===clients===&lt;br /&gt;
et.trap_DropClient( &#039;&#039;&#039;clientnum&#039;&#039;&#039;, &#039;&#039;&#039;reason&#039;&#039;&#039;, &#039;&#039;&#039;ban_time&#039;&#039;&#039; )&lt;br /&gt;
:Disconnects &#039;&#039;&#039;clientnum&#039;&#039;&#039; from the server, with descriptive string &#039;&#039;&#039;reason&#039;&#039;&#039; reported to clients. &#039;&#039;&#039;ban_time&#039;&#039;&#039; is the time in seconds to ban the client from the server. &#039;&#039;&#039;ban_time&#039;&#039;&#039; is optional and may be entirely omitted, in which case the ban time defaults to the cvar &#039;&#039;b_defaultbantime&#039;&#039;&lt;br /&gt;
et.trap_SendServerCommand( &#039;&#039;&#039;clientnum&#039;&#039;&#039;, &#039;&#039;&#039;[[SendServerCommand|command]]&#039;&#039;&#039; )&lt;br /&gt;
:Sends the command &#039;&#039;&#039;[[SendServerCommand|command]]&#039;&#039;&#039; to the client &#039;&#039;&#039;clientnum&#039;&#039;&#039;. If &#039;&#039;&#039;clientnum&#039;&#039;&#039; is -1, the &#039;&#039;&#039;[[SendServerCommand|command]]&#039;&#039;&#039; is broadcast to all connected clients.&lt;br /&gt;
et.G_Say( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;mode&#039;&#039;&#039;, &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Sends a chat command on behalf of client &#039;&#039;&#039;clientNum&#039;&#039;&#039; with the mode &#039;&#039;&#039;mode&#039;&#039;&#039; (see et.SAY_* constants) and chat text &#039;&#039;&#039;text&#039;&#039;&#039;.&lt;br /&gt;
et.ClientUserinfoChanged( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Loads the new [[Userinfo]] of &#039;&#039;&#039;clientNum&#039;&#039;&#039; and stores it in the configstring and client variables&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===userinfo===&lt;br /&gt;
&#039;&#039;&#039;userinfo&#039;&#039;&#039; = et.trap_GetUserinfo( &#039;&#039;&#039;clientnum&#039;&#039;&#039; )&lt;br /&gt;
:Returns the contents of the [[Userinfo]] string for the client &#039;&#039;&#039;clientnum&#039;&#039;&#039;&lt;br /&gt;
et.trap_SetUserinfo( &#039;&#039;&#039;clientnum&#039;&#039;&#039;, &#039;&#039;&#039;userinfo&#039;&#039;&#039; )&lt;br /&gt;
:Sets the [[Userinfo]] string for the client &#039;&#039;&#039;clientnum&#039;&#039;&#039; to &#039;&#039;&#039;userinfo&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===string utility functions===&lt;br /&gt;
&#039;&#039;&#039;infostring&#039;&#039;&#039; = et.Info_RemoveKey( &#039;&#039;&#039;infostring&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039; )&lt;br /&gt;
:Removes key &#039;&#039;&#039;key&#039;&#039;&#039; from infostring &#039;&#039;&#039;infostring&#039;&#039;&#039; and returns the modified infostring.&lt;br /&gt;
&#039;&#039;&#039;infostring&#039;&#039;&#039; = et.Info_SetValueForKey( &#039;&#039;&#039;infostring&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039;, &#039;&#039;&#039;value&#039;&#039;&#039; )&lt;br /&gt;
:Sets the key &#039;&#039;&#039;key&#039;&#039;&#039; in the infostring &#039;&#039;&#039;infostring&#039;&#039;&#039; to &#039;&#039;&#039;value&#039;&#039;&#039; and returns the modified infostring. If &#039;&#039;&#039;value&#039;&#039;&#039; is an empty string, &#039;&#039;&#039;key&#039;&#039;&#039; is removed from the string. &lt;br /&gt;
&#039;&#039;&#039;keyvalue&#039;&#039;&#039; = et.Info_ValueForKey( &#039;&#039;&#039;infostring&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039; )&lt;br /&gt;
:Returns the value of the key &#039;&#039;&#039;key&#039;&#039;&#039; in the infostring &#039;&#039;&#039;infostring&#039;&#039;&#039;. If &#039;&#039;&#039;key&#039;&#039;&#039; is not present in the string, an empty string is returned.&lt;br /&gt;
&#039;&#039;&#039;cleanstring&#039;&#039;&#039; = et.Q_CleanStr( &#039;&#039;&#039;string&#039;&#039;&#039; )&lt;br /&gt;
:Returns &#039;&#039;&#039;string&#039;&#039;&#039; stripped of all color codes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ET filesystem===&lt;br /&gt;
&#039;&#039;&#039;fd&#039;&#039;&#039;, &#039;&#039;&#039;len&#039;&#039;&#039; = et.trap_FS_FOpenFile( &#039;&#039;&#039;filename&#039;&#039;&#039;, &#039;&#039;&#039;mode&#039;&#039;&#039; )&lt;br /&gt;
:Attempts to open the file &#039;&#039;&#039;filename&#039;&#039;&#039; with the access mode &#039;&#039;&#039;mode&#039;&#039;&#039; (see et.FS_ constants). Returns the filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039; and file length &#039;&#039;&#039;len&#039;&#039;&#039;. On error, &#039;&#039;&#039;len&#039;&#039;&#039; returns -1.&lt;br /&gt;
&#039;&#039;&#039;filedata&#039;&#039;&#039; = et.trap_FS_Read( fd, count )&lt;br /&gt;
:Reads &#039;&#039;&#039;count&#039;&#039;&#039; bytes from filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;count&#039;&#039;&#039; = et.trap_FS_Write( &#039;&#039;&#039;filedata&#039;&#039;&#039;, &#039;&#039;&#039;count&#039;&#039;&#039;, &#039;&#039;&#039;fd&#039;&#039;&#039; )&lt;br /&gt;
:Attempts to write &#039;&#039;&#039;count&#039;&#039;&#039; bytes of &#039;&#039;&#039;filedata&#039;&#039;&#039; to filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039;. Returns number of bytes successfully written.&lt;br /&gt;
et.trap_FS_Rename( &#039;&#039;&#039;oldname&#039;&#039;&#039;, &#039;&#039;&#039;newname&#039;&#039;&#039; )&lt;br /&gt;
:Renames file &#039;&#039;&#039;oldname&#039;&#039;&#039; to &#039;&#039;&#039;newname&#039;&#039;&#039;.&lt;br /&gt;
et.trap_FS_FCloseFile( &#039;&#039;&#039;fd&#039;&#039;&#039; )&lt;br /&gt;
:Closes filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===indexes===&lt;br /&gt;
&#039;&#039;&#039;soundindex&#039;&#039;&#039; = et.G_SoundIndex( &#039;&#039;&#039;filename&#039;&#039;&#039; )&lt;br /&gt;
:Returns an index to the soundfile indicated by &#039;&#039;&#039;filename&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;modelindex&#039;&#039;&#039; = et.G_ModelIndex( &#039;&#039;&#039;filename&#039;&#039;&#039; )&lt;br /&gt;
:Returns an index to the model indicated by &#039;&#039;&#039;filename&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===sound===&lt;br /&gt;
et.G_globalSound( &#039;&#039;&#039;sound&#039;&#039;&#039; )&lt;br /&gt;
:Plays the global sound indicated by the filename &#039;&#039;&#039;sound&#039;&#039;&#039;.&lt;br /&gt;
et.G_Sound( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;soundindex&#039;&#039;&#039; )&lt;br /&gt;
:Plays the sound &#039;&#039;&#039;soundindex&#039;&#039;&#039; at the location of entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===miscellaneous===&lt;br /&gt;
&#039;&#039;&#039;milliseconds&#039;&#039;&#039; = et.trap_Milliseconds()&lt;br /&gt;
:Returns a number indicating the current server time in milliseconds.&lt;br /&gt;
et.G_Damage( &#039;&#039;&#039;target&#039;&#039;&#039;, &#039;&#039;&#039;inflictor&#039;&#039;&#039;, &#039;&#039;&#039;attacker&#039;&#039;&#039;, &#039;&#039;&#039;damage&#039;&#039;&#039;, &#039;&#039;&#039;[[etdamage|dflags]]&#039;&#039;&#039;, &#039;&#039;&#039;[[etdamage|mod]]&#039;&#039;&#039; )&lt;br /&gt;
:Does &#039;&#039;&#039;damage&#039;&#039;&#039; amount of damage on &#039;&#039;&#039;target&#039;&#039;&#039; inflicted by &#039;&#039;&#039;inflictor&#039;&#039;&#039; and cased by &#039;&#039;&#039;attacker&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;target&#039;&#039;&#039;, &#039;&#039;&#039;inflictor&#039;&#039;&#039;, &#039;&#039;&#039;attacker&#039;&#039;&#039; are entity numbers&lt;br /&gt;
:&#039;&#039;&#039;[[etdamage|dflags]]&#039;&#039;&#039; is a [[Bitmask-cvar|bitflag]] number to decide how the damage is inflickted, see &#039;&#039;&#039;[[etdamage|dflags]]&#039;&#039;&#039; [[etdamage|flaglist]]&lt;br /&gt;
:&#039;&#039;&#039;[[etdamage|mod]]&#039;&#039;&#039; is a number from 0 up to 64 o set the type of damage, see &#039;&#039;&#039;[[etdamage|mod]]&#039;&#039;&#039; [[etdamage|list]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===entities===&lt;br /&gt;
&#039;&#039;&#039;entnum&#039;&#039;&#039; = et.G_Spawn()&lt;br /&gt;
:Spawns a new entity and returns the new entity number.&lt;br /&gt;
&#039;&#039;&#039;entnum&#039;&#039;&#039; = et.G_TempEntity( &#039;&#039;&#039;origin&#039;&#039;&#039;, &#039;&#039;&#039;event&#039;&#039;&#039; )&lt;br /&gt;
:Spawns a new TempEntity of event type &#039;&#039;&#039;event&#039;&#039;&#039; and places it at &#039;&#039;&#039;origin&#039;&#039;&#039; in the world.&lt;br /&gt;
et.G_FreeEntity( &#039;&#039;&#039;entnum&#039;&#039;&#039; )&lt;br /&gt;
:Frees the entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;spawnval&#039;&#039;&#039; = et.G_GetSpawnVar( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039; )&lt;br /&gt;
:Returns the value of spawnvar &#039;&#039;&#039;key&#039;&#039;&#039; for entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
et.G_SetSpawnVar( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039;, &#039;&#039;&#039;value&#039;&#039;&#039; )&lt;br /&gt;
:Sets the spawnvar &#039;&#039;&#039;key&#039;&#039;&#039; to &#039;&#039;&#039;value&#039;&#039;&#039; for entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;integer entnum&#039;&#039;&#039; = et.G_SpawnGEntityFromSpawnVars( string spawnvar, string spawnvalue, ... )&lt;br /&gt;
:This function can only be called inside the &#039;&#039;&#039;et_InitGame&#039;&#039;&#039; callback&lt;br /&gt;
et.trap_LinkEntity( &#039;&#039;&#039;entnum&#039;&#039;&#039; )&lt;br /&gt;
:Links the entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
et.trap_UnlinkEntity( &#039;&#039;&#039;entnum&#039;&#039;&#039; )&lt;br /&gt;
:Unlinks the entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;(variable)&#039;&#039;&#039; = et.gentity_get ( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039; &#039;&#039;,arrayindex&#039;&#039; )&lt;br /&gt;
:Gets the value of &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039; from entity &#039;&#039;&#039;entnum&#039;&#039;&#039; out of the g_entity struct. For NULL entities or clients, &#039;&#039;nil&#039;&#039; is returned.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;arrayindex&#039;&#039; is used to specify which element of an array entity field to get. It is required when accessing array type fields. Entity field array indexes start at 0.&lt;br /&gt;
et.gentity_set( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039;, &#039;&#039;arrayindex,&#039;&#039; &#039;&#039;&#039;(value)&#039;&#039;&#039; )&lt;br /&gt;
:Sets the value of &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039; from entity &#039;&#039;&#039;entnum&#039;&#039;&#039; in the g_entity struct to &#039;&#039;&#039;(value)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;arrayindex&#039;&#039; is used to specify which element of an array entity field to set.&lt;br /&gt;
et.G_AddEvent( &#039;&#039;&#039;ent&#039;&#039;&#039;, &#039;&#039;&#039;event&#039;&#039;&#039;, &#039;&#039;&#039;eventparm&#039;&#039;&#039;&#039; )&lt;br /&gt;
:Adds event &#039;&#039;&#039;event&#039;&#039;&#039; whit eventparameter &#039;&#039;&#039;eventparm&#039;&#039;&#039;&#039; to entity &#039;&#039;&#039;ent&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==callbacks==&lt;br /&gt;
&lt;br /&gt;
===qagame execution===&lt;br /&gt;
et_InitGame( &#039;&#039;&#039;levelTime&#039;&#039;&#039;, &#039;&#039;&#039;randomSeed&#039;&#039;&#039;, &#039;&#039;&#039;restart&#039;&#039;&#039; )&lt;br /&gt;
:Called when qagame initializes. &#039;&#039;&#039;levelTime&#039;&#039;&#039; is the current level time in milliseconds. &#039;&#039;&#039;randomSeed&#039;&#039;&#039; is a number that can be used to seed random number generators. &#039;&#039;&#039;restart&#039;&#039;&#039; indicates if et_InitGame() is being called due to a map restart (1) or not (0).&lt;br /&gt;
et_ShutdownGame( &#039;&#039;&#039;restart&#039;&#039;&#039; )&lt;br /&gt;
:Called when qagame shuts down. &#039;&#039;&#039;restart&#039;&#039;&#039; indicates if the shutdown is being called due to a map_restart (1) or not (0).&lt;br /&gt;
et_RunFrame( &#039;&#039;&#039;levelTime&#039;&#039;&#039; )&lt;br /&gt;
:Called when qagame runs a server frame. &#039;&#039;&#039;levelTime&#039;&#039;&#039; is the current level time in milliseconds.&lt;br /&gt;
et_Quit()&lt;br /&gt;
:Called when ETPro unloads the mod. The mod should close all open filedescriptors and perform all cleanup.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===client management===&lt;br /&gt;
&#039;&#039;&#039;rejectreason&#039;&#039;&#039; = et_ClientConnect( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;firstTime&#039;&#039;&#039;, &#039;&#039;&#039;isBot&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client attempts to connect to the server. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id, &#039;&#039;&#039;firstTime&#039;&#039;&#039; indicates if this is a new connection (1) or a reconnection (0). &#039;&#039;&#039;isBot&#039;&#039;&#039; indicates if the client is a bot (1) or not (0). If the mod accepts the connection, it should return nil. Otherwise, the mod should return a string describing the reason the client connection was rejected.&lt;br /&gt;
et_ClientDisconnect( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client disconnects. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id.&lt;br /&gt;
et_ClientBegin( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client begins (becomes active, and enters the gameworld). &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id.&lt;br /&gt;
et_ClientUserinfoChanged( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client&#039;s [[Userinfo]] string has changed. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id.&lt;br /&gt;
:&#039;&#039;&#039;note:&#039;&#039;&#039; In ETPro 3.2.6 and below, this only gets called when the players CS_PLAYERS config string changes, rather than every time the userinfo changes. This only happens for a subset of userinfo fields.&lt;br /&gt;
et_ClientSpawn( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;revived&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client is spawned. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id. &#039;&#039;&#039;revived&#039;&#039;&#039; is 1 if the client was spawned by beeying revived.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===commands===&lt;br /&gt;
&#039;&#039;&#039;intercepted&#039;&#039;&#039; = et_ClientCommand( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;command&#039;&#039;&#039; )&lt;br /&gt;
:Called when a command is received from a client. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id. &#039;&#039;&#039;command&#039;&#039;&#039; is the command. The mod should return 1 if the command was intercepted by the mod, and 0 if the command was ignored by the mod and should be passed through to the server (and other mods in the chain).&lt;br /&gt;
:The actual command can be accessed through the [[#argument_handling|argument handling]] functions, as seen in the [[ETPro:Lua Sample Code]].&lt;br /&gt;
&#039;&#039;&#039;intercepted&#039;&#039;&#039; = et_ConsoleCommand()&lt;br /&gt;
:Called when a command is entered on the server console. The mod should return 1 if the command was intercepted by the mod, and 0 if the command was ignored by the mod and should be passed through to the server (and other mods in the chain).&lt;br /&gt;
:The actual command can be accessed through the [[#argument_handling|argument handling]] functions, as seen in the [[ETPro:Lua Sample Code]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===xp===&lt;br /&gt;
et_UpgradeSkill( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039; )&lt;br /&gt;
:Called when client on slot &#039;&#039;&#039;cno&#039;&#039;&#039; gets an upgrade on skill &#039;&#039;&#039;skill&#039;&#039;&#039;. Return -1 to override (abort) the qagame function, anything else to &amp;quot;passthrough&amp;quot;. Callback may modify skills (or do anything else it wants) during passthrough. &lt;br /&gt;
et_SetPlayerSkill( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039; )&lt;br /&gt;
:Called when clients (on slot &#039;&#039;&#039;cno&#039;&#039;&#039;) skill level &#039;&#039;&#039;skill&#039;&#039;&#039; is set. Return -1 to override (abort) the qagame function, anything else to &amp;quot;passthrough&amp;quot;. Callback may modify skills (or do anything else it wants) during passthrough.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===miscellaneous===&lt;br /&gt;
et_IPCReceive( &#039;&#039;&#039;vmnumber&#039;&#039;&#039;, &#039;&#039;&#039;message&#039;&#039;&#039; )&lt;br /&gt;
:Called when another mod sends an et.IPCSend() message to this mod. &#039;&#039;&#039;vmnumber&#039;&#039;&#039; is the VM slot number of the sender, and &#039;&#039;&#039;message&#039;&#039;&#039; is the message.&lt;br /&gt;
et_Print( &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Called whenever the server or qagame prints a string to the console.&lt;br /&gt;
et_Obituary( &#039;&#039;&#039;victim&#039;&#039;&#039;, &#039;&#039;&#039;killer&#039;&#039;&#039;, &#039;&#039;&#039;meansOfDeath&#039;&#039;&#039; )&lt;br /&gt;
:Called whenever a player is killed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==predefined constants==&lt;br /&gt;
et.EXEC_NOW&amp;lt;br&amp;gt;&lt;br /&gt;
et.EXEC_INSERT&amp;lt;br&amp;gt;&lt;br /&gt;
et.EXEC_APPEND&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_READ&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_WRITE&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_APPEND&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_APPEND_SYNC&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_ALL&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_TEAM&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_BUDDY&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_TEAMNL&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
et.HOSTARCH&lt;br /&gt;
:set to WIN32 or UNIX depending on the host architecture qagame is running on.&lt;br /&gt;
LUA_PATH&lt;br /&gt;
:set to fs_homepath/fs_game/?.lua in order to ease use of the [http://www.lua.org/pil/8.1.html require] function.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==configs==&lt;br /&gt;
If a config is loaded, all modules are shutdown and reloaded. If a &#039;&#039;certified&#039;&#039; config is loaded, all modules are shutdown and reloaded, and additionally the following functions are disabled: &#039;&#039;&#039;require()&#039;&#039;&#039;, &#039;&#039;&#039;loadfile()&#039;&#039;&#039;, &#039;&#039;&#039;loadlib()&#039;&#039;&#039;, &#039;&#039;&#039;loadstring()&#039;&#039;&#039;, &#039;&#039;&#039;dofile()&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==caveats==&lt;br /&gt;
Like qagame, lua modules are unloaded and reloaded on map_restart and map changes. This means that all global variables and other information is lost. Mods may choose to store persistent data in cvars or external files.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
&lt;br /&gt;
Q: OMG I hate the libary prefix et.* on everything!!11!1oneone&amp;lt;br&amp;gt;&lt;br /&gt;
A: table.foreach(et, function (func, value) _G[func] = value; end)&lt;br /&gt;
&lt;br /&gt;
Q: How do a reload my lua file without restarting the whole server?&amp;lt;br&amp;gt;&lt;br /&gt;
A: Use &#039;&#039;map_restart&#039;&#039;, &#039;&#039;reset_match&#039;&#039; or simply change the map.&lt;br /&gt;
&lt;br /&gt;
Q: Can I see some sample code?&amp;lt;br&amp;gt;&lt;br /&gt;
A: [[ETPro:Lua Sample Code|Lua sample code]]&lt;br /&gt;
&lt;br /&gt;
Q: Is there a list of [[ETPro]] Lua mods?&amp;lt;br&amp;gt;&lt;br /&gt;
A: Yes, [[:Category:ETPro:Mods|here]].&lt;br /&gt;
&lt;br /&gt;
Q: OMG my mod doesn&#039;t work!&amp;lt;br&amp;gt;&lt;br /&gt;
A: Make sure you added your mod&#039;s filename to the lua_modules cvar (e.g. set lua_modules mymod.lua).&lt;br /&gt;
&lt;br /&gt;
Q: OMG why has et_ClientSay been removed?&amp;lt;br&amp;gt;&lt;br /&gt;
A: That&#039;s a secret but, to keep the function as it was, just add the following code to your et_ClientCommand() function&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;	-- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
	-- so here&#039;s a wrapper for that&lt;br /&gt;
		arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
		&lt;br /&gt;
		if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
		elseif arg0 == &amp;quot;say_team&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_TEAM, et.ConcatArgs(1))&lt;br /&gt;
		elseif arg0 == &amp;quot;say_buddy&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_BUDDY, et.ConcatArgs(1))&lt;br /&gt;
		elseif arg0 == &amp;quot;say_teamnl&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_TEAMNL, et.ConcatArgs(1))&lt;br /&gt;
		end&lt;br /&gt;
	-- et_ClientSay wrapper end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Lua]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=ETPro:Pluggable_Config_Files&amp;diff=2702</id>
		<title>ETPro:Pluggable Config Files</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=ETPro:Pluggable_Config_Files&amp;diff=2702"/>
		<updated>2007-02-26T04:36:17Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: setl limits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ETPro supports &#039;&#039;&#039;Pluggable Config Files&#039;&#039;&#039;. These files provide servers the use of additional features not available from traditional &amp;lt;tt&amp;gt;.cfg&amp;lt;/tt&amp;gt; files.&lt;br /&gt;
&lt;br /&gt;
==Creation and Installation==&lt;br /&gt;
Config files must be located in &amp;lt;tt&amp;gt;etpro/configs&amp;lt;/tt&amp;gt; and their names must end in &amp;lt;tt&amp;gt;.config &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Config file format==&lt;br /&gt;
The following shows the .config syntax. This is not a complete config, the ... indicates that in a real config many similar commands would follow&lt;br /&gt;
&lt;br /&gt;
 configname &amp;quot;^/foobar^f 6v6&amp;quot;&lt;br /&gt;
 // config for 6v6 foobar league&lt;br /&gt;
 version 1.2.3.4 foobar6v6.version.foobarleague.com &lt;br /&gt;
 init &lt;br /&gt;
 { &lt;br /&gt;
    setl sv_pure 1 &lt;br /&gt;
    setl sv_cheats 0 &lt;br /&gt;
    setl g_gametype 3 &lt;br /&gt;
 ...&lt;br /&gt;
    command &amp;quot;pb_sv_enable&amp;quot; &lt;br /&gt;
    command &amp;quot;pb_sv_kicklen 1&amp;quot; &lt;br /&gt;
    command &amp;quot;pb_sv_cvarempty&amp;quot; &lt;br /&gt;
 ...&lt;br /&gt;
 } &lt;br /&gt;
 map default &lt;br /&gt;
 { &lt;br /&gt;
    set g_userTimeLimit 0 &lt;br /&gt;
    setl g_useralliedrespawntime 0 &lt;br /&gt;
    setl g_useraxisrespawntime 0 &lt;br /&gt;
    setl b_moverscale 1 &lt;br /&gt;
 } &lt;br /&gt;
 map radar &lt;br /&gt;
 { &lt;br /&gt;
    set g_userTimeLimit 12 &lt;br /&gt;
    command &amp;quot;forcecvar r_drawfoliage 0&amp;quot; &lt;br /&gt;
    mapscripthash &amp;lt;sha1 hash&amp;gt;&lt;br /&gt;
 } &lt;br /&gt;
 ...&lt;br /&gt;
 signature &amp;lt;sig&amp;gt;&lt;br /&gt;
===Config file details===&lt;br /&gt;
;comments : any text following  // is a comment and is ignored&lt;br /&gt;
&lt;br /&gt;
;version w.x.y.z some.dns.name : ET will check that version matches the IP returned form some.dns.name If it does, ETPro displays the message &amp;quot;config is latest version available&amp;quot; to all players in warmup. &#039;&#039;&#039;not fully implemented&#039;&#039;&#039; - etpro doesn&#039;t currently do the DNS check.&lt;br /&gt;
&lt;br /&gt;
;configname &amp;lt;name&amp;gt; : defines the name of the config. This name is displayed to players in warmup, but is &#039;&#039;&#039;not&#039;&#039;&#039; used to refer to the config in config related commands. The name may contain ET [[Color Codes]]&lt;br /&gt;
&lt;br /&gt;
;init : The init block is executed only once, when the config is loaded by referee or rcon/console. It is never reloaded. &lt;br /&gt;
&lt;br /&gt;
;map &amp;lt;&amp;lt;i&amp;gt;mapname&amp;lt;/i&amp;gt;&amp;gt;|default : The map blocks are loaded on every map_restart. The parameter is the mapname to match to. A parameter of default will execute that block for all maps. map blocks are executed in order from first to last. Generally you want your default block first, and then specific map blocks to override it.&lt;br /&gt;
&lt;br /&gt;
;signature &amp;lt;sig&amp;gt; : provides crypotgraphic signature to verify that that the config is unmodified. ETPro displays the message &amp;quot;config is certified&amp;quot; to all players in warmup. The signature must be generated by the etpro team.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;init&#039;&#039;&#039; and &#039;&#039;&#039;map&#039;&#039;&#039; are followed by a block, delimited by curly braces {}. Each block can contain the following keywords&lt;br /&gt;
&lt;br /&gt;
;set &amp;lt;cvarname&amp;gt; &amp;quot;value&amp;quot; : sets the specified cvar to the specified value.&lt;br /&gt;
;setl &amp;lt;cvarname&amp;gt; &amp;quot;value&amp;quot; : sets the specified cvar to the specified value, and locks it so that it cannot be changed by rcon, forcecvar or other means until the config is unloaded&lt;br /&gt;
note: setl names and values are limited to 63 characters in etpro versions up to and including 3.2.6&lt;br /&gt;
;command &amp;quot;command text&amp;quot; : execute &amp;quot;command text&amp;quot;&lt;br /&gt;
;mapscripthash &amp;lt;sha1 hash&amp;gt; : Require a particular mapscript be used for a map. Must appear in a non-default map section. The hash can be found by loading the map and checking the value of the readonly server cvar b_mapscripthash, or be obtained using external hashing tools like sha1sum (1). If the mapscript does not match when the map is loaded, a message will be sent to all players, and the config will be unloaded.&lt;br /&gt;
&lt;br /&gt;
==Config related commands==&lt;br /&gt;
;callvote  | ref config &amp;lt;config file name&amp;gt; : set the current config by vote or ref.&lt;br /&gt;
;config &amp;lt;config file name&amp;gt;|none : set the current config from the server console, or unload the current config. Settings set by the config remain in effect, but are no longer locked. Map specific blocks are no longer in effect. &lt;br /&gt;
&#039;&#039;notes&#039;&#039;: &lt;br /&gt;
:*&amp;lt;tt&amp;gt;config none&amp;lt;/tt&amp;gt; can only be used from the console (or rcon) not ref or vote.&lt;br /&gt;
:*you must use the filename of the .config (minus the .config extension), not the &#039;configname&#039; contained in the .config file. The &#039;configname&#039; is a longer (possibly colored etc) descriptive name.&lt;br /&gt;
:*&#039;&#039;&#039;do not&#039;&#039;&#039; try to load a config with &amp;lt;tt&amp;gt;set config &amp;lt;i&amp;gt;&amp;lt;configname&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;. This will cause the &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ref config&amp;lt;/tt&amp;gt; commands to stop working until the server is restarted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Common pitfalls to watchout for==&lt;br /&gt;
*Any cvar that isn&#039;t a number (vote_allow_config, b_watermark, b_levels_medic etc) must have quotes around it&#039;s value, even if its value is a single character.&lt;br /&gt;
*XP levels lists should not have commas in them (b_levels_medic etc)&lt;br /&gt;
*Putting cvars in groups alphabetically as above makes it a &amp;lt;em&amp;gt;lot&amp;lt;/em&amp;gt; easier to maintain and verify.&lt;br /&gt;
*Make sure there is an extra newline at the end of the file (after the closing &#039;}&#039;)&lt;br /&gt;
*&amp;lt;em&amp;gt;Test your &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt;&amp;lt;/em&amp;gt; - you can do this simply by putting it in your /etpro/configs directory, and starting ET with &amp;lt;tt&amp;gt;+set dedicated 2 +exec server.cfg&amp;lt;/tt&amp;gt;, then calling the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;/config NAME&amp;lt;/tt&amp;gt;. The console will report any major syntax errors in the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
*Make sure to include &amp;lt;em&amp;gt;all&amp;lt;/em&amp;gt; relevant gameplay-related cvars.  Most are included in [http://bani.anime.net/banimod/forums/viewtopic.php?t=4558#43204 this list].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Your Configuration Certified==&lt;br /&gt;
The easiest way is to send a private message to [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=2 bani] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=800 Rain] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=1462 zinx] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=761 ReyalP] with the URL using the [http://bani.anime.net/banimod/forums/privmsg.php?folder=sentbox ETPro forums], including a link to the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt; hosted on the league&#039;s website.&lt;br /&gt;
&lt;br /&gt;
An alternate way, if the first way fails, is to talk to one of the [[ETPro Developer]]s on [[IRC]].&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Cvar Restrictions]]&lt;br /&gt;
*[[Forced Cvars]]&lt;br /&gt;
*[[WolfWiki:Community_Portal#Leagues / Competitions]] is a good place to find full config file examples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Fieldname&amp;diff=2697</id>
		<title>Fieldname</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Fieldname&amp;diff=2697"/>
		<updated>2007-02-25T02:20:30Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: Im2spelling4u&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__&lt;br /&gt;
==Entity Fieldnames==&lt;br /&gt;
List of fields supported by [[Lua Mod API#entities|et.gentity_get() and et.gentity_set()]] functions&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pitatable columns=3 headlines=&amp;quot;field;type;access&amp;quot; widths=&amp;quot;180;120;60&amp;quot; headerfontcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;
activator;entity;RO;&lt;br /&gt;
chain;entity;RW;&lt;br /&gt;
classname;string;RW;&lt;br /&gt;
client.inactivityTime;integer;RW;&lt;br /&gt;
client.inactivityWarning;qboolean;RW;&lt;br /&gt;
clipmask;integer;?;&lt;br /&gt;
closespeed;float;RW;&lt;br /&gt;
count;integer;RW;&lt;br /&gt;
count2;integer;RW;&lt;br /&gt;
damage;integer;RW;&lt;br /&gt;
deathType;meansOfDeath_t;RW;&lt;br /&gt;
delay;float;RW;&lt;br /&gt;
dl_atten;integer;RW;&lt;br /&gt;
dl_color;vec3;RW;&lt;br /&gt;
dl_shader;string;RO;&lt;br /&gt;
dl_stylestring;string;RO;&lt;br /&gt;
duration;float;RW;&lt;br /&gt;
end_size;integer;RW;&lt;br /&gt;
enemy;entity;RW;&lt;br /&gt;
flags;bitflag;RO;&lt;br /&gt;
harc;float;RW;&lt;br /&gt;
health;integer;RW;&lt;br /&gt;
inuse;qboolean;RO;&lt;br /&gt;
isProp;qboolean;RO;&lt;br /&gt;
item;string;RW;&lt;br /&gt;
key;integer;RW;&lt;br /&gt;
message;string;RW;&lt;br /&gt;
methodOfDeath;integer;RW;&lt;br /&gt;
mg42BaseEnt;integer;RW;&lt;br /&gt;
missionLevel;integer;RW;&lt;br /&gt;
model;string;RO;&lt;br /&gt;
model2;string;RO;&lt;br /&gt;
nextTrain;entity;RW;&lt;br /&gt;
noise_index;integer;RW;&lt;br /&gt;
origin;vec3;RW;&lt;br /&gt;
pers.connected;connected_t;?;&lt;br /&gt;
pers.netname;string;?;&lt;br /&gt;
pers.localClient;qboolean;?;&lt;br /&gt;
pers.initialSpawn;qboolean;?; &lt;br /&gt;
pers.enterTime;integer;?;&lt;br /&gt;
pers.connectTime;integer;?; &lt;br /&gt;
pers.teamState.state;teamstatestate_t;?;&lt;br /&gt;
pers.voteCount;integer;?;&lt;br /&gt;
pers.teamVoteCount;integer;?; &lt;br /&gt;
pers.complaints;integer;?; &lt;br /&gt;
pers.complaintClient;integer;?; &lt;br /&gt;
pers.complaintEndTime;integer;?; &lt;br /&gt;
pers.lastReinforceTime;integer;?; &lt;br /&gt;
pers.applicationClient;integer;?; &lt;br /&gt;
pers.applicationEndTime;integer;?; &lt;br /&gt;
pers.invitationClient;integer;?; &lt;br /&gt;
pers.invitationEndTime;integer;?; &lt;br /&gt;
pers.propositionClient;integer;?; &lt;br /&gt;
pers.propositionClient2;integer;?; &lt;br /&gt;
pers.propositionEndTime;integer;?; &lt;br /&gt;
pers.autofireteamEndTime;integer;?; &lt;br /&gt;
pers.autofireteamCreateEndTime;integer;?; &lt;br /&gt;
pers.autofireteamJoinEndTime;integer;?; &lt;br /&gt;
pers.lastSpawnTime;integer;?;&lt;br /&gt;
pers.ready;qboolean;?;&lt;br /&gt;
prevTrain;entity;RW;&lt;br /&gt;
props_frame_state;integer;RO;&lt;br /&gt;
ps.stats;integer array;RW; &lt;br /&gt;
ps.persistant;integer array;RW;&lt;br /&gt;
ps.ping;integer;?;&lt;br /&gt;
ps.powerups;integer array;RW;&lt;br /&gt;
ps.ammo;integer array;RW; &lt;br /&gt;
ps.ammoclip;integer array;RW;&lt;br /&gt;
r.absmax;vec3;RO;&lt;br /&gt;
r.absmin;vec3;RO;&lt;br /&gt;
r.bmodel;qboolean;RO;&lt;br /&gt;
r.contents;integer;RW;&lt;br /&gt;
r.currentAngles;vec3;RW;&lt;br /&gt;
r.currentOrigin;vec3;RW;&lt;br /&gt;
r.eventTime;integer;RW;&lt;br /&gt;
r.linkcount;integer;RO;&lt;br /&gt;
r.linked;qboolean;RO;&lt;br /&gt;
r.maxs;vec3;RW;&lt;br /&gt;
r.mins;vec3;RW;&lt;br /&gt;
r.ownerNum;integer;RW;&lt;br /&gt;
r.singleClient;integer;RW;&lt;br /&gt;
r.svFlags;integer;RW;&lt;br /&gt;
r.worldflags;integer;RO;&lt;br /&gt;
radius;integer;RW;&lt;br /&gt;
random;float;RW;&lt;br /&gt;
rotate;vec3;RW;&lt;br /&gt;
s.angles;vec3;RW;&lt;br /&gt;
s.angles2;vec3;RW;&lt;br /&gt;
s.apos;trajectory;RW;&lt;br /&gt;
s.clientNum;integer;RW;&lt;br /&gt;
s.constantLight;integer;RW;&lt;br /&gt;
s.density;integer;RW;&lt;br /&gt;
s.dl_intensity;integer;RW;&lt;br /&gt;
s.dmgFlags;integer;RW;&lt;br /&gt;
s.eFlags;integer;RW;&lt;br /&gt;
s.eType;integer;?;&lt;br /&gt;
s.effect1Time;integer;RW;&lt;br /&gt;
s.effect2Time;integer;RW;&lt;br /&gt;
s.effect3Time;integer;RW;&lt;br /&gt;
s.frame;integer;RW;&lt;br /&gt;
s.groundEntityNum;integer;RO;&lt;br /&gt;
s.loopSound;integer;RW;&lt;br /&gt;
s.modelindex;integer;RW;&lt;br /&gt;
s.modelindex2;integer;RW;&lt;br /&gt;
s.number;integer;RO;&lt;br /&gt;
s.onFireEnd;integer;RW;&lt;br /&gt;
s.onFireStart;integer;RW;&lt;br /&gt;
s.origin;vec3;?;&lt;br /&gt;
s.origin2;vec3;?;&lt;br /&gt;
s.pos;trajectory;RW;&lt;br /&gt;
s.powerups;integer;RO;&lt;br /&gt;
s.solid;integer;RW;&lt;br /&gt;
s.teamNum;integer;RW;&lt;br /&gt;
s.time;integer;RW;&lt;br /&gt;
s.time2;integer;RW;&lt;br /&gt;
s.weapon;integer;RO;&lt;br /&gt;
scriptName;string;RO;&lt;br /&gt;
sess.sessionTeam;team_t;RW;&lt;br /&gt;
sess.spectatorTime;integer;RW;&lt;br /&gt;
sess.spectatorState;spectatorState_t;RW;&lt;br /&gt;
sess.spectatorClient;integer;RW;&lt;br /&gt;
sess.latchSpectatorClient;integer;RW;&lt;br /&gt;
sess.playerType;integer;RW;&lt;br /&gt;
sess.playerWeapon;integer;RW;&lt;br /&gt;
sess.playerWeapon2;integer;RW;&lt;br /&gt;
sess.spawnObjectiveIndex;integer;RW;&lt;br /&gt;
sess.latchPlayerType;integer;RW;&lt;br /&gt;
sess.latchPlayerWeapon;integer;RW;&lt;br /&gt;
sess.latchPlayerWeapon2;integer;RW;&lt;br /&gt;
sess.damage_given;integer;RW;&lt;br /&gt;
sess.damage_received;integer;RW;&lt;br /&gt;
sess.deaths;integer;RW;&lt;br /&gt;
sess.game_points;integer;RW;&lt;br /&gt;
sess.gibs;integer;RW;&lt;br /&gt;
sess.kills;integer;RW;&lt;br /&gt;
sess.medals;integer array;RW;&lt;br /&gt;
sess.muted;qboolean;RW;&lt;br /&gt;
sess.rank;integer;RW;&lt;br /&gt;
sess.referee;integer;RW;&lt;br /&gt;
sess.rounds;integer;RW;&lt;br /&gt;
sess.semiadmin;integer;RW;&lt;br /&gt;
sess.skill;integer array;RW;&lt;br /&gt;
sess.spec_invite;integer;RW;&lt;br /&gt;
sess.spec_team;integer;RW;&lt;br /&gt;
sess.suicides;integer;RW;&lt;br /&gt;
sess.team_damage;integer;RW;&lt;br /&gt;
sess.team_kills;integer;RW;&lt;br /&gt;
sess.team_received;integer;RW;&lt;br /&gt;
sess.aWeaponStats;weapon_stat_t;RW;&lt;br /&gt;
spawnflags;integer;RO;&lt;br /&gt;
spawnitem;string;RO;&lt;br /&gt;
speed;float;RW;&lt;br /&gt;
splashDamage;integer;RW;&lt;br /&gt;
splashMethodOfDeath;integer;RW;&lt;br /&gt;
splashRadius;integer;RW;&lt;br /&gt;
start_size;integer;RW;&lt;br /&gt;
tagName;string;RO;&lt;br /&gt;
tagParent;entity;RW;&lt;br /&gt;
takedamage;boolean;RW;&lt;br /&gt;
tankLink;entity;RW;&lt;br /&gt;
target;string;RW;&lt;br /&gt;
TargetAngles;vec3;RW;&lt;br /&gt;
TargetFlag;integer;RO;&lt;br /&gt;
targetname;string;RO;&lt;br /&gt;
teamchain;entity;RW;&lt;br /&gt;
teammaster;entity;RW;&lt;br /&gt;
track;string;RO;&lt;br /&gt;
varc;float;RW;&lt;br /&gt;
wait;float;RW;&lt;br /&gt;
waterlevel;integer;RO;&lt;br /&gt;
watertype;integer;RO;&lt;br /&gt;
&amp;lt;/pitatable&amp;gt;&lt;br /&gt;
:&#039;&#039;note&#039;&#039;: all the sess.* fields will return nil unless the entity is associated with client slot &amp;lt; sv_maxclients.&lt;br /&gt;
:&#039;&#039;note&#039;&#039;: all array variables need to be get or set with an additional parameter.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==ET variable types==&lt;br /&gt;
&lt;br /&gt;
===qboolean===&lt;br /&gt;
:a &#039;&#039;&#039;qboolean&#039;&#039;&#039; is a number representing a boolean value.&lt;br /&gt;
:0 is false&lt;br /&gt;
:1 is true&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===vec3===&lt;br /&gt;
:a &#039;&#039;&#039;vec3_t&#039;&#039;&#039; is a 3-element array of numbers (C definition: typedef float vec3_t[3];). It is usually used to store and process coordinates in 3D space.&amp;lt;br&amp;gt;&lt;br /&gt;
:In etpro-lua a vector is an array (table indexed by integers) containing 3 numbers. It can be accessed by&lt;br /&gt;
:doing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin = et.gentity_get(entNum,&amp;quot;r.currentOrigin&amp;quot;) --a vec3 value&lt;br /&gt;
x,y,z = origin[1],origin[2],origin[3]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===array===&lt;br /&gt;
:The fields listed as having type &#039;&#039;&#039;array&#039;&#039;&#039; represent an entity value which is an array. Individual elements of the array are accessed by passing the desired index in the &#039;&#039;arrayindex&#039;&#039; argument to the et.gentity_get and et.gentity_set functions. Valid array indexes are integers from 0 up to some field specific maximum. The &#039;&#039;arrayindex&#039;&#039; argument is &#039;&#039;&#039;required&#039;&#039;&#039; when accessing array type fields, so only one element of an array can be accessed in a given call to the gentity_* functions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===trajectory===&lt;br /&gt;
:a &#039;&#039;&#039;trajectory&#039;&#039;&#039; is returned as a lua table described below&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
  trDuration = &amp;lt;number&amp;gt;, --- int&lt;br /&gt;
  trTime = &amp;lt;number&amp;gt;, -- int&lt;br /&gt;
  trType = &amp;lt;number&amp;gt;, -- see below for allowed values&lt;br /&gt;
  trBase = &amp;lt;vec3_t&amp;gt;, -- vec3, as described above&lt;br /&gt;
  trDelta = &amp;lt;vec3_t&amp;gt; -- also a vec3&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
: the allowed values for trType (along with the enum names and original comments from the ET source), are as follows. Note &lt;br /&gt;
: that not all values make sense for all entity types &lt;br /&gt;
&amp;lt;pitatable columns=3 headlines=&amp;quot;number;type;discription&amp;quot; widths=&amp;quot;40;160;450&amp;quot; headerfontcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;
1;TR_STATIONARY;&lt;br /&gt;
2;TR_INTERPOLATE;non-parametric, but interpolate between snapshots;&lt;br /&gt;
3;TR_LINEAR;&lt;br /&gt;
4;TR_LINEAR_STOP;&lt;br /&gt;
5;TR_LINEAR_STOP_BACK;reverse movement can be different than forward;&lt;br /&gt;
6;TR_SINE;value = base + sin( time / duration ) * delta;&lt;br /&gt;
7;TR_GRAVITY;&lt;br /&gt;
8;TR_GRAVITY_LOW;&lt;br /&gt;
9;TR_GRAVITY_FLOAT;super low grav with no gravity acceleration;&lt;br /&gt;
10;TR_GRAVITY_PAUSED;has stopped, but trace to see if it should be switched back to TR_GRAVITY;&lt;br /&gt;
11;TR_ACCELERATE;&lt;br /&gt;
12;TR_DECCELERATE;&lt;br /&gt;
13;TR_SPLINE;&lt;br /&gt;
14;TR_LINEAR_PATH;&lt;br /&gt;
&amp;lt;/pitatable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===entity===&lt;br /&gt;
:The fields listed as having type &#039;&#039;&#039;enitity&#039;&#039;&#039; return an entity number or nil. Entity numbers are integers from 0 through 1023. Some of the entity numbers have special meanings:&lt;br /&gt;
:0 - (sv_privateclients - 1) are reserved for clients who connect with the private slot password&lt;br /&gt;
:0 - 63 are reserved for clients. A client&#039;s entity number is also its client number (as shown by /players for example)&lt;br /&gt;
:1022 is the &#039;&#039;&#039;worldspawn&#039;&#039;&#039; entity&lt;br /&gt;
:1023 is &#039;&#039;&#039;ENTITYNUM_NONE&#039;&#039;&#039; which is used instead of null in C under some circumstances to indicate no entity. This is needed where an entity number will be passed over the network.&lt;br /&gt;
:&#039;&#039;Note&#039;&#039;: Some other fields not listed as type &#039;entity&#039; may take an entity number value. &#039;&#039;&#039;mg42BaseEnt&#039;&#039;&#039; and &#039;&#039;&#039;s.number&#039;&#039;&#039; are examples.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===meansOfDeath===&lt;br /&gt;
:a &#039;&#039;&#039;meansOfDeath_t&#039;&#039;&#039; is a number indicating the [[etdamage|Method of Death]] Click  [[etdamage|here]] for a list with possible value&#039;s&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2696</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2696"/>
		<updated>2007-02-25T01:19:39Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* et_ClientSay ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Can we have a intercepted version of &#039;&#039;&#039;et_ClientUserinfoChanged()&#039;&#039;&#039; to return &#039;&#039;&#039;1&#039;&#039;&#039; to intercept it with a mod and return &#039;&#039;&#039;0&#039;&#039;&#039; to pass it through to the server? THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
:I don&#039;t understand what you want here. You should already be able to call trap_SetUserinfo from et_ClientUserinfoChanged if you want to modify the values. --[[User:ReyalP|ReyalP]] 19:00, 8 February 2007 (PST)&lt;br /&gt;
::I found another way to do that. Sorry, but didn&#039;t need that anymore. --[[User:Pdi|pdi]] 12:16, 9 February 2007 (PST)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
: we are not going to add all the fields. A lot of them don&#039;t make sense for lua mods. Explain which ones you need --[[User:ReyalP|ReyalP]] 20:57, 5 February 2007 (PST)&lt;br /&gt;
::Ok, didn&#039;t know why i&#039;m asking for (long time ago) but fields for xp/skill (sess.skillpoints array - if i remember) control would be great. THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Locations == &lt;br /&gt;
 [22:08:57] &amp;lt;Vetinari&amp;gt; [NW]reyalP: if you&#039;re exposing map coords, it would &lt;br /&gt;
   be nice to have something like et.PostitionName( et.gentity_get(id, &amp;quot;r.currentOrigin&amp;quot;)) &lt;br /&gt;
   &amp;lt;-- location name or map coords &amp;quot;(B, 3)&amp;quot;, so I don&#039;t have to parse the _loc.dat ;-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== et_ClientSay ? ==&lt;br /&gt;
err.. what&#039;s this:&lt;br /&gt;
 -- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
 -- so here&#039;s a wrapper for that&lt;br /&gt;
    arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
    if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
        return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
&lt;br /&gt;
This should be &lt;br /&gt;
        return et.G_Say( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
:No, et_ClientSay is a function you would define yourself to filter or do something with chats. It was it&#039;s own callback in earlier version of the API. -[[User:ReyalP|ReyalP]] 17:19, 24 February 2007 (PST)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=SendServerCommand&amp;diff=2689</id>
		<title>SendServerCommand</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=SendServerCommand&amp;diff=2689"/>
		<updated>2007-02-22T02:50:33Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: some notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__&lt;br /&gt;
et.trap_SendServerCommand() is used to send a command from the server to one or more clients. The first argument is the slot number of the client the command will be sent to. If it&#039;s equal to -1, the command will be broadcast to all clients.&lt;br /&gt;
&lt;br /&gt;
The following commands can be issued with this function:&lt;br /&gt;
&lt;br /&gt;
==Printing==&lt;br /&gt;
===Print===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;print&#039;&#039;&#039; \&amp;quot;&#039;&#039;Message&#039;&#039;\n\&amp;quot;&amp;quot;&lt;br /&gt;
:&#039;&#039;&#039;print&#039;&#039;&#039; prints &#039;&#039;Message&#039;&#039; to the client&#039;s console.&lt;br /&gt;
&lt;br /&gt;
===Center Print MoO=== &lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;cpm&#039;&#039;&#039; \&amp;quot;&#039;&#039;Message&#039;&#039;\n\&amp;quot;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;cpm&#039;&#039;&#039; prints &#039;&#039;Message&#039;&#039; to the client&#039;s annoucement area and console.&lt;br /&gt;
&lt;br /&gt;
===Center Print===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;cp&#039;&#039;&#039; \&amp;quot;&#039;&#039;Message&#039;&#039;\n\&amp;quot;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;cp&#039;&#039;&#039; prints &#039;&#039;Message&#039;&#039; to the center of the client&#039;s screen.&lt;br /&gt;
&lt;br /&gt;
===Banner Print===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;b&#039;&#039;&#039; &#039;&#039;locations&#039;&#039; \&amp;quot;&#039;&#039;Message&#039;&#039;\n\&amp;quot;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;b&#039;&#039;&#039; prints &#039;&#039;Message&#039;&#039; to the client&#039;s banner &#039;&#039;locations&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
:the &#039;&#039;locations&#039;&#039; can be a number from 0 to 248&lt;br /&gt;
:For compatibility, the old-style locations (from 0-4) are also supported.&amp;lt;br&amp;gt;&lt;br /&gt;
:8 - player chat area&amp;lt;br&amp;gt;                &lt;br /&gt;
:16 - left popup area (not recommended)&amp;lt;br&amp;gt;&lt;br /&gt;
:32 - centered above the chat area&amp;lt;br&amp;gt;&lt;br /&gt;
:64 - console only&amp;lt;br&amp;gt;&lt;br /&gt;
:128 - banner area (recommended)(top of screen)&lt;br /&gt;
&lt;br /&gt;
===Scores Print===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;sc&#039;&#039;&#039; \&amp;quot;&#039;&#039;Message&#039;&#039;\n\&amp;quot;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;sc&#039;&#039;&#039; prints &#039;&#039;Message&#039;&#039; to the client&#039;s console and writes it to the statsdump file.&lt;br /&gt;
&lt;br /&gt;
==Chatting==&lt;br /&gt;
===Chat===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;c&#039;&#039;&#039; &#039;&#039;ClientNum&#039;&#039; \&amp;quot;&#039;&#039;Message&#039;&#039;\&amp;quot;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;c&#039;&#039;&#039; prints &#039;&#039;Message&#039;&#039; as a global chat message on behalf of the client specified by &#039;&#039;ClientNum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Team Chat===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;tc&#039;&#039;&#039; &#039;&#039;ClientNum&#039;&#039; \&amp;quot;&#039;&#039;Message&#039;&#039;\&amp;quot; &#039;&#039;X-Location&#039;&#039; &#039;&#039;Y-Location&#039;&#039; &#039;&#039;Z-Location&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;tc&#039;&#039;&#039; prints &#039;&#039;Message&#039;&#039; as a team chat message on behalf of the client specified by &#039;&#039;ClientNum&#039;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
:the &#039;&#039;X,Y,Z-Location&#039;s&#039;&#039; are optional parematers that represent the client&#039;s location,&amp;lt;br&amp;gt;&lt;br /&gt;
:if the &#039;&#039;X,Y,Z-Location&#039;s&#039;&#039; are left out then the message will be printed without a location.&lt;br /&gt;
&lt;br /&gt;
===Fireteam Chat===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;bc&#039;&#039;&#039; &#039;&#039;ClientNum&#039;&#039; \&amp;quot;&#039;&#039;Message&#039;&#039;\&amp;quot; &#039;&#039;X-Location&#039;&#039; &#039;&#039;Y-Location&#039;&#039; &#039;&#039;Z-Location&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;bc&#039;&#039;&#039; prints &#039;&#039;Message&#039;&#039; as a fireteam chat message on behalf of the client specified by &#039;&#039;ClientNum&#039;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
:the &#039;&#039;X,Y,Z-Location&#039;s&#039;&#039; are parematers that represent the client&#039;s location.&lt;br /&gt;
&lt;br /&gt;
==Voice Chat==&lt;br /&gt;
===Global Voice Chat===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;vchat&#039;&#039;&#039; &#039;&#039;VoiceOnly&#039;&#039; &#039;&#039;ClientNum&#039;&#039; 50 &#039;&#039;Vsay-String&#039;&#039; &#039;&#039;Vsay-Number&#039;&#039; \&amp;quot;&#039;&#039;Custom-Message&#039;&#039;\&amp;quot;&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;vchat&#039;&#039;&#039; sends a global voice chat &#039;&#039;Vsay-String&#039;&#039; on behalf of the client specified by &#039;&#039;ClientNum&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;Vsay-Number&#039;&#039; is by default random, however, it can be set by the player by passing parameters to the vsay command (/vsay &amp;lt;&#039;&#039;Vsay-Number&#039;&#039;&amp;gt; &amp;lt;&#039;&#039;Vsay-String&#039;&#039;&amp;gt;),&amp;lt;br&amp;gt; &#039;&#039;Vsay-Number&#039;&#039; represents the vsay number of Vsay as listed in the .voice files.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;Custom-Message&#039;&#039; is by default \&amp;quot;\&amp;quot; (empty), otherwise it&#039;s the message that gets printed in the chat area.&lt;br /&gt;
:if &#039;&#039;VoiceOnly&#039;&#039; is 0 it will print a chat message on behalf of &#039;&#039;ClientNum&#039;&#039; contaning the message&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;VoiceOnly&#039;&#039; is 1 it will only do the sound but not the message&lt;br /&gt;
&lt;br /&gt;
===Team Voice Chat===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;vtchat&#039;&#039;&#039; &#039;&#039;VoiceOnly&#039;&#039; &#039;&#039;ClientNum&#039;&#039; 50 &#039;&#039;Vsay-String&#039;&#039; &#039;&#039;X-Location&#039;&#039; &#039;&#039;Y-Location&#039;&#039; &#039;&#039;Z-Location&#039;&#039; &#039;&#039;Vsay-Number&#039;&#039; \&amp;quot;&#039;&#039;Custom-Message&#039;&#039;\&amp;quot;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;vchat&#039;&#039;&#039; sends a team voice chat &#039;&#039;Vsay-String&#039;&#039; a on behalf of client &#039;&#039;ClienNtum&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;Vsay-Number&#039;&#039; is by default random, however, it can be set by the player by passing parameters to the vsay command (/vsay &amp;lt;&#039;&#039;Vsay-Number&#039;&#039;&amp;gt; &amp;lt;&#039;&#039;Vsay-String&#039;&#039;&amp;gt;),&amp;lt;br&amp;gt; &#039;&#039;Vsay-Number&#039;&#039; represents the vsay number of Vsay as listed in the .voice files.&amp;lt;br&amp;gt;&lt;br /&gt;
:the &#039;&#039;X,Y,Z-Location&#039;s&#039;&#039; parematers the represent the clients location.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;Custom-Message&#039;&#039; is by default \&amp;quot;\&amp;quot; (empty), otherwise it&#039;s the message that gets printed in the chat area.&lt;br /&gt;
:if &#039;&#039;VoiceOnly&#039;&#039; is 0 it will print a chat message on behalf of &#039;&#039;ClientNum&#039;&#039; contaning the message&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;VoiceOnly&#039;&#039; is 1 it will only do the sound but not the message&lt;br /&gt;
&lt;br /&gt;
===Fireteam Voice Chat===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;vtchat&#039;&#039;&#039; &#039;&#039;VoiceOnly&#039;&#039; &#039;&#039;ClientNum&#039;&#039; 50 &#039;&#039;Fireteam-String&#039;&#039; &#039;&#039;X-Location&#039;&#039; &#039;&#039;Y-Location&#039;&#039; &#039;&#039;Z-Location&#039;&#039; &#039;&#039;Vsay-Number&#039;&#039; \&amp;quot;&#039;&#039;Custom-Message&#039;&#039;\&amp;quot;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;vchat&#039;&#039;&#039; will team voice chat &#039;&#039;Vsay-String&#039;&#039; on behalf of client &#039;&#039;ClienNum&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;Vsay-Number&#039;&#039; is by default random, however, it can be set by the player by passing parameters to the vsay command (/vsay &amp;lt;&#039;&#039;Vsay-Number&#039;&#039;&amp;gt; &amp;lt;&#039;&#039;Vsay-String&#039;&#039;&amp;gt;),&amp;lt;br&amp;gt; &#039;&#039;Vsay-Number&#039;&#039; represents the vsay number of Vsay as listed in the .voice files.&amp;lt;br&amp;gt;&lt;br /&gt;
:the &#039;&#039;X,Y,Z-Location&#039;s&#039;&#039; parematers the represent the clients location.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;Custom-Message&#039;&#039; is by default \&amp;quot;\&amp;quot; (empty), otherwise it&#039;s the message that gets printed in the chat area.&lt;br /&gt;
:if &#039;&#039;VoiceOnly&#039;&#039; is 0 it will print a chat message on behalf of &#039;&#039;ClientNum&#039;&#039; contaning the message&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;VoiceOnly&#039;&#039; is 1 it will only do the sound but not the message&lt;br /&gt;
&lt;br /&gt;
==Fireteam==&lt;br /&gt;
===Application===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;application&#039;&#039;&#039; &#039;&#039;Number&#039;&#039;&amp;quot;&lt;br /&gt;
:&#039;&#039;&#039;application&#039;&#039;&#039; shows a fireteam invation message to the client.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; &amp;gt; -1 - the &amp;quot;accept ... application to join your fireteam&amp;quot; message shows up. In this case &#039;&#039;Number&#039;&#039; is the ClientNum of the applying client.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -1 - the &amp;quot;your aplication has been submitted&amp;quot; message shows up.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -2 - the &amp;quot;your aplication failed&amp;quot; message shows up.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -3 - the &amp;quot;your aplication has been approved&amp;quot; message shows up.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -4 - the &amp;quot;your aplication reply has been sent&amp;quot; message shows up.&lt;br /&gt;
&lt;br /&gt;
===Proposition===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;proposition&#039;&#039;&#039; &#039;&#039;Number&#039;&#039; &#039;&#039;Number2&#039;&#039;&amp;quot;&lt;br /&gt;
:&#039;&#039;&#039;proposition&#039;&#039;&#039; shows a fireteam proposition message to the client.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; &amp;gt; -1 - the &amp;quot;accept ... proposition to invite ... to your fireteam&amp;quot; message shows up. In this case &#039;&#039;Number&#039;&#039; is the ClientNum of the proposed client, and &#039;&#039;Number2&#039;&#039; is the ClientNum of the proposing player.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -1 - the &amp;quot;your proposition has been submitted&amp;quot; message shows up.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -2 - the &amp;quot;your proposition was rejected&amp;quot; message shows up.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -3 - the &amp;quot;your proposition was accepted&amp;quot; message shows up.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -4 - the &amp;quot;your proposition reply has been sent&amp;quot; message shows up.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;Number2&#039;&#039; is an optional paramater only used when &#039;&#039;Number&#039;&#039; &amp;gt; -1.&lt;br /&gt;
&lt;br /&gt;
===Invitation===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;invitation&#039;&#039;&#039; &#039;&#039;Number&#039;&#039;&amp;quot;&lt;br /&gt;
:&#039;&#039;&#039;invitation&#039;&#039;&#039; shows the fireteam invation message to the client.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; &amp;gt; -1 - the &amp;quot;accept .. invitation to join your fireteam&amp;quot; message shows up. In this case &#039;&#039;Number&#039;&#039; is the ClientNum of the applying client.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -1 - the &amp;quot;your invitation has been submitted&amp;quot; message shows up.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -2 - the &amp;quot;your invitation rejected&amp;quot; message shows up.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -3 - the &amp;quot;your invitation was accepted&amp;quot; message shows up.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -4 - the &amp;quot;your invitation reply has been sent&amp;quot; message shows up.&lt;br /&gt;
&lt;br /&gt;
==Others== &lt;br /&gt;
===Complaining===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;complaint&#039;&#039;&#039; &#039;&#039;Number&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;complaint&#039;&#039;&#039; shows the complaint vote message to the client.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; &amp;gt; 1 - the vote shows up. In this case &#039;&#039;Number&#039;&#039; is the ClientNum of the teamkilling player.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -1 - the &amp;quot;complaint filed&amp;quot; message shows up.&amp;lt;br&amp;gt;&lt;br /&gt;
:if &#039;&#039;Number&#039;&#039; == -2 - the &amp;quot;complaint dismissed&amp;quot; message shows up.&lt;br /&gt;
&lt;br /&gt;
===Spawning===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;setspawnpt&#039;&#039;&#039; &#039;&#039;Number&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;setspawnpt&#039;&#039;&#039; sets the client game selected spawnpoint to number &#039;&#039;number&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Kicking===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;disconnect&#039;&#039;&#039; \&amp;quot;&#039;&#039;reason&#039;&#039;\&amp;quot;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;disconnect&#039;&#039;&#039; will disconnect the client it has been send with a &amp;quot;Server disconnected&amp;quot; message&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;reason&#039;&#039; is an optional parameter to show a reason after &amp;quot;Server disconnected&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;note:&#039;&#039;&#039; use trap_DropClient instead.&lt;br /&gt;
&lt;br /&gt;
===Configstrings===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;cs&#039;&#039;&#039; &#039;&#039;Number&#039;&#039; \&amp;quot;&#039;&#039;String&#039;&#039;\&amp;quot;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
: &#039;&#039;&#039;cs&#039;&#039;&#039; will set the clients configstringnumber &#039;&#039;Number&#039;&#039; to the &#039;&#039;String&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Setting individual players configstrings this way is probably a Bad Idea.&lt;br /&gt;
&lt;br /&gt;
===Shaders===&lt;br /&gt;
* &amp;quot;&#039;&#039;&#039;remapShader&#039;&#039;&#039; \&amp;quot;&#039;&#039;OldShader&#039;&#039;\&amp;quot; \&amp;quot;&#039;&#039;NewShader&#039;&#039;\&amp;quot; &#039;&#039;#&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
: &#039;&#039;&#039;remapShader&#039;&#039;&#039; replaces any texture &#039;&#039;OldShader&#039;&#039; with &#039;&#039;NewShader&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
: &#039;&#039;#&#039;&#039; is the Timeoffset, which currently should be left as &#039;&#039;0&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=ETPro:Pluggable_Config_Files&amp;diff=2685</id>
		<title>ETPro:Pluggable Config Files</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=ETPro:Pluggable_Config_Files&amp;diff=2685"/>
		<updated>2007-02-20T00:44:51Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: mmm hash&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ETPro supports &#039;&#039;&#039;Pluggable Config Files&#039;&#039;&#039;. These files provide servers the use of additional features not available from traditional &amp;lt;tt&amp;gt;.cfg&amp;lt;/tt&amp;gt; files.&lt;br /&gt;
&lt;br /&gt;
==Creation and Installation==&lt;br /&gt;
Config files must be located in &amp;lt;tt&amp;gt;etpro/configs&amp;lt;/tt&amp;gt; and their names must end in &amp;lt;tt&amp;gt;.config &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Config file format==&lt;br /&gt;
The following shows the .config syntax. This is not a complete config, the ... indicates that in a real config many similar commands would follow&lt;br /&gt;
&lt;br /&gt;
 configname &amp;quot;^/foobar^f 6v6&amp;quot;&lt;br /&gt;
 // config for 6v6 foobar league&lt;br /&gt;
 version 1.2.3.4 foobar6v6.version.foobarleague.com &lt;br /&gt;
 init &lt;br /&gt;
 { &lt;br /&gt;
    setl sv_pure 1 &lt;br /&gt;
    setl sv_cheats 0 &lt;br /&gt;
    setl g_gametype 3 &lt;br /&gt;
 ...&lt;br /&gt;
    command &amp;quot;pb_sv_enable&amp;quot; &lt;br /&gt;
    command &amp;quot;pb_sv_kicklen 1&amp;quot; &lt;br /&gt;
    command &amp;quot;pb_sv_cvarempty&amp;quot; &lt;br /&gt;
 ...&lt;br /&gt;
 } &lt;br /&gt;
 map default &lt;br /&gt;
 { &lt;br /&gt;
    set g_userTimeLimit 0 &lt;br /&gt;
    setl g_useralliedrespawntime 0 &lt;br /&gt;
    setl g_useraxisrespawntime 0 &lt;br /&gt;
    setl b_moverscale 1 &lt;br /&gt;
 } &lt;br /&gt;
 map radar &lt;br /&gt;
 { &lt;br /&gt;
    set g_userTimeLimit 12 &lt;br /&gt;
    command &amp;quot;forcecvar r_drawfoliage 0&amp;quot; &lt;br /&gt;
    mapscripthash &amp;lt;sha1 hash&amp;gt;&lt;br /&gt;
 } &lt;br /&gt;
 ...&lt;br /&gt;
 signature &amp;lt;sig&amp;gt;&lt;br /&gt;
===Config file details===&lt;br /&gt;
;comments : any text following  // is a comment and is ignored&lt;br /&gt;
&lt;br /&gt;
;version w.x.y.z some.dns.name : ET will check that version matches the IP returned form some.dns.name If it does, ETPro displays the message &amp;quot;config is latest version available&amp;quot; to all players in warmup. &#039;&#039;&#039;not fully implemented&#039;&#039;&#039; - etpro doesn&#039;t currently do the DNS check.&lt;br /&gt;
&lt;br /&gt;
;configname &amp;lt;name&amp;gt; : defines the name of the config. This name is displayed to players in warmup, but is &#039;&#039;&#039;not&#039;&#039;&#039; used to refer to the config in config related commands. The name may contain ET [[Color Codes]]&lt;br /&gt;
&lt;br /&gt;
;init : The init block is executed only once, when the config is loaded by referee or rcon/console. It is never reloaded. &lt;br /&gt;
&lt;br /&gt;
;map &amp;lt;&amp;lt;i&amp;gt;mapname&amp;lt;/i&amp;gt;&amp;gt;|default : The map blocks are loaded on every map_restart. The parameter is the mapname to match to. A parameter of default will execute that block for all maps. map blocks are executed in order from first to last. Generally you want your default block first, and then specific map blocks to override it.&lt;br /&gt;
&lt;br /&gt;
;signature &amp;lt;sig&amp;gt; : provides crypotgraphic signature to verify that that the config is unmodified. ETPro displays the message &amp;quot;config is certified&amp;quot; to all players in warmup. The signature must be generated by the etpro team.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;init&#039;&#039;&#039; and &#039;&#039;&#039;map&#039;&#039;&#039; are followed by a block, delimited by curly braces {}. Each block can contain the following keywords&lt;br /&gt;
&lt;br /&gt;
;set &amp;lt;cvarname&amp;gt; &amp;quot;value&amp;quot; : sets the specified cvar to the specified value.&lt;br /&gt;
;setl &amp;lt;cvarname&amp;gt; &amp;quot;value&amp;quot; : sets the specified cvar to the specified value, and locks it so that it cannot be changed by rcon, forcecvar or other means until the config is unloaded&lt;br /&gt;
;command &amp;quot;command text&amp;quot; : execute &amp;quot;command text&amp;quot;&lt;br /&gt;
;mapscripthash &amp;lt;sha1 hash&amp;gt; : Require a particular mapscript be used for a map. Must appear in a non-default map section. The hash can be found by loading the map and checking the value of the readonly server cvar b_mapscripthash, or be obtained using external hashing tools like sha1sum (1). If the mapscript does not match when the map is loaded, a message will be sent to all players, and the config will be unloaded.&lt;br /&gt;
&lt;br /&gt;
==Config related commands==&lt;br /&gt;
;callvote  | ref config &amp;lt;config file name&amp;gt; : set the current config by vote or ref.&lt;br /&gt;
;config &amp;lt;config file name&amp;gt;|none : set the current config from the server console, or unload the current config. Settings set by the config remain in effect, but are no longer locked. Map specific blocks are no longer in effect. &lt;br /&gt;
&#039;&#039;notes&#039;&#039;: &lt;br /&gt;
:*&amp;lt;tt&amp;gt;config none&amp;lt;/tt&amp;gt; can only be used from the console (or rcon) not ref or vote.&lt;br /&gt;
:*you must use the filename of the .config (minus the .config extension), not the &#039;configname&#039; contained in the .config file. The &#039;configname&#039; is a longer (possibly colored etc) descriptive name.&lt;br /&gt;
:*&#039;&#039;&#039;do not&#039;&#039;&#039; try to load a config with &amp;lt;tt&amp;gt;set config &amp;lt;i&amp;gt;&amp;lt;configname&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;. This will cause the &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ref config&amp;lt;/tt&amp;gt; commands to stop working until the server is restarted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Common pitfalls to watchout for==&lt;br /&gt;
*Any cvar that isn&#039;t a number (vote_allow_config, b_watermark, b_levels_medic etc) must have quotes around it&#039;s value, even if its value is a single character.&lt;br /&gt;
*XP levels lists should not have commas in them (b_levels_medic etc)&lt;br /&gt;
*Putting cvars in groups alphabetically as above makes it a &amp;lt;em&amp;gt;lot&amp;lt;/em&amp;gt; easier to maintain and verify.&lt;br /&gt;
*Make sure there is an extra newline at the end of the file (after the closing &#039;}&#039;)&lt;br /&gt;
*&amp;lt;em&amp;gt;Test your &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt;&amp;lt;/em&amp;gt; - you can do this simply by putting it in your /etpro/configs directory, and starting ET with &amp;lt;tt&amp;gt;+set dedicated 2 +exec server.cfg&amp;lt;/tt&amp;gt;, then calling the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;/config NAME&amp;lt;/tt&amp;gt;. The console will report any major syntax errors in the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
*Make sure to include &amp;lt;em&amp;gt;all&amp;lt;/em&amp;gt; relevant gameplay-related cvars.  Most are included in [http://bani.anime.net/banimod/forums/viewtopic.php?t=4558#43204 this list].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Your Configuration Certified==&lt;br /&gt;
The easiest way is to send a private message to [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=2 bani] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=800 Rain] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=1462 zinx] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=761 ReyalP] with the URL using the [http://bani.anime.net/banimod/forums/privmsg.php?folder=sentbox ETPro forums], including a link to the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt; hosted on the league&#039;s website.&lt;br /&gt;
&lt;br /&gt;
An alternate way, if the first way fails, is to talk to one of the [[ETPro Developer]]s on [[IRC]].&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Cvar Restrictions]]&lt;br /&gt;
*[[Forced Cvars]]&lt;br /&gt;
*[[WolfWiki:Community_Portal#Leagues / Competitions]] is a good place to find full config file examples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2633</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2633"/>
		<updated>2007-02-09T03:00:49Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- getUserEguid(cno) - get a client&#039;s etpro guid?&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6279 fixed.]--[[User:Bani|Bani]] 17:56, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Can we have a intercepted version of &#039;&#039;&#039;et_ClientUserinfoChanged()&#039;&#039;&#039; to return &#039;&#039;&#039;1&#039;&#039;&#039; to intercept it with a mod and return &#039;&#039;&#039;0&#039;&#039;&#039; to pass it through to the server? THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
:I don&#039;t understand what you want here. You should already be able to call trap_SetUserinfo from et_ClientUserinfoChanged if you want to modify the values. --[[User:ReyalP|ReyalP]] 19:00, 8 February 2007 (PST)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
: we are not going to add all the fields. A lot of them don&#039;t make sense for lua mods. Explain which ones you need --[[User:ReyalP|ReyalP]] 20:57, 5 February 2007 (PST)&lt;br /&gt;
::Ok, didn&#039;t know why i&#039;m asking for (long time ago) but fields for xp/skill (sess.skillpoints array - if i remember) control would be great. THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
----&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2626</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2626"/>
		<updated>2007-02-06T04:57:02Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Fields for the next release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- getUserEguid(cno) - get a client&#039;s etpro guid?&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6279 fixed.]--[[User:Bani|Bani]] 17:56, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
: we are not going to add all the fields. A lot of them don&#039;t make sense for lua mods. Explain which ones you need --[[User:ReyalP|ReyalP]] 20:57, 5 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
----&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2625</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2625"/>
		<updated>2007-02-06T04:10:16Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: remove fixed/invalid stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- getUserEguid(cno) - get a client&#039;s etpro guid?&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6279 fixed.]--[[User:Bani|Bani]] 17:56, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
----&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Lua_Mod_API&amp;diff=2622</id>
		<title>Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Lua_Mod_API&amp;diff=2622"/>
		<updated>2007-02-02T04:53:35Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: os :?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__&lt;br /&gt;
[[ETPro]] now supports server-side mods via the [http://www.lua.org/ Lua] scripting language. For more information about Lua, visit the [http://www.lua.org/manual/5.0/ Reference manual], the online edition of the book [http://www.lua.org/pil/ Programming in Lua] or the [http://lua-users.org/wiki/ lua-users wiki].&lt;br /&gt;
&lt;br /&gt;
ETPro has an embedded Lua 5.0.2 interpreter, and if present will load user-defined scripts from the ETPro directory.  It also provides an &amp;quot;et&amp;quot; library of function calls for Lua that allow access to the server engine, and provides callbacks so a server side mod may trigger on specific server events.&lt;br /&gt;
&lt;br /&gt;
The following standard Lua libraries are initialized by default and available to ETPro Lua scripts:&lt;br /&gt;
[http://www.lua.org/manual/5.0/manual.html#5.1 basic], [http://www.lua.org/manual/5.0/manual.html#5.4 table], [http://www.lua.org/manual/5.0/manual.html#5.6 i/o], [http://www.lua.org/manual/5.0/manual.html#5.7 os] (available features vary depending on your OS), [http://www.lua.org/manual/5.0/manual.html#5.3 string], [http://www.lua.org/manual/5.0/manual.html#5.5 math].&lt;br /&gt;
&lt;br /&gt;
A list of ETPro mods can be found [[:Category:ETPro:Mods|here]].&lt;br /&gt;
&lt;br /&gt;
A tutorial about ETPro Lua scripting can be found [[Lua Tutorials|here]].&lt;br /&gt;
&lt;br /&gt;
API requests can be discussed at the [[Talk:Lua_Mod_API|Lua Mod API talk page]].&lt;br /&gt;
&lt;br /&gt;
==client commands==&lt;br /&gt;
===lua_status===&lt;br /&gt;
:lists all currently loaded lua modules.&lt;br /&gt;
:&#039;&#039;lua mods cannot override this client command.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==server commands==&lt;br /&gt;
===lua_status===&lt;br /&gt;
:lists all currently loaded lua modules.&lt;br /&gt;
&lt;br /&gt;
==cvars==&lt;br /&gt;
===lua_modules===&lt;br /&gt;
:(default &amp;quot;&amp;quot;, disabled)&lt;br /&gt;
:space separated list of lua modules for ETPro to load. modules will be run in the order listed.&lt;br /&gt;
&lt;br /&gt;
===lua_allowedmodules===&lt;br /&gt;
:(default &amp;quot;&amp;quot;, disabled)&lt;br /&gt;
:if set, only lua modules with the matching sha1 signatures listed in this cvar will be allowed to load.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:changing either cvar will cause all currently loaded modules to :quit and be unloaded until the next map_restart.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==et library calls==&lt;br /&gt;
&lt;br /&gt;
===modules===&lt;br /&gt;
et.RegisterModname( &#039;&#039;&#039;modname&#039;&#039;&#039; )&lt;br /&gt;
:Registers a descriptive string &#039;&#039;&#039;modname&#039;&#039;&#039; for this mod.&lt;br /&gt;
&#039;&#039;&#039;vmnumber&#039;&#039;&#039; = et.FindSelf()&lt;br /&gt;
:Returns a number indicating the VM slot the current mod is loaded into.&lt;br /&gt;
&#039;&#039;&#039;modname&#039;&#039;&#039;, &#039;&#039;&#039;signature&#039;&#039;&#039; = et.FindMod( &#039;&#039;&#039;vmnumber&#039;&#039;&#039; )&lt;br /&gt;
:Returns the &#039;&#039;&#039;modname&#039;&#039;&#039; and sha1 &#039;&#039;&#039;signature&#039;&#039;&#039; for the mod loaded in the VM slot &#039;&#039;&#039;vmnumber&#039;&#039;&#039;. Returns nil, nil if the VM slot is invalid.&lt;br /&gt;
&#039;&#039;&#039;success&#039;&#039;&#039; = et.IPCSend( &#039;&#039;&#039;vmnumber&#039;&#039;&#039;, &#039;&#039;&#039;message&#039;&#039;&#039; )&lt;br /&gt;
:Sends the string &#039;&#039;&#039;message&#039;&#039;&#039; to the mod in the VM slot indicated by &#039;&#039;&#039;vmnumber&#039;&#039;&#039;. The mod receiving &#039;&#039;&#039;message&#039;&#039;&#039; must have an &#039;&#039;et_IPCReceive()&#039;&#039; callback. If the message is successfully sent, &#039;&#039;&#039;success&#039;&#039;&#039; will be 1. On failure it will be 0.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===printing===&lt;br /&gt;
et.G_Print( &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Prints the string &#039;&#039;&#039;text&#039;&#039;&#039; to the server console.&lt;br /&gt;
et.G_LogPrint( &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Prints the string &#039;&#039;&#039;text&#039;&#039;&#039; to the server console and writes it to the server log.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===argument handling===&lt;br /&gt;
These functions are to be used within the [[#commands|command callback functions]].&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;args&#039;&#039;&#039; = et.ConcatArgs( &#039;&#039;&#039;index&#039;&#039;&#039; )&lt;br /&gt;
:Returns all arguments beginning from &#039;&#039;&#039;index&#039;&#039;&#039; concatenated into a single string &#039;&#039;&#039;args&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;argcount&#039;&#039;&#039; = et.trap_Argc()&lt;br /&gt;
:Returns a number indicating the number of command line arguments in the command buffer.&lt;br /&gt;
&#039;&#039;&#039;arg&#039;&#039;&#039; = et.trap_Argv( &#039;&#039;&#039;argnum&#039;&#039;&#039; )&lt;br /&gt;
:Returns the contents of the command line argument &#039;&#039;&#039;argnum&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===cvars===&lt;br /&gt;
&#039;&#039;&#039;cvarvalue&#039;&#039;&#039; = et.trap_Cvar_Get( &#039;&#039;&#039;cvarname&#039;&#039;&#039; )&lt;br /&gt;
:Returns the value of the cvar &#039;&#039;&#039;cvarname&#039;&#039;&#039; as a string. If there is no cvar named &#039;&#039;&#039;cvarname&#039;&#039;&#039;, returns a zero length string. &lt;br /&gt;
et.trap_Cvar_Set( &#039;&#039;&#039;cvarname&#039;&#039;&#039;, &#039;&#039;&#039;cvarvalue&#039;&#039;&#039; )&lt;br /&gt;
:Sets the cvar &#039;&#039;&#039;cvarname&#039;&#039;&#039; to &#039;&#039;&#039;cvarvalue&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===configstrings===&lt;br /&gt;
&#039;&#039;&#039;configstringvalue&#039;&#039;&#039; = et.trap_GetConfigstring( &#039;&#039;&#039;index&#039;&#039;&#039; )&lt;br /&gt;
:Returns the string &#039;&#039;&#039;configstringvalue&#039;&#039;&#039; containing the contents of the configstring &#039;&#039;&#039;index&#039;&#039;&#039;&lt;br /&gt;
et.trap_SetConfigstring( &#039;&#039;&#039;index&#039;&#039;&#039;, &#039;&#039;&#039;configstringvalue&#039;&#039;&#039; )&lt;br /&gt;
:Sets the configstring &#039;&#039;&#039;index&#039;&#039;&#039; to the string &#039;&#039;&#039;configstringvalue&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===server===&lt;br /&gt;
et.trap_SendConsoleCommand( &#039;&#039;&#039;when&#039;&#039;&#039;, &#039;&#039;&#039;command&#039;&#039;&#039; )&lt;br /&gt;
:Sends the command &#039;&#039;&#039;command&#039;&#039;&#039; to the server console, to be executed &#039;&#039;&#039;when&#039;&#039;&#039; (see et.EXEC_* constants)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===clients===&lt;br /&gt;
et.trap_DropClient( &#039;&#039;&#039;clientnum&#039;&#039;&#039;, &#039;&#039;&#039;reason&#039;&#039;&#039;, &#039;&#039;&#039;ban_time&#039;&#039;&#039; )&lt;br /&gt;
:Disconnects &#039;&#039;&#039;clientnum&#039;&#039;&#039; from the server, with descriptive string &#039;&#039;&#039;reason&#039;&#039;&#039; reported to clients. &#039;&#039;&#039;ban_time&#039;&#039;&#039; is the time in seconds to ban the client from the server. &#039;&#039;&#039;ban_time&#039;&#039;&#039; is optional and may be entirely omitted, in which case the ban time defaults to the cvar &#039;&#039;b_defaultbantime&#039;&#039;&lt;br /&gt;
et.trap_SendServerCommand( &#039;&#039;&#039;clientnum&#039;&#039;&#039;, &#039;&#039;&#039;[[SendServerCommand|command]]&#039;&#039;&#039; )&lt;br /&gt;
:Sends the command &#039;&#039;&#039;[[SendServerCommand|command]]&#039;&#039;&#039; to the client &#039;&#039;&#039;clientnum&#039;&#039;&#039;. If &#039;&#039;&#039;clientnum&#039;&#039;&#039; is -1, the &#039;&#039;&#039;[[SendServerCommand|command]]&#039;&#039;&#039; is broadcast to all connected clients.&lt;br /&gt;
et.G_Say( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;mode&#039;&#039;&#039;, &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Sends a chat command on behalf of client &#039;&#039;&#039;clientNum&#039;&#039;&#039; with the mode &#039;&#039;&#039;mode&#039;&#039;&#039; (see et.SAY_* constants) and chat text &#039;&#039;&#039;text&#039;&#039;&#039;.&lt;br /&gt;
et.ClientUserinfoChanged( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Loads the new [[Userinfo]] of &#039;&#039;&#039;clientNum&#039;&#039;&#039; and stores it in the configstring and client variables&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===userinfo===&lt;br /&gt;
&#039;&#039;&#039;userinfo&#039;&#039;&#039; = et.trap_GetUserinfo( &#039;&#039;&#039;clientnum&#039;&#039;&#039; )&lt;br /&gt;
:Returns the contents of the [[Userinfo]] string for the client &#039;&#039;&#039;clientnum&#039;&#039;&#039;&lt;br /&gt;
et.trap_SetUserinfo( &#039;&#039;&#039;clientnum&#039;&#039;&#039;, &#039;&#039;&#039;userinfo&#039;&#039;&#039; )&lt;br /&gt;
:Sets the [[Userinfo]] string for the client &#039;&#039;&#039;clientnum&#039;&#039;&#039; to &#039;&#039;&#039;userinfo&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===string utility functions===&lt;br /&gt;
&#039;&#039;&#039;infostring&#039;&#039;&#039; = et.Info_RemoveKey( &#039;&#039;&#039;infostring&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039; )&lt;br /&gt;
:Removes key &#039;&#039;&#039;key&#039;&#039;&#039; from infostring &#039;&#039;&#039;infostring&#039;&#039;&#039; and returns the modified infostring.&lt;br /&gt;
&#039;&#039;&#039;infostring&#039;&#039;&#039; = et.Info_SetValueForKey( &#039;&#039;&#039;infostring&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039;, &#039;&#039;&#039;value&#039;&#039;&#039; )&lt;br /&gt;
:Sets the key &#039;&#039;&#039;key&#039;&#039;&#039; in the infostring &#039;&#039;&#039;infostring&#039;&#039;&#039; to &#039;&#039;&#039;value&#039;&#039;&#039; and returns the modified infostring. If &#039;&#039;&#039;value&#039;&#039;&#039; is an empty string, &#039;&#039;&#039;key&#039;&#039;&#039; is removed from the string. &lt;br /&gt;
&#039;&#039;&#039;keyvalue&#039;&#039;&#039; = et.Info_ValueForKey( &#039;&#039;&#039;infostring&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039; )&lt;br /&gt;
:Returns the value of the key &#039;&#039;&#039;key&#039;&#039;&#039; in the infostring &#039;&#039;&#039;infostring&#039;&#039;&#039;. If &#039;&#039;&#039;key&#039;&#039;&#039; is not present in the string, an empty string is returned.&lt;br /&gt;
&#039;&#039;&#039;cleanstring&#039;&#039;&#039; = et.Q_CleanStr( &#039;&#039;&#039;string&#039;&#039;&#039; )&lt;br /&gt;
:Returns &#039;&#039;&#039;string&#039;&#039;&#039; stripped of all color codes&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ET filesystem===&lt;br /&gt;
&#039;&#039;&#039;fd&#039;&#039;&#039;, &#039;&#039;&#039;len&#039;&#039;&#039; = et.trap_FS_FOpenFile( &#039;&#039;&#039;filename&#039;&#039;&#039;, &#039;&#039;&#039;mode&#039;&#039;&#039; )&lt;br /&gt;
:Attempts to open the file &#039;&#039;&#039;filename&#039;&#039;&#039; with the access mode &#039;&#039;&#039;mode&#039;&#039;&#039; (see et.FS_ constants). Returns the filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039; and file length &#039;&#039;&#039;len&#039;&#039;&#039;. On error, &#039;&#039;&#039;len&#039;&#039;&#039; returns -1.&lt;br /&gt;
&#039;&#039;&#039;filedata&#039;&#039;&#039; = et.trap_FS_Read( fd, count )&lt;br /&gt;
:Reads &#039;&#039;&#039;count&#039;&#039;&#039; bytes from filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;count&#039;&#039;&#039; = et.trap_FS_Write( &#039;&#039;&#039;filedata&#039;&#039;&#039;, &#039;&#039;&#039;count&#039;&#039;&#039;, &#039;&#039;&#039;fd&#039;&#039;&#039; )&lt;br /&gt;
:Attempts to write &#039;&#039;&#039;count&#039;&#039;&#039; bytes of &#039;&#039;&#039;filedata&#039;&#039;&#039; to filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039;. Returns number of bytes successfully written.&lt;br /&gt;
et.trap_FS_Rename( &#039;&#039;&#039;oldname&#039;&#039;&#039;, &#039;&#039;&#039;newname&#039;&#039;&#039; )&lt;br /&gt;
:Renames file &#039;&#039;&#039;oldname&#039;&#039;&#039; to &#039;&#039;&#039;newname&#039;&#039;&#039;.&lt;br /&gt;
et.trap_FS_FCloseFile( &#039;&#039;&#039;fd&#039;&#039;&#039; )&lt;br /&gt;
:Closes filedescriptor &#039;&#039;&#039;fd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===indexes===&lt;br /&gt;
&#039;&#039;&#039;soundindex&#039;&#039;&#039; = et.G_SoundIndex( &#039;&#039;&#039;filename&#039;&#039;&#039; )&lt;br /&gt;
:Returns an index to the soundfile indicated by &#039;&#039;&#039;filename&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;modelindex&#039;&#039;&#039; = et.G_ModelIndex( &#039;&#039;&#039;filename&#039;&#039;&#039; )&lt;br /&gt;
:Returns an index to the model indicated by &#039;&#039;&#039;filename&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===sound===&lt;br /&gt;
et.G_globalSound( &#039;&#039;&#039;sound&#039;&#039;&#039; )&lt;br /&gt;
:Plays the global sound indicated by the filename &#039;&#039;&#039;sound&#039;&#039;&#039;.&lt;br /&gt;
et.G_Sound( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;soundindex&#039;&#039;&#039; )&lt;br /&gt;
:Plays the sound &#039;&#039;&#039;soundindex&#039;&#039;&#039; at the location of entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===miscellaneous===&lt;br /&gt;
&#039;&#039;&#039;milliseconds&#039;&#039;&#039; = et.trap_Milliseconds()&lt;br /&gt;
:Returns a number indicating the current server time in milliseconds.&lt;br /&gt;
et.G_Damage( &#039;&#039;&#039;target&#039;&#039;&#039;, &#039;&#039;&#039;inflictor&#039;&#039;&#039;, &#039;&#039;&#039;attacker&#039;&#039;&#039;, &#039;&#039;&#039;damage&#039;&#039;&#039;, &#039;&#039;&#039;[[etdamage|dflags]]&#039;&#039;&#039;, &#039;&#039;&#039;[[etdamage|mod]]&#039;&#039;&#039; )&lt;br /&gt;
:Does &#039;&#039;&#039;damage&#039;&#039;&#039; amount of damage on &#039;&#039;&#039;target&#039;&#039;&#039; inflicted by &#039;&#039;&#039;inflictor&#039;&#039;&#039; and cased by &#039;&#039;&#039;attacker&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;target&#039;&#039;&#039;, &#039;&#039;&#039;inflictor&#039;&#039;&#039;, &#039;&#039;&#039;attacker&#039;&#039;&#039; are entity numbers&lt;br /&gt;
:&#039;&#039;&#039;[[etdamage|dflags]]&#039;&#039;&#039; is a [[Bitmask-cvar|bitflag]] number to decide how the damage is inflickted, see &#039;&#039;&#039;[[etdamage|dflags]]&#039;&#039;&#039; [[etdamage|flaglist]]&lt;br /&gt;
:&#039;&#039;&#039;[[etdamage|mod]]&#039;&#039;&#039; is a number from 0 up to 64 o set the type of damage, see &#039;&#039;&#039;[[etdamage|mod]]&#039;&#039;&#039; [[etdamage|list]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===entities===&lt;br /&gt;
&#039;&#039;&#039;entnum&#039;&#039;&#039; = et.G_Spawn()&lt;br /&gt;
:Spawns a new entity and returns the new entity number.&lt;br /&gt;
&#039;&#039;&#039;entnum&#039;&#039;&#039; = et.G_TempEntity( &#039;&#039;&#039;origin&#039;&#039;&#039;, &#039;&#039;&#039;event&#039;&#039;&#039; )&lt;br /&gt;
:Spawns a new TempEntity of event type &#039;&#039;&#039;event&#039;&#039;&#039; and places it at &#039;&#039;&#039;origin&#039;&#039;&#039; in the world.&lt;br /&gt;
:&#039;&#039;&#039;Warning:&#039;&#039;&#039; up to and including ETPro 3.2.4 the signature of the method is broken and expects four instead of two parameters. To successfully call it, you need to prepend the parameter list with two dummy parameters like et.G_TempEntity( 0, 0, origin, event ). Use this method with care, because in future ETPro versions it will probably be corrected to the one stated above and might break your script.&lt;br /&gt;
et.G_FreeEntity( &#039;&#039;&#039;entnum&#039;&#039;&#039; )&lt;br /&gt;
:Frees the entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;spawnval&#039;&#039;&#039; = et.G_GetSpawnVar( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039; )&lt;br /&gt;
:Returns the value of spawnvar &#039;&#039;&#039;key&#039;&#039;&#039; for entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
et.G_SetSpawnVar( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;key&#039;&#039;&#039;, &#039;&#039;&#039;value&#039;&#039;&#039; )&lt;br /&gt;
:Sets the spawnvar &#039;&#039;&#039;key&#039;&#039;&#039; to &#039;&#039;&#039;value&#039;&#039;&#039; for entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;integer entnum&#039;&#039;&#039; = et.G_SpawnGEntityFromSpawnVars( string spawnvar, string spawnvalue, ... )&lt;br /&gt;
:This function can only be called inside the &#039;&#039;&#039;et_InitGame&#039;&#039;&#039; callback&lt;br /&gt;
et.trap_LinkEntity( &#039;&#039;&#039;entnum&#039;&#039;&#039; )&lt;br /&gt;
:Links the entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
et.trap_UnlinkEntity( &#039;&#039;&#039;entnum&#039;&#039;&#039; )&lt;br /&gt;
:Unlinks the entity &#039;&#039;&#039;entnum&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;(variable)&#039;&#039;&#039; = et.gentity_get ( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039; &#039;&#039;,arrayindex&#039;&#039; )&lt;br /&gt;
:Gets the value of &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039; from entity &#039;&#039;&#039;entnum&#039;&#039;&#039; out of the g_entity struct. For NULL entities or clients, &#039;&#039;nil&#039;&#039; is returned.&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;arrayindex&#039;&#039; is used to specify which element of an array entity field to get. It is required when accessing array type fields. Entity field array indexes start at 0.&lt;br /&gt;
et.gentity_set( &#039;&#039;&#039;entnum&#039;&#039;&#039;, &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039;, &#039;&#039;arrayindex,&#039;&#039; &#039;&#039;&#039;(value)&#039;&#039;&#039; )&lt;br /&gt;
:Sets the value of &#039;&#039;&#039;[[Fieldname]]&#039;&#039;&#039; from entity &#039;&#039;&#039;entnum&#039;&#039;&#039; in the g_entity struct to &#039;&#039;&#039;(value)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;arrayindex&#039;&#039; is used to specify which element of an array entity field to set.&lt;br /&gt;
et.G_AddEvent( &#039;&#039;&#039;ent&#039;&#039;&#039;, &#039;&#039;&#039;event&#039;&#039;&#039;, &#039;&#039;&#039;eventparm&#039;&#039;&#039;&#039; )&lt;br /&gt;
:Adds event &#039;&#039;&#039;event&#039;&#039;&#039; whit eventparameter &#039;&#039;&#039;eventparm&#039;&#039;&#039;&#039; to entity &#039;&#039;&#039;ent&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==callbacks==&lt;br /&gt;
&lt;br /&gt;
===qagame execution===&lt;br /&gt;
et_InitGame( &#039;&#039;&#039;levelTime&#039;&#039;&#039;, &#039;&#039;&#039;randomSeed&#039;&#039;&#039;, &#039;&#039;&#039;restart&#039;&#039;&#039; )&lt;br /&gt;
:Called when qagame initializes. &#039;&#039;&#039;levelTime&#039;&#039;&#039; is the current level time in milliseconds. &#039;&#039;&#039;randomSeed&#039;&#039;&#039; is a number that can be used to seed random number generators. &#039;&#039;&#039;restart&#039;&#039;&#039; indicates if et_InitGame() is being called due to a map restart (1) or not (0).&lt;br /&gt;
et_ShutdownGame( &#039;&#039;&#039;restart&#039;&#039;&#039; )&lt;br /&gt;
:Called when qagame shuts down. &#039;&#039;&#039;restart&#039;&#039;&#039; indicates if the shutdown is being called due to a map_restart (1) or not (0).&lt;br /&gt;
et_RunFrame( &#039;&#039;&#039;levelTime&#039;&#039;&#039; )&lt;br /&gt;
:Called when qagame runs a server frame. &#039;&#039;&#039;levelTime&#039;&#039;&#039; is the current level time in milliseconds.&lt;br /&gt;
et_Quit()&lt;br /&gt;
:Called when ETPro unloads the mod. The mod should close all open filedescriptors and perform all cleanup.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===client management===&lt;br /&gt;
&#039;&#039;&#039;rejectreason&#039;&#039;&#039; = et_ClientConnect( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;firstTime&#039;&#039;&#039;, &#039;&#039;&#039;isBot&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client attempts to connect to the server. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id, &#039;&#039;&#039;firstTime&#039;&#039;&#039; indicates if this is a new connection (1) or a reconnection (0). &#039;&#039;&#039;isBot&#039;&#039;&#039; indicates if the client is a bot (1) or not (0). If the mod accepts the connection, it should return nil. Otherwise, the mod should return a string describing the reason the client connection was rejected.&lt;br /&gt;
et_ClientDisconnect( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client disconnects. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id.&lt;br /&gt;
et_ClientBegin( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client begins (becomes active, and enters the gameworld). &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id.&lt;br /&gt;
et_ClientUserinfoChanged( &#039;&#039;&#039;clientNum&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client&#039;s [[Userinfo]] string has changed. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id.&lt;br /&gt;
et_ClientSpawn( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;revived&#039;&#039;&#039; )&lt;br /&gt;
:Called when a client is spawned. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id. &#039;&#039;&#039;revived&#039;&#039;&#039; is 1 if the client was spawned by beeying revived.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===commands===&lt;br /&gt;
&#039;&#039;&#039;intercepted&#039;&#039;&#039; = et_ClientCommand( &#039;&#039;&#039;clientNum&#039;&#039;&#039;, &#039;&#039;&#039;command&#039;&#039;&#039; )&lt;br /&gt;
:Called when a command is received from a client. &#039;&#039;&#039;clientNum&#039;&#039;&#039; is the client slot id. &#039;&#039;&#039;command&#039;&#039;&#039; is the command. The mod should return 1 if the command was intercepted by the mod, and 0 if the command was ignored by the mod and should be passed through to the server (and other mods in the chain).&lt;br /&gt;
:The actual command can be accessed through the [[#argument_handling|argument handling]] functions, as seen in the [[ETPro:Lua Sample Code]].&lt;br /&gt;
&#039;&#039;&#039;intercepted&#039;&#039;&#039; = et_ConsoleCommand()&lt;br /&gt;
:Called when a command is entered on the server console. The mod should return 1 if the command was intercepted by the mod, and 0 if the command was ignored by the mod and should be passed through to the server (and other mods in the chain).&lt;br /&gt;
:The actual command can be accessed through the [[#argument_handling|argument handling]] functions, as seen in the [[ETPro:Lua Sample Code]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===xp===&lt;br /&gt;
et_UpgradeSkill( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039; )&lt;br /&gt;
:Called when client on slot &#039;&#039;&#039;cno&#039;&#039;&#039; gets an upgrade on skill &#039;&#039;&#039;skill&#039;&#039;&#039;. Return -1 to override (abort) the qagame function, anything else to &amp;quot;passthrough&amp;quot;. Callback may modify skills (or do anything else it wants) during passthrough. &lt;br /&gt;
et_SetPlayerSkill( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039; )&lt;br /&gt;
:Called when clients (on slot &#039;&#039;&#039;cno&#039;&#039;&#039;) skill level &#039;&#039;&#039;skill&#039;&#039;&#039; is set. Return -1 to override (abort) the qagame function, anything else to &amp;quot;passthrough&amp;quot;. Callback may modify skills (or do anything else it wants) during passthrough.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===miscellaneous===&lt;br /&gt;
et_IPCReceive( &#039;&#039;&#039;vmnumber&#039;&#039;&#039;, &#039;&#039;&#039;message&#039;&#039;&#039; )&lt;br /&gt;
:Called when another mod sends an et.IPCSend() message to this mod. &#039;&#039;&#039;vmnumber&#039;&#039;&#039; is the VM slot number of the sender, and &#039;&#039;&#039;message&#039;&#039;&#039; is the message.&lt;br /&gt;
et_Print( &#039;&#039;&#039;text&#039;&#039;&#039; )&lt;br /&gt;
:Called whenever the server or qagame prints a string to the console.&lt;br /&gt;
et_Obituary( &#039;&#039;&#039;victim&#039;&#039;&#039;, &#039;&#039;&#039;killer&#039;&#039;&#039;, &#039;&#039;&#039;meansOfDeath&#039;&#039;&#039; )&lt;br /&gt;
:Called whenever a player is killed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==predefined constants==&lt;br /&gt;
et.EXEC_NOW&amp;lt;br&amp;gt;&lt;br /&gt;
et.EXEC_INSERT&amp;lt;br&amp;gt;&lt;br /&gt;
et.EXEC_APPEND&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_READ&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_WRITE&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_APPEND&amp;lt;br&amp;gt;&lt;br /&gt;
et.FS_APPEND_SYNC&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_ALL&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_TEAM&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_BUDDY&amp;lt;br&amp;gt;&lt;br /&gt;
et.SAY_TEAMNL&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
et.HOSTARCH&lt;br /&gt;
:set to WIN32 or UNIX depending on the host architecture qagame is running on.&lt;br /&gt;
LUA_PATH&lt;br /&gt;
:set to fs_homepath/fs_game/?.lua in order to ease use of the [http://www.lua.org/pil/8.1.html require] function.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==configs==&lt;br /&gt;
If a config is loaded, all modules are shutdown and reloaded. If a &#039;&#039;certified&#039;&#039; config is loaded, all modules are shutdown and reloaded, and additionally the following functions are disabled: &#039;&#039;&#039;require()&#039;&#039;&#039;, &#039;&#039;&#039;loadfile()&#039;&#039;&#039;, &#039;&#039;&#039;loadlib()&#039;&#039;&#039;, &#039;&#039;&#039;loadstring()&#039;&#039;&#039;, &#039;&#039;&#039;dofile()&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==caveats==&lt;br /&gt;
Like qagame, lua modules are unloaded and reloaded on map_restart and map changes. This means that all global variables and other information is lost. Mods may choose to store persistent data in cvars or external files.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
&lt;br /&gt;
Q: OMG I hate the libary prefix et.* on everything!!11!1oneone&amp;lt;br&amp;gt;&lt;br /&gt;
A: table.foreach(et, function (func, value) _G[func] = value; end)&lt;br /&gt;
&lt;br /&gt;
Q: How do a reload my lua file without restarting the whole server?&amp;lt;br&amp;gt;&lt;br /&gt;
A: Change maps, use map_restart or reset_match&lt;br /&gt;
&lt;br /&gt;
Q: Can I see some sample code?&amp;lt;br&amp;gt;&lt;br /&gt;
A: [[ETPro:Lua Sample Code|Lua sample code]]&lt;br /&gt;
&lt;br /&gt;
Q: Is there a list of [[ETPro]] mods?&amp;lt;br&amp;gt;&lt;br /&gt;
A: Yes, [[:Category:ETPro:Mods|here]].&lt;br /&gt;
&lt;br /&gt;
Q: OMG my mod doesn&#039;t work!&amp;lt;br&amp;gt;&lt;br /&gt;
A: Make sure you added your mod&#039;s filename to the lua_modules cvar (e.g. set lua_modules mymod.lua).&lt;br /&gt;
&lt;br /&gt;
Q: OMG why has et_ClientSay been removed?&amp;lt;br&amp;gt;&lt;br /&gt;
A: Thats a secret but, to keep the function as it was, just add the following code to your et_ClientCommand() function&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;	-- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
	-- so here&#039;s a wrapper for that&lt;br /&gt;
		arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
		&lt;br /&gt;
		if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
		elseif arg0 == &amp;quot;say_team&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_TEAM, et.ConcatArgs(1))&lt;br /&gt;
		elseif arg0 == &amp;quot;say_buddy&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_BUDDY, et.ConcatArgs(1))&lt;br /&gt;
		elseif arg0 == &amp;quot;say_teamnl&amp;quot; then&lt;br /&gt;
			return et_ClientSay( clientNum, et.SAY_TEAMNL, et.ConcatArgs(1))&lt;br /&gt;
		end&lt;br /&gt;
	-- et_ClientSay wrapper end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Lua]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Network_Diagnostics&amp;diff=2620</id>
		<title>Network Diagnostics</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Network_Diagnostics&amp;diff=2620"/>
		<updated>2007-02-01T09:49:45Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you are having lag in game, seeing yellow, red or excessive spikes in the [[Lagometer]], experiencing long times in awaiting gamestate, or seeing [[AntiWarp]] triggered a lot in etpro, you can do some basic testing on your connection with &amp;lt;tt&amp;gt;ping&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;tracert&amp;lt;/tt&amp;gt;. The following examples use windows command names and options, linux is slightly different.&lt;br /&gt;
&lt;br /&gt;
First, tracert to somewhere (don&#039;t really matter, use the IP of an ET server you like to play on, or your ISPs website or google) like this, in a command prompt:&lt;br /&gt;
  tracert www.google.com&lt;br /&gt;
The output will be something like this:&lt;br /&gt;
  Tracing route to www.l.google.com [66.102.7.99]&lt;br /&gt;
  over a maximum of 30 hops:&lt;br /&gt;
    1    &amp;lt;1 ms    &amp;lt;1 ms    &amp;lt;1 ms  192.168.1.1 [192.168.1.1]&lt;br /&gt;
    2    14 ms    13 ms    13 ms  rdns.of.your.isp.gateway [1.2.3.4]&lt;br /&gt;
    3    13 ms    14 ms    13 ms  rdns.of.some.other.router[5.6.7.8]&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
The first hop (with the &amp;lt; 1ms ping times) either your router or modem. The next hop is usually the far end of your broadband line. If thing ping time of the second hop is also very low (&amp;lt;10ms) it is your modem, and the hop after that is the other end. Don&#039;t be alarmed if some of the later hops drop packets in tracert, as a fair number of routers drop these, even when they forward normal traffic without problems. In general, if one hop drops all packets, but the subsequent hops still work, it just means that particular device doesn&#039;t respond to tracert packets.&lt;br /&gt;
&lt;br /&gt;
To test your connection between you and your router, use:&lt;br /&gt;
  ping -n 100 -l 1000 &amp;lt;ip.of.your.router&amp;gt;&lt;br /&gt;
The -n 100 means to use 100 packets, and the -l 1000 means use 1000 byte packets (that&#039;s a lower case L). Larger packets are far more likely to show up line problems.&lt;br /&gt;
&lt;br /&gt;
This should give zero packet loss and &amp;lt;10ms pings. If it gives you packet loss, either your router sucks, your Ethernet cable is bad, or perhaps some setting for your Ethernet card is incompatible.&lt;br /&gt;
&lt;br /&gt;
To test your line (the connection from your house to your ISPs equipment), find the IP of the first hop that isn&#039;t your router or modem (i.e. the first one that has a &amp;gt;10ms time in the tracert output), and ping it with the same command. Any packet loss most likely indicates a problem (unless its 100%, in which case, it is likely that router is simply ignoring your pings). The pings times should be fairly steady if there is no other traffic on the line, typically in the range of 20-80 ms for DSL or cable with this packet size. If there is any significant packet loss, chances are you need to complain to your ISP. If there is significant variation (+/- 20% or more) and your line does not have other traffic on it, that may also indicate a problem.&lt;br /&gt;
&lt;br /&gt;
You can move on down the IPs listed in the tracert using the same method, if you want, however, if the problem is in a router that is more than a couple hops away, chances are it is a temporary issue, and you can&#039;t do much to get it fixed.&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Server_Configuration&amp;diff=2595</id>
		<title>Server Configuration</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Server_Configuration&amp;diff=2595"/>
		<updated>2007-01-07T04:54:08Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: tjw etded guide&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Installation==&lt;br /&gt;
File installation:&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;etpro&amp;lt;/tt&amp;gt; directory should be in the same directory as &amp;lt;tt&amp;gt;etmain&amp;lt;/tt&amp;gt;.  &amp;lt;i&amp;gt;Do &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; extract the files to etmain&amp;lt;/i&amp;gt;&lt;br /&gt;
:Linux:&lt;br /&gt;
Unzip the server archive to &amp;lt;tt&amp;gt;enemy-territory/etpro/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:Windows:&lt;br /&gt;
Unzip the server archive to &amp;lt;tt&amp;gt;Wolfenstein - Enemy Territory\etpro&amp;lt;/tt&amp;gt;&lt;br /&gt;
Starting an ETPro server requires &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt; to be appended to the end of the command line.&lt;br /&gt;
:Linux example:&lt;br /&gt;
::&amp;lt;tt&amp;gt;  ./etded +set fs_game etpro&amp;lt;/tt&amp;gt;&lt;br /&gt;
:Windows:&lt;br /&gt;
::&amp;lt;tt&amp;gt;  etded.exe +set fs_game etpro&amp;lt;/tt&amp;gt;&lt;br /&gt;
:Windows Shortcut:&lt;br /&gt;
::Right click on the shortcut for Enemy Territory and select &amp;quot;Properties.&amp;quot; In the &amp;quot;Target&amp;quot; Box (Top text box) add &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt; to the end, after the quotes.&lt;br /&gt;
::&amp;lt;tt&amp;gt;  &amp;quot;C:\Program Files\Wolfenstein - Enemy Territory\et.exe&amp;quot; +set fs_game etpro&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Starting from version ET 2.60, the Windows executables are et.exe for the game and etded.exe for the server. If you want to run a listen server on Windows start your game with et.exe, otherwise use etded.exe for a dedicated server.&lt;br /&gt;
&lt;br /&gt;
If you want to run 2.56 or earlier servers on Windows, you can only use et.exe and append &amp;lt;tt&amp;gt;+set dedicated 1&amp;lt;/tt&amp;gt; (or 2).&lt;br /&gt;
&lt;br /&gt;
==Warnings==&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;WARNING: Server improperly installed! Incorrect fs_game setting! Please notify administrator.&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:Incorrect &amp;lt;tt&amp;gt;+set fs_game&amp;lt;/tt&amp;gt; string.  Make sure it is set to &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;fs_game is write protected.&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:You must start your server via the command line (Or by changing the shortcut) with the &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt; command.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Client .pk3 missing!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:The PK3 file that is contained in the server install file is missing.  Download the [http://bani.anime.net/etpro/download.html server install] again and place the PK3 file in the server&#039;s ETPro directory.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Incorrect client .pk3 installed on server!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:The PK3 file mentioned above does not match the version of the server.  Download the PK3 (And possibly updated server) from the [http://bani.anime.net/etpro/download.html download page].&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Multiple client .pk3 versions installed on server!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:This means that the server has more than one ETPro client PK3.  Remove the older versions from the server&#039;s ETPro directory.&lt;br /&gt;
:This can also happen from having fs_game set twice in your shortcut or config.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Incorrect ET version!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:This happens when you are attempting to install ETPro on a non-patched ET server.  Download the [http://games.activision.com/games/wolfenstein patch] and try again.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Cvar dedicated is 0! Some features will break!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:ETPro is meant to be installed on a dedicated server.  Set the server to dedicated by using &amp;lt;tt&amp;gt;+set dedicated 2&amp;lt;/tt&amp;gt; in the command-line used to start the server.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;etpro_cheats.dat is corrupt or missing!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:The ETPro database file for positively identifying cheats has either been corrupted or does not exist on the server.  Download a recent version of [http://etpro.anime.net/etpro_cheats.dat the database].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Other Errors==&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Server sends users the ETPro PK3 file over and over.&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:If you are using download redirects, make sure that the download path is set correctly if changed between versions.  eg: If the old PK3 was in &amp;lt;tt&amp;gt;server/etpro2&amp;lt;/tt&amp;gt; and the new version is in &amp;lt;tt&amp;gt;server/etpro3&amp;lt;/tt&amp;gt; and the redirect path in the server configuration was not changed, it would send the old ETPro 2.x files; which not being what the server is using, it would cause the download to start again.&amp;lt;br&amp;gt;&lt;br /&gt;
:If you are redirecting to an http or ftp server, make sure the pk3 on the http/ftp server exactly matches the pk3 on the game server.&lt;br /&gt;
:Some http servers may incorrectly try to send pk3 files as text/plain, which will corrupt downloads. Make sure they are sent as application/octet-stream:&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;*WARNING*: PunkBuster Reports PB Server Running Old Version Cx.xxx&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Windows:&lt;br /&gt;
:Run &amp;lt;tt&amp;gt;\Wolfenstein - Enemy territory\pb\pbweb.exe&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Linux:&lt;br /&gt;
:Run &amp;lt;tt&amp;gt;/path_to_et_server/pb/pbweb.x86&amp;lt;/tt&amp;gt; (first chmod +x pbweb.x86)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tips for server admins==&lt;br /&gt;
In general, the ettv/etded process should be restarted every 20 days or less. If the server is running on windows, the OS should be restarted at the same time.&lt;br /&gt;
&lt;br /&gt;
Q: Why do my logs and console keep getting flooded with stuff like this:&lt;br /&gt;
saneClientCommand: 5 obj -1&lt;br /&gt;
&lt;br /&gt;
A: See [[ETPro:Server_cvar_list|b_showClientCmds]] in the server cvar list.&lt;br /&gt;
&lt;br /&gt;
Q: rcon stopped working&lt;br /&gt;
&lt;br /&gt;
A: Your server has been up for more than 49 days, you need to restart it. &lt;br /&gt;
&lt;br /&gt;
Q: All clients trying to connect to my ettv server get stuck awaiting gamestate, even though the network is fine.&lt;br /&gt;
&lt;br /&gt;
A: restart it.&lt;br /&gt;
==Configuration:==&lt;br /&gt;
[[:Category:ETPro:Server_Cvars|ETPro Server CVAR Explanations]]&lt;br /&gt;
&lt;br /&gt;
[[ETPro:Pluggable Config Files]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;[http://bani.anime.net/banimod/forums/viewforum.php?f=13 Server Admin Forums]&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://rtcw.jolt.co.uk/content/enemy_territory/server_guide/index.html DG&#039;s Advanced Server Guide]&lt;br /&gt;
&lt;br /&gt;
[http://et.d1p.de/etadmin_mod/wiki/index.php/User:Phats#Advanced_Campaign_Structure_-_Using_etadmin_mod____.28Prototype.29  Advanced Campaign Structure - Using etadmin_mod (Prototype)]&lt;br /&gt;
&lt;br /&gt;
[http://tjw.org/etded/ tjw&#039;s chrooted linux server guide]&lt;br /&gt;
[[Category:ETPro]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Server_Configuration&amp;diff=2594</id>
		<title>Server Configuration</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Server_Configuration&amp;diff=2594"/>
		<updated>2007-01-07T04:18:18Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: tips&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Installation==&lt;br /&gt;
File installation:&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;etpro&amp;lt;/tt&amp;gt; directory should be in the same directory as &amp;lt;tt&amp;gt;etmain&amp;lt;/tt&amp;gt;.  &amp;lt;i&amp;gt;Do &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; extract the files to etmain&amp;lt;/i&amp;gt;&lt;br /&gt;
:Linux:&lt;br /&gt;
Unzip the server archive to &amp;lt;tt&amp;gt;enemy-territory/etpro/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:Windows:&lt;br /&gt;
Unzip the server archive to &amp;lt;tt&amp;gt;Wolfenstein - Enemy Territory\etpro&amp;lt;/tt&amp;gt;&lt;br /&gt;
Starting an ETPro server requires &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt; to be appended to the end of the command line.&lt;br /&gt;
:Linux example:&lt;br /&gt;
::&amp;lt;tt&amp;gt;  ./etded +set fs_game etpro&amp;lt;/tt&amp;gt;&lt;br /&gt;
:Windows:&lt;br /&gt;
::&amp;lt;tt&amp;gt;  etded.exe +set fs_game etpro&amp;lt;/tt&amp;gt;&lt;br /&gt;
:Windows Shortcut:&lt;br /&gt;
::Right click on the shortcut for Enemy Territory and select &amp;quot;Properties.&amp;quot; In the &amp;quot;Target&amp;quot; Box (Top text box) add &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt; to the end, after the quotes.&lt;br /&gt;
::&amp;lt;tt&amp;gt;  &amp;quot;C:\Program Files\Wolfenstein - Enemy Territory\et.exe&amp;quot; +set fs_game etpro&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: Starting from version ET 2.60, the Windows executables are et.exe for the game and etded.exe for the server. If you want to run a listen server on Windows start your game with et.exe, otherwise use etded.exe for a dedicated server.&lt;br /&gt;
&lt;br /&gt;
If you want to run 2.56 or earlier servers on Windows, you can only use et.exe and append &amp;lt;tt&amp;gt;+set dedicated 1&amp;lt;/tt&amp;gt; (or 2).&lt;br /&gt;
&lt;br /&gt;
==Warnings==&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;WARNING: Server improperly installed! Incorrect fs_game setting! Please notify administrator.&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:Incorrect &amp;lt;tt&amp;gt;+set fs_game&amp;lt;/tt&amp;gt; string.  Make sure it is set to &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;fs_game is write protected.&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:You must start your server via the command line (Or by changing the shortcut) with the &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt; command.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Client .pk3 missing!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:The PK3 file that is contained in the server install file is missing.  Download the [http://bani.anime.net/etpro/download.html server install] again and place the PK3 file in the server&#039;s ETPro directory.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Incorrect client .pk3 installed on server!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:The PK3 file mentioned above does not match the version of the server.  Download the PK3 (And possibly updated server) from the [http://bani.anime.net/etpro/download.html download page].&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Multiple client .pk3 versions installed on server!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:This means that the server has more than one ETPro client PK3.  Remove the older versions from the server&#039;s ETPro directory.&lt;br /&gt;
:This can also happen from having fs_game set twice in your shortcut or config.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Incorrect ET version!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:This happens when you are attempting to install ETPro on a non-patched ET server.  Download the [http://games.activision.com/games/wolfenstein patch] and try again.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Cvar dedicated is 0! Some features will break!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:ETPro is meant to be installed on a dedicated server.  Set the server to dedicated by using &amp;lt;tt&amp;gt;+set dedicated 2&amp;lt;/tt&amp;gt; in the command-line used to start the server.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;etpro_cheats.dat is corrupt or missing!&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
:The ETPro database file for positively identifying cheats has either been corrupted or does not exist on the server.  Download a recent version of [http://etpro.anime.net/etpro_cheats.dat the database].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Other Errors==&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Server sends users the ETPro PK3 file over and over.&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:If you are using download redirects, make sure that the download path is set correctly if changed between versions.  eg: If the old PK3 was in &amp;lt;tt&amp;gt;server/etpro2&amp;lt;/tt&amp;gt; and the new version is in &amp;lt;tt&amp;gt;server/etpro3&amp;lt;/tt&amp;gt; and the redirect path in the server configuration was not changed, it would send the old ETPro 2.x files; which not being what the server is using, it would cause the download to start again.&amp;lt;br&amp;gt;&lt;br /&gt;
:If you are redirecting to an http or ftp server, make sure the pk3 on the http/ftp server exactly matches the pk3 on the game server.&lt;br /&gt;
:Some http servers may incorrectly try to send pk3 files as text/plain, which will corrupt downloads. Make sure they are sent as application/octet-stream:&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;*WARNING*: PunkBuster Reports PB Server Running Old Version Cx.xxx&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Windows:&lt;br /&gt;
:Run &amp;lt;tt&amp;gt;\Wolfenstein - Enemy territory\pb\pbweb.exe&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Linux:&lt;br /&gt;
:Run &amp;lt;tt&amp;gt;/path_to_et_server/pb/pbweb.x86&amp;lt;/tt&amp;gt; (first chmod +x pbweb.x86)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tips for server admins==&lt;br /&gt;
In general, the ettv/etded process should be restarted every 20 days or less. If the server is running on windows, the OS should be restarted at the same time.&lt;br /&gt;
&lt;br /&gt;
Q: Why do my logs and console keep getting flooded with stuff like this:&lt;br /&gt;
saneClientCommand: 5 obj -1&lt;br /&gt;
&lt;br /&gt;
A: See [[ETPro:Server_cvar_list|b_showClientCmds]] in the server cvar list.&lt;br /&gt;
&lt;br /&gt;
Q: rcon stopped working&lt;br /&gt;
&lt;br /&gt;
A: Your server has been up for more than 49 days, you need to restart it. &lt;br /&gt;
&lt;br /&gt;
Q: All clients trying to connect to my ettv server get stuck awaiting gamestate, even though the network is fine.&lt;br /&gt;
&lt;br /&gt;
A: restart it.&lt;br /&gt;
==Configuration:==&lt;br /&gt;
[[:Category:ETPro:Server_Cvars|ETPro Server CVAR Explanations]]&lt;br /&gt;
&lt;br /&gt;
[[ETPro:Pluggable Config Files]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;[http://bani.anime.net/banimod/forums/viewforum.php?f=13 Server Admin Forums]&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://rtcw.jolt.co.uk/content/enemy_territory/server_guide/index.html DG&#039;s Advanced Server Guide]&lt;br /&gt;
&lt;br /&gt;
[http://et.d1p.de/etadmin_mod/wiki/index.php/User:Phats#Advanced_Campaign_Structure_-_Using_etadmin_mod____.28Prototype.29  Advanced Campaign Structure - Using etadmin_mod (Prototype)]&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=ETTVd&amp;diff=2593</id>
		<title>ETTVd</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=ETTVd&amp;diff=2593"/>
		<updated>2007-01-07T01:33:36Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: disclaimer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table width=&amp;quot;98%&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #AAAAAA; padding:0em 1em 1em 1em; background-color:#F9F9F9;&amp;quot;&amp;gt;http://arni.name/etpro/ettvd_small.png&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:10px;&amp;quot;&amp;gt;logo kindly provided by conr4d&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ETTVd is a control daemon for ETTV servers and manages your live broadcasts, demos and and replays. It&#039;s completely written in PHP. &amp;lt;br&amp;gt;&#039;&#039;&#039;note:&#039;&#039;&#039; ETTVd is not developed or supported by the ETTV/ETPro team. Questions or comments should be directed to the ETTVd authors.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;margin-right:10px; margin-top:5px; border:1px solid #AAAAAA; padding:0em 0em 0em 1em; background-color:#F9F9F9;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[http://arni.name/etpro/ETTVd_2.02.zip ETTVd v2.02]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[http://eicher.homelinux.com/ettvd/ETTVd_b2.01.zip Mirror 1] (Eicher) (b2.01)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;[http://eraser.homelinux.com/kai/etpro/ETTVd_b2.tar Mirror 2] (engee) (b2.00)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://arni.name/etpro/screenshots/ Screenshots] (Webinterface)&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;margin-top:10px; margin-right:10px; padding:0em 0em 0em 1em; border:1px solid #AAAAAA; background-color:#F9F9F9;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Quicklinks:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* [[ETTVd:commands]]&lt;br /&gt;
* [[ETTVd:Readme]]&lt;br /&gt;
* [[Requirements]]&lt;br /&gt;
* [[ETTVd:Known_Bugs]]&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;margin-top:5px; border:1px solid #AAAAAA; padding:0em 1em 1em 1em; background-color:#F9F9F9;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Feature Summary:&#039;&#039;&#039; ([[Features|entire list]])&lt;br /&gt;
* Replay of recorded games&lt;br /&gt;
* Multiple broadcast servers showing the same or different games in Live, Semi-Live or Replay mode.&lt;br /&gt;
* Announcer for next game, current game both ingame and in sv_hostname&lt;br /&gt;
* Spam protection with a sticky mute system (/reconnect doesnt help)&lt;br /&gt;
* Display of intermediate maptimes&lt;br /&gt;
* Ingame admin commands !mute, !kick, !reclist, etc&lt;br /&gt;
* Simultanious recording of as many games as you want (limited by cpu/ram)&lt;br /&gt;
* Constantly maintaining the correct ettv_delay&lt;br /&gt;
* Start of recording when enough players are ready&lt;br /&gt;
* Recording pause when players leave the server&lt;br /&gt;
* Disconnect from matchserver after timeout&lt;br /&gt;
* Fully painless matchserver crash recovery&lt;br /&gt;
* Recovery of all sorts of ettv broadcaster crashes (replayers continue where they crashed)&lt;br /&gt;
* Complete demo management for archiving&lt;br /&gt;
* Replay Playlists or playing specific games again&lt;br /&gt;
* Maximum recorders, replayers, slots that can be spawned from the control interface&lt;br /&gt;
* A fully featured webinterface (by skooli)&lt;br /&gt;
* Most settings configurable in a single file&lt;br /&gt;
* ETTVoD ready&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=AntiWarp&amp;diff=2577</id>
		<title>AntiWarp</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=AntiWarp&amp;diff=2577"/>
		<updated>2006-12-11T06:13:11Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Controlling the antiwarp system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ET Pro implements an antiwarp system to keep players from &amp;quot;warping&amp;quot; or &amp;quot;teleporting&amp;quot; around, accidentally or intentionally.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Controlling the antiwarp system ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b_antiwarp&#039;&#039;&#039; is a server cvar which controls the antiwarp system. The possible settings are:&lt;br /&gt;
&amp;lt;pre&amp;gt;0 - disabled. ET Pro does no antiwarp at all.&lt;br /&gt;
1 - enabled (default). ET Pro keeps players from &amp;quot;warping&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is &amp;quot;warping&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Warping&amp;quot; occurs when the server receives several new commands for a player in a very short period of time. This happens because packets from the player were lost or never sent. The player will appear to cross a great distance in a very short period of time, making them hard to hit and possibly allowing them to avoid landmine damage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How the antiwarp system keeps players from warping ==&lt;br /&gt;
&lt;br /&gt;
The antiwarp system in ET Pro delays commands when they are received too quickly. Thus, when a player sends 700ms worth of commands in 50ms, the commands will be spread out over 700ms, causing the player to move smoothly to other players. This affects the player who sent the commands too quickly only by increasing their ping, and will not keep increasing ping endlessly - at maximum, the added ping is the highest ping the player is actually getting. If temporary network issues cause ping to increase beyond a sensible number, the player can stand still for a moment and their ping will normalize.&lt;br /&gt;
&lt;br /&gt;
== Antiwarp on the lagometer ==&lt;br /&gt;
If antiwarp is triggered, it shows up on the [[Lagometer]] as a translucent green like this. The drop at the end shows how the added lag of antiwarp drops off if you stop for a moment.&lt;br /&gt;
&lt;br /&gt;
http://www.collectivecomputing.com/~reed/et/etss/lagometer-antiwarp.jpg&lt;br /&gt;
[[Category:ETPro:Server_Cvars]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2575</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2575"/>
		<updated>2006-12-07T01:14:24Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Fields for the next release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- getUserEguid(cno) - get a client&#039;s etpro guid?&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6279 fixed.]--[[User:Bani|Bani]] 17:56, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
trap sen server cmd is a ET engine trap the comand u send it send to the client and recived as a server command no a client command&lt;br /&gt;
&lt;br /&gt;
to add ill well that would be al ot of coding for not much [[User:=FF=im2good4u|=FF=Im2good4u]] 12:12, 20 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
aight thnx.&amp;lt;br&amp;gt;&lt;br /&gt;
heres another api request, i&#039;d like to be able to get a clients xp directly. et.gentity_get(cno, &amp;quot;sess.game_points&amp;quot;) seems to return 0 always (?)&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 15:38, 21 December 2005 (PST)&lt;br /&gt;
:oh nevermind, i see this can be done now with xp = et.gentity_get(cno, &amp;quot;ps.stats&amp;quot;, 8)&lt;br /&gt;
:nice... --[[User:Hadr0|Hadr0]] 16:58, 23 December 2005 (PST)&lt;br /&gt;
--------&lt;br /&gt;
add a way to determine if a client is 999, and if possible why he&#039;s 999 (loading, connecting, loosing packets, etc)&amp;lt;br&amp;gt;&lt;br /&gt;
--Gotenks&lt;br /&gt;
&lt;br /&gt;
999 means: server has not been sent data from client for &amp;gt; 1000 ms. So there is no way to certainly tell why.&lt;br /&gt;
The timeoutflag is stored in the pmflags IIRC. Don&#039;t know if lua can read them right now. --[[User:Deus|Deus]] 23:12, 22 December 2005 (PST)&amp;lt;br&amp;gt;&lt;br /&gt;
Still would like access to the ping, or a dummy variable if they are 999, but also the ammount of time they are inactive.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Gotenks|Gotenks]] (Sorry for double post) 1:53, 31 December 2005 (CST)&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6291 fixed].--[[User:Bani|Bani]] 02:40, 7 February 2006 (PST)&lt;br /&gt;
----&lt;br /&gt;
Access to weapon stats during game similar to end of round stats that are displayed.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:LethalInjection|LethalInjection]] 23:52, 22 December 2005 (PST)&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6291 fixed].--[[User:Bani|Bani]] 02:40, 7 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
bani i need a console print function on the client that does sepport ascii plz [[User:=FF=im2good4u|=FF=Im2good4u]] 12:49, 12 January 2006 (PST)&lt;br /&gt;
:et.trap_SendServerCommand( clientnum, &amp;quot;print \&amp;quot;hello ascii console on the client\n\&amp;quot; ) ) --[[User:Bani|Bani]] 22:33, 15 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
bani: how about a et_sound(id, sound) event? [[User:gotenks|gotenks]] 20:45, 17 January 2006 (CST)&lt;br /&gt;
:[http://wolfwiki.anime.net/index.php/ETPro:Lua_Mod_API#sound et.G_Sound( entnum, soundindex )] --[[User:Bani|Bani]] 22:07, 18 January 2006 (PST)&lt;br /&gt;
:bani, i was referring to an on event call, so when a sound is played et_sound(id,sound) would be called.[[User:gotenks|gotenks]] 21:45, 20 January 2006 (CST)&lt;br /&gt;
::most sounds are clientside... this would not be of much use. --[[User:Bani|Bani]] 04:42, 22 January 2006 (PST)&lt;br /&gt;
:::except for checking when something like a killing spree sound is activated--[[User:gotenks|gotenks]] 07:54, 23 January 2006 (CST)&lt;br /&gt;
:::::There would be no way for you to know what sound was activated. You can&#039;t get a filename from the soundindex.--[[User:Bani|Bani]] 10:19, 24 January 2006 (PST)&lt;br /&gt;
:::::This is a case where IPCSend/IPCReceive would be useful, so mods can notify each other of specific events.--[[User:Bani|Bani]] 02:40, 7 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
Is it possible to get a player&#039;s live angles? Fieldname &amp;quot;s.angles&amp;quot; only gives the spawn angles. Tried &amp;quot;rotate&amp;quot;, &amp;quot;s.angles2&amp;quot;, &amp;quot;TargetAngles&amp;quot;, &amp;quot;r.currentAngles&amp;quot; as well but they just give 0.000000 for each element. thanks for any help --[[User:Hadr0|Hadr0]] 01:35, 25 January 2006 (PST)&lt;br /&gt;
:This will be fixed in the next release, where you will get access to ps.viewangles--[[User:Bani|Bani]] 02:33, 7 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Would it be possible to set the player&#039;s liveangle?Just like setting one&#039;s position(origin).I would also like to set player&#039;s velocities(maybe a vec3 field), &#039;speed&#039; is not working.  --[[User:Kotoko|Kotoko]] 06:06, 26 May 2006 (PDT)&lt;br /&gt;
:viewangles is what you want --[[User:ReyalP|ReyalP]] 14:00, 26 May 2006 (PDT)&lt;br /&gt;
Seems i get it ..It WILL BE AVAILABLE at NEXT release ..not now .. right?-_-  [[User:Kotoko|Kotoko]] 22:49, 26 May 2006 (PDT)&lt;br /&gt;
:I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: please give access to fieldname &#039;s.eventParm&#039;. --[[User:Pdi|pdi]] 01:52, 6 July 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
----&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Client_Configuration&amp;diff=2554</id>
		<title>Client Configuration</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Client_Configuration&amp;diff=2554"/>
		<updated>2006-11-22T02:36:19Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Warnings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Client Side Install==&lt;br /&gt;
;To play ETPro online&lt;br /&gt;
Simply connect to an ETPro server with downloads enabled on your client.&amp;lt;br&amp;gt;&lt;br /&gt;
;To host your own game&lt;br /&gt;
Download the desired ETPro .zip from the [http://etpro.anime.net/download.html ETPro download page] and unzip it into your ET directory, then start ET with fs_game set as described below.&amp;lt;br&amp;gt;&lt;br /&gt;
For additional information see the [http://wolfwiki.anime.net/index.php/ETPro:Server_Configuration Server Configuration page]&lt;br /&gt;
;To play demos&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open the [http://bani.anime.net/etpro/download.html PK3] in a program that can handle &amp;lt;tt&amp;gt;zip&amp;lt;/tt&amp;gt; files. Extract the following files to the ETPro directory:&lt;br /&gt;
:cgame_mp_x86.dll&lt;br /&gt;
:ui_mp_x86.dll&lt;br /&gt;
&amp;lt;li&amp;gt;Start the client with the &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Command line: Append &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt; to the command line.&lt;br /&gt;
&amp;lt;li&amp;gt;Windows Shortcut: Append &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt; to the target box, usually after &amp;lt;tt&amp;gt;&amp;quot;C:\Program Files\Wolfenstein - Enemy Territory&amp;quot;&amp;lt;/tt&amp;gt;. Make sure to place it after the double-quote.&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Warnings==&lt;br /&gt;
While viewing a demo: &amp;lt;i&amp;gt;Client/Server game mismatch: &#039;Enemy Territory/ET pro&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
While viewing a demo: &amp;lt;i&amp;gt;Unknown event: 131&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
While viewing a demo: &amp;lt;i&amp;gt;BG_EvaluateTrajectory: unknown trType: 0&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
While viewing a demo: &amp;lt;i&amp;gt;BG_IndexForString: unknown token &#039;NOT&#039;&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:This happens when you use the wrong client to playback ETPro 3 demos.  The solution is to extract cgame_mp_x86.dll and ui_mp_x86.dll from the most recent [http://bani.anime.net/etpro/download.html ETPro PK3] and put it in your ETPro directory.&lt;br /&gt;
&lt;br /&gt;
While viewing a demo: &amp;lt;i&amp;gt;demo file was truncated&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;CL_ReadDemoMessage: demoMsglen &amp;gt; MAX_MSGLEN&amp;lt;/i&amp;gt;: &lt;br /&gt;
:This happens when cl_autorecord is non-zero. Set cl_autorecord to 0&lt;br /&gt;
:the above messages could also be caused by a corrupt demo file.&lt;br /&gt;
&lt;br /&gt;
==Related links==&lt;br /&gt;
*[http://rarlabs.com/download.htm WinRAR] - Can open PK3 files (Recommended).&lt;br /&gt;
*[http://www.winzip.com WinZip] - Can open PK3 files.&lt;br /&gt;
*[[:Category:ETPro:Client Cvars|Client cvars]].&lt;br /&gt;
*[[Client cvar list]].&lt;br /&gt;
*[[Server Configuration]].&lt;br /&gt;
*[[Performance Tuning]].&lt;br /&gt;
&lt;br /&gt;
==Additional troubleshooting==&lt;br /&gt;
Most problems with hosting games and playing demos, as well as some problems with playing online, are caused by having multiple versions of the etpro files present, or simply having too many files.&lt;br /&gt;
;For reliable demo playback and local hosting&lt;br /&gt;
* There should be only one etpro-X_Y_Z.pk3 in your etpro directory.&lt;br /&gt;
* Unless you have a specific reason to do otherwise, always use the most recent version. ETPro is backwards compatible with older demos, as well as demos from etmain.&lt;br /&gt;
* The ui and cgame .dll files in the etpro directory must match those in the etpro .pk3 file. Extract them as described above.&lt;br /&gt;
* Many servers force you to download additional skin packs, sound packs, other content. All of this will be present in demo playback or hosted games, unless your move the corresponding files to somewhere that outside of etpro or etmain, or delete them.&lt;br /&gt;
*In addition to the etpro .pk3 the following are required by ET.&lt;br /&gt;
** mp_bin.pk3&lt;br /&gt;
** pak0.pk3&lt;br /&gt;
** pak1.pk3&lt;br /&gt;
** pak2.pk3&lt;br /&gt;
To play back a demo, you must also have the .pk3 corresponding to the map it was recorded on.  All other .pk3 files may be safely deleted or moved to another directory.&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=ETPro:Pluggable_Config_Files&amp;diff=2546</id>
		<title>ETPro:Pluggable Config Files</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=ETPro:Pluggable_Config_Files&amp;diff=2546"/>
		<updated>2006-11-14T22:00:59Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Config file details */  mapscripthash&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ETPro supports &#039;&#039;&#039;Pluggable Config Files&#039;&#039;&#039;. These files provide servers the use of additional features not available from traditional &amp;lt;tt&amp;gt;.cfg&amp;lt;/tt&amp;gt; files.&lt;br /&gt;
&lt;br /&gt;
==Creation and Installation==&lt;br /&gt;
Config files must be located in &amp;lt;tt&amp;gt;etpro/configs&amp;lt;/tt&amp;gt; and their names must end in &amp;lt;tt&amp;gt;.config &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Config file format==&lt;br /&gt;
The following shows the .config syntax. This is not a complete config, the ... indicates that in a real config many similar commands would follow&lt;br /&gt;
&lt;br /&gt;
 configname &amp;quot;^/foobar^f 6v6&amp;quot;&lt;br /&gt;
 // config for 6v6 foobar league&lt;br /&gt;
 version 1.2.3.4 foobar6v6.version.foobarleague.com &lt;br /&gt;
 init &lt;br /&gt;
 { &lt;br /&gt;
    setl sv_pure 1 &lt;br /&gt;
    setl sv_cheats 0 &lt;br /&gt;
    setl g_gametype 3 &lt;br /&gt;
 ...&lt;br /&gt;
    command &amp;quot;pb_sv_enable&amp;quot; &lt;br /&gt;
    command &amp;quot;pb_sv_kicklen 1&amp;quot; &lt;br /&gt;
    command &amp;quot;pb_sv_cvarempty&amp;quot; &lt;br /&gt;
 ...&lt;br /&gt;
 } &lt;br /&gt;
 map default &lt;br /&gt;
 { &lt;br /&gt;
    set g_userTimeLimit 0 &lt;br /&gt;
    setl g_useralliedrespawntime 0 &lt;br /&gt;
    setl g_useraxisrespawntime 0 &lt;br /&gt;
    setl b_moverscale 1 &lt;br /&gt;
 } &lt;br /&gt;
 map radar &lt;br /&gt;
 { &lt;br /&gt;
    set g_userTimeLimit 12 &lt;br /&gt;
    command &amp;quot;forcecvar r_drawfoliage 0&amp;quot; &lt;br /&gt;
 } &lt;br /&gt;
 ...&lt;br /&gt;
 signature deadbeefdeadbeefdeadbeefdeadbeefdeadbeef&lt;br /&gt;
===Config file details===&lt;br /&gt;
;comments : any text following  // is a comment and is ignored&lt;br /&gt;
&lt;br /&gt;
;version w.x.y.z some.dns.name : ET will check that version matches the IP returned form some.dns.name If it does, ETPro displays the message &amp;quot;config is latest version available&amp;quot; to all players in warmup. &#039;&#039;&#039;not fully implemented&#039;&#039;&#039; - etpro doesn&#039;t currently do the DNS check.&lt;br /&gt;
&lt;br /&gt;
;configname &amp;lt;name&amp;gt; : defines the name of the config. This name is displayed to players in warmup, but is &#039;&#039;&#039;not&#039;&#039;&#039; used to refer to the config in config related commands. The name may contain ET [[Color Codes]]&lt;br /&gt;
&lt;br /&gt;
;init : The init block is executed only once, when the config is loaded by referee or rcon/console. It is never reloaded. &lt;br /&gt;
&lt;br /&gt;
;map &amp;lt;&amp;lt;i&amp;gt;mapname&amp;lt;/i&amp;gt;&amp;gt;|default : The map blocks are loaded on every map_restart. The parameter is the mapname to match to. A parameter of default will execute that block for all maps. map blocks are executed in order from first to last. Generally you want your default block first, and then specific map blocks to override it.&lt;br /&gt;
&lt;br /&gt;
;signature &amp;lt;sig&amp;gt; : provides crypotgraphic signature to verify that that the config is unmodified. ETPro displays the message &amp;quot;config is certified&amp;quot; to all players in warmup. The signature must be generated by the etpro team.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;init&#039;&#039;&#039; and &#039;&#039;&#039;map&#039;&#039;&#039; are followed by a block, delimited by curly braces {}. Each block can contain the following keywords&lt;br /&gt;
&lt;br /&gt;
;set &amp;lt;cvarname&amp;gt; &amp;quot;value&amp;quot; : sets the specified cvar to the specified value.&lt;br /&gt;
;setl &amp;lt;cvarname&amp;gt; &amp;quot;value&amp;quot; : sets the specified cvar to the specified value, and locks it so that it cannot be changed by rcon, forcecvar or other means until the config is unloaded&lt;br /&gt;
;command &amp;quot;command text&amp;quot; : execute &amp;quot;command text&amp;quot;&lt;br /&gt;
;mapscripthash &amp;lt;hash&amp;gt; : Require a particular mapscript be used for a map. Must appear in a non-default map section. The hash can be found by loading the map and checking the value of the readonly server cvar b_mapscripthash. If the mapscript does not match when the map is loaded, a message will be sent to all players, and the config will be unloaded.&lt;br /&gt;
&lt;br /&gt;
==Config related commands==&lt;br /&gt;
;callvote  | ref config &amp;lt;config file name&amp;gt; : set the current config by vote or ref.&lt;br /&gt;
;config &amp;lt;config file name&amp;gt;|none : set the current config from the server console, or unload the current config. Settings set by the config remain in effect, but are no longer locked. Map specific blocks are no longer in effect. &lt;br /&gt;
&#039;&#039;notes&#039;&#039;: &lt;br /&gt;
:*&amp;lt;tt&amp;gt;config none&amp;lt;/tt&amp;gt; can only be used from the console (or rcon) not ref or vote.&lt;br /&gt;
:*you must use the filename of the .config (minus the .config extension), not the &#039;configname&#039; contained in the .config file. The &#039;configname&#039; is a longer (possibly colored etc) descriptive name.&lt;br /&gt;
:*&#039;&#039;&#039;do not&#039;&#039;&#039; try to load a config with &amp;lt;tt&amp;gt;set config &amp;lt;i&amp;gt;&amp;lt;configname&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;. This will cause the &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ref config&amp;lt;/tt&amp;gt; commands to stop working until the server is restarted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Common pitfalls to watchout for==&lt;br /&gt;
*Any cvar that isn&#039;t a number (vote_allow_config, b_watermark, b_levels_medic etc) must have quotes around it&#039;s value, even if its value is a single character.&lt;br /&gt;
*XP levels lists should not have commas in them (b_levels_medic etc)&lt;br /&gt;
*Putting cvars in groups alphabetically as above makes it a &amp;lt;em&amp;gt;lot&amp;lt;/em&amp;gt; easier to maintain and verify.&lt;br /&gt;
*Make sure there is an extra newline at the end of the file (after the closing &#039;}&#039;)&lt;br /&gt;
*&amp;lt;em&amp;gt;Test your &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt;&amp;lt;/em&amp;gt; - you can do this simply by putting it in your /etpro/configs directory, and starting ET with &amp;lt;tt&amp;gt;+set dedicated 2 +exec server.cfg&amp;lt;/tt&amp;gt;, then calling the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;/config NAME&amp;lt;/tt&amp;gt;. The console will report any major syntax errors in the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
*Make sure to include &amp;lt;em&amp;gt;all&amp;lt;/em&amp;gt; relevant gameplay-related cvars.  Most are included in [http://bani.anime.net/banimod/forums/viewtopic.php?t=4558#43204 this list].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Your Configuration Certified==&lt;br /&gt;
The easiest way is to send a private message to [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=2 bani] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=800 Rain] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=1462 zinx] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=761 ReyalP] with the URL using the [http://bani.anime.net/banimod/forums/privmsg.php?folder=sentbox ETPro forums], including a link to the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt; hosted on the league&#039;s website.&lt;br /&gt;
&lt;br /&gt;
An alternate way, if the first way fails, is to talk to one of the [[ETPro Developer]]s on [[IRC]].&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Cvar Restrictions]]&lt;br /&gt;
*[[Forced Cvars]]&lt;br /&gt;
*[[WolfWiki:Community_Portal#Leagues / Competitions]] is a good place to find full config file examples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Lagometer&amp;diff=2537</id>
		<title>Lagometer</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Lagometer&amp;diff=2537"/>
		<updated>2006-10-20T07:28:23Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: cg_lagometer 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Enemy Territory provides a small graph with some network information which can be enabled by setting cg_lagometer to 1. Although this is not a feature specific to ET Pro, it has never been well-documented.&lt;br /&gt;
&lt;br /&gt;
The lagometer consists of two graphs--the upper is the frame graph, and the lower is the snapshot graph. New data is added to the frame graph every time the client renders a frame (so this graph will move faster at higher framerates), and new data is added to the snapshot graph every time a snapshot packet is received from the server.&lt;br /&gt;
&lt;br /&gt;
==Snapshot Graph==&lt;br /&gt;
The snapshot graph is the easiest to understand--it is essentially a graph of the latency (ping) between you and the server. The graph&#039;s colors provide some additional information: green is normal, yellow indicates that the snapshot was delayed so that the server would not exceed the rate value (either rate on your client, or sv_maxRate on the server, whichever is lower), and red indicates that a snapshot was lost entirely (i.e. a snapshot sent by the server never made it to the client, probably due to network problems.)&lt;br /&gt;
&lt;br /&gt;
http://www.themuffin.net/etpro/lagometer-snap.png&lt;br /&gt;
&lt;br /&gt;
In the above image, arrow 1 points to a normal snapshot with a ping of about 130ms, arrow 2 points to 700ms of packet loss,&lt;br /&gt;
and arrow 3 points to 2 snapshots that were delayed to stay under the rate limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Frame Graph==&lt;br /&gt;
The frame graph is a little more complicated, and requires some background information about how Enemy Territory&#039;s network code works for a full understanding. In Enemy Territory, each client runs at a non-fixed frame rate (depending on configuration, system performance, etc.) while the server runs at a fixed rate of 20 frames per second. After running each frame, the server will send a snapshot to every client (so long as the client&#039;s snaps and rate settings allows it) describing everything that has changed since the previous snapshot. When the client receives this snapshot, it interpolates the values between the old snapshot and the snapshot that was just received--that is, it smooths out the movement so that things in the map don&#039;t appear to be jumping around when the client is drawing frames faster than the server is sending them. If the client doesn&#039;t receive a snapshot, it may have to guess where an object is going to be in order to keep things looking normal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The client and the server each keep track of the current game time, and the differences between these times are expressed in the frame graph as well as object movement. For a simple example of this, imagine that the server has sent you two snapshots, snapshot a at time 12350, and snapshot b at time 12400¹, and then imagine that the client&#039;s current time is 12375. The client will interpolate² the position sent in snapshot a and in snapshot b to determine that the object in question should be drawn in the middle of the two points sent (because 12375 (the time our client is drawing for) is exactly halfway between 12350 and 12400.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the situation presented in the previous paragraph, imagine the client&#039;s time is 12425 and that no additional snapshots have been received yet. In order to maintain fluid motion, the client will need to guess where objects will be (using the last known position, angle, and velocity.) The calculation for this is quite not as easy to explain, so an example has been omitted for brevity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frame graph in the lagometer represents how far the time used for currently drawn image is away from the most recently received snapshot, and whether the client interpolated or extrapolated to obtain the positions used. Normally, the client interpolates positions, which is represented in blue on the lagometer; the graph height will spike downwards when a new snapshot is received, then crawl upwards towards the baseline), although it will sometimes be yellow to indicate extrapolation (and the graph will crawl upwards away from the baseline as the client extrapolates farther and farther from the last known data.) Since the cl_timenudge cvar causes the world to be rendered a certain number of milliseconds behind or ahead of the client&#039;s internal time, negative values may cause extrapolation during normal gameplay. For example, in the first situation described above (where the client&#039;s time is 12375), a cl_timenudge value of -30 would end up pushing the time used for rendering up to 12405 (which is newer than the data we have), so a small amount of extrapolation (5ms) would be required here.&lt;br /&gt;
&lt;br /&gt;
http://www.themuffin.net/etpro/lagometer-frame.png&lt;br /&gt;
&lt;br /&gt;
In the above image, arrow 1 points to an interpolated frame immediately after a new snapshot was received,&lt;br /&gt;
and arrow 2 points to a frame where a fair bit of extrapolation was performed.&lt;br /&gt;
&lt;br /&gt;
==AntiWarp==&lt;br /&gt;
If etpro [[AntiWarp]] is triggered, it the delay added by the antiwarp system is represented by translucent green bars&lt;br /&gt;
in ths snapshot graph, like this&lt;br /&gt;
&lt;br /&gt;
http://www.collectivecomputing.com/~reed/et/etss/lagometer-antiwarp.jpg&lt;br /&gt;
==FPSometer==&lt;br /&gt;
In etpro, cg_lagometer 2 replaces the standard ET lagometer with a graph of frame time. The bars hight shows the time required to render a frame, and they are color coded as follows&lt;br /&gt;
* Red &amp;gt; 35ms&lt;br /&gt;
* Yellow &amp;gt; 20ms&lt;br /&gt;
* Green &amp;lt;= 20ms&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Footnotes&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;¹&#039;&#039;&#039; Note the increase of exactly 50 -- remember that the server is running at 20 frames per second, so:&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td valign=&amp;quot;center&amp;quot;&amp;gt;1 frame ·&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;1000ms (1 second)&amp;lt;hr style=&amp;quot;border-top: solid #000 1px;&amp;quot;&amp;gt;20 frames&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;= 50ms&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;²&#039;&#039;&#039; This is technically called &#039;&#039;linear interpolation&#039;&#039; (the simplest interpolation method), which is sometimes abbreviated to &#039;&#039;lerp&#039;&#039;ing.&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Client_Cvars]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Network_Diagnostics&amp;diff=2536</id>
		<title>Network Diagnostics</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Network_Diagnostics&amp;diff=2536"/>
		<updated>2006-10-19T22:26:23Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: tired of pasting this in different forums&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you are having lag in game, experiencing long times in awaiting gamestate, or seeing [[AntiWarp]] triggered a lot in etpro, you can do some basic testing on your connection with &amp;lt;tt&amp;gt;ping&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;tracert&amp;lt;/tt&amp;gt;. The following examples use windows command names and options, linux is slightly different.&lt;br /&gt;
&lt;br /&gt;
First, tracert to somewhere (don&#039;t really matter, use the IP of an ET server you like to play on, or your ISPs website or google) like this, in a command prompt:&lt;br /&gt;
  tracert www.google.com&lt;br /&gt;
The output will be something like this:&lt;br /&gt;
  Tracing route to www.l.google.com [66.102.7.99]&lt;br /&gt;
  over a maximum of 30 hops:&lt;br /&gt;
    1    &amp;lt;1 ms    &amp;lt;1 ms    &amp;lt;1 ms  192.168.1.1 [192.168.1.1]&lt;br /&gt;
    2    14 ms    13 ms    13 ms  rdns.of.your.isp.gateway [1.2.3.4]&lt;br /&gt;
    3    13 ms    14 ms    13 ms  rdns.of.some.other.router[5.6.7.8]&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
The first hop (with the &amp;lt; 1ms ping times) either your router or modem. The next hop is usually the far end of your broadband line. If thing ping time of the second hop is also very low (&amp;lt;10ms) it is your modem, and the hop after that is the other end. Don&#039;t be alarmed if some of the later hops drop packets in tracert, as a fair number of routers drop these, even when they forward normal traffic without problems. In general, if one hop drops all packets, but the subsequent hops still work, it just means that particular device doesn&#039;t respond to tracert packets.&lt;br /&gt;
&lt;br /&gt;
To test your connection between you and your router, use:&lt;br /&gt;
  ping -n 100 -l 1000 &amp;lt;ip.of.your.router&amp;gt;&lt;br /&gt;
The -n 100 means to use 100 packets, and the -l 1000 means use 1000 byte packets (that&#039;s a lower case L). Larger packets are far more likely to show up line problems.&lt;br /&gt;
&lt;br /&gt;
This should give zero packet loss and &amp;lt;10ms pings. If it gives you packet loss, either your router sucks, your Ethernet cable is bad, or perhaps some setting for your Ethernet card is incompatible.&lt;br /&gt;
&lt;br /&gt;
To test your line (the connection from your house to your ISPs equipment), find the IP of the first hop that isn&#039;t your router or modem (i.e. the first one that has a &amp;gt;10ms time in the tracert output), and ping it with the same command. Any packet loss most likely indicates a problem (unless its 100%, in which case, it is likely that router is simply ignoring your pings). The pings times should be fairly steady if there is no other traffic on the line, typically in the range of 20-80 ms for DSL or cable with this packet size. If there is any significant packet loss, chances are you need to complain to your ISP. If there is significant variation (+/- 20% or more) and your line does not have other traffic on it, that may also indicate a problem.&lt;br /&gt;
&lt;br /&gt;
You can move on down the IPs listed in the tracert using the same method, if you want, however, if the problem is in a router that is more than a couple hops away, chances are it is a temporary issue, and you can&#039;t do much to get it fixed.&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=ETPro:Pluggable_Config_Files&amp;diff=2535</id>
		<title>ETPro:Pluggable Config Files</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=ETPro:Pluggable_Config_Files&amp;diff=2535"/>
		<updated>2006-10-19T22:05:38Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Getting Your Configuration Certified */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ETPro supports &#039;&#039;&#039;Pluggable Config Files&#039;&#039;&#039;. These files provide servers the use of additional features not available from traditional &amp;lt;tt&amp;gt;.cfg&amp;lt;/tt&amp;gt; files.&lt;br /&gt;
&lt;br /&gt;
==Creation and Installation==&lt;br /&gt;
Config files must be located in &amp;lt;tt&amp;gt;etpro/configs&amp;lt;/tt&amp;gt; and their names must end in &amp;lt;tt&amp;gt;.config &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Config file format==&lt;br /&gt;
The following shows the .config syntax. This is not a complete config, the ... indicates that in a real config many similar commands would follow&lt;br /&gt;
&lt;br /&gt;
 configname &amp;quot;^/foobar^f 6v6&amp;quot;&lt;br /&gt;
 // config for 6v6 foobar league&lt;br /&gt;
 version 1.2.3.4 foobar6v6.version.foobarleague.com &lt;br /&gt;
 init &lt;br /&gt;
 { &lt;br /&gt;
    setl sv_pure 1 &lt;br /&gt;
    setl sv_cheats 0 &lt;br /&gt;
    setl g_gametype 3 &lt;br /&gt;
 ...&lt;br /&gt;
    command &amp;quot;pb_sv_enable&amp;quot; &lt;br /&gt;
    command &amp;quot;pb_sv_kicklen 1&amp;quot; &lt;br /&gt;
    command &amp;quot;pb_sv_cvarempty&amp;quot; &lt;br /&gt;
 ...&lt;br /&gt;
 } &lt;br /&gt;
 map default &lt;br /&gt;
 { &lt;br /&gt;
    set g_userTimeLimit 0 &lt;br /&gt;
    setl g_useralliedrespawntime 0 &lt;br /&gt;
    setl g_useraxisrespawntime 0 &lt;br /&gt;
    setl b_moverscale 1 &lt;br /&gt;
 } &lt;br /&gt;
 map radar &lt;br /&gt;
 { &lt;br /&gt;
    set g_userTimeLimit 12 &lt;br /&gt;
    command &amp;quot;forcecvar r_drawfoliage 0&amp;quot; &lt;br /&gt;
 } &lt;br /&gt;
 ...&lt;br /&gt;
 signature deadbeefdeadbeefdeadbeefdeadbeefdeadbeef&lt;br /&gt;
===Config file details===&lt;br /&gt;
;comments : any text following  // is a comment and is ignored&lt;br /&gt;
&lt;br /&gt;
;version w.x.y.z some.dns.name : ET will check that version matches the IP returned form some.dns.name If it does, ETPro displays the message &amp;quot;config is latest version available&amp;quot; to all players in warmup. &#039;&#039;&#039;not fully implemented&#039;&#039;&#039; - etpro doesn&#039;t currently do the DNS check.&lt;br /&gt;
&lt;br /&gt;
;configname &amp;lt;name&amp;gt; : defines the name of the config. This name is displayed to players in warmup, but is &#039;&#039;&#039;not&#039;&#039;&#039; used to refer to the config in config related commands. The name may contain ET [[Color Codes]]&lt;br /&gt;
&lt;br /&gt;
;init : The init block is executed only once, when the config is loaded by referee or rcon/console. It is never reloaded. &lt;br /&gt;
&lt;br /&gt;
;map &amp;lt;&amp;lt;i&amp;gt;mapname&amp;lt;/i&amp;gt;&amp;gt;|default : The map blocks are loaded on every map_restart. The parameter is the mapname to match to. A parameter of default will execute that block for all maps. map blocks are executed in order from first to last. Generally you want your default block first, and then specific map blocks to override it.&lt;br /&gt;
&lt;br /&gt;
;signature &amp;lt;sig&amp;gt; : provides crypotgraphic signature to verify that that the config is unmodified. ETPro displays the message &amp;quot;config is certified&amp;quot; to all players in warmup. The signature must be generated by the etpro team.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;init&#039;&#039;&#039; and &#039;&#039;&#039;map&#039;&#039;&#039; are followed by a block, delimited by curly braces {}. Each block can contain the following keywords&lt;br /&gt;
&lt;br /&gt;
;set &amp;lt;cvarname&amp;gt; &amp;quot;value&amp;quot; : sets the specified cvar to the specified value.&lt;br /&gt;
;setl &amp;lt;cvarname&amp;gt; &amp;quot;value&amp;quot; : sets the specified cvar to the specified value, and locks it so that it cannot be changed by rcon, forcecvar or other means until the config is unloaded&lt;br /&gt;
;command &amp;quot;command text&amp;quot; : execute &amp;quot;command text&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Config related commands==&lt;br /&gt;
;callvote  | ref config &amp;lt;config file name&amp;gt; : set the current config by vote or ref.&lt;br /&gt;
;config &amp;lt;config file name&amp;gt;|none : set the current config from the server console, or unload the current config. Settings set by the config remain in effect, but are no longer locked. Map specific blocks are no longer in effect. &lt;br /&gt;
&#039;&#039;notes&#039;&#039;: &lt;br /&gt;
:*&amp;lt;tt&amp;gt;config none&amp;lt;/tt&amp;gt; can only be used from the console (or rcon) not ref or vote.&lt;br /&gt;
:*you must use the filename of the .config (minus the .config extension), not the &#039;configname&#039; contained in the .config file. The &#039;configname&#039; is a longer (possibly colored etc) descriptive name.&lt;br /&gt;
:*&#039;&#039;&#039;do not&#039;&#039;&#039; try to load a config with &amp;lt;tt&amp;gt;set config &amp;lt;i&amp;gt;&amp;lt;configname&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;. This will cause the &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ref config&amp;lt;/tt&amp;gt; commands to stop working until the server is restarted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Common pitfalls to watchout for==&lt;br /&gt;
*Any cvar that isn&#039;t a number (vote_allow_config, b_watermark, b_levels_medic etc) must have quotes around it&#039;s value, even if its value is a single character.&lt;br /&gt;
*XP levels lists should not have commas in them (b_levels_medic etc)&lt;br /&gt;
*Putting cvars in groups alphabetically as above makes it a &amp;lt;em&amp;gt;lot&amp;lt;/em&amp;gt; easier to maintain and verify.&lt;br /&gt;
*Make sure there is an extra newline at the end of the file (after the closing &#039;}&#039;)&lt;br /&gt;
*&amp;lt;em&amp;gt;Test your &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt;&amp;lt;/em&amp;gt; - you can do this simply by putting it in your /etpro/configs directory, and starting ET with &amp;lt;tt&amp;gt;+set dedicated 2 +exec server.cfg&amp;lt;/tt&amp;gt;, then calling the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;/config NAME&amp;lt;/tt&amp;gt;. The console will report any major syntax errors in the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
*Make sure to include &amp;lt;em&amp;gt;all&amp;lt;/em&amp;gt; relevant gameplay-related cvars.  Most are included in [http://bani.anime.net/banimod/forums/viewtopic.php?t=4558#43204 this list].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Your Configuration Certified==&lt;br /&gt;
The easiest way is to send a private message to [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=2 bani] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=800 Rain] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=1462 zinx] or [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=761 ReyalP] with the URL using the [http://bani.anime.net/banimod/forums/privmsg.php?folder=sentbox ETPro forums], including a link to the &amp;lt;tt&amp;gt;.config&amp;lt;/tt&amp;gt; hosted on the league&#039;s website.&lt;br /&gt;
&lt;br /&gt;
An alternate way, if the first way fails, is to talk to one of the [[ETPro Developer]]s on [[IRC]].&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Cvar Restrictions]]&lt;br /&gt;
*[[Forced Cvars]]&lt;br /&gt;
*[[WolfWiki:Community_Portal#Leagues / Competitions]] is a good place to find full config file examples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Lagometer&amp;diff=2534</id>
		<title>Lagometer</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Lagometer&amp;diff=2534"/>
		<updated>2006-10-19T21:55:12Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: antiwarp, formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Enemy Territory provides a small graph with some network information which can be enabled by setting cg_lagometer to 1. Although this is not a feature specific to ET Pro, it has never been well-documented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lagometer consists of two graphs--the upper is the frame graph, and the lower is the snapshot graph. New data is added to the frame graph every time the client renders a frame (so this graph will move faster at higher framerates), and new data is added to the snapshot graph every time a snapshot packet is received from the server.&lt;br /&gt;
&lt;br /&gt;
==Snapshot Graph==&lt;br /&gt;
The snapshot graph is the easiest to understand--it is essentially a graph of the latency (ping) between you and the server. The graph&#039;s colors provide some additional information: green is normal, yellow indicates that the snapshot was delayed so that the server would not exceed the rate value (either rate on your client, or sv_maxRate on the server, whichever is lower), and red indicates that a snapshot was lost entirely (i.e. a snapshot sent by the server never made it to the client, probably due to network problems.)&lt;br /&gt;
&lt;br /&gt;
http://www.themuffin.net/etpro/lagometer-snap.png&lt;br /&gt;
&lt;br /&gt;
In the above image, arrow 1 points to a normal snapshot with a ping of about 130ms, arrow 2 points to 700ms of packet loss,&lt;br /&gt;
and arrow 3 points to 2 snapshots that were delayed to stay under the rate limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Frame Graph==&lt;br /&gt;
The frame graph is a little more complicated, and requires some background information about how Enemy Territory&#039;s network code works for a full understanding. In Enemy Territory, each client runs at a non-fixed frame rate (depending on configuration, system performance, etc.) while the server runs at a fixed rate of 20 frames per second. After running each frame, the server will send a snapshot to every client (so long as the client&#039;s snaps and rate settings allows it) describing everything that has changed since the previous snapshot. When the client receives this snapshot, it interpolates the values between the old snapshot and the snapshot that was just received--that is, it smooths out the movement so that things in the map don&#039;t appear to be jumping around when the client is drawing frames faster than the server is sending them. If the client doesn&#039;t receive a snapshot, it may have to guess where an object is going to be in order to keep things looking normal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The client and the server each keep track of the current game time, and the differences between these times are expressed in the frame graph as well as object movement. For a simple example of this, imagine that the server has sent you two snapshots, snapshot a at time 12350, and snapshot b at time 12400¹, and then imagine that the client&#039;s current time is 12375. The client will interpolate² the position sent in snapshot a and in snapshot b to determine that the object in question should be drawn in the middle of the two points sent (because 12375 (the time our client is drawing for) is exactly halfway between 12350 and 12400.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the situation presented in the previous paragraph, imagine the client&#039;s time is 12425 and that no additional snapshots have been received yet. In order to maintain fluid motion, the client will need to guess where objects will be (using the last known position, angle, and velocity.) The calculation for this is quite not as easy to explain, so an example has been omitted for brevity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frame graph in the lagometer represents how far the time used for currently drawn image is away from the most recently received snapshot, and whether the client interpolated or extrapolated to obtain the positions used. Normally, the client interpolates positions, which is represented in blue on the lagometer; the graph height will spike downwards when a new snapshot is received, then crawl upwards towards the baseline), although it will sometimes be yellow to indicate extrapolation (and the graph will crawl upwards away from the baseline as the client extrapolates farther and farther from the last known data.) Since the cl_timenudge cvar causes the world to be rendered a certain number of milliseconds behind or ahead of the client&#039;s internal time, negative values may cause extrapolation during normal gameplay. For example, in the first situation described above (where the client&#039;s time is 12375), a cl_timenudge value of -30 would end up pushing the time used for rendering up to 12405 (which is newer than the data we have), so a small amount of extrapolation (5ms) would be required here.&lt;br /&gt;
&lt;br /&gt;
http://www.themuffin.net/etpro/lagometer-frame.png&lt;br /&gt;
&lt;br /&gt;
In the above image, arrow 1 points to an interpolated frame immediately after a new snapshot was received,&lt;br /&gt;
and arrow 2 points to a frame where a fair bit of extrapolation was performed.&lt;br /&gt;
&lt;br /&gt;
==AntiWarp==&lt;br /&gt;
If etpro [[AntiWarp]] is triggered, it the delay added by the antiwarp system is represented by translucent green bars&lt;br /&gt;
in ths snapshot graph, like this&lt;br /&gt;
&lt;br /&gt;
http://www.collectivecomputing.com/~reed/et/etss/lagometer-antiwarp.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Footnotes&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;¹&#039;&#039;&#039; Note the increase of exactly 50 -- remember that the server is running at 20 frames per second, so:&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td valign=&amp;quot;center&amp;quot;&amp;gt;1 frame ·&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;1000ms (1 second)&amp;lt;hr style=&amp;quot;border-top: solid #000 1px;&amp;quot;&amp;gt;20 frames&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;= 50ms&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;²&#039;&#039;&#039; This is technically called &#039;&#039;linear interpolation&#039;&#039; (the simplest interpolation method), which is sometimes abbreviated to &#039;&#039;lerp&#039;&#039;ing.&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Client_Cvars]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=AntiWarp&amp;diff=2533</id>
		<title>AntiWarp</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=AntiWarp&amp;diff=2533"/>
		<updated>2006-10-19T21:51:55Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: linky&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ET Pro implements an antiwarp system to keep players from &amp;quot;warping&amp;quot; or &amp;quot;teleporting&amp;quot; around, accidentally or intentionally.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Controlling the antiwarp system ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b_antiwarp&#039;&#039;&#039; controls the antiwarp system. The possible settings are:&lt;br /&gt;
&amp;lt;pre&amp;gt;0 - disabled. ET Pro does no antiwarp at all.&lt;br /&gt;
1 - enabled (default). ET Pro keeps players from &amp;quot;warping&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is &amp;quot;warping&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Warping&amp;quot; occurs when the server receives several new commands for a player in a very short period of time. This happens because packets from the player were lost or never sent. The player will appear to cross a great distance in a very short period of time, making them hard to hit and possibly allowing them to avoid landmine damage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How the antiwarp system keeps players from warping ==&lt;br /&gt;
&lt;br /&gt;
The antiwarp system in ET Pro delays commands when they are received too quickly. Thus, when a player sends 700ms worth of commands in 50ms, the commands will be spread out over 700ms, causing the player to move smoothly to other players. This affects the player who sent the commands too quickly only by increasing their ping, and will not keep increasing ping endlessly - at maximum, the added ping is the highest ping the player is actually getting. If temporary network issues cause ping to increase beyond a sensible number, the player can stand still for a moment and their ping will normalize.&lt;br /&gt;
&lt;br /&gt;
== Antiwarp on the lagometer ==&lt;br /&gt;
If antiwarp is triggered, it shows up on the [[Lagometer]] as a translucent green like this. The drop at the end shows how the added lag of antiwarp drops off if you stop for a moment.&lt;br /&gt;
&lt;br /&gt;
http://www.collectivecomputing.com/~reed/et/etss/lagometer-antiwarp.jpg&lt;br /&gt;
[[Category:ETPro:Server_Cvars]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Client_Configuration&amp;diff=2529</id>
		<title>Client Configuration</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Client_Configuration&amp;diff=2529"/>
		<updated>2006-10-19T00:33:27Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Warnings */  cl_autorecord&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Client Side Install==&lt;br /&gt;
;To play ETPro online&lt;br /&gt;
Simply connect to an ETPro server with downloads enabled on your client.&amp;lt;br&amp;gt;&lt;br /&gt;
;To host your own game&lt;br /&gt;
Download the desired ETPro .zip from the [http://etpro.anime.net/download.html ETPro download page] and unzip it into your ET directory, then start ET with fs_game set as described below.&amp;lt;br&amp;gt;&lt;br /&gt;
For additional information see the [http://wolfwiki.anime.net/index.php/ETPro:Server_Configuration Server Configuration page]&lt;br /&gt;
;To play demos&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open the [http://bani.anime.net/etpro/download.html PK3] in a program that can handle &amp;lt;tt&amp;gt;zip&amp;lt;/tt&amp;gt; files. Extract the following files to the ETPro directory:&lt;br /&gt;
:cgame_mp_x86.dll&lt;br /&gt;
:ui_mp_x86.dll&lt;br /&gt;
&amp;lt;li&amp;gt;Start the client with the &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Command line: Append &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt; to the command line.&lt;br /&gt;
&amp;lt;li&amp;gt;Windows Shortcut: Append &amp;lt;tt&amp;gt;+set fs_game etpro&amp;lt;/tt&amp;gt; to the target box, usually after &amp;lt;tt&amp;gt;&amp;quot;C:\Program Files\Wolfenstein - Enemy Territory&amp;quot;&amp;lt;/tt&amp;gt;. Make sure to place it after the double-quote.&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Warnings==&lt;br /&gt;
While viewing a demo: &amp;lt;i&amp;gt;Client/Server game mismatch: &#039;Enemy Territory/ET pro&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
While viewing a demo: &amp;lt;i&amp;gt;Unknown event: 131&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
While viewing a demo: &amp;lt;i&amp;gt;BG_EvaluateTrajectory: unknown trType: 0&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
While viewing a demo: &amp;lt;i&amp;gt;BG_IndexForString: unknown token &#039;NOT&#039;&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:This happens when you use the wrong client to playback ETPro 3 demos.  The solution is to extract cgame_mp_x86.dll and ui_mp_x86.dll from the most recent [http://bani.anime.net/etpro/download.html ETPro PK3] and put it in your ETPro directory.&lt;br /&gt;
&lt;br /&gt;
While viewing a demo: &amp;lt;i&amp;gt;demo file was truncated&amp;lt;/i&amp;gt; or various other errors (TODO): &lt;br /&gt;
:This happens when cl_autorecord is non-zero. Set cl_autorecord to 0&lt;br /&gt;
&lt;br /&gt;
==Related links==&lt;br /&gt;
*[http://rarlabs.com/download.htm WinRAR] - Can open PK3 files (Recommended).&lt;br /&gt;
*[http://www.winzip.com WinZip] - Can open PK3 files.&lt;br /&gt;
*[[:Category:ETPro:Client Cvars|Client cvars]].&lt;br /&gt;
*[[Client cvar list]].&lt;br /&gt;
*[[Server Configuration]].&lt;br /&gt;
*[[Performance Tuning]].&lt;br /&gt;
&lt;br /&gt;
==Additional troubleshooting==&lt;br /&gt;
Most problems with hosting games and playing demos, as well as some problems with playing online, are caused by having multiple versions of the etpro files present, or simply having too many files.&lt;br /&gt;
;For reliable demo playback and local hosting&lt;br /&gt;
* There should be only one etpro-X_Y_Z.pk3 in your etpro directory.&lt;br /&gt;
* Unless you have a specific reason to do otherwise, always use the most recent version. ETPro is backwards compatible with older demos, as well as demos from etmain.&lt;br /&gt;
* The ui and cgame .dll files in the etpro directory must match those in the etpro .pk3 file. Extract them as described above.&lt;br /&gt;
* Many servers force you to download additional skin packs, sound packs, other content. All of this will be present in demo playback or hosted games, unless your move the corresponding files to somewhere that outside of etpro or etmain, or delete them.&lt;br /&gt;
*In addition to the etpro .pk3 the following are required by ET.&lt;br /&gt;
** mp_bin.pk3&lt;br /&gt;
** pak0.pk3&lt;br /&gt;
** pak1.pk3&lt;br /&gt;
** pak2.pk3&lt;br /&gt;
To play back a demo, you must also have the .pk3 corresponding to the map it was recorded on.  All other .pk3 files may be safely deleted or moved to another directory.&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=AntiWarp&amp;diff=2528</id>
		<title>AntiWarp</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=AntiWarp&amp;diff=2528"/>
		<updated>2006-10-19T00:16:11Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: lagometer and spelling fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ET Pro implements an antiwarp system to keep players from &amp;quot;warping&amp;quot; or &amp;quot;teleporting&amp;quot; around, accidentally or intentionally.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Controlling the antiwarp system ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b_antiwarp&#039;&#039;&#039; controls the antiwarp system. The possible settings are:&lt;br /&gt;
&amp;lt;pre&amp;gt;0 - disabled. ET Pro does no antiwarp at all.&lt;br /&gt;
1 - enabled (default). ET Pro keeps players from &amp;quot;warping&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is &amp;quot;warping&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Warping&amp;quot; occurs when the server receives several new commands for a player in a very short period of time. This happens because packets from the player were lost or never sent. The player will appear to cross a great distance in a very short period of time, making them hard to hit and possibly allowing them to avoid landmine damage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How the antiwarp system keeps players from warping ==&lt;br /&gt;
&lt;br /&gt;
The antiwarp system in ET Pro delays commands when they are received too quickly. Thus, when a player sends 700ms worth of commands in 50ms, the commands will be spread out over 700ms, causing the player to move smoothly to other players. This affects the player who sent the commands too quickly only by increasing their ping, and will not keep increasing ping endlessly - at maximum, the added ping is the highest ping the player is actually getting. If temporary network issues cause ping to increase beyond a sensible number, the player can stand still for a moment and their ping will normalize.&lt;br /&gt;
&lt;br /&gt;
== Antiwarp on the lagometer ==&lt;br /&gt;
If antiwarp is triggered, it shows up on the lagometer as a translucent green like this. The drop at the end shows how the added lag of antiwarp drops off if you stop for a moment.&lt;br /&gt;
&lt;br /&gt;
http://www.collectivecomputing.com/~reed/et/etss/lagometer-antiwarp.jpg&lt;br /&gt;
[[Category:ETPro:Server_Cvars]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=WolfWiki:Community_Portal&amp;diff=2522</id>
		<title>WolfWiki:Community Portal</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=WolfWiki:Community_Portal&amp;diff=2522"/>
		<updated>2006-09-05T01:23:09Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: hen admin msg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The WolfWiki Community portal is a place to list community news sites, competitions, mod sites, and other ET/ETPro related resources. Links added here should be of general interest to the ET community, not just promotion of a particular clan or server.&lt;br /&gt;
== News Sites ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.et-center.com/ ET-Center]&lt;br /&gt;
* [http://www.xfire.be/ Xfire.be]&lt;br /&gt;
* [http://www.gamestv.org/ GamesTV.org]&lt;br /&gt;
* [http://www.swertcw.com/ sweRTCW]&lt;br /&gt;
* [http://www.planetwolfenstein.com/ Planet Wolfenstein]&lt;br /&gt;
* [http://www.etnation.co.uk/ ETNation.co.uk]&lt;br /&gt;
* [http://www.splashdamage.com/ SplashDamage.com]&lt;br /&gt;
* [http://www.planetwolfenstein.de/ PlanetWolfenstein.de]&lt;br /&gt;
* [http://www.rtcw.co.uk/ rtcw.co.uk]&lt;br /&gt;
* [http://velocity.lunarpages.com/index.html Unofficial Enemy Territory Strategy Guide]&lt;br /&gt;
* [http://www.planetwolfenstein.com/4newbies/ RTCW 4 Newbies]&lt;br /&gt;
* [http://www.enemy-territory.com Enemy Territory Resource Site]&lt;br /&gt;
* [http://www.geheimgemein.de/kallisti/ Kallisti.et Enemy Territory Fun Community]&lt;br /&gt;
* [http://www.et-scene.de/news.php ET-Scene.de (German)]&lt;br /&gt;
&lt;br /&gt;
== Leagues / Competitions ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.clanbase.com/ Clanbase]&lt;br /&gt;
* [http://www.teamwarfare.com/ TeamWarfare League]&lt;br /&gt;
* [http://www.sta-league.org/ Stronger Than All]&lt;br /&gt;
* [http://www.et-cup.net/ ET-Cup]&lt;br /&gt;
* [http://www.warleagues.com/ Warleagues]&lt;br /&gt;
* [http://www.frenchy-cup.com/ Frenchy-Cup european]&lt;br /&gt;
* [http://et-gather.be/ #et.gather Fast Gaming Cup]&lt;br /&gt;
&lt;br /&gt;
== Mods ==&lt;br /&gt;
&lt;br /&gt;
* [http://stealthy.foolishgames.net/ FalckonET]&lt;br /&gt;
* [http://www.truecombat.com/intro.php TC:Elite]&lt;br /&gt;
* [http://www.omni-bot.com/ Omni-Bot]&lt;br /&gt;
* [http://www.priceofpeace.net/ The Price of Peace]&lt;br /&gt;
* [http://www.etpub.org/news.php ETPub]&lt;br /&gt;
* [http://jaymod.clanfu.org/ Jaymod]&lt;br /&gt;
* [http://www.splashdamage.com/index.php?name=pnPHPbb2&amp;amp;file=viewtopic&amp;amp;t=7522 ET-Mod-Project-List]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=WolfWiki:Community_Portal&amp;diff=2520</id>
		<title>WolfWiki:Community Portal</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=WolfWiki:Community_Portal&amp;diff=2520"/>
		<updated>2006-09-05T01:18:07Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Leagues / Competitions */  cgl-&amp;gt; dead&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News Sites ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.et-center.com/ ET-Center]&lt;br /&gt;
* [http://www.xfire.be/ Xfire.be]&lt;br /&gt;
* [http://www.gamestv.org/ GamesTV.org]&lt;br /&gt;
* [http://www.swertcw.com/ sweRTCW]&lt;br /&gt;
* [http://www.planetwolfenstein.com/ Planet Wolfenstein]&lt;br /&gt;
* [http://www.etnation.co.uk/ ETNation.co.uk]&lt;br /&gt;
* [http://www.splashdamage.com/ SplashDamage.com]&lt;br /&gt;
* [http://www.planetwolfenstein.de/ PlanetWolfenstein.de]&lt;br /&gt;
* [http://www.rtcw.co.uk/ rtcw.co.uk]&lt;br /&gt;
* [http://velocity.lunarpages.com/index.html Unofficial Enemy Territory Strategy Guide]&lt;br /&gt;
* [http://www.planetwolfenstein.com/4newbies/ RTCW 4 Newbies]&lt;br /&gt;
* [http://www.enemy-territory.com Enemy Territory Resource Site]&lt;br /&gt;
* [http://www.geheimgemein.de/kallisti/ Kallisti.et Enemy Territory Fun Community]&lt;br /&gt;
* [http://www.et-scene.de/news.php ET-Scene.de (German)]&lt;br /&gt;
&lt;br /&gt;
== Leagues / Competitions ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.clanbase.com/ Clanbase]&lt;br /&gt;
* [http://www.teamwarfare.com/ TeamWarfare League]&lt;br /&gt;
* [http://www.sta-league.org/ Stronger Than All]&lt;br /&gt;
* [http://www.et-cup.net/ ET-Cup]&lt;br /&gt;
* [http://www.warleagues.com/ Warleagues]&lt;br /&gt;
* [http://www.frenchy-cup.com/ Frenchy-Cup european]&lt;br /&gt;
* [http://et-gather.be/ #et.gather Fast Gaming Cup]&lt;br /&gt;
&lt;br /&gt;
== Mods ==&lt;br /&gt;
&lt;br /&gt;
* [http://stealthy.foolishgames.net/ FalckonET]&lt;br /&gt;
* [http://www.truecombat.com/intro.php TC:Elite]&lt;br /&gt;
* [http://www.omni-bot.com/ Omni-Bot]&lt;br /&gt;
* [http://www.priceofpeace.net/ The Price of Peace]&lt;br /&gt;
* [http://www.etpub.org/news.php ETPub]&lt;br /&gt;
* [http://jaymod.clanfu.org/ Jaymod]&lt;br /&gt;
* [http://www.splashdamage.com/index.php?name=pnPHPbb2&amp;amp;file=viewtopic&amp;amp;t=7522 ET-Mod-Project-List]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=WolfWiki_talk:Community_Portal&amp;diff=2517</id>
		<title>WolfWiki talk:Community Portal</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=WolfWiki_talk:Community_Portal&amp;diff=2517"/>
		<updated>2006-09-05T01:12:48Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The vote is: &amp;quot;Prohibit clans from being listed on the community portal page&amp;quot;&lt;br /&gt;
Addendum: The number of clans is rather large.  Another page, perhaps?&lt;br /&gt;
:For --[[User:WeblionX|WeblionX]] 09:22, 4 September 2006 (PDT)&lt;br /&gt;
Not only is the number of clans rather large, most don&#039;t last two weeks. And who would want to keep the list up to date? &lt;br /&gt;
:For --[[User:Lagger|Lagger]] 12:35, 4 September 2006 (PDT)&lt;br /&gt;
WolfWiki isn&#039;t a recruitment center.&lt;br /&gt;
:For --[[User:Ouroboro|ouroboro]] 15:25, 4 September 2006 (PDT)&lt;br /&gt;
I don&#039;t think clan pages have any place on wolfwiki if they have some community resource, they can link to that but not just &amp;quot;OMGZ L@@K MY CLANZ PAGE&amp;quot;&lt;br /&gt;
:For --[[User:ReyalP|ReyalP]] 18:12, 4 September 2006 (PDT)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Configstring&amp;diff=2492</id>
		<title>Configstring</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Configstring&amp;diff=2492"/>
		<updated>2006-08-28T22:19:04Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: general info about configstrings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
Configstrings can be accessed with [[Lua_Mod_API#configstrings|et.trap_GetConfigstring and et.trap_SetConfigstring]] and the [[Lua_Mod_API#string_utility_functions|String utility functions]]&lt;br /&gt;
==What are Configstrings==&lt;br /&gt;
* Configstrings are strings that are set on the server, and automatically sent to each client.&lt;br /&gt;
* Configstrings are often, but not always, in the from of an infostring (a backslash delimited set of key\value pairs)&lt;br /&gt;
* Each configstring is identified by a number, which is usually given refered to by a name #defined in the ET gamecode.&lt;br /&gt;
* A group of related configstrings (such as CS_PLAYERS) usually only have a symbolic name for the first value, with a number (entity number in the case of CS_PLAYERS) added to to get a particular value.&lt;br /&gt;
* Most configstrings have a specific meaning to the gamecode. You can use the etmain SDK find out what they do, but beware that etpro does not do things exactly the same as etmain.&lt;br /&gt;
* A list of configstring numbers and names can be found in [http://www.collectivecomputing.com/~reed/et/lua/etconst.lua etconst.lua]&lt;br /&gt;
&lt;br /&gt;
==User Configstring==&lt;br /&gt;
A user Configstring gets written in the log file with a line starting with &#039;&#039;UserInfoChanged&#039;&#039; which mustn&#039;t be mistaken for one with &#039;&#039;Userinfo&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To access a user&#039;s Configstring you can&#039;t just use et.trap_GetConfigstring(slotNumber) but must use et.trap_GetConfigstring(et.CS_PLAYERS + slotNumber)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pitatable columns=3 headlines=&amp;quot;key;name;description&amp;quot; widths=&amp;quot;40;220;450&amp;quot; headerfontcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;
n;Nick;&lt;br /&gt;
t;Team;1=Axis, 2=Allies, 3=Spectators&lt;br /&gt;
c;Class;0=Soldier, 1=Medic, 2=Engineer, 3=FieldOps, 4=CovertOps&lt;br /&gt;
r;Rank;&lt;br /&gt;
m;Medals;&lt;br /&gt;
s;Skills;&lt;br /&gt;
dn;Disguised name;&lt;br /&gt;
dr;Disguised rank;&lt;br /&gt;
w;Weapon&lt;br /&gt;
lw;Latched weapon;Weapon on next spawn&lt;br /&gt;
sw;Latched secondary weapon;Secondary weapon on next spawn&lt;br /&gt;
p;Privilege level;0=Peon, referee (vote), referee (password), semiadmin, rconauth - etpro only&lt;br /&gt;
ss;Stat Saver; Stats restored by stat saver;etpro only&lt;br /&gt;
sc;Shoutcaster;etpro only&lt;br /&gt;
tv;ETTV slave;etpro only&lt;br /&gt;
&amp;lt;/pitatable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
et.CS_PLAYERS = 689 for those of you that don&#039;t use etconst.lua&lt;br /&gt;
&lt;br /&gt;
Source:  http://bani.anime.net/banimod/forums/viewtopic.php?t=5412&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro]]&lt;br /&gt;
[[Category:Lua]]&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2477</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2477"/>
		<updated>2006-08-19T03:19:55Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Fields for the next release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- getUserEguid(cno) - get a client&#039;s etpro guid?&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6279 fixed.]--[[User:Bani|Bani]] 17:56, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
trap sen server cmd is a ET engine trap the comand u send it send to the client and recived as a server command no a client command&lt;br /&gt;
&lt;br /&gt;
to add ill well that would be al ot of coding for not much [[User:=FF=im2good4u|=FF=Im2good4u]] 12:12, 20 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
aight thnx.&amp;lt;br&amp;gt;&lt;br /&gt;
heres another api request, i&#039;d like to be able to get a clients xp directly. et.gentity_get(cno, &amp;quot;sess.game_points&amp;quot;) seems to return 0 always (?)&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 15:38, 21 December 2005 (PST)&lt;br /&gt;
:oh nevermind, i see this can be done now with xp = et.gentity_get(cno, &amp;quot;ps.stats&amp;quot;, 8)&lt;br /&gt;
:nice... --[[User:Hadr0|Hadr0]] 16:58, 23 December 2005 (PST)&lt;br /&gt;
--------&lt;br /&gt;
add a way to determine if a client is 999, and if possible why he&#039;s 999 (loading, connecting, loosing packets, etc)&amp;lt;br&amp;gt;&lt;br /&gt;
--Gotenks&lt;br /&gt;
&lt;br /&gt;
999 means: server has not been sent data from client for &amp;gt; 1000 ms. So there is no way to certainly tell why.&lt;br /&gt;
The timeoutflag is stored in the pmflags IIRC. Don&#039;t know if lua can read them right now. --[[User:Deus|Deus]] 23:12, 22 December 2005 (PST)&amp;lt;br&amp;gt;&lt;br /&gt;
Still would like access to the ping, or a dummy variable if they are 999, but also the ammount of time they are inactive.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Gotenks|Gotenks]] (Sorry for double post) 1:53, 31 December 2005 (CST)&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6291 fixed].--[[User:Bani|Bani]] 02:40, 7 February 2006 (PST)&lt;br /&gt;
----&lt;br /&gt;
Access to weapon stats during game similar to end of round stats that are displayed.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:LethalInjection|LethalInjection]] 23:52, 22 December 2005 (PST)&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6291 fixed].--[[User:Bani|Bani]] 02:40, 7 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
bani i need a console print function on the client that does sepport ascii plz [[User:=FF=im2good4u|=FF=Im2good4u]] 12:49, 12 January 2006 (PST)&lt;br /&gt;
:et.trap_SendServerCommand( clientnum, &amp;quot;print \&amp;quot;hello ascii console on the client\n\&amp;quot; ) ) --[[User:Bani|Bani]] 22:33, 15 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
bani: how about a et_sound(id, sound) event? [[User:gotenks|gotenks]] 20:45, 17 January 2006 (CST)&lt;br /&gt;
:[http://wolfwiki.anime.net/index.php/ETPro:Lua_Mod_API#sound et.G_Sound( entnum, soundindex )] --[[User:Bani|Bani]] 22:07, 18 January 2006 (PST)&lt;br /&gt;
:bani, i was referring to an on event call, so when a sound is played et_sound(id,sound) would be called.[[User:gotenks|gotenks]] 21:45, 20 January 2006 (CST)&lt;br /&gt;
::most sounds are clientside... this would not be of much use. --[[User:Bani|Bani]] 04:42, 22 January 2006 (PST)&lt;br /&gt;
:::except for checking when something like a killing spree sound is activated--[[User:gotenks|gotenks]] 07:54, 23 January 2006 (CST)&lt;br /&gt;
:::::There would be no way for you to know what sound was activated. You can&#039;t get a filename from the soundindex.--[[User:Bani|Bani]] 10:19, 24 January 2006 (PST)&lt;br /&gt;
:::::This is a case where IPCSend/IPCReceive would be useful, so mods can notify each other of specific events.--[[User:Bani|Bani]] 02:40, 7 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
Is it possible to get a player&#039;s live angles? Fieldname &amp;quot;s.angles&amp;quot; only gives the spawn angles. Tried &amp;quot;rotate&amp;quot;, &amp;quot;s.angles2&amp;quot;, &amp;quot;TargetAngles&amp;quot;, &amp;quot;r.currentAngles&amp;quot; as well but they just give 0.000000 for each element. thanks for any help --[[User:Hadr0|Hadr0]] 01:35, 25 January 2006 (PST)&lt;br /&gt;
:This will be fixed in the next release, where you will get access to ps.viewangles--[[User:Bani|Bani]] 02:33, 7 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Would it be possible to set the player&#039;s liveangle?Just like setting one&#039;s position(origin).I would also like to set player&#039;s velocities(maybe a vec3 field), &#039;speed&#039; is not working.  --[[User:Kotoko|Kotoko]] 06:06, 26 May 2006 (PDT)&lt;br /&gt;
:viewangles is what you want --[[User:ReyalP|ReyalP]] 14:00, 26 May 2006 (PDT)&lt;br /&gt;
Seems i get it ..It WILL BE AVAILABLE at NEXT release ..not now .. right?-_-  [[User:Kotoko|Kotoko]] 22:49, 26 May 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please give access to fieldname &#039;s.eventParm&#039;. --[[User:Pdi|pdi]] 01:52, 6 July 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
----&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Memory_cvars&amp;diff=2388</id>
		<title>Memory cvars</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Memory_cvars&amp;diff=2388"/>
		<updated>2006-07-17T06:15:43Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Sound */  stray bbcode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Determining memory usage==&lt;br /&gt;
===Sound===&lt;br /&gt;
&#039;&#039;&#039;s_list&#039;&#039;&#039; will display a list of all sounds and whether they&#039;re currently in RAM, along with a summary at the end, e.g.:&lt;br /&gt;
&lt;br /&gt;
 0[16bit] : sound/weapons/mortar/mortarf1.wav[paged out]&lt;br /&gt;
 53950[16bit] : sound/etpro/osp_fight.wav[resident ]&lt;br /&gt;
 52808[16bit] : sound/etpro/osp_goat.wav[resident ]&lt;br /&gt;
 Total resident: 45634975&lt;br /&gt;
 &lt;br /&gt;
 105060 bytes (0.10MB) free sound buffer memory, 50521500 bytes (48.18MB) total used&lt;br /&gt;
 92463100 bytes (88.18MB) sound buffer memory have been allocated since the last SND_setup&lt;br /&gt;
&lt;br /&gt;
This example is with &amp;lt;tt&amp;gt;com_soundmegs 48&amp;lt;/tt&amp;gt;, and it shows that if I wanted to keep &#039;&#039;all&#039;&#039; the sound in memory, I&#039;d want to shoot for soundmegs 96 or so.  In reality, that&#039;s probably overkill (some large sounds, like the per-level voiceover in the limbo menu, are rarely used), but I&#039;m pretty sure they&#039;re all loaded when you load the level, regardless (and just freed again if you use up soundmegs.)  So, basically, a high-ish soundmegs is good, but setting it &#039;&#039;really&#039;&#039; high probably won&#039;t help much unless you have a really slow/busy disk but a lot of RAM.&lt;br /&gt;
&lt;br /&gt;
===Hunk and Zone===&lt;br /&gt;
&#039;&#039;&#039;meminfo&#039;&#039;&#039; will display information about the hunk and the zone:&lt;br /&gt;
 67108864 bytes ( 64.00 MB) total hunk &amp;lt;- current com_hunkMegs&lt;br /&gt;
 25165824 bytes ( 24.00 MB) total zone &amp;lt;- current com_zoneMegs&lt;br /&gt;
 &lt;br /&gt;
        0 bytes (  0.00 MB) low mark&lt;br /&gt;
 42606880 bytes ( 40.63 MB) low permanent&lt;br /&gt;
  5864568 bytes (  5.59 MB) low tempHighwater &amp;lt;- top low hunk usage from temporary allocations&lt;br /&gt;
 &lt;br /&gt;
        0 bytes (  0.00 MB) high mark&lt;br /&gt;
      384 bytes (  0.00 MB) high permanent&lt;br /&gt;
    82624 bytes (  0.08 MB) high temp&lt;br /&gt;
 18769504 bytes ( 17.90 MB) high tempHighwater &amp;lt;- top high hunk usage from temporary allocations&lt;br /&gt;
 &lt;br /&gt;
 42607264 bytes ( 40.63 MB) total hunk in use &amp;lt;- current hunk in use&lt;br /&gt;
 18769120 bytes ( 17.90 MB) unused highwater &amp;lt;- temporary hunk memory that wasn&#039;t reused&lt;br /&gt;
 &lt;br /&gt;
  2055832 bytes (  1.96 MB) in 3088 zone blocks &amp;lt;- current zone usage&lt;br /&gt;
                0 bytes (  0.00 MB) in dynamic botlib&lt;br /&gt;
          1110492 bytes (  1.06 MB) in dynamic renderer&lt;br /&gt;
           945340 bytes (  0.90 MB) in dynamic other&lt;br /&gt;
            82888 bytes (  0.08 MB) in small Zone memory&lt;br /&gt;
&lt;br /&gt;
(note the comments to the right of each line)&lt;br /&gt;
So, the client uses a fair bit of hunk memory (adding together the total hunk and the unused highwater, my com_hunkmegs of 64 looks pretty good), a &#039;&#039;lot&#039;&#039; of sound memory, and very little zone memory.&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User_talk:Dersaidin&amp;diff=2378</id>
		<title>User talk:Dersaidin</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User_talk:Dersaidin&amp;diff=2378"/>
		<updated>2006-07-05T21:20:03Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Good work but I&#039;ll give you a heads-up: ReyalP might end up slapping you with the preview stick ;-). [[User:Deej|deej]] 06:53, 5 July 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
He is not the only one ... --[[User:Deus|Deus]] 11:41, 5 July 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
well I would, but I don&#039;t want to discourage him from cleaning stuff up :D --[[User:ReyalP|ReyalP]] 14:20, 5 July 2006 (PDT)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:ReyalP&amp;diff=2306</id>
		<title>User:ReyalP</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:ReyalP&amp;diff=2306"/>
		<updated>2006-06-10T00:44:33Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* ETPro/Lua libraries, modules and examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.sonic.net/~rfm/et/bananet.png&lt;br /&gt;
==ETPro/Lua libraries, modules and examples==&lt;br /&gt;
;Follow the link to the source code for more detailed information about each item.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/autoref.lua autoref.lua] lua module to give people referee status, based on IP or PB GUID. Requires etconst.lua&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/etconst.lua etconst.lua] some common constants from the et header files, converted to lua.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/luacon.lua luacon.lua] library provides a lua command in the server console, for interactive testing.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/luaconmod.lua luaconmod.lua] runs luacon as module.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/cvarobj.lua cvarobj.lua] metamethods example. Allows using cvars like normal lua variables.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/dumptable.lua dumptable.lua] recursively display contents of a table.&lt;br /&gt;
*[http://www.sonic.net/~rfm/et/lua/noteamflood.lua noteamflood.lua] prevent people from flooding &amp;quot;team&amp;quot; commands.&lt;br /&gt;
&lt;br /&gt;
==Map editing stuff==&lt;br /&gt;
; tjlview, a plugin for viewing [[TrickJumpLines]] in [http://www.qeradiant.com/ GtkRadiant 1.4]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/readme_tjlview-a0.1.txt readme]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/tjlview-a0.1-src.zip source]&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/tjlview-linux.zip windows and linux binaries]&lt;br /&gt;
; readme for bkgrnd2d plugin (the plugin itself is included in GTKRadiant 1.4)&lt;br /&gt;
* [http://www.sonic.net/~rfm/et/readme_bkgrnd2d-b0.25.txt readme_bkgrnd2d-b0.25.txt]&lt;br /&gt;
&lt;br /&gt;
==Contact==&lt;br /&gt;
* &#039;&#039;&#039;email&#039;&#039;&#039; reyalp (at) gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;[[IRC]]&#039;&#039;&#039; #etpro on freenode or quakenet, #n-warriors on gamesurge&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2302</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2302"/>
		<updated>2006-05-26T21:00:04Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: section bettar :x&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- getUserEguid(cno) - get a client&#039;s etpro guid?&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6279 fixed.]--[[User:Bani|Bani]] 17:56, 22 December 2005 (PST)&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 02:10, 20 December 2005 (PST)&amp;lt;br&amp;gt;&lt;br /&gt;
:You can use et.G_Damage() in the new test version to do that.--[[User:Bani|Bani]] 01:38, 23 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
trap sen server cmd is a ET engine trap the comand u send it send to the client and recived as a server command no a client command&lt;br /&gt;
&lt;br /&gt;
to add ill well that would be al ot of coding for not much [[User:=FF=im2good4u|=FF=Im2good4u]] 12:12, 20 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
aight thnx.&amp;lt;br&amp;gt;&lt;br /&gt;
heres another api request, i&#039;d like to be able to get a clients xp directly. et.gentity_get(cno, &amp;quot;sess.game_points&amp;quot;) seems to return 0 always (?)&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 15:38, 21 December 2005 (PST)&lt;br /&gt;
:oh nevermind, i see this can be done now with xp = et.gentity_get(cno, &amp;quot;ps.stats&amp;quot;, 8)&lt;br /&gt;
:nice... --[[User:Hadr0|Hadr0]] 16:58, 23 December 2005 (PST)&lt;br /&gt;
--------&lt;br /&gt;
add a way to determine if a client is 999, and if possible why he&#039;s 999 (loading, connecting, loosing packets, etc)&amp;lt;br&amp;gt;&lt;br /&gt;
--Gotenks&lt;br /&gt;
&lt;br /&gt;
999 means: server has not been sent data from client for &amp;gt; 1000 ms. So there is no way to certainly tell why.&lt;br /&gt;
The timeoutflag is stored in the pmflags IIRC. Don&#039;t know if lua can read them right now. --[[User:Deus|Deus]] 23:12, 22 December 2005 (PST)&amp;lt;br&amp;gt;&lt;br /&gt;
Still would like access to the ping, or a dummy variable if they are 999, but also the ammount of time they are inactive.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Gotenks|Gotenks]] (Sorry for double post) 1:53, 31 December 2005 (CST)&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6291 fixed].--[[User:Bani|Bani]] 02:40, 7 February 2006 (PST)&lt;br /&gt;
----&lt;br /&gt;
Access to weapon stats during game similar to end of round stats that are displayed.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:LethalInjection|LethalInjection]] 23:52, 22 December 2005 (PST)&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6291 fixed].--[[User:Bani|Bani]] 02:40, 7 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
bani i need a console print function on the client that does sepport ascii plz [[User:=FF=im2good4u|=FF=Im2good4u]] 12:49, 12 January 2006 (PST)&lt;br /&gt;
:et.trap_SendServerCommand( clientnum, &amp;quot;print \&amp;quot;hello ascii console on the client\n\&amp;quot; ) ) --[[User:Bani|Bani]] 22:33, 15 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
bani: how about a et_sound(id, sound) event? [[User:gotenks|gotenks]] 20:45, 17 January 2006 (CST)&lt;br /&gt;
:[http://wolfwiki.anime.net/index.php/ETPro:Lua_Mod_API#sound et.G_Sound( entnum, soundindex )] --[[User:Bani|Bani]] 22:07, 18 January 2006 (PST)&lt;br /&gt;
:bani, i was referring to an on event call, so when a sound is played et_sound(id,sound) would be called.[[User:gotenks|gotenks]] 21:45, 20 January 2006 (CST)&lt;br /&gt;
::most sounds are clientside... this would not be of much use. --[[User:Bani|Bani]] 04:42, 22 January 2006 (PST)&lt;br /&gt;
:::except for checking when something like a killing spree sound is activated--[[User:gotenks|gotenks]] 07:54, 23 January 2006 (CST)&lt;br /&gt;
:::::There would be no way for you to know what sound was activated. You can&#039;t get a filename from the soundindex.--[[User:Bani|Bani]] 10:19, 24 January 2006 (PST)&lt;br /&gt;
:::::This is a case where IPCSend/IPCReceive would be useful, so mods can notify each other of specific events.--[[User:Bani|Bani]] 02:40, 7 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
Is it possible to get a player&#039;s live angles? Fieldname &amp;quot;s.angles&amp;quot; only gives the spawn angles. Tried &amp;quot;rotate&amp;quot;, &amp;quot;s.angles2&amp;quot;, &amp;quot;TargetAngles&amp;quot;, &amp;quot;r.currentAngles&amp;quot; as well but they just give 0.000000 for each element. thanks for any help --[[User:Hadr0|Hadr0]] 01:35, 25 January 2006 (PST)&lt;br /&gt;
:This will be fixed in the next release, where you will get access to ps.viewangles--[[User:Bani|Bani]] 02:33, 7 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Would it be possible to set the player&#039;s liveangle?Just like setting one&#039;s position(origin).I would also like to set player&#039;s velocities(maybe a vec3 field), &#039;speed&#039; is not working.  --[[User:Kotoko|Kotoko]] 06:06, 26 May 2006 (PDT)&lt;br /&gt;
:viewangles is what you want --[[User:ReyalP|ReyalP]] 14:00, 26 May 2006 (PDT)&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
----&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Map_scripting&amp;diff=2291</id>
		<title>Map scripting</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Map_scripting&amp;diff=2291"/>
		<updated>2006-05-17T04:08:43Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: describe some mapscript cvars&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General information==&lt;br /&gt;
In [[ETPro]] version 3 the [[ETPro]] team has improved and changed the scripting system to a quite big extent. This article presents some of the new [[ETPro]] map scripting features.&lt;br /&gt;
&lt;br /&gt;
Some things cannot be done by scripting. These include:&lt;br /&gt;
* making a part of terrain mineable/unmineable.&lt;br /&gt;
&lt;br /&gt;
==mapscript related cvars==&lt;br /&gt;
* [[b_mapscriptdirectory]] is an etpro cvar which specifies what directory too look for the map script. As always, the game looks under fs_game first, so you should not include etpro or etmain in the value of b_mapscriptdirectory. If not specified, the default is &amp;lt;tt&amp;gt;maps/&amp;lt;/tt&amp;gt;. ETPro includes bug fix only scripts in &amp;lt;tt&amp;gt;etpro/maps&amp;lt;/tt&amp;gt; and modified scripts in &amp;lt;tt&amp;gt;etpro/etpromapscripts&amp;lt;/tt&amp;gt;&lt;br /&gt;
* [[g_scriptname]] is an etmain cvar which specifies the filename of the script to be used. It is reset every time a map is loaded. The default is to use &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;mapname&amp;lt;/i&amp;gt;.script&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;mapname&amp;lt;/i&amp;gt;_lms.script&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* [[g_scriptdebug]] 1 outputs verbose information about the script in the server console.&lt;br /&gt;
&lt;br /&gt;
==Scripting Examples by [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=226 duke&#039;ku]==&lt;br /&gt;
Here I&#039;ll show a few examples of the new scripting allowed in ETPro, and attempt to explain what exactly it&#039;s doing. First off, I&#039;ll start with a simple example, where a model (in this case, a dinghy) is inserted into the map.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;create&lt;br /&gt;
{&lt;br /&gt;
   scriptname &amp;quot;dinghy1&amp;quot;&lt;br /&gt;
   origin &amp;quot;2650 600 100&amp;quot;&lt;br /&gt;
   classname &amp;quot;misc_gamemodel&amp;quot;&lt;br /&gt;
   modelscale 1&lt;br /&gt;
   contents 1&lt;br /&gt;
   mins &amp;quot;-90 -90 -25&amp;quot;&lt;br /&gt;
   maxs &amp;quot;90 90 25&amp;quot;&lt;br /&gt;
   clipmask 1&lt;br /&gt;
      model &amp;quot;models/mapobjects/dinghy_sd/dinghy.md3&amp;quot;   &lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This isn&#039;t exactly the cleanest example of scripting (mainly due to my lackluster job of clipping the model off,) but what it produces is this:&lt;br /&gt;
http://games.theteamkillers.net/rtcw/dinghy/2004-01-14-234844-battery.jpg&lt;br /&gt;
&lt;br /&gt;
Now, to break down how it works. The create{ } command will place an entity into the map, at the spot specified by the &amp;quot;origin&amp;quot; key. The scriptname specifies the name that the entity will have in the map, and it is what seperates it from other entities in the map (which can cause quite a few problems).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;create&lt;br /&gt;
{&lt;br /&gt;
   scriptname &amp;quot;dinghy1&amp;quot;&lt;br /&gt;
   origin &amp;quot;2650 600 100&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code above will do nothing, it creates an entity (not even of a specified type, it will do nothing) and places into the map at 2650,600,100. To find your position on a map to place an entity (you&#039;ll need to find an origin for almost every entity), use the command &amp;quot;/viewpos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;create&lt;br /&gt;
{&lt;br /&gt;
   scriptname &amp;quot;dinghy1&amp;quot;&lt;br /&gt;
   origin &amp;quot;2650 600 100&amp;quot;&lt;br /&gt;
   classname &amp;quot;misc_gamemodel&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, the code has advanced a bit further and the entity now has a specified type, misc_gamemodel. A misc_gamemodel is a model placed into the map during load (compared to a misc_model, which are permanently static objects that get compiled into the map at compile). Misc_gamemodels can be used for almost anything, from walls (although this would be a terrible way of making a map) to moving tanks (all of the vehicles, construction boxes, command posts, etc. in game are all misc_gamemodels), but in this script it&#039;s just used for placing a model (provided with the ET mapping tools, available at http://www.qeradiant.com).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;create&lt;br /&gt;
{&lt;br /&gt;
   scriptname &amp;quot;dinghy1&amp;quot;&lt;br /&gt;
   origin &amp;quot;2650 600 100&amp;quot;&lt;br /&gt;
   classname &amp;quot;misc_gamemodel&amp;quot;&lt;br /&gt;
   modelscale 1&lt;br /&gt;
   contents 1&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, the model has a defined scale, 1. A scale of .5 would cause it to be half of the size of the model in the file that will be referenced, and a scale of 2 would cause it to be twice the size. Most flags that are used on an entity can be found in the entities.def file that is provided with the mapping tools.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;create&lt;br /&gt;
{&lt;br /&gt;
   scriptname &amp;quot;dinghy1&amp;quot;&lt;br /&gt;
   origin &amp;quot;2650 600 100&amp;quot;&lt;br /&gt;
   classname &amp;quot;misc_gamemodel&amp;quot;&lt;br /&gt;
   modelscale 1&lt;br /&gt;
   contents 1&lt;br /&gt;
   mins &amp;quot;-90 -90 -25&amp;quot;&lt;br /&gt;
   maxs &amp;quot;90 90 25&amp;quot;&lt;br /&gt;
   clipmask 1&lt;br /&gt;
   model &amp;quot;models/mapobjects/dinghy_sd/dinghy.md3&amp;quot;   &lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, for the clipping. The contents flag specifies the type of surfaceflag that the entity will be. Surfaceflags that are defined in the ET source (found in src/game/surfaceflags.h, if you&#039;re interested) are listed [http://bani.anime.net/banimod/forums/viewtopic.php?t=3328&amp;amp;start=0#surfaceflags here]. The mins and maxs specify how far out from the origin of the model (in each direction) the clipping will extend to. The coordinates on this model aren&#039;t accurate, but they get the job done.&lt;br /&gt;
&lt;br /&gt;
This was a very basic example of scripting, and now I&#039;ll be listing some more advanced examples of scripting.&lt;br /&gt;
&lt;br /&gt;
===Example 1: Battery&#039;s Back Door and Dynamite===&lt;br /&gt;
&amp;lt;pre&amp;gt;//bani&lt;br /&gt;
create&lt;br /&gt;
{&lt;br /&gt;
   scriptName &amp;quot;backdoor&amp;quot;&lt;br /&gt;
   classname &amp;quot;func_explosive&amp;quot;&lt;br /&gt;
   targetname &amp;quot;backdoor&amp;quot;&lt;br /&gt;
   origin &amp;quot;4608 -4594 1024&amp;quot;&lt;br /&gt;
   mins &amp;quot;-63 -10 0&amp;quot;&lt;br /&gt;
   maxs &amp;quot;63 10 128&amp;quot;&lt;br /&gt;
   spawnflags 1   // AXIS_OBJECTIVE(1)&lt;br /&gt;
   eflags 65536   // EF_FAKEBMODEL&lt;br /&gt;
   svflags 1   // SVF_NOCLIENT&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//bani&lt;br /&gt;
create&lt;br /&gt;
{&lt;br /&gt;
   scriptName &amp;quot;backdoor_obj&amp;quot;&lt;br /&gt;
   classname &amp;quot;trigger_objective_info&amp;quot;&lt;br /&gt;
   targetname &amp;quot;backdoor_obj&amp;quot;&lt;br /&gt;
   target &amp;quot;backdoor&amp;quot;&lt;br /&gt;
   origin &amp;quot;4608 -4601 1024&amp;quot;&lt;br /&gt;
   mins &amp;quot;-95 -85 0&amp;quot;&lt;br /&gt;
   maxs &amp;quot;95 85 128&amp;quot;&lt;br /&gt;
   spawnflags 17   // AXIS_OBJECTIVE(1) | CUSTOMIMAGE&lt;br /&gt;
   track &amp;quot;the Back Door&amp;quot;&lt;br /&gt;
   shortname &amp;quot;Back Door&amp;quot;&lt;br /&gt;
   customaxisimage &amp;quot;gfx/limbo/cm_radar_maindoor&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//bani - bug fixes&lt;br /&gt;
create&lt;br /&gt;
{&lt;br /&gt;
   scriptName &amp;quot;bugfix1&amp;quot;&lt;br /&gt;
   classname &amp;quot;func_fakebrush&amp;quot;&lt;br /&gt;
   origin &amp;quot;3632 -4313 881&amp;quot;&lt;br /&gt;
   contents 65536  // CONTENTS_PLAYERCLIP&lt;br /&gt;
   mins &amp;quot;-40 -1 -20&amp;quot;&lt;br /&gt;
   maxs &amp;quot;40 1 10&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example 2: Fueldump and Spawning at the Command Post===&lt;br /&gt;
&amp;lt;pre&amp;gt;create&lt;br /&gt;
{&lt;br /&gt;
   scriptName &amp;quot;fueldumphq_obj&amp;quot;&lt;br /&gt;
   classname &amp;quot;team_WOLF_objective&amp;quot;&lt;br /&gt;
   targetname &amp;quot;fueldumphq_obj&amp;quot;&lt;br /&gt;
   origin &amp;quot;-10853 -2036 6&amp;quot;   // z = CC_FILTER_ALLIES(2) | CC_FILTER_SPAWNS(4)&lt;br /&gt;
   spawnflags 2   // TEAM_ALLIES(2)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
{&lt;br /&gt;
   scriptName &amp;quot;fueldumphq_spawn1&amp;quot;&lt;br /&gt;
   classname &amp;quot;team_CTF_bluespawn&amp;quot;&lt;br /&gt;
   targetname &amp;quot;fueldumphq_spawn&amp;quot;&lt;br /&gt;
   origin &amp;quot;11072 -2448 512&amp;quot;&lt;br /&gt;
   spawnflags 2   // TEAM_ALLIES&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
{&lt;br /&gt;
   scriptName &amp;quot;fueldumphq_spawn2&amp;quot;&lt;br /&gt;
   classname &amp;quot;team_CTF_bluespawn&amp;quot;&lt;br /&gt;
   targetname &amp;quot;fueldumphq_spawn&amp;quot;&lt;br /&gt;
   origin &amp;quot;-10995 -2448 512&amp;quot;&lt;br /&gt;
   spawnflags 2   // TEAM_ALLIES&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
{&lt;br /&gt;
   scriptName &amp;quot;fueldumphq_spawn3&amp;quot;&lt;br /&gt;
   classname &amp;quot;team_CTF_bluespawn&amp;quot;&lt;br /&gt;
   targetname &amp;quot;fueldumphq_spawn&amp;quot;&lt;br /&gt;
   origin &amp;quot;-10918 -2448 512&amp;quot;&lt;br /&gt;
   spawnflags 2   // TEAM_ALLIES&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
{&lt;br /&gt;
   scriptName &amp;quot;fueldumphq_spawn4&amp;quot;&lt;br /&gt;
   classname &amp;quot;team_CTF_bluespawn&amp;quot;&lt;br /&gt;
   targetname &amp;quot;fueldumphq_spawn&amp;quot;&lt;br /&gt;
   origin &amp;quot;-10841 -2448 512&amp;quot;&lt;br /&gt;
   spawnflags 2   // TEAM_ALLIES&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
{&lt;br /&gt;
   scriptName &amp;quot;fueldumphq_spawn5&amp;quot;&lt;br /&gt;
   classname &amp;quot;team_CTF_bluespawn&amp;quot;&lt;br /&gt;
   targetname &amp;quot;fueldumphq_spawn&amp;quot;&lt;br /&gt;
   origin &amp;quot;11072 -2288 512&amp;quot;&lt;br /&gt;
   spawnflags 2   // TEAM_ALLIES&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
{&lt;br /&gt;
   scriptName &amp;quot;fueldumphq_spawn6&amp;quot;&lt;br /&gt;
   classname &amp;quot;team_CTF_bluespawn&amp;quot;&lt;br /&gt;
   targetname &amp;quot;fueldumphq_spawn&amp;quot;&lt;br /&gt;
   origin &amp;quot;-10995 -2288 512&amp;quot;&lt;br /&gt;
   spawnflags 2   // TEAM_ALLIES&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
{      &lt;br /&gt;
   scriptName &amp;quot;fueldumphq_spawn7&amp;quot;      &lt;br /&gt;
   classname &amp;quot;team_CTF_bluespawn&amp;quot;&lt;br /&gt;
   targetname &amp;quot;fueldumphq_spawn&amp;quot;&lt;br /&gt;
   origin &amp;quot;-10918 -2288 512&amp;quot;&lt;br /&gt;
   spawnflags 2   // TEAM_ALLIES&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
{&lt;br /&gt;
   scriptName &amp;quot;fueldumphq_spawn8&amp;quot;&lt;br /&gt;
   classname &amp;quot;team_CTF_bluespawn&amp;quot;&lt;br /&gt;
   targetname &amp;quot;fueldumphq_spawn&amp;quot;&lt;br /&gt;
   origin &amp;quot;-10841 -2288 512&amp;quot;&lt;br /&gt;
   spawnflags 2   // TEAM_ALLIES&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hopefully you&#039;ll be able to understand what each of those flags are doing. If you can&#039;t figure it out, see if you can figure it out from the [http://games.theteamkillers.net/rtcw/ent/ entities.def] file (from [http://user.tninet.se/~fzo823r/], this is not the original ET entities.def file but everything in it should work - it contains new things that weren&#039;t included with the stock def), or come and bug the [[ETPro]] team (|Rain|, [av]bani, zinx, fretn, s2ikkyo) on [irc://irc.freenode.net/etpro irc.freenode.net, #etpro].&lt;br /&gt;
&lt;br /&gt;
===Contents Flags===&lt;br /&gt;
* SOLID 1&amp;lt;br&amp;gt;&lt;br /&gt;
* LIGHTGRID 4&amp;amp;bull;&amp;lt;br&amp;gt;&lt;br /&gt;
* LAVA 8&amp;lt;br&amp;gt;&lt;br /&gt;
* SLIME 16&amp;lt;br&amp;gt;&lt;br /&gt;
* WATER 32&amp;lt;br&amp;gt;&lt;br /&gt;
* FOG 64&amp;lt;br&amp;gt;&lt;br /&gt;
* MISSILECLIP 128&amp;lt;br&amp;gt;&lt;br /&gt;
* ITEM 256&amp;lt;br&amp;gt;&lt;br /&gt;
* MOVER 16384&amp;lt;br&amp;gt;&lt;br /&gt;
* AREAPORTAL 32768&amp;amp;bull;&amp;lt;br&amp;gt;&lt;br /&gt;
* PLAYERCLIP 65536&amp;lt;br&amp;gt;&lt;br /&gt;
* MONSTERCLIP 131072&amp;amp;deg;&amp;lt;br&amp;gt;&lt;br /&gt;
* TELEPORTER 262144&amp;lt;br&amp;gt;&lt;br /&gt;
* JUMPPAD 524288&amp;lt;br&amp;gt;&lt;br /&gt;
* CLUSTERPORTAL 1048576&amp;amp;bull;&amp;lt;br&amp;gt;&lt;br /&gt;
* DONOTENTER 2097152&amp;amp;deg;&amp;lt;br&amp;gt;&lt;br /&gt;
* DONOTENTER_LARGE 4194304&amp;amp;deg;&amp;lt;br&amp;gt;&lt;br /&gt;
* ORIGIN 16777216&amp;lt;br&amp;gt;&lt;br /&gt;
* BODY 33554432&amp;amp;bull;&amp;lt;br&amp;gt;&lt;br /&gt;
* CORPSE 67108864&amp;amp;bull;&amp;lt;br&amp;gt;&lt;br /&gt;
* DETAIL 134217728&amp;amp;bull;&amp;lt;br&amp;gt;&lt;br /&gt;
* STRUCTURAL 268435456&amp;amp;bull;&amp;lt;br&amp;gt;&lt;br /&gt;
* TRANSLUCENT 536870912&amp;lt;br&amp;gt;&lt;br /&gt;
* TRIGGER 1073741824&amp;lt;br&amp;gt;&lt;br /&gt;
* NODROP 2147483648&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not all of these surfaceflags will work, but the ones you will want to use should work. If you&#039;ve tested something and it doesn&#039;t work properly, send an email to dukeku AT theteamkillers DOT net and I&#039;ll fix it here.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;deg; These, as far as I know, are bot only commands - they will have no effect on other players.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;bull; These are flags that should not be used in a script, they&#039;re either reserved for strict-in game usage that doesn&#039;t relate to something that you would do in a script such as this, or are reserved for entities that are compiled into the map and have absolutely no use in game.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Originally posted in the [http://bani.anime.net/banimod/forums/ ETPro forums] by [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=226 duke&#039;ku].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Scripting Examples by [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=800 Rain]==&lt;br /&gt;
Additionally, players may modify keys on existing entities with the set command.&lt;br /&gt;
===Example 1: Oasis Axis Garrison spawn marker fix===&lt;br /&gt;
Here are a couple of examples from the oasis map script (etpro/maps/oasis.script):&lt;br /&gt;
&amp;lt;pre&amp;gt;axis_garrison_wobj&lt;br /&gt;
{&lt;br /&gt;
        spawn&lt;br /&gt;
        {&lt;br /&gt;
                set&lt;br /&gt;
                {&lt;br /&gt;
                        origin &amp;quot;7089 4852 -415&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
This changes the position of the spawn marker for the Axis garrison to (7089, 4852, -415). (This was done to correct player spawn location after setautospawn usage was fixed.)&lt;br /&gt;
===Example 2: Oasis caves water fix===&lt;br /&gt;
Here&#039;s another example:&lt;br /&gt;
&amp;lt;pre&amp;gt;water_tunnel&lt;br /&gt;
{&lt;br /&gt;
        spawn&lt;br /&gt;
        {&lt;br /&gt;
                // rain - these are put into the world as CONTENTS_SOLID,&lt;br /&gt;
                // which is a Bad Thing if WolfReviveBBox gets called&lt;br /&gt;
                // while we&#039;re in the water&lt;br /&gt;
                wait 100&lt;br /&gt;
                set&lt;br /&gt;
                {&lt;br /&gt;
                        contents 32 // CONTENTS_WATER&lt;br /&gt;
                        clipmask 32 // CONTENTS_WATER&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        [...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
As described by the comments, this fixes the problem that sometimes caused players to be pushed around uncontrollably while underwater in the tunnel.&lt;br /&gt;
&lt;br /&gt;
Both create and set recognize some keys that can&#039;t normally be used while mapping. Normally, most of these are computed automatically (often at map compile time); however, there are some cases when the compiled value is unusable, and there are some cases where you might want to set these values when spawning a new entity.&lt;br /&gt;
&lt;br /&gt;
===Additional supported keys===&lt;br /&gt;
The additional keys supported are:&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Key&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;mins&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A point describing the location of the lower corner of the bounding box.  (&#039;&#039;ent-&amp;amp;gt;r.mins&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;maxs&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A point describing the location of the upper corner of the bounding box.  (&#039;&#039;ent-&amp;amp;gt;r.maxs&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;contents&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Contents flags - description above (&#039;&#039;ent-&amp;amp;gt;r.contents&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;svflags&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Server flags (&#039;&#039;ent-&amp;amp;gt;r.svFlags&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;clipmask&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Brush content types to collide with. (&#039;&#039;ent-&amp;amp;gt;clipmask&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;count2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;entity-specific (&#039;&#039;ent-&amp;amp;gt;count2&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;eflags&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Entity flags (&#039;&#039;ent-&amp;amp;gt;s.eFlags&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;pos_trType&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Position trajectory type (&#039;&#039;ent-&amp;amp;gt;s.pos.trType&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;pos_trDelta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Position trajectory delta &amp;amp;#916; (&#039;&#039;ent-&amp;amp;gt;s.pos.trType&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;apos_trType&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Angle trajectory type (&#039;&#039;ent-&amp;amp;gt;s.apos.trType&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;pos_trDelta&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Angle trajectory delta &amp;amp;#916; (&#039;&#039;ent-&amp;amp;gt;s.apos.trType&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;classname_nospawn&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Changes the class name, but doesn&#039;t re-spawn the entity. (&#039;&#039;ent-&amp;amp;gt;classname&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;customaxisimage&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Custom command map image for the Axis team&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;customalliesimage&amp;lt;br&amp;gt;customalliedimage&amp;lt;/td&amp;gt;&amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;Custom command map image for the Allied team&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;allowteams&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Teams allowed to use an entity (&#039;&#039;ent-&amp;amp;gt;allowteams&#039;&#039;)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(You may wish to refer to the ET SDK for additional information.)&lt;br /&gt;
===The func_fakebrush entity===&lt;br /&gt;
Finally, ET Pro offers the func_fakebrush entity (also available by ORing EF_FAKEBMODEL (65536 or 0x10000) to eFlags), which allows the limited ability to spawn brush entities. The fake model must be a hexahedron, defined by mins and maxs, and will not work for all brush entity types.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Originally posted in the [http://bani.anime.net/banimod/forums/ ETPro forums] by [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=800 Rain].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Scripting Examples by [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=1448 SiliconSlick]==&lt;br /&gt;
===Example 1: Additional Axis spawn in the trainyard tower on Railgun===&lt;br /&gt;
[http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=1448 SiliconSlick] made a [http://en.wikipedia.org/wiki/Diff diff] for the Railgun map script to provide the axis with an additional spawn point in the trainyard tower.&lt;br /&gt;
&amp;lt;pre&amp;gt;--- railgun.script.etpro.orig   Wed Mar 31 20:01:18 2004&lt;br /&gt;
+++ railgun.script      Mon Aug 23 10:11:08 2004&lt;br /&gt;
@@ -6,6 +6,83 @@&lt;br /&gt;
 {&lt;br /&gt;
        spawn&lt;br /&gt;
        {&lt;br /&gt;
+               // SS - new spawns for Axis&lt;br /&gt;
+               create&lt;br /&gt;
+               {&lt;br /&gt;
+                       targetname &amp;quot;axistowermarker&amp;quot;&lt;br /&gt;
+                       scriptname &amp;quot;axistowermarker&amp;quot;&lt;br /&gt;
+                       spawnflags 3&lt;br /&gt;
+                       description &amp;quot;Axis Tower&amp;quot;&lt;br /&gt;
+                       origin &amp;quot;2050 5100 625&amp;quot;&lt;br /&gt;
+                       classname &amp;quot;team_WOLF_objective&amp;quot;&lt;br /&gt;
+               }&lt;br /&gt;
+&lt;br /&gt;
+               create&lt;br /&gt;
+               {&lt;br /&gt;
+                       classname &amp;quot;team_CTF_redspawn&amp;quot;&lt;br /&gt;
+                       scriptname &amp;quot;redspawn_00&amp;quot;&lt;br /&gt;
+                       spawnflags 3&lt;br /&gt;
+                       origin &amp;quot;2000 5175 625&amp;quot;&lt;br /&gt;
+                       angle &amp;quot;-45&amp;quot;&lt;br /&gt;
+                       mins &amp;quot;-30 -30 -30&amp;quot;&lt;br /&gt;
+                       maxs &amp;quot;30 30 30&amp;quot;&lt;br /&gt;
+               }&lt;br /&gt;
+&lt;br /&gt;
+               create&lt;br /&gt;
+               {&lt;br /&gt;
+                       classname &amp;quot;team_CTF_redspawn&amp;quot;&lt;br /&gt;
+                       scriptname &amp;quot;redspawn_00&amp;quot;&lt;br /&gt;
+                       spawnflags 3&lt;br /&gt;
+                       origin &amp;quot;2000 5175 360&amp;quot;&lt;br /&gt;
+                       angle &amp;quot;-45&amp;quot;&lt;br /&gt;
+                       mins &amp;quot;-30 -30 -30&amp;quot;&lt;br /&gt;
+                       maxs &amp;quot;30 30 30&amp;quot;&lt;br /&gt;
+               }&lt;br /&gt;
+&lt;br /&gt;
+               create&lt;br /&gt;
+               {&lt;br /&gt;
+                       classname &amp;quot;team_CTF_redspawn&amp;quot;&lt;br /&gt;
+                       scriptname &amp;quot;redspawn_00&amp;quot;&lt;br /&gt;
+                       spawnflags 3&lt;br /&gt;
+                       origin &amp;quot;2100 5175 625&amp;quot;&lt;br /&gt;
+                       angle &amp;quot;-135&amp;quot;&lt;br /&gt;
+                       mins &amp;quot;-30 -30 -30&amp;quot;&lt;br /&gt;
+                       maxs &amp;quot;30 30 30&amp;quot;&lt;br /&gt;
+               }&lt;br /&gt;
+&lt;br /&gt;
+               create&lt;br /&gt;
+               {&lt;br /&gt;
+                       classname &amp;quot;team_CTF_redspawn&amp;quot;&lt;br /&gt;
+                       scriptname &amp;quot;redspawn_00&amp;quot;&lt;br /&gt;
+                       spawnflags 3&lt;br /&gt;
+                       origin &amp;quot;2100 5050 625&amp;quot;&lt;br /&gt;
+                       angle &amp;quot;135&amp;quot;&lt;br /&gt;
+                       mins &amp;quot;-30 -30 -30&amp;quot;&lt;br /&gt;
+                       maxs &amp;quot;30 30 30&amp;quot;&lt;br /&gt;
+               }&lt;br /&gt;
+&lt;br /&gt;
+               create&lt;br /&gt;
+               {&lt;br /&gt;
+                       classname &amp;quot;team_CTF_redspawn&amp;quot;&lt;br /&gt;
+                       scriptname &amp;quot;redspawn_00&amp;quot;&lt;br /&gt;
+                       spawnflags 3&lt;br /&gt;
+                       origin &amp;quot;2100 5050 360&amp;quot;&lt;br /&gt;
+                       angle &amp;quot;135&amp;quot;&lt;br /&gt;
+                       mins &amp;quot;-30 -30 -30&amp;quot;&lt;br /&gt;
+                       maxs &amp;quot;30 30 30&amp;quot;&lt;br /&gt;
+               }&lt;br /&gt;
+&lt;br /&gt;
+               create&lt;br /&gt;
+               {&lt;br /&gt;
+                       classname &amp;quot;team_CTF_redspawn&amp;quot;&lt;br /&gt;
+                       scriptname &amp;quot;redspawn_00&amp;quot;&lt;br /&gt;
+                       spawnflags 3&lt;br /&gt;
+                       origin &amp;quot;2000 5050 625&amp;quot;&lt;br /&gt;
+                       angle &amp;quot;45&amp;quot;&lt;br /&gt;
+                       mins &amp;quot;-30 -30 -30&amp;quot;&lt;br /&gt;
+                       maxs &amp;quot;30 30 30&amp;quot;&lt;br /&gt;
+               }&lt;br /&gt;
+&lt;br /&gt;
                //bani - bug fixes&lt;br /&gt;
                create&lt;br /&gt;
                { &amp;lt;/pre&amp;gt;&lt;br /&gt;
===Example 2: Depot Yard capture for Axis when Tug loaded on Railgun===&lt;br /&gt;
This is another diff that makes it so that when the first tug gets loaded with ammo, the Depot Yard spawn point gets captured permanently for the axis.&lt;br /&gt;
&amp;lt;pre&amp;gt;--- railgun.script.etpro.orig   Wed Mar 31 20:01:18 2004&lt;br /&gt;
+++ railgun.script      Mon Aug 23 10:11:08 2004 &lt;br /&gt;
@@ -3088,6 +3165,8 @@&lt;br /&gt;
                                                                                                                                                             &lt;br /&gt;
                wm_set_main_objective   2 0&lt;br /&gt;
                wm_set_main_objective   2 1&lt;br /&gt;
+&lt;br /&gt;
+               trigger depotflag axis_capture_forgood  // SS - depot now permanently axis&lt;br /&gt;
        }&lt;br /&gt;
 }&lt;br /&gt;
                                                                                                                                                             &lt;br /&gt;
@@ -6022,18 +6101,35 @@&lt;br /&gt;
                wait 200&lt;br /&gt;
                setstate capturespawn invisible&lt;br /&gt;
                accum 0 set 0&lt;br /&gt;
+               accum 1 set 0  // SS - nobody had flag last&lt;br /&gt;
        }&lt;br /&gt;
                                                                                                                                                             &lt;br /&gt;
        trigger axis_capture&lt;br /&gt;
        {&lt;br /&gt;
                trigger game_manager depotflagred&lt;br /&gt;
                trigger depotflag setaxis&lt;br /&gt;
+               accum 1 set 2  // SS - axis had flag last&lt;br /&gt;
+       }&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
+       // SS - give depot yard to axis permanently&lt;br /&gt;
+       trigger axis_capture_forgood&lt;br /&gt;
+       {&lt;br /&gt;
+               trigger game_manager depotflagred&lt;br /&gt;
+               trigger depotflag setaxis&lt;br /&gt;
+&lt;br /&gt;
+               alertentity depotspawn  // wake it up&lt;br /&gt;
+               setstate depotflag invisible  // remove flag&lt;br /&gt;
+               accum 1 abort_if_less_than 2  // should be done if allies or nobody had it&lt;br /&gt;
+               alertentity depotspawn  // switch to axis&lt;br /&gt;
+               wm_announce &amp;quot;Axis have permanently captured the Depot Yard!&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        trigger allied_capture&lt;br /&gt;
        {&lt;br /&gt;
                trigger game_manager depotflagblue&lt;br /&gt;
                trigger depotflag setallies&lt;br /&gt;
+               accum 1 set 1  // SS - allied had flag last&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        trigger setaxis &amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Originally posted in the [http://bani.anime.net/banimod/forums/ ETPro forums] and the [http://www.nd80usa.net/modules.php?name=Forums&amp;amp;file=viewtopic&amp;amp;t=11941&amp;amp;start=49 ND80 forums] by [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=1448 SiliconSlick].&#039;&#039;&#039;&lt;br /&gt;
==Unresolved issues==&lt;br /&gt;
===[http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=1859 Ragnar_40k]&#039;s destroyable team door on Radar===&lt;br /&gt;
I played around with the ETPro scripts and tried to make the axis team door next to the main gate satchable.&lt;br /&gt;
As first step I simply copied over the code for the battery backdoor and only changed the origin-key.&lt;br /&gt;
When I start the map I can throw a satchel next to the team door and get 7.5XP when I blast it. But I get no message and the teamdoor doesnt disapper.&lt;br /&gt;
It seems that the trigger &amp;quot;death&amp;quot; for &amp;quot;backdoor_obj&amp;quot; isn&#039;t called.&lt;br /&gt;
Can you say what is wrong?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
game_manager&lt;br /&gt;
{&lt;br /&gt;
   spawn&lt;br /&gt;
   {&lt;br /&gt;
      create&lt;br /&gt;
      {&lt;br /&gt;
         scriptName &amp;quot;backdoor&amp;quot;&lt;br /&gt;
         classname &amp;quot;func_explosive&amp;quot;&lt;br /&gt;
         targetname &amp;quot;backdoor&amp;quot;&lt;br /&gt;
         origin &amp;quot;-1518 16 1406&amp;quot;&lt;br /&gt;
         mins &amp;quot;-63 -10 0&amp;quot;&lt;br /&gt;
         maxs &amp;quot;63 10 128&amp;quot;&lt;br /&gt;
         spawnflags 1   // AXIS_OBJECTIVE(1)&lt;br /&gt;
         eflags 65536   // EF_FAKEBMODEL&lt;br /&gt;
         svflags 1   // SVF_NOCLIENT&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      create&lt;br /&gt;
      {&lt;br /&gt;
         scriptName &amp;quot;backdoor_obj&amp;quot;&lt;br /&gt;
         classname &amp;quot;trigger_objective_info&amp;quot;&lt;br /&gt;
         targetname &amp;quot;backdoor_obj&amp;quot;&lt;br /&gt;
         target &amp;quot;backdoor&amp;quot;&lt;br /&gt;
         origin &amp;quot;-1518 16 1406&amp;quot;&lt;br /&gt;
         mins &amp;quot;-95 -85 0&amp;quot;&lt;br /&gt;
         maxs &amp;quot;95 85 128&amp;quot;&lt;br /&gt;
         spawnflags 17   // AXIS_OBJECTIVE(1) | CUSTOMIMAGE&lt;br /&gt;
         track &amp;quot;the Back Door&amp;quot;&lt;br /&gt;
         shortname &amp;quot;Back Door&amp;quot;&lt;br /&gt;
         customaxisimage &amp;quot;gfx/limbo/cm_radar_maindoor&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
               .&lt;br /&gt;
               .&lt;br /&gt;
               .&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
backdoor&lt;br /&gt;
{&lt;br /&gt;
   spawn&lt;br /&gt;
   {&lt;br /&gt;
      wait 50&lt;br /&gt;
      constructible_class 2&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
backdoor_obj&lt;br /&gt;
{&lt;br /&gt;
   death&lt;br /&gt;
   {&lt;br /&gt;
      wm_announce &amp;quot;Allied team has destroyed the Axis Team Door!&amp;quot;&lt;br /&gt;
      trigger teamonlydoor1 hide&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
teamonlydoor1&lt;br /&gt;
{&lt;br /&gt;
   trigger hide&lt;br /&gt;
   {&lt;br /&gt;
      remove&lt;br /&gt;
      // setstate teamonlydoor1 invisible&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
The trigger backdoor_obj-&amp;gt;death isn&#039;t called (I don&#039;t see the text from the wm_announce) . But the func_explosive &amp;quot;backdoor&amp;quot; I created is deystroyed (I get the XP for it).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Originally posted in the [http://bani.anime.net/banimod/forums/ ETPro forums] by [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=1859 Ragnar_40k].&#039;&#039;&#039;&lt;br /&gt;
===[http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=2786 MoB Seany]&#039;s Health and Ammo Cabinets===&lt;br /&gt;
Ok, now I want to get it to show up on the command map&lt;br /&gt;
I already have&lt;br /&gt;
&amp;lt;pre&amp;gt;game_manager&lt;br /&gt;
{&lt;br /&gt;
spawn&lt;br /&gt;
            {&lt;br /&gt;
create&lt;br /&gt;
      {&lt;br /&gt;
        targetname &amp;quot;ammo&amp;quot;&lt;br /&gt;
        scriptname &amp;quot;ammo&amp;quot;&lt;br /&gt;
        origin &amp;quot;-1373 -1100 192&amp;quot;&lt;br /&gt;
        classname &amp;quot;misc_cabinet_supply&amp;quot;&lt;br /&gt;
        angle &amp;quot;270&amp;quot;&lt;br /&gt;
        mins &amp;quot;-45 -45 -25&amp;quot;&lt;br /&gt;
        maxs &amp;quot;45 45 25&amp;quot;&lt;br /&gt;
        ammototal &amp;quot;100&amp;quot;&lt;br /&gt;
        modelscale &amp;quot;1&amp;quot;&lt;br /&gt;
        contents &amp;quot;1&amp;quot;&lt;br /&gt;
        clipmask &amp;quot;1&amp;quot;&lt;br /&gt;
        model &amp;quot;models/mapobjects/supplystands/stand_ammo.md3&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
create&lt;br /&gt;
      {&lt;br /&gt;
        target &amp;quot;ammo&amp;quot;&lt;br /&gt;
        ammototal &amp;quot;40&amp;quot;&lt;br /&gt;
        ammorate &amp;quot;1&amp;quot;&lt;br /&gt;
        origin &amp;quot;-1373 -1100 192&amp;quot;&lt;br /&gt;
        classname &amp;quot;trigger_ammo&amp;quot;&lt;br /&gt;
        targetname &amp;quot;ammoarea&amp;quot;&lt;br /&gt;
        scriptname &amp;quot;ammoarea&amp;quot;&lt;br /&gt;
        modelscale &amp;quot;1&amp;quot;&lt;br /&gt;
        contents &amp;quot;1&amp;quot;&lt;br /&gt;
        mins &amp;quot;-45 -45 -25&amp;quot;&lt;br /&gt;
        maxs &amp;quot;45 45 25&amp;quot;&lt;br /&gt;
        clipmask &amp;quot;1&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
create&lt;br /&gt;
      {&lt;br /&gt;
        targetname &amp;quot;health&amp;quot;&lt;br /&gt;
        scriptname &amp;quot;health&amp;quot;&lt;br /&gt;
        origin &amp;quot;-1488 -1175 192&amp;quot;&lt;br /&gt;
        classname &amp;quot;misc_cabinet_health&amp;quot;&lt;br /&gt;
        angle &amp;quot;360&amp;quot;&lt;br /&gt;
        mins &amp;quot;-45 -45 -25&amp;quot;&lt;br /&gt;
        maxs &amp;quot;45 45 25&amp;quot;&lt;br /&gt;
        modelscale &amp;quot;1&amp;quot;&lt;br /&gt;
        contents &amp;quot;1&amp;quot;&lt;br /&gt;
        clipmask &amp;quot;1&amp;quot;&lt;br /&gt;
        model &amp;quot;models/mapobjects/supplystands/stand_ammo.md3&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
create&lt;br /&gt;
      {&lt;br /&gt;
        target &amp;quot;health&amp;quot;&lt;br /&gt;
        scriptname &amp;quot;healtharea&amp;quot;&lt;br /&gt;
        targetname &amp;quot;healtharea&amp;quot;&lt;br /&gt;
        classname &amp;quot;trigger_heal&amp;quot;&lt;br /&gt;
        origin &amp;quot;-1488 -1175 192&amp;quot;&lt;br /&gt;
        healtotal &amp;quot;400&amp;quot;&lt;br /&gt;
        healrate &amp;quot;10&amp;quot;&lt;br /&gt;
        modelscale &amp;quot;1&amp;quot;&lt;br /&gt;
        contents &amp;quot;1&amp;quot;&lt;br /&gt;
        mins &amp;quot;-45 -45-25&amp;quot;&lt;br /&gt;
        maxs &amp;quot;45 45 25&amp;quot;&lt;br /&gt;
        clipmask &amp;quot;1&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
create&lt;br /&gt;
      {&lt;br /&gt;
        classname &amp;quot;trigger_objective_info&amp;quot;&lt;br /&gt;
        target &amp;quot;help_marker_toi&amp;quot;&lt;br /&gt;
        scriptname &amp;quot;ammo_info_toi&amp;quot;&lt;br /&gt;
        track &amp;quot;Health and Ammo Cabinets&amp;quot;&lt;br /&gt;
        targetname &amp;quot;ammo_info_toi&amp;quot;&lt;br /&gt;
        shortname &amp;quot;Health and Ammo Cabinets&amp;quot;&lt;br /&gt;
        spawnflags &amp;quot;is_healthammocabinet&amp;quot;&lt;br /&gt;
        customimage &amp;quot;gfx/limbo/cm_healthammo&amp;quot;&lt;br /&gt;
        origin &amp;quot;-1352 -1179 256&amp;quot;&lt;br /&gt;
        modelscale &amp;quot;1&amp;quot;&lt;br /&gt;
        contents &amp;quot;1&amp;quot;&lt;br /&gt;
        mins &amp;quot;-45 -45-25&amp;quot;&lt;br /&gt;
        maxs &amp;quot;45 45 25&amp;quot;&lt;br /&gt;
        clipmask &amp;quot;1&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
      }&lt;br /&gt;
create&lt;br /&gt;
      {&lt;br /&gt;
        classname &amp;quot;misc_commandmap_marker&amp;quot;&lt;br /&gt;
        scriptname &amp;quot;help_marker_toi&amp;quot;&lt;br /&gt;
        targetname &amp;quot;help_marker_toi&amp;quot;&lt;br /&gt;
        contents &amp;quot;1&amp;quot;&lt;br /&gt;
        clipmask &amp;quot;1&amp;quot;&lt;br /&gt;
        origin &amp;quot;-1488 -1175 192&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
                 }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Its works and has a &amp;quot;You are near Health and Ammo&amp;quot; message, but what do I need to do to get it to show up ont he command map?&lt;br /&gt;
I did have script_mover parts as well before I removed them:&lt;br /&gt;
&amp;lt;pre&amp;gt;create&lt;br /&gt;
      {&lt;br /&gt;
     targetname &amp;quot;ammo_clip&amp;quot;&lt;br /&gt;
     scriptname &amp;quot;ammo_clip&amp;quot;&lt;br /&gt;
     classname &amp;quot;script_mover&amp;quot;&lt;br /&gt;
     spawnflags &amp;quot;2&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
create&lt;br /&gt;
      {&lt;br /&gt;
     targetname &amp;quot;health_clip&amp;quot;&lt;br /&gt;
     scriptname &amp;quot;health_clip&amp;quot;&lt;br /&gt;
     classname &amp;quot;script_mover&amp;quot;&lt;br /&gt;
         spawnflags &amp;quot;2&amp;quot;&lt;br /&gt;
                           }&amp;lt;/pre&amp;gt;&lt;br /&gt;
But, no matter what properties i removed, it still said a model was required for script_mover. Is a script_mover class really that important? And if so, what do I need to do to fix it? If not, then what must be done for it to show up on the command map? Thanks.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Originally posted in the [http://bani.anime.net/banimod/forums/ ETPro forums] by [http://bani.anime.net/banimod/forums/profile.php?mode=viewprofile&amp;amp;u=2786 MoB Seany].&#039;&#039;&#039;&lt;br /&gt;
[[Category:ETPro]][[Category:ETPro:Mapping]]&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Fieldname&amp;diff=2289</id>
		<title>Talk:Fieldname</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Fieldname&amp;diff=2289"/>
		<updated>2006-05-16T01:53:53Z</updated>

		<summary type="html">&lt;p&gt;ReyalP: /* Question */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;someone feel free to make this table pretty.&lt;br /&gt;
&lt;br /&gt;
Roger that. --Rookie One 03:31, 13 November 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
// Comment by Deus 13:22, 13 November 2005 (CET)&lt;br /&gt;
I liked the former one more.&lt;br /&gt;
I thought about some colorisation like red for readonly and green for r/w. maybe some mouseover stuff, or just the one tr light the next darker, to have a better viewability ?&lt;br /&gt;
// End of Deus Comment&lt;br /&gt;
&lt;br /&gt;
Alright, I&#039;ll restore the previous borders and add some colour. --Rookie One 04:33, 13 November 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
That was just my suggestion. Maybe this differs from banis view of beautification :) --Deus 04:46, 13 November 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
== use of color...bad! ==&lt;br /&gt;
&lt;br /&gt;
use of color to convey specific data (ro/rw) is bad. red/green is the worst possible choice too :)&amp;lt;br&amp;gt;&lt;br /&gt;
consider someone who is colorblind. check the article via http://colorfilter.wickline.org/ to see how bad this is.&lt;br /&gt;
but it looks bad even for those who aren&#039;t color blind :P&lt;br /&gt;
&lt;br /&gt;
Yeah, reyalP, I also thought it&#039;s weird to initialize the table like that, but wasn&#039;t sure. ;) --Rookie One 06:26, 17 November 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
== Question ==&lt;br /&gt;
&lt;br /&gt;
Is there a article describing each fieldname?&lt;br /&gt;
: No. To understand what they do, you need to look at the ET gamecode. Some Quake3 coding articles might also help you. It would be nice if someone documented some of the more common/interesting ones, but documenting them all would be a huge task. In the future, if you are looking for something, you can see all the pages in the wiki at [[Special:Allpages]]. If you have questions about specific fields, you can try asking on the [http://bani.anime.net/banimod/forums/viewforum.php?f=17 ETPro modding forum] Also, please sign your comments with &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
::- [[User:ReyalP|ReyalP]] 18:53, 15 May 2006 (PDT)&lt;/div&gt;</summary>
		<author><name>ReyalP</name></author>
	</entry>
</feed>