From acd5fe407ec9194e5d5503f3c92261e184b711e0 Mon Sep 17 00:00:00 2001 From: ChocoTaco Date: Wed, 8 Jan 2020 02:49:43 -0500 Subject: [PATCH] Added Ubuntu --- .dockerignore | 1 + .gitignore | 6 +- Dockerfile | 64 +- README.md | 62 +- _custom/GameData/Classic/prefs/serverPrefs.cs | 1471 +++++++++++++++++ .../Classic/scripts/autoexec/AdminPrefs.cs | 10 + .../{Classic => GameData/base}/prefs/dummy | 0 .../base}/scripts/autoexec/dummy | 0 _custom/base/prefs/dummy | 0 _custom/base/scripts/autoexec/dummy | 0 _scripts/cfg-admin-prefs | 2 +- _scripts/clean-up | 17 +- _scripts/gen_autoexec_index | 19 - _scripts/start-server | 20 +- _scripts/tn_heartbeat | 11 - _scripts/tribesnext-server-installer | 273 ++- docker-compose.yml | 18 +- 17 files changed, 1802 insertions(+), 172 deletions(-) create mode 100644 .dockerignore create mode 100644 _custom/GameData/Classic/prefs/serverPrefs.cs create mode 100644 _custom/GameData/Classic/scripts/autoexec/AdminPrefs.cs rename _custom/{Classic => GameData/base}/prefs/dummy (100%) rename _custom/{Classic => GameData/base}/scripts/autoexec/dummy (100%) delete mode 100644 _custom/base/prefs/dummy delete mode 100644 _custom/base/scripts/autoexec/dummy delete mode 100644 _scripts/gen_autoexec_index delete mode 100644 _scripts/tn_heartbeat diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..191381e --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.git \ No newline at end of file diff --git a/.gitignore b/.gitignore index ca2e8a5..9395f19 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -build_image -run_container -*.cs *.dso -_custom/start-server.sh +notes.md +_custom/start-server.sh \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 05e0e74..506b953 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,32 +8,33 @@ RUN apk --update add git sed less wget nano openssh && \ WORKDIR /tmp -RUN git clone --depth 1 "https://github.com/ChocoTaco1/TacoServer/" && cd ./TacoServer +RUN git clone --depth 1 "https://github.com/ChocoTaco1/TacoServer/" && cd ./TacoServer WORKDIR /tmp -RUN git clone --depth 1 "https://github.com/ChocoTaco1/TacoMaps/" && cd ./TacoMaps +RUN git clone --depth 1 "https://github.com/ChocoTaco1/TacoMaps/" && cd ./TacoMaps WORKDIR /tmp -RUN git clone --depth 1 "https://github.com/ChocoTaco1/NoTNscripts/" && cd ./NoTNscripts - # Main Game Server Image FROM i386/ubuntu:disco -LABEL maintainer="sairuk, battlelore, chocotaco" +LABEL maintainer="sairuk, amineo, chocotaco" # ENVIRONMENT ARG SRVUSER=gameserv ARG SRVUID=1000 ARG SRVDIR=/tmp/tribes2/ -ENV INSTDIR=/home/${SRVUSER}/.loki/tribes2/ -ENV TZ="America/New_York" -# -- shutup installers -ENV DEBIAN_FRONTEND noninteractive +ENV INSTDIR=/home/${SRVUSER}/.wine32/drive_c/Dynamix/Tribes2/ +# WINE VERSION: wine = 1.6, wine-development = 1.7.29 for i386-jessie +ENV WINEVER=wine-development +ENV WINEARCH=win32 +ENV WINEPREFIX=/home/${SRVUSER}/.wine32/ + +#WINEARCH=win32 WINEPREFIX=/home/gameserv/.wine32/ wine wineboot # UPDATE IMAGE RUN dpkg --add-architecture i386 -RUN apt-get -y update --fix-missing && apt-get -y upgrade +RUN apt-get -y update && apt-get -y upgrade # DEPENDENCIES RUN apt-get -y install \ @@ -42,19 +43,34 @@ sudo unzip \ # -- logging rsyslog \ # -- utilities -sed less nano vim file wget curl gnupg2 netcat software-properties-common xdelta3 tzdata +sed less nano vim file wget gnupg2 software-properties-common \ +# --- wine +#${WINEVER} \ +# -- display +xvfb + +RUN wget --no-check-certificate https://dl.winehq.org/wine-builds/winehq.key +RUN apt-key add winehq.key +RUN add-apt-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main' +RUN add-apt-repository ppa:cybermax-dexter/sdl2-backport +RUN apt-get -y update && apt-get -y upgrade && apt-get -y install --install-recommends winehq-devel -#RUN timedatectl set-timezone ${TZ} # CLEAN IMAGE RUN apt-get -y clean && apt-get -y autoremove + +# ENV +# -- shutup installers +ENV DEBIAN_FRONTEND noninteractive + # USER # -- add the user, expose datastore RUN useradd -m -s /bin/bash -u ${SRVUID} ${SRVUSER} # -- temporarily steal ownership RUN chown -R root: /home/${SRVUSER} - +# -- set wine win32 env +RUN WINEARCH=win32 WINEPREFIX=/home/gameserv/.wine32/ wine wineboot # SCRIPT - installer COPY _scripts/tribesnext-server-installer ${SRVDIR} @@ -66,16 +82,16 @@ RUN ${SRVDIR}/tribesnext-server-installer COPY _scripts/start-server ${INSTDIR}/start-server RUN chmod +x ${INSTDIR}/start-server -# TacoServer - Pull in resources from builder -COPY --from=tacobuilder /tmp/TacoServer/Classic/. ${INSTDIR}/Classic/. -COPY --from=tacobuilder /tmp/TacoMaps/. ${INSTDIR}/Classic/Maps/ -COPY --from=tacobuilder /tmp/NoTNscripts/. ${INSTDIR}/Classic/. - -# CLEAN UP +# CLEAN UP TMP COPY _scripts/clean-up ${SRVDIR} RUN chmod +x ${SRVDIR}/clean-up -RUN ${SRVDIR}/clean-up ${INSTDIR} +RUN ${SRVDIR}/clean-up + + +# TacoServer - Pull in resources from builder +COPY --from=tacobuilder /tmp/TacoServer/Classic/. ${INSTDIR}GameData/Classic/. +COPY --from=tacobuilder /tmp/TacoMaps/. ${INSTDIR}GameData/Classic/Maps/ # SCRIPT - custom (custom content / overrides) @@ -86,14 +102,6 @@ COPY _custom/. ${INSTDIR} COPY _scripts/cfg-admin-prefs ${SRVDIR} RUN chmod +x ${SRVDIR}/cfg-admin-prefs -# SCRIPT - generate our alphabetized autoexec index -COPY _scripts/gen_autoexec_index ${SRVDIR} -RUN chmod +x ${SRVDIR}/gen_autoexec_index - -# SCRIPT - heartbeat to TribesNext's master server -COPY _scripts/tn_heartbeat ${SRVDIR} -RUN chmod +x ${SRVDIR}/tn_heartbeat - # PERMISSIONS RUN chown -R ${SRVUSER}: /home/${SRVUSER} diff --git a/README.md b/README.md index 4de77fb..b55091e 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,22 @@ # Docker TribesNext -## Information -Tribes 2 Loki Native Linux dedicated server patched to run in Lan mode and running within Docker. -*This is does not include TribesNext and uses a LAN patch to run without it* +## Fork Updates + +- [Classic v1.5.2](http://tribes2stats.com/files/mods/classic_v152.zip) +- [Ruby 1.9](https://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/unstable/ruby-1.9.0-2-i386-mswin32.zip) + + +--- + +## Information +TribesNext dedicated server patched and running within Docker under wine. + +*This is TribesNext RC2a with the wine patches included.* The image will pull required files and install them at build time (providing the sources are live). -Docker image is completely self contained when built; it is currently based off Alpine/Ubuntu. This brings in the server at around 3.2GB once built. +Docker image is completely self contained when built; it is currently based off Debian Jessie 32bit. This brings in the server at around 1.6GB once built. The server runs as the gameserv user @@ -23,26 +32,27 @@ No volumes are used ## Usage **Build the image** -`sudo docker-compose up --build` +`docker build . -t tribesnext-server` **Run a container** -NB: the `--rm` arg will destroy the container when stopped; internal ports (666) can be mapped to available host ports (27999) per container. - -The container starts automatically when built. +NB: the `--rm` arg will destroy the container when stopped; internal ports (666) can be mapped to available host ports (27999) per container +``` +docker run -d --rm \ +-p 27999:666/tcp \ +-p 28000:28000/udp \ +--name tribesnext-server \ +tribesnext-server:latest +``` **Stop container** -``` -docker ps -docker stop -``` +`docker stop tribesnext-server` ## Server Customization -You can customize the server at build time by dropping the appropriate files at the appropriate locations in `_custom/`, these will be copied into the image into the install location within the container at build time. +You can customize the server at build time by dropping the appropriate files at the appropriate locations in `_custom/`, these will be copied into the image into the install location within the container at build time. -You can customize your server from the available options in the docker compose. These are set at build time. You can override the following defaults at build time ``` @@ -60,25 +70,9 @@ You can modify the installer script to update the source locations of the requir `tribesnext-server-installer` may also be used in standalone mode to install TribesNext RC2a on the host system under wine but your mileage may vary. +Testing has been minimal but it is running the NET247 server so you can try it out at any point. -## SSH into server -``` -docker ps -docker exec -it --user root bash -``` +## 2do +* Thinner base OS +* Reduce duplicate data across scripts - -## Install Docker -``` -curl -fsSL get.docker.com -o get-docker.sh && sudo sh get-docker.sh -sudo usermod -aG docker USERNAME -``` - - -## Install Docker-Compose -``` -sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose -sudo chmod +x /usr/local/bin/docker-compose -sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose -docker-compose --version -``` diff --git a/_custom/GameData/Classic/prefs/serverPrefs.cs b/_custom/GameData/Classic/prefs/serverPrefs.cs new file mode 100644 index 0000000..ceffef4 --- /dev/null +++ b/_custom/GameData/Classic/prefs/serverPrefs.cs @@ -0,0 +1,1471 @@ +$Host::AdminList = ""; +$Host::AdminPassword = "changeme"; +$Host::AdvStats::Delim = "\c7"; +$Host::AdvStats::LogChat = 0; +$Host::AdvStats::SpamInfoToConsole = 0; +$Host::allowAdminPlayerVotes = 0; +$Host::AllowMapScript = "True"; +$Host::AnimateWithTransitions = 0; +$Host::AntiCloakEnable = 1; +$Host::AntiCloakPlayerCount = 6; +$Host::BanTime = 1440; +$Host::BotCount = 2; +$Host::BotsEnabled = 0; +$Host::ClassicAdminLogPath = "prefs"; +$Host::ClassicAllowConsoleAccess = 0; +$Host::ClassicAntiTurtleTime = 5; +$Host::ClassicAutoPWEnabled = 0; +$Host::ClassicAutoPWPassword = "pickup"; +$Host::ClassicAutoPWPlayerCount = 30; +$Host::ClassicAutoRestartServer = 0; +$Host::ClassicBadWordFilter = 0; +$Host::ClassicBalancedBots = 0; +$Host::ClassicCanKickBots = 0; +$Host::ClassicConnectLog = 0; +$Host::ClassicConnLogPath = "prefs"; +$Host::ClassicCycleMisTypes = 0; +$Host::ClassicEchoChat = 0; +$Host::ClassicFairTeams = 1; +$Host::ClassicLimitArmors = 0; +$Host::ClassicLoadBlasterChanges = 0; +$Host::ClassicLoadHavocChanges = 0; +$Host::ClassicLoadMineChanges = 0; +$Host::ClassicLoadMissileChanges = 0; +$Host::ClassicLoadMortarChanges = 0; +$Host::ClassicLoadPlasmaTurretChanges = 0; +$Host::ClassicLoadPlayerChanges = 0; +$Host::ClassicLoadSniperChanges = 0; +$Host::ClassicLoadTR2Gametype = 0; +$Host::ClassicLoadVRamChanges = 0; +$Host::ClassicLogEchoEnabled = 0; +$Host::ClassicMaxTelepads = 3; +$Host::ClassicNoNullVoiceSpam = 0; +$Host::ClassicPacketRateToClient = 32; +$Host::ClassicPacketSize = 450; +$Host::ClassicRandomizeTeams = 1; +$Host::ClassicRandomMissions = 1; +$Host::ClassicRandomMisTypes = 0; +$Host::ClassicRestartTime = 12; +$Host::ClassicSuperAdminPassword = "changeme"; +$Host::ClassicTelnet = 0; +$Host::ClassicTelnetListenPass = "changeme"; +$Host::ClassicTelnetPassword = "changeme"; +$Host::ClassicTelnetPort = 666; +$Host::ClassicTkLimit = 0; +$Host::ClassicUseHighPerformanceCounter = 0; +$Host::CRCTextures = 0; +$Host::Dedicated = 1; +$Host::DefenseTurret::Active = 0; +$Host::DefenseTurret::MaxWptHeight = 10; +$Host::DefenseTurret::Optional = 0; +$Host::DefenseTurret::RequiredInTourney = 0; +$Host::DMSLOnlyMode = 0; +$Host::EmptyServerReset = 1; +$Host::EmptyServerResetTime = 120; +$Host::EnableAutobalance = 1; +$Host::EnableLakUnlimitedDJ = 1; +$Host::EnableMortarTurret = 0; +$Host::EnableNoBaseRapeNotify = 1; +$Host::EnableNetTourneyClient = 0; +$Host::EnableSetNextMission = 1; +$Host::EnableTeamBalanceNotify = 1; +$Host::EnableTurretPlayerCount = 10; +$Host::EnableVoteSound = 1; +$Host::EvoAdminAdmin = 0; +$Host::EvoAdminBan = 0; +$Host::EvoAdminClanLock = 0; +$Host::EvoAdminClearServer = 0; +$Host::EvoAdminCRCCheck = 0; +$Host::EvoAdminLogging = 1; +$Host::EvoAdminMaxPlayers = 20; +$Host::EvoAdminMinPlayers = 20; +$Host::EvoAdminPassVote = 0; +$Host::EvoAdminReset = 0; +$Host::EvoAdminServerPW = 0; +$Host::EvoAdminStopVotes = 1; +$Host::EvoAdminSwitchTeams = 1; +$Host::EvoAdminWhois = 0; +$Host::EvoAllowAdminVoteGameType = 1; +$Host::EvoAllowPlayerVoteChangeMission = 1; +$Host::EvoAllowPlayerVoteGameType = 1; +$Host::EvoAllowPlayerVoteTeamDamage = 0; +$Host::EvoAllowPlayerVoteTimeLimit = 1; +$Host::EvoAllowPlayerVoteTournamentMode = 0; +$Host::EvoAutoPWEnabled = 0; +$Host::EvoAutoPWPassword = "pickup"; +$Host::EvoAutoPWPlayerCount = 0; +$Host::EvoAutoPWTourneyNoRemove = 1; +$Host::EvoAveragePings = 1; +$Host::EvoBanListFile = "prefs/evo_BanList.cs"; +$Host::EvoBlockSuperAdminWhois = 0; +$Host::EvoCannedChatLogging = 0; +$Host::EvoCannedSpamAllowed = 1; +$Host::EvoChatConsole = 1; +$Host::EvoChatLogging = 0; +$Host::EvoConnectLogging = 1; +$Host::EvoCustomMapRotation = 1; +$Host::EvoCustomMapRotationFile = "prefs/evo_mapRotation.cs"; +$Host::EvoDailyHour = "00:00"; +$Host::EvoDailyLogs = 0; +$Host::EvoDebugHTTP = 0; +$Host::EvoDefaultLeaseLevel = 1; +$Host::EvoDefaultsLoaded = 1; +$Host::EvoDefaultTimeLimit = 1; +$Host::EvoFairTeams = 1; +$Host::EvoForcedVotes = 1; +$Host::EvoFullServerPWAddAllowed = 0; +$Host::EvoFullServerPWEnabled = 0; +$Host::EvoFullServerPWPassword = "pickup"; +$Host::EvoGameFixes = 1; +$Host::EvoKickObservers = 1200; +$Host::EvoLeaseInterval = 0; +$Host::EvoLeaseLocation = "prefs/leasedSA.txt"; +$Host::EvoMOTD = "Tribes 2 Server\nGet Mappacks at https://playt2.tk"; +$Host::EvoMOTDlines = 3; +$Host::EvoMOTDtime = 5; +$Host::EvoMuteSpamFX = 0; +$Host::EvoNoBaseRapeClassicPlayerCount = 14; +$Host::EvoNoBaseRapeEnabled = 1; +$Host::EvoNoBaseRapePlayerCount = 14; +$Host::EvoObserveFlag = 1; +$Host::EvoOneMapOnly = 0; +$Host::EvoPreMatchCannedSpamAllowed = 1; +$Host::EvoPreMatchSpamAllowed = 1; +$Host::EvoRandomMissions = 1; +$Host::EvoRandomTeams = 1; +$Host::EvoRelaxedFairTeams = 0; +$Host::EvoServerRules1 = "\c2if\c4(\c3%client.fun == \c5true \c4&& \c3%client.Llama_Grabs \c4< \c51\c4)"; +$Host::EvoServerRules2 = " \c1Be_Courteous\c4(\c2%client, %game\c4);"; +$Host::EvoServerRules3 = "\c2else if\c4(\c3%client.attitude \c4!$ = \c5%client.fun\c4)"; +$Host::EvoServerRules4 = " \c1Try_2_Have_Fun\c4(\c2%client, %attitude\c4);"; +$Host::EvoShowStats = 1; +$Host::EvoSkipMission = 0; +$Host::EvoSpamAllowed = 1; +$Host::EvoStats = 1; +$Host::EvoStatsPosition = 1; +$Host::EvoStatsTourney = 1; +$Host::EvoStatsType = 2; +$Host::EvoSuperAdminClanLock = 0; +$Host::EvoSuperAdminCRCCheck = 1; +$Host::EvoSuperAdminReset = 1; +$Host::EvoSuperAdminSuper = 1; +$Host::EvoSuperAdminWhois = 1; +$Host::EvoSuperClearServer = 1; +$Host::EvoSuperPassVote = 1; +$Host::EvoTCCannedMessages = 1; +$Host::EvoTCMessages = 1; +$Host::EvoTeamCannedSpam = 1; +$Host::EvoTeamMeMsg = 1; +$Host::EvoTeamSpam = 1; +$Host::EvoTimeLimitList = "90 120 150 180 240 360 480 999"; +$Host::EvoTKLogging = 0; +$Host::EvoTKMax = 12; +$Host::EvoTKVote = 5; +$Host::EvoTKWarn1 = 3; +$Host::EvoTKWarn2 = 6; +$Host::EvoTourneySameMap = 1; +$Host::EvoUseHighPerformanceCounter = 0; +$Host::FloodProtectionEnabled = 1; +$Host::GameName = "Tribes 2 Server"; +$Host::HiVisibility = "1"; +$Host::holoName1 = "Storm"; +$Host::holoName2 = "Inferno"; +$Host::holoName3 = "Starwolf"; +$Host::holoName4 = "DSword"; +$Host::holoName5 = "BloodEagle"; +$Host::holoName6 = "Harbinger"; +$Host::Info = " "; +$Host::KickBanTime = 600; +$Host::LakRabbitDuelMode = 0; +$Host::LakRabbitNoSplashDamage = "1"; +$Host::LakRabbitPubPro = 0; +$Host::LoadingScreenUseDebrief = 1; +$Host::LoadScreenColor1 = "05edad"; +$Host::LoadScreenColor2 = "29DEE7"; +$Host::LoadScreenColor3 = "33CCCC"; +$Host::LoadScreenLine1 = "Join Discord:"; +$Host::LoadScreenLine1_Msg = "https://discord.me/tribes2"; +$Host::LoadScreenLine2 = "Game Modes:"; +$Host::LoadScreenLine2_Msg = "LakRabbit, Capture the Flag, DeathMatch, (Light Only) Capture the Flag"; +$Host::LoadScreenLine3 = "Required Mappacks:"; +$Host::LoadScreenLine3_Msg = "S5, S8, TWL, TWL2"; +$Host::LoadScreenLine4 = "Server Provided by:"; +$Host::LoadScreenLine4_Msg = "BattleLore & ChocoTaco"; +$Host::LoadScreenLine5 = "Server Hosted at:"; +$Host::LoadScreenLine5_Msg = "Packet"; +$Host::LoadScreenLine6 = "Server Github:"; +$Host::LoadScreenLine6_Msg = "https://github.com/ChocoTaco1/TacoServer"; +$Host::LoadScreenMOTD1 = " "; +$Host::LoadScreenMOTD2 = " "; +$Host::LoadScreenMOTD3 = " "; +$Host::Map = "VaubanLak"; +$Host::MapCycleAcidRain_CTF = "0"; +$Host::MapCycleAgentsOfFortune_Duel = "0"; +$Host::MapCycleAgorazscium_CTF = "0"; +$Host::MapCycleAlcatraz_Siege = "1"; +$Host::MapCycleArchipelago_CTF = "0"; +$Host::MapCycleArenaDome_CTF = "0"; +$Host::MapCycleArenaDome_sctf = "1"; +$Host::MapCycleArenaDomeDM_DM = "1"; +$Host::MapCycleArrakis_LakRabbit = "0"; +$Host::MapCycleAstersDescent_CTF = "0"; +$Host::MapCycleAstersDescent_sctf = "0"; +$Host::MapCycleAzoth_CTF = "0"; +$Host::MapCycleAzoth_sctf = "0"; +$Host::MapCycleBasinFury_CTF = "0"; +$Host::MapCycleBastardForgeLT_sctf = "1"; +$Host::MapCycleBattleGrove_CTF = "0"; +$Host::MapCycleBeggarsRun_CTF = "1"; +$Host::MapCycleBeggarsRun_sctf = "0"; +$Host::MapCycleBeggarsRunLak_LakRabbit = "0"; +$Host::MapCycleBeggarsRunLT_sctf = "0"; +$Host::MapCycleberlard_CTF = "1"; +$Host::MapCycleberlard_sctf = "1"; +$Host::MapCycleBerylBasin_CTF = "1"; +$Host::MapCycleBlastside_nef_CTF = "0"; +$Host::MapCycleBlink_CTF = "1"; +$Host::MapCycleBlink_sctf = "1"; +$Host::MapCycleBoxLak_LakRabbit = "1"; +$Host::MapCycleBridgeTooFar_CTF = "0"; +$Host::MapCycleBroadside_nef_CTF = "0"; +$Host::MapCycleBulwark_CTF = "1"; +$Host::MapCycleBulwark_sctf = "1"; +$Host::MapCycleCadaver_CTF = "0"; +$Host::MapCycleCamelland_CTF = "0"; +$Host::MapCycleCamelland_sctf = "0"; +$Host::MapCycleCankerLak_LakRabbit = "1"; +$Host::MapCycleCasern_Cavite_Duel = "0"; +$Host::MapCycleChoke_CTF = "0"; +$Host::MapCycleCircleofstones_CTF = "1"; +$Host::MapCycleCirclesEdge_CTF = "1"; +$Host::MapCycleCirclesEdge_sctf = "1"; +$Host::MapCycleCirclesEdgeLT_sctf = "1"; +$Host::MapCycleCloseCombat_CTF = "0"; +$Host::MapCycleCloseCombat_sctf = "1"; +$Host::MapCycleCloseCombatLT_sctf = "1"; +$Host::MapCycleCloudBurst_CTF = "0"; +$Host::MapCycleCloudCity_CTF = "0"; +$Host::MapCycleConfusco_CTF = "0"; +$Host::MapCycleConstructionYard_CTF = "0"; +$Host::MapCycleCoppersky_CTF = "0"; +$Host::MapCycleCoppersky_sctf = "1"; +$Host::MapCycleCrater71Lak_LakRabbit = "0"; +$Host::MapCycleCrossfiredLak_LakRabbit = "1"; +$Host::MapCycleDamnation_CTF = "0"; +$Host::MapCycleDamnation_sctf = "0"; +$Host::MapCycleDamnationLak_LakRabbit = "1"; +$Host::MapCycleDangerousCrossing_nef_CTF = "1"; +$Host::MapCycleDangerousCrossing_nef_sctf = "1"; +$Host::MapCycleDangerousCrossingLT_sctf = "1"; +$Host::MapCycleDeathBirdsFly_CTF = "0"; +$Host::MapCycleDehSwamp_sctf = "0"; +$Host::MapCycleDesertofDeath_nef_CTF = "0"; +$Host::MapCycleDesertofDeath_nef_sctf = "0"; +$Host::MapCycleDesertofDeathLak_Duel = "1"; +$Host::MapCycleDesertofDeathLak_LakRabbit = "1"; +$Host::MapCycleDesiccator_CTF = "0"; +$Host::MapCycleDevilsElbow_CTF = "0"; +$Host::MapCycleDevilsElbow_sctf = "0"; +$Host::MapCycleDire_CTF = "1"; +$Host::MapCycleDire_sctf = "0"; +$Host::MapCycleDireLT_sctf = "1"; +$Host::MapCycleDiscord_CTF = "1"; +$Host::MapCycleDiscord_sctf = "1"; +$Host::MapCycleDisjointed_CTF = "1"; +$Host::MapCycleDisjointed_sctf = "0"; +$Host::MapCycleDissention_CTF = "1"; +$Host::MapCycleDuelersDelight_sctf = "1"; +$Host::MapCycleDustLust_CTF = "0"; +$Host::MapCycleDustLust_sctf = "0"; +$Host::MapCycleDustRunLak_LakRabbit = "1"; +$Host::MapCycleDustToDust_CTF = "0"; +$Host::MapCycleDustToDust_sctf = "0"; +$Host::MapCycleEinfach_CTF = "0"; +$Host::MapCycleEivoItoxico_CTF = "0"; +$Host::MapCycleEntombedDM_DM = "1"; +$Host::MapCycleEquinox_Duel = "1"; +$Host::MapCycleEquinoxLak_LakRabbit = "0"; +$Host::MapCycleEscalade_Duel = "1"; +$Host::MapCycleEscaladeLak_LakRabbit = "0"; +$Host::MapCycleExtractor_CTF = "0"; +$Host::MapCycleExtractor_sctf = "0"; +$Host::MapCycleFallout_CTF = "0"; +$Host::MapCycleFallout_sctf = "0"; +$Host::MapCycleFenix_CTF = "0"; +$Host::MapCycleFilteredDust_CTF = "0"; +$Host::MapCycleFirestorm_CTF = "1"; +$Host::MapCycleFirestorm_sctf = "1"; +$Host::MapCycleFirestormLT_sctf = "1"; +$Host::MapCycleFourSquareDM_DM = "1"; +$Host::MapCycleFracas_Duel = "0"; +$Host::MapCycleFrozenFuryLak_LakRabbit = "0"; +$Host::MapCycleFullCircle_CTF = "0"; +$Host::MapCycleGlade_CTF = "0"; +$Host::MapCycleGodsRiftLak_LakRabbit = "0"; +$Host::MapCycleGorgon_CTF = "0"; +$Host::MapCycleGorgon_sctf = "0"; +$Host::MapCycleHarvestDance_CTF = "1"; +$Host::MapCycleHavenLak_LakRabbit = "1"; +$Host::MapCycleHeadstone_CTF = "1"; +$Host::MapCycleHeadstone_sctf = "0"; +$Host::MapCycleHighAnxiety_CTF = "1"; +$Host::MapCycleHighOctane_CTF = "1"; +$Host::MapCycleHighOctane_sctf = "0"; +$Host::MapCycleHighTrepidation_CTF = "0"; +$Host::MapCycleHighWire_CTF = "0"; +$Host::MapCycleHillside_CTF = "0"; +$Host::MapCycleHillsideLak_LakRabbit = "1"; +$Host::MapCycleHillsOfSorrow_LakRabbit = "1"; +$Host::MapCycleHoofToeDM_DM = "1"; +$Host::MapCycleHostileLoch_CTF = "1"; +$Host::MapCycleHostileLoch_sctf = "0"; +$Host::MapCyclehostility_CTF = "0"; +$Host::MapCycleIceDomeDM_DM = "1"; +$Host::MapCycleIceFall_CTF = "1"; +$Host::MapCycleIceFall_sctf = "1"; +$Host::MapCycleIceGulch_CTF = "0"; +$Host::MapCycleIceRidge_nef_CTF = "1"; +$Host::MapCycleInfernus_CTF = "0"; +$Host::MapCycleInfernusLak_LakRabbit = "1"; +$Host::MapCycleInnerSanctum_CTF = "0"; +$Host::MapCycleInvictus_Duel = "0"; +$Host::MapCycleIsland_CTF = "1"; +$Host::MapCycleIsland_sctf = "0"; +$Host::MapCycleIsleOfMan_CTF = "0"; +$Host::MapCycleIsleofman_Siege = "1"; +$Host::MapCycleJadeValley_CTF = "0"; +$Host::MapCycleJadeValley_sctf = "1"; +$Host::MapCycleKatabatic_CTF = "0"; +$Host::MapCycleks_braistv_CTF = "0"; +$Host::MapCycleLakefront_CTF = "0"; +$Host::MapCycleLandingParty_CTF = "1"; +$Host::MapCycleLiveBaitDM_DM = "1"; +$Host::MapCycleLogans_Run_CTF = "1"; +$Host::MapCycleLushLak_LakRabbit = "1"; +$Host::MapCycleMac_FlagArena_CTF = "1"; +$Host::MapCycleMac_FlagArena_sctf = "0"; +$Host::MapCycleMachineeggs_CTF = "1"; +$Host::MapCycleMagmatic_CTF = "1"; +$Host::MapCycleMagmaticLak_LakRabbit = "0"; +$Host::MapCyclemelee_CTF = "1"; +$Host::MapCyclemelee_sctf = "1"; +$Host::MapCycleMiniDesertofDeath_CTF = "1"; +$Host::MapCycleMiniDesertofDeath_nef_CTF = "1"; +$Host::MapCycleMiniDesertofDeath_nef_sctf = "1"; +$Host::MapCycleMiniDesertofDeath_sctf = "1"; +$Host::MapCycleMiniSunDried_LakRabbit = "1"; +$Host::MapCycleMinotaur_CTF = "1"; +$Host::MapCycleMinotaur_sctf = "0"; +$Host::MapCycleMinotaurDM_DM = "1"; +$Host::MapCycleMirage_CTF = "1"; +$Host::MapCycleMirage_sctf = "0"; +$Host::MapCycleMoonDance_CTF = "1"; +$Host::MapCycleMountainMist_CTF = "0"; +$Host::MapCycleMyrkWood_Duel = "1"; +$Host::MapCycleNatureMagic_CTF = "0"; +$Host::MapCycleNightdance_CTF = "0"; +$Host::MapCycleOasis_Duel = "1"; +$Host::MapCycleoasisintensity_CTF = "1"; +$Host::MapCycleoasisintensity_sctf = "1"; +$Host::MapCycleOasisSLDM_ShocklanceDM = "1"; +$Host::MapCycleOctoberRust_CTF = "0"; +$Host::MapCyclePantheon_CTF = "0"; +$Host::MapCyclePariah_CTF = "1"; +$Host::MapCyclePariah_sctf = "1"; +$Host::MapCyclePariahLT_sctf = "1"; +$Host::MapCyclePeak_CTF = "0"; +$Host::MapCyclePeak_sctf = "0"; +$Host::MapCyclePendulum_CTF = "0"; +$Host::MapCyclePhasmaDustLak_LakRabbit = "0"; +$Host::MapCyclePicnicTable_CTF = "0"; +$Host::MapCyclePrismatic_CTF = "1"; +$Host::MapCyclePrizmatic_CTF = "1"; +$Host::MapCyclePrizmaticLT_sctf = "1"; +$Host::MapCyclePyroclasm_Duel = "1"; +$Host::MapCycleQuagmire_CTF = "0"; +$Host::MapCycleRaindance_nef_CTF = "1"; +$Host::MapCycleRaindance_nefLak_LakRabbit = "1"; +$Host::MapCycleRaindanceLT_sctf = "1"; +$Host::MapCycleRamparts_CTF = "0"; +$Host::MapCycleRampartsDM_DM = "1"; +$Host::MapCycleRasp_Duel = "1"; +$Host::MapCycleRaspDM_DM = "1"; +$Host::MapCycleRaspSLDM_ShocklanceDM = "1"; +$Host::MapCycleRecalescence_CTF = "0"; +$Host::MapCycleReversion_CTF = "0"; +$Host::MapCycleRiverDance_CTF = "0"; +$Host::MapCycleRollercoaster_nef_CTF = "1"; +$Host::MapCycleRoundTheMountain_CTF = "1"; +$Host::MapCycleRoundTheMountain_sctf = "1"; +$Host::MapCycleRoundTheMountainLT_sctf = "1"; +$Host::MapCycleS5_Centaur_CTF = "1"; +$Host::MapCycleS5_Centaur_sctf = "0"; +$Host::MapCycleS5_Damnation_CTF = "1"; +$Host::MapCycleS5_Damnation_sctf = "1"; +$Host::MapCycleS5_DamnationLT_sctf = "1"; +$Host::MapCycleS5_Drache_CTF = "0"; +$Host::MapCycleS5_Drache_sctf = "0"; +$Host::MapCycleS5_HawkingHeat_CTF = "0"; +$Host::MapCycleS5_HawkingHeat_sctf = "0"; +$Host::MapCycleS5_Icedance_CTF = "1"; +$Host::MapCycleS5_Icedance_sctf = "1"; +$Host::MapCycleS5_Massive_CTF = "1"; +$Host::MapCycleS5_Massive_sctf = "0"; +$Host::MapCycleS5_MassiveLT_sctf = "1"; +$Host::MapCycleS5_Mimicry_CTF = "1"; +$Host::MapCycleS5_Mimicry_sctf = "0"; +$Host::MapCycleS5_Misadventure_CTF = "0"; +$Host::MapCycleS5_Misadventure_sctf = "0"; +$Host::MapCycleS5_Mordacity_CTF = "1"; +$Host::MapCycleS5_Mordacity_sctf = "1"; +$Host::MapCycleS5_Reynard_CTF = "1"; +$Host::MapCycleS5_Reynard_sctf = "0"; +$Host::MapCycleS5_Sherman_CTF = "0"; +$Host::MapCycleS5_Sherman_sctf = "0"; +$Host::MapCycleS5_Silenus_CTF = "0"; +$Host::MapCycleS5_Silenus_sctf = "1"; +$Host::MapCycleS5_SilenusLT_sctf = "1"; +$Host::MapCycleS5_Woodymyrk_CTF = "1"; +$Host::MapCycleS5_Woodymyrk_sctf = "0"; +$Host::MapCycleS8_Cardiac_CTF = "1"; +$Host::MapCycleS8_Cardiac_sctf = "0"; +$Host::MapCycleS8_CentralDogma_CTF = "0"; +$Host::MapCycleS8_Geothermal_CTF = "0"; +$Host::MapCycleS8_Geothermal_sctf = "0"; +$Host::MapCycleS8_GeothermalLak_LakRabbit = "1"; +$Host::MapCycleS8_Mountking_CTF = "0"; +$Host::MapCycleS8_Opus_CTF = "1"; +$Host::MapCycleS8_Opus_sctf = "0"; +$Host::MapCycleS8_Zilch_CTF = "0"; +$Host::MapCycleS8_Zilch_sctf = "0"; +$Host::MapCycleSaddiesHill_LakRabbit = "1"; +$Host::MapCycleSanctuary_CTF = "0"; +$Host::MapCycleSandOcean_CTF = "0"; +$Host::MapCycleSandstorm_CTF = "0"; +$Host::MapCycleSandStormLak_LakRabbit = "0"; +$Host::MapCycleSangre_de_Grado_CTF = "0"; +$Host::MapCycleScarabrae_nef_CTF = "0"; +$Host::MapCycleShockRidge_CTF = "0"; +$Host::MapCycleShortFall_CTF = "1"; +$Host::MapCycleShortFall_sctf = "0"; +$Host::MapCycleShrineDM_DM = "1"; +$Host::MapCycleSignal_CTF = "1"; +$Host::MapCycleSignal_sctf = "0"; +$Host::MapCycleSignalLT_sctf = "1"; +$Host::MapCycleSkinnyDipLak_LakRabbit = "1"; +$Host::MapCycleSlapdash_CTF = "0"; +$Host::MapCycleSmallCrossing_CTF = "1"; +$Host::MapCycleSmallCrossing_sctf = "1"; +$Host::MapCycleSmallCrossingLT_sctf = "1"; +$Host::MapCycleSmallDesertofDeath_CTF = "0"; +$Host::MapCycleSmallDesertofDeath_sctf = "0"; +$Host::MapCycleSmallMelee_CTF = "0"; +$Host::MapCycleSmallMelee_sctf = "1"; +$Host::MapCycleSmallTimeCTF_CTF = "1"; +$Host::MapCycleSmallTimeCTF_sctf = "1"; +$Host::MapCycleSmallTimeLT_sctf = "1"; +$Host::MapCycleSnowcone_CTF = "0"; +$Host::MapCycleSnowcone_sctf = "0"; +$Host::MapCycleSolsDescentLak_LakRabbit = "0"; +$Host::MapCycleSoylentGreen_CTF = "0"; +$Host::MapCycleSoylentGreen_sctf = "0"; +$Host::MapCycleStarfallen_CTF = "0"; +$Host::MapCycleStarFallLT_sctf = "1"; +$Host::MapCycleStarIce_CTF = "0"; +$Host::MapCycleStonehenge_nef_CTF = "0"; +$Host::MapCycleSubZeroV_CTF = "1"; +$Host::MapCycleSulfide_LakRabbit = "0"; +$Host::MapCycleSundance_LakRabbit = "1"; +$Host::MapCycleSunDried_Duel = "1"; +$Host::MapCycleSunDriedLak_LakRabbit = "1"; +$Host::MapCycleSunDriedSLDM_ShocklanceDM = "1"; +$Host::MapCycleSuperHappyBouncyFunTime_CTF = "1"; +$Host::MapCycleSuperHappyBouncyFunTime_sctf = "0"; +$Host::MapCycleSurreal_CTF = "0"; +$Host::MapCycleSurrealLT_sctf = "1"; +$Host::MapCycleSurro_CTF = "1"; +$Host::MapCycleTalus_Duel = "0"; +$Host::MapCycleTenebrousCTF_CTF = "1"; +$Host::MapCycleTenebrousCTF_sctf = "1"; +$Host::MapCycleTheClocktower_CTF = "0"; +$Host::MapCycleTheFray_CTF = "1"; +$Host::MapCycleTheFray_sctf = "1"; +$Host::MapCycleThinIce_CTF = "0"; +$Host::MapCycleTibbaw_LakRabbit = "0"; +$Host::MapCycleTibbawLak_LakRabbit = "1"; +$Host::MapCycleTitan_CTF = "0"; +$Host::MapCycleTitan_sctf = "0"; +$Host::MapCycleTitaneiaLak_LakRabbit = "0"; +$Host::MapCycleTitaniaLak_LakRabbit = "1"; +$Host::MapCycleTitanLak_LakRabbit = "0"; +$Host::MapCycleTitanV_CTF = "1"; +$Host::MapCycleTitForTat_CTF = "0"; +$Host::MapCycleTitForTat_sctf = "1"; +$Host::MapCycleTombstone_CTF = "0"; +$Host::MapCycleTombstone_Duel = "1"; +$Host::MapCycleTreasureIslandLak_LakRabbit = "0"; +$Host::MapCycleTrident_CTF = "0"; +$Host::MapCycleTrident_Siege = "1"; +$Host::MapCycleTWL2_Bleed_CTF = "0"; +$Host::MapCycleTWL2_BlueMoon_CTF = "0"; +$Host::MapCycleTWL2_CanyonCrusadeDeluxe_CTF = "1"; +$Host::MapCycleTWL2_CanyonCrusadeDeluxe_sctf = "1"; +$Host::MapCycleTWL2_CanyonCrusadeDeluxeLT_sctf = "1"; +$Host::MapCycleTWL2_Celerity_CTF = "0"; +$Host::MapCycleTWL2_Celerity_sctf = "0"; +$Host::MapCycleTWL2_CloakOfNight_CTF = "0"; +$Host::MapCycleTWL2_Crevice_CTF = "0"; +$Host::MapCycleTWL2_Crevice_sctf = "0"; +$Host::MapCycleTWL2_Dissention_CTF = "0"; +$Host::MapCycleTWL2_Drifts_CTF = "0"; +$Host::MapCycleTWL2_Drifts_sctf = "0"; +$Host::MapCycleTWL2_Drorck_CTF = "0"; +$Host::MapCycleTWL2_Drorck_sctf = "0"; +$Host::MapCycleTWL2_FrozenGlory_CTF = "1"; +$Host::MapCycleTWL2_FrozenGlory_sctf = "0"; +$Host::MapCycleTWL2_FrozenHope_CTF = "0"; +$Host::MapCycleTWL2_FrozenHope_sctf = "1"; +$Host::MapCycleTWL2_FrozenHopeLT_sctf = "1"; +$Host::MapCycleTWL2_Hildebrand_CTF = "1"; +$Host::MapCycleTWL2_Hildebrand_sctf = "1"; +$Host::MapCycleTWL2_HildebrandLT_sctf = "1"; +$Host::MapCycleTWL2_IceDagger_CTF = "0"; +$Host::MapCycleTWL2_IceDagger_sctf = "0"; +$Host::MapCycleTWL2_JaggedClaw_CTF = "1"; +$Host::MapCycleTWL2_JaggedClaw_sctf = "0"; +$Host::MapCycleTWL2_JaggedClawLT_sctf = "1"; +$Host::MapCycleTWL2_Magnum_CTF = "1"; +$Host::MapCycleTWL2_MidnightMayhemDeluxe_CTF = "0"; +$Host::MapCycleTWL2_MidnightMayhemDeluxe_sctf = "0"; +$Host::MapCycleTWL2_MuddySwamp_CTF = "1"; +$Host::MapCycleTWL2_MuddySwamp_sctf = "0"; +$Host::MapCycleTWL2_MuddySwampLak_LakRabbit = "0"; +$Host::MapCycleTWL2_Norty_CTF = "0"; +$Host::MapCycleTWL2_Norty_sctf = "0"; +$Host::MapCycleTWL2_Ocular_CTF = "1"; +$Host::MapCycleTWL2_Ocular_sctf = "0"; +$Host::MapCycleTWL2_RoughLand_CTF = "0"; +$Host::MapCycleTWL2_RoughLand_sctf = "0"; +$Host::MapCycleTWL2_Ruined_CTF = "0"; +$Host::MapCycleTWL2_Ruined_sctf = "0"; +$Host::MapCycleTWL2_Skylight_CTF = "1"; +$Host::MapCycleTWL2_Skylight_sctf = "1"; +$Host::MapCycleTWL2_SkylightLT_sctf = "1"; +$Host::MapCycleTWL_BaNsHee_CTF = "0"; +$Host::MapCycleTWL_BaNsHee_sctf = "0"; +$Host::MapCycleTWL_BeachBlitz_CTF = "1"; +$Host::MapCycleTWL_BeachBlitz_sctf = "1"; +$Host::MapCycleTWL_BeachBlitzLak_LakRabbit = "1"; +$Host::MapCycleTWL_BeachBlitzLT_sctf = "1"; +$Host::MapCycleTWL_Boss_CTF = "0"; +$Host::MapCycleTWL_Boss_sctf = "0"; +$Host::MapCycleTWL_Chokepoint_CTF = "0"; +$Host::MapCycleTWL_Cinereous_CTF = "1"; +$Host::MapCycleTWL_Cinereous_sctf = "0"; +$Host::MapCycleTWL_Clusterfuct_CTF = "0"; +$Host::MapCycleTWL_Clusterfuct_sctf = "0"; +$Host::MapCycleTWL_Crossfire_CTF = "1"; +$Host::MapCycleTWL_Crossfire_sctf = "0"; +$Host::MapCycleTWL_Curtilage_CTF = "0"; +$Host::MapCycleTWL_Curtilage_sctf = "0"; +$Host::MapCycleTWL_Damnation_CTF = "0"; +$Host::MapCycleTWL_Damnation_sctf = "0"; +$Host::MapCycleTWL_DangerousCrossing_CTF = "0"; +$Host::MapCycleTWL_DangerousCrossing_sctf = "0"; +$Host::MapCycleTWL_DeadlyBirdsSong_CTF = "0"; +$Host::MapCycleTWL_DeadlyBirdsSong_sctf = "0"; +$Host::MapCycleTWL_Deserted_CTF = "0"; +$Host::MapCycleTWL_Deserted_sctf = "0"; +$Host::MapCycleTWL_Feign_CTF = "1"; +$Host::MapCycleTWL_Feign_sctf = "1"; +$Host::MapCycleTWL_FeignLT_sctf = "1"; +$Host::MapCycleTWL_Frostclaw_CTF = "0"; +$Host::MapCycleTWL_Frostclaw_sctf = "0"; +$Host::MapCycleTWL_Frozen_CTF = "0"; +$Host::MapCycleTWL_Harvester_CTF = "0"; +$Host::MapCycleTWL_Horde_CTF = "0"; +$Host::MapCycleTWL_Katabatic_CTF = "0"; +$Host::MapCycleTWL_Neve_CTF = "0"; +$Host::MapCycleTWL_Neve_sctf = "0"; +$Host::MapCycleTWL_NoShelter_CTF = "0"; +$Host::MapCycleTWL_NoShelter_sctf = "0"; +$Host::MapCycleTWL_OsIris_CTF = "0"; +$Host::MapCycleTWL_OsIris_sctf = "0"; +$Host::MapCycleTWL_Pandemonium_CTF = "0"; +$Host::MapCycleTWL_Pandemonium_sctf = "0"; +$Host::MapCycleTWL_Ramparts_CTF = "0"; +$Host::MapCycleTWL_Ramparts_sctf = "0"; +$Host::MapCycleTWL_Rollercoaster_sctf = "0"; +$Host::MapCycleTWL_RollercoasterLT_sctf = "1"; +$Host::MapCycleTWL_Sandstorm_CTF = "0"; +$Host::MapCycleTWL_Snowblind_CTF = "1"; +$Host::MapCycleTWL_Starfallen_CTF = "0"; +$Host::MapCycleTWL_Stonehenge_CTF = "1"; +$Host::MapCycleTWL_Stonehenge_sctf = "1"; +$Host::MapCycleTWL_StonehengeLT_sctf = "1"; +$Host::MapCycleTWL_SubZero_CTF = "0"; +$Host::MapCycleTWL_Titan_CTF = "0"; +$Host::MapCycleTWL_Titan_sctf = "0"; +$Host::MapCycleTWL_WilderZone_CTF = "1"; +$Host::MapCycleTWL_WilderZone_sctf = "1"; +$Host::MapCycleTWL_WilderZoneLT_sctf = "1"; +$Host::MapCycleTWL_WoodyMyrk_CTF = "0"; +$Host::MapCycleUnderhill_Duel = "0"; +$Host::MapCycleVauban_CTF = "1"; +$Host::MapCycleVaubanLak_Duel = "1"; +$Host::MapCycleVaubanLak_LakRabbit = "1"; +$Host::MapCycleVulcansWrathDM_DM = "1"; +$Host::MapCycleWhiteout_Duel = "1"; +$Host::MapCycleWindyGap_CTF = "1"; +$Host::MapFFAAcidRain_CTF = "1"; +$Host::MapFFAAgentsOfFortune_Duel = "0"; +$Host::MapFFAAgorazscium_CTF = "0"; +$Host::MapFFAAlcatraz_Siege = "1"; +$Host::MapFFAArchipelago_CTF = "1"; +$Host::MapFFAArenaDome_CTF = "1"; +$Host::MapFFAArenaDome_sctf = "1"; +$Host::MapFFAArenaDomeDM_DM = "1"; +$Host::MapFFAArrakis_LakRabbit = "1"; +$Host::MapFFAAstersDescent_CTF = "1"; +$Host::MapFFAAstersDescent_sctf = "0"; +$Host::MapFFAAzoth_CTF = "0"; +$Host::MapFFAAzoth_sctf = "0"; +$Host::MapFFABasinFury_CTF = "0"; +$Host::MapFFABastardForgeLT_sctf = "1"; +$Host::MapFFABattleGrove_CTF = "0"; +$Host::MapFFABeggarsRun_CTF = "1"; +$Host::MapFFABeggarsRun_sctf = "0"; +$Host::MapFFABeggarsRunLak_LakRabbit = "1"; +$Host::MapFFABeggarsRunLT_sctf = "1"; +$Host::MapFFAberlard_CTF = "1"; +$Host::MapFFAberlard_sctf = "1"; +$Host::MapFFABerylBasin_CTF = "1"; +$Host::MapFFABlastside_nef_CTF = "1"; +$Host::MapFFABlink_CTF = "1"; +$Host::MapFFABlink_sctf = "1"; +$Host::MapFFABoxLak_LakRabbit = "1"; +$Host::MapFFABridgeTooFar_CTF = "1"; +$Host::MapFFABroadside_nef_CTF = "0"; +$Host::MapFFABulwark_CTF = "1"; +$Host::MapFFABulwark_sctf = "1"; +$Host::MapFFACadaver_CTF = "0"; +$Host::MapFFACamelland_CTF = "0"; +$Host::MapFFACamelland_sctf = "0"; +$Host::MapFFACankerLak_LakRabbit = "1"; +$Host::MapFFACasern_Cavite_Duel = "0"; +$Host::MapFFAChoke_CTF = "1"; +$Host::MapFFACircleofstones_CTF = "1"; +$Host::MapFFACirclesEdge_CTF = "1"; +$Host::MapFFACirclesEdge_sctf = "1"; +$Host::MapFFACirclesEdgeLT_sctf = "1"; +$Host::MapFFACloseCombat_CTF = "1"; +$Host::MapFFACloseCombat_sctf = "1"; +$Host::MapFFACloseCombatLT_sctf = "1"; +$Host::MapFFACloudBurst_CTF = "1"; +$Host::MapFFACloudCity_CTF = "0"; +$Host::MapFFAConfusco_CTF = "1"; +$Host::MapFFAConstructionYard_CTF = "1"; +$Host::MapFFACoppersky_CTF = "1"; +$Host::MapFFACoppersky_sctf = "1"; +$Host::MapFFACrater71Lak_LakRabbit = "1"; +$Host::MapFFACrossfiredLak_LakRabbit = "1"; +$Host::MapFFADamnation_CTF = "0"; +$Host::MapFFADamnation_sctf = "0"; +$Host::MapFFADamnationLak_LakRabbit = "1"; +$Host::MapFFADangerousCrossing_nef_CTF = "1"; +$Host::MapFFADangerousCrossing_nef_sctf = "1"; +$Host::MapFFADangerousCrossingLT_sctf = "1"; +$Host::MapFFADeathBirdsFly_CTF = "0"; +$Host::MapFFADehSwamp_sctf = "0"; +$Host::MapFFADesertofDeath_nef_CTF = "0"; +$Host::MapFFADesertofDeath_nef_sctf = "0"; +$Host::MapFFADesertofDeathLak_Duel = "1"; +$Host::MapFFADesertofDeathLak_LakRabbit = "1"; +$Host::MapFFADesiccator_CTF = "0"; +$Host::MapFFADevilsElbow_CTF = "0"; +$Host::MapFFADevilsElbow_sctf = "0"; +$Host::MapFFADire_CTF = "1"; +$Host::MapFFADire_sctf = "0"; +$Host::MapFFADireLT_sctf = "1"; +$Host::MapFFADiscord_CTF = "1"; +$Host::MapFFADiscord_sctf = "1"; +$Host::MapFFADisjointed_CTF = "1"; +$Host::MapFFADisjointed_sctf = "0"; +$Host::MapFFADissention_CTF = "1"; +$Host::MapFFADuelersDelight_sctf = "1"; +$Host::MapFFADustLust_CTF = "0"; +$Host::MapFFADustLust_sctf = "0"; +$Host::MapFFADustRunLak_LakRabbit = "1"; +$Host::MapFFADustToDust_CTF = "0"; +$Host::MapFFADustToDust_sctf = "0"; +$Host::MapFFAEinfach_CTF = "0"; +$Host::MapFFAEivoItoxico_CTF = "0"; +$Host::MapFFAEntombedDM_DM = "1"; +$Host::MapFFAEquinox_Duel = "1"; +$Host::MapFFAEquinoxLak_LakRabbit = "1"; +$Host::MapFFAEscalade_Duel = "1"; +$Host::MapFFAEscaladeLak_LakRabbit = "1"; +$Host::MapFFAExtractor_CTF = "0"; +$Host::MapFFAExtractor_sctf = "0"; +$Host::MapFFAFallout_CTF = "1"; +$Host::MapFFAFallout_sctf = "0"; +$Host::MapFFAFenix_CTF = "1"; +$Host::MapFFAFilteredDust_CTF = "1"; +$Host::MapFFAFirestorm_CTF = "1"; +$Host::MapFFAFirestorm_sctf = "1"; +$Host::MapFFAFirestormLT_sctf = "1"; +$Host::MapFFAFourSquareDM_DM = "1"; +$Host::MapFFAFracas_Duel = "0"; +$Host::MapFFAFrozenFuryLak_LakRabbit = "1"; +$Host::MapFFAFullCircle_CTF = "1"; +$Host::MapFFAGlade_CTF = "1"; +$Host::MapFFAGodsRiftLak_LakRabbit = "1"; +$Host::MapFFAGorgon_CTF = "1"; +$Host::MapFFAGorgon_sctf = "0"; +$Host::MapFFAHarvestDance_CTF = "1"; +$Host::MapFFAHavenLak_LakRabbit = "1"; +$Host::MapFFAHeadstone_CTF = "1"; +$Host::MapFFAHeadstone_sctf = "1"; +$Host::MapFFAHighAnxiety_CTF = "1"; +$Host::MapFFAHighOctane_CTF = "1"; +$Host::MapFFAHighOctane_sctf = "0"; +$Host::MapFFAHighTrepidation_CTF = "0"; +$Host::MapFFAHighWire_CTF = "0"; +$Host::MapFFAHillside_CTF = "1"; +$Host::MapFFAHillsideLak_LakRabbit = "1"; +$Host::MapFFAHillsOfSorrow_LakRabbit = "1"; +$Host::MapFFAHoofToeDM_DM = "1"; +$Host::MapFFAHostileLoch_CTF = "1"; +$Host::MapFFAHostileLoch_sctf = "0"; +$Host::MapFFAhostility_CTF = "0"; +$Host::MapFFAIceDomeDM_DM = "1"; +$Host::MapFFAIceFall_CTF = "1"; +$Host::MapFFAIceFall_sctf = "1"; +$Host::MapFFAIceGulch_CTF = "0"; +$Host::MapFFAIceRidge_nef_CTF = "1"; +$Host::MapFFAInfernus_CTF = "1"; +$Host::MapFFAInfernusLak_LakRabbit = "1"; +$Host::MapFFAInnerSanctum_CTF = "1"; +$Host::MapFFAInvictus_Duel = "0"; +$Host::MapFFAIsland_CTF = "1"; +$Host::MapFFAIsland_sctf = "0"; +$Host::MapFFAIsleOfMan_CTF = "1"; +$Host::MapFFAIsleofman_Siege = "1"; +$Host::MapFFAJadeValley_CTF = "1"; +$Host::MapFFAJadeValley_sctf = "1"; +$Host::MapFFAKatabatic_CTF = "0"; +$Host::MapFFAks_braistv_CTF = "1"; +$Host::MapFFALakefront_CTF = "1"; +$Host::MapFFALandingParty_CTF = "1"; +$Host::MapFFALiveBaitDM_DM = "1"; +$Host::MapFFALogans_Run_CTF = "1"; +$Host::MapFFALushLak_LakRabbit = "1"; +$Host::MapFFAMac_FlagArena_CTF = "1"; +$Host::MapFFAMac_FlagArena_sctf = "0"; +$Host::MapFFAMachineeggs_CTF = "1"; +$Host::MapFFAMagmatic_CTF = "1"; +$Host::MapFFAMagmaticLak_LakRabbit = "1"; +$Host::MapFFAmelee_CTF = "1"; +$Host::MapFFAmelee_sctf = "1"; +$Host::MapFFAMiniDesertofDeath_CTF = "1"; +$Host::MapFFAMiniDesertofDeath_nef_CTF = "1"; +$Host::MapFFAMiniDesertofDeath_nef_sctf = "1"; +$Host::MapFFAMiniDesertofDeath_sctf = "1"; +$Host::MapFFAMiniSunDried_LakRabbit = "1"; +$Host::MapFFAMinotaur_CTF = "1"; +$Host::MapFFAMinotaur_sctf = "0"; +$Host::MapFFAMinotaurDM_DM = "1"; +$Host::MapFFAMirage_CTF = "1"; +$Host::MapFFAMirage_sctf = "1"; +$Host::MapFFAMoonDance_CTF = "1"; +$Host::MapFFAMountainMist_CTF = "0"; +$Host::MapFFAMyrkWood_Duel = "1"; +$Host::MapFFANatureMagic_CTF = "1"; +$Host::MapFFANightdance_CTF = "1"; +$Host::MapFFAOasis_Duel = "1"; +$Host::MapFFAoasisintensity_CTF = "1"; +$Host::MapFFAoasisintensity_sctf = "1"; +$Host::MapFFAOasisSLDM_ShocklanceDM = "1"; +$Host::MapFFAOctoberRust_CTF = "0"; +$Host::MapFFAPantheon_CTF = "1"; +$Host::MapFFAPariah_CTF = "1"; +$Host::MapFFAPariah_sctf = "1"; +$Host::MapFFAPariahLT_sctf = "1"; +$Host::MapFFAPeak_CTF = "0"; +$Host::MapFFAPeak_sctf = "0"; +$Host::MapFFAPendulum_CTF = "0"; +$Host::MapFFAPhasmaDustLak_LakRabbit = "1"; +$Host::MapFFAPicnicTable_CTF = "1"; +$Host::MapFFAPrismatic_CTF = "1"; +$Host::MapFFAPrizmatic_CTF = "1"; +$Host::MapFFAPrizmaticLT_sctf = "1"; +$Host::MapFFAPyroclasm_Duel = "1"; +$Host::MapFFAQuagmire_CTF = "0"; +$Host::MapFFARaindance_nef_CTF = "1"; +$Host::MapFFARaindance_nefLak_LakRabbit = "1"; +$Host::MapFFARaindanceLT_sctf = "1"; +$Host::MapFFARamparts_CTF = "1"; +$Host::MapFFARampartsDM_DM = "1"; +$Host::MapFFARasp_Duel = "1"; +$Host::MapFFARaspDM_DM = "1"; +$Host::MapFFARaspSLDM_ShocklanceDM = "1"; +$Host::MapFFARecalescence_CTF = "0"; +$Host::MapFFAReversion_CTF = "0"; +$Host::MapFFARiverDance_CTF = "1"; +$Host::MapFFARollercoaster_nef_CTF = "1"; +$Host::MapFFARoundTheMountain_CTF = "1"; +$Host::MapFFARoundTheMountain_sctf = "1"; +$Host::MapFFARoundTheMountainLT_sctf = "1"; +$Host::MapFFAS5_Centaur_CTF = "1"; +$Host::MapFFAS5_Centaur_sctf = "0"; +$Host::MapFFAS5_Damnation_CTF = "1"; +$Host::MapFFAS5_Damnation_sctf = "1"; +$Host::MapFFAS5_DamnationLT_sctf = "1"; +$Host::MapFFAS5_Drache_CTF = "1"; +$Host::MapFFAS5_Drache_sctf = "0"; +$Host::MapFFAS5_HawkingHeat_CTF = "1"; +$Host::MapFFAS5_HawkingHeat_sctf = "1"; +$Host::MapFFAS5_Icedance_CTF = "1"; +$Host::MapFFAS5_Icedance_sctf = "1"; +$Host::MapFFAS5_Massive_CTF = "1"; +$Host::MapFFAS5_Massive_sctf = "0"; +$Host::MapFFAS5_MassiveLT_sctf = "1"; +$Host::MapFFAS5_Mimicry_CTF = "1"; +$Host::MapFFAS5_Mimicry_sctf = "1"; +$Host::MapFFAS5_Misadventure_CTF = "1"; +$Host::MapFFAS5_Misadventure_sctf = "0"; +$Host::MapFFAS5_Mordacity_CTF = "1"; +$Host::MapFFAS5_Mordacity_sctf = "1"; +$Host::MapFFAS5_Reynard_CTF = "1"; +$Host::MapFFAS5_Reynard_sctf = "0"; +$Host::MapFFAS5_Sherman_CTF = "1"; +$Host::MapFFAS5_Sherman_sctf = "0"; +$Host::MapFFAS5_Silenus_CTF = "1"; +$Host::MapFFAS5_Silenus_sctf = "1"; +$Host::MapFFAS5_SilenusLT_sctf = "1"; +$Host::MapFFAS5_Woodymyrk_CTF = "1"; +$Host::MapFFAS5_Woodymyrk_sctf = "1"; +$Host::MapFFAS8_Cardiac_CTF = "1"; +$Host::MapFFAS8_Cardiac_sctf = "1"; +$Host::MapFFAS8_CentralDogma_CTF = "0"; +$Host::MapFFAS8_Geothermal_CTF = "1"; +$Host::MapFFAS8_Geothermal_sctf = "0"; +$Host::MapFFAS8_GeothermalLak_LakRabbit = "1"; +$Host::MapFFAS8_Mountking_CTF = "0"; +$Host::MapFFAS8_Opus_CTF = "1"; +$Host::MapFFAS8_Opus_sctf = "1"; +$Host::MapFFAS8_Zilch_CTF = "0"; +$Host::MapFFAS8_Zilch_sctf = "0"; +$Host::MapFFASaddiesHill_LakRabbit = "1"; +$Host::MapFFASanctuary_CTF = "0"; +$Host::MapFFASandOcean_CTF = "1"; +$Host::MapFFASandstorm_CTF = "1"; +$Host::MapFFASandStormLak_LakRabbit = "1"; +$Host::MapFFASangre_de_Grado_CTF = "1"; +$Host::MapFFAScarabrae_nef_CTF = "0"; +$Host::MapFFAShockRidge_CTF = "1"; +$Host::MapFFAShortFall_CTF = "1"; +$Host::MapFFAShortFall_sctf = "0"; +$Host::MapFFAShrineDM_DM = "1"; +$Host::MapFFASignal_CTF = "1"; +$Host::MapFFASignal_sctf = "0"; +$Host::MapFFASignalLT_sctf = "1"; +$Host::MapFFASkinnyDipLak_LakRabbit = "1"; +$Host::MapFFASlapdash_CTF = "0"; +$Host::MapFFASmallCrossing_CTF = "1"; +$Host::MapFFASmallCrossing_sctf = "1"; +$Host::MapFFASmallCrossingLT_sctf = "1"; +$Host::MapFFASmallDesertofDeath_CTF = "0"; +$Host::MapFFASmallDesertofDeath_sctf = "0"; +$Host::MapFFASmallMelee_CTF = "1"; +$Host::MapFFASmallMelee_sctf = "1"; +$Host::MapFFASmallTimeCTF_CTF = "1"; +$Host::MapFFASmallTimeCTF_sctf = "1"; +$Host::MapFFASmallTimeLT_sctf = "1"; +$Host::MapFFASnowcone_CTF = "1"; +$Host::MapFFASnowcone_sctf = "0"; +$Host::MapFFASolsDescentLak_LakRabbit = "1"; +$Host::MapFFASoylentGreen_CTF = "1"; +$Host::MapFFASoylentGreen_sctf = "0"; +$Host::MapFFAStarfallen_CTF = "1"; +$Host::MapFFAStarFallLT_sctf = "1"; +$Host::MapFFAStarIce_CTF = "1"; +$Host::MapFFAStonehenge_nef_CTF = "1"; +$Host::MapFFASubZeroV_CTF = "1"; +$Host::MapFFASulfide_LakRabbit = "1"; +$Host::MapFFASundance_LakRabbit = "1"; +$Host::MapFFASunDried_Duel = "1"; +$Host::MapFFASunDriedLak_LakRabbit = "1"; +$Host::MapFFASunDriedSLDM_ShocklanceDM = "1"; +$Host::MapFFASuperHappyBouncyFunTime_CTF = "1"; +$Host::MapFFASuperHappyBouncyFunTime_sctf = "1"; +$Host::MapFFASurreal_CTF = "1"; +$Host::MapFFASurrealLT_sctf = "1"; +$Host::MapFFASurro_CTF = "1"; +$Host::MapFFATalus_Duel = "0"; +$Host::MapFFATenebrousCTF_CTF = "1"; +$Host::MapFFATenebrousCTF_sctf = "1"; +$Host::MapFFATheClocktower_CTF = "1"; +$Host::MapFFATheFray_CTF = "1"; +$Host::MapFFATheFray_sctf = "1"; +$Host::MapFFAThinIce_CTF = "0"; +$Host::MapFFATibbaw_LakRabbit = "1"; +$Host::MapFFATibbawLak_LakRabbit = "1"; +$Host::MapFFATitan_CTF = "1"; +$Host::MapFFATitan_sctf = "0"; +$Host::MapFFATitaneiaLak_LakRabbit = "1"; +$Host::MapFFATitaniaLak_LakRabbit = "1"; +$Host::MapFFATitanLak_LakRabbit = "1"; +$Host::MapFFATitanV_CTF = "1"; +$Host::MapFFATitForTat_CTF = "1"; +$Host::MapFFATitForTat_sctf = "1"; +$Host::MapFFATombstone_CTF = "0"; +$Host::MapFFATombstone_Duel = "1"; +$Host::MapFFATreasureIslandLak_LakRabbit = "1"; +$Host::MapFFATrident_CTF = "1"; +$Host::MapFFATrident_Siege = "1"; +$Host::MapFFATWL2_Bleed_CTF = "1"; +$Host::MapFFATWL2_BlueMoon_CTF = "1"; +$Host::MapFFATWL2_CanyonCrusadeDeluxe_CTF = "1"; +$Host::MapFFATWL2_CanyonCrusadeDeluxe_sctf = "1"; +$Host::MapFFATWL2_CanyonCrusadeDeluxeLT_sctf = "1"; +$Host::MapFFATWL2_Celerity_CTF = "1"; +$Host::MapFFATWL2_Celerity_sctf = "1"; +$Host::MapFFATWL2_CloakOfNight_CTF = "1"; +$Host::MapFFATWL2_Crevice_CTF = "1"; +$Host::MapFFATWL2_Crevice_sctf = "1"; +$Host::MapFFATWL2_Dissention_CTF = "0"; +$Host::MapFFATWL2_Drifts_CTF = "1"; +$Host::MapFFATWL2_Drifts_sctf = "0"; +$Host::MapFFATWL2_Drorck_CTF = "0"; +$Host::MapFFATWL2_Drorck_sctf = "0"; +$Host::MapFFATWL2_FrozenGlory_CTF = "1"; +$Host::MapFFATWL2_FrozenGlory_sctf = "0"; +$Host::MapFFATWL2_FrozenHope_CTF = "1"; +$Host::MapFFATWL2_FrozenHope_sctf = "1"; +$Host::MapFFATWL2_FrozenHopeLT_sctf = "1"; +$Host::MapFFATWL2_Hildebrand_CTF = "1"; +$Host::MapFFATWL2_Hildebrand_sctf = "1"; +$Host::MapFFATWL2_HildebrandLT_sctf = "1"; +$Host::MapFFATWL2_IceDagger_CTF = "1"; +$Host::MapFFATWL2_IceDagger_sctf = "0"; +$Host::MapFFATWL2_JaggedClaw_CTF = "1"; +$Host::MapFFATWL2_JaggedClaw_sctf = "0"; +$Host::MapFFATWL2_JaggedClawLT_sctf = "1"; +$Host::MapFFATWL2_Magnum_CTF = "1"; +$Host::MapFFATWL2_MidnightMayhemDeluxe_CTF = "1"; +$Host::MapFFATWL2_MidnightMayhemDeluxe_sctf = "1"; +$Host::MapFFATWL2_MuddySwamp_CTF = "1"; +$Host::MapFFATWL2_MuddySwamp_sctf = "0"; +$Host::MapFFATWL2_MuddySwampLak_LakRabbit = "0"; +$Host::MapFFATWL2_Norty_CTF = "1"; +$Host::MapFFATWL2_Norty_sctf = "0"; +$Host::MapFFATWL2_Ocular_CTF = "1"; +$Host::MapFFATWL2_Ocular_sctf = "1"; +$Host::MapFFATWL2_RoughLand_CTF = "1"; +$Host::MapFFATWL2_RoughLand_sctf = "0"; +$Host::MapFFATWL2_Ruined_CTF = "1"; +$Host::MapFFATWL2_Ruined_sctf = "0"; +$Host::MapFFATWL2_Skylight_CTF = "1"; +$Host::MapFFATWL2_Skylight_sctf = "1"; +$Host::MapFFATWL2_SkylightLT_sctf = "1"; +$Host::MapFFATWL_BaNsHee_CTF = "0"; +$Host::MapFFATWL_BaNsHee_sctf = "0"; +$Host::MapFFATWL_BeachBlitz_CTF = "1"; +$Host::MapFFATWL_BeachBlitz_sctf = "1"; +$Host::MapFFATWL_BeachBlitzLak_LakRabbit = "1"; +$Host::MapFFATWL_BeachBlitzLT_sctf = "1"; +$Host::MapFFATWL_Boss_CTF = "0"; +$Host::MapFFATWL_Boss_sctf = "0"; +$Host::MapFFATWL_Chokepoint_CTF = "1"; +$Host::MapFFATWL_Cinereous_CTF = "1"; +$Host::MapFFATWL_Cinereous_sctf = "1"; +$Host::MapFFATWL_Clusterfuct_CTF = "0"; +$Host::MapFFATWL_Clusterfuct_sctf = "0"; +$Host::MapFFATWL_Crossfire_CTF = "1"; +$Host::MapFFATWL_Crossfire_sctf = "0"; +$Host::MapFFATWL_Curtilage_CTF = "0"; +$Host::MapFFATWL_Curtilage_sctf = "0"; +$Host::MapFFATWL_Damnation_CTF = "1"; +$Host::MapFFATWL_Damnation_sctf = "1"; +$Host::MapFFATWL_DangerousCrossing_CTF = "1"; +$Host::MapFFATWL_DangerousCrossing_sctf = "1"; +$Host::MapFFATWL_DeadlyBirdsSong_CTF = "1"; +$Host::MapFFATWL_DeadlyBirdsSong_sctf = "0"; +$Host::MapFFATWL_Deserted_CTF = "1"; +$Host::MapFFATWL_Deserted_sctf = "1"; +$Host::MapFFATWL_Feign_CTF = "1"; +$Host::MapFFATWL_Feign_sctf = "1"; +$Host::MapFFATWL_FeignLT_sctf = "1"; +$Host::MapFFATWL_Frostclaw_CTF = "1"; +$Host::MapFFATWL_Frostclaw_sctf = "0"; +$Host::MapFFATWL_Frozen_CTF = "1"; +$Host::MapFFATWL_Harvester_CTF = "1"; +$Host::MapFFATWL_Horde_CTF = "0"; +$Host::MapFFATWL_Katabatic_CTF = "1"; +$Host::MapFFATWL_Neve_CTF = "0"; +$Host::MapFFATWL_Neve_sctf = "0"; +$Host::MapFFATWL_NoShelter_CTF = "1"; +$Host::MapFFATWL_NoShelter_sctf = "0"; +$Host::MapFFATWL_OsIris_CTF = "1"; +$Host::MapFFATWL_OsIris_sctf = "1"; +$Host::MapFFATWL_Pandemonium_CTF = "0"; +$Host::MapFFATWL_Pandemonium_sctf = "0"; +$Host::MapFFATWL_Ramparts_CTF = "0"; +$Host::MapFFATWL_Ramparts_sctf = "0"; +$Host::MapFFATWL_Rollercoaster_sctf = "0"; +$Host::MapFFATWL_RollercoasterLT_sctf = "1"; +$Host::MapFFATWL_Sandstorm_CTF = "0"; +$Host::MapFFATWL_Snowblind_CTF = "1"; +$Host::MapFFATWL_Starfallen_CTF = "1"; +$Host::MapFFATWL_Stonehenge_CTF = "1"; +$Host::MapFFATWL_Stonehenge_sctf = "1"; +$Host::MapFFATWL_StonehengeLT_sctf = "1"; +$Host::MapFFATWL_SubZero_CTF = "1"; +$Host::MapFFATWL_Titan_CTF = "1"; +$Host::MapFFATWL_Titan_sctf = "1"; +$Host::MapFFATWL_WilderZone_CTF = "1"; +$Host::MapFFATWL_WilderZone_sctf = "1"; +$Host::MapFFATWL_WilderZoneLT_sctf = "1"; +$Host::MapFFATWL_WoodyMyrk_CTF = "1"; +$Host::MapFFAUnderhill_Duel = "0"; +$Host::MapFFAVauban_CTF = "1"; +$Host::MapFFAVaubanLak_Duel = "1"; +$Host::MapFFAVaubanLak_LakRabbit = "1"; +$Host::MapFFAVulcansWrathDM_DM = "1"; +$Host::MapFFAWhiteout_Duel = "1"; +$Host::MapFFAWindyGap_CTF = "1"; +$Host::MapPlayerLimitsAbominable_CnH = "-1 -1"; +$Host::MapPlayerLimitsAcidRain_CTF = "8 32"; +$Host::MapPlayerLimitsAgentsOfFortune_Duel = "-1 64"; +$Host::MapPlayerLimitsAgentsOfFortune_TeamHunters = "-1 32"; +$Host::MapPlayerLimitsAgorazscium_CTF = "10 64"; +$Host::MapPlayerLimitsAlcatraz_Siege = "-1 64"; +$Host::MapPlayerLimitsArchipelago_CTF = "16 64"; +$Host::MapPlayerLimitsArenaDome_CTF = "6 16"; +$Host::MapPlayerLimitsArenaDome_sctf = "6 16"; +$Host::MapPlayerLimitsArrakis_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsAshesToAshes_CnH = "16 -1"; +$Host::MapPlayerLimitsAstersDescent_CTF = "6 32"; +$Host::MapPlayerLimitsAstersDescent_sctf = "6 32"; +$Host::MapPlayerLimitsAzoth_CTF = "-1 32"; +$Host::MapPlayerLimitsAzoth_sctf = "-1 32"; +$Host::MapPlayerLimitsBasinFury_CTF = "6 32"; +$Host::MapPlayerLimitsBattleGrove_CTF = "-1 32"; +$Host::MapPlayerLimitsBeggarsRun_CTF = "8 32"; +$Host::MapPlayerLimitsBeggarsRun_sctf = "8 32"; +$Host::MapPlayerLimitsBeggarsRunLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsberlard_CTF = "6 32"; +$Host::MapPlayerLimitsberlard_sctf = "6 32"; +$Host::MapPlayerLimitsBerylBasin_CTF = "10 32"; +$Host::MapPlayerLimitsBlastside_nef_CTF = "6 32"; +$Host::MapPlayerLimitsBlink_CTF = "6 32"; +$Host::MapPlayerLimitsBoxLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsBridgeTooFar_CTF = "-1 32"; +$Host::MapPlayerLimitsBroadside_nef_CTF = "8 32"; +$Host::MapPlayerLimitsBulwark_CTF = "-1 16"; +$Host::MapPlayerLimitsBulwark_sctf = "-1 16"; +$Host::MapPlayerLimitsCadaver_CTF = "8 32"; +$Host::MapPlayerLimitsCaldera_Siege = "-1 48"; +$Host::MapPlayerLimitsCamelland_CTF = "-1 32"; +$Host::MapPlayerLimitsCamelland_sctf = "-1 32"; +$Host::MapPlayerLimitsCasern_Cavite_Duel = "-1 32"; +$Host::MapPlayerLimitsCasernCavite_Bounty = "-1 32"; +$Host::MapPlayerLimitsCasernCavite_DM = "-1 32"; +$Host::MapPlayerLimitsCasernCavite_Hunters = "-1 32"; +$Host::MapPlayerLimitsChoke_CTF = "6 24"; +$Host::MapPlayerLimitsCircleofstones_CTF = "8 32"; +$Host::MapPlayerLimitsCirclesEdge_CTF = "-1 32"; +$Host::MapPlayerLimitsCirclesEdge_sctf = "-1 32"; +$Host::MapPlayerLimitsCloseCombat_CTF = "-1 10"; +$Host::MapPlayerLimitsCloudBurst_CTF = "8 32"; +$Host::MapPlayerLimitsCloudCity_CTF = "6 32"; +$Host::MapPlayerLimitsConfusco_CTF = "8 32"; +$Host::MapPlayerLimitsConstructionYard_CTF = "8 32"; +$Host::MapPlayerLimitsCoppersky_CTF = "-1 32"; +$Host::MapPlayerLimitsCrater71Lak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsDamnation_CTF = "-1 32"; +$Host::MapPlayerLimitsDamnation_sctf = "-1 32"; +$Host::MapPlayerLimitsDamnationLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsDangerousCrossing_nef_CTF = "-1 32"; +$Host::MapPlayerLimitsDangerousCrossing_nef_sctf = "-1 32"; +$Host::MapPlayerLimitsDeathBirdsFly_CTF = "16 32"; +$Host::MapPlayerLimitsDehSwamp_sctf = "8 32"; +$Host::MapPlayerLimitsDesertofDeath_nef_CTF = "8 32"; +$Host::MapPlayerLimitsDesertofDeath_nef_sctf = "8 32"; +$Host::MapPlayerLimitsDesertofDeathLak_Duel = "6 32"; +$Host::MapPlayerLimitsDesertofDeathLak_LakRabbit = "6 32"; +$Host::MapPlayerLimitsDesiccator_CTF = "16 64"; +$Host::MapPlayerLimitsDevilsElbow_CTF = "6 32"; +$Host::MapPlayerLimitsDevilsElbow_sctf = "6 32"; +$Host::MapPlayerLimitsDire_CTF = "-1 32"; +$Host::MapPlayerLimitsDire_sctf = "-1 32"; +$Host::MapPlayerLimitsDiscord_CTF = "-1 32"; +$Host::MapPlayerLimitsDiscord_sctf = "-1 32"; +$Host::MapPlayerLimitsDisjointed_CTF = "6 32"; +$Host::MapPlayerLimitsDisjointed_sctf = "6 32"; +$Host::MapPlayerLimitsDissention_CTF = "8 32"; +$Host::MapPlayerLimitsDuelersDelight_sctf = "-1 32"; +$Host::MapPlayerLimitsDustLust_CTF = "8 32"; +$Host::MapPlayerLimitsDustLust_sctf = "8 32"; +$Host::MapPlayerLimitsDustToDust_CTF = "-1 32"; +$Host::MapPlayerLimitsDustToDust_Hunters = "-1 32"; +$Host::MapPlayerLimitsDustToDust_sctf = "-1 32"; +$Host::MapPlayerLimitsDustToDust_TeamHunters = "-1 32"; +$Host::MapPlayerLimitsEinfach_CTF = "6 32"; +$Host::MapPlayerLimitsEivoItoxico_CTF = "8 32"; +$Host::MapPlayerLimitsEquinox_CnH = "-1 -1"; +$Host::MapPlayerLimitsEquinox_DM = "-1 32"; +$Host::MapPlayerLimitsEquinox_Duel = "-1 32"; +$Host::MapPlayerLimitsEquinoxLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsEscalade_Bounty = "16 32"; +$Host::MapPlayerLimitsEscalade_DM = "16 -1"; +$Host::MapPlayerLimitsEscalade_Duel = "-1 32"; +$Host::MapPlayerLimitsEscalade_Hunters = "8 -1"; +$Host::MapPlayerLimitsEscalade_Rabbit = "16 -1"; +$Host::MapPlayerLimitsEscalade_TeamHunters = "8 -1"; +$Host::MapPlayerLimitsEscaladeLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsExtractor_CTF = "6 32"; +$Host::MapPlayerLimitsExtractor_sctf = "6 32"; +$Host::MapPlayerLimitsFallout_CTF = "8 32"; +$Host::MapPlayerLimitsFallout_sctf = "8 32"; +$Host::MapPlayerLimitsFenix_CTF = "12 32"; +$Host::MapPlayerLimitsFilteredDust_CTF = "8 32"; +$Host::MapPlayerLimitsFirestorm_CnH = "-1 24"; +$Host::MapPlayerLimitsFirestorm_CTF = "-1 32"; +$Host::MapPlayerLimitsFirestorm_sctf = "-1 32"; +$Host::MapPlayerLimitsFlashpoint_CnH = "-1 -1"; +$Host::MapPlayerLimitsFracas_Duel = "-1 32"; +$Host::MapPlayerLimitsFrozenFuryLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsFullCircle_CTF = "8 32"; +$Host::MapPlayerLimitsGauntlet_Siege = "-1 32"; +$Host::MapPlayerLimitsGehenna_Hunters = "-1 -1"; +$Host::MapPlayerLimitsGehenna_TeamHunters = "-1 -1"; +$Host::MapPlayerLimitsGlade_CTF = "8 32"; +$Host::MapPlayerLimitsGodsRiftLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsGorgon_CTF = "6 32"; +$Host::MapPlayerLimitsGorgon_sctf = "6 32"; +$Host::MapPlayerLimitsHarvestDance_CTF = "10 32"; +$Host::MapPlayerLimitsHavenLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsHeadstone_CTF = "10 32"; +$Host::MapPlayerLimitsHeadstone_sctf = "10 32"; +$Host::MapPlayerLimitsHighAnxiety_CTF = "6 32"; +$Host::MapPlayerLimitsHighOctane_CTF = "-1 32"; +$Host::MapPlayerLimitsHighOctane_sctf = "-1 32"; +$Host::MapPlayerLimitsHighTrepidation_CTF = "6 32"; +$Host::MapPlayerLimitsHighWire_CTF = "8 16"; +$Host::MapPlayerLimitsHillside_CTF = "10 64"; +$Host::MapPlayerLimitsHillsideLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsHillsOfSorrow_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsHostileLoch_CTF = "6 32"; +$Host::MapPlayerLimitsHostileLoch_sctf = "6 32"; +$Host::MapPlayerLimitsHostility_CTF = "8 16"; +$Host::MapPlayerLimitsIcebound_Siege = "-1 -1"; +$Host::MapPlayerLimitsIceGulch_CTF = "8 32"; +$Host::MapPlayerLimitsIceRidge_nef_CTF = "6 32"; +$Host::MapPlayerLimitsInfernus_CTF = "8 32"; +$Host::MapPlayerLimitsInnerSanctum_CTF = "-1 32"; +$Host::MapPlayerLimitsInsalubria_CnH = "-1 32"; +$Host::MapPlayerLimitsInvictus_Duel = "-1 32"; +$Host::MapPlayerLimitsIsland_CTF = "-1 10"; +$Host::MapPlayerLimitsIsland_sctf = "-1 10"; +$Host::MapPlayerLimitsIsleOfMan_CTF = "-1 32"; +$Host::MapPlayerLimitsIsleofman_Siege = "-1 32"; +$Host::MapPlayerLimitsJacobsLadder_CnH = "-1 -1"; +$Host::MapPlayerLimitsJadeValley_CTF = "8 32"; +$Host::MapPlayerLimitsJadeValley_sctf = "8 32"; +$Host::MapPlayerLimitsKatabatic_CTF = "8 32"; +$Host::MapPlayerLimitsks_braistv_CTF = "8 32"; +$Host::MapPlayerLimitsLakefront_CTF = "8 32"; +$Host::MapPlayerLimitsLandingParty_CTF = "8 32"; +$Host::MapPlayerLimitsLogans_Run_CTF = "6 32"; +$Host::MapPlayerLimitsLushLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsMac_FlagArena_CTF = "-1 32"; +$Host::MapPlayerLimitsMac_FlagArena_sctf = "-1 32"; +$Host::MapPlayerLimitsMachineeggs_CTF = "4 32"; +$Host::MapPlayerLimitsMagmatic_CTF = "8 32"; +$Host::MapPlayerLimitsMagmaticLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsMasada_Siege = "-1 32"; +$Host::MapPlayerLimitsmelee_CTF = "4 32"; +$Host::MapPlayerLimitsmelee_sctf = "4 32"; +$Host::MapPlayerLimitsMiniSunDried_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsMinotaur_CTF = "6 32"; +$Host::MapPlayerLimitsMinotaur_sctf = "6 32"; +$Host::MapPlayerLimitsMirage_CTF = "6 32"; +$Host::MapPlayerLimitsMirage_sctf = "6 32"; +$Host::MapPlayerLimitsMoonDance_CTF = "6 32"; +$Host::MapPlayerLimitsMountainMist_CTF = "8 32"; +$Host::MapPlayerLimitsMyrkwood_DM = "-1 32"; +$Host::MapPlayerLimitsMyrkWood_Duel = "-1 32"; +$Host::MapPlayerLimitsMyrkwood_Hunters = "-1 32"; +$Host::MapPlayerLimitsMyrkwood_Rabbit = "-1 32"; +$Host::MapPlayerLimitsNatureMagic_CTF = "8 32"; +$Host::MapPlayerLimitsOasis_DM = "-1 32"; +$Host::MapPlayerLimitsOasis_Duel = "-1 32"; +$Host::MapPlayerLimitsoasisintensity_CTF = "-1 32"; +$Host::MapPlayerLimitsoasisintensity_sctf = "-1 32"; +$Host::MapPlayerLimitsOctoberRust_CTF = "16 64"; +$Host::MapPlayerLimitsOverreach_CnH = "8 -1"; +$Host::MapPlayerLimitsPantheon_CTF = "10 64"; +$Host::MapPlayerLimitsPariah_CTF = "6 32"; +$Host::MapPlayerLimitsPariah_sctf = "6 32"; +$Host::MapPlayerLimitsPeak_CTF = "-1 32"; +$Host::MapPlayerLimitsPeak_sctf = "-1 32"; +$Host::MapPlayerLimitsPendulum_CTF = "8 32"; +$Host::MapPlayerLimitsPhasmaDustLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsPicnicTable_CTF = "6 32"; +$Host::MapPlayerLimitsPyroclasm_Duel = "10 32"; +$Host::MapPlayerLimitsQuagmire_CTF = "16 64"; +$Host::MapPlayerLimitsRaindance_nef_CTF = "6 32"; +$Host::MapPlayerLimitsRaindance_nefLak_LakRabbit = "4 32"; +$Host::MapPlayerLimitsRamparts_CTF = "6 32"; +$Host::MapPlayerLimitsRasp_Bounty = "-1 32"; +$Host::MapPlayerLimitsRasp_Duel = "-1 32"; +$Host::MapPlayerLimitsRasp_TeamHunters = "-1 32"; +$Host::MapPlayerLimitsRecalescence_CTF = "16 64"; +$Host::MapPlayerLimitsRespite_Siege = "-1 32"; +$Host::MapPlayerLimitsReversion_CTF = "16 64"; +$Host::MapPlayerLimitsRimehold_Hunters = "8 -1"; +$Host::MapPlayerLimitsRiverdance_CTF = "8 32"; +$Host::MapPlayerLimitsRollercoaster_nef_CTF = "6 32"; +$Host::MapPlayerLimitsRoundTheMountain_CTF = "-1 32"; +$Host::MapPlayerLimitsRoundTheMountain_sctf = "-1 32"; +$Host::MapPlayerLimitsS5_Centaur_CTF = "8 32"; +$Host::MapPlayerLimitsS5_Centaur_sctf = "8 32"; +$Host::MapPlayerLimitsS5_Damnation_CTF = "-1 32"; +$Host::MapPlayerLimitsS5_Damnation_sctf = "-1 32"; +$Host::MapPlayerLimitsS5_Drache_CTF = "6 32"; +$Host::MapPlayerLimitsS5_Drache_sctf = "6 32"; +$Host::MapPlayerLimitsS5_HawkingHeat_CTF = "6 32"; +$Host::MapPlayerLimitsS5_HawkingHeat_sctf = "6 32"; +$Host::MapPlayerLimitsS5_Icedance_CTF = "-1 32"; +$Host::MapPlayerLimitsS5_Icedance_sctf = "-1 32"; +$Host::MapPlayerLimitsS5_Massive_CTF = "-1 32"; +$Host::MapPlayerLimitsS5_Massive_sctf = "-1 32"; +$Host::MapPlayerLimitsS5_Mimicry_CTF = "6 32"; +$Host::MapPlayerLimitsS5_Mimicry_sctf = "6 32"; +$Host::MapPlayerLimitsS5_Misadventure_CTF = "8 32"; +$Host::MapPlayerLimitsS5_Misadventure_sctf = "8 32"; +$Host::MapPlayerLimitsS5_Mordacity_CTF = "-1 32"; +$Host::MapPlayerLimitsS5_Mordacity_sctf = "-1 32"; +$Host::MapPlayerLimitsS5_Reynard_CTF = "8 32"; +$Host::MapPlayerLimitsS5_Reynard_sctf = "8 32"; +$Host::MapPlayerLimitsS5_Sherman_CTF = "10 32"; +$Host::MapPlayerLimitsS5_Sherman_sctf = "10 32"; +$Host::MapPlayerLimitsS5_Silenus_CTF = "-1 32"; +$Host::MapPlayerLimitsS5_Silenus_sctf = "-1 32"; +$Host::MapPlayerLimitsS5_Woodymyrk_CTF = "6 32"; +$Host::MapPlayerLimitsS5_Woodymyrk_sctf = "6 32"; +$Host::MapPlayerLimitsS8_Cardiac_CTF = "6 32"; +$Host::MapPlayerLimitsS8_Cardiac_sctf = "6 32"; +$Host::MapPlayerLimitsS8_CentralDogma_CTF = "10 32"; +$Host::MapPlayerLimitsS8_Geothermal_CTF = "12 32"; +$Host::MapPlayerLimitsS8_Geothermal_sctf = "12 32"; +$Host::MapPlayerLimitsS8_Mountking_CTF = "8 32"; +$Host::MapPlayerLimitsS8_Opus_CTF = "4 32"; +$Host::MapPlayerLimitsS8_Opus_sctf = "4 32"; +$Host::MapPlayerLimitsS8_Zilch_CTF = "8 32"; +$Host::MapPlayerLimitsS8_Zilch_sctf = "8 32"; +$Host::MapPlayerLimitsSaddiesHill_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsSanctuary_CTF = "12 32"; +$Host::MapPlayerLimitsSandOcean_CTF = "8 32"; +$Host::MapPlayerLimitsSandstorm_CTF = "10 32"; +$Host::MapPlayerLimitsSandStormLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsSangre_de_Grado_CTF = "10 32"; +$Host::MapPlayerLimitsScarabrae_nef_CTF = "12 32"; +$Host::MapPlayerLimitsShockRidge_CTF = "10 32"; +$Host::MapPlayerLimitsShortFall_CTF = "10 32"; +$Host::MapPlayerLimitsShortFall_sctf = "10 32"; +$Host::MapPlayerLimitsSignal_CTF = "6 32"; +$Host::MapPlayerLimitsSignal_sctf = "6 32"; +$Host::MapPlayerLimitsSirocco_CnH = "8 -1"; +$Host::MapPlayerLimitsSkinnyDipLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsSlapdash_CTF = "16 64"; +$Host::MapPlayerLimitsSmallCrossing_CTF = "-1 16"; +$Host::MapPlayerLimitsSmallCrossing_sctf = "-1 16"; +$Host::MapPlayerLimitsSmallDesertofDeath_CTF = "4 32"; +$Host::MapPlayerLimitsSmallDesertofDeath_sctf = "4 32"; +$Host::MapPlayerLimitsSmallMelee_CTF = "4 16"; +$Host::MapPlayerLimitsSmallMelee_sctf = "4 16"; +$Host::MapPlayerLimitsSmallTimeCTF_CTF = "-1 32"; +$Host::MapPlayerLimitsSmallTimeCTF_sctf = "-1 32"; +$Host::MapPlayerLimitsSnowcone_CTF = "4 32"; +$Host::MapPlayerLimitsSnowcone_sctf = "4 32"; +$Host::MapPlayerLimitsSolsDescentLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsSoylentGreen_CTF = "4 18"; +$Host::MapPlayerLimitsStarfallen_CTF = "6 64"; +$Host::MapPlayerLimitsStarIce_CTF = "6 32"; +$Host::MapPlayerLimitsStonehenge_nef_CTF = "6 32"; +$Host::MapPlayerLimitsSubZeroV_CTF = "12 32"; +$Host::MapPlayerLimitsSundance_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsSunDried_Bounty = "8 -1"; +$Host::MapPlayerLimitsSunDried_DM = "8 -1"; +$Host::MapPlayerLimitsSunDried_Duel = "-1 32"; +$Host::MapPlayerLimitsSunDriedLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsSuperHappyBouncyFunTime_CTF = "-1 32"; +$Host::MapPlayerLimitsSuperHappyBouncyFunTime_sctf = "-1 32"; +$Host::MapPlayerLimitsSurreal_CTF = "10 32"; +$Host::MapPlayerLimitsSurro_CTF = "8 32"; +$Host::MapPlayerLimitsTalus_Bounty = "-1 32"; +$Host::MapPlayerLimitsTalus_Duel = "-1 32"; +$Host::MapPlayerLimitsTenebrousCTF_CTF = "4 32"; +$Host::MapPlayerLimitsTheClocktower_CTF = "6 12"; +$Host::MapPlayerLimitsTheFray_CTF = "-1 32"; +$Host::MapPlayerLimitsTheFray_sctf = "-1 32"; +$Host::MapPlayerLimitsThinIce_CTF = "16 64"; +$Host::MapPlayerLimitsTibbaw_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsTitan_CTF = "6 32"; +$Host::MapPlayerLimitsTitan_sctf = "6 32"; +$Host::MapPlayerLimitsTitanLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsTitForTat_CTF = "-1 16"; +$Host::MapPlayerLimitsTombstone_CTF = "16 32"; +$Host::MapPlayerLimitsTombstone_Duel = "-1 32"; +$Host::MapPlayerLimitsTreasureIslandLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsTrident_CTF = "-1 32"; +$Host::MapPlayerLimitsTrident_Siege = "-1 32"; +$Host::MapPlayerLimitsTWL2_Bleed_CTF = "10 32"; +$Host::MapPlayerLimitsTWL2_BlueMoon_CTF = "10 32"; +$Host::MapPlayerLimitsTWL2_CanyonCrusadeDeluxe_CTF = "-1 32"; +$Host::MapPlayerLimitsTWL2_CanyonCrusadeDeluxe_sctf = "-1 32"; +$Host::MapPlayerLimitsTWL2_Celerity_CTF = "6 32"; +$Host::MapPlayerLimitsTWL2_Celerity_sctf = "6 32"; +$Host::MapPlayerLimitsTWL2_CloakOfNight_CTF = "8 32"; +$Host::MapPlayerLimitsTWL2_Crevice_CTF = "6 32"; +$Host::MapPlayerLimitsTWL2_Crevice_sctf = "6 32"; +$Host::MapPlayerLimitsTWL2_Dissention_CTF = "8 32"; +$Host::MapPlayerLimitsTWL2_Drifts_CTF = "8 32"; +$Host::MapPlayerLimitsTWL2_Drifts_sctf = "8 32"; +$Host::MapPlayerLimitsTWL2_Drorck_CTF = "6 32"; +$Host::MapPlayerLimitsTWL2_Drorck_sctf = "6 32"; +$Host::MapPlayerLimitsTWL2_FrozenGlory_CTF = "8 32"; +$Host::MapPlayerLimitsTWL2_FrozenGlory_sctf = "8 32"; +$Host::MapPlayerLimitsTWL2_FrozenHope_CTF = "8 32"; +$Host::MapPlayerLimitsTWL2_FrozenHope_sctf = "8 32"; +$Host::MapPlayerLimitsTWL2_Hildebrand_CTF = "-1 32"; +$Host::MapPlayerLimitsTWL2_Hildebrand_sctf = "-1 32"; +$Host::MapPlayerLimitsTWL2_IceDagger_CTF = "6 32"; +$Host::MapPlayerLimitsTWL2_IceDagger_sctf = "6 32"; +$Host::MapPlayerLimitsTWL2_JaggedClaw_CTF = "4 32"; +$Host::MapPlayerLimitsTWL2_JaggedClaw_sctf = "4 32"; +$Host::MapPlayerLimitsTWL2_Magnum_CTF = "8 32"; +$Host::MapPlayerLimitsTWL2_MidnightMayhemDeluxe_CTF = "8 32"; +$Host::MapPlayerLimitsTWL2_MidnightMayhemDeluxe_sctf = "8 32"; +$Host::MapPlayerLimitsTWL2_MuddySwamp_CTF = "8 32"; +$Host::MapPlayerLimitsTWL2_MuddySwamp_sctf = "8 32"; +$Host::MapPlayerLimitsTWL2_MuddySwampLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsTWL2_Norty_CTF = "6 32"; +$Host::MapPlayerLimitsTWL2_Norty_sctf = "6 32"; +$Host::MapPlayerLimitsTWL2_Ocular_CTF = "6 32"; +$Host::MapPlayerLimitsTWL2_Ocular_sctf = "6 32"; +$Host::MapPlayerLimitsTWL2_RoughLand_CTF = "8 32"; +$Host::MapPlayerLimitsTWL2_RoughLand_sctf = "8 32"; +$Host::MapPlayerLimitsTWL2_Ruined_CTF = "10 32"; +$Host::MapPlayerLimitsTWL2_Ruined_sctf = "10 32"; +$Host::MapPlayerLimitsTWL2_Skylight_CTF = "-1 32"; +$Host::MapPlayerLimitsTWL2_Skylight_sctf = "-1 32"; +$Host::MapPlayerLimitsTWL_BaNsHee_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_BaNsHee_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_BeachBlitz_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_BeachBlitz_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_BeachBlitzLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsTWL_Boss_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Boss_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_Chokepoint_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Cinereous_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Cinereous_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_Clusterfuct_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Clusterfuct_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_Crossfire_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Crossfire_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_Curtilage_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Curtilage_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_Damnation_CTF = "6 32"; +$Host::MapPlayerLimitsTWL_Damnation_sctf = "6 32"; +$Host::MapPlayerLimitsTWL_DangerousCrossing_CTF = "4 32"; +$Host::MapPlayerLimitsTWL_DangerousCrossing_sctf = "4 32"; +$Host::MapPlayerLimitsTWL_DeadlyBirdsSong_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_DeadlyBirdsSong_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_Deserted_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Deserted_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_Feign_CTF = "6 32"; +$Host::MapPlayerLimitsTWL_Feign_sctf = "6 32"; +$Host::MapPlayerLimitsTWL_Frostclaw_CTF = "10 32"; +$Host::MapPlayerLimitsTWL_Frostclaw_sctf = "10 32"; +$Host::MapPlayerLimitsTWL_Frozen_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Harvester_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Horde_CTF = "10 32"; +$Host::MapPlayerLimitsTWL_Katabatic_CTF = "10 32"; +$Host::MapPlayerLimitsTWL_Neve_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Neve_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_NoShelter_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_NoShelter_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_OsIris_CTF = "6 32"; +$Host::MapPlayerLimitsTWL_OsIris_sctf = "6 32"; +$Host::MapPlayerLimitsTWL_Pandemonium_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Pandemonium_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_Ramparts_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Ramparts_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_Rollercoaster_sctf = "6 32"; +$Host::MapPlayerLimitsTWL_Sandstorm_CTF = "12 32"; +$Host::MapPlayerLimitsTWL_Snowblind_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Starfallen_CTF = "12 32"; +$Host::MapPlayerLimitsTWL_Stonehenge_CTF = "4 32"; +$Host::MapPlayerLimitsTWL_Stonehenge_sctf = "4 32"; +$Host::MapPlayerLimitsTWL_SubZero_CTF = "6 32"; +$Host::MapPlayerLimitsTWL_Titan_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_Titan_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_WilderZone_CTF = "8 32"; +$Host::MapPlayerLimitsTWL_WilderZone_sctf = "8 32"; +$Host::MapPlayerLimitsTWL_WoodyMyrk_CTF = "6 32"; +$Host::MapPlayerLimitsUltimaThule_Siege = "8 -1"; +$Host::MapPlayerLimitsUnderhill_Bounty = "-1 32"; +$Host::MapPlayerLimitsUnderhill_DM = "-1 -1"; +$Host::MapPlayerLimitsUnderhill_Duel = "8 32"; +$Host::MapPlayerLimitsVauban_CTF = "10 32"; +$Host::MapPlayerLimitsVaubanLak_Duel = "-1 32"; +$Host::MapPlayerLimitsVaubanLak_LakRabbit = "-1 32"; +$Host::MapPlayerLimitsWhiteout_Bounty = "8 -1"; +$Host::MapPlayerLimitsWhiteout_DM = "8 -1"; +$Host::MapPlayerLimitsWhiteout_Duel = "-1 32"; +$Host::MapPlayerLimitsWindyGap_CTF = "12 32"; +$Host::MarkDnDObjectives = 1; +$Host::MaxBotDifficulty = 0.75; +$Host::MaxMessageLen = 120; +$Host::MaxPlayers = 24; +$Host::MinBotDifficulty = 0.5; +$Host::MissionType = "LakRabbit"; +$Host::NoSmurfs = 0; +$Host::Password = "pickup"; +$Host::PlayerRespawnTimeout = 60; +$Host::Port = 28000; +$Host::PUGautoPassword = 0; +$Host::PUGPassword = "pickup"; +$Host::PureServer = 0; +$Host::SCtFProMode = 0; +$Host::ShowEndingPlayerScores = 1; +$Host::ShowIngamePlayerScores = 1; +$Host::Siege::Halftime = 20000; +$Host::TeamDamageOn = 1; +$Host::TeamName0 = "Unassigned"; +$Host::TeamName1 = "Storm"; +$Host::TeamName2 = "Inferno"; +$Host::TeamName3 = "Starwolf"; +$Host::TeamName4 = "Diamond Sword"; +$Host::TeamName5 = "Blood Eagle"; +$Host::TeamName6 = "Phoenix"; +$Host::TeamSkin0 = "blank"; +$Host::TeamSkin1 = "base"; +$Host::TeamSkin2 = "baseb"; +$Host::TeamSkin3 = "swolf"; +$Host::TeamSkin4 = "dsword"; +$Host::TeamSkin5 = "beagle"; +$Host::TeamSkin6 = "cotp"; +$Host::TimeLimit = 30; +$Host::TN::beat = 3; +$Host::TN::echo = 1; +$Host::TournamentMode = 0; +$Host::useCustomSkins = 1; +$Host::VotePassPercent = 60; +$Host::VoteSpread = 20; +$Host::VoteTime = 45; +$Host::warmupTime = 5; diff --git a/_custom/GameData/Classic/scripts/autoexec/AdminPrefs.cs b/_custom/GameData/Classic/scripts/autoexec/AdminPrefs.cs new file mode 100644 index 0000000..ce019c8 --- /dev/null +++ b/_custom/GameData/Classic/scripts/autoexec/AdminPrefs.cs @@ -0,0 +1,10 @@ +// These values should be written on container start +// ---- +//$Host::AdminList = ""; +//$Host::AdminPassword = "changeme"; +//$Host::ClassicSuperAdminPassword = "changme"; +//$Host::ClassicTelnetListenPass = "changeme"; +//$Host::ClassicTelnetPassword = "changeme"; +//$Host::SuperAdminList = ""; +// ---- + diff --git a/_custom/Classic/prefs/dummy b/_custom/GameData/base/prefs/dummy similarity index 100% rename from _custom/Classic/prefs/dummy rename to _custom/GameData/base/prefs/dummy diff --git a/_custom/Classic/scripts/autoexec/dummy b/_custom/GameData/base/scripts/autoexec/dummy similarity index 100% rename from _custom/Classic/scripts/autoexec/dummy rename to _custom/GameData/base/scripts/autoexec/dummy diff --git a/_custom/base/prefs/dummy b/_custom/base/prefs/dummy deleted file mode 100644 index e69de29..0000000 diff --git a/_custom/base/scripts/autoexec/dummy b/_custom/base/scripts/autoexec/dummy deleted file mode 100644 index e69de29..0000000 diff --git a/_scripts/cfg-admin-prefs b/_scripts/cfg-admin-prefs index c642f32..0ca0454 100644 --- a/_scripts/cfg-admin-prefs +++ b/_scripts/cfg-admin-prefs @@ -1,7 +1,7 @@ #!/bin/bash SRVUSER=gameserv -ADMINPREFS_FILE=/home/$SRVUSER/.loki/tribes2/Classic/scripts/autoexec/AdminPrefs.cs +ADMINPREFS_FILE=/home/$SRVUSER/.wine32/drive_c/Dynamix/Tribes2/GameData/Classic/scripts/autoexec/AdminPrefs.cs SECRETS=/run/secrets # -- set Admin Password diff --git a/_scripts/clean-up b/_scripts/clean-up index 431ce57..4a1e16f 100644 --- a/_scripts/clean-up +++ b/_scripts/clean-up @@ -1,18 +1,11 @@ #!/bin/bash echo "Removing old installers" + +[ -f TribesNext_RC2_LinuxVersion.zip ] && rm TribesNext_RC2_LinuxVersion.zip +[ -f TribesNext_rc2a.exe ] && rm TribesNext_rc2a.exe [ -f classic_v152.zip ] && rm classic_v152.zip -[ -f t2-linux.zip ] && rm t2-linux.zip -[ -f tribes2-lan-fix-linux.tar.gz ] && rm tribes2-lan-fix-linux.tar.gz -echo "Done!" - - -echo "Removing TacoServer TribesNext Incompatibilities" -# Remove zAdvancedStatsLogless.vl2: causes issues connecting without TN -rm $1/Classic/zAdvancedStatsLogless.vl2 -# Remove checkVer: Wont work anyway without TN -rm $1/Classic/scripts/autoexec/zCheckVer.cs -# We're using our own heartbeat to TN -rm $1/Classic/scripts/autoexec/zAltAltHeartbeatDaemon.cs +[ -f ruby-1.9.0-2-i386-mswin32.zip ] && rm ruby-1.9.0-2-i386-mswin32.zip +[ -f tribes2gsi.exe ] && rm tribes2gsi.exe echo "Done!" \ No newline at end of file diff --git a/_scripts/gen_autoexec_index b/_scripts/gen_autoexec_index deleted file mode 100644 index 9dcaa17..0000000 --- a/_scripts/gen_autoexec_index +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -# -- Generate an alphabetized autoexec index file because we can't trust the load order -SCRIPTS_DIR=$1 -INDEX_FILE="$SCRIPTS_DIR"/autoexec/AutoExecIndex.cs - -mkdir -p "$SCRIPTS_DIR"/library -mv -v "$SCRIPTS_DIR"/autoexec/*.cs "$SCRIPTS_DIR"/library/. - -scripts=( - "$SCRIPTS_DIR"/library/*.cs -) - -for i in "${scripts[@]##*/}" -do - echo "exec(\"scripts/library/${i}\");" >> $INDEX_FILE -done - -cat $INDEX_FILE \ No newline at end of file diff --git a/_scripts/start-server b/_scripts/start-server index 4bf7adc..7d72ce2 100755 --- a/_scripts/start-server +++ b/_scripts/start-server @@ -1,24 +1,18 @@ #!/bin/bash -BASE_DIR=/home/gameserv/.loki/tribes2/ +export WINEPREFIX=/home/gameserv/.wine32 +export WINEARCH=win32 +BASEDIR=$WINEPREFIX/drive_c/Dynamix/Tribes2/GameData echo "Update Admin & Server Prefs..." /tmp/tribes2/cfg-admin-prefs echo "Finished!" -cd ${BASE_DIR} +find ${BASEDIR} -name \*.dso -execdir /bin/rm {} \; -echo "Generating alphabetized AutoExec script index..." -/tmp/tribes2/gen_autoexec_index "${BASE_DIR}Classic/scripts" -echo "Finished!" +cd $WINEPREFIX/drive_c/Dynamix/Tribes2/GameData -echo "Removing .dso files" -find ${BASE_DIR} -name \*.dso -execdir /bin/rm {} \; +wine --version echo "Running the Tribes 2 server" -chmod +x ${BASE_DIR}tribes2d-lan.dynamic - -# -- debug -- keep container running and dont launch the server -#tail -f /dev/null - -/tmp/tribes2/tn_heartbeat & taskset -c 0 ./tribes2d-lan.dynamic 28000 -nologin -dedicated -mod Classic \ No newline at end of file +xvfb-run -a -w 5 taskset -c 0 wine Tribes2.exe -dedicated -mod Classic diff --git a/_scripts/tn_heartbeat b/_scripts/tn_heartbeat deleted file mode 100644 index 322aca4..0000000 --- a/_scripts/tn_heartbeat +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -# -- Heartbeat to TribesNext's Master Server - -( - while true; do - echo "Sending heartbeat to TribesNext..." - curl http://master.tribesnext.com/add/28000 & - sleep 240 ; - done -) \ No newline at end of file diff --git a/_scripts/tribesnext-server-installer b/_scripts/tribesnext-server-installer index d4ce254..2850cee 100755 --- a/_scripts/tribesnext-server-installer +++ b/_scripts/tribesnext-server-installer @@ -1,10 +1,32 @@ #!/bin/bash # -# -- tribes dedicated server installer -SRVUSER=gameserv -INSBASE=/home/$SRVUSER/.loki/ -export TMPBASE=/tmp/tribes2 +# -- tribesnext dedicated server installer +# --- pulls together the wine server, as terrible as that is, +# --- patch a linux release d00dz +# -- author: sairuk +# +SRVUSER=gameserv +INSBASE=/home/$SRVUSER/.wine32/drive_c/Dynamix/ +export TMPBASE=/tmp/tribes2 +export WINEARCH=win32 +export WINEPREFIX=/home/$SRVUSER/.wine32/ +export REQUIREMENTS=(wine Xvfb) + +# -- server requirements +function check_requirements { + REQMET=1 # -- pretty optimistic eh? + for REQ in ${REQUIREMENTS[@]} + do + RESULT=$(which $REQ) + if [ $? != "0" ] + then + echo "Executable not found: ${REQ}" + REQMET=0 + fi + done + [ "$REQMET" == "0" ] && echo "Requirements not met, see preceding messages" && exit 1 +} # -- download the required the files function get_files { @@ -14,24 +36,29 @@ function get_files { fi } +check_requirements # -- make directories [ ! -d $TMPBASE ] && mkdir -p $TMPBASE if [ ! -d $INSBASE ] then - mkdir -p $INSBASE/tribes2/{Manual} - mkdir -p $INSBASE/tribes2/base/{music,lighting,textures,prefs} - mkdir -p $INSBASE/tribes2/Classic/scripts/{turrets,weapons,autoexec,packs,vehicles} - mkdir -p $INSBASE/tribes2/Classic/{logs,stats,serverStats} + mkdir -p $INSBASE/Tribes2/Manual + mkdir -p $INSBASE/Tribes2/GameData/base/{music,lighting,textures,prefs} + mkdir -p $INSBASE/Tribes2/GameData/Classic/scripts/{turrets,weapons,autoexec,packs,vehicles} fi # -- download files -get_files t2-linux.zip "https://www.dropbox.com/s/ejemimzxjdswtvm/" "$TMPBASE" -get_files tribes2-lan-fix-linux.tar.gz "http://t2.plugh.us/" "$TMPBASE" -get_files classic_v152.zip "https://tribes2stats.com/files/mods/" "$TMPBASE" +get_files tribes2gsi.exe "https://www.the-construct.net/downloads/tribes2/" "$TMPBASE" +get_files TribesNext_rc2a.exe "https://www.tribesnext.com/files/" "$TMPBASE" +get_files TribesNext_RC2_LinuxVersion.zip "https://lutris.net/files/games/tribes-2/" "$TMPBASE" +get_files classic_v152.zip "https://tribes2stats.com/files/mods/" "$TMPBASE" + +# -- some items require an headerless +export DISPLAY=:99 +[ ! $(pidof Xvfb) ] && Xvfb :99 -screen 0 640x480x8 -nolisten tcp & 2>&1 > /dev/null # -- gimme a little time @@ -40,47 +67,209 @@ sleep 1 # -- extract the main installer, the silent installer is a lie! echo "Installing T2..." -# REMEMBER: There is no GameData in the linux version. Everything is up a dir -[ -f $TMPBASE/t2-linux.zip ] && /usr/bin/unzip -o $TMPBASE/t2-linux.zip -d $TMPBASE/install 2>&1 > /dev/null +/usr/bin/wine $TMPBASE/tribes2gsi.exe /x Z:\\tmp\\tribes2\\game + + # -- move all extract files into place -cp -r $TMPBASE/install/t2-linux/. $INSBASE/tribes2/. -echo "T2 installed!" +if [ -f $TMPBASE/game/Tribes2.exe ] +then + mv $TMPBASE/game/aaBarrelLarge.cs $INSBASE/Tribes2/GameData/Classic/scripts/turrets/aaBarrelLarge.cs + mv $TMPBASE/game/aabarrelPack.cs $INSBASE/Tribes2/GameData/Classic/scripts/packs/aabarrelPack.cs + mv $TMPBASE/game/admin.cs $INSBASE/Tribes2/GameData/Classic/scripts/admin.cs + mv $TMPBASE/game/aiPracticeCtf.cs $INSBASE/Tribes2/GameData/Classic/scripts/aiPracticeCtf.cs + mv $TMPBASE/game/AMDW2KCardProfiles.cs $INSBASE/Tribes2/GameData/AMDW2KCardProfiles.cs + mv $TMPBASE/game/AMDW98CardProfiles.cs $INSBASE/Tribes2/GameData/AMDW98CardProfiles.cs + mv $TMPBASE/game/AMDW98SECardProfiles.cs $INSBASE/Tribes2/GameData/AMDW98SECardProfiles.cs + mv $TMPBASE/game/AMDWMECardProfiles.cs $INSBASE/Tribes2/GameData/AMDWMECardProfiles.cs + mv $TMPBASE/game/audio.vl2 $INSBASE/Tribes2/GameData/base/audio.vl2 + mv $TMPBASE/game/badlands.mp3 $INSBASE/Tribes2/GameData/base/music/badlands.mp3 + mv $TMPBASE/game/badlands.vl2 $INSBASE/Tribes2/GameData/base/badlands.vl2 + mv $TMPBASE/game/base.vl2 $INSBASE/Tribes2/GameData/base/base.vl2 + mv $TMPBASE/game/cameraGrenade.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons/cameraGrenade.cs + mv $TMPBASE/game/CardProfiles.cs $INSBASE/Tribes2/GameData/CardProfiles.cs + mv $TMPBASE/game/chaingun.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons/chaingun.cs + mv $TMPBASE/game/chatMenuHud.cs $INSBASE/Tribes2/GameData/Classic/scripts/chatMenuHud.cs + mv $TMPBASE/game/Classic_dedicated_server.bat $INSBASE/Tribes2/GameData/Classic_dedicated_server.bat + mv $TMPBASE/game/Classic_LAN.bat $INSBASE/Tribes2/GameData/Classic_LAN.bat + mv $TMPBASE/game/Classic_maps_v1.vl2 $INSBASE/Tribes2/GameData/base/Classic_maps_v1.vl2 + mv $TMPBASE/game/Classic_online.bat $INSBASE/Tribes2/GameData/Classic_online.bat + mv $TMPBASE/game/Classic_readme.txt $INSBASE/Tribes2/GameData/Classic/Classic_readme.txt + mv $TMPBASE/game/Classic_technical.txt $INSBASE/Tribes2/GameData/Classic/Classic_technical.txt + mv $TMPBASE/game/cloakingpack.cs $INSBASE/Tribes2/GameData/Classic/scripts/packs/cloakingpack.cs + mv $TMPBASE/game/console_start.cs $INSBASE/Tribes2/GameData/console_start.cs + mv $TMPBASE/game/creditsText.cs $INSBASE/Tribes2/GameData/Classic/scripts/creditsText.cs + mv $TMPBASE/game/CTFGame.cs $INSBASE/Tribes2/GameData/Classic/scripts/CTFGame.cs + mv $TMPBASE/game/damageTypes.cs $INSBASE/Tribes2/GameData/Classic/scripts/damageTypes.cs + mv $TMPBASE/game/deathMessages.cs $INSBASE/Tribes2/GameData/Classic/scripts/deathMessages.cs + mv $TMPBASE/game/defaultGame.cs $INSBASE/Tribes2/GameData/Classic/scripts/defaultGame.cs + mv $TMPBASE/game/deployables.cs $INSBASE/Tribes2/GameData/Classic/scripts/deployables.cs + mv $TMPBASE/game/desert.mp3 $INSBASE/Tribes2/GameData/base/music/desert.mp3 + mv $TMPBASE/game/desert.vl2 $INSBASE/Tribes2/GameData/base/desert.vl2 + mv $TMPBASE/game/disc.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons/disc.cs + mv $TMPBASE/game/DRI-Matrox.cs $INSBASE/Tribes2/GameData/DRI-Matrox.cs + mv $TMPBASE/game/DRI-Radeon.cs $INSBASE/Tribes2/GameData/DRI-Radeon.cs + mv $TMPBASE/game/DRI-Rage128.cs $INSBASE/Tribes2/GameData/DRI-Rage128.cs + mv $TMPBASE/game/DRI-Voodoo3.cs $INSBASE/Tribes2/GameData/DRI-Voodoo3.cs + mv $TMPBASE/game/DRI-Voodoo5.cs $INSBASE/Tribes2/GameData/DRI-Voodoo5.cs + mv $TMPBASE/game/ELFBarrelLarge.cs $INSBASE/Tribes2/GameData/Classic/scripts/turrets/ELFBarrelLarge.cs + mv $TMPBASE/game/ELFbarrelPack.cs $INSBASE/Tribes2/GameData/Classic/scripts/packs/ELFbarrelPack.cs + mv $TMPBASE/game/ELFGun.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons/ELFGun.cs + mv $TMPBASE/game/EULA.txt $INSBASE/Tribes2/GameData/base/EULA.txt + mv $TMPBASE/game/flashGrenade.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons/flashGrenade.cs + mv $TMPBASE/game/French\ Config.cs $INSBASE/Tribes2/GameData/base/prefs/French\ Config.cs + mv $TMPBASE/game/GameGui.cs $INSBASE/Tribes2/GameData/Classic/scripts/GameGui.cs + mv $TMPBASE/game/GeForce.cs $INSBASE/Tribes2/GameData/GeForce.cs + mv $TMPBASE/game/German\ config.cs $INSBASE/Tribes2/GameData/base/prefs/German\ config.cs + mv $TMPBASE/game/glon32.dr7 $INSBASE/Tribes2/GameData/glon32.dr7 + mv $TMPBASE/game/GLU2D3D.dll $INSBASE/Tribes2/GameData/GLU2D3D.dll + mv $TMPBASE/game/grenadeLauncher.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons/grenadeLauncher.cs + mv $TMPBASE/game/HighProfile.cs $INSBASE/Tribes2/GameData/HighProfile.cs + mv $TMPBASE/game/hud.cs $INSBASE/Tribes2/GameData/Classic/scripts/hud.cs + mv $TMPBASE/game/ice.mp3 $INSBASE/Tribes2/GameData/base/music/ice.mp3 + mv $TMPBASE/game/ice.vl2 $INSBASE/Tribes2/GameData/base/ice.vl2 + mv $TMPBASE/game/IFC21.dll $INSBASE/Tribes2/GameData/IFC21.dll + mv $TMPBASE/game/IFC22.dll $INSBASE/Tribes2/GameData/IFC22.dll + mv $TMPBASE/game/indoorDeployableBarrel.cs $INSBASE/Tribes2/GameData/Classic/scripts/turrets/indoorDeployableBarrel.cs + mv $TMPBASE/game/Inside\ Team\ Rabbit\ 2.txt $INSBASE/Tribes2/GameData/Inside\ Team\ Rabbit\ 2.txt + mv $TMPBASE/game/IntelW2KCardProfiles.cs $INSBASE/Tribes2/GameData/IntelW2KCardProfiles.cs + mv $TMPBASE/game/IntelW95CardProfiles.cs $INSBASE/Tribes2/GameData/IntelW95CardProfiles.cs + mv $TMPBASE/game/IntelW98CardProfiles.cs $INSBASE/Tribes2/GameData/IntelW98CardProfiles.cs + mv $TMPBASE/game/IntelW98SECardProfiles.cs $INSBASE/Tribes2/GameData/IntelW98SECardProfiles.cs + mv $TMPBASE/game/IntelWMECardProfiles.cs $INSBASE/Tribes2/GameData/IntelWMECardProfiles.cs + mv $TMPBASE/game/interiors.vl2 $INSBASE/Tribes2/GameData/base/interiors.vl2 + mv $TMPBASE/game/inventory.cs $INSBASE/Tribes2/GameData/Classic/scripts/inventory.cs + mv $TMPBASE/game/inventoryHud.cs $INSBASE/Tribes2/GameData/Classic/scripts/inventoryHud.cs + mv $TMPBASE/game/ispawn.exe $INSBASE/Tribes2/GameData/ispawn.exe + mv $TMPBASE/game/Italian\ Config.cs $INSBASE/Tribes2/GameData/base/prefs/Italian\ Config.cs + mv $TMPBASE/game/item.cs $INSBASE/Tribes2/GameData/Classic/scripts/item.cs + mv $TMPBASE/game/kver.pub $INSBASE/Tribes2/GameData/kver.pub + mv $TMPBASE/game/Kyro.cs $INSBASE/Tribes2/GameData/Kyro.cs + mv $TMPBASE/game/lava.vl2 $INSBASE/Tribes2/GameData/base/lava.vl2 + mv $TMPBASE/game/LinuxCardProfiles.cs $INSBASE/Tribes2/GameData/LinuxCardProfiles.cs + mv $TMPBASE/game/loadingGui.cs $INSBASE/Tribes2/GameData/Classic/scripts/loadingGui.cs + mv $TMPBASE/game/LowProfile.cs $INSBASE/Tribes2/GameData/LowProfile.cs + mv $TMPBASE/game/lush.mp3 $INSBASE/Tribes2/GameData/base/music/lush.mp3 + mv $TMPBASE/game/lush.vl2 $INSBASE/Tribes2/GameData/base/lush.vl2 + mv $TMPBASE/game/Matrox.cs $INSBASE/Tribes2/GameData/Matrox.cs + mv $TMPBASE/game/MediumProfile.cs $INSBASE/Tribes2/GameData/MediumProfile.cs + mv $TMPBASE/game/message.cs $INSBASE/Tribes2/GameData/Classic/scripts/message.cs + mv $TMPBASE/game/mine.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons/mine.cs + mv $TMPBASE/game/minivstationx.cs $INSBASE/Tribes2/GameData/Classic/scripts/autoexec/minivstationx.cs + mv $TMPBASE/game/missileBarrelLarge.cs $INSBASE/Tribes2/GameData/Classic/scripts/turrets/missileBarrelLarge.cs + mv $TMPBASE/game/missilebarrelPack.cs $INSBASE/Tribes2/GameData/Classic/scripts/packs/missilebarrelPack.cs + mv $TMPBASE/game/missileLauncher.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons/missileLauncher.cs + mv $TMPBASE/game/missions.vl2 $INSBASE/Tribes2/GameData/base/missions.vl2 + mv $TMPBASE/game/mortarBarrelLarge.cs $INSBASE/Tribes2/GameData/Classic/scripts/turrets/mortarBarrelLarge.cs + mv $TMPBASE/game/mortarBarrelPack.cs $INSBASE/Tribes2/GameData/Classic/scripts/packs/mortarBarrelPack.cs + mv $TMPBASE/game/mortar.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons/mortar.cs + mv $TMPBASE/game/Mp3dec.asi $INSBASE/Tribes2/GameData/Mp3dec.asi + mv $TMPBASE/game/mpbTeleporter.cs $INSBASE/Tribes2/GameData/Classic/scripts/mpbTeleporter.cs + mv $TMPBASE/game/Mss32.dll $INSBASE/Tribes2/GameData/Mss32.dll + mv $TMPBASE/game/Mssds3dh.m3d $INSBASE/Tribes2/GameData/Mssds3dh.m3d + mv $TMPBASE/game/Msseax2.m3d $INSBASE/Tribes2/GameData/Msseax2.m3d + mv $TMPBASE/game/Msseax.m3d $INSBASE/Tribes2/GameData/Msseax.m3d + mv $TMPBASE/game/Mssfast.m3d $INSBASE/Tribes2/GameData/Mssfast.m3d + mv $TMPBASE/game/Mssv12.asi $INSBASE/Tribes2/GameData/Mssv12.asi + mv $TMPBASE/game/Mssv24.asi $INSBASE/Tribes2/GameData/Mssv24.asi + mv $TMPBASE/game/Mssv29.asi $INSBASE/Tribes2/GameData/Mssv29.asi + mv $TMPBASE/game/MSVCRT.dll $INSBASE/Tribes2/GameData/MSVCRT.dll + mv $TMPBASE/game/OpenGL2D3D.dll $INSBASE/Tribes2/GameData/OpenGL2D3D.dll + mv $TMPBASE/game/outdoorDeployableBarrel.cs $INSBASE/Tribes2/GameData/Classic/scripts/turrets/outdoorDeployableBarrel.cs + mv $TMPBASE/game/Permedia3.cs $INSBASE/Tribes2/GameData/Permedia3.cs + mv $TMPBASE/game/plasmaBarrelLarge.cs $INSBASE/Tribes2/GameData/Classic/scripts/turrets/plasmaBarrelLarge.cs + mv $TMPBASE/game/plasmabarrelPack.cs $INSBASE/Tribes2/GameData/Classic/scripts/packs/plasmabarrelPack.cs + mv $TMPBASE/game/plasma.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons/plasma.cs + mv $TMPBASE/game/player.cs $INSBASE/Tribes2/GameData/Classic/scripts/player.cs + mv $TMPBASE/game/practice.cs $INSBASE/Tribes2/GameData/Classic/scripts/practice.cs + mv $TMPBASE/game/PracticeCTFGame.cs $INSBASE/Tribes2/GameData/Classic/scripts/PracticeCTFGame.cs + mv $TMPBASE/game/projectiles.cs $INSBASE/Tribes2/GameData/Classic/scripts/projectiles.cs + mv $TMPBASE/game/Radeon.cs $INSBASE/Tribes2/GameData/Radeon.cs + mv $TMPBASE/game/Rage128.cs $INSBASE/Tribes2/GameData/Rage128.cs + mv $TMPBASE/game/Readme.txt $INSBASE/Tribes2/Readme.txt + mv $TMPBASE/game/repairpack.cs $INSBASE/Tribes2/GameData/Classic/scripts/packs/repairpack.cs + mv $TMPBASE/game/Reverb3.flt $INSBASE/Tribes2/GameData/Reverb3.flt + mv $TMPBASE/game/satchelCharge.cs $INSBASE/Tribes2/GameData/Classic/scripts/packs/satchelCharge.cs + mv $TMPBASE/game/scripts.vl2 $INSBASE/Tribes2/GameData/base/scripts.vl2 + mv $TMPBASE/game/sensorjammerpack.cs $INSBASE/Tribes2/GameData/Classic/scripts/packs/sensorjammerpack.cs + mv $TMPBASE/game/serverCommanderMap.cs $INSBASE/Tribes2/GameData/Classic/scripts/serverCommanderMap.cs + mv $TMPBASE/game/server.cs $INSBASE/Tribes2/GameData/Classic/scripts/server.cs + mv $TMPBASE/game/serverDefaults.cs $INSBASE/Tribes2/GameData/Classic/scripts/serverDefaults.cs + mv $TMPBASE/game/serverVehicleHud.cs $INSBASE/Tribes2/GameData/Classic/scripts/vehicles/serverVehicleHud.cs + mv $TMPBASE/game/shapes.vl2 $INSBASE/Tribes2/GameData/base/shapes.vl2 + mv $TMPBASE/game/shockLance.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons/shockLance.cs + mv $TMPBASE/game/SiegeGame.cs $INSBASE/Tribes2/GameData/Classic/scripts/SiegeGame.cs + mv $TMPBASE/game/SierraPatch.dll $INSBASE/Tribes2/GameData/SierraPatch.dll + mv $TMPBASE/game/SierraPt.dll $INSBASE/Tribes2/GameData/SierraPt.dll + mv $TMPBASE/game/SierraUp.cfg $INSBASE/Tribes2/GameData/SierraUp.cfg + mv $TMPBASE/game/SierraUp.exe $INSBASE/Tribes2/GameData/SierraUp.exe + mv $TMPBASE/game/skins.vl2 $INSBASE/Tribes2/GameData/base/skins.vl2 + mv $TMPBASE/game/Spanish\ Config.cs $INSBASE/Tribes2/GameData/base/prefs/Spanish\ Config.cs + mv $TMPBASE/game/staticShape.cs $INSBASE/Tribes2/GameData/Classic/scripts/staticShape.cs + mv $TMPBASE/game/station.cs $INSBASE/Tribes2/GameData/Classic/scripts/station.cs + mv $TMPBASE/game/SuDE.dll $INSBASE/Tribes2/GameData/SuDE.dll + mv $TMPBASE/game/SuES.dll $INSBASE/Tribes2/GameData/SuES.dll + mv $TMPBASE/game/SuFR.dll $INSBASE/Tribes2/GameData/SuFR.dll + mv $TMPBASE/game/SuIT.dll $INSBASE/Tribes2/GameData/SuIT.dll + mv $TMPBASE/game/supportClassic.cs $INSBASE/Tribes2/GameData/Classic/scripts/supportClassic.cs + mv $TMPBASE/game/T2IntroC15.avi $INSBASE/Tribes2/GameData/base/textures/T2IntroC15.avi + mv $TMPBASE/game/T2Res.dll $INSBASE/Tribes2/GameData/T2Res.dll + mv $TMPBASE/game/textures.vl2 $INSBASE/Tribes2/GameData/base/textures.vl2 + mv $TMPBASE/game/TNT.cs $INSBASE/Tribes2/GameData/TNT.cs + mv $TMPBASE/game/TR2final093-extras.vl2 $INSBASE/Tribes2/GameData/base/TR2final093-extras.vl2 + mv $TMPBASE/game/TR2final105-client.vl2 $INSBASE/Tribes2/GameData/base/TR2final105-client.vl2 + mv $TMPBASE/game/TR2final105-server.vl2 $INSBASE/Tribes2/GameData/base/TR2final105-server.vl2 + mv $TMPBASE/game/TR2HudPrefs.cs $INSBASE/Tribes2/GameData/base/prefs/TR2HudPrefs.cs + mv $TMPBASE/game/Tribes2.exe $INSBASE/Tribes2/GameData/Tribes2.exe + mv "$TMPBASE/game/Tribes2.exe.local" "$INSBASE/Tribes2/GameData/Tribes2.exe.local" + mv $TMPBASE/game/Tribes2.ico $INSBASE/Tribes2/GameData/base/Tribes2.ico + mv $TMPBASE/game/Tribes\ 2\ Manual.pdf $INSBASE/Tribes2/Manual/Tribes\ 2\ Manual.pdf + mv $TMPBASE/game/TribesLogin.exe $INSBASE/Tribes2/GameData/TribesLogin.exe + mv $TMPBASE/game/turret.cs $INSBASE/Tribes2/GameData/Classic/scripts/turret.cs + mv $TMPBASE/game/UKEULA.txt $INSBASE/Tribes2/GameData/base/UKEULA.txt + mv $TMPBASE/game/Unwise.exe $INSBASE/Tribes2/Unwise.exe + mv $TMPBASE/game/UpdatePatch.txt $INSBASE/Tribes2/GameData/UpdatePatch.txt + mv $TMPBASE/game/V2Profile.cs $INSBASE/Tribes2/GameData/V2Profile.cs + mv $TMPBASE/game/vehicle_bomber.cs $INSBASE/Tribes2/GameData/Classic/scripts/vehicles/vehicle_bomber.cs + mv $TMPBASE/game/vehicle.cs $INSBASE/Tribes2/GameData/Classic/scripts/vehicles/vehicle.cs + mv $TMPBASE/game/vehicle_havoc.cs $INSBASE/Tribes2/GameData/Classic/scripts/vehicles/vehicle_havoc.cs + mv $TMPBASE/game/vehicle_mpb.cs $INSBASE/Tribes2/GameData/Classic/scripts/vehicles/vehicle_mpb.cs + mv $TMPBASE/game/vehicle_shrike.cs $INSBASE/Tribes2/GameData/Classic/scripts/vehicles/vehicle_shrike.cs + mv $TMPBASE/game/vehicle_tank.cs $INSBASE/Tribes2/GameData/Classic/scripts/vehicles/vehicle_tank.cs + mv $TMPBASE/game/vehicle_wildcat.cs $INSBASE/Tribes2/GameData/Classic/scripts/vehicles/vehicle_wildcat.cs + mv $TMPBASE/game/Viper.cs $INSBASE/Tribes2/GameData/Viper.cs + mv $TMPBASE/game/voice.vl2 $INSBASE/Tribes2/GameData/base/voice.vl2 + mv $TMPBASE/game/volcanic.mp3 $INSBASE/Tribes2/GameData/base/music/volcanic.mp3 + mv $TMPBASE/game/Voodoo3.cs $INSBASE/Tribes2/GameData/Voodoo3.cs + mv $TMPBASE/game/Voodoo5.cs $INSBASE/Tribes2/GameData/Voodoo5.cs + mv $TMPBASE/game/WASDConfig.cs $INSBASE/Tribes2/GameData/base/prefs/WASDConfig.cs + mv $TMPBASE/game/weapons.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapons.cs + mv $TMPBASE/game/weapTurretCode.cs $INSBASE/Tribes2/GameData/Classic/scripts/weapTurretCode.cs + mv $TMPBASE/game/zz_Classic_client_v1.vl2 $INSBASE/Tribes2/GameData/base/zz_Classic_client_v1.vl2 + mv $TMPBASE/game/zz.ini $INSBASE/Tribes2/GameData/zz.ini -echo "Removing old classic version v1.1 from base install" -rm -rf $INSBASE/tribes2/classic + echo "T2 installed!" +fi + +echo "Running Patches and Updates..." +# -- install tribesnext silently +[ -f $TMPBASE/TribesNext_rc2a.exe ] && /usr/bin/wine $TMPBASE/TribesNext_rc2a.exe /S + + +# -- extract updated linux version and replace the existing installation +[ -f $TMPBASE/TribesNext_RC2_LinuxVersion.zip ] && /usr/bin/unzip -o $TMPBASE/TribesNext_RC2_LinuxVersion.zip -d $INSBASE/Tribes2/GameData 2>&1 > /dev/null -echo "Installing Classic Mod v1.5.2" # -- update Classic mod to v1.5.2 [ -f $TMPBASE/classic_v152.zip ] && /usr/bin/unzip -o $TMPBASE/classic_v152.zip -d $TMPBASE/classic 2>&1 > /dev/null [ -f $TMPBASE/classic/classic_files_v152.zip ] && /usr/bin/unzip -o $TMPBASE/classic/classic_files_v152.zip -d $TMPBASE/classic 2>&1 > /dev/null # -- move all extract files into place if [ -f $TMPBASE/classic/classic_files_v152.zip ] then - mv -f $TMPBASE/classic/base/zz_classic_client_v1.vl2 $INSBASE/tribes2/base/zz_Classic_client_v1.vl2 - cp -r $TMPBASE/classic/classic/. $INSBASE/tribes2/Classic/. +# /home/gameserv/.wine32/drive_c/Dynamix/Tribes2/GameData/Classic + mv -f $TMPBASE/classic/base/zz_classic_client_v1.vl2 $INSBASE/Tribes2/GameData/base/zz_Classic_client_v1.vl2 + cp -r $TMPBASE/classic/classic/. $INSBASE/Tribes2/GameData/Classic/. fi +echo "Finished setting up T2!" -# -- install LAN fix -echo "Installing Tribes2 Lan Fix (Linux)..." -# -- run the sh and output the patched file (tribes2d-lan.dynamic) -if [ -f $TMPBASE/tribes2-lan-fix-linux.tar.gz ] -then - mkdir -p $TMPBASE/lan-fix - tar -xzvf $TMPBASE/tribes2-lan-fix-linux.tar.gz -C $TMPBASE/lan-fix 2>&1 > /dev/null - cp -r $TMPBASE/lan-fix/. $INSBASE/tribes2/. - cd $INSBASE/tribes2/ - xdelta3 decode -s tribes2d.dynamic tribes2-lan-fix-linux.xdelta tribes2d-lan.dynamic - chmod 755 tribes2d-lan.dynamic - echo "Finished setting up T2!" -fi - - -echo "Binding console.log to console.log in logs volume" -touch $INSBASE/tribes2/console.log -[ -f $INSBASE/tribes2/Classic/logs/console.log ] && touch $INSBASE/tribes2/Classic/logs/console.log -ln -sf $INSBASE/tribes2/Classic/logs/console.log $INSBASE/tribes2/console.log - - -exit 0 \ No newline at end of file +exit 0 diff --git a/docker-compose.yml b/docker-compose.yml index 0f9d0ac..32114c8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -56,6 +56,8 @@ services: T2_LoadScreenMOTD3: " " T2_LoadScreenMOTD4: " " secrets: + - t2.superadmin.list + - t2.admin.list - t2.admin.password - t2.classic.superadmin.password - t2.classic.telnet.password @@ -75,16 +77,10 @@ services: - serverStats:/home/gameserv/.loki/tribes2/Classic/serverStats - stats:/home/gameserv/.loki/tribes2/Classic/stats - logs:/home/gameserv/.loki/tribes2/Classic/logs - + networks: - t2-net - healthcheck: - test: ["CMD-SHELL", "nc -z -u 127.0.0.1 28000 || exit 1"] - interval: 10s - timeout: 5s - retries: 5 - deploy: replicas: 1 update_config: @@ -101,12 +97,18 @@ volumes: serverStats: stats: logs: - + networks: t2-net: driver: overlay secrets: + t2.superadmin.list: + external: true + name: t2.superadmin.list.v1 + t2.admin.list: + external: true + name: t2.admin.list.v1 t2.admin.password: external: true name: t2.admin.password.v1