#!/bin/sh

# Init file for hlds server daemon
#
# chkconfig: - 50 50
# description: hlds server daemon
#
# processname: hlds
# config: no such
# pidfile: /var/run/hlds.pid
#
# Start the Counter-Strike dedicated server as non-root.
#
# A modification of the CS Server startup script, to run the server
# as a non-root user.
#
# ORIGINAL AUTHORS :
#
# Julien Escario ( pandemik@asylog.net )
# &
# Cedric Rochat ( crochat@younics.org )
#
# ===========================================
#
# What you need:
#
# Linux :)
# awk
# screen
# the hlds_l & cstrike-files OR
# a STEAM-installation
#
# YES, this script works fine with STEAM and CS 1.6
#
# How to use:
#
# Edit the DIR-var to fit your system (just contains the path to the dir that contains hlds_run)
# Edit the PARAMS-var to fit your needs
# Edit the CS_USER-var to the name of the user that will run the server
#
# How to see the server-console:
#
# Just type in: screen -r hlds (or whatever you set $NAME to)
# More info about screen can be found by typing "man screen" or using this nice link
# http://server.counter-strike.net/server.php?cmd=howto&show=screen
#
# The easist way is to use this script simple as a start-script for your server
# If you want to use it as a script to start the server at boot-time:
#
# Or use it manualy like:
# /etc/rc.d/init.d/hlds start
# /etc/rc.d/init.d/hlds stop
#
# If you don't want to start the server as root you have to change this:
# add the var CS_USER and uncomment it
# change the lines at the "start-block"
#
# You must be logged in as this user to re-attach the screen!
#
# DOC by jwm (jwm@counter-strike.de)

# The user that will run the server
CS_USER=_netgames

# Leave this alone.
NAME=hlds

PATH=/bin:/usr/bin:/sbin:/usr/sbin

# DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS!
DIR=/var/lib/games/cs/

# Leave this alone.
DAEMON=hlds_run

# IP of running server. To be used when status called only.
IPADRR="127.0.0.1"

# Internet-server:
PARAMS="-game cstrike +sv_lan 1 +map de_cbble -nomaster -insecure +maxplayers 18 -debug -timeout 1 -port 27015 -pidfile hlds.pid"

# Leave this alone.
DESC="Counter-Strike dedicated server"

case "$1" in
 start)
    if [[ `su - -c "screen -ls |grep $NAME" $CS_USER` ]]
       then
       echo "HLDS is already running!"
    else
       echo "Starting $DESC: $NAME"
       su - -c "cd $DIR; screen -m -d -S hlds ./$DAEMON $PARAMS" $CS_USER
    fi
    ;;

 stop)
    if [[ `su - -c "screen -ls |grep $NAME" $CS_USER` ]]
       then
       echo -n "Stopping $DESC: $NAME"
       kill `ps aux | grep -v grep | grep -i $CS_USER | grep -i screen | grep -i $NAME | awk '{print $2}'`
       echo " ... done."
    else
       echo "Coulnd't find a running $DESC"
    fi
    ;;

 restart)
    if [[ `su - -c "screen -ls |grep $NAME" $CS_USER` ]]
       then
       echo -n "Stopping $DESC: $NAME"
       kill `ps aux | grep -v grep | grep -i $CS_USER | grep -i screen | grep -i $NAME | awk '{print $2}'`
       echo " ... done."
    else
       echo "Coulnd't find a running $DESC"
    fi

    echo -n "Starting $DESC: $NAME"
    su - -c "cd $DIR; screen -m -d -S hlds ./$DAEMON $PARAMS" $CS_USER
    echo " ... done."
    ;;

 status)
    ps aux | grep -v grep | grep hlds_r > /dev/null
    CHECK=$?
    [ $CHECK -eq 0 ] && echo "HLDS is UP" && qstat -P -hls $IPADDR || echo "HLDS is DOWN"
    ;;
 *)
    echo "Usage: $0 {start|stop|status|restart}"
    exit 1
    ;;
esac

exit 0
