#!/bin/bash 

############################################################################
#                                                                          #
#  Counter-Strike Source (HL2) Server Script                               #
#                                                                          #
#  Author:                                                                 #
#  Ulrich Block                                                            #
#                                                                          #
#  Kontakt:                                                                #
#  ulblock at gmx.de                                                       #
#  www.ulrich-block.de                                                     #
#                                                                          #
#  This program is free software: you can redistribute it and/or modify    #
#  it under the terms of the GNU General Public License as published by    #
#  the Free Software Foundation, either version 3 of the License, or       #
#  (at your option) any later version.                                     #
#                                                                          #
#  This program is distributed in the hope that it will be useful,         #
#  but WITHOUT ANY WARRANTY; without even the implied warranty of          #
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           #
#  GNU General Public License for more details.                            #
#                                                                          #
#  You should have received a copy of the GNU General Public License       #
#  along with this program.  If not, see <http://www.gnu.org/licenses/>.   #
#                                                                          #
#  Gebrauch: ./css.sh {start|stop|restart|update|console|check}            #
#                                                                          #
#  start/restart/stop: Server An und aus schalten                          #
#                                                                          #
#  update: Mit dem Steam Updatetool den Server aktualisieren               #
#                                                                          #
#  console: Wechselt auf die Counter-Strike Serverkonsole                  #
#           Mit strg+a -> d die Konsole wieder in den Hintergrund schicken #
#                                                                          #
############################################################################



function init {

DIR="/home/hierdenusernameneeingeben/css/css"
#DIR="/home/hierdenusernameneeingeben/tf/orangebox"
DEAMON="srcds_run"
IP=""
PORT=""
PARAMS="-game cstrike -ip $IP -port $PORT"
PARAMS2="+maxplayers 12 +map de_dust2"
SCREENNAME="counterstrike"

if [ "`whoami`" = "root" ]; then
 echo "Verantwortungsvolle Admins starten Gameserver nicht mit root! Allen anderen ist es untersagt!"
 exit 0
fi
if [ -z "$DIR" ]; then
 echo "Es wurde nichts bei der Variable DIR angegeben."
 exit 0
fi
if [ -z "$DEAMON" ]; then
 echo "Es wurde nichts bei der Variable DEAMON angegeben."
 exit 0
fi
if [ -z "$PARAMS" ]; then
 echo "Es wurde nichts bei der Variable PARAMS angegeben."
 exit 0
fi
if [ -z "$PARAMS2" ]; then
 echo "Es wurde nichts bei der Variable PARAMS2 angegeben."
 exit 0
fi
if [ -z "$SCREENNAME" ]; then
 echo "Es wurde nichts bei der Variable SCREENNAME angegeben."
 exit 0
fi
if [ -z "$IP" ]; then
 echo "Es wurde nichts bei der Variable IP angegeben."
 exit 0
fi
if [ -z "$PORT" ]; then
 echo "Es wurde nichts bei der Variable PORT angegeben."
 exit 0
fi
}

function start_server {
 if [[ `screen -ls | grep $SCREENNAME` ]]; then
  echo "Der Server läuft bereits unter dem Screentab $SCREENNAME"
 else
  echo "Starte $SCREENNAME"
  if [ -d $DIR ]; then
   cd $DIR
   screen -d -m -S $SCREENNAME ./$DEAMON $PARAMS $PARAMS2
  else 
   echo "Das Serververzeichnis wurde nicht angegeben"
  fi
 fi
} 

function stop_server {
 if [[ `screen -ls | grep $SCREENNAME` ]]; then
  echo -n "Stoppe $SCREENNAME"
  kill `screen -ls | grep $SCREENNAME | awk -F . '{print $1}'| awk '{print $1}'`
  echo " ... done."
 else
  echo "Konnte den Screentab $SCREENNAME nicht finden"
 fi
}

function update_server {
 stop_server
 echo "Update"
 cd $DIR
 cd ..
 ./steam -command update -game "Counter-Strike Source" -dir . -verify_all
 echo " ... done."
 start_server
}

function wrong_input {
 echo "Usage: $0 {start|stop|restart|update|console|check}"
 exit 1
}

function get_screen {
 screen -r $SCREENNAME
}

function check_ping {
 if [ "`/usr/bin/quakestat -a2s $IP:$PORT | grep -v ADDRESS | awk '{ print $2 }' | awk -F/ ' { print $1}'`" = "DOWN" ]; then
  sleep 10
  if [ "`/usr/bin/quakestat -a2s $IP:$PORT | grep -v ADDRESS | awk '{ print $2 }' | awk -F/ ' { print $1}'`" = "DOWN" ]; then
   stop_server
   start_server
  fi
 fi
}
function check_ping {
 if [[ "`printf '\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00' | netcat -u -w 1 $IP $PORT`" == "" ]]; then
  sleep 10
  if [[ "`printf '\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00' | netcat -u -w 1 $IP $PORT`" == "" ]]; then
   stop_server
   start_server
  fi
 fi
}

init

case "$1" in
 start)
  start_server
 ;;

 stop)
  stop_server
 ;;

 restart)
  stop_server
  start_server
 ;;

 update)
  update_server
 ;;

 console)
  get_screen
 ;;

 check)
  check_ping
 ;; 
 
 *)
  wrong_input
 ;;
esac
exit 0

