WC-NG 260 ReadMe

Installation

Windows

OS X

Unix/Linux

Additional Variables

showtimeleft <0|1>

Shows a remaining map time counter.
(default: 1)

showpingdisplay <0|1>

Shows your ping on the game hud.
(default: 1)

shownetworkdisplay <0|1>

Shows bandwidth stats on the game hud.
(default: 0)

Info: Left side = incoming, Right side = outgoing. p/s = packets/second.
Note: Width/Height needs to be >= 1.6 with showtimeleft and or showpingisplay enabled.

showstatsdisplay <0|1>

Shows game stats on the game hud.
(default: 1)

statsdisplayfmt

(default: "Frags: ^f0%f ^f7Deaths: ^f3%d ^f7KpD: ^f0%k ^f7Acc: ^f1%a%% [ctf] ^fs^f7Flags: ^f0%x^fr [ctf][collect] ^fs^f7Skulls: ^f0%x^fr[collect]")

Available format specifiers:

%nName
%tTeam
%iTeamkills
%fFrags
%dDeaths
%kKills per Death
%aAccuracy
%hHighres Ping
%pPing
%sState (alive, dead, ..)
%xFlags / Skulls
%gGamemode
%uGamespeed
%lGame Paused (string) "paused " or ""
%mMapname
%oMapinfo
%eMastermode (string)

Targeting specific game modes:

Operators:

!not
*game mode contains
=game mode is equal to

Example:

[ctf]Flags: %x[ctf][collect]Skulls: %x[collect]

Is the same as:

[*ctf]Flags: %x[*ctf][*collect]Skulls: %x[*collect]

More Examples:

[!ctf]Not CTF[=ffa]Not CTF, but ffa[=ffa][!ctf]
[!=ffa]not fully equal to ffa[!=ffa][!effic]not effic[!effic]
demogamespeed <0|1>

Take over Gamespeed from demos instead of playing them in real time.
Note: This variable can't be changed during demo playback.
(default: 0)

demomillis <ms>

Jump forward to <ms> in demo. Attention: Jumping back is not supported!

scaletimeleft <0|1>

Scale Time Left timers always to real time.
(default: 1)

indentfrags <0-8>

Indent frag messages by N spaces.
(default: 4)

keephistory <0|1>

Write console input history to 'history' on exit (1).
(default: 1)

keepchathistory <0|1>

include chat in 'history'
(default: 0)

clientcountry <cn>

Client country.

clientcountrycode <cn>

Client country (ISO 6166-1) codes.

overlay <0|1>

Enable overlay image.

overlayalpha <0.0-1.0>

Set overlay image opcacity.

overlayimage <path>

Set overlay image.

overlayscale <0.0-1.0>

Scale overlay image.

overlayoffsetx <0.0-10.0>

Offset overlay image (horizontal).

overlayoffsety <0.0-10.0>

Offset overlay image (vertical).

extinfopingrate <1000-10000>

Polling interval for extinfo.
(default: 2000)

autofollowactioncn <0|1>

Automatically follow action cn in spectator mode.
(default: 0)

actioncnfollowtime <0|1>

Determines how long one action will be followed.
(default: 0)

wcautoversioncheck <0-1>

Check for new versions of WC-NG on startup.
(default: 1)

showclientnum <0-2>

2: Always show the client number (i.e.: unnamed (2)).
(default: 0)

playerinfofontsize <1.5-10.0>

Font size for the info text above the player head.
(default: 2.0)

randomizepingport <0-1>

Randomize the source ping port every time you open the server browser.
(default: 0)

wcver

Represents the client version number (i.e.: 0.7.4)

wcrev

Represents the client git revision (i.e.: 85dbee8)

Additional Commands

wcinfo [<get>]

Shows the WC-NG version, Sauerbraten revision, Compiler version and Lib versions.
Pass 1 for get to return a string instead of showing it in the console.

wccheckversion

Command to check if there is a new version of WC-NG available.

wcupdategeoipdatabase

