#!/usr/bin/ruby require 'socket' def getstatus(srv, port=27960) Hash[*UDPSocket.open { |s| s.send([-1, 'getstatus'].pack('LZ*'), 0, srv, port) s.recvfrom(102400)[0] }.split('\\')[1..-1]] end srv = ARGV.shift || 'et' srv += '.kernwaffe.de' if not srv.index('.') st = getstatus(srv) puts st['mapname'] # xp? ping name # 410388 23 "lol^4zor" pb = st['sv_punkbuster'].to_s.split("\n").map { |info| info.split(' ', 3) }[1..-1] teams = st['P'].gsub('-', '').split(//) players = teams.zip(pb).map { |team, (xp, ping, name)| name = name.to_s.gsub(/\^./, '') [team, xp, ping, name] } puts players.sort_by { |t, x, p, n| [t, -x.to_i] }.map { |t, x, p, n| t = { '0' => 'CONN ', '1' => 'Axis', '2' => 'Allied', '3' => 'SPC ' }.fetch(t, t) "%08s %8d %s" % [t, x, n] }