;------------------------; ; Soldat Refresh Script ; ; By ramirez ; ;------------------------; 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 }