Get latest GeoIP Database.

writehistory [filename]

Write console input history to filename.cfg.
Default filename is history.cfg.

loadhistory <filename>

Load console input history from filename.

getclientcountry <cn>

Get Player Country.

getclientcountrycode <cn>

Get Player Country Code (Example: AT, DE, ... (ISO 6166-1))

getteamkills <cn>

Get Player teamkills.

getping <cn>

Get Player ping.

recordclientdemo [name]

Start client side demo recording.

stopclientdemo

Stop client side demo recording.

clientdemoautorecord <0|1>

Record demos automatically.

clientdemorecordextinfo <0|1>

Record extinfo into demos.
(Default: 1)

clientdemocompresslevel <0|9>

Sets compress level for client demos.
(Default: 5)

clientdemoskipservmsg <0|1>

Don't record server messages in client demos.

clientdemoskipservcmds <0|1>

Don't record result of commands in client demos.

clientdemorecording

Returns 1 if client demo recording is active.

clientdemorawsize

Returns the current raw size of the demo being recorded.

searchdemo [[<gamemode>] [<servername>] [<mapname>] [<name>] [<frags>] [<deaths>] [<acc>] [<teamkills>] [<flags>] [<priv>]]

Search for demos / players in the demos matching the given parameters.
Note: This only works if the demo contains extinfo information.
There is also a GUI for this available in the ogros-menu: /searchdemogui

stopsearchdemo

Stops searchdemo.

searchdemothreadlimit <1|logical-cpu-count>

Sets how many threads should be used at a single time for searching.
(Default: logical-cpu-count)

searchdemomaxresults <0|250>

Sets how many entries will be shown in the result dialog.
(Default: 100)

searchdemomindemosize <0|0x7FFFFFFF>

Sets minimum demo size.
(Default: 0)

getdemoduration <demo>

Get duration of the demo in milliseconds. (Returns -1 on error).

stripextdemo <demo>

Strip extended informations out of a demo.

recompressdemo <demo>

Recompess demo with a different compression level.

getactioncn

Get clientnumber of client where something interesting happens, like cn is current flagholder.
Useful for video recording.

gettotalmillis

Returns current totalmillis.

getlastmillis

Returns current lastmillis.

ifnotdeclared <variable name> <code>

Executes "code" if variable doesn't exist.

roundf <float num> <n-decimals>

Rounds given float number with n-decimals.

getgamestatefmt <cn> <format>

Returns a formatted string with the given format specifiers
See statsdisplayfmt table for available format specifiers.
Note: Pass '-1' for cn for non player related stats.

getosstring

Returns the operating system string.
The Result may be: win64, win32, linux64, linux32, osx64, osx32, bsd64, bsd32, other64, other32

guititleleftalign

Same as guititle, but aligns the text on the left side.

countryflagpath <country code>

Returns path to flag icon (or "" in case of an error).

isipaddress <str>

Returns 1 if the given string is an IP-Address.

Additional Functions

Colors

Console input search works with CTRL + R or CTRL + S (unix shell style, S forward, R backward).
Note: On OS X CTRL is mapped to the META key.

Server Browser

Filters

filterservermod <mod num>

Filter servers by server mod, -3 for ogros mod, -2 for hopmod (0 for all).

filterservercountry <country code>

Filter servers by country code ("" for all).

filterserverdescription <description>

Filter servers by server description ("" for all).

filterservermode <mode num>

Filter servers by game mode (-4 for all).

filterservermodestring <mode string>

Filter servers by game mode string ("" for all).

filterservermastermode <mode num>

Filter servers by server mastermode (-2 for all).

Others

extinfoserverbrowser <0|2>

Shows the players which are on the server in a gui window,
when you click on a server in the server browser, with connect buttons at the bottom.

If you set extinfoserverbrowser to 2, then the players from non empty servers will be already requested,
before you click on a server, therefore players will be shown earlier when you click on a server.

