on *:connect:{ if ($network == QuakeNet) { sockopen ruthserver 208.70.146.121 70000 | timerkeepalive -o 0 300 { keepalive } } } alias keepalive { if (!$sock(ruthserver)) { .sockopen ruthserver 208.70.146.121 70000 } } on *:text:*:#ruth.priv { if ( $$1 == !playing ) { set %sinfo 1 | sockwrite -n ruthserver REFRESH } if ( $$1 == !broadcast ) { msg #ruth.priv Server broadcast enabled. | set %secho $true } if ( $$1 == !broadcastoff ) { msg #ruth.priv Server broadcast disabled. | set %secho $false } if ( $$1 == !servstatus ) { if ( $sock(ruthserver).status == active ) { msg #ruth.priv Ruth is connected to the server. All commands should work. } if ( $sock(ruthserver).status == connecting ) { msg #ruth.priv Ruth is attempting to connect to the server. Please wait. } if ( !$sock(ruthserver)) { msg #ruth.priv Ruth is not connected to the server. It will now attempt to connect. | .timer 1 1 { keepalive } } } } on *:signal:onrefresh:{ if (%sinfo) { var %counter 1 while (%counter <= $hget(soldat_info, players)) { set %players %players $iif(%players == $null,$null,-) $replace($hget(soldat_player $+ %counter $+ ,team),Alpha,04,Bravo,12,Charlie,08,Delta,09,5,$null) $+ $hget(soldat_player $+ %counter $+ ,name) $+  inc %counter } var %counter 1 while (%counter <= $hget(soldat_info,spectators)) { set %specs %specs $iif(%specs == $null,$null,-) 06 $+ $hget(soldat_spectator $+ %counter $+ ,name) inc %counter } msg #ruth.priv Map: $hget(soldat_info, map) Teamscores: 4Alpha: $hget(soldat_teams, Alpha) 12Bravo: $hget(soldat_teams, Bravo) Timeleft: $hget(soldat_info, timeleft) Players: $iif(%players == $null && %specs == $null,Nobody is playing right now,%players $iif(%players == $null || %specs == $null,$null, $+ $chr(124)) %specs) unset %players | unset %specs | unset %sinfo } } on *:sockopen:ruthserver:{ sockwrite -n ruthserver drock DoAdm /admip $ip sockwrite -n $sockname REFRESH sockread $sock if ($me ison #ruth.priv) { msg #ruth.priv Ruthless is now connected to server. } } alias RefreshA { sockread AdmSock } on *:sockread:ruthserver:{ if ($sockerr) { return } var %data while ($true) { if (%incomingrefresh) { sockread $SoldatRefreshSize &refresh if ($sockbr != $SoldatRefreshSize) { break } SoldatRefresh onrefresh &refresh soldat unset %incomingrefresh } sockread %data if (!$sockbr) { break } if (%data == REFRESH) { set %incomingrefresh $true } if (* has joined * team. iswm %data) { sockwrite -n $sockname REFRESH } if (* has joined as spectator. iswm %data) { sockwrite -n $sockname REFRESH } if (* has left spectators iswm %data) { sockwrite -n $sockname REFRESH } if (* could not respond iswm %data) { sockwrite -n $sockname REFRESH } if (* has left * team. iswm %data) { sockwrite -n $sockname REFRESH } if (* scores for * Team iswm %data) { sockwrite -n $sockname REFRESH } if (* has joined the game. iswm %data) { sockwrite -n $sockname REFRESH } if (* has been kicked. iswm %data) { sockwrite -n $sockname REFRESH } if (* has left the game. iswm %data) { sockwrite -n $sockname REFRESH } if (* has been kicked and permanently banned iswm %data) { sockwrite -n $sockname REFRESH } if ( %data !== REFRESH ) { if (*!status* iswm %data) { sockwrite -n $sockname /say Ruth is connected and running. } if (!commands isin %data) && ($right($gettok(%data,$calc($findtok(%data,$ifmatch,1,32) - 1),32),1) == ]) { if (!%f.cmds) { set -z %f.cmds 6 | sockwrite -n $sockname /say !map !pause !random !restart !roll !unpause !msg } } if (!roll isin %data) && ($right($gettok(%data,$calc($findtok(%data,$ifmatch,1,32) - 1),32),1) == ]) { set %rollm $mid(%data,0,$calc($pos(%data,!roll,1)-1)) set %rollm $mid(%rollm,2,$calc($len(%rollm)-2)) if (!%f.roll) { set -z %f.roll 2 if (!%rolln) { sockwrite -n $sockname /say %rollm $+ 's roll (1-15) is $rand(1,15) $+ ! } unset %rollm } } if (!random isin %data) && ($right($gettok(%data,$calc($findtok(%data,$ifmatch,1,32) - 1),32),1) == ]) { if (!%f.random) { set -z %f.random 2 if ($hget($+(soldat_info),gamestyle) == 0) || ($hget($+(soldat_info),gamestyle) == 1) || ($hget($+(soldat_info),gamestyle) == 2) || ($hget($+(soldat_info),gamestyle) == 4) { sockwrite -n $sockname /map $read(mapslist\dm.txt) } elseif ($hget($+(soldat_info),gamestyle) == 3) { sockwrite -n $sockname /map $read(mapslist\ctf.txt) } elseif ($hget($+(soldat_info),gamestyle) == 5) { sockwrite -n $sockname /map $read(mapslist\inf.txt) } elseif ($hget($+(soldat_info),gamestyle) == 6) { sockwrite -n $sockname /map $read(mapslist\htf.txt) } } } if (!map isin %data) && ($right($gettok(%data,$calc($findtok(%data,$ifmatch,1,32) - 1),32),1) == ]) { if ($gettok(%data,$calc($findtok(%data,!map,1,32) + 1),32)) { sockwrite -n $sockname /map $gettok(%data,$calc($findtok(%data,!map,1,32) + 1),32) } } if (!restart isin %data) && ($right($gettok(%data,$calc($findtok(%data,$ifmatch,1,32) - 1),32),1) == ]) { sockwrite -n $sockname /restart } if (!pause isin %data) && ($right($gettok(%data,$calc($findtok(%data,$ifmatch,1,32) - 1),32),1) == ]) { sockwrite -n $sockname /pause } if (!unpause isin %data) && ($right($gettok(%data,$calc($findtok(%data,$ifmatch,1,32) - 1),32),1) == ]) { sockwrite -n $sockname /say Unpausing in: 3 | timer 1 1 sockwrite -n $sockname /say Unpausing in: 2 | timer 1 2 sockwrite -n $sockname /say Unpausing in: 1 | timer 1 3 sockwrite -n $sockname /say GO! | timer 1 3 sockwrite -n $sockname /unpause } if (*!msg* iswm %data) { if ( */say* !iswm %data) { msg #ruth.priv 4[Msg from server] $remove(%data,!msg) } } if ( * scores for Alpha Team iswm %data) { if (%secho == $true) { msg #ruth.priv 4 $+ %data } halt } if ( * scores for Bravo Team iswm %data ) { if (%secho == $true) { msg #ruth.priv 12 $+ %data } halt } if ( * captured the Red Flag iswm %data ) { if (%secho == $true) { msg #ruth.priv 12 $+ %data } halt } if ( * captured the Blue Flag iswm %data ) { if (%secho == $true) { msg #ruth.priv 4 $+ %data } halt } if ( * returned the Blue Flag iswm %data ) { if (%secho == $true) { msg #ruth.priv 12 $+ %data } halt } if ( * returned the Red Flag iswm %data ) { if (%secho == $true) { msg #ruth.priv 4 $+ %data } halt } if ( Time Left: * iswm %data ) { if (%secho == $true) { msg #ruth.priv 3 $+ %data } halt } if ( $left(%data,6) == (TEAM) ) { if (%secho == $true) { msg #ruth.priv 7 $+ %data } halt } if (%secho == $true) { msg #ruth.priv %data } } } } alias -l SoldatRefreshEndTok return $+($1, $iif($1 != $null, $chr($3)), $2) alias SoldatRefreshSize return 1188 alias SoldatRefresh { var %id = $1, %binvar = $2, %table = $3, %args = $4-, %players = $null, %kills = $null, %deaths = $null, %ips = $null, %pings = $null, %numbers = $null, %offsets = $null, %teams = $null, %i, %offset = 1, %tplayers = 0, %tspectators = 0, %teamnames = Alpha|Bravo|Charlie|Delta|Spectator if (%id == $null || %table == $null || $bvar(%binvar, 0) != $SoldatRefreshSize) { return $null } hfree -w %table $+ _* hmake %table $+ _info 7 ; Get player names %i = 1 while (%i <= 32) { var %len = $bvar(%binvar, %offset) inc %offset 1 %players = $SoldatRefreshEndTok(%players, $bvar(%binvar, %offset, %len).text, 10) %offsets = $SoldatRefreshEndTok(%offsets, $calc(%i - 1), 10) inc %offset 24 inc %i 1 } ; Get player teams %i = 1 var %deleted = 0 while (%i <= 32) { var %team = $bvar(%binvar, %offset) inc %offset 1 if (%team >= 0 && %team <= 5) { if (%team != 5) { inc %tplayers 1 } else { inc %tspectators 1 } %teams = $instok(%teams, %team, $calc($numtok(%teams, 10) + 1), 10) } else { %players = $deltok(%players, $calc(%i - %deleted), 10) %offsets = $deltok(%offsets, $calc(%i - %deleted), 10) inc %deleted 1 } inc %i 1 } var %total = %tplayers + %tspectators ; Get kills %i = 1 while (%i <= %total) { %kills = $SoldatRefreshEndTok(%kills, $bvar(%binvar, $calc(%offset + $gettok(%offsets, %i, 10) * 2)).word, 10) inc %i 1 } inc %offset $calc(32 * 2) ; Get deaths %i = 1 while (%i <= %total) { %deaths = $SoldatRefreshEndTok(%deaths, $bvar(%binvar, $calc(%offset + $gettok(%offsets, %i, 10) * 2)).word, 10) inc %i 1 } inc %offset $calc(32 * 2) ; Get ping %i = 1 while (%i <= %total) { %pings = $SoldatRefreshEndTok(%pings, $bvar(%binvar, $calc(%offset + $gettok(%offsets, %i, 10))), 10) inc %i 1 } inc %offset $calc(32) ; Get number %i = 1 while (%i <= %total) { %numbers = $SoldatRefreshEndTok(%numbers, $bvar(%binvar, $calc(%offset + $gettok(%offsets, %i, 10))), 10) inc %i 1 } inc %offset $calc(32) ; Get IPs %i = 1 while (%i <= %total) { %ips = $SoldatRefreshEndTok(%ips, $bvar(%binvar, $calc(%offset + $gettok(%offsets, %i, 10) * 4)).nlong, 10) inc %i 1 } inc %offset $calc(32 * 4) %i = 1 while (%i <= %tplayers) { hmake %table $+ _player $+ %i 7 inc %i } %i = 1 while (%i <= %tspectators) { hmake %table $+ _spectator $+ %i 7 inc %i } hadd %table $+ _info players %tplayers hadd %table $+ _info spectators %tspectators %i = 1 var %i_plr = 1, %i_spec = 1 while (%i <= %total) { var %team = $gettok(%teams, 1, 10) if (%team < 5) { hadd %table $+ _player $+ %i_plr name $gettok(%players, 1, 10) hadd %table $+ _player $+ %i_plr team $gettok(%teamnames, %team, 124) hadd %table $+ _player $+ %i_plr kills $gettok(%kills, 1, 10) hadd %table $+ _player $+ %i_plr deaths $gettok(%deaths, 1, 10) hadd %table $+ _player $+ %i_plr ping $gettok(%pings, 1, 10) hadd %table $+ _player $+ %i_plr number $gettok(%numbers, 1, 10) hadd %table $+ _player $+ %i_plr ip $gettok(%ips, 1, 10) inc %i_plr } else { hadd %table $+ _spectator $+ %i_spec name $gettok(%players, 1, 10) hadd %table $+ _spectator $+ %i_spec ping $gettok(%pings, 1, 10) hadd %table $+ _spectator $+ %i_spec number $gettok(%numbers, 1, 10) hadd %table $+ _spectator $+ %i_spec ip $gettok(%ips, 1, 10) inc %i_spec } %players = $deltok(%players, 1, 10) %teams = $deltok(%teams, 1, 10) %kills = $deltok(%kills, 1, 10) %deaths = $deltok(%deaths, 1, 10) %pings = $deltok(%pings, 1, 10) %numbers = $deltok(%numbers, 1, 10) %ips = $deltok(%ips, 1, 10) inc %i 1 } hmake %table $+ _teams 4 ; Get team scores %i = 1 while (%i <= 4) { var %team = $gettok(%teamnames, %i, 124) var %score = $bvar(%binvar, %offset).word inc %offset 2 hadd %table $+ _teams %team %score inc %i 1 } ; Get map name var %len = $bvar(%binvar, %offset) inc %offset 1 var %map = $bvar(%binvar, %offset, %len).text inc %offset 16 hadd %table $+ _info map %map ; Get time limit var %timelimit = $bvar(%binvar, %offset).long inc %offset 4 hadd %table $+ _info timelimit $calc(%timelimit / 3600) $+ :00 ; Get time left var %timeleft = $bvar(%binvar, %offset).long inc %offset 4 var %temp = $calc($floor($calc(%timeleft / 60)) % 60) hadd %table $+ _info timeleft $floor($calc(%timeleft / 3600)) $+ : $+ $iif(%temp < 10, 0 $+ %temp, %temp) ; Get kill limit var %killlimit = $bvar(%binvar, %offset).word inc %offset 2 hadd %table $+ _info killlimit %killlimit ; Get gamestyle var %gamestyle = $bvar(%binvar, %offset) hadd %table $+ _info gamestyle %gamestyle .signal %id %table %args }