Urban Terror

Your Query Port is the same as your Connection port.
Urban Terror Website
Version Repository
Our Maps Folder

We install the most recent release of Urban Terror. From the ADDONS page, you may be able to install an older version.
Our servers come pre-installed with Spunky Bot to help administer your server, refer to the wiki page for Spunky Bot.
To configure your server to work with SpunkyBot, make sure these settings are configured in your server.cfg
seta g_logsync "1"
seta g_loghits "1"
seta g_friendlyfire "2"

How to Add Bots
In your Server.cfg file you need to have these THREE settings IN ORDER:
1-Enable the bots with bot_enable “1”
2-Load the Map. The bots must be enabled BEFORE the map is loaded.
3-Add the Bots

set bot_enable “1”
map ut4_kingdom
addbot cougar 4 Blue 46 Testicle-of-Terror
addbot python 2 Red 176 HarryMangina
addbot penguin 3 Blue 56 ShitStorm
addbot chicken 5 Red 86 THE_Terminator

The addbot line is defined as such:
addbot <type> <level> <team> <ping> <server nick>
where type is one of several types.
Read the official documentation here


We are pretty familiar with this game having managed Urban Terror servers for the Pizza Militia clan for many years so if you need some help don’t hesitate to ask in discord.

Spunky Bot

Spunkybot is an rcon administration tool for Urban Terror and comes pre-installed on all of our Urban Terror servers.

Admin Levels and Bot Commands

Guest [0]

  • help – display all available commands
    • Usage: !help
    • Short: !h
  • forgive – forgive a player for team killing
    • Usage: !forgive [<name|id>]
    • Short: !f [<name|id>]
  • forgiveall – forgive all team kills
    • Usage: !forgiveall
    • Short: !fa
  • forgivelist – list all players who killed you
    • Usage: !forgivelist
    • Short: !fl
  • forgiveprev – forgive last team kill
    • Usage: !forgiveprev
    • Short: !fp
  • grudge – grudge a player for team killing (a grudged player will not be forgiven)
    • Usage: !grudge [<name|id>]
  • bombstats – display Bomb mode stats
    • Usage: !bombstats
  • ctfstats – display Capture the Flag stats
    • Usage: !ctfstats
  • freezestats – display freeze/thawout stats
    • Usage: !freezestats
  • hestats – display HE grenade kill stats
    • Usage: !hestats
  • hits – display hit stats
    • Usage: !hits
  • hs – display headshot counter
    • Usage: !hs
  • knife – display knife kill stats
    • Usage: !knife
  • register – register yourself as a basic user
    • Usage: !register
  • spree – display current kill streak
    • Usage: !spree
  • stats – display current map stats
    • Usage: !stats
  • teams – balance teams
    • Usage: !teams
  • time – display the current server time
    • Usage: !time

User [1]

  • regtest – display current user status
    • Usage: !regtest
  • xlrstats – display full player statistics
    • Usage: !xlrstats [<name|id>]
  • xlrtopstats – display the top players
    • Usage: !xlrtopstats
    • Short: !topstats

Moderator [20]

  • admintest – display current admin status
    • Usage: !admintest
  • country – get the country of a player
    • Usage: !country <name|id>
  • lastmaps – list the last played maps
    • Usage: !lastmaps
  • leveltest – get the admin level for a given player or myself
    • Usage: !leveltest [<name|id>]
    • Short: !lt [<name|id>]
  • list – list all connected players
    • Usage: !list
  • locate – display geolocation info of a player
    • Usage: !locate <name|id>
    • Short: !lc <name|id>
  • nextmap – display the next map in rotation
    • Usage: !nextmap
  • mute – mute or unmute a player
    • Usage: !mute <name|id> [<seconds>]
  • poke – notify a player that he needs to move
    • Usage: !poke <name|id>
  • seen – display when a player was last seen
    • Usage: !seen <name|id>
  • shuffleteams – shuffle the teams
    • Usage: !shuffleteams
    • Short: !shuffle
  • spec – move yourself to spectator
    • Usage: !spec
    • Short: !sp
  • warn – warn player
    • Usage: !warn <name|id> [<reason>]
    • Short: !w <name|id> [<reason>]
    • Available short form reasons: tk, sk, wh, ci, obj, afk, spec, ping, spam, camp, score, skill, lang, racism, name, whiner, abuse, insult, teams
  • warninfo – display how many warnings a player has
    • Usage: !warninfo <name|id>
    • Short: !wi <name|id>
  • warnremove – remove a player’s last warning
    • Usage: !warnremove <name|id>
    • Short: !wr <name|id>
  • warns – list the warnings
    • Usage: !warns
  • warntest – test a warning
    • Usage: !warntest <warning>