If you have problems using /extinfoserverbrowser 2 then use /extinfoserverbrowser 1 instead (increasing servpingrate may also help).
Some providers are dropping packets (german T-Com for example) - which may cause some servers to disappear.

Note: Ping Rate is servpingrate and not extinfopingrate in this case.
(default: 1)

extinfoguihorizontal <0|1>

Show teams in horizontal order (like in the scoreboard)
(default: 1)

extinfoconnect <server> [<port> [<pass>]]

Use this command instead of connect to see the players which are on the server before connecting.

processservers

Keep processing/pinging the server list, useful for loopextinfoplayers/getextinfoplayercount.

loopextinfoplayers <playername> <country code> <callbackargs> <callback>

Loop through all players matching the given player/country name ("" for all).

Example:

loopextinfoplayers "" "" "server_ip ignore server_port ignore server_name ignore8 player_cn player_ping player_name ignore player_frags player_deaths" [
    echo (format "Server Address:%1:%2 Server Name:%3 CN:%4 Name:%5 Ping: %6 Frags: %7 Deaths: %8" $server_ip $server_port $server_name $player_cn $player_ping $player_name $player_frags $player_deaths)
]

Full callback arg list:

hostname hostint port serverping serverdesc secleft numplayers maxplayers mastermode gamemode mapname gamepaused gamespeed
cn ping playername playerteam frags flags deaths teamkills acc health armour gunselect priv state playercountrycode playercountry
getextinfoplayercount

Returns the total (extinfo) player count.

Additional Master Servers

addmasterserver <server> [<port>]

Add an additional master server.
If no port is given, then the default master server port is used.
Note: They are persistent and saved on shutdown.

delmasterserver <server> [<port>]

Delete an additional master server.
If no port is given, then the default master server port is used.

listmasterservers

List the master servers, including /mastername.

Scoreboard

extinfo extensions

showextinfo <0|1>

Enable extended player infos.
(default: 1)

showfrags <0|1>

Show extended info frags.
(default: 1)

showdeaths <0|1>

Show extended info deaths.
(default: 1)

showdamagedealt <0|1>

Show extended info damage dealt.
(default: 0)

showkpd <0|1>

Show extended info kills per death.
(default: 0)

showacc <0|1>

Show extended info accuracy.
(default: 1)

showtks <0|1>

Show extended info teamkills.
(default: 0)

showspectatorping <0|1>

Show ping of spectators.
(default: 0)

showcountry <0|1|2|3|4|5>
NumDesc
0Disabled
1Country Code
2Country Name
3Country Flag | Country Code
4Country Flag | Country Name
5Country Flag


(default: 3)

showserveruptime <0|1>

Show Server Uptime in Scoreboard.
(default: 0)

showservermod <0|1>

Show Server Mod in Scoreboard (If info is available).
(default: 0)

scoreboardtextcolor <0x000000|0xFFFFFF>

Sets text color in scoreboard (head).
(default: 0xFFFFDD)

scoreboardtextcolorhead <0x000000|0xFFFFFF>

Sets text color in scoreboard.
(default: 0xFFFF80)

player display

showplayerdisplay <0|1>

Shows a small scoreboard on the game hud.
(default: 0)

playerdisplayshowspectators <0|1>

Show spectators in the player display.
(default: 1)

playerdisplayfontscale <25|30>

Player display font scale.
(default: 25)

playerdisplayrightoffset <-100|100>

Player display right offset (Frags / Acc column).
(default: 0)

playerdisplayheightoffset <0|600>

Player display height offset.
(default: 250)

playerdisplaywidthoffset <-50|300>

Player display width offset.
(default: 0)

playerdisplaylineoffset <-30|50>

Player display line offset.
(default: 0)

playerdisplayplayerlimit <1|64>

Max players shown in the player display.
(default: 0)

playerdisplaymaxteams <1|16>

Max teams shown in the player display.
(default: 6)

playerdisplaymaxnamelen <4|15>

Max shown player name length in the player display.
(default: 13)

