mirror of
https://github.com/UzixLS/armastuff.git
synced 2025-07-18 23:01:34 +03:00
initial
This commit is contained in:
114
armatop.pl
Executable file
114
armatop.pl
Executable file
@ -0,0 +1,114 @@
|
||||
#!/usr/bin/env perl -T
|
||||
# Armatop v0.8 by Uzix <master@uzix.us.to>
|
||||
# TODO:
|
||||
# 1. case insensetive /stats
|
||||
# 2. fix file::tail
|
||||
|
||||
use 5.010;
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
use File::Tail;
|
||||
$ENV{PATH} = '/bin:/usr/bin:/usr/local/bin';
|
||||
$ENV{ENV} = '';
|
||||
|
||||
my $c1="0xff6633";
|
||||
my $c2="0xcc9900";
|
||||
my $c3="0xffee11";
|
||||
my $waitint=1;
|
||||
my $workdir=".";
|
||||
my $mode;
|
||||
my %stats;
|
||||
GetOptions ("workdir=s" => \$workdir, "mode=s" => \$mode);
|
||||
|
||||
sub cmessage {
|
||||
my $message = $_[0];
|
||||
my $nick = $_[1];
|
||||
if ($nick) {
|
||||
print out "PLAYER_MESSAGE $nick \">> $message\"\n";
|
||||
} else {
|
||||
print out "CONSOLE_MESSAGE $message\n";
|
||||
}
|
||||
sleep 1;
|
||||
}
|
||||
sub cmdtop {
|
||||
my $nick=$_[1]?$_[1]:$_[0] or warn "cmdstats: no arg0" and return;
|
||||
my @top; my $ok=0; my $i=0; my $ii=0;
|
||||
open won_matches, "$workdir/won_matches.txt" or warn "File '$workdir/won_matches.txt' open failed: $!\n" and return;
|
||||
while (<won_matches>) {
|
||||
m/(?<score>\d+)\s+(?<nick>\S+)/;
|
||||
my $t_nick=$+{nick}; my $t_score=$+{score};
|
||||
$i++;
|
||||
if ($ii) { $ii++; }
|
||||
if (!$ok and $t_nick =~ /^\Q$nick\E$/i) {
|
||||
$ok=1; $ii=1;
|
||||
push @top, "${c3}$.th) $t_nick ($t_score)";
|
||||
} else {
|
||||
push @top, "${c2}$.th) $t_nick ($t_score)";
|
||||
}
|
||||
if ($i>5) { $i--; shift @top; }
|
||||
if ($ii>2 and $i>4) { last; }
|
||||
}
|
||||
close won_matches;
|
||||
if ($ok) {
|
||||
&cmessage ("${c1}Top list for ${c3}$nick${c1}:".'\n\ '.join ('\n\ ',@top), $_[1]?$_[0]:"");
|
||||
} else {
|
||||
&cmessage ("${c3}$nick${c1} isn't in top list.", $_[1]?$_[0]:"");
|
||||
}
|
||||
}
|
||||
sub cmdstats {
|
||||
my $nick=$_[1]?$_[1]:$_[0] or warn "cmdstats: no arg0" and return;
|
||||
if (exists ($stats{$nick})) {
|
||||
&cmessage ("${c2}Stats for ${c3}$nick${c2}: ${c3}".($stats{$nick}{r} or 0)."${c2} rounds played (${c3}".sprintf ("%.0f", ($stats{$nick}{rw}/($stats{$nick}{r} or 1)*100))."${c2}% wins); ${c3}".($stats{$nick}{m} or 0)."${c2} matches played (${c3}".sprintf ("%.0f", ($stats{$nick}{mw}/($stats{$nick}{m} or 1)*100))."${c2}% wins); ${c3}".($stats{$nick}{k} or 0)."${c2} kills; ${c3}".($stats{$nick}{d} or 0)."${c2} deaths; ${c3}".sprintf("%.2f",$stats{$nick}{k}/($stats{$nick}{d} or 1))."${c2} KpD.", $_[1]?$_[0]:"");
|
||||
} else {
|
||||
&cmessage ("${c3}$nick${c2} never played on this server.", $_[1]?$_[0]:"");
|
||||
}
|
||||
}
|
||||
sub rebuild {
|
||||
open rebuildlog, "$workdir/ladderlog.txt" or warn "File '$workdir/ladderlog.txt' open failed: $!\n" and return;
|
||||
while (chomp (my $line = <rebuildlog>)) {
|
||||
given ($line) {
|
||||
when (m<^DEATH_FRAG (?<who_died>\S+) (?<by_who>\S+).*>) { $stats{$+{who_died}}{'d'}++; $stats{$+{by_who}}{'k'}++; }
|
||||
when (m<^ROUND_SCORE (?<score>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'r'}++; }
|
||||
when (m<^MATCH_SCORE (?<score>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'m'}++; }
|
||||
when (m<^ROUND_WINNER (?<team>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'rw'}++; }
|
||||
when (m<^MATCH_WINNER (?<team>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'mw'}++; }
|
||||
}
|
||||
}
|
||||
close rebuildlog;
|
||||
}
|
||||
given ($mode) {
|
||||
when ('test') {
|
||||
open out, "|cat";
|
||||
&rebuild ();
|
||||
open ladderlog, "$workdir/ladderlog.txt" or die "File '$workdir/ladderlog.txt' open failed: $!\n";
|
||||
$c1=""; $c2=""; $c3="";
|
||||
} when ('stdio') {
|
||||
open out, ">-";
|
||||
&rebuild ();
|
||||
open ladderlog, "<-";
|
||||
} default {
|
||||
open out, ">$workdir/commands" or die "File '>$workdir/commands' open failed: $!\n";;
|
||||
&rebuild ();
|
||||
open ladderlog, "tail -n0 -f $workdir/ladderlog.txt |" or die "Pipe 'tail -n0 -f $workdir/ladderlog.txt |' open failed: $!\n";
|
||||
#my $ladderlogref=tie *ladderlog,"File::Tail",(maxinterval=>0.1,interval=>0.1,name=>"$workdir/ladderlog.txt");
|
||||
}
|
||||
}
|
||||
select((select(out), $|=1)[0]);
|
||||
|
||||
print out "CONSOLE_MESSAGE ***Armatop script loaded.\n";
|
||||
while (chomp (my $line = <ladderlog>)) {
|
||||
given ($line) {
|
||||
when (m<^DEATH_FRAG (?<who_died>\S+) (?<by_who>\S+).*>) { $stats{$+{who_died}}{'d'}++; $stats{$+{by_who}}{'k'}++; }
|
||||
when (m<^ROUND_SCORE (?<score>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'r'}++; }
|
||||
when (m<^MATCH_SCORE (?<score>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'m'}++; }
|
||||
when (m<^ROUND_WINNER (?<team>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'rw'}++; }
|
||||
when (m<^MATCH_WINNER (?<team>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'mw'}++; &cmdtop ($+{who}); }
|
||||
when (m<^PLAYER_ENTERED (\S+) .*>) { &cmdstats ($1); }
|
||||
when (m<^PLAYER_LEFT (\S+) .*>) { &cmdstats ($1); };
|
||||
when (m<^COMMAND /top (?:[0-9]?) ?(?<who>\S+) (?<ip>[0-9.]+) (?<level>[0-9]{1,3}) ?(?<parm>\S*) ?(?:\S*).*>) { if (!$+{parm}) { &cmdtop ($+{who}, $+{who}) } else { &cmdtop ($+{who}, $+{parm}) }; }
|
||||
when (m<^COMMAND /stats (?:[0-9]?) ?(?<who>\S+) (?<ip>[0-9.]+) (?<level>[0-9]{1,3}) ?(?<parm>\S*) ?(?:\S*).*>) { if (!$+{parm}) { &cmdstats ($+{who}, $+{who}) } else { &cmdstats ($+{who}, $+{parm}) }; }
|
||||
}
|
||||
}
|
||||
|
||||
close ladderlog;
|
||||
close out;
|
36
armatop/README
Normal file
36
armatop/README
Normal file
@ -0,0 +1,36 @@
|
||||
Armatop - armagetron top100 script
|
||||
==================================
|
||||
Armagetron is 3D game inspired by Tron film.
|
||||
|
||||
|
||||
Requirements
|
||||
------------
|
||||
+ Perl > 5.10
|
||||
+ Perl GetOpt::Long module
|
||||
+ Perl File::Tail module (optional)
|
||||
|
||||
|
||||
How to use
|
||||
----------
|
||||
There is two ways to use this script with arma server:
|
||||
|
||||
1) Running as standalone program (for sty+ct server version):
|
||||
|
||||
export ARMADIR="/path/to/armagetron/working/dir"
|
||||
perl -T ./armatop.pl --workdir="$ARMADIR/var"
|
||||
armagetronad-dedicated --userdatadir "$ARMADIR"\
|
||||
--input "$ARMADIR/var/commands"
|
||||
|
||||
2) Using in pipe (for vanila server):
|
||||
|
||||
export ARMADIR="/path/to/armagetron/working/dir"
|
||||
tail -n0 -f "$ARMADIR/var/ladderlog.txt" |\
|
||||
perl -T ./armatop.pl --mode=stdio |\
|
||||
armagetronad-dedicated --userdatadir "$ARMADIR"
|
||||
|
||||
|
||||
Known issues
|
||||
------------
|
||||
+ In stadalone mode when script process is killed tail process staying alive
|
||||
while is no any text will be written to ladderlog.txt.
|
||||
+ File::Tail working glitchy.
|
114
armatop/armatop.pl
Executable file
114
armatop/armatop.pl
Executable file
@ -0,0 +1,114 @@
|
||||
#!/usr/bin/env perl -T
|
||||
# Armatop v0.8 by Uzix <master@uzix.us.to>
|
||||
# TODO:
|
||||
# 1. case insensetive /stats
|
||||
# 2. fix file::tail
|
||||
|
||||
use 5.010;
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
use File::Tail;
|
||||
$ENV{PATH} = '/bin:/usr/bin:/usr/local/bin';
|
||||
$ENV{ENV} = '';
|
||||
|
||||
my $c1="0xff6633";
|
||||
my $c2="0xcc9900";
|
||||
my $c3="0xffee11";
|
||||
my $waitint=1;
|
||||
my $workdir=".";
|
||||
my $mode;
|
||||
my %stats;
|
||||
GetOptions ("workdir=s" => \$workdir, "mode=s" => \$mode);
|
||||
|
||||
sub cmessage {
|
||||
my $message = $_[0];
|
||||
my $nick = $_[1];
|
||||
if ($nick) {
|
||||
print out "PLAYER_MESSAGE $nick \">> $message\"\n";
|
||||
} else {
|
||||
print out "CONSOLE_MESSAGE $message\n";
|
||||
}
|
||||
sleep 1;
|
||||
}
|
||||
sub cmdtop {
|
||||
my $nick=$_[1]?$_[1]:$_[0] or warn "cmdstats: no arg0" and return;
|
||||
my @top; my $ok=0; my $i=0; my $ii=0;
|
||||
open won_matches, "$workdir/won_matches.txt" or warn "File '$workdir/won_matches.txt' open failed: $!\n" and return;
|
||||
while (<won_matches>) {
|
||||
m/(?<score>\d+)\s+(?<nick>\S+)/;
|
||||
my $t_nick=$+{nick}; my $t_score=$+{score};
|
||||
$i++;
|
||||
if ($ii) { $ii++; }
|
||||
if (!$ok and $t_nick =~ /^\Q$nick\E$/i) {
|
||||
$ok=1; $ii=1;
|
||||
push @top, "${c3}$.th) $t_nick ($t_score)";
|
||||
} else {
|
||||
push @top, "${c2}$.th) $t_nick ($t_score)";
|
||||
}
|
||||
if ($i>5) { $i--; shift @top; }
|
||||
if ($ii>2 and $i>4) { last; }
|
||||
}
|
||||
close won_matches;
|
||||
if ($ok) {
|
||||
&cmessage ("${c1}Top list for ${c3}$nick${c1}:".'\n\ '.join ('\n\ ',@top), $_[1]?$_[0]:"");
|
||||
} else {
|
||||
&cmessage ("${c3}$nick${c1} isn't in top list.", $_[1]?$_[0]:"");
|
||||
}
|
||||
}
|
||||
sub cmdstats {
|
||||
my $nick=$_[1]?$_[1]:$_[0] or warn "cmdstats: no arg0" and return;
|
||||
if (exists ($stats{$nick})) {
|
||||
&cmessage ("${c2}Stats for ${c3}$nick${c2}: ${c3}".($stats{$nick}{r} or 0)."${c2} rounds played (${c3}".sprintf ("%.0f", ($stats{$nick}{rw}/($stats{$nick}{r} or 1)*100))."${c2}% wins); ${c3}".($stats{$nick}{m} or 0)."${c2} matches played (${c3}".sprintf ("%.0f", ($stats{$nick}{mw}/($stats{$nick}{m} or 1)*100))."${c2}% wins); ${c3}".($stats{$nick}{k} or 0)."${c2} kills; ${c3}".($stats{$nick}{d} or 0)."${c2} deaths; ${c3}".sprintf("%.2f",$stats{$nick}{k}/($stats{$nick}{d} or 1))."${c2} KpD.", $_[1]?$_[0]:"");
|
||||
} else {
|
||||
&cmessage ("${c3}$nick${c2} never played on this server.", $_[1]?$_[0]:"");
|
||||
}
|
||||
}
|
||||
sub rebuild {
|
||||
open rebuildlog, "$workdir/ladderlog.txt" or warn "File '$workdir/ladderlog.txt' open failed: $!\n" and return;
|
||||
while (chomp (my $line = <rebuildlog>)) {
|
||||
given ($line) {
|
||||
when (m<^DEATH_FRAG (?<who_died>\S+) (?<by_who>\S+).*>) { $stats{$+{who_died}}{'d'}++; $stats{$+{by_who}}{'k'}++; }
|
||||
when (m<^ROUND_SCORE (?<score>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'r'}++; }
|
||||
when (m<^MATCH_SCORE (?<score>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'m'}++; }
|
||||
when (m<^ROUND_WINNER (?<team>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'rw'}++; }
|
||||
when (m<^MATCH_WINNER (?<team>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'mw'}++; }
|
||||
}
|
||||
}
|
||||
close rebuildlog;
|
||||
}
|
||||
given ($mode) {
|
||||
when ('test') {
|
||||
open out, "|cat";
|
||||
&rebuild ();
|
||||
open ladderlog, "$workdir/ladderlog.txt" or die "File '$workdir/ladderlog.txt' open failed: $!\n";
|
||||
$c1=""; $c2=""; $c3="";
|
||||
} when ('stdio') {
|
||||
open out, ">-";
|
||||
&rebuild ();
|
||||
open ladderlog, "<-";
|
||||
} default {
|
||||
open out, ">$workdir/commands" or die "File '>$workdir/commands' open failed: $!\n";;
|
||||
&rebuild ();
|
||||
open ladderlog, "tail -n0 -f $workdir/ladderlog.txt |" or die "Pipe 'tail -n0 -f $workdir/ladderlog.txt |' open failed: $!\n";
|
||||
#my $ladderlogref=tie *ladderlog,"File::Tail",(maxinterval=>0.1,interval=>0.1,name=>"$workdir/ladderlog.txt");
|
||||
}
|
||||
}
|
||||
select((select(out), $|=1)[0]);
|
||||
|
||||
print out "CONSOLE_MESSAGE ***Armatop script loaded.\n";
|
||||
while (chomp (my $line = <ladderlog>)) {
|
||||
given ($line) {
|
||||
when (m<^DEATH_FRAG (?<who_died>\S+) (?<by_who>\S+).*>) { $stats{$+{who_died}}{'d'}++; $stats{$+{by_who}}{'k'}++; }
|
||||
when (m<^ROUND_SCORE (?<score>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'r'}++; }
|
||||
when (m<^MATCH_SCORE (?<score>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'m'}++; }
|
||||
when (m<^ROUND_WINNER (?<team>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'rw'}++; }
|
||||
when (m<^MATCH_WINNER (?<team>\S+) (?<who>\S+).*>) { $stats{$+{who}}{'mw'}++; &cmdtop ($+{who}); }
|
||||
when (m<^PLAYER_ENTERED (\S+) .*>) { &cmdstats ($1); }
|
||||
when (m<^PLAYER_LEFT (\S+) .*>) { &cmdstats ($1); };
|
||||
when (m<^COMMAND /top (?:[0-9]?) ?(?<who>\S+) (?<ip>[0-9.]+) (?<level>[0-9]{1,3}) ?(?<parm>\S*) ?(?:\S*).*>) { if (!$+{parm}) { &cmdtop ($+{who}, $+{who}) } else { &cmdtop ($+{who}, $+{parm}) }; }
|
||||
when (m<^COMMAND /stats (?:[0-9]?) ?(?<who>\S+) (?<ip>[0-9.]+) (?<level>[0-9]{1,3}) ?(?<parm>\S*) ?(?:\S*).*>) { if (!$+{parm}) { &cmdstats ($+{who}, $+{who}) } else { &cmdstats ($+{who}, $+{parm}) }; }
|
||||
}
|
||||
}
|
||||
|
||||
close ladderlog;
|
||||
close out;
|
11
bot/README
Normal file
11
bot/README
Normal file
@ -0,0 +1,11 @@
|
||||
Patch file to make your armagetron client acts like bot.
|
||||
|
||||
To activate bot chage value of option CHATBOT_ALWAYS_ACTIVE to 1.
|
||||
|
||||
Recommeded settings:
|
||||
CHATBOT_MIN_TIMESTEP 0
|
||||
CHATBOT_DECAY 0
|
||||
CHATBOT_DELAY 0
|
||||
CHATBOT_NEW_WALL_BLINDNESS 0
|
||||
CHATBOT_RANGE 10
|
||||
CHATBOT_DECAY 0
|
35
bot/armabot.patch
Normal file
35
bot/armabot.patch
Normal file
@ -0,0 +1,35 @@
|
||||
--- gCycle.cpp 2012-03-21 22:54:49.000000000 +0400
|
||||
+++ gCycle.cpp~ 2012-03-21 21:49:24.000000000 +0400
|
||||
@@ -318,26 +318,26 @@
|
||||
#endif
|
||||
|
||||
static bool sg_chatBotAlwaysActive = false;
|
||||
-static tConfItem<bool> sg_chatBotAlwaysActiveConf( "CHATBOT_ALWAYS_ACTIVE", sg_chatBotAlwaysActive );
|
||||
+static gChatBotSwitch sg_chatBotAlwaysActiveConf( "CHATBOT_ALWAYS_ACTIVE", sg_chatBotAlwaysActive );
|
||||
|
||||
static REAL sg_chatBotNewWallBlindness = .3;
|
||||
-static tConfItem<REAL> sg_chatBotNewWallBlindnessConf( "CHATBOT_NEW_WALL_BLINDNESS",
|
||||
+static gChatBotSetting sg_chatBotNewWallBlindnessConf( "CHATBOT_NEW_WALL_BLINDNESS",
|
||||
sg_chatBotNewWallBlindness );
|
||||
|
||||
static REAL sg_chatBotMinTimestep = .3;
|
||||
-static tConfItem<REAL> sg_chatBotMinTimestepConf( "CHATBOT_MIN_TIMESTEP",
|
||||
+static gChatBotSetting sg_chatBotMinTimestepConf( "CHATBOT_MIN_TIMESTEP",
|
||||
sg_chatBotMinTimestep );
|
||||
|
||||
static REAL sg_chatBotDelay = .5;
|
||||
-static tConfItem<REAL> sg_chatBotDelayConf( "CHATBOT_DELAY",
|
||||
+static gChatBotSetting sg_chatBotDelayConf( "CHATBOT_DELAY",
|
||||
sg_chatBotDelay );
|
||||
|
||||
static REAL sg_chatBotRange = 1;
|
||||
-static tConfItem<REAL> sg_chatBotRangeConf( "CHATBOT_RANGE",
|
||||
+static gChatBotSetting sg_chatBotRangeConf( "CHATBOT_RANGE",
|
||||
sg_chatBotRange );
|
||||
|
||||
static REAL sg_chatBotDecay = .02;
|
||||
-static tConfItem<REAL> sg_chatBotDecayConf( "CHATBOT_DECAY",
|
||||
+static gChatBotSetting sg_chatBotDecayConf( "CHATBOT_DECAY",
|
||||
sg_chatBotDecay );
|
||||
|
||||
class gCycleChatBot
|
77
run.sh
Executable file
77
run.sh
Executable file
@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env bash
|
||||
# Run script for armagetron server.
|
||||
|
||||
PROGDIR=/opt/arma
|
||||
HOMDIR=/var/games/arma/$2
|
||||
#test $(id -u) = 0 && su armagetron
|
||||
|
||||
case "$1" in
|
||||
start|stop|restart|rehash|status)
|
||||
if [ -z "$2" ]; then echo "Please, give me servername."; exit 1; fi
|
||||
if [ ! -r "$HOMDIR" ]; then echo "Cannot read $HOMDIR"; exit 3; fi
|
||||
;;
|
||||
esac; case "$1" in
|
||||
status)
|
||||
echo "Status for armagetron ($2): "
|
||||
echo -n ' Server: '
|
||||
if [ ! -r "$HOMDIR/var/pid" ]; then echo "cannot read PID file ($HOMDIR/var/pid)"; exit 2; fi
|
||||
echo -n $(cat "$HOMDIR/var/pid")" "
|
||||
if [ -r /proc/$(cat "$HOMDIR/var/pid") ]; then echo "ok"; else echo "fail"; fi
|
||||
|
||||
echo -n ' Armatop: '
|
||||
if [ ! -r "$HOMDIR/var/pid.armatop" ]; then echo "cannot read PID file ($HOMDIR/var/pid.armatop)"; exit 2; fi
|
||||
echo -n $(cat "$HOMDIR/var/pid.armatop")" "
|
||||
if [ -r /proc/$(cat "$HOMDIR/var/pid") ]; then echo "ok"; else echo "fail"; fi
|
||||
;;
|
||||
stop)
|
||||
echo -n "Stopping armagetron ($2): "
|
||||
if [ ! -r "$HOMDIR/var/pid" ]; then
|
||||
echo "Cannot read PID file ($HOMDIR/var/pid)"
|
||||
exit 2
|
||||
fi
|
||||
echo -n $(cat "$HOMDIR/var/pid")" "
|
||||
kill $(cat "$HOMDIR/var/pid") 2>/dev/null
|
||||
if [ ! -r "$HOMDIR/var/pid.armatop" ]; then
|
||||
echo "Cannot read PID file ($HOMDIR/var/pid.armatop)"
|
||||
exit 2
|
||||
fi
|
||||
echo -n $(cat "$HOMDIR/var/pid.armatop")" "
|
||||
kill $(cat "$HOMDIR/var/pid.armatop") 2>/dev/null
|
||||
echo .
|
||||
;;
|
||||
start)
|
||||
echo -n "Starting armagetron ($2): "
|
||||
touch "$HOMDIR/var/ladderlog.txt" "$HOMDIR/var/won_rounds.txt" "$HOMDIR/var/won_matches.txt"
|
||||
test -e "$HOMDIR/var/commands" && rm "$HOMDIR/var/commands" ; mkfifo "$HOMDIR/var/commands"
|
||||
|
||||
nice -n 2 perl -T $PROGDIR/scripts/armatop.pl --workdir="$HOMDIR/var" &
|
||||
echo -n "$! "; echo -n $! >"$HOMDIR/var/pid.armatop"
|
||||
|
||||
while true; do
|
||||
env LD_LIBRARY_PATH=/opt/arma/lib/ $PROGDIR/bin/armagetronad-dedicated --userdatadir "$HOMDIR" --input "$HOMDIR/var/commands" >"$HOMDIR/var/log" 2>&1 &
|
||||
trap "kill %1; exit;" TERM INT
|
||||
trap "kill -HUP %1; wait %1;" HUP
|
||||
wait %1
|
||||
sleep 3
|
||||
done &
|
||||
echo -n "$! "; echo -n $! >"$HOMDIR/var/pid"
|
||||
|
||||
echo .
|
||||
;;
|
||||
restart)
|
||||
"$0" stop "$2" && "$0" start "$2"
|
||||
;;
|
||||
rehash)
|
||||
echo -n "Rehashing armagetron ($2): "
|
||||
if [ ! -r "$HOMDIR/var/pid" ]; then
|
||||
echo "Cannot read PID file ($HOMDIR/var/pid)"
|
||||
exit 2
|
||||
fi
|
||||
echo -n $(cat "$HOMDIR/var/pid")" "
|
||||
kill -HUP $(cat "$HOMDIR/var/pid") 2>/dev/null
|
||||
echo .
|
||||
;;
|
||||
*)
|
||||
echo "Unknown parameters. Try to use \"$0 <start|stop|restart|rehash|status> <servername>\""
|
||||
;;
|
||||
esac
|
65
server_sets/TheTavern.cfg
Normal file
65
server_sets/TheTavern.cfg
Normal file
@ -0,0 +1,65 @@
|
||||
### Cycle Settings ###
|
||||
CYCLE_SPEED 30
|
||||
CYCLE_START_SPEED 18
|
||||
CYCLE_ACCEL 28
|
||||
CYCLE_DELAY .001
|
||||
CYCLE_BRAKE 70
|
||||
CYCLE_RUBBER 8
|
||||
CYCLE_PING_RUBBER 8
|
||||
CYCLE_RUBBER_SPEED 40
|
||||
CYCLE_BRAKE_REFILL 1
|
||||
CYCLE_BRAKE_DEPLETE .1
|
||||
CYCLE_TIME_TOLERANCE 10000
|
||||
CYCLE_RUBBER_TIMEBASED 1
|
||||
CYCLE_RUBBER_MINDISTANCE .001
|
||||
CYCLE_RUBBER_MINDISTANCE_RATIO 0.0001
|
||||
CYCLE_RUBBER_MINADJUST 0.001
|
||||
CYCLE_RUBBER_LEGACY 0
|
||||
CYCLE_RUBBER_TIME 1
|
||||
CYCLE_RUBBER_DELAY .5
|
||||
CYCLE_RUBBER_DELAY_BONUS .5
|
||||
CYCLE_DELAY_TIMEBASED 0.5
|
||||
|
||||
### Gameplay Settings ###
|
||||
SP_SPEED_FACTOR 0
|
||||
SPEED_FACTOR 0
|
||||
SP_WALLS_LENGTH 0
|
||||
WALLS_LENGTH 0
|
||||
SP_WALLS_STAY_UP_DELAY 0
|
||||
WALLS_STAY_UP_DELAY 0
|
||||
SP_EXPLOSION_RADIUS 0
|
||||
EXPLOSION_RADIUS 0
|
||||
SP_SIZE_FACTOR -3
|
||||
SIZE_FACTOR -1
|
||||
WIN_ZONE_DEATHS 1
|
||||
SP_WIN_ZONE_MIN_ROUND_TIME 360
|
||||
WIN_ZONE_MIN_ROUND_TIME 360
|
||||
SP_WIN_ZONE_MIN_LAST_DEATH 60
|
||||
WIN_ZONE_MIN_LAST_DEATH 60
|
||||
|
||||
### Score Settings ###
|
||||
SCORE_HOLE 0
|
||||
SCORE_SUICIDE -1
|
||||
SCORE_DIE 0
|
||||
SCORE_KILL 1
|
||||
SCORE_SURVIVE 0
|
||||
SP_SCORE_WIN 0
|
||||
SCORE_WIN 0
|
||||
SP_LIMIT_SCORE 100
|
||||
LIMIT_SCORE 10
|
||||
SP_LIMIT_ROUNDS 100
|
||||
LIMIT_ROUNDS 100
|
||||
SP_LIMIT_TIME 20
|
||||
LIMIT_TIME 20
|
||||
|
||||
### Teams settings ###
|
||||
SP_MIN_PLAYERS 4
|
||||
SP_NUM_AIS 0
|
||||
TEAM_BALANCE_ON_QUIT 0
|
||||
TEAM_BALANCE_WITH_AIS 0
|
||||
TEAM_MAX_IMBALANCE_PERM 1
|
||||
TEAM_MAX_IMBALANCE 2
|
||||
TEAM_MAX_PLAYERS 1
|
||||
TEAM_MIN_PLAYERS 1
|
||||
TEAMS_MAX 16
|
||||
TEAMS_MIN 1
|
75
server_sets/TronTrek.cfg
Normal file
75
server_sets/TronTrek.cfg
Normal file
@ -0,0 +1,75 @@
|
||||
### Cycle Settings ###
|
||||
CYCLE_ACCEL 25
|
||||
CYCLE_BRAKE 70
|
||||
CYCLE_BRAKE_DEPLETE 0.1
|
||||
CYCLE_DELAY 0.001
|
||||
CYCLE_DELAY_TIMEBASED 0
|
||||
CYCLE_PING_RUBBER 10
|
||||
CYCLE_RUBBER 10
|
||||
CYCLE_RUBBER_TIME 2
|
||||
CYCLE_RUBBER_TIMEBASED 1
|
||||
CYCLE_RUBBER_DELAY 50
|
||||
CYCLE_RUBBER_DELAY_BONUS 2
|
||||
CYCLE_RUBBER_MINDISTANCE 0.1
|
||||
CYCLE_RUBBER_MINDISTANCE_GAP 0.15
|
||||
CYCLE_START_SPEED 1
|
||||
RESPAWN_TIME 0
|
||||
CYCLE_INVULNERABLE_TIME 4
|
||||
CYCLE_WALL_TIME 3.5
|
||||
|
||||
### Gameplay Settings ###
|
||||
SP_GAME_TYPE 0
|
||||
GAME_TYPE 0
|
||||
SP_WALLS_LENGTH 400
|
||||
WALLS_LENGTH 1400
|
||||
SP_WALLS_STAY_UP_DELAY 0.5
|
||||
WALLS_STAY_UP_DELAY 0.5
|
||||
SP_SIZE_FACTOR -2
|
||||
SIZE_FACTOR -2
|
||||
SP_EXPLOSION_RADIUS 1
|
||||
EXPLOSION_RADIUS 1
|
||||
SP_WIN_ZONE_MIN_LAST_DEATH 1
|
||||
WIN_ZONE_MIN_LAST_DEATH 1
|
||||
SP_WIN_ZONE_MIN_ROUND_TIME 320
|
||||
WIN_ZONE_MIN_ROUND_TIME 320
|
||||
WIN_ZONE_DEATHS 1
|
||||
WIN_ZONE_EXPANSION 10
|
||||
WIN_ZONE_RANDOMNESS 0
|
||||
WIN_ZONE_INITIAL_SIZE 1
|
||||
|
||||
### Score Settings ###
|
||||
SCORE_DEATHZONE 0
|
||||
SCORE_DIE 0
|
||||
SCORE_HOLE 0
|
||||
SCORE_KILL 1
|
||||
SCORE_SUICIDE -1
|
||||
SCORE_SURVIVE 0
|
||||
SP_SCORE_WIN 0
|
||||
SCORE_WIN 0
|
||||
SP_LIMIT_SCORE 100
|
||||
LIMIT_SCORE 100
|
||||
SP_LIMIT_ROUNDS 1
|
||||
LIMIT_ROUNDS 1
|
||||
SP_LIMIT_TIME 6
|
||||
LIMIT_TIME 6
|
||||
|
||||
### Other Settings ###
|
||||
CHATBOT_MIN_TIMESTEP 0
|
||||
CHATBOT_DELAY 0
|
||||
CHATBOT_RANGE 10
|
||||
CHATBOT_DECAY 0
|
||||
|
||||
### Teams Settings ###
|
||||
SP_MIN_PLAYERS 2
|
||||
MIN_PLAYERS 2
|
||||
SP_AI_IQ 10000
|
||||
AI_IQ 10000
|
||||
SP_NUM_AIS 0
|
||||
NUM_AIS 1
|
||||
SP_TEAMS_MIN 4
|
||||
TEAMS_MIN 2
|
||||
SP_TEAMS_MAX 5
|
||||
SP_TEAM_MIN_PLAYERS 2
|
||||
SP_TEAM_MAX_PLAYERS 2
|
||||
TEAM_MAX_PLAYERS 1
|
||||
SP_TEAM_BALANCE_WITH_AIS 0
|
66
server_sets/WildCat.cfg
Normal file
66
server_sets/WildCat.cfg
Normal file
@ -0,0 +1,66 @@
|
||||
### Cycle Settings ###
|
||||
CYCLE_ACCEL 30
|
||||
CYCLE_ACCEL_OFFSET 2.0
|
||||
CYCLE_BRAKE 90.0
|
||||
CYCLE_BRAKE_REFILL .5
|
||||
CYCLE_BRAKE_DEPLETE .25
|
||||
CYCLE_DELAY 0.001
|
||||
CYCLE_MAX_REFCOUNT 30000
|
||||
CYCLE_PING_RUBBER 12.0
|
||||
CYCLE_RUBBER 20.0
|
||||
CYCLE_RUBBER_MINADJUST .1
|
||||
CYCLE_RUBBER_MINDISTANCE .01
|
||||
CYCLE_RUBBER_MINDISTANCE_RATIO .0001
|
||||
CYCLE_RUBBER_SPEED 40
|
||||
CYCLE_RUBBER_TIME 5.0
|
||||
CYCLE_SOUND_SPEED 15
|
||||
CYCLE_SMOOTH_THRESHOLD .2
|
||||
CYCLE_SMOOTH_TIME .5
|
||||
CYCLE_SPEED 35.0
|
||||
CYCLE_START_SPEED 35.0
|
||||
CYCLE_SYNC_INTERVAL_ENEMY 0.2
|
||||
CYCLE_SYNC_INTERVAL_SELF 0.05
|
||||
CYCLE_WALL_NEAR 3.0
|
||||
RESPAWN_TIME 0
|
||||
CYCLE_INVULNERABLE_TIME 4
|
||||
CYCLE_WALL_TIME 3.5
|
||||
|
||||
### Gameplay Settings ###
|
||||
SP_WALLS_LENGTH 200
|
||||
WALLS_LENGTH 200
|
||||
SP_WALLS_STAY_UP_DELAY 0
|
||||
WALLS_STAY_UP_DELAY 0
|
||||
SP_SIZE_FACTOR -3
|
||||
SIZE_FACTOR -3
|
||||
SP_EXPLOSION_RADIUS 0
|
||||
EXPLOSION_RADIUS 0
|
||||
WIN_ZONE_DEATHS 1
|
||||
SP_WIN_ZONE_MIN_LAST_DEATH 30
|
||||
WIN_ZONE_MIN_LAST_DEATH 30
|
||||
SP_WIN_ZONE_MIN_ROUND_TIME 2000
|
||||
WIN_ZONE_MIN_ROUND_TIME 2000
|
||||
|
||||
### Score Settings ###
|
||||
SCORE_DEATHZONE 0
|
||||
SCORE_DIE 0
|
||||
SCORE_HOLE 0
|
||||
SCORE_KILL 1
|
||||
SCORE_SUICIDE 0
|
||||
SCORE_SURVIVE 0
|
||||
SP_SCORE_WIN 1
|
||||
SCORE_WIN 1
|
||||
SP_LIMIT_SCORE 13
|
||||
LIMIT_SCORE 13
|
||||
SP_LIMIT_ROUNDS 100
|
||||
LIMIT_ROUNDS 100
|
||||
SP_LIMIT_TIME 20
|
||||
LIMIT_TIME 20
|
||||
|
||||
### Teams settings ###
|
||||
SP_MIN_PLAYERS 2
|
||||
MIN_PLAYERS 2
|
||||
SP_AI_IQ 100
|
||||
SP_NUM_AIS 3
|
||||
SP_TEAM_BALANCE_WITH_AIS 0
|
||||
TEAMS_MIN 2
|
||||
TEAM_MAX_PLAYERS 1
|
0
server_sets/YellowSubmarine.cfg
Normal file
0
server_sets/YellowSubmarine.cfg
Normal file
Reference in New Issue
Block a user