Admin [40]

  • admins – list all the online admins
    • Usage: !admins
  • afk – force a player to spec, because he is away from keyboard
    • Usage: !afk <name|id>
  • aliases – list the aliases of a player
    • Usage: !aliases <name|id>
    • Short: !alias <name|id>
  • bigtext – display big message on screen
    • Usage: !bigtext <text>
  • exit – display last disconnected player of this match
    • Usage: !exit
  • find – display the slot number of a player
    • Usage: !find <name|id>
  • force – force a player to the given team or release the player from a forced team (free)
    • Usage: !force <name|id> <blue/red/spec/free> [<lock>]
    • Adding lock will lock the player where it is forced to.
  • kick – kick a player
    • Usage: !kick <name|id> <reason>
    • Short: !k <name|id> <reason>
  • nuke – nuke a player
    • Usage: !nuke <name|id>
  • regulars – display the regular players online
    • Usage: !regulars
    • Short: !regs
  • say – say a message to all players (allow spectator to say a message to players in-game)
    • Usage: !say <text>
    • Short: !!<text>
  • tell – tell a message to a specific player
    • Usage: !tell <name|id> <text>
  • tempban – ban a player temporary for the given period of 1 sec to 3 days
    • Usage: !tempban <name|id> <duration> [<reason>]
    • Short: !tb <name|id> <duration> [<reason>]
    • Maximum ban duration: 72 hours
  • warnclear – clear the player warnings
    • Usage: !warnclear <name|id>
    • Short: !wc <name|id>

Full Admin [60]

  • ban – ban a player for several days
    • Usage: !ban <name|id> <reason>
    • Short: !b <name|id> <reason>
  • baninfo – display active bans of a player
    • Usage: !baninfo <name|id>
    • Short: !bi <name|id>
  • ci – kick player with connection interrupt
    • Usage: !ci <name|id>
  • forgiveclear – clear a player’s team kills
    • Usage: !forgiveclear [<name|id>]
    • Short: !fc [<name|id>]
  • forgiveinfo – display a player’s team kills
    • Usage: !forgiveinfo <name|id>
    • Short: !fi <name|id>
  • id – show the IP, guid and authname of a player
    • Usage: !id <name|id>
  • kickbots kick all bots
    • Usage: !kickbots
    • Short: !kb
  • ping – display the ping of a player
    • Usage: !ping <name|id>
  • rain – enables or disables rain
    • Usage: !rain <on/off>
  • scream – scream a message in different colors to all players
    • Usage: !scream <text>
  • slap – slap a player (a number of times)
    • Usage: !slap <name|id> [<amount>]
    • Default amount: 1
    • Max amount: 15
  • status – report the status of the bot
    • Usage: !status
  • swap – swap teams for player A and B (if in different teams). If player B is not specified, the admin using the command is swapped with player A
    • Usage: !swap <playerA> [<playerB>]
  • version – display the version of the bot
    • Usage: !version
  • veto – stop voting process
    • Usage: !veto