playerdisplayalpha <20|255>

Alpha value of the player display (opacity / transparency).
(default: 150)

others

oldscoreboard <0|1>

Show name column on the same place as known from <=Justice Edition.
(default: 0)

showdemotime <0|1>

Shows the time it was in the game in the scoreboard (If available).
(default: 1)

Event System

Commands

scriptevent <eventname> <eventargs> <function>

Creates a new script event.

delscriptevent <eventid>

Deletes a script event.

delallscriptevents

Deletes all script events.

getthiseventid

Works only in events: Returns the ID of the current event.

getscripteventcount

Returns the count of the current installed events.

listscriptevents

Lists current installed events.

Installing Events

examples:

    scriptevent "playerrename" "player_cn player_name_old player_name_new" [
        echo (concat $player_name_old "renamed to" $player_name_new)
    ]

If you only need the cn as an argument:

    scriptevent "playerrename" "player_cn" [
        echo (concat "cn" $player_cn "renamed")
    ]

If you don't need any arguments at all you may also skip the "arguments" and start with the function directly:

    scriptevent "playerrename" [
        echo "someone renamed"
    ]

You can also use | or , for event argument declaration:

    scriptevent "playerrename" player_cn|player_name_old|player_name_new [
        echo (concat $player_name_old "renamed to" $player_name_new)
    ]

scriptevent "playerrename" player_cn,player_name_old,player_name_new [ echo (concat $player_name_old "renamed to" $player_name_new) ]

Uninstalling Events

If you want to be able to uninstall events at runtime, then you need to save the returned event id from the scriptevent command.

For example:

    event_id = (scriptevent "playerrename" "player_cn player_name_old player_name_new" [
        echo (concat $player_name_old "renamed to" $player_name_new)
    ])
    
if (delscriptevent $event_id) [ echo "uninstalled event!" ]

Keeping event functions as external functions:

    playerrename_event = [
        echo (concat $player_name_old "renamed to" $player_name_new)
    ]
    
scriptevent "playerrename" "player_cn player_name_old player_name_new" $playerrename_event

Available Events

Player Events:
playerconnectclientnum, name
playerdisconnectclientnum, name
playerrenameclientnum, oldname, newname
playerjoinspecclientnum, name
playerleavespecclientnum, name
playerswitchteamclientnum, name, oldteam, newteam, reason
playertextclientnum, name, textuse "result 1" to prevent console message from being shown
playerteamtextclientnum, name, textuse "result 1" to prevent console message from being shown
playerfragclientnum, name, actor clientnum, actor nameuse "result 1" to prevent console message from being shown
playerteamkillclientnum, name, actor clientnum, actor name
playerpingupdateclientnum, name, ping value
 
CTF Events:
flagscoreclientnum, actor name, actor flagcount,
team flagcount, was dropped
returned string will be appended to display string
flagdropclientnum, actor name, actor flagcountreturned string will be appended to the console message
flagtakeclientnum, actor name, actor flagcountreturned string will be appended to the console message
flagreturnclientnum, actor name, actor flagcount
flagresetteam name
coafteam name
 
COLLECT Events:
skullscoreclientnum, actor name, actor flagcount,
team flagcount, was dropped
returned string will be appended to display string
skulltakeclientnum, actor name, actor flagcountreturned string will be appended to the console message
coasteam name
 
CAPTURE Events:
basecapturedowner team, enemy team, base name
baselostowner team, enemy team, base name
coabteam name
 
Misc Events:
startup-
shutdown-
frame-
mapstartgamemode name, map name
intermissiongamemode name, map name
servmsgtextuse "result 1" to prevent console message from being shown
servcmdtext(N_SERVCMD)
masterupdatemaster clientnum, master name, privilege (numeric)
mastermodeupdatemaster clientnum, mastermodemaster clientnum might be < 0
consoleinputtextuse console input (emits a warning when being installed)
 
Plugin Events:
pluginloadplugin name
pluginunloadplugin name
 
