From 6c9f14e8d2c10584d59a3c24127d95e447dc9ab0 Mon Sep 17 00:00:00 2001 From: Darkelarious Date: Tue, 29 Dec 2020 17:38:39 +0000 Subject: gameserver simulation tool --- common/status.pl | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100755 common/status.pl (limited to 'common/status.pl') diff --git a/common/status.pl b/common/status.pl new file mode 100755 index 0000000..4e9ad28 --- /dev/null +++ b/common/status.pl @@ -0,0 +1,140 @@ +#!/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_}; + $reply .= "\\frags_$_\\" .$player{frags_}; + $reply .= "\\health_$_\\" .$player{health_}; + $reply .= "\\deaths_$_\\" .$player{deaths_}; + $reply .= "\\ping_$_\\" .int(rand(400)); # 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_}; + $reply .= "\\frags_$_\\" .$player{frags_}; + $reply .= "\\health_$_\\" .$player{health_}; + $reply .= "\\deaths_$_\\" .$player{deaths_}; + $reply .= "\\ping_$_\\" .int(rand(400)); # 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"; + } + } +} -- cgit v1.2.3