From ba317ffa1ea3e5335df8717d851a88319ba9d8d1 Mon Sep 17 00:00:00 2001 From: Eugeny Uzix Date: Thu, 22 Mar 2012 21:50:02 +0400 Subject: [PATCH] initial --- armatop.pl | 114 ++++++++++++++++++++++++++++++++ armatop/README | 36 ++++++++++ armatop/armatop.pl | 114 ++++++++++++++++++++++++++++++++ bot/README | 11 +++ bot/armabot.patch | 35 ++++++++++ run.sh | 77 +++++++++++++++++++++ server_sets/TheTavern.cfg | 65 ++++++++++++++++++ server_sets/TronTrek.cfg | 75 +++++++++++++++++++++ server_sets/WildCat.cfg | 66 ++++++++++++++++++ server_sets/YellowSubmarine.cfg | 0 10 files changed, 593 insertions(+) create mode 100755 armatop.pl create mode 100644 armatop/README create mode 100755 armatop/armatop.pl create mode 100644 bot/README create mode 100644 bot/armabot.patch create mode 100755 run.sh create mode 100644 server_sets/TheTavern.cfg create mode 100644 server_sets/TronTrek.cfg create mode 100644 server_sets/WildCat.cfg create mode 100644 server_sets/YellowSubmarine.cfg diff --git a/armatop.pl b/armatop.pl new file mode 100755 index 0000000..9373fdd --- /dev/null +++ b/armatop.pl @@ -0,0 +1,114 @@ +#!/usr/bin/env perl -T +# Armatop v0.8 by Uzix +# 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 () { + m/(?\d+)\s+(?\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 = )) { + given ($line) { + when (m<^DEATH_FRAG (?\S+) (?\S+).*>) { $stats{$+{who_died}}{'d'}++; $stats{$+{by_who}}{'k'}++; } + when (m<^ROUND_SCORE (?\S+) (?\S+).*>) { $stats{$+{who}}{'r'}++; } + when (m<^MATCH_SCORE (?\S+) (?\S+).*>) { $stats{$+{who}}{'m'}++; } + when (m<^ROUND_WINNER (?\S+) (?\S+).*>) { $stats{$+{who}}{'rw'}++; } + when (m<^MATCH_WINNER (?\S+) (?\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 = )) { + given ($line) { + when (m<^DEATH_FRAG (?\S+) (?\S+).*>) { $stats{$+{who_died}}{'d'}++; $stats{$+{by_who}}{'k'}++; } + when (m<^ROUND_SCORE (?\S+) (?\S+).*>) { $stats{$+{who}}{'r'}++; } + when (m<^MATCH_SCORE (?\S+) (?\S+).*>) { $stats{$+{who}}{'m'}++; } + when (m<^ROUND_WINNER (?\S+) (?\S+).*>) { $stats{$+{who}}{'rw'}++; } + when (m<^MATCH_WINNER (?\S+) (?\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]?) ?(?\S+) (?[0-9.]+) (?[0-9]{1,3}) ?(?\S*) ?(?:\S*).*>) { if (!$+{parm}) { &cmdtop ($+{who}, $+{who}) } else { &cmdtop ($+{who}, $+{parm}) }; } + when (m<^COMMAND /stats (?:[0-9]?) ?(?\S+) (?[0-9.]+) (?[0-9]{1,3}) ?(?\S*) ?(?:\S*).*>) { if (!$+{parm}) { &cmdstats ($+{who}, $+{who}) } else { &cmdstats ($+{who}, $+{parm}) }; } + } +} + +close ladderlog; +close out; diff --git a/armatop/README b/armatop/README new file mode 100644 index 0000000..067372f --- /dev/null +++ b/armatop/README @@ -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. diff --git a/armatop/armatop.pl b/armatop/armatop.pl new file mode 100755 index 0000000..9373fdd --- /dev/null +++ b/armatop/armatop.pl @@ -0,0 +1,114 @@ +#!/usr/bin/env perl -T +# Armatop v0.8 by Uzix +# 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 () { + m/(?\d+)\s+(?\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 = )) { + given ($line) { + when (m<^DEATH_FRAG (?\S+) (?\S+).*>) { $stats{$+{who_died}}{'d'}++; $stats{$+{by_who}}{'k'}++; } + when (m<^ROUND_SCORE (?\S+) (?\S+).*>) { $stats{$+{who}}{'r'}++; } + when (m<^MATCH_SCORE (?\S+) (?\S+).*>) { $stats{$+{who}}{'m'}++; } + when (m<^ROUND_WINNER (?\S+) (?\S+).*>) { $stats{$+{who}}{'rw'}++; } + when (m<^MATCH_WINNER (?\S+) (?\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 = )) { + given ($line) { + when (m<^DEATH_FRAG (?\S+) (?\S+).*>) { $stats{$+{who_died}}{'d'}++; $stats{$+{by_who}}{'k'}++; } + when (m<^ROUND_SCORE (?\S+) (?\S+).*>) { $stats{$+{who}}{'r'}++; } + when (m<^MATCH_SCORE (?\S+) (?\S+).*>) { $stats{$+{who}}{'m'}++; } + when (m<^ROUND_WINNER (?\S+) (?\S+).*>) { $stats{$+{who}}{'rw'}++; } + when (m<^MATCH_WINNER (?\S+) (?\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]?) ?(?\S+) (?[0-9.]+) (?[0-9]{1,3}) ?(?\S*) ?(?:\S*).*>) { if (!$+{parm}) { &cmdtop ($+{who}, $+{who}) } else { &cmdtop ($+{who}, $+{parm}) }; } + when (m<^COMMAND /stats (?:[0-9]?) ?(?\S+) (?[0-9.]+) (?[0-9]{1,3}) ?(?\S*) ?(?:\S*).*>) { if (!$+{parm}) { &cmdstats ($+{who}, $+{who}) } else { &cmdstats ($+{who}, $+{parm}) }; } + } +} + +close ladderlog; +close out; diff --git a/bot/README b/bot/README new file mode 100644 index 0000000..679c4e0 --- /dev/null +++ b/bot/README @@ -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 diff --git a/bot/armabot.patch b/bot/armabot.patch new file mode 100644 index 0000000..0a0642c --- /dev/null +++ b/bot/armabot.patch @@ -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 sg_chatBotAlwaysActiveConf( "CHATBOT_ALWAYS_ACTIVE", sg_chatBotAlwaysActive ); ++static gChatBotSwitch sg_chatBotAlwaysActiveConf( "CHATBOT_ALWAYS_ACTIVE", sg_chatBotAlwaysActive ); + + static REAL sg_chatBotNewWallBlindness = .3; +-static tConfItem sg_chatBotNewWallBlindnessConf( "CHATBOT_NEW_WALL_BLINDNESS", ++static gChatBotSetting sg_chatBotNewWallBlindnessConf( "CHATBOT_NEW_WALL_BLINDNESS", + sg_chatBotNewWallBlindness ); + + static REAL sg_chatBotMinTimestep = .3; +-static tConfItem sg_chatBotMinTimestepConf( "CHATBOT_MIN_TIMESTEP", ++static gChatBotSetting sg_chatBotMinTimestepConf( "CHATBOT_MIN_TIMESTEP", + sg_chatBotMinTimestep ); + + static REAL sg_chatBotDelay = .5; +-static tConfItem sg_chatBotDelayConf( "CHATBOT_DELAY", ++static gChatBotSetting sg_chatBotDelayConf( "CHATBOT_DELAY", + sg_chatBotDelay ); + + static REAL sg_chatBotRange = 1; +-static tConfItem sg_chatBotRangeConf( "CHATBOT_RANGE", ++static gChatBotSetting sg_chatBotRangeConf( "CHATBOT_RANGE", + sg_chatBotRange ); + + static REAL sg_chatBotDecay = .02; +-static tConfItem sg_chatBotDecayConf( "CHATBOT_DECAY", ++static gChatBotSetting sg_chatBotDecayConf( "CHATBOT_DECAY", + sg_chatBotDecay ); + + class gCycleChatBot diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..7d81cb0 --- /dev/null +++ b/run.sh @@ -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 \"" + ;; +esac diff --git a/server_sets/TheTavern.cfg b/server_sets/TheTavern.cfg new file mode 100644 index 0000000..fb53eea --- /dev/null +++ b/server_sets/TheTavern.cfg @@ -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 diff --git a/server_sets/TronTrek.cfg b/server_sets/TronTrek.cfg new file mode 100644 index 0000000..a47b289 --- /dev/null +++ b/server_sets/TronTrek.cfg @@ -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 diff --git a/server_sets/WildCat.cfg b/server_sets/WildCat.cfg new file mode 100644 index 0000000..eee9945 --- /dev/null +++ b/server_sets/WildCat.cfg @@ -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 diff --git a/server_sets/YellowSubmarine.cfg b/server_sets/YellowSubmarine.cfg new file mode 100644 index 0000000..e69de29