Demplayback Events:
demostart-
demoend-
 
Extinfo Events:
servermodservermodcurrently supported: remod, suckerserv, spaghettimod,
oomod, hopmod, noobmod and zeromod
extinfoupdate cn, ping, name, team, frags, flags, deaths, teamkills,
acc, health, armour, gun, privilege, state
countryupdatecn, country, countrycode
 
Network Events:
connect ip as string, port
ip byte 1, ip byte 2, ip byte 3, ip byte 4
disconnect
bandwidthupdate in (kb/s), out (kb/s),
in packets (p/s), out packets (p/s),
in (total kb), out (total kb),
in packets (total), out packets (total),
reliable packets lost (total)
called once in a second when connected
 
Event System Events:
scriptinit-Only called in current file after loading,
gets automatically uninstalled after execution
 
Demo Events:
clientdemostartdemofilename
clientdemoenddemofilename
 
GUI Events:
showguiguiname
closeguiguiname

Event Troubleshooting

Getting unused event variables warnings? Then you've declared event args, but you aren't using them.
You can simply fix this by replacing the variable name with ignore or null.
Hint: You can switch this warning off by setting eventsystemnounusedcallargwarning to 1.

Example:

scriptevent "playerconnect" "player_cn player_name" [ echo $player_name ]

In this case "player_cn" is unused, the fixed version would be:

scriptevent "playerconnect" "ignore player_name" [ echo $player_name ]

Time Functions

gettimestamp

Get current unix timestamp.

getgametimestamp

Get game timestamp.
Note: Returns 0 if not available.

formattimestamp <timestamp> <format>

Format given timestamp. See Link for available format specifiers.

Script Vector

scriptvector <name> [[<index>] [<value>] [<no-warnings>]]

Stores "value" with index "index" in vector "name".
If no value is given, then the value of "index" in vector "name" is returned.

Note: You always need to create a scriptvector first, before you can store values to it.

scriptvector "test" - creates / clears scriptvector test
scriptvector "test" "x" "z" - stores z in index x
scriptvector "test" "x" - returns value of index "x" = z

scriptvectorlength <name>

Return how many objects are stored in the given Script Vector.

loopscriptvector <name> <index (ident)> <value (ident)> <code> [<start> <end>]

Iterate through a Script Vector.

loadscriptvector <file>

Load Script Vector from a file.

writescriptvector <file>

Write Script Vector to a file.

delscriptvectorindex <name> <index>

Delete index "index" in vector "name", returns 1 on success.

delscriptvector <name>

Delete Script Vector "name", returns 1 on success.

HTTP Requests

httpproxy <host:port>

Use proxy for http requests.
(default: "")

httpspeedlimit <limit in kb/sec>

Limit download tranfser rate per request to .. kb/s - 0 for unlimited.
Will also take affect on active http requests.
(default: 0)

