The "status" output from the master netconport console of bunch of forked
servers gives player numbers, but this includes bots controlling boss
infected and survivors (which is why the number is rarely between 1 and 3).
So if you want to get some kind of realistic aggregate player numbers, or if
indeed you're not using fork but are using netconport consoles, you need
something else:

for i in `seq 9000 9012`; \
do echo -e "PASS swordfish\nstatus" \
| nc -q 1 localhost $i 2>/dev/null \
| egrep -m 1 "^players : [0-9] humans, [0-9] bots \([0-9] max\) \((not
)?hibernating\)" \
| sed -r "s/^players : ([0-9]) humans, [0-9] bots \([0-9] max\) \((not
)?hibernating\).*$/\1/"; done \
| awk 'BEGIN {total=0} {total +=$1} END {print total}'

http://pastebin.127001.org/315

This boils down to:
- Loop through netconport ports (change to suit)
- For each port, we want to issue the PASS command with appropriate password
(no that's not our real password, this time :P ), and then the status
command (alter password to suit; if not using passwords, remove everything
except status)
- Use netcat to push that command to the server (change localhost to your
server's IP if you're not running this locally), close the connection after
1 second, and silently redirect errors to the bit bucket (like if there's
nothing listening on that port)
- Find the line containing the number of players
- Alter that line to _only_ display the number of players and nothing else
- After looping through all servers, total up the numbers

I know it says a 1 second delay per server, but it actually goes a lot
faster than that.

Not sure if this is useful to anyone, but there it is.  Comments,
suggestions, and improvements welcome :)

Philip Cass


_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please 
visit:
http://list.valvesoftware.com/mailman/listinfo/hlds_linux

Reply via email to