Senior Admin [80]

  • addbots – add bots to the game (requires !bots on first)
    • Usage: !addbots
  • banall – ban all players matching pattern
    • Usage: !banall <pattern> [<reason>]
    • Short: !ball
  • banlist – display the last active 10 bans
    • Usage: !banlist
  • bots – enables or disables bot support
    • Usage: !bots <on/off>
  • cyclemap – cycle to the next map
    • Usage: !cyclemap
  • exec – execute given config file
    • Usage: !exec <filename>
  • gear – set allowed weapons
    • Usage: !gear <default/all/knife/pistol/shotgun/sniper>
  • instagib – set Instagib mode
    • Usage: !instagib <on/off>
  • kickall – kick all players matching pattern
    • Usage: !kickall <pattern> [<reason>]
    • Short: !kall
  • clear – clear all player warnings
    • Usage: !clear
    • Alias: !kiss
  • kill – kill a player
    • Usage: !kill <name|id>
  • lastbans – list the last 4 bans
    • Usage: !lastbans
    • Short: !bans
  • lookup – search for player in the database
    • Usage: !lookup <name|id>
    • Short: !l <name|id>
  • makereg – make a player a regular (Level 2) user
    • Usage: !makereg <name|id>
    • Short: !mr <name|id>
  • map – load given map
    • Usage: !map <ut4_name>
  • mapcycle – list the map rotation
    • Usage: !mapcycle
  • maps – display all available maps
    • Usage: !maps
  • maprestart – restart the map
    • Usage: !maprestart
    • Short: !restart
  • moon – activate low gravity mode (Moon mode)
    • Usage: !moon <on/off>
    • Alias: !lowgravity <on/off>
  • permban – ban a player permanent
    • Usage: !permban <name|id> <reason>
    • Short: !pb <name|id> <reason>
  • putgroup – add a client to a group
    • Usage: !putgroup <name|id> <group>
    • Available Groups: user, regular, mod, admin, fulladmin
  • rebuild – sync up all available maps
    • Usage: !rebuild
  • setgravity – set the gravity (default = 800), less means less gravity
    • Usage: !setgravity <value>
  • setnextmap – set the next map
    • Usage: !setnextmap <ut4_name>
  • swapteams – swap the current teams
    • Usage: !swapteams
  • unban – unban a player from the database
    • Usage: !unban <ID>
  • unreg – remove a player from the regular group
    • Usage: !unreg <name|id>

Super Admin [90]

  • bomb – change gametype to Bomb
    • Usage: !bomb
  • ctf – change gametype to Capture the Flag
    • Usage: !ctf
  • ffa – change gametype to Free For All
    • Usage: !ffa
  • gungame – change gametype to Gun Game
    • Usage: !gungame
  • jump – change gametype to Jump
    • Usage: !jump
  • lms – change gametype to Last Man Standing
    • Usage: !lms
  • tdm – change gametype to Team Deathmatch
    • Usage: !tdm
  • ts – change gametype to Team Survivor
    • Usage: !ts
  • password – set private server password
    • Usage: !password [<password>]
    • Set an empty string to remove a password
  • putgroup – add a client to a group
    • Usage: !putgroup <name|id> <group>
    • Available Groups: user, regular, mod, admin, fulladmin, senioradmin
  • reload – reload map
    • Usage: !reload
  • ungroup – remove admin level from a player
    • Usage: !ungroup <name|id>

Head Admin [100]

  • putgroup – add a client to a group
    • Usage: !putgroup <name|id> <group>
    • Available Groups: user, regular, mod, admin, fulladmin, senioradmin, superadmin

Rsync Install and Use

We did use a rsync server, it worked well. We removed it in favor of using a “fake steam install” method becuase it removes a layer of complexity for an identical end result.

If you dont know, an rsync server keeps files and will ‘sync’ them to another machine. So you would download say Minecraft to the rsync server and on thengame panel the user wouldnuse ‘rsync install’ to copy the files into their gameserver. It is easier to set the game confic xml file to install using steamcmd (even if not supported) and then in the postinstall tag just copy the files with wget. The advantage is no rsync to setup and the user simply presses the install button and doesn’t need to select a rsync server to install from. You could use rsync to make an image of your panel for a backup (or any gameservers) as it only syncs changed files.. but thst is outside this post.

Rsync Install

Agent Install

Install Linux Agent

Upgrade server to latest ubuntu 64bit
There can be issues with libc6 on 16.04 and we need newer versions of Java etc so Ubuntu 18 is best

 
apt-get update  
dpkg --add-architecture i386
apt-get install gcc libxml-parser-perl libpath-class-perl perl-modules screen rsync sudo openjdk-8-jre-headless e2fsprogs unzip subversion libarchive-extract-perl pure-ftpd libarchive-zip-perl libc6 libgcc1 git curl libc6-i386 libgcc1:i386 lib32gcc1 libhttp-daemon-perl php php-cgi python apache2 nano libstdc++6:i386 libcurl3-gnutls:i386 libtinfo5:i386 libncurses5:i386 libc6 lib32gcc1 lib32stdc++6 libc6:i386 libtbb2:i386 python-mysqldb iptables iptables-persistent



If in the panel, you enable REMOTE QUERYItalic Text. then php-cgi MUST be installed on the agent server.(it is above)

Manual install Linux agent to use custom name and locations

