#!/usr/bin/perl use strict; use warnings; use Switch; # query id counter my $qid = 0; # status information my %basic = ( gamename => "ut", gamever => 451, location => 0, ); my %info = ( hostname => "333networks test server", hostport => 7777, maptitle => "333networks", mapname => "DM-333networks", gametype => "DeathMatchPlus", numplayers => 6, maxplayers => 8, gamemode => "openplaying", gamever => 451, minnetver => 432, worldlog => "False", ); my %rules = ( mutators => "333networks simulated server", listenserver => "False", password => "False", timelimit => 150, goalteamscore => 0, minplayers => 0, changelevels => "True", balanceteams => "True", playersbalanceteams => "False", friendlyfire => "10%", gamestyle => "Hardcore", AdminName => "Darkelarious", AdminEMail => "simulate@333networks.com", ); my %player = ( player_ => "Player", frags_ => 0, health_ => 100, deaths_ => 200, ping_ => 75, team_ => 1, mesh_ => "Boss", skin_ => "SourceSkins.sourceclan", face_ => "SourceSkins.dark", ngsecret_ => "True" ); # get gamename outside status environment sub getGameName { return $basic{gamename}; } # parse to gamespy0 format: \key\value sub getResponse { # what was requested? my ($key, $value) = @_; # count responses ++$qid; # determine response switch(lc $key) { case "basic" { my $reply = "\\" . join '\\', %basic; return "$reply\\queryid\\$qid.3"; } case "info" { my $reply = "\\" . join '\\', %info; return "$reply\\queryid\\$qid.3"; } case "rules" { my $reply = "\\" . join '\\', %rules; return "$reply\\queryid\\$qid.3"; } case "players" { my $reply = ""; for ( 0..$info{numplayers}-1 ) { $reply .= "\\player_$_\\" .$player{player_}.$_; # Player0 $reply .= "\\frags_$_\\" .$player{frags_}; $reply .= "\\health_$_\\" .$player{health_}; $reply .= "\\deaths_$_\\" .$player{deaths_}; $reply .= "\\ping_$_\\" .int((rand(400))+24); # random number! $reply .= "\\team_$_\\" .$player{team_}; $reply .= "\\mesh_$_\\" .$player{mesh_}; $reply .= "\\skin_$_\\" .$player{skin_}; $reply .= "\\face_$_\\" .$player{face_}; $reply .= "\\ngsecret_$_\\".$player{ngsecret_}; } return "$reply\\queryid\\$qid.3"; } case "status" { my $reply = ""; $reply .= "\\" . join '\\', %basic; $reply .= "\\" . join '\\', %info; $reply .= "\\" . join '\\', %rules; for ( 0..$info{numplayers}-1 ) { $reply .= "\\player_$_\\" .$player{player_}.$_; # Player0 $reply .= "\\frags_$_\\" .$player{frags_}; $reply .= "\\health_$_\\" .$player{health_}; $reply .= "\\deaths_$_\\" .$player{deaths_}; $reply .= "\\ping_$_\\" .int((rand(400))+24); # random number! $reply .= "\\team_$_\\" .$player{team_}; $reply .= "\\mesh_$_\\" .$player{mesh_}; $reply .= "\\skin_$_\\" .$player{skin_}; $reply .= "\\face_$_\\" .$player{face_}; $reply .= "\\ngsecret_$_\\".$player{ngsecret_}; } return "$reply\\queryid\\$qid.3"; } else # echo and others { return "\\echo_reply\\$value"; } } }