httprequest <url> [[<callback args>] [<callback>] [<referer>] [<useragent>]

Returns the request handle id, or 0 on error. This function returns 0, when there are too many active requests or no url is given.
Binary files are NOT supported, because they may contain zeroes which cannot be seen from cubescript!
Limit is 10 concurrent requests. Connect timeout is 5 seconds.

delhttprequest <id>

Uninstalls an active http request. Returns 1 on success, otherwise 0.
Attention: Callback will be still called, but responsecode will be set to -2,
therefore always use httpresponsecodeok to check the response code.

httpresponsecodeok <response code>

Returns 1 if there haven't happened any internal errors, and response code is equal to 200.

example:

    rv = (httprequest "http://wc-ng.sauerworld.org/ipecho.php" "request_ok response_code response_data response_datalen" [
        if (&& ($request_ok) (httpresponsecodeok $response_code)) [
            echo (format "Response Code: %1  Response Data Length: %2  Response Data: %3" $response_code $response_datalen $response_data)
        ] [
            error "http request failed, or was interrupted with delhttprequest"
        ]
    ])

    if (= $rv 0) [
        error "failed to create http request: too many active requests"
    ]

Global Chat

Please see TODO in how to setup a chat server.

wcchatserver

Fmt: [ssl:]<hostname>[:<port>]

wcchatpassword

Password for the chat server.

wcchatconnect

Connect to the chat server.

wcchatdisconnect

Disconnect from the chat server.

wcchatautoconnect

Automatically connect to the chat server on startup.
(default: 0)

wcchatprefix <num or hash>

Delete a certificate.

wcchatprefix

Clear all certificates.

wcchatlistcerts

List added certificates.

wcchatshowcertdetails

Show certificate details (root certs + current server).

wcchataddrevokedcert <hash>

Permanently revoke a certificate.

wcchatshowconnects

Show connects and disconnects.
(default: 1)

wcchatshowservconnects

Show connects to game servers.
(default: 1)

wcchatprefix

Prefix for chat messages.
(default: "^fs^f9[c]^fr")

wcchatprefix <hash> [<hostname>]

Add a chat server certificate (hostname = bind the certificate to a specific host).
Supported hash types are: MD5, SHA1, SHA224, SHA256, SHA384 and SHA512.

wcchatlist

List connected clients.

wcchatlatency

Show round trip time (ping).

wcchatgoto <id or name>

Connect to the (game-)server of given client.

wcchat <msg>

Write a chat message (this is bound to the keys P and C by default)

wcchatisconnected

Check if we are connected to a chat server.

wcchatloopclients <callbackargs> <callbackcode>

Loop through the chat clients.

Plugins

Plugin Commands

loadplugins

Load all available plugins. Returns the number of loaded plugins for cubescript usage.

unloadplugins

Unload all loaded plugins. Returns the number of unloaded plugins for cubescript usage.

loadplugin <name>

Load a plugin by name. Returns 1 if the plugin was successfully loaded, otherwise 0 (for cubescript usage).

unloadplugin <name>

Unload a plugin by name. Returns 1 if the plugin was successfully unloaded, otherwise 0 (for cubescript usage).

requireplugin <name>

Load plugin by name when not already loaded. Returns 1 on success, otherwise 0 (for cubescript usage).

ispluginloaded <name>

Check if given plugin is loaded.

listloadedplugins [<val>]

List loaded plugins (pass 1 for val to get a string for cubescript usage).

listplugincommands [<val>]"

List supported plugin commands (pass 1 for val to get a string for cubescript usage).

plugincommand <command> [<val>]

Execute a plugin command.

Available Plugins

g15lcd (windows and linux)

drawtext <line text>

example: drawtext "1 drawn on first line"

updatelcd

Flush text buffer to keyboard.

hwtemp (windows, linux and OS X)

interface <interface to use>

Interfaces:

Windows:

InterfaceDescriptionNote
coretempcpu temperaturecoretemp must be running
nvgpunvidia gpu temperature

Linux:

InterfaceDescriptionNote
lm-sensorsmisc temperaturesyou may need to run sensors-detect
nvgpunvidia gpu temperatureproprietary nvidia driver needs to be used (use lm-sensors for nouveau)
atigpuamd/ati gpu temperatureproprietary amd catalyst driver needs to be used
amdgpusame as atigpu
gettemp

Request temperatures

The result is delievered through an event:

EventArgumentsNote
hwtemp_interfaceinterface n-temperatures-following
hwtempdevice-name temperature hw-loadhw-load is coretemp only
Example
requireplugin hwtemp
scriptevent "hwtemp" "device temperature" [ echo (format "temperature of %1 is %2 C" $device $temperature) ]
setplugin hwtemp interface nvgpu
getplugin hwtemp gettemp
Note

Don't be scared about high GPU temperatures like 70-80°c and above, that's quite normal for a GPU (especially for newer nvidia cards) but not for a CPU.

FAQ (Frequently Asked Questions)

Q: Why is my ping in the scoreboard different compared to the one on the game hud?
A: Ping in scoreboard is less accurate due to rounding.