wget -N "https://github.com/OpenGamePanel/Easy-Installers/raw/master/Linux/Debian-Ubuntu/ogp-agent- 
   latest.deb" -O "ogp-agent-latest.deb"
   sudo dpkg -i "ogp-agent-latest.deb"


  • Immediately add the new server to the game panel using the ip (ifconfig) and the encoding key
  • adduser “user” , then usermod -aG sudo “user”
  • edit /etc/ssh/sshd_config to deny root login with ssh. service ssh restart

If running IPtables to stop intrustions. Will have to add all the ports for each game. Below has the Source games

*filter

# Allow all loopback (lo0) traffic and reject traffic
# to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT

# Allow ping.
-A INPUT -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT

# Allow SSH connections.
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# Allow the Steam client.
-A INPUT -p udp -m udp --sport 27000:27030 --dport 1025:65355 -j ACCEPT
-A INPUT -p udp -m udp --sport 4380 --dport 1025:65355 -j ACCEPT

# Allow inbound traffic from established connections.
# This includes ICMP error returns.
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Log what was incoming but denied (optional but useful).
-A INPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_INPUT_denied: " --log-level 7
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "iptables_FORWARD_denied: " --log-level 7

# Reject all other inbound.
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT​




Service

#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          ogp_agent
# Required-Start:    $all
# Required-Stop:     $all
# Should-Start:      $all
# Should-Stop:       $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop the OGP Agent
# Description:       Start and stop the OGP Agent
### END INIT INFO
#

agent_dir=/home/gameserver/OGP
agent_user=gameserver

#
# main()
#

if [ "X`whoami`" != "Xroot" ]
then
        exit 1
fi

start() {
        if [ -e "$agent_dir/ogp_agent_run.pid" ]
        then
                pid=$(cat $agent_dir/ogp_agent_run.pid)
                out=$(kill -0 $pid > /dev/null 2>&1)
                if [ $? == 0 ]
                then
                        exit 1
                fi
        fi

        # Lets the agent user to use sudo to enable FTP accounts and use renice and taskset.
        if [ "$( groups $agent_user | grep "\bsudo\b" )" == "" ]
        then
                if [ "$( egrep -i "^sudo" /etc/group )" == "" ]
                then
                        groupadd sudo >/dev/null 2>&1
                fi
                usermod -aG sudo $agent_user >/dev/null 2>&1
        fi

        user_id=$(id -u $agent_user)
        group_id=$(id -g $agent_user)
        out=$(chown -Rf $user_id:$group_id $agent_dir >/dev/null 2>&1)

        # Lets the agent user to attach screens.
        if [ "$(groups $agent_user|grep -o "\stty\s")" == "" ]
        then
                usermod -aG tty $agent_user >/dev/null 2>&1
        fi

        out=$(chmod g+rw /dev/pts/* >/dev/null 2>&1)
        out=$(chmod g+rw /dev/tty* >/dev/null 2>&1)

        # Check the FTP status
        if [ -f "/etc/init.d/pure-ftpd" ] && [ -d "/etc/pure-ftpd/conf" ]
        then
                echo no > /etc/pure-ftpd/conf/PAMAuthentication
                echo no > /etc/pure-ftpd/conf/UnixAuthentication
                echo yes > /etc/pure-ftpd/conf/CreateHomeDir

                if [ ! -f /etc/pure-ftpd/pureftpd.passwd ]
                then
                        touch /etc/pure-ftpd/pureftpd.passwd
                fi

                if [ ! -f /etc/pureftpd.passwd ]
                then
                        ln -s /etc/pure-ftpd/pureftpd.passwd /etc/pureftpd.passwd
                fi

                if [ ! -f /etc/pure-ftpd/auth/50pure ]
                then
                        ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure
                fi

                if [ ! -f /etc/pureftpd.pdb ]
                then
                        ln -s /etc/pure-ftpd/pureftpd.pdb /etc/pureftpd.pdb
                fi
                out=$(pure-pw mkdb >/dev/null 2>&1)
                out=$(service pure-ftpd force-reload >/dev/null 2>&1)
        fi

        cd $agent_dir
        out=$(su -c "screen -d -m -t ogp_agent -c ogp_screenrc -S ogp_agent ./ogp_agent_run -pidfile ogp_agent_run.pid" $agent_user >/dev/null 2>&1)
        exit 0
}

stop() {
        if [ -e "$agent_dir/ogp_agent_run.pid" ]
        then
                pid=$(cat $agent_dir/ogp_agent_run.pid)
                kill -0 $pid > /dev/null 2>&1
                if [ $? == 0 ]
                then
                        kill $pid >/dev/null 2>&1
                        exit $?
                fi
        else
                exit 1
        fi
        exit 0
}

case "${1:-''}" in
        'start')
        start
        ;;
        'stop')
        stop
        ;;
        'restart')
        stop
        sleep 1
        start
        ;;
        *)
        echo "Usage: service ogp_agent start|stop|restart"
        exit 1
        ;;
esac




Install Windows Agent

Filezilla issues:
Rightclick on the Filezilla Server service, and choose “Properties”, find the section called “Logon” , after that change the password for that password you use to login with cygwin.
When installing the Agent select same custom options as Linux

Remove the Agent

First stop the agent via: sudo service ogp_agent stop (or sudo /etc/init.d/ogp_agent stop) You’ll need to remove the ‘lock’ on protected files: sudo chattr -iR /home/ogp_agent/OGP_User_Files/* Next you can delete the OGP user: sudo userdel -rf ogp_agent (which will also remove all the game-server files)

As for the agent files: sudo rm -rf /usr/share/ogp_agent

You’ll need to remove the start up scripts also.

sudo update-rc.d -f ogp_agent remove sudo rm /etc/init.d/ogp_agent

After that, you can try ‘sudo locate ogp_’ (after sudo updatedb, and if the locate package is installed) to see if everything is removed. Some helpful pages on installing game servers. https://www.linode.com/docs/game-servers/

OGP Panel

sudo apt-get install apache2 curl subversion php5 php5-gd php5-xmlrpc php5-curl php5-mysql php-pear phpmyadmin mysql-server libapache2-mod-php5 git libncurses.so.5 libtinfo5:i386 libncurses5:i386 libcurl3-gnutls:i386


Billing Module

Our Billing Module is NOT compatible with Diefems simple-billing. We started with simple-billing but it has been extended to the point where they are not interchangable. We have used ‘billing’ as the name for our module and they can be installed side-by-side.

There are many small differences and we have edited other modules (mainly gamemonitor and dashboard) to integrate with our billing module. The benefits of using our module:

  • Select from multiple locations to install a gameserver
  • Coupons are implemented including a page to create/edit coupons.
  • New paypal IPN. We had issues and rebuilt the IPN from scratch.
  • Notification of invoice displayed on dashboard.
  • Time remaining until expiration displayed on game monitor.

To install, download and place the billing folder into your modules folder. Go to the Administration->Modules menu and install. You should also paste our gamemanager and dashboard modules into your existing modules.

BEC Scheduler

The BEC scheduler will send messages, stop the server, lock the server or several other functions at scheduled times as defined in the scheduler.xml file in the config folder. In the config.cfg file you can set the path and file name of the scheduler.xml so you can have several different scheduler.xml files and select between them.

<Scheduler> tag are the opening and closing tags that encompass ALL the <jobs> in the file. The end of the file must have the closing </Scheduler>

<Job> tags define each ‘job’ and are defined with an ID number in the opening tag <job id=”1″>. The ID’s need to be in numerical order (1,2,3,) but you CAN skip numbers (1,2,6,10) if you want to delete a job that is in between others.
The closing </job>ends this job block.

<Day> </day> tags tell the scheduler which days of the week to run this message.
<day>1,2,3,4,5,6,7</day> would be every day
<day>2,4,6</day>would be only on Monday, Tuesday and Wednesday

<Start></start> tags tell BEC when to issue this command the FIRST time.
Time is important here and there are two different methods:
Actual Time HH:MM:SS would be 13:30:00 to have it send the message at 1:30pm
Elapsed Time HHMMSS would be 013000 to have the message sent 01Hour 30Minutes 00Seconds after the server has started (hence ELAPSED TIME)
So if the time has : separting the HH MM SS then its actual time, if there is nothing separting then its elapsed time.

<Runtime></runtime> tags specify how long in ELAPSED time to wait until the message is repeated. 002000 would run the message every 20 minutes AFTER the message in Start.

<Loop></loop> defines whether the message will LOOP repeatedly and if so, how many times. Values are from -1 to 99
-1 means it loops FOREVER.
0 means it does not loop. It will print ONCE at the START time and thats all
1-99 will print the message that many times.

<Cmd></cmd> This is what the Scheduler will actuall DO at the specified time. The most common is
say -1 Some random message
which prints a message to the server.

These are the supported commands.

say -1 some text
loadbans
loadscripts
loadevents
writebans
maxping 250
#shutdown
#restart
#reassign
#lock
#unlock
#mission filename (without the .pbo extension)
systime
uptime
fortune
exit

Below is a scheduler.xml with some example messages. It sets the server to restart every 4 hours at actual times: Midnight, 4AM, 8AM, Noon, 4PM, 8PM

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<Scheduler>
  <!-- *** Restart at 12:00:00 AM ***-->
  <job id="0">
    <day>1,2,3,4,5,6,7</day>
    <start>23:30:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 30 Minutes</cmd>
  </job>
  <job id="1">
    <day>1,2,3,4,5,6,7</day>
    <start>23:45:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 15 Minutes</cmd>
  </job>
  <job id="2">
    <day>1,2,3,4,5,6,7</day>
    <start>23:55:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 5 Minutes</cmd>
  </job>
  <job id="3">
    <day>1,2,3,4,5,6,7</day>
    <start>23:59:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 1 Minute</cmd>
  </job>
  <job id="4">
    <day>1,2,3,4,5,6,7</day>
    <start>00:00:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>#shutdown</cmd>
  </job>
  <!-- *** Restart at 4:00:00 AM ***-->
  <job id="5">
    <day>1,2,3,4,5,6,7</day>
    <start>03:30:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 30 Minutes</cmd>
  </job>
  <job id="6">
    <day>1,2,3,4,5,6,7</day>
    <start>03:45:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 15 Minutes</cmd>
  </job>
  <job id="7">
    <day>1,2,3,4,5,6,7</day>
    <start>03:55:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 5 Minutes</cmd>
  </job>
  <job id="8">
    <day>1,2,3,4,5,6,7</day>
    <start>03:59:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 1 Minute</cmd>
  </job>
  <job id="9">
    <day>1,2,3,4,5,6,7</day>
    <start>04:00:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>#shutdown</cmd>
  </job>
  <!-- *** Restart at 8:00:00 AM ***-->
  <job id="10">
    <day>1,2,3,4,5,6,7</day>
    <start>07:30:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 30 Minutes</cmd>
  </job>
  <job id="11">
    <day>1,2,3,4,5,6,7</day>
    <start>07:45:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 15 Minutes</cmd>
  </job>
  <job id="12">
    <day>1,2,3,4,5,6,7</day>
    <start>07:55:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 5 Minutes</cmd>
  </job>
  <job id="13">
    <day>1,2,3,4,5,6,7</day>
    <start>07:59:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 1 Minute</cmd>
  </job>
  <job id="14">
    <day>1,2,3,4,5,6,7</day>
    <start>08:00:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>#shutdown</cmd>
  </job>
  <!-- *** Restart at 12:00:00 PM ***-->
  <job id="15">
    <day>1,2,3,4,5,6,7</day>
    <start>11:30:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 30 Minutes</cmd>
  </job>
  <job id="16">
    <day>1,2,3,4,5,6,7</day>
    <start>11:45:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 15 Minutes</cmd>
  </job>
  <job id="17">
    <day>1,2,3,4,5,6,7</day>
    <start>11:55:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 5 Minutes</cmd>
  </job>
  <job id="18">
    <day>1,2,3,4,5,6,7</day>
    <start>11:59:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 1 Minute</cmd>
  </job>
  <job id="19">
    <day>1,2,3,4,5,6,7</day>
    <start>12:00:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>#shutdown</cmd>
  </job>
  <!-- *** Restart at 04:00:00 PM ***-->
  <job id="20">
    <day>1,2,3,4,5,6,7</day>
    <start>15:30:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 30 Minutes</cmd>
  </job>
  <job id="21">
    <day>1,2,3,4,5,6,7</day>
    <start>15:45:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 15 Minutes</cmd>
  </job>
  <job id="22">
    <day>1,2,3,4,5,6,7</day>
    <start>15:55:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 5 Minutes</cmd>
  </job>
  <job id="23">
    <day>1,2,3,4,5,6,7</day>
    <start>15:59:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 1 Minute</cmd>
  </job>
  <job id="24">
    <day>1,2,3,4,5,6,7</day>
    <start>16:00:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>#shutdown</cmd>
  </job>
  <!-- *** Restart at 08:00:00 PM ***-->
  <job id="25">
    <day>1,2,3,4,5,6,7</day>
    <start>19:30:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 30 Minutes</cmd>
  </job>
  <job id="26">
    <day>1,2,3,4,5,6,7</day>
    <start>19:45:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 15 Minutes</cmd>
  </job>
  <job id="27">
    <day>1,2,3,4,5,6,7</day>
    <start>19:55:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 5 Minutes</cmd>
  </job>
  <job id="28">
    <day>1,2,3,4,5,6,7</day>
    <start>19:59:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>say -1 Restart in 1 Minute</cmd>
  </job>
  <job id="29">
    <day>1,2,3,4,5,6,7</day>
    <start>20:00:00</start>
    <runtime>000000</runtime>
    <loop>0</loop>
    <cmd>#shutdown</cmd>
  </job>
  <!-- ~~~ BEC Messages  ~~~-->
  <job id="30">
    <day>1,2,3,4,5,6,7</day>
    <start>000500</start>
    <runtime>003000</runtime>
    <loop>-1</loop>
    <cmd>say -1 This message will start at 5 minutes and run every 30 minutes</cmd>
  </job>
  <job id="31">
    <day>1,2,3,4,5,6,7</day>
    <start>000600</start>
    <runtime>003000</runtime>
    <loop>-1</loop>
    <cmd>say -1 This message will start at 6 minutes and run every 30 minutes</cmd>
  </job>
  <job id="32">
    <day>1,2,3,4,5,6,7</day>
    <start>000700</start>
    <runtime>003000</runtime>
    <loop>-1</loop>
    <cmd>say -1 This message will start at 7 minutes and run every 30 minutes</cmd>
  </job>
  <job id="33">
    <day>1,2,3,4,5,6,7</day>
    <start>000800</start>
    <runtime>003000</runtime>
    <loop>-1</loop>
    <cmd>say -1 This message will start at 8 minutes and run every 30 minutes</cmd>
  </job>
</Scheduler>

Frank Harris

aka Shootingblanks

First of all my Internet pseudo name came from the fact that I love playing first person shooters, but I am bad. Are used to play the game and think that my character was shooting “blanks” because I couldn’t hit anybody

I have always been Fascinated by computers and games since first introduced to Wolfenstein 3-D on a classic 8088 PC in 1994 or thereabouts

Fascinated by computers and games since first introduced to Wolfenstein 3-D on a classic 8088 PC in 1994 or thereabouts, since then I have always been learning more about programming Linux administration and multiplayer games it is literally my passion I wake up at 3 o’clock in the morning and think about writing code.

How I (and IAre Gamer) got to where it is today

  • 1990’s operated a BBS (majorBBS) with 16 incoming phone lines. this is where I started developing games.
  • at the same time the Internet was just developing and my BBS software morphed into an AOL like product called World Group. I leased phone numbers from a national company and provided dial-up Internet access nationwide until the high-speed cable Internet came along
  • In 2000 I joined a group of online game players and we formed the Pizza militia playing urban terror. We rented our first VPS servers and hosted our own dedicated game servers. This this taught me Linux administration and all about the connection issues of game servers.
  • To help control our urban terror servers, we used a software called B3 which I wrote several Scripts in python to automate our servers. The jewel was one to allow players in separate game servers to communicate with each other using IRQ protocol
  • The days of urban terror came to an end and we switched to counterstrike servers all the while hosting our own dedicated servers for our games.
  • And then DayZ came along which catapulted my coding experience to another level. A modification for Arma games it actually has its own scripting language, Armascript which allows you to completely change gameplay. The community site opendayz.net I became a guru with the highest number of post and solved all kinds of server issues
  • after hosting game servers on our own VPS machines for 16 years, in 2016 I started providing game servers for friends no charge just so that I could help administer set up and code dedicated servers.
  • in 2018 we switch to an open sourced game server software, open game panel. This was not quite ready for commercial use so for two years myself and several other developers heavily modified this software where it is what we have now, a fully functional billing in server management system
  • January 1, 2020 we went live with I Are Gamer Providing game servers at an affordable price because that’s what we love to do

somewhere along the way I had read a lot of books about game development, and finally I was introduced to the unreal engine and unity 3-D. These allow small groups or individuals to create games quickly and professionally . rust in seven days to die are both games developed in unity 3-D. We are currently developing games using unity 3-D and if you look at the development page you can see some information about progress on our latest game

it sounds like I did this all by myself but I couldn’t be where I am without the help of others such as mr. skellington, Nerp, Critofur, Boba Fetish, bebiano and numerous others as well as my family and friends who have tolerated my obsession