rendered paste bodyon *: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
}