├── CONTRIBUTING.md ├── LICENSE ├── README.asciidoc ├── map ├── MapImg.jpg ├── ServerGrid.ServerOnly.json └── ServerGrid.json ├── netinstall.sh └── tools ├── atlasmanager ├── atlasmanager.cfg ├── bash_completion └── atlasmanager ├── install.sh ├── instance.cfg.example ├── lsb └── atlasdaemon ├── migrate-config.sh ├── migrate-main-instance.sh ├── openrc └── atlasdaemon ├── redhat └── atlasdaemon ├── systemd ├── atlasmanager.init ├── atlasmanager.service └── atlasmanager@.service ├── uninstall-user.sh ├── uninstall.sh └── upstart ├── atlasmanager-instance.conf └── atlasmanager.conf /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribute to ATLAS Server Tools 2 | 3 | This is an open source project, so feel free to fork it, improve it and send pull requests! 4 | 5 | ## Keep your fork updated 6 | 7 | When you fork our repository and your version gets outdated, please, update it using `git pull --rebase`, in this way you will not create any additional useless commit. 8 | 9 | ## Got an idea? 10 | 11 | If you have a nice idea you'd like to add to this project, please, first open a new issue describing your idea, so everybody can contribute to it and you'll be sure that nobody is working on the same thing. 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Fez Vrasta 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.asciidoc: -------------------------------------------------------------------------------- 1 | = ATLAS Linux Server Tools 2 | 3 | This tool allows you to manage any ATLAS linux server without having to remember long commands. 4 | It provides a lot of features, to get the full list check the https://github.com/BoiseComputer/atlas-server-tools/wiki/Command-Line-Usage[Usage] Wiki section. 5 | 6 | Quick Start 7 | ----------- 8 | 9 | https://github.com/BoiseComputer/atlas-server-tools/wiki/Quick-Start[View Quick Start Guide] 10 | 11 | I have put together a set of commands to help you get a 2x2 server up as quicky as possible. The setup is mostly automated and and should have a server up and running within minutes. You will want to go in and adjust server names and any customization you would like after the install and setup are fully completed. 12 | 13 | Installation 14 | ------------ 15 | 16 | Prerequisites 17 | ~~~~~~~~~~~~~ 18 | 19 | ATLAS Server Tools requires certain packages be installed in order to function correctly. 20 | 21 | {empty} + 22 | 23 | WARNING: There is an issue when running ARK and ATLAS on the same machine. ARK requires Curl 4 and ATLAS requires Curl 3. As a workaround a special package containing both versions must be installed. + 24 | 25 | https://launchpad.net/~xapienz/+archive/ubuntu/curl34[Curl 3 and 4 Instructions] 26 | 27 | {empty} + 28 | 29 | IMPORTANT: If running under CentOS or RHEL, you will need the following packages installed: 30 | 31 | ``` 32 | perl-Compress-Zlib 33 | curl 34 | lsof 35 | glibc.i686 36 | libstdc++.i686 37 | bzip2 38 | jq 39 | ``` 40 | {empty} + 41 | 42 | IMPORTANT: If running under Debian or Ubuntu, you will need the following packages installed: 43 | 44 | ``` 45 | perl-modules 46 | curl 47 | lsof 48 | libc6-i386 49 | lib32gcc1 50 | bzip2 51 | jq 52 | ``` 53 | 54 | Common prerequisites which should normally already be installed are: 55 | ``` 56 | >=bash-4.0 57 | >=coreutils-7.6 58 | findutils 59 | perl 60 | rsync 61 | sed 62 | tar 63 | ``` 64 | {empty} + 65 | To use ATLAS Server Tools, you will need to install **SteamCMD** following this guide: + 66 | https://developer.valvesoftware.com/wiki/SteamCMD#Linux + 67 | We assume you have created the `steam` user to store steamcmd and your ATLAS server. + 68 | 69 | Requirements 70 | ~~~~~~~~~~~~ 71 | 72 | To allow your ATLAS server to communicate with the outside you have to open some ports in your firewall: + 73 | *(Example port ranges for a 4 server grid)* 74 | ``` 75 | 5755X = Query Ports 76 | 575X = Game Client Ports (Leave + 1 space between servers until requirement is confirmed by Grapeshot) 77 | 3233X = RCON Ports 78 | 2700X = Seamless Ports 79 | ``` 80 | 81 | {empty} + 82 | 83 | .#*2x2 Server Port Mapping Example (4 servers)*# + 84 | TIP: The Game Port +1 usage has not been confirmed by Grapeshot. Subject to change. 85 | 86 | |==== 87 | |Server |Grid|X/Y|Query Port|Game Port|Game Port +1|RCON Port| Seamless Port 88 | |AtlasServer_01|A1|0x0|57550|5750|5751|32330|27000 89 | |AtlasServer_02|B1|0x1|57551|5752|5753|32331|27001 90 | |AtlasServer_03|A2|1x0|57552|5754|5755|32332|27002 91 | |AtlasServer_04|B2|1x1|57553|5756|5757|32333|27003 92 | |==== 93 | 94 | 95 | .How to open these ports on your Linux firewall: 96 | ```sh 97 | iptables -I INPUT -p udp --match multiport --dport 57550,57551,57552,57553 -j ACCEPT 98 | iptables -I INPUT -p tcp --match multiport --dport 57550,57551,57552,57553 -j ACCEPT 99 | iptables -I INPUT -p udp --match multiport --dport 5750,5751,5752,5753,5754,5755,5756,5757 -j ACCEPT 100 | iptables -I INPUT -p tcp --match multiport --dport 32330,32331,32332,32333 -j ACCEPT 101 | iptables -I INPUT -p tcp --match multiport --dport 27000,27001,27002,27003 -j ACCEPT 102 | ``` 103 | 104 | 105 | Install ATLAS Server Tools 106 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ 107 | 108 | To install ATLAS Server Tools run this command: 109 | 110 | [source,sh] 111 | curl -sL http://git.io/fh4HA | sudo bash -s steam 112 | 113 | NB: You may want to change the `bash -s` parameter to fit your steam user if different from `steam`. 114 | 115 | This will copy the `atlasmanager` script and its daemon to the proper directories and will create an empty log directory in `/var/log` for ATLAS Server Tools. 116 | 117 | To instead perform a user-install of ATLAS Server Tools as an unprivileged user, run this command: 118 | 119 | [source,sh] 120 | curl -sL http://git.io/fh4HA | bash -s -- --me 121 | 122 | 123 | Configuration 124 | ~~~~~~~~~~~~~ 125 | 126 | Stored in `/etc/atlasmanager/atlasmanager.cfg` and `/etc/atlasmanager/instances/.cfg` you can find the variables needed to start the server, like the port numbers, the system environment variables and so on. 127 | 128 | You will need to modify these files with any options you wish to give to the server, and any 129 | paths that are non-standard in your environment (e.g. one common one is the path to the appinfo cache). 130 | 131 | See <> for options. 132 | 133 | Also, in these files, you can specify any parameter you want to add to the startup command of ATLAS server. 134 | These parameters must be prefixed by the `atlas_` string, some example could be: 135 | 136 | [source,sh] 137 | atlas_SessionName="My ATLAS server" 138 | atlas_MaxPlayers=50 139 | atlas_ServerPVE=False 140 | atlas_DifficultyOffset=1 141 | 142 | Your session name may not contain special characters (eg. `!![EU]!! Aw&some ATLAS`) as it could break the startup command. 143 | In this case you may want to comment out the `atlas_SessionName` variable and define it inside your **GameUserSettings.ini** file instead. 144 | 145 | To specify an option without an argument (e.g. `bRawSockets`), specify an empty argument (e.g. `atlas_bRawSockets=""`). 146 | 147 | To specify a dash-option without an argument (e.g. `-log`), add the option="" prefixed with `atlasflag_` (e.g. `atlasflag_log=""`). 148 | 149 | To specify a dash-option with an argument (e.g. `-StructureDestructionTag=DestroySwampSnowStructures`), add the option=value prefixed with `atlasopt_` (e.g. `atlasopt_StructureDestructionTag=DestroySwampSnowStructures`). 150 | 151 | You can override or add variables for a specific system user creating a file called `.atlasmanager.cfg` in the home directory of the system user. 152 | 153 | Each server instance must have its own set of ports. 154 | These ports are specified using the `atlas_Port`, `atlas_QueryPort` and `atlas_RCONPort` settings in the instance configuration. 155 | If the QueryPort or Port settings are shared between multiple instances, then the server will often either crash or hang 156 | without being able to be queried. 157 | If the RCONPort setting is shared between multiple instances, the server will hang at 0/0 players. 158 | 159 | See https://github.com/BoiseComputer/atlas-server-tools/wiki/Configuration-Files[Configuration Files] Wiki for more options. 160 | 161 | 162 | Install ATLAS Server 163 | ~~~~~~~~~~~~~~~~~~~~ 164 | 165 | To install ATLAS Server just run this command as normal user: 166 | 167 | [source,sh] 168 | atlasmanager install 169 | -------------------------------------------------------------------------------- /map/MapImg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BoiseComputer/atlas-server-tools/589ea66e1a6e8c9b3072dc3af00875233e900efc/map/MapImg.jpg -------------------------------------------------------------------------------- /map/ServerGrid.ServerOnly.json: -------------------------------------------------------------------------------- 1 | { 2 | "LocalS3URL": "", 3 | "LocalS3AccessKeyId": "", 4 | "LocalS3SecretKey": "", 5 | "LocalS3BucketName": "", 6 | "LocalS3Region": "", 7 | "TribeLogConfig": { 8 | "MaxRedisEntries": 1000, 9 | "BackupMode": "off", 10 | "MaxFileHistory": 10, 11 | "HttpBackupURL": "", 12 | "HttpAPIKey": "", 13 | "S3KeyPrefix": "" 14 | }, 15 | "SharedLogConfig": { 16 | "FetchRateSec": 60, 17 | "SnapshotCleanupSec": 900, 18 | "SnapshotRateSec": 1800, 19 | "SnapshotExpirationHours": 48, 20 | "BackupMode": "off", 21 | "MaxFileHistory": 10, 22 | "HttpBackupURL": "", 23 | "HttpAPIKey": "", 24 | "S3KeyPrefix": "" 25 | }, 26 | "TravelDataConfig": { 27 | "BackupMode": "off", 28 | "MaxFileHistory": 10, 29 | "HttpBackupURL": "", 30 | "HttpAPIKey": "", 31 | "S3KeyPrefix": "" 32 | }, 33 | "DatabaseConnections": [ 34 | { 35 | "Name": "Default", 36 | "URL": "127.0.0.1", 37 | "Port": 6379, 38 | "Password": "foobared" 39 | }, 40 | { 41 | "Name": "TribeDB", 42 | "URL": "127.0.0.1", 43 | "Port": 6379, 44 | "Password": "foobared" 45 | }, 46 | { 47 | "Name": "TravelDataDB", 48 | "URL": "127.0.0.1", 49 | "Port": 6379, 50 | "Password": "foobared" 51 | }, 52 | { 53 | "Name": "TerritoryDB", 54 | "URL": "127.0.0.1", 55 | "Port": 6379, 56 | "Password": "foobared" 57 | }, 58 | { 59 | "Name": "LogDB", 60 | "URL": "127.0.0.1", 61 | "Port": 6379, 62 | "Password": "foobared" 63 | }, 64 | { 65 | "Name": "TradeDB", 66 | "URL": "127.0.0.1", 67 | "Port": 6379, 68 | "Password": "foobared" 69 | } 70 | ] 71 | } 72 | -------------------------------------------------------------------------------- /map/ServerGrid.json: -------------------------------------------------------------------------------- 1 | { 2 | "BaseServerArgs": "%MapName%%GridLocation%?AltSaveDirectoryName=%AltSaveDir%?MaxPlayers=70?ReservedPlayerSlots=0?QueryPort=%QUERYPORT%?Port=%PORT%?SeamlessIP=%MACHINEIP%?MapPlayerLocation=true%AdditionalMapArguements% -log -server -culture=en -NoCrashDialog -BattlEye", 3 | "gridSize": 1400000.0, 4 | "MetaWorldURL": "", 5 | "WorldFriendlyName": "ATLAS Test", 6 | "WorldAtlasId": "123456777", 7 | "AuthListURL": "", 8 | "WorldAtlasPassword": "", 9 | "ModIDs": "", 10 | "MapImageURL": "", 11 | "totalGridsX": 2, 12 | "totalGridsY": 2, 13 | "bUseUTCTime": true, 14 | "columnUTCOffset": 0.0, 15 | "Day0": "2018-07-16 17:05:21", 16 | "globalTransitionMinZ": 0.0, 17 | "AdditionalCmdLineParams": "", 18 | "OverrideShooterGameModeDefaultGameIni": {}, 19 | "LocalS3URL": "", 20 | "LocalS3AccessKeyId": "", 21 | "LocalS3SecretKey": "", 22 | "LocalS3BucketName": "", 23 | "LocalS3Region": "", 24 | "globalGameplaySetup": "(QuestEntries=((QuestID=0,CompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Icon_PowerStonesQuest_Complete.Icon_PowerStonesQuest_Complete',UncompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Icon_PowerStonesQuest_Uncomplete.Icon_PowerStonesQuest_Uncomplete',QuestName=\"Voyage of Power\",QuestDescription=\"Journey across the ATLAS to hunt for the Power Stones, and then bring them to the Center Maw!\",QuestPointsOfInterest=((PointOfInterestID=0,PointOfInterestName=\"Power Stone 1\",WorldMapPosition=(X=0.966667,Y=0.900000),CompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon.Item_InfinityGem_Icon',UncompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10'),(PointOfInterestID=1,PointOfInterestName=\"Power Stone 2\",WorldMapPosition=(X=0.166667,Y=0.366667),CompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon2.Item_InfinityGem_Icon2',UncompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10'),(PointOfInterestID=2,PointOfInterestName=\"Power Stone 3\",WorldMapPosition=(X=0.233333,Y=0.766667),CompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon3.Item_InfinityGem_Icon3',UncompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10'),(PointOfInterestID=3,PointOfInterestName=\"Power Stone 4\",WorldMapPosition=(X=0.366667,Y=0.500000),CompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon4.Item_InfinityGem_Icon4',UncompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10'),(PointOfInterestID=4,PointOfInterestName=\"Power Stone 5\",WorldMapPosition=(X=0.433333,Y=0.16667),CompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon5.Item_InfinityGem_Icon5',UncompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10'),(PointOfInterestID=5,PointOfInterestName=\"Power Stone 6\",WorldMapPosition=(X=0.500000,Y=0.366667),CompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon6.Item_InfinityGem_Icon6',UncompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10'),(PointOfInterestID=6,PointOfInterestName=\"Power Stone 7\",WorldMapPosition=(X=0.833333,Y=0.766667),CompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon7.Item_InfinityGem_Icon7',UncompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10'),(PointOfInterestID=7,PointOfInterestName=\"Power Stone 8\",WorldMapPosition=(X=0.966667,Y=0.433333),CompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon8.Item_InfinityGem_Icon8',UncompletedIcon=Texture2D'/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10'),(PointOfInterestID=8,PointOfInterestName=\"Power Stone 9 - Ghost Ship Route\",WorldMapPosition=(X=0.500000,Y=0.765000),CompletedIcon=Texture2D'/Game/Atlas/UI/Icons/HUD_GhostShip_Icon_Complete.HUD_GhostShip_Icon_Complete',UncompletedIcon=Texture2D'/Game/Atlas/UI/Icons/HUD_GhostShip_Icon.HUD_GhostShip_Icon'),(PointOfInterestID=9,PointOfInterestName=\"Bring all 9 Power Stones to Center Maw\",WorldMapPosition=(X=0.500000,Y=0.500000),CompletedIcon=Texture2D'/Game/Atlas/UI/Icons/HUD_BossLocation_Icon_Complete.HUD_BossLocation_Icon_Complete',UncompletedIcon=Texture2D'/Game/Atlas/UI/Icons/HUD_BossLocation_Icon.HUD_BossLocation_Icon')))))", 25 | "TribeLogConfig": { 26 | "MaxRedisEntries": 1000, 27 | "BackupMode": "off", 28 | "MaxFileHistory": 10, 29 | "HttpBackupURL": "", 30 | "HttpAPIKey": "", 31 | "S3KeyPrefix": "" 32 | }, 33 | "SharedLogConfig": { 34 | "FetchRateSec": 60, 35 | "SnapshotCleanupSec": 900, 36 | "SnapshotRateSec": 1800, 37 | "SnapshotExpirationHours": 48, 38 | "BackupMode": "off", 39 | "MaxFileHistory": 10, 40 | "HttpBackupURL": "", 41 | "HttpAPIKey": "", 42 | "S3KeyPrefix": "" 43 | }, 44 | "TravelDataConfig": { 45 | "BackupMode": "off", 46 | "MaxFileHistory": 10, 47 | "HttpBackupURL": "", 48 | "HttpAPIKey": "", 49 | "S3KeyPrefix": "" 50 | }, 51 | "DatabaseConnections": [ 52 | { 53 | "Name": "Default", 54 | "URL": "127.0.0.1", 55 | "Port": 6379, 56 | "Password": "foobared" 57 | }, 58 | { 59 | "Name": "TribeDB", 60 | "URL": "127.0.0.1", 61 | "Port": 6379, 62 | "Password": "foobared" 63 | }, 64 | { 65 | "Name": "TravelDataDB", 66 | "URL": "127.0.0.1", 67 | "Port": 6379, 68 | "Password": "foobared" 69 | }, 70 | { 71 | "Name": "TerritoryDB", 72 | "URL": "127.0.0.1", 73 | "Port": 6379, 74 | "Password": "foobared" 75 | }, 76 | { 77 | "Name": "LogDB", 78 | "URL": "127.0.0.1", 79 | "Port": 6379, 80 | "Password": "foobared" 81 | } 82 | ], 83 | "coordsScaling": 0.00015, 84 | "showServerInfo": false, 85 | "showDiscoZoneInfo": true, 86 | "showShipPathsInfo": false, 87 | "showIslandNames": true, 88 | "showBackground": true, 89 | "backgroundImgPath": "./WaterTiles/instinctworld-autoscaling.png", 90 | "discoZonesImagePath": "Resources/discoZoneBox.png", 91 | "servers": [ 92 | { 93 | "gridX": 0, 94 | "gridY": 0, 95 | "MachineIdTag": "AtlasServer_01", 96 | "ip": "123.456.789.0", 97 | "name": "Tropical Freeport", 98 | "port": 57550, 99 | "gamePort": 5750, 100 | "seamlessDataPort": 27000, 101 | "isHomeServer": true, 102 | "AdditionalCmdLineParams": "", 103 | "OverrideShooterGameModeDefaultGameIni": {}, 104 | "floorZDist": 0, 105 | "utcOffset": 0, 106 | "transitionMinZ": 0, 107 | "GlobalBiomeSeamlessServerGridPreOffsetValues": "", 108 | "GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater": "", 109 | "OceanDinoDepthEntriesOverride": "", 110 | "oceanFloatsamCratesOverride": "", 111 | "treasureMapLootTablesOverride": "", 112 | "oceanEpicSpawnEntriesOverrideTemplateName": "", 113 | "NPCShipSpawnEntriesOverrideTemplateName": "", 114 | "regionOverrides": "", 115 | "waterColorR": 0.0, 116 | "waterColorG": 0.0, 117 | "waterColorB": 0.0, 118 | "skyStyleIndex": 0, 119 | "sublevels": [ 120 | { 121 | "name": "Cay_K", 122 | "additionalTranslationX": -13333.0625, 123 | "additionalTranslationY": -326666.344, 124 | "additionalTranslationZ": 0.0, 125 | "additionalRotationPitch": 0.0, 126 | "additionalRotationYaw": -12.5155106, 127 | "additionalRotationRoll": 0.0, 128 | "id": 1130, 129 | "landscapeMaterialOverride": -1 130 | }, 131 | { 132 | "name": "Cay_K_Far_01E", 133 | "additionalTranslationX": -13333.0625, 134 | "additionalTranslationY": -326666.344, 135 | "additionalTranslationZ": 0.0, 136 | "additionalRotationPitch": 0.0, 137 | "additionalRotationYaw": -12.5155106, 138 | "additionalRotationRoll": 0.0, 139 | "id": 1130, 140 | "landscapeMaterialOverride": -1 141 | }, 142 | { 143 | "name": "Cay_K_Farthest_01E", 144 | "additionalTranslationX": -13333.0625, 145 | "additionalTranslationY": -326666.344, 146 | "additionalTranslationZ": 0.0, 147 | "additionalRotationPitch": 0.0, 148 | "additionalRotationYaw": -12.5155106, 149 | "additionalRotationRoll": 0.0, 150 | "id": 1130, 151 | "landscapeMaterialOverride": -1 152 | }, 153 | { 154 | "name": "Cay_K_Near_01E", 155 | "additionalTranslationX": -13333.0625, 156 | "additionalTranslationY": -326666.344, 157 | "additionalTranslationZ": 0.0, 158 | "additionalRotationPitch": 0.0, 159 | "additionalRotationYaw": -12.5155106, 160 | "additionalRotationRoll": 0.0, 161 | "id": 1130, 162 | "landscapeMaterialOverride": -1 163 | }, 164 | { 165 | "name": "Cay_K_Marine_Warm_Near", 166 | "additionalTranslationX": -13333.0625, 167 | "additionalTranslationY": -326666.344, 168 | "additionalTranslationZ": 0.0, 169 | "additionalRotationPitch": 0.0, 170 | "additionalRotationYaw": -12.5155106, 171 | "additionalRotationRoll": 0.0, 172 | "id": 1130, 173 | "landscapeMaterialOverride": -1 174 | }, 175 | { 176 | "name": "Cay_K", 177 | "additionalTranslationX": -40000.125, 178 | "additionalTranslationY": 326666.875, 179 | "additionalTranslationZ": 0.0, 180 | "additionalRotationPitch": 0.0, 181 | "additionalRotationYaw": 174.6899, 182 | "additionalRotationRoll": 0.0, 183 | "id": 1131, 184 | "landscapeMaterialOverride": -1 185 | }, 186 | { 187 | "name": "Cay_K_Far_01E", 188 | "additionalTranslationX": -40000.125, 189 | "additionalTranslationY": 326666.875, 190 | "additionalTranslationZ": 0.0, 191 | "additionalRotationPitch": 0.0, 192 | "additionalRotationYaw": 174.6899, 193 | "additionalRotationRoll": 0.0, 194 | "id": 1131, 195 | "landscapeMaterialOverride": -1 196 | }, 197 | { 198 | "name": "Cay_K_Farthest_01E", 199 | "additionalTranslationX": -40000.125, 200 | "additionalTranslationY": 326666.875, 201 | "additionalTranslationZ": 0.0, 202 | "additionalRotationPitch": 0.0, 203 | "additionalRotationYaw": 174.6899, 204 | "additionalRotationRoll": 0.0, 205 | "id": 1131, 206 | "landscapeMaterialOverride": -1 207 | }, 208 | { 209 | "name": "Cay_K_Near_01E", 210 | "additionalTranslationX": -40000.125, 211 | "additionalTranslationY": 326666.875, 212 | "additionalTranslationZ": 0.0, 213 | "additionalRotationPitch": 0.0, 214 | "additionalRotationYaw": 174.6899, 215 | "additionalRotationRoll": 0.0, 216 | "id": 1131, 217 | "landscapeMaterialOverride": -1 218 | }, 219 | { 220 | "name": "Cay_K_Marine_Warm_Near", 221 | "additionalTranslationX": -40000.125, 222 | "additionalTranslationY": 326666.875, 223 | "additionalTranslationZ": 0.0, 224 | "additionalRotationPitch": 0.0, 225 | "additionalRotationYaw": 174.6899, 226 | "additionalRotationRoll": 0.0, 227 | "id": 1131, 228 | "landscapeMaterialOverride": -1 229 | }, 230 | { 231 | "name": "Cay_K", 232 | "additionalTranslationX": 326666.875, 233 | "additionalTranslationY": -53333.5, 234 | "additionalTranslationZ": 0.0, 235 | "additionalRotationPitch": 0.0, 236 | "additionalRotationYaw": 94.17583, 237 | "additionalRotationRoll": 0.0, 238 | "id": 1132, 239 | "landscapeMaterialOverride": -1 240 | }, 241 | { 242 | "name": "Cay_K_Far_01E", 243 | "additionalTranslationX": 326666.875, 244 | "additionalTranslationY": -53333.5, 245 | "additionalTranslationZ": 0.0, 246 | "additionalRotationPitch": 0.0, 247 | "additionalRotationYaw": 94.17583, 248 | "additionalRotationRoll": 0.0, 249 | "id": 1132, 250 | "landscapeMaterialOverride": -1 251 | }, 252 | { 253 | "name": "Cay_K_Farthest_01E", 254 | "additionalTranslationX": 326666.875, 255 | "additionalTranslationY": -53333.5, 256 | "additionalTranslationZ": 0.0, 257 | "additionalRotationPitch": 0.0, 258 | "additionalRotationYaw": 94.17583, 259 | "additionalRotationRoll": 0.0, 260 | "id": 1132, 261 | "landscapeMaterialOverride": -1 262 | }, 263 | { 264 | "name": "Cay_K_Near_01E", 265 | "additionalTranslationX": 326666.875, 266 | "additionalTranslationY": -53333.5, 267 | "additionalTranslationZ": 0.0, 268 | "additionalRotationPitch": 0.0, 269 | "additionalRotationYaw": 94.17583, 270 | "additionalRotationRoll": 0.0, 271 | "id": 1132, 272 | "landscapeMaterialOverride": -1 273 | }, 274 | { 275 | "name": "Cay_K_Marine_Warm_Near", 276 | "additionalTranslationX": 326666.875, 277 | "additionalTranslationY": -53333.5, 278 | "additionalTranslationZ": 0.0, 279 | "additionalRotationPitch": 0.0, 280 | "additionalRotationYaw": 94.17583, 281 | "additionalRotationRoll": 0.0, 282 | "id": 1132, 283 | "landscapeMaterialOverride": -1 284 | }, 285 | { 286 | "name": "Cay_K", 287 | "additionalTranslationX": -413333.344, 288 | "additionalTranslationY": -53333.375, 289 | "additionalTranslationZ": 0.0, 290 | "additionalRotationPitch": 0.0, 291 | "additionalRotationYaw": -104.03624, 292 | "additionalRotationRoll": 0.0, 293 | "id": 1133, 294 | "landscapeMaterialOverride": -1 295 | }, 296 | { 297 | "name": "Cay_K_Far_01E", 298 | "additionalTranslationX": -413333.344, 299 | "additionalTranslationY": -53333.375, 300 | "additionalTranslationZ": 0.0, 301 | "additionalRotationPitch": 0.0, 302 | "additionalRotationYaw": -104.03624, 303 | "additionalRotationRoll": 0.0, 304 | "id": 1133, 305 | "landscapeMaterialOverride": -1 306 | }, 307 | { 308 | "name": "Cay_K_Farthest_01E", 309 | "additionalTranslationX": -413333.344, 310 | "additionalTranslationY": -53333.375, 311 | "additionalTranslationZ": 0.0, 312 | "additionalRotationPitch": 0.0, 313 | "additionalRotationYaw": -104.03624, 314 | "additionalRotationRoll": 0.0, 315 | "id": 1133, 316 | "landscapeMaterialOverride": -1 317 | }, 318 | { 319 | "name": "Cay_K_Near_01E", 320 | "additionalTranslationX": -413333.344, 321 | "additionalTranslationY": -53333.375, 322 | "additionalTranslationZ": 0.0, 323 | "additionalRotationPitch": 0.0, 324 | "additionalRotationYaw": -104.03624, 325 | "additionalRotationRoll": 0.0, 326 | "id": 1133, 327 | "landscapeMaterialOverride": -1 328 | }, 329 | { 330 | "name": "Cay_K_Marine_Warm_Near", 331 | "additionalTranslationX": -413333.344, 332 | "additionalTranslationY": -53333.375, 333 | "additionalTranslationZ": 0.0, 334 | "additionalRotationPitch": 0.0, 335 | "additionalRotationYaw": -104.03624, 336 | "additionalRotationRoll": 0.0, 337 | "id": 1133, 338 | "landscapeMaterialOverride": -1 339 | } 340 | ], 341 | "lastModified": "2018-12-20T04:03:27.6161064Z", 342 | "lastImageOverride": "0001-01-01T00:00:00", 343 | "islandLocked": false, 344 | "discoLocked": false, 345 | "pathsLocked": false, 346 | "extraSublevels": [], 347 | "totalExtraSublevels": [ 348 | "MasterIBL_Tropical", 349 | "MasterIBL_Tropical_Canopy_Oak", 350 | "MasterIBL_Tropical_Canopy_RE" 351 | ], 352 | "islandInstances": [ 353 | { 354 | "name": "Cay_K_TR_E", 355 | "id": 1130, 356 | "spawnerOverrides": {}, 357 | "minTreasureQuality": -1.0, 358 | "maxTreasureQuality": -1.0, 359 | "useNpcVolumesForTreasures": false, 360 | "useLevelBoundsForTreasures": true, 361 | "prioritizeVolumesForTreasures": false, 362 | "islandTreasureBottleSupplyCrateOverrides": "", 363 | "spawnPointRegionOverride": 0, 364 | "worldX": 686666.938, 365 | "worldY": 373333.656, 366 | "rotation": -12.5155106 367 | }, 368 | { 369 | "name": "Cay_K_TR_E", 370 | "id": 1131, 371 | "spawnerOverrides": {}, 372 | "minTreasureQuality": -1.0, 373 | "maxTreasureQuality": -1.0, 374 | "useNpcVolumesForTreasures": false, 375 | "useLevelBoundsForTreasures": true, 376 | "prioritizeVolumesForTreasures": false, 377 | "islandTreasureBottleSupplyCrateOverrides": "", 378 | "spawnPointRegionOverride": 2, 379 | "worldX": 659999.9, 380 | "worldY": 1026666.88, 381 | "rotation": 174.6899 382 | }, 383 | { 384 | "name": "Cay_K_TR_E", 385 | "id": 1132, 386 | "spawnerOverrides": {}, 387 | "minTreasureQuality": -1.0, 388 | "maxTreasureQuality": -1.0, 389 | "useNpcVolumesForTreasures": false, 390 | "useLevelBoundsForTreasures": true, 391 | "prioritizeVolumesForTreasures": false, 392 | "islandTreasureBottleSupplyCrateOverrides": "", 393 | "spawnPointRegionOverride": 1, 394 | "worldX": 1026666.88, 395 | "worldY": 646666.5, 396 | "rotation": 94.17583 397 | }, 398 | { 399 | "name": "Cay_K_TR_E", 400 | "id": 1133, 401 | "spawnerOverrides": {}, 402 | "minTreasureQuality": -1.0, 403 | "maxTreasureQuality": -1.0, 404 | "useNpcVolumesForTreasures": false, 405 | "useLevelBoundsForTreasures": true, 406 | "prioritizeVolumesForTreasures": false, 407 | "islandTreasureBottleSupplyCrateOverrides": "", 408 | "spawnPointRegionOverride": 3, 409 | "worldX": 286666.656, 410 | "worldY": 646666.6, 411 | "rotation": -104.03624 412 | } 413 | ], 414 | "discoZones": [], 415 | "spawnRegions": [ 416 | { 417 | "name": "North" 418 | }, 419 | { 420 | "name": "East" 421 | }, 422 | { 423 | "name": "South" 424 | }, 425 | { 426 | "name": "West" 427 | } 428 | ], 429 | "serverTemplateName": "Tropical" 430 | }, 431 | { 432 | "gridX": 0, 433 | "gridY": 1, 434 | "MachineIdTag": "AtlasServer_02", 435 | "ip": "123.456.789.0", 436 | "name": "", 437 | "port": 57551, 438 | "gamePort": 5752, 439 | "seamlessDataPort": 27001, 440 | "isHomeServer": false, 441 | "AdditionalCmdLineParams": "", 442 | "OverrideShooterGameModeDefaultGameIni": {}, 443 | "floorZDist": 0, 444 | "utcOffset": 0, 445 | "transitionMinZ": 0, 446 | "GlobalBiomeSeamlessServerGridPreOffsetValues": "", 447 | "GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater": "", 448 | "OceanDinoDepthEntriesOverride": "", 449 | "oceanFloatsamCratesOverride": "", 450 | "treasureMapLootTablesOverride": "", 451 | "oceanEpicSpawnEntriesOverrideTemplateName": "", 452 | "NPCShipSpawnEntriesOverrideTemplateName": "", 453 | "regionOverrides": "", 454 | "waterColorR": 0.0, 455 | "waterColorG": 0.0, 456 | "waterColorB": 0.0, 457 | "skyStyleIndex": 0, 458 | "sublevels": [ 459 | { 460 | "name": "Cay_J", 461 | "additionalTranslationX": 119999.938, 462 | "additionalTranslationY": -40000.125, 463 | "additionalTranslationZ": 0.0, 464 | "additionalRotationPitch": 0.0, 465 | "additionalRotationYaw": 0.0, 466 | "additionalRotationRoll": 0.0, 467 | "id": 1134, 468 | "landscapeMaterialOverride": -1 469 | }, 470 | { 471 | "name": "Cay_J_Far_01B", 472 | "additionalTranslationX": 119999.938, 473 | "additionalTranslationY": -40000.125, 474 | "additionalTranslationZ": 0.0, 475 | "additionalRotationPitch": 0.0, 476 | "additionalRotationYaw": 0.0, 477 | "additionalRotationRoll": 0.0, 478 | "id": 1134, 479 | "landscapeMaterialOverride": -1 480 | }, 481 | { 482 | "name": "Cay_J_Farthest_01B", 483 | "additionalTranslationX": 119999.938, 484 | "additionalTranslationY": -40000.125, 485 | "additionalTranslationZ": 0.0, 486 | "additionalRotationPitch": 0.0, 487 | "additionalRotationYaw": 0.0, 488 | "additionalRotationRoll": 0.0, 489 | "id": 1134, 490 | "landscapeMaterialOverride": -1 491 | }, 492 | { 493 | "name": "Cay_J_Near_01B", 494 | "additionalTranslationX": 119999.938, 495 | "additionalTranslationY": -40000.125, 496 | "additionalTranslationZ": 0.0, 497 | "additionalRotationPitch": 0.0, 498 | "additionalRotationYaw": 0.0, 499 | "additionalRotationRoll": 0.0, 500 | "id": 1134, 501 | "landscapeMaterialOverride": -1 502 | }, 503 | { 504 | "name": "Cay_J_Marine_Warm_Near", 505 | "additionalTranslationX": 119999.938, 506 | "additionalTranslationY": -40000.125, 507 | "additionalTranslationZ": 0.0, 508 | "additionalRotationPitch": 0.0, 509 | "additionalRotationYaw": 0.0, 510 | "additionalRotationRoll": 0.0, 511 | "id": 1134, 512 | "landscapeMaterialOverride": -1 513 | }, 514 | { 515 | "name": "Cay_J", 516 | "additionalTranslationX": -386666.7, 517 | "additionalTranslationY": -413333.375, 518 | "additionalTranslationZ": 0.0, 519 | "additionalRotationPitch": 0.0, 520 | "additionalRotationYaw": -167.6896, 521 | "additionalRotationRoll": 0.0, 522 | "id": 1135, 523 | "landscapeMaterialOverride": -1 524 | }, 525 | { 526 | "name": "Cay_J_Far_01", 527 | "additionalTranslationX": -386666.7, 528 | "additionalTranslationY": -413333.375, 529 | "additionalTranslationZ": 0.0, 530 | "additionalRotationPitch": 0.0, 531 | "additionalRotationYaw": -167.6896, 532 | "additionalRotationRoll": 0.0, 533 | "id": 1135, 534 | "landscapeMaterialOverride": -1 535 | }, 536 | { 537 | "name": "Cay_J_Farthest_01", 538 | "additionalTranslationX": -386666.7, 539 | "additionalTranslationY": -413333.375, 540 | "additionalTranslationZ": 0.0, 541 | "additionalRotationPitch": 0.0, 542 | "additionalRotationYaw": -167.6896, 543 | "additionalRotationRoll": 0.0, 544 | "id": 1135, 545 | "landscapeMaterialOverride": -1 546 | }, 547 | { 548 | "name": "Cay_J_Near_01", 549 | "additionalTranslationX": -386666.7, 550 | "additionalTranslationY": -413333.375, 551 | "additionalTranslationZ": 0.0, 552 | "additionalRotationPitch": 0.0, 553 | "additionalRotationYaw": -167.6896, 554 | "additionalRotationRoll": 0.0, 555 | "id": 1135, 556 | "landscapeMaterialOverride": -1 557 | }, 558 | { 559 | "name": "Cay_J_Marine_Warm_Near", 560 | "additionalTranslationX": -386666.7, 561 | "additionalTranslationY": -413333.375, 562 | "additionalTranslationZ": 0.0, 563 | "additionalRotationPitch": 0.0, 564 | "additionalRotationYaw": -167.6896, 565 | "additionalRotationRoll": 0.0, 566 | "id": 1135, 567 | "landscapeMaterialOverride": -1 568 | }, 569 | { 570 | "name": "Cay_I", 571 | "additionalTranslationX": -293333.344, 572 | "additionalTranslationY": 273333.25, 573 | "additionalTranslationZ": 0.0, 574 | "additionalRotationPitch": 0.0, 575 | "additionalRotationYaw": 0.0, 576 | "additionalRotationRoll": 0.0, 577 | "id": 1136, 578 | "landscapeMaterialOverride": -1 579 | }, 580 | { 581 | "name": "Cay_I_Far_01", 582 | "additionalTranslationX": -293333.344, 583 | "additionalTranslationY": 273333.25, 584 | "additionalTranslationZ": 0.0, 585 | "additionalRotationPitch": 0.0, 586 | "additionalRotationYaw": 0.0, 587 | "additionalRotationRoll": 0.0, 588 | "id": 1136, 589 | "landscapeMaterialOverride": -1 590 | }, 591 | { 592 | "name": "Cay_I_Farthest_01", 593 | "additionalTranslationX": -293333.344, 594 | "additionalTranslationY": 273333.25, 595 | "additionalTranslationZ": 0.0, 596 | "additionalRotationPitch": 0.0, 597 | "additionalRotationYaw": 0.0, 598 | "additionalRotationRoll": 0.0, 599 | "id": 1136, 600 | "landscapeMaterialOverride": -1 601 | }, 602 | { 603 | "name": "Cay_I_Near_01", 604 | "additionalTranslationX": -293333.344, 605 | "additionalTranslationY": 273333.25, 606 | "additionalTranslationZ": 0.0, 607 | "additionalRotationPitch": 0.0, 608 | "additionalRotationYaw": 0.0, 609 | "additionalRotationRoll": 0.0, 610 | "id": 1136, 611 | "landscapeMaterialOverride": -1 612 | }, 613 | { 614 | "name": "Cay_I_Marine_Warm_Near", 615 | "additionalTranslationX": -293333.344, 616 | "additionalTranslationY": 273333.25, 617 | "additionalTranslationZ": 0.0, 618 | "additionalRotationPitch": 0.0, 619 | "additionalRotationYaw": 0.0, 620 | "additionalRotationRoll": 0.0, 621 | "id": 1136, 622 | "landscapeMaterialOverride": -1 623 | }, 624 | { 625 | "name": "Cay_H", 626 | "additionalTranslationX": 473333.25, 627 | "additionalTranslationY": -400000.125, 628 | "additionalTranslationZ": 0.0, 629 | "additionalRotationPitch": 0.0, 630 | "additionalRotationYaw": 0.0, 631 | "additionalRotationRoll": 0.0, 632 | "id": 1137, 633 | "landscapeMaterialOverride": -1 634 | }, 635 | { 636 | "name": "Cay_H_Far_01", 637 | "additionalTranslationX": 473333.25, 638 | "additionalTranslationY": -400000.125, 639 | "additionalTranslationZ": 0.0, 640 | "additionalRotationPitch": 0.0, 641 | "additionalRotationYaw": 0.0, 642 | "additionalRotationRoll": 0.0, 643 | "id": 1137, 644 | "landscapeMaterialOverride": -1 645 | }, 646 | { 647 | "name": "Cay_H_Farthest_01", 648 | "additionalTranslationX": 473333.25, 649 | "additionalTranslationY": -400000.125, 650 | "additionalTranslationZ": 0.0, 651 | "additionalRotationPitch": 0.0, 652 | "additionalRotationYaw": 0.0, 653 | "additionalRotationRoll": 0.0, 654 | "id": 1137, 655 | "landscapeMaterialOverride": -1 656 | }, 657 | { 658 | "name": "Cay_H_Near_01", 659 | "additionalTranslationX": 473333.25, 660 | "additionalTranslationY": -400000.125, 661 | "additionalTranslationZ": 0.0, 662 | "additionalRotationPitch": 0.0, 663 | "additionalRotationYaw": 0.0, 664 | "additionalRotationRoll": 0.0, 665 | "id": 1137, 666 | "landscapeMaterialOverride": -1 667 | }, 668 | { 669 | "name": "Cay_H_Marine_Warm_Near", 670 | "additionalTranslationX": 473333.25, 671 | "additionalTranslationY": -400000.125, 672 | "additionalTranslationZ": 0.0, 673 | "additionalRotationPitch": 0.0, 674 | "additionalRotationYaw": 0.0, 675 | "additionalRotationRoll": 0.0, 676 | "id": 1137, 677 | "landscapeMaterialOverride": -1 678 | } 679 | ], 680 | "lastModified": "2018-12-20T04:07:48.407751Z", 681 | "lastImageOverride": "0001-01-01T00:00:00", 682 | "islandLocked": false, 683 | "discoLocked": false, 684 | "pathsLocked": false, 685 | "extraSublevels": [], 686 | "totalExtraSublevels": [ 687 | "MasterIBL_Tropical", 688 | "MasterIBL_Tropical_Canopy_Oak", 689 | "MasterIBL_Tropical_Canopy_RE" 690 | ], 691 | "islandInstances": [ 692 | { 693 | "name": "Cay_JB_TR", 694 | "id": 1134, 695 | "spawnerOverrides": {}, 696 | "minTreasureQuality": -1.0, 697 | "maxTreasureQuality": -1.0, 698 | "useNpcVolumesForTreasures": false, 699 | "useLevelBoundsForTreasures": true, 700 | "prioritizeVolumesForTreasures": false, 701 | "islandTreasureBottleSupplyCrateOverrides": "", 702 | "worldX": 819999.938, 703 | "worldY": 2059999.88, 704 | "rotation": 0.0 705 | }, 706 | { 707 | "name": "Cay_J_TR", 708 | "id": 1135, 709 | "spawnerOverrides": {}, 710 | "minTreasureQuality": -1.0, 711 | "maxTreasureQuality": -1.0, 712 | "useNpcVolumesForTreasures": false, 713 | "useLevelBoundsForTreasures": true, 714 | "prioritizeVolumesForTreasures": false, 715 | "islandTreasureBottleSupplyCrateOverrides": "", 716 | "worldX": 313333.3, 717 | "worldY": 1686666.63, 718 | "rotation": -167.6896 719 | }, 720 | { 721 | "name": "Cay_I_TR", 722 | "id": 1136, 723 | "spawnerOverrides": {}, 724 | "minTreasureQuality": -1.0, 725 | "maxTreasureQuality": -1.0, 726 | "useNpcVolumesForTreasures": false, 727 | "useLevelBoundsForTreasures": true, 728 | "prioritizeVolumesForTreasures": false, 729 | "islandTreasureBottleSupplyCrateOverrides": "", 730 | "worldX": 406666.656, 731 | "worldY": 2373333.25, 732 | "rotation": 0.0 733 | }, 734 | { 735 | "name": "Cay_H_TR", 736 | "id": 1137, 737 | "spawnerOverrides": {}, 738 | "minTreasureQuality": -1.0, 739 | "maxTreasureQuality": -1.0, 740 | "useNpcVolumesForTreasures": false, 741 | "useLevelBoundsForTreasures": true, 742 | "prioritizeVolumesForTreasures": false, 743 | "islandTreasureBottleSupplyCrateOverrides": "", 744 | "worldX": 1173333.25, 745 | "worldY": 1699999.88, 746 | "rotation": 0.0 747 | } 748 | ], 749 | "discoZones": [ 750 | { 751 | "name": "Southern Discovery Island", 752 | "sizeX": 420000.0, 753 | "sizeY": 440000.1, 754 | "sizeZ": 40000.0, 755 | "id": 1146, 756 | "xp": 0.0, 757 | "bIsManuallyPlaced": false, 758 | "explorerNoteIndex": 0, 759 | "allowSea": false, 760 | "worldX": 796666.6, 761 | "worldY": 2040000.0, 762 | "rotation": 0.0 763 | } 764 | ], 765 | "spawnRegions": [], 766 | "serverTemplateName": "Tropical" 767 | }, 768 | { 769 | "gridX": 1, 770 | "gridY": 0, 771 | "MachineIdTag": "AtlasServer_03", 772 | "ip": "123.456.789.0", 773 | "name": "", 774 | "port": 57552, 775 | "gamePort": 5754, 776 | "seamlessDataPort": 27002, 777 | "isHomeServer": false, 778 | "AdditionalCmdLineParams": "", 779 | "OverrideShooterGameModeDefaultGameIni": {}, 780 | "floorZDist": 0, 781 | "utcOffset": 0, 782 | "transitionMinZ": 0, 783 | "GlobalBiomeSeamlessServerGridPreOffsetValues": "", 784 | "GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater": "", 785 | "OceanDinoDepthEntriesOverride": "", 786 | "oceanFloatsamCratesOverride": "", 787 | "treasureMapLootTablesOverride": "", 788 | "oceanEpicSpawnEntriesOverrideTemplateName": "", 789 | "NPCShipSpawnEntriesOverrideTemplateName": "", 790 | "regionOverrides": "", 791 | "waterColorR": 0.0, 792 | "waterColorG": 0.0, 793 | "waterColorB": 0.0, 794 | "skyStyleIndex": 0, 795 | "sublevels": [ 796 | { 797 | "name": "Mnt_A_Far_01", 798 | "additionalTranslationX": -146666.25, 799 | "additionalTranslationY": -240000.063, 800 | "additionalTranslationZ": 0.0, 801 | "additionalRotationPitch": 0.0, 802 | "additionalRotationYaw": 0.0, 803 | "additionalRotationRoll": 0.0, 804 | "id": 1142, 805 | "landscapeMaterialOverride": -1 806 | }, 807 | { 808 | "name": "Mnt_A_Farthest_01", 809 | "additionalTranslationX": -146666.25, 810 | "additionalTranslationY": -240000.063, 811 | "additionalTranslationZ": 0.0, 812 | "additionalRotationPitch": 0.0, 813 | "additionalRotationYaw": 0.0, 814 | "additionalRotationRoll": 0.0, 815 | "id": 1142, 816 | "landscapeMaterialOverride": -1 817 | }, 818 | { 819 | "name": "Mnt_A_Near_01", 820 | "additionalTranslationX": -146666.25, 821 | "additionalTranslationY": -240000.063, 822 | "additionalTranslationZ": 0.0, 823 | "additionalRotationPitch": 0.0, 824 | "additionalRotationYaw": 0.0, 825 | "additionalRotationRoll": 0.0, 826 | "id": 1142, 827 | "landscapeMaterialOverride": -1 828 | }, 829 | { 830 | "name": "Mnt_A_TR", 831 | "additionalTranslationX": -146666.25, 832 | "additionalTranslationY": -240000.063, 833 | "additionalTranslationZ": 0.0, 834 | "additionalRotationPitch": 0.0, 835 | "additionalRotationYaw": 0.0, 836 | "additionalRotationRoll": 0.0, 837 | "id": 1142, 838 | "landscapeMaterialOverride": -1 839 | }, 840 | { 841 | "name": "Mnt_A_Marine_Warm_Near", 842 | "additionalTranslationX": -146666.25, 843 | "additionalTranslationY": -240000.063, 844 | "additionalTranslationZ": 0.0, 845 | "additionalRotationPitch": 0.0, 846 | "additionalRotationYaw": 0.0, 847 | "additionalRotationRoll": 0.0, 848 | "id": 1142, 849 | "landscapeMaterialOverride": -1 850 | }, 851 | { 852 | "name": "Mnt_L_Far_01", 853 | "additionalTranslationX": 366668.0, 854 | "additionalTranslationY": -246666.656, 855 | "additionalTranslationZ": 0.0, 856 | "additionalRotationPitch": 0.0, 857 | "additionalRotationYaw": -82.6688843, 858 | "additionalRotationRoll": 0.0, 859 | "id": 1143, 860 | "landscapeMaterialOverride": -1 861 | }, 862 | { 863 | "name": "Mnt_L_Farthest_01", 864 | "additionalTranslationX": 366668.0, 865 | "additionalTranslationY": -246666.656, 866 | "additionalTranslationZ": 0.0, 867 | "additionalRotationPitch": 0.0, 868 | "additionalRotationYaw": -82.6688843, 869 | "additionalRotationRoll": 0.0, 870 | "id": 1143, 871 | "landscapeMaterialOverride": -1 872 | }, 873 | { 874 | "name": "Mnt_L_Near_01", 875 | "additionalTranslationX": 366668.0, 876 | "additionalTranslationY": -246666.656, 877 | "additionalTranslationZ": 0.0, 878 | "additionalRotationPitch": 0.0, 879 | "additionalRotationYaw": -82.6688843, 880 | "additionalRotationRoll": 0.0, 881 | "id": 1143, 882 | "landscapeMaterialOverride": -1 883 | }, 884 | { 885 | "name": "Mnt_L_TR", 886 | "additionalTranslationX": 366668.0, 887 | "additionalTranslationY": -246666.656, 888 | "additionalTranslationZ": 0.0, 889 | "additionalRotationPitch": 0.0, 890 | "additionalRotationYaw": -82.6688843, 891 | "additionalRotationRoll": 0.0, 892 | "id": 1143, 893 | "landscapeMaterialOverride": -1 894 | }, 895 | { 896 | "name": "Mnt_L_Marine_Warm_Near", 897 | "additionalTranslationX": 366668.0, 898 | "additionalTranslationY": -246666.656, 899 | "additionalTranslationZ": 0.0, 900 | "additionalRotationPitch": 0.0, 901 | "additionalRotationYaw": -82.6688843, 902 | "additionalRotationRoll": 0.0, 903 | "id": 1143, 904 | "landscapeMaterialOverride": -1 905 | }, 906 | { 907 | "name": "Mnt_C", 908 | "additionalTranslationX": -306666.875, 909 | "additionalTranslationY": 186666.563, 910 | "additionalTranslationZ": 0.0, 911 | "additionalRotationPitch": 0.0, 912 | "additionalRotationYaw": 0.0, 913 | "additionalRotationRoll": 0.0, 914 | "id": 1144, 915 | "landscapeMaterialOverride": -1 916 | }, 917 | { 918 | "name": "Mnt_C_Far_01", 919 | "additionalTranslationX": -306666.875, 920 | "additionalTranslationY": 186666.563, 921 | "additionalTranslationZ": 0.0, 922 | "additionalRotationPitch": 0.0, 923 | "additionalRotationYaw": 0.0, 924 | "additionalRotationRoll": 0.0, 925 | "id": 1144, 926 | "landscapeMaterialOverride": -1 927 | }, 928 | { 929 | "name": "Mnt_C_Farthest_01", 930 | "additionalTranslationX": -306666.875, 931 | "additionalTranslationY": 186666.563, 932 | "additionalTranslationZ": 0.0, 933 | "additionalRotationPitch": 0.0, 934 | "additionalRotationYaw": 0.0, 935 | "additionalRotationRoll": 0.0, 936 | "id": 1144, 937 | "landscapeMaterialOverride": -1 938 | }, 939 | { 940 | "name": "Mnt_C_Near_01", 941 | "additionalTranslationX": -306666.875, 942 | "additionalTranslationY": 186666.563, 943 | "additionalTranslationZ": 0.0, 944 | "additionalRotationPitch": 0.0, 945 | "additionalRotationYaw": 0.0, 946 | "additionalRotationRoll": 0.0, 947 | "id": 1144, 948 | "landscapeMaterialOverride": -1 949 | }, 950 | { 951 | "name": "Mnt_C_Marine_Warm_Near", 952 | "additionalTranslationX": -306666.875, 953 | "additionalTranslationY": 186666.563, 954 | "additionalTranslationZ": 0.0, 955 | "additionalRotationPitch": 0.0, 956 | "additionalRotationYaw": 0.0, 957 | "additionalRotationRoll": 0.0, 958 | "id": 1144, 959 | "landscapeMaterialOverride": -1 960 | }, 961 | { 962 | "name": "Mnt_H_Far_04", 963 | "additionalTranslationX": 153334.75, 964 | "additionalTranslationY": 233333.75, 965 | "additionalTranslationZ": 0.0, 966 | "additionalRotationPitch": 0.0, 967 | "additionalRotationYaw": -80.537674, 968 | "additionalRotationRoll": 0.0, 969 | "id": 1145, 970 | "landscapeMaterialOverride": -1 971 | }, 972 | { 973 | "name": "Mnt_H_Farthest_04", 974 | "additionalTranslationX": 153334.75, 975 | "additionalTranslationY": 233333.75, 976 | "additionalTranslationZ": 0.0, 977 | "additionalRotationPitch": 0.0, 978 | "additionalRotationYaw": -80.537674, 979 | "additionalRotationRoll": 0.0, 980 | "id": 1145, 981 | "landscapeMaterialOverride": -1 982 | }, 983 | { 984 | "name": "Mnt_H_Near_04", 985 | "additionalTranslationX": 153334.75, 986 | "additionalTranslationY": 233333.75, 987 | "additionalTranslationZ": 0.0, 988 | "additionalRotationPitch": 0.0, 989 | "additionalRotationYaw": -80.537674, 990 | "additionalRotationRoll": 0.0, 991 | "id": 1145, 992 | "landscapeMaterialOverride": -1 993 | }, 994 | { 995 | "name": "Mnt_H_TR", 996 | "additionalTranslationX": 153334.75, 997 | "additionalTranslationY": 233333.75, 998 | "additionalTranslationZ": 0.0, 999 | "additionalRotationPitch": 0.0, 1000 | "additionalRotationYaw": -80.537674, 1001 | "additionalRotationRoll": 0.0, 1002 | "id": 1145, 1003 | "landscapeMaterialOverride": -1 1004 | }, 1005 | { 1006 | "name": "Mnt_H_Marine_Warm_Near", 1007 | "additionalTranslationX": 153334.75, 1008 | "additionalTranslationY": 233333.75, 1009 | "additionalTranslationZ": 0.0, 1010 | "additionalRotationPitch": 0.0, 1011 | "additionalRotationYaw": -80.537674, 1012 | "additionalRotationRoll": 0.0, 1013 | "id": 1145, 1014 | "landscapeMaterialOverride": -1 1015 | } 1016 | ], 1017 | "lastModified": "2018-12-20T04:08:33.8170774Z", 1018 | "lastImageOverride": "0001-01-01T00:00:00", 1019 | "islandLocked": false, 1020 | "discoLocked": false, 1021 | "pathsLocked": false, 1022 | "extraSublevels": [], 1023 | "totalExtraSublevels": [ 1024 | "MasterIBL_Tropical", 1025 | "MasterIBL_Tropical_Canopy_Oak", 1026 | "MasterIBL_Tropical_Canopy_RE" 1027 | ], 1028 | "islandInstances": [ 1029 | { 1030 | "name": "Mnt_A_TR", 1031 | "id": 1142, 1032 | "spawnerOverrides": {}, 1033 | "minTreasureQuality": -1.0, 1034 | "maxTreasureQuality": -1.0, 1035 | "useNpcVolumesForTreasures": false, 1036 | "useLevelBoundsForTreasures": true, 1037 | "prioritizeVolumesForTreasures": false, 1038 | "islandTreasureBottleSupplyCrateOverrides": "", 1039 | "worldX": 1953333.75, 1040 | "worldY": 459999.938, 1041 | "rotation": 0.0 1042 | }, 1043 | { 1044 | "name": "Mnt_L_TR", 1045 | "id": 1143, 1046 | "spawnerOverrides": {}, 1047 | "minTreasureQuality": -1.0, 1048 | "maxTreasureQuality": -1.0, 1049 | "useNpcVolumesForTreasures": false, 1050 | "useLevelBoundsForTreasures": true, 1051 | "prioritizeVolumesForTreasures": false, 1052 | "islandTreasureBottleSupplyCrateOverrides": "", 1053 | "worldX": 2466668.0, 1054 | "worldY": 453333.344, 1055 | "rotation": -82.6688843 1056 | }, 1057 | { 1058 | "name": "Mnt_C_TR", 1059 | "id": 1144, 1060 | "spawnerOverrides": {}, 1061 | "minTreasureQuality": -1.0, 1062 | "maxTreasureQuality": -1.0, 1063 | "useNpcVolumesForTreasures": false, 1064 | "useLevelBoundsForTreasures": true, 1065 | "prioritizeVolumesForTreasures": false, 1066 | "islandTreasureBottleSupplyCrateOverrides": "", 1067 | "worldX": 1793333.13, 1068 | "worldY": 886666.563, 1069 | "rotation": 0.0 1070 | }, 1071 | { 1072 | "name": "Mnt_H_WR", 1073 | "id": 1145, 1074 | "spawnerOverrides": {}, 1075 | "minTreasureQuality": -1.0, 1076 | "maxTreasureQuality": -1.0, 1077 | "useNpcVolumesForTreasures": false, 1078 | "useLevelBoundsForTreasures": true, 1079 | "prioritizeVolumesForTreasures": false, 1080 | "islandTreasureBottleSupplyCrateOverrides": "", 1081 | "worldX": 2253334.75, 1082 | "worldY": 933333.75, 1083 | "rotation": -80.537674 1084 | } 1085 | ], 1086 | "discoZones": [ 1087 | { 1088 | "name": "Northern Discovery Island", 1089 | "sizeX": 366666.6, 1090 | "sizeY": 380000.0, 1091 | "sizeZ": 40000.0, 1092 | "id": 1148, 1093 | "xp": 0.0, 1094 | "bIsManuallyPlaced": false, 1095 | "explorerNoteIndex": 0, 1096 | "allowSea": false, 1097 | "worldX": 2230000.0, 1098 | "worldY": 936666.6, 1099 | "rotation": 0.0 1100 | } 1101 | ], 1102 | "spawnRegions": [], 1103 | "serverTemplateName": "Tropical" 1104 | }, 1105 | { 1106 | "gridX": 1, 1107 | "gridY": 1, 1108 | "MachineIdTag": "AtlasServer_04", 1109 | "ip": "123.456.789.0", 1110 | "name": "", 1111 | "port": 57553, 1112 | "gamePort": 5756, 1113 | "seamlessDataPort": 27003, 1114 | "isHomeServer": false, 1115 | "AdditionalCmdLineParams": "", 1116 | "OverrideShooterGameModeDefaultGameIni": {}, 1117 | "floorZDist": 0, 1118 | "utcOffset": 0, 1119 | "transitionMinZ": 0, 1120 | "GlobalBiomeSeamlessServerGridPreOffsetValues": "", 1121 | "GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater": "", 1122 | "OceanDinoDepthEntriesOverride": "", 1123 | "oceanFloatsamCratesOverride": "", 1124 | "treasureMapLootTablesOverride": "", 1125 | "oceanEpicSpawnEntriesOverrideTemplateName": "", 1126 | "NPCShipSpawnEntriesOverrideTemplateName": "", 1127 | "regionOverrides": "", 1128 | "waterColorR": 0.0, 1129 | "waterColorG": 0.0, 1130 | "waterColorB": 0.0, 1131 | "skyStyleIndex": 0, 1132 | "sublevels": [ 1133 | { 1134 | "name": "Cay_G", 1135 | "additionalTranslationX": -80000.125, 1136 | "additionalTranslationY": -246666.75, 1137 | "additionalTranslationZ": 0.0, 1138 | "additionalRotationPitch": 0.0, 1139 | "additionalRotationYaw": 0.0, 1140 | "additionalRotationRoll": 0.0, 1141 | "id": 1138, 1142 | "landscapeMaterialOverride": -1 1143 | }, 1144 | { 1145 | "name": "Cay_G_Far_01B", 1146 | "additionalTranslationX": -80000.125, 1147 | "additionalTranslationY": -246666.75, 1148 | "additionalTranslationZ": 0.0, 1149 | "additionalRotationPitch": 0.0, 1150 | "additionalRotationYaw": 0.0, 1151 | "additionalRotationRoll": 0.0, 1152 | "id": 1138, 1153 | "landscapeMaterialOverride": -1 1154 | }, 1155 | { 1156 | "name": "Cay_G_Farthest_01B", 1157 | "additionalTranslationX": -80000.125, 1158 | "additionalTranslationY": -246666.75, 1159 | "additionalTranslationZ": 0.0, 1160 | "additionalRotationPitch": 0.0, 1161 | "additionalRotationYaw": 0.0, 1162 | "additionalRotationRoll": 0.0, 1163 | "id": 1138, 1164 | "landscapeMaterialOverride": -1 1165 | }, 1166 | { 1167 | "name": "Cay_G_Near_01B", 1168 | "additionalTranslationX": -80000.125, 1169 | "additionalTranslationY": -246666.75, 1170 | "additionalTranslationZ": 0.0, 1171 | "additionalRotationPitch": 0.0, 1172 | "additionalRotationYaw": 0.0, 1173 | "additionalRotationRoll": 0.0, 1174 | "id": 1138, 1175 | "landscapeMaterialOverride": -1 1176 | }, 1177 | { 1178 | "name": "Cay_G_Marine_Warm_Near", 1179 | "additionalTranslationX": -80000.125, 1180 | "additionalTranslationY": -246666.75, 1181 | "additionalTranslationZ": 0.0, 1182 | "additionalRotationPitch": 0.0, 1183 | "additionalRotationYaw": 0.0, 1184 | "additionalRotationRoll": 0.0, 1185 | "id": 1138, 1186 | "landscapeMaterialOverride": -1 1187 | }, 1188 | { 1189 | "name": "Cay_G", 1190 | "additionalTranslationX": 226666.5, 1191 | "additionalTranslationY": 93333.25, 1192 | "additionalTranslationZ": 0.0, 1193 | "additionalRotationPitch": 0.0, 1194 | "additionalRotationYaw": 0.0, 1195 | "additionalRotationRoll": 0.0, 1196 | "id": 1139, 1197 | "landscapeMaterialOverride": -1 1198 | }, 1199 | { 1200 | "name": "Cay_G_Far_01", 1201 | "additionalTranslationX": 226666.5, 1202 | "additionalTranslationY": 93333.25, 1203 | "additionalTranslationZ": 0.0, 1204 | "additionalRotationPitch": 0.0, 1205 | "additionalRotationYaw": 0.0, 1206 | "additionalRotationRoll": 0.0, 1207 | "id": 1139, 1208 | "landscapeMaterialOverride": -1 1209 | }, 1210 | { 1211 | "name": "Cay_G_Farthest_01", 1212 | "additionalTranslationX": 226666.5, 1213 | "additionalTranslationY": 93333.25, 1214 | "additionalTranslationZ": 0.0, 1215 | "additionalRotationPitch": 0.0, 1216 | "additionalRotationYaw": 0.0, 1217 | "additionalRotationRoll": 0.0, 1218 | "id": 1139, 1219 | "landscapeMaterialOverride": -1 1220 | }, 1221 | { 1222 | "name": "Cay_G_Near_01", 1223 | "additionalTranslationX": 226666.5, 1224 | "additionalTranslationY": 93333.25, 1225 | "additionalTranslationZ": 0.0, 1226 | "additionalRotationPitch": 0.0, 1227 | "additionalRotationYaw": 0.0, 1228 | "additionalRotationRoll": 0.0, 1229 | "id": 1139, 1230 | "landscapeMaterialOverride": -1 1231 | }, 1232 | { 1233 | "name": "Cay_G_Marine_Warm_Near", 1234 | "additionalTranslationX": 226666.5, 1235 | "additionalTranslationY": 93333.25, 1236 | "additionalTranslationZ": 0.0, 1237 | "additionalRotationPitch": 0.0, 1238 | "additionalRotationYaw": 0.0, 1239 | "additionalRotationRoll": 0.0, 1240 | "id": 1139, 1241 | "landscapeMaterialOverride": -1 1242 | }, 1243 | { 1244 | "name": "Cay_F", 1245 | "additionalTranslationX": -266666.75, 1246 | "additionalTranslationY": 346666.5, 1247 | "additionalTranslationZ": 0.0, 1248 | "additionalRotationPitch": 0.0, 1249 | "additionalRotationYaw": 0.0, 1250 | "additionalRotationRoll": 0.0, 1251 | "id": 1140, 1252 | "landscapeMaterialOverride": -1 1253 | }, 1254 | { 1255 | "name": "Cay_F_Far_01", 1256 | "additionalTranslationX": -266666.75, 1257 | "additionalTranslationY": 346666.5, 1258 | "additionalTranslationZ": 0.0, 1259 | "additionalRotationPitch": 0.0, 1260 | "additionalRotationYaw": 0.0, 1261 | "additionalRotationRoll": 0.0, 1262 | "id": 1140, 1263 | "landscapeMaterialOverride": -1 1264 | }, 1265 | { 1266 | "name": "Cay_F_Farthest_01", 1267 | "additionalTranslationX": -266666.75, 1268 | "additionalTranslationY": 346666.5, 1269 | "additionalTranslationZ": 0.0, 1270 | "additionalRotationPitch": 0.0, 1271 | "additionalRotationYaw": 0.0, 1272 | "additionalRotationRoll": 0.0, 1273 | "id": 1140, 1274 | "landscapeMaterialOverride": -1 1275 | }, 1276 | { 1277 | "name": "Cay_F_Near_01", 1278 | "additionalTranslationX": -266666.75, 1279 | "additionalTranslationY": 346666.5, 1280 | "additionalTranslationZ": 0.0, 1281 | "additionalRotationPitch": 0.0, 1282 | "additionalRotationYaw": 0.0, 1283 | "additionalRotationRoll": 0.0, 1284 | "id": 1140, 1285 | "landscapeMaterialOverride": -1 1286 | }, 1287 | { 1288 | "name": "Cay_F_Marine_Warm_Near", 1289 | "additionalTranslationX": -266666.75, 1290 | "additionalTranslationY": 346666.5, 1291 | "additionalTranslationZ": 0.0, 1292 | "additionalRotationPitch": 0.0, 1293 | "additionalRotationYaw": 0.0, 1294 | "additionalRotationRoll": 0.0, 1295 | "id": 1140, 1296 | "landscapeMaterialOverride": -1 1297 | }, 1298 | { 1299 | "name": "Cay_A_Far_01", 1300 | "additionalTranslationX": 253333.25, 1301 | "additionalTranslationY": -200000.125, 1302 | "additionalTranslationZ": 0.0, 1303 | "additionalRotationPitch": 0.0, 1304 | "additionalRotationYaw": 0.0, 1305 | "additionalRotationRoll": 0.0, 1306 | "id": 1141, 1307 | "landscapeMaterialOverride": -1 1308 | }, 1309 | { 1310 | "name": "Cay_A_Farthest_01", 1311 | "additionalTranslationX": 253333.25, 1312 | "additionalTranslationY": -200000.125, 1313 | "additionalTranslationZ": 0.0, 1314 | "additionalRotationPitch": 0.0, 1315 | "additionalRotationYaw": 0.0, 1316 | "additionalRotationRoll": 0.0, 1317 | "id": 1141, 1318 | "landscapeMaterialOverride": -1 1319 | }, 1320 | { 1321 | "name": "Cay_A_Near_01", 1322 | "additionalTranslationX": 253333.25, 1323 | "additionalTranslationY": -200000.125, 1324 | "additionalTranslationZ": 0.0, 1325 | "additionalRotationPitch": 0.0, 1326 | "additionalRotationYaw": 0.0, 1327 | "additionalRotationRoll": 0.0, 1328 | "id": 1141, 1329 | "landscapeMaterialOverride": -1 1330 | }, 1331 | { 1332 | "name": "Cay_A", 1333 | "additionalTranslationX": 253333.25, 1334 | "additionalTranslationY": -200000.125, 1335 | "additionalTranslationZ": 0.0, 1336 | "additionalRotationPitch": 0.0, 1337 | "additionalRotationYaw": 0.0, 1338 | "additionalRotationRoll": 0.0, 1339 | "id": 1141, 1340 | "landscapeMaterialOverride": -1 1341 | }, 1342 | { 1343 | "name": "Cay_A_Marine_Warm_Near", 1344 | "additionalTranslationX": 253333.25, 1345 | "additionalTranslationY": -200000.125, 1346 | "additionalTranslationZ": 0.0, 1347 | "additionalRotationPitch": 0.0, 1348 | "additionalRotationYaw": 0.0, 1349 | "additionalRotationRoll": 0.0, 1350 | "id": 1141, 1351 | "landscapeMaterialOverride": -1 1352 | } 1353 | ], 1354 | "lastModified": "2018-12-20T04:08:07.1180687Z", 1355 | "lastImageOverride": "0001-01-01T00:00:00", 1356 | "islandLocked": false, 1357 | "discoLocked": false, 1358 | "pathsLocked": false, 1359 | "extraSublevels": [], 1360 | "totalExtraSublevels": [ 1361 | "MasterIBL_Tropical", 1362 | "MasterIBL_Tropical_Canopy_Oak", 1363 | "MasterIBL_Tropical_Canopy_RE" 1364 | ], 1365 | "islandInstances": [ 1366 | { 1367 | "name": "Cay_GB_TR", 1368 | "id": 1138, 1369 | "spawnerOverrides": {}, 1370 | "minTreasureQuality": -1.0, 1371 | "maxTreasureQuality": -1.0, 1372 | "useNpcVolumesForTreasures": false, 1373 | "useLevelBoundsForTreasures": true, 1374 | "prioritizeVolumesForTreasures": false, 1375 | "islandTreasureBottleSupplyCrateOverrides": "", 1376 | "worldX": 2019999.88, 1377 | "worldY": 1853333.25, 1378 | "rotation": 0.0 1379 | }, 1380 | { 1381 | "name": "Cay_G_TR", 1382 | "id": 1139, 1383 | "spawnerOverrides": {}, 1384 | "minTreasureQuality": -1.0, 1385 | "maxTreasureQuality": -1.0, 1386 | "useNpcVolumesForTreasures": false, 1387 | "useLevelBoundsForTreasures": true, 1388 | "prioritizeVolumesForTreasures": false, 1389 | "islandTreasureBottleSupplyCrateOverrides": "", 1390 | "worldX": 2326666.5, 1391 | "worldY": 2193333.25, 1392 | "rotation": 0.0 1393 | }, 1394 | { 1395 | "name": "Cay_F_TR", 1396 | "id": 1140, 1397 | "spawnerOverrides": {}, 1398 | "minTreasureQuality": -1.0, 1399 | "maxTreasureQuality": -1.0, 1400 | "useNpcVolumesForTreasures": false, 1401 | "useLevelBoundsForTreasures": true, 1402 | "prioritizeVolumesForTreasures": false, 1403 | "islandTreasureBottleSupplyCrateOverrides": "", 1404 | "worldX": 1833333.25, 1405 | "worldY": 2446666.5, 1406 | "rotation": 0.0 1407 | }, 1408 | { 1409 | "name": "Cay_A_TR", 1410 | "id": 1141, 1411 | "spawnerOverrides": {}, 1412 | "minTreasureQuality": -1.0, 1413 | "maxTreasureQuality": -1.0, 1414 | "useNpcVolumesForTreasures": false, 1415 | "useLevelBoundsForTreasures": true, 1416 | "prioritizeVolumesForTreasures": false, 1417 | "islandTreasureBottleSupplyCrateOverrides": "", 1418 | "worldX": 2353333.25, 1419 | "worldY": 1899999.88, 1420 | "rotation": 0.0 1421 | } 1422 | ], 1423 | "discoZones": [ 1424 | { 1425 | "name": "Eastern Discovery Island", 1426 | "sizeX": 326666.5, 1427 | "sizeY": 366666.6, 1428 | "sizeZ": 40000.0, 1429 | "id": 1147, 1430 | "xp": 0.0, 1431 | "bIsManuallyPlaced": false, 1432 | "explorerNoteIndex": 0, 1433 | "allowSea": false, 1434 | "worldX": 2363333.25, 1435 | "worldY": 1876666.5, 1436 | "rotation": 0.0 1437 | } 1438 | ], 1439 | "spawnRegions": [], 1440 | "serverTemplateName": "Tropical" 1441 | } 1442 | ], 1443 | "spawnerOverrideTemplates": [ 1444 | { 1445 | "Name": "SpawnerTemplate1", 1446 | "NPCSpawnEntries": "((AnEntryName=\"Stego One to Three\",NPCsToSpawn=(BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Stego/Stego_Character_BP.Stego_Character_BP_C',BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Para/Para_Character_BP.Para_Character_BP_C',BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Para/Para_Character_BP.Para_Character_BP_C'),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=0.000000),(X=0.000000,Y=680.000000,Z=0.000000),(X=0.000000,Y=-680.000000,Z=0.000000)),NPCsToSpawnPercentageChance=(1.000000,0.380000,0.150000),LevelDifficultyTestOverride=1.000000),(AnEntryName=\"Trike One to Three\",NPCsToSpawn=(BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Para/Para_Character_BP.Para_Character_BP_C',BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Para/Para_Character_BP.Para_Character_BP_C',BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Trike/Trike_Character_BP.Trike_Character_BP_C'),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=0.000000),(X=0.000000,Y=680.000000,Z=0.000000),(X=0.000000,Y=-680.000000,Z=0.000000)),NPCsToSpawnPercentageChance=(1.000000,0.500000,0.150000),LevelDifficultyTestOverride=1.000000))", 1447 | "NPCSpawnLimits": "((NPCClass=BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Stego/Stego_Character_BP.Stego_Character_BP_C',MaxPercentageOfDesiredNumToAllow=1))", 1448 | "MaxDesiredNumEnemiesMultiplier": 1.0 1449 | }, 1450 | { 1451 | "Name": "SpawnerTemplate2", 1452 | "NPCSpawnEntries": "((AnEntryName=\"Stego One to Three\",NPCsToSpawn=(BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Dodo/TurkeyBase_Character_BP.TurkeyBase_Character_BP_C',BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Dodo/TurkeyBase_Character_BP.TurkeyBase_Character_BP_C',BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Dodo/TurkeyBase_Character_BP.TurkeyBase_Character_BP_C'),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=0.000000),(X=0.000000,Y=680.000000,Z=0.000000),(X=0.000000,Y=-680.000000,Z=0.000000)),NPCsToSpawnPercentageChance=(1.000000,0.380000,0.150000),LevelDifficultyTestOverride=2.000000),(AnEntryName=\"Trike One to Three\",NPCsToSpawn=(BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Dodo/TurkeyBase_Character_BP.TurkeyBase_Character_BP_C',BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Dodo/TurkeyBase_Character_BP.TurkeyBase_Character_BP_C',BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Dodo/TurkeyBase_Character_BP.TurkeyBase_Character_BP_C'),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=0.000000),(X=0.000000,Y=680.000000,Z=0.000000),(X=0.000000,Y=-680.000000,Z=0.000000)),NPCsToSpawnPercentageChance=(1.000000,0.500000,0.150000),LevelDifficultyTestOverride=2.000000))", 1453 | "NPCSpawnLimits": "((NPCClass=BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Stego/Stego_Character_BP.Stego_Character_BP_C',MaxPercentageOfDesiredNumToAllow=2))", 1454 | "MaxDesiredNumEnemiesMultiplier": 2.0 1455 | }, 1456 | { 1457 | "Name": "FailureTest", 1458 | "NPCSpawnEntries": "", 1459 | "NPCSpawnLimits": "", 1460 | "MaxDesiredNumEnemiesMultiplier": -1.0 1461 | }, 1462 | { 1463 | "Name": "SpawnerTrike", 1464 | "NPCSpawnEntries": "((AnEntryName=\"Carnos\",NPCsToSpawn=(BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Trike/Trike_Character_BP.Trike_Character_BP_C'),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=0.000000)),NPCsToSpawnPercentageChance=(1.000000)))", 1465 | "NPCSpawnLimits": "", 1466 | "MaxDesiredNumEnemiesMultiplier": 1.0 1467 | }, 1468 | { 1469 | "Name": "SpawnerPtero", 1470 | "NPCSpawnEntries": "((AnEntryName=\"Ptero\",NPCsToSpawn=(BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Ptero/Ptero_Character_BP.Ptero_Character_BP_C'),NPCsSpawnOffsets=((X=300.000000,Y=0.000000,Z=0.000000)),NPCsToSpawnPercentageChance=(1.000000),EntryWeight=0.150000))(BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Pelagornis/Pela_Character_BP.Pela_Character_BP_C'),NPCsSpawnOffsets=((X=300.000000,Y=0.000000,Z=0.000000)),NPCsToSpawnPercentageChance=(1.000000),EntryWeight=0.150000))", 1471 | "NPCSpawnLimits": "", 1472 | "MaxDesiredNumEnemiesMultiplier": 1.5 1473 | }, 1474 | { 1475 | "Name": "SpawnerAlloOrSarco", 1476 | "NPCSpawnEntries": "((AnEntryName=\"Sarco\",NPCsToSpawn=(BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Sarco/Sarco_Character_BP.Sarco_Character_BP_C'),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=0.000000)),NPCsToSpawnPercentageChance=(1.000000)),(AnEntryName=\"Allo\",NPCsToSpawn=(BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Allosaurus/Allo_Character_BP.Allo_Character_BP_C'),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=0.000000)),NPCsToSpawnPercentageChance=(1.000000),EntryWeight=0.200000))", 1477 | "NPCSpawnLimits": "((NPCClass=BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Sarco/Sarco_Character_BP.Sarco_Character_BP_C',MaxPercentageOfDesiredNumToAllow=0.800000),(NPCClass=BlueprintGeneratedClass'/Game/PrimalEarth/Dinos/Allosaurus/Allo_Character_BP.Allo_Character_BP_C',MaxPercentageOfDesiredNumToAllow=0.200000))", 1478 | "MaxDesiredNumEnemiesMultiplier": 1.2 1479 | } 1480 | ], 1481 | "idGenerator": 1148, 1482 | "regionsIdGenerator": 0, 1483 | "shipPathsIdGenerator": 2, 1484 | "shipPaths": [], 1485 | "lastImageOverride": "0001-01-01T00:00:00", 1486 | "serverTemplates": [ 1487 | { 1488 | "templateColorR": 0.05, 1489 | "templateColorG": 0.2, 1490 | "templateColorB": 1.0, 1491 | "gridX": 0, 1492 | "gridY": 0, 1493 | "MachineIdTag": "", 1494 | "ip": "", 1495 | "name": "Polar", 1496 | "port": 0, 1497 | "gamePort": 0, 1498 | "seamlessDataPort": 27000, 1499 | "isHomeServer": false, 1500 | "AdditionalCmdLineParams": "", 1501 | "OverrideShooterGameModeDefaultGameIni": {}, 1502 | "floorZDist": 0, 1503 | "utcOffset": 0, 1504 | "transitionMinZ": 0, 1505 | "GlobalBiomeSeamlessServerGridPreOffsetValues": "(BiomeZoneName=\"Polar At Land\",PreOffsetMaxDistanceFromShore=100000.000000,PreOffsetTemperatureMultiplier=0.500000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=0.500000,PreOffsetTemperatureAdditionMaxDistanceFromShore=-15.000000,PreOffsetTemperatureAddition=-15.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Polar Open Water\",BiomeZoneNameAltDistanceAmount=0.000000)", 1506 | "GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater": "(BiomeZoneName=\"Polar Ocean Water\",PreOffsetMaxDistanceFromShore=17500.000000,PreOffsetTemperatureMultiplier=0.330000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=0.330000,PreOffsetTemperatureAdditionMaxDistanceFromShore=-72.000000,PreOffsetTemperatureAddition=-25.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Polar Deep Ocean\",BiomeZoneNameAltDistanceAmount=0.500000)", 1507 | "OceanDinoDepthEntriesOverride": "", 1508 | "oceanFloatsamCratesOverride": "", 1509 | "treasureMapLootTablesOverride": "", 1510 | "oceanEpicSpawnEntriesOverrideTemplateName": "", 1511 | "NPCShipSpawnEntriesOverrideTemplateName": "", 1512 | "regionOverrides": "(SoundOverrides=(NavalCombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_SeaCombatArcticDay_v1.ATL_SeaCombatArcticDay_v1',NavalCombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_SeaCombatArcticNight_v1.ATL_SeaCombatArcticNight_v1',CombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_LandCombatArcticDay_v2.ATL_LandCombatArcticDay_v2',CombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_LandCombatArcticNight_v1.ATL_LandCombatArcticNight_v1',CombatMusicDay_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatArcticDay_v2.ATL_LandCombatArcticDay_v2',CombatMusicNight_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatArcticNight_v1.ATL_LandCombatArcticNight_v1',Sound_TransitionToMorning=SoundWave'/Game/Atlas/Stingers/ATL_Sting_ArcticMorning.ATL_Sting_ArcticMorning',Sound_TransitionToMidDay=SoundWave'/Game/Atlas/Stingers/ATL_Sting_ArcticNoon.ATL_Sting_ArcticNoon',Sound_TransitionToNight=SoundWave'/Game/Atlas/Stingers/ATL_Sting_ArcticNight.ATL_Sting_ArcticNight',Sound_SetSail=SoundWave'/Game/Atlas/Stingers/ATL_Sting_ArcticSetSail.ATL_Sting_ArcticSetSail',Sound_Respawn=None,Sound_CreateNewCharacter=None),bDisableClaimFlags=False)", 1513 | "waterColorR": 0.01, 1514 | "waterColorG": 0.12, 1515 | "waterColorB": 0.5, 1516 | "skyStyleIndex": 2, 1517 | "ServerCustomDatas1": ",DisableRain,ChanceForCold,NPCShipDifficultyMult,NPCShipDifficultyLerp,FloatsamQualityMultiplier,", 1518 | "ServerCustomDatas2": ",1,1,1.25,0.33,1.2,", 1519 | "ClientCustomDatas1": ",OceanDepthFadeExponent,", 1520 | "ClientCustomDatas2": ",-1,", 1521 | "lastModified": "0001-01-01T00:00:00", 1522 | "lastImageOverride": "0001-01-01T00:00:00", 1523 | "islandLocked": false, 1524 | "discoLocked": false, 1525 | "pathsLocked": false, 1526 | "extraSublevels": [] 1527 | }, 1528 | { 1529 | "templateColorR": 0.3, 1530 | "templateColorG": 0.2, 1531 | "templateColorB": 0.02, 1532 | "gridX": 0, 1533 | "gridY": 0, 1534 | "MachineIdTag": "", 1535 | "ip": "", 1536 | "name": "Temperate", 1537 | "port": 0, 1538 | "gamePort": 0, 1539 | "seamlessDataPort": 27000, 1540 | "isHomeServer": false, 1541 | "AdditionalCmdLineParams": "", 1542 | "OverrideShooterGameModeDefaultGameIni": {}, 1543 | "floorZDist": 0, 1544 | "utcOffset": 0, 1545 | "transitionMinZ": 0, 1546 | "GlobalBiomeSeamlessServerGridPreOffsetValues": "(BiomeZoneName=\"Temperate At Land\",PreOffsetMaxDistanceFromShore=100000.000000,PreOffsetTemperatureMultiplier=1.000000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=1.000000,PreOffsetTemperatureAdditionMaxDistanceFromShore=-9.000000,PreOffsetTemperatureAddition=0.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Temperate Open Water\",BiomeZoneNameAltDistanceAmount=0.000000)", 1547 | "GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater": "(BiomeZoneName=\"Temperate Ocean Water\",PreOffsetMaxDistanceFromShore=17500.000000,PreOffsetTemperatureMultiplier=1.000000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=1.000000,PreOffsetTemperatureAdditionMaxDistanceFromShore=-31.000000,PreOffsetTemperatureAddition=-5.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Temperate Deep Ocean\",BiomeZoneNameAltDistanceAmount=0.500000)", 1548 | "OceanDinoDepthEntriesOverride": "", 1549 | "oceanFloatsamCratesOverride": "", 1550 | "treasureMapLootTablesOverride": "", 1551 | "oceanEpicSpawnEntriesOverrideTemplateName": "", 1552 | "NPCShipSpawnEntriesOverrideTemplateName": "", 1553 | "regionOverrides": "(SoundOverrides=(NavalCombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_SeaCombatTemperateDay_v2.ATL_SeaCombatTemperateDay_v2',NavalCombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_SeaCombatTemperateNight_v2.ATL_SeaCombatTemperateNight_v2',CombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_LandCombatTemperateDay_v1.ATL_LandCombatTemperateDay_v1',CombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_LandCombatTemperateNight_v1.ATL_LandCombatTemperateNight_v1',CombatMusicDay_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatTemperateDay_v1.ATL_LandCombatTemperateDay_v1',CombatMusicNight_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatTemperateNight_v1.ATL_LandCombatTemperateNight_v1',Sound_TransitionToMorning=SoundWave'/Game/Atlas/Stingers/ATL_Sting_TemperateMorning.ATL_Sting_TemperateMorning',Sound_TransitionToMidDay=SoundWave'/Game/Atlas/Stingers/ATL_Sting_TemperateNoon.ATL_Sting_TemperateNoon',Sound_TransitionToNight=SoundWave'/Game/Atlas/Stingers/ATL_Sting_TemperateNight.ATL_Sting_TemperateNight',Sound_SetSail=SoundWave'/Game/Atlas/Stingers/ATL_Sting_SeaTemperateSetSail.ATL_Sting_SeaTemperateSetSail',Sound_Respawn=None,Sound_CreateNewCharacter=None),bDisableClaimFlags=False)", 1554 | "waterColorR": 0.05, 1555 | "waterColorG": 0.3, 1556 | "waterColorB": 0.35, 1557 | "skyStyleIndex": 0, 1558 | "ClientCustomDatas1": ",OceanDepthFadeExponent,", 1559 | "ClientCustomDatas2": ",-3,", 1560 | "lastModified": "0001-01-01T00:00:00", 1561 | "lastImageOverride": "0001-01-01T00:00:00", 1562 | "islandLocked": false, 1563 | "discoLocked": false, 1564 | "pathsLocked": false, 1565 | "extraSublevels": [] 1566 | }, 1567 | { 1568 | "templateColorR": 0.1, 1569 | "templateColorG": 1.0, 1570 | "templateColorB": 0.2, 1571 | "gridX": 0, 1572 | "gridY": 0, 1573 | "MachineIdTag": "", 1574 | "ip": "", 1575 | "name": "Equatorial", 1576 | "port": 0, 1577 | "gamePort": 0, 1578 | "seamlessDataPort": 27000, 1579 | "isHomeServer": false, 1580 | "AdditionalCmdLineParams": "", 1581 | "OverrideShooterGameModeDefaultGameIni": {}, 1582 | "floorZDist": 0, 1583 | "utcOffset": 0, 1584 | "transitionMinZ": 0, 1585 | "GlobalBiomeSeamlessServerGridPreOffsetValues": "(BiomeZoneName=\"Equatorial At Land\",PreOffsetMaxDistanceFromShore=100000.000000,PreOffsetTemperatureMultiplier=1.333000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=1.200000,PreOffsetTemperatureAdditionMaxDistanceFromShore=7.000000,PreOffsetTemperatureAddition=8.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Equatorial Open Water\",BiomeZoneNameAltDistanceAmount=0.000000)", 1586 | "GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater": "(BiomeZoneName=\"Equatorial Ocean Water\",PreOffsetMaxDistanceFromShore=17500.000000,PreOffsetTemperatureMultiplier=1.330000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=1.150000,PreOffsetTemperatureAdditionMaxDistanceFromShore=-24.000000,PreOffsetTemperatureAddition=7.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Equatorial Deep Ocean\",BiomeZoneNameAltDistanceAmount=0.500000)", 1587 | "OceanDinoDepthEntriesOverride": "", 1588 | "oceanFloatsamCratesOverride": "", 1589 | "treasureMapLootTablesOverride": "", 1590 | "oceanEpicSpawnEntriesOverrideTemplateName": "", 1591 | "NPCShipSpawnEntriesOverrideTemplateName": "", 1592 | "regionOverrides": "(SoundOverrides=(NavalCombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_SeaCombatJungleDay_v1.ATL_SeaCombatJungleDay_v1',NavalCombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_SeaCombatJungleNight_v1.ATL_SeaCombatJungleNight_v1',CombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_LandCombatJungleDay_v1.ATL_LandCombatJungleDay_v1',CombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_LandCombatJungleNight_v1.ATL_LandCombatJungleNight_v1',CombatMusicDay_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatJungleDay_v1.ATL_LandCombatJungleDay_v1',CombatMusicNight_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatJungleNight_v1.ATL_LandCombatJungleNight_v1',Sound_TransitionToMorning=SoundWave'/Game/Atlas/Stingers/ATL_Sting_JungleMorning.ATL_Sting_JungleMorning',Sound_TransitionToMidDay=SoundWave'/Game/Atlas/Stingers/ATL_Sting_JungleNoon.ATL_Sting_JungleNoon',Sound_TransitionToNight=SoundWave'/Game/Atlas/Stingers/ATL_Sting_JungleNight.ATL_Sting_JungleNight',Sound_SetSail=SoundWave'/Game/Atlas/Stingers/ATL_Sting_JungleSetSail.ATL_Sting_JungleSetSail',Sound_Respawn=None,Sound_CreateNewCharacter=None),bDisableClaimFlags=False)", 1593 | "waterColorR": 0.04, 1594 | "waterColorG": 0.4, 1595 | "waterColorB": 0.08, 1596 | "skyStyleIndex": 4, 1597 | "ServerCustomDatas1": ",RainIntervalMultiplier,", 1598 | "ServerCustomDatas2": ",0.36,", 1599 | "ClientCustomDatas1": ",OceanDepthFadeExponent,", 1600 | "ClientCustomDatas2": ",-0.75,", 1601 | "lastModified": "0001-01-01T00:00:00", 1602 | "lastImageOverride": "0001-01-01T00:00:00", 1603 | "islandLocked": false, 1604 | "discoLocked": false, 1605 | "pathsLocked": false, 1606 | "extraSublevels": [] 1607 | }, 1608 | { 1609 | "templateColorR": 1.0, 1610 | "templateColorG": 0.0, 1611 | "templateColorB": 0.0, 1612 | "gridX": 0, 1613 | "gridY": 0, 1614 | "MachineIdTag": "", 1615 | "ip": "", 1616 | "name": "Desert", 1617 | "port": 0, 1618 | "gamePort": 0, 1619 | "seamlessDataPort": 27000, 1620 | "isHomeServer": false, 1621 | "AdditionalCmdLineParams": "", 1622 | "OverrideShooterGameModeDefaultGameIni": {}, 1623 | "floorZDist": 0, 1624 | "utcOffset": 0, 1625 | "transitionMinZ": 0, 1626 | "GlobalBiomeSeamlessServerGridPreOffsetValues": "(BiomeZoneName=\"Desert At Land\",PreOffsetMaxDistanceFromShore=100000.000000,PreOffsetTemperatureMultiplier=2.000000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=2.000000,PreOffsetTemperatureAdditionMaxDistanceFromShore=-11.000000,PreOffsetTemperatureAddition=-10.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Desert Open Water\",BiomeZoneNameAltDistanceAmount=0.000000)", 1627 | "GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater": "(BiomeZoneName=\"Desert Ocean Water\",PreOffsetMaxDistanceFromShore=17500.000000,PreOffsetTemperatureMultiplier=2.000000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=1.330000,PreOffsetTemperatureAdditionMaxDistanceFromShore=-30.000000,PreOffsetTemperatureAddition=-11.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Desert Deep Ocean\",BiomeZoneNameAltDistanceAmount=0.500000)", 1628 | "OceanDinoDepthEntriesOverride": "", 1629 | "oceanFloatsamCratesOverride": "", 1630 | "treasureMapLootTablesOverride": "", 1631 | "oceanEpicSpawnEntriesOverrideTemplateName": "", 1632 | "NPCShipSpawnEntriesOverrideTemplateName": "", 1633 | "regionOverrides": "(SoundOverrides=(NavalCombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_SeaCombatDesertDay_v1.ATL_SeaCombatDesertDay_v1',NavalCombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_SeaCombatDesertNight_v1.ATL_SeaCombatDesertNight_v1',CombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_LandCombatDesertDay_v1.ATL_LandCombatDesertDay_v1',CombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_LandCombatDesertNight_v1.ATL_LandCombatDesertNight_v1',CombatMusicDay_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatDesertDay_v1.ATL_LandCombatDesertDay_v1',CombatMusicNight_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatDesertNight_v1.ATL_LandCombatDesertNight_v1',Sound_TransitionToMorning=SoundWave'/Game/Atlas/Stingers/ATL_Sting_DesertMorning.ATL_Sting_DesertMorning',Sound_TransitionToMidDay=SoundWave'/Game/Atlas/Stingers/ATL_Sting_DesertNoon.ATL_Sting_DesertNoon',Sound_TransitionToNight=SoundWave'/Game/Atlas/Stingers/ATL_Sting_DesertNight.ATL_Sting_DesertNight',Sound_SetSail=SoundWave'/Game/Atlas/Stingers/ATL_Sting_SeaDesertSetSail.ATL_Sting_SeaDesertSetSail',Sound_Respawn=None,Sound_CreateNewCharacter=None),bDisableClaimFlags=False)", 1634 | "waterColorR": 0.46, 1635 | "waterColorG": 0.4, 1636 | "waterColorB": 0.3, 1637 | "skyStyleIndex": 3, 1638 | "ServerCustomDatas1": ",DisableFog,DisableRain,ChanceForCold,", 1639 | "ServerCustomDatas2": ",1,1,0,", 1640 | "ClientCustomDatas1": ",OceanDepthFadeExponent,", 1641 | "ClientCustomDatas2": ",-15,", 1642 | "lastModified": "0001-01-01T00:00:00", 1643 | "lastImageOverride": "0001-01-01T00:00:00", 1644 | "islandLocked": false, 1645 | "discoLocked": false, 1646 | "pathsLocked": false, 1647 | "extraSublevels": [] 1648 | }, 1649 | { 1650 | "templateColorR": 1.0, 1651 | "templateColorG": 1.0, 1652 | "templateColorB": 0.0, 1653 | "gridX": 0, 1654 | "gridY": 0, 1655 | "MachineIdTag": "", 1656 | "ip": "", 1657 | "name": "Tropical", 1658 | "port": 0, 1659 | "gamePort": 0, 1660 | "seamlessDataPort": 27000, 1661 | "isHomeServer": false, 1662 | "AdditionalCmdLineParams": "", 1663 | "OverrideShooterGameModeDefaultGameIni": {}, 1664 | "floorZDist": 0, 1665 | "utcOffset": 0, 1666 | "transitionMinZ": 0, 1667 | "GlobalBiomeSeamlessServerGridPreOffsetValues": "(BiomeZoneName=\"Tropical At Land\",PreOffsetMaxDistanceFromShore=100000.000000,PreOffsetTemperatureMultiplier=1.350000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=1.200000,PreOffsetTemperatureAdditionMaxDistanceFromShore=2.000000,PreOffsetTemperatureAddition=6.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Tropical Open Water\",BiomeZoneNameAltDistanceAmount=0.000000)", 1668 | "GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater": "(BiomeZoneName=\"Tropical Ocean Water\",PreOffsetMaxDistanceFromShore=17500.000000,PreOffsetTemperatureMultiplier=1.400000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=1.250000,PreOffsetTemperatureAdditionMaxDistanceFromShore=-25.000000,PreOffsetTemperatureAddition=3.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Tropical Deep Ocean\",BiomeZoneNameAltDistanceAmount=0.500000)", 1669 | "OceanDinoDepthEntriesOverride": "", 1670 | "oceanFloatsamCratesOverride": "", 1671 | "treasureMapLootTablesOverride": "", 1672 | "oceanEpicSpawnEntriesOverrideTemplateName": "", 1673 | "NPCShipSpawnEntriesOverrideTemplateName": "", 1674 | "regionOverrides": "(SoundOverrides=(NavalCombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_SeaCombatJungleDay_v1.ATL_SeaCombatJungleDay_v1',NavalCombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_SeaCombatJungleNight_v1.ATL_SeaCombatJungleNight_v1',CombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_LandCombatJungleDay_v1.ATL_LandCombatJungleDay_v1',CombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_LandCombatJungleNight_v1.ATL_LandCombatJungleNight_v1',CombatMusicDay_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatJungleDay_v1.ATL_LandCombatJungleDay_v1',CombatMusicNight_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatJungleNight_v1.ATL_LandCombatJungleNight_v1',Sound_TransitionToMorning=SoundWave'/Game/Atlas/Stingers/ATL_Sting_JungleMorning.ATL_Sting_JungleMorning',Sound_TransitionToMidDay=SoundWave'/Game/Atlas/Stingers/ATL_Sting_JungleNoon.ATL_Sting_JungleNoon',Sound_TransitionToNight=SoundWave'/Game/Atlas/Stingers/ATL_Sting_JungleNight.ATL_Sting_JungleNight',Sound_SetSail=SoundWave'/Game/Atlas/Stingers/ATL_Sting_JungleSetSail.ATL_Sting_JungleSetSail',Sound_Respawn=None,Sound_CreateNewCharacter=None),bDisableClaimFlags=False)", 1675 | "waterColorR": 0.12, 1676 | "waterColorG": 0.63, 1677 | "waterColorB": 0.7, 1678 | "skyStyleIndex": 4, 1679 | "ServerCustomDatas1": ",ChanceForCold,", 1680 | "ServerCustomDatas2": ",0,", 1681 | "ClientCustomDatas1": ",OceanDepthFadeExponent,", 1682 | "ClientCustomDatas2": ",-0.6,", 1683 | "lastModified": "0001-01-01T00:00:00", 1684 | "lastImageOverride": "0001-01-01T00:00:00", 1685 | "islandLocked": false, 1686 | "discoLocked": false, 1687 | "pathsLocked": false, 1688 | "extraSublevels": [] 1689 | }, 1690 | { 1691 | "templateColorR": 0.0, 1692 | "templateColorG": 1.0, 1693 | "templateColorB": 1.0, 1694 | "gridX": 0, 1695 | "gridY": 0, 1696 | "MachineIdTag": "", 1697 | "ip": "", 1698 | "name": "Tundra", 1699 | "port": 0, 1700 | "gamePort": 0, 1701 | "seamlessDataPort": 27000, 1702 | "isHomeServer": false, 1703 | "AdditionalCmdLineParams": "", 1704 | "OverrideShooterGameModeDefaultGameIni": {}, 1705 | "floorZDist": 0, 1706 | "utcOffset": 0, 1707 | "transitionMinZ": 0, 1708 | "GlobalBiomeSeamlessServerGridPreOffsetValues": "(BiomeZoneName=\"Tundra At Land\",PreOffsetMaxDistanceFromShore=100000.000000,PreOffsetTemperatureMultiplier=0.800000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=0.800000,PreOffsetTemperatureAdditionMaxDistanceFromShore=-18.000000,PreOffsetTemperatureAddition=-12.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Tundra Open Water\",BiomeZoneNameAltDistanceAmount=0.000000)", 1709 | "GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater": "(BiomeZoneName=\"Tundra Ocean Water\",PreOffsetMaxDistanceFromShore=17500.000000,PreOffsetTemperatureMultiplier=0.750000,PreOffsetTemperatureMultiplierMaxDistanceFromShore=0.750000,PreOffsetTemperatureAdditionMaxDistanceFromShore=-45.000000,PreOffsetTemperatureAddition=-20.000000,PreOffsetTemperatureExponent=1.000000,PreOffsetTemperatureExponentMaxDistanceFromShore=1.000000,BiomeZoneNameAltDistanceName=\"Tundra Deep Ocean\",BiomeZoneNameAltDistanceAmount=0.500000)", 1710 | "OceanDinoDepthEntriesOverride": "", 1711 | "oceanFloatsamCratesOverride": "", 1712 | "treasureMapLootTablesOverride": "", 1713 | "oceanEpicSpawnEntriesOverrideTemplateName": "", 1714 | "NPCShipSpawnEntriesOverrideTemplateName": "", 1715 | "regionOverrides": "(SoundOverrides=(NavalCombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_SeaCombatTemperateDay_v2.ATL_SeaCombatTemperateDay_v2',NavalCombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_SeaCombatTemperateNight_v2.ATL_SeaCombatTemperateNight_v2',CombatMusicDay=SoundWave'/Game/Atlas/Music/ATL_LandCombatTemperateDay_v1.ATL_LandCombatTemperateDay_v1',CombatMusicNight=SoundWave'/Game/Atlas/Music/ATL_LandCombatTemperateNight_v1.ATL_LandCombatTemperateNight_v1',CombatMusicDay_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatTemperateDay_v1.ATL_LandCombatTemperateDay_v1',CombatMusicNight_Heavy=SoundWave'/Game/Atlas/Music/ATL_LandCombatTemperateNight_v1.ATL_LandCombatTemperateNight_v1',Sound_TransitionToMorning=SoundWave'/Game/Atlas/Stingers/ATL_Sting_TemperateMorning.ATL_Sting_TemperateMorning',Sound_TransitionToMidDay=SoundWave'/Game/Atlas/Stingers/ATL_Sting_TemperateNoon.ATL_Sting_TemperateNoon',Sound_TransitionToNight=SoundWave'/Game/Atlas/Stingers/ATL_Sting_TemperateNight.ATL_Sting_TemperateNight',Sound_SetSail=SoundWave'/Game/Atlas/Stingers/ATL_Sting_SeaTemperateSetSail.ATL_Sting_SeaTemperateSetSail',Sound_Respawn=None,Sound_CreateNewCharacter=None),bDisableClaimFlags=False)", 1716 | "waterColorR": 0.7, 1717 | "waterColorG": 0.72, 1718 | "waterColorB": 1.0, 1719 | "skyStyleIndex": 5, 1720 | "ServerCustomDatas1": ",FogIntervalMultiplier,", 1721 | "ServerCustomDatas2": ",0.36,", 1722 | "ClientCustomDatas1": ",OceanDepthFadeExponent,", 1723 | "ClientCustomDatas2": ",-5.0,", 1724 | "lastModified": "0001-01-01T00:00:00", 1725 | "lastImageOverride": "0001-01-01T00:00:00", 1726 | "islandLocked": false, 1727 | "discoLocked": false, 1728 | "pathsLocked": false, 1729 | "extraSublevels": [] 1730 | } 1731 | ] 1732 | } 1733 | -------------------------------------------------------------------------------- /netinstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Net Installer, used with curl 5 | # 6 | 7 | atlasstGithubRepo="BoiseComputer/atlas-server-tools" 8 | 9 | steamcmd_user="$1" 10 | shift 11 | 12 | args=() 13 | output=/dev/null 14 | unstable= 15 | userinstall= 16 | 17 | for arg in "$@"; do 18 | case "$arg" in 19 | --verbose) output=/dev/fd/1; ;; 20 | --output=*) output="${1#--output=}"; ;; 21 | --unstable) unstable=1; ;; 22 | --perform-user-install) userinstall=yes; ;; 23 | *) 24 | if [ -n "$channel" ]; then 25 | args+="$arg" 26 | else 27 | channel="$arg" 28 | fi 29 | ;; 30 | esac 31 | done 32 | 33 | if [ -z "$channel" ]; then 34 | channel="master" 35 | fi 36 | 37 | if [[ "$steamcmd_user" == "--me" && -z "$userinstall" ]]; then 38 | echo "You have requested a user-install. You probably don't want this." 39 | echo "A user-install will create ~/.config/atlasmanager/instances/main.cfg" 40 | echo "This config file will override /etc/atlasmanager/instances/main.cfg" 41 | echo "Add --perform-user-install if you really want this." 42 | exit 1 43 | fi 44 | 45 | function doInstallFromCommit(){ 46 | local commit="$1" 47 | tmpdir="$(mktemp -t -d "atlas-server-tools-XXXXXXXX")" 48 | if [ -z "$tmpdir" ]; then echo "Unable to create temporary directory"; exit 1; fi 49 | cd "$tmpdir" 50 | echo "Downloading installer" 51 | curl -s -L "https://github.com/${atlasstGithubRepo}/archive/${commit}.tar.gz" | tar -xz 52 | cd "atlas-server-tools-${commit}/tools" 53 | if [ ! -f "install.sh" ]; then echo "install.sh not found in $PWD"; exit 1; fi 54 | sed -i -e "s|^atlasstCommit='.*'|atlasstCommit='${commit}'|" \ 55 | -e "s|^atlasstTag='.*'|atlasstTag='${tagname}'|" \ 56 | atlasmanager 57 | echo "Running install.sh" 58 | bash install.sh "$steamcmd_user" "${reinstall_args[@]}" 59 | result=$? 60 | cd / 61 | rm -rf "$tmpdir" 62 | 63 | if [ "$result" = 0 ] || [ "$result" = 2 ]; then 64 | echo "ATLAS Server Tools successfully installed" 65 | else 66 | echo "ATLAS Server Tools install failed" 67 | fi 68 | return $result 69 | } 70 | 71 | function doInstallFromRelease(){ 72 | local tagname= 73 | local desc= 74 | 75 | echo "Getting latest release..." 76 | # Read the variables from github 77 | while IFS=$'\t' read n v; do 78 | case "${n}" in 79 | tag_name) tagname="${v}"; ;; 80 | body) desc="${v}" 81 | esac 82 | done < <(curl -s "https://api.github.com/repos/${atlasstGithubRepo}/releases/latest" | sed -n 's/^ "\([^"]*\)": "*\([^"]*\)"*,*/\1\t\2/p') 83 | 84 | if [ -n "$tagname" ]; then 85 | echo "Latest release is ${tagname}" 86 | echo "Getting commit for latest release..." 87 | local commit="$(curl -s "https://api.github.com/repos/${atlasstGithubRepo}/git/refs/tags/${tagname}" | sed -n 's/^ *"sha": "\(.*\)",.*/\1/p')" 88 | doInstallFromCommit "$commit" 89 | else 90 | echo "Unable to get latest release" 91 | return 1 92 | fi 93 | } 94 | 95 | function doInstallFromBranch(){ 96 | channel="$1" 97 | commit="`curl -s "https://api.github.com/repos/${atlasstGithubRepo}/git/refs/heads/${channel}" | sed -n 's/^ *"sha": "\(.*\)",.*/\1/p'`" 98 | 99 | if [ -z "$commit" ]; then 100 | if [ -n "$unstable" ]; then 101 | echo "Channel ${channel} not found - trying master" 102 | doInstallFromBranch master 103 | else 104 | doInstallFromRelease 105 | fi 106 | else 107 | doInstallFromCommit "$commit" 108 | fi 109 | } 110 | 111 | # Download and untar installation files 112 | cd "$TEMP" 113 | 114 | if [ "$channel" = "master" ] && [ -z "$unstable" ]; then 115 | doInstallFromRelease 116 | else 117 | doInstallFromBranch "$channel" 118 | fi 119 | -------------------------------------------------------------------------------- /tools/atlasmanager.cfg: -------------------------------------------------------------------------------- 1 | atlasstChannel="master" # change it to a different branch to get non-stable versions 2 | install_bindir="/usr/bin" 3 | install_libexecdir="/usr/libexec/atlasmanager" 4 | install_datadir="/usr/share/atlasmanager" 5 | 6 | # config SteamCMD 7 | steamcmdroot="/usr/games" # path of your steamcmd instance 8 | steamcmdexec="steamcmd" # name of steamcmd executable 9 | steamcmd_user="steam" # name of the system user who own steamcmd folder 10 | steamcmd_appinfocache="/home/steam/.steam/appcache/appinfo.vdf" # cache of the appinfo command 11 | steamcmd_workshoplog="/home/steam/.steam/logs/workshop_log.txt" # Steam workshop log 12 | #steamlogin="anonymous" # Uncomment this to specify steam login instead of using anonymous login 13 | #steamcmdhome=/home/steam # Uncomment this to override steamcmd home directory 14 | 15 | # config environment 16 | atlasserverroot="/home/steam/ATLAS" # path of your ATLAS server files (default ~/ATLAS) 17 | atlasserverexec="ShooterGame/Binaries/Linux/ShooterGameServer" # name of ATLAS server executable 18 | atlasbackupdir="/home/steam/ATLAS-Backups" # path to backup directory 19 | atlaswarnminutes="60" # number of minutes to warn players when using update --warn 20 | atlasautorestartfile="ShooterGame/Saved/.autorestart" # path to autorestart file 21 | atlasAutoUpdateOnStart="false" # set this to true if you want to always update before startup 22 | atlasBackupPreUpdate="false" # set this to true if you want to perform a backup before updating 23 | #atlasStagingDir="/home/steam/ATLAS-Staging" # Uncomment to enable updates to be fully downloaded before restarting the server (reduces downtime while updating) 24 | 25 | # Options to automatically remove old backups to keep backup size in check 26 | # Each compressed backup is generally about 1-2MB in size. 27 | atlasMaxBackupSizeMB="500" # Set to automatically remove old backups when size exceeds this limit 28 | #atlasMaxBackupSizeGB="2" # Uncomment this and comment the above to specify the limit in whole GB 29 | 30 | # Update warning messages 31 | # Modify as desired, putting the %d replacement operator where the number belongs 32 | msgWarnUpdateMinutes="This ATLAS server will shutdown for an update in %d minutes" 33 | msgWarnUpdateSeconds="This ATLAS server will shutdown for an update in %d seconds" 34 | msgWarnRestartMinutes="This ATLAS server will shutdown for a restart in %d minutes" 35 | msgWarnRestartSeconds="This ATLAS server will shutdown for a restart in %d seconds" 36 | msgWarnShutdownMinutes="This ATLAS server will shutdown in %d minutes" 37 | msgWarnShutdownSeconds="This ATLAS server will shutdown in %d seconds" 38 | msgWarnCancelled="Restart cancelled by player request" 39 | 40 | # Notifications 41 | # discordWebhookURL="https://discordapp.com/api/webhooks/{webhook.id}/{webhook.token}" 42 | # notifyMsgShuttingDown="Shutting down" 43 | # notifyMsgStarting="Starting" 44 | # notifyMsgServerUp="Server is up" 45 | # notifyMsgStoppedListening="Server has stopped listening - restarting" 46 | # notifyMsgServerTerminated="Server exited - restarting" 47 | # notifyTemplate="Message from instance {instance} on server {server}: {msg}" 48 | # noNotifyWarning=true 49 | 50 | # Restart cancel chat command 51 | #chatCommandRestartCancel="/cancelupdate" 52 | 53 | # ATLAS server common options - use atlas_= 54 | # comment out these values if you want to define them 55 | # inside your GameUserSettings.ini file 56 | serverMap="Ocean" # server map (default TheIsland) 57 | #serverMapModId="469987622" # Uncomment this to specify the Map Mod Id ( in http://steamcommunity.com/sharedfiles/filedetails/?id=) 58 | #atlas_TotalConversionMod="496735411" # Uncomment this to specify a total-conversion mod 59 | atlas_RCONEnabled="True" # Enable RCON Protocol 60 | atlas_ServerPassword="" # ATLAS server password, empty: no password required to login 61 | atlas_ServerAdminPassword="keyboardcat" # ATLAS server admin password, KEEP IT SAFE! 62 | atlas_MaxPlayers="70" 63 | #atlas_GameModIds="487516323,487516324,487516325" # Uncomment to specify additional mods by Mod Id separated by commas 64 | #atlas_AltSaveDirectoryName="SotF" # Uncomment to specify a different save directory name 65 | 66 | # ATLAS server flags - use atlasflag_=true 67 | #atlasflag_OnlyAdminRejoinAsSpectator=true # Uncomment to only allow admins to rejoin as spectator 68 | #atlasflag_DisableDeathSpectator=true # Uncomment to disable players from becoming spectators when they die 69 | 70 | # ATLAS server options - i.e. for -optname=val, use atlasopt_optname=val 71 | #atlasopt_StructureDestructionTag=DestroySwampSnowStructures 72 | 73 | # config Service 74 | logdir="/var/log/atlastools" # Logs path (default /var/log/atlastools) 75 | 76 | # steamdb specific 77 | appid=1006030 # Linux server App ID 78 | mod_appid=834910 # App ID for mods 79 | 80 | # Mod OS Selection 81 | mod_branch=Windows 82 | # Add mod-specific OS selection below: 83 | #mod_branch_496735411=Windows 84 | 85 | # alternate configs 86 | # example for config name "atlas1": 87 | #configfile_atlas1="/path/to/config/file" 88 | 89 | #redis_local=false # Uncomment this line to if your redis database is not local. 90 | redis_config_file="/home/steam/ATLAS/AtlasTools/RedisDatabase/redis.conf" 91 | redis_pid_file="/home/steam/ATLAS/AtlasTools/RedisDatabase/redis_atlas.pid" 92 | defaultinstance="main" # When using the start @all command, this is the first instance that will start. 93 | atlasStartDelay=20 # When using the start @all command, this is the maximum delay when waiting for the first instance to begin. 94 | 95 | #atlas_SeamlessIP=1.2.3.4 # Set your Seamless IP here for all instances on this server. 96 | #atlas_GridConfig="ServerGrid.json" # Uncomment and enter filename of json file for your map grid if not default. 97 | atlasflag_log=true 98 | atlasflag_server=true 99 | atlas_culture="en" 100 | atlas_MapPlayerLocation="True" 101 | atlasflag_NoCrashDialog=true 102 | #atlasflag_NoBattlEye=true # Uncomment this to disable BattlEye for all instances. 103 | atlasflag_manualmanagedmods=true 104 | -------------------------------------------------------------------------------- /tools/bash_completion/atlasmanager: -------------------------------------------------------------------------------- 1 | # a bash_completion for atlasmanager with server names 2 | # ATLAS: survival evolved manager 3 | # 4 | # Original author: AnEmortalKid 5 | 6 | _atlasmanager() 7 | { 8 | local cur prev opts home_instances etc_instances 9 | COMPREPLY=() 10 | cur="${COMP_WORDS[COMP_CWORD]}" 11 | prev="${COMP_WORDS[COMP_CWORD-1]}" 12 | 13 | # retrieve the ones in /etc/atlasmanager/instances first 14 | etc_instances=$(for f in `ls -1 /etc/atlasmanager/instances/*.cfg`; do if [ -f "${f}" ]; then instancename="${f##*/}"; echo "@${instancename%.cfg}"; fi done) 15 | 16 | # check that ${HOME}/.config/atlasmanager/instances exists 17 | if [ -d "${HOME}/.config/atlasmanager/instances/" ] ; then 18 | # check that it also isn't empty if it exists 19 | if [ "$(ls -A ${HOME}/.config/atlasmanager/instances/)" ] ; then 20 | home_instances=$(for f in `ls -1 ${HOME}/.config/atlasmanager/instances/*.cfg`; do if [ -f "${f}" ]; then instancename="${f##*/}"; echo "@${instancename%.cfg}"; fi done) 21 | fi 22 | fi 23 | 24 | # append both results together for the completion 25 | all_instances="@all ${etc_instances} ${home_instances}" 26 | 27 | if [[ ${cur} == @* ]] ; then 28 | COMPREPLY=( $(compgen -W "${all_instances}" -- ${cur}) ) 29 | return 0 30 | fi 31 | } 32 | complete -F _atlasmanager atlasmanager 33 | 34 | -------------------------------------------------------------------------------- /tools/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | userinstall=no 4 | steamcmd_user= 5 | showusage=no 6 | migrateconfig=no 7 | 8 | while [ -n "$1" ]; do 9 | case "$1" in 10 | --me) 11 | userinstall=yes 12 | steamcmd_user="--me" 13 | ;; 14 | -h|--help) 15 | showusage=yes 16 | break 17 | ;; 18 | --prefix=*) 19 | PREFIX="${1#--prefix=}" 20 | ;; 21 | --prefix) 22 | PREFIX="$2" 23 | shift 24 | ;; 25 | --exec-prefix=*) 26 | EXECPREFIX="${1#--exec-prefix=}" 27 | ;; 28 | --exec-prefix) 29 | EXECPREFIX="$2" 30 | shift 31 | ;; 32 | --data-prefix=*) 33 | DATAPREFIX="${1#--data-prefix=}" 34 | ;; 35 | --data-prefix) 36 | DATAPREFIX="$2" 37 | shift 38 | ;; 39 | --install-root=*) 40 | INSTALL_ROOT="${1#--install-root=}" 41 | ;; 42 | --install-root) 43 | INSTALL_ROOT="$2" 44 | shift 45 | ;; 46 | --bindir=*) 47 | BINDIR="${1#--bindir=}" 48 | ;; 49 | --bindir) 50 | BINDIR="$2" 51 | shift 52 | ;; 53 | --libexecdir=*) 54 | LIBEXECDIR="${1#--libexecdir=}" 55 | ;; 56 | --libexecdir) 57 | LIBEXECDIR="$2" 58 | shift 59 | ;; 60 | --datadir=*) 61 | DATADIR="${1#--datadir=}" 62 | ;; 63 | --datadir) 64 | DATADIR="$2" 65 | shift 66 | ;; 67 | --migrate-config) 68 | migrateconfig=yes 69 | ;; 70 | -*) 71 | echo "Invalid option '$1'" 72 | showusage=yes 73 | break; 74 | ;; 75 | *) 76 | if [ -n "$steamcmd_user" ]; then 77 | echo "Multiple users specified" 78 | showusage=yes 79 | break; 80 | elif getent passwd "$1" >/dev/null 2>&1; then 81 | steamcmd_user="$1" 82 | else 83 | echo "Invalid user '$1'" 84 | showusage=yes 85 | break; 86 | fi 87 | ;; 88 | esac 89 | shift 90 | done 91 | 92 | if [ "$userinstall" == "yes" -a "$UID" -eq 0 ]; then 93 | echo "Refusing to perform user-install as root" 94 | showusage=yes 95 | fi 96 | 97 | if [ "$showusage" == "no" -a -z "$steamcmd_user" ]; then 98 | echo "No user specified" 99 | showusage=yes 100 | fi 101 | 102 | if [ "$userinstall" == "yes" ]; then 103 | PREFIX="${PREFIX:-${HOME}}" 104 | EXECPREFIX="${EXECPREFIX:-${PREFIX}}" 105 | DATAPREFIX="${DATAPREFIX:-${PREFIX}/.local/share}" 106 | CONFIGFILE="${PREFIX}/.atlasmanager.cfg" 107 | INSTANCEDIR="${PREFIX}/.config/atlasmanager/instances" 108 | else 109 | PREFIX="${PREFIX:-/usr/local}" 110 | EXECPREFIX="${EXECPREFIX:-${PREFIX}}" 111 | DATAPREFIX="${DATAPREFIX:-${PREFIX}/share}" 112 | CONFIGFILE="/etc/atlasmanager/atlasmanager.cfg" 113 | INSTANCEDIR="/etc/atlasmanager/instances" 114 | fi 115 | 116 | BINDIR="${BINDIR:-${EXECPREFIX}/bin}" 117 | LIBEXECDIR="${LIBEXECDIR:-${EXECPREFIX}/libexec/atlasmanager}" 118 | DATADIR="${DATADIR:-${DATAPREFIX}/atlasmanager}" 119 | 120 | if [ "$showusage" == "yes" ]; then 121 | echo "Usage: ./install.sh {|--me} [OPTIONS]" 122 | echo "You must specify your system steam user who own steamcmd directory to install ATLAS Tools." 123 | echo "Specify the special used '--me' to perform a user-install." 124 | echo 125 | echo " The user atlasmanager should be run as" 126 | echo 127 | echo "Option Description" 128 | echo "--help, -h Show this help text" 129 | echo "--me Perform a user-install" 130 | echo "--prefix Specify the prefix under which to install atlasmanager" 131 | echo " [PREFIX=${PREFIX}]" 132 | echo "--exec-prefix Specify the prefix under which to install executables" 133 | echo " [EXECPREFIX=${EXECPREFIX}]" 134 | echo "--data-prefix Specify the prefix under which to install suppor files" 135 | echo " [DATAPREFIX=${DATAPREFIX}]" 136 | echo "--install-root Specify the staging directory in which to perform the install" 137 | echo " [INSTALL_ROOT=${INSTALL_ROOT}]" 138 | echo "--bindir Specify the directory under which to install executables" 139 | echo " [BINDIR=${BINDIR}]" 140 | echo "--libexecdir Specify the directory under which to install executable support files" 141 | echo " [LIBEXECDIR=${LIBEXECDIR}]" 142 | echo "--datadir Specify the directory under which to install support files" 143 | echo " [DATADIR=${DATADIR}]" 144 | exit 1 145 | fi 146 | 147 | if [ "$userinstall" == "yes" ]; then 148 | # Copy atlasmanager to ~/bin 149 | mkdir -p "${INSTALL_ROOT}${BINDIR}" 150 | cp atlasmanager "${INSTALL_ROOT}${BINDIR}/atlasmanager" 151 | chmod +x "${INSTALL_ROOT}${BINDIR}/atlasmanager" 152 | 153 | # Create a folder in ~/.local/share to store atlasmanager support files 154 | mkdir -p "${INSTALL_ROOT}${DATADIR}" 155 | 156 | # Copy the uninstall script to ~/.local/share/atlasmanager 157 | cp uninstall-user.sh "${INSTALL_ROOT}${DATADIR}/atlasmanager-uninstall.sh" 158 | chmod +x "${INSTALL_ROOT}${DATADIR}/atlasmanager-uninstall.sh" 159 | sed -i -e "s|^BINDIR=.*|BINDIR=\"${BINDIR}\"|" \ 160 | -e "s|^DATADIR=.*|DATADIR=\"${DATADIR}\"|" \ 161 | "${INSTALL_ROOT}${DATADIR}/atlasmanager-uninstall.sh" 162 | 163 | # Create a folder in ~/logs to let ATLAS tools write its own log files 164 | mkdir -p "${INSTALL_ROOT}${PREFIX}/logs/atlastools" 165 | 166 | # Create a folder in ~/.config/atlasamanger to hold instance configs 167 | mkdir -p "${INSTALL_ROOT}${INSTANCEDIR}" 168 | 169 | # Copy example instance config 170 | cp instance.cfg.example "${INSTALL_ROOT}/${INSTANCEDIR}/instance.cfg.example" 171 | # Change the defaults in the new instance config template 172 | sed -i -e "s|\"/home/steam|\"${PREFIX}|" \ 173 | "${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example" 174 | 175 | # Copy atlasmanager.cfg to ~/.atlasmanager.cfg.NEW 176 | cp atlasmanager.cfg "${INSTALL_ROOT}${CONFIGFILE}.example" 177 | # Change the defaults in the new config file 178 | sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"--me\"|" \ 179 | -e "s|\"/home/steam|\"${PREFIX}|" \ 180 | -e "s|/var/log/atlastools|${PREFIX}/logs/atlastools|" \ 181 | -e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \ 182 | -e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \ 183 | -e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \ 184 | "${INSTALL_ROOT}${CONFIGFILE}.example" 185 | 186 | # Copy atlasmanager.cfg to ~/.atlasmanager.cfg if it doesn't already exist 187 | if [ -f "${INSTALL_ROOT}${CONFIGFILE}" ]; then 188 | SUFFIX= 189 | if [ "$migrateconfig" = "no" ]; then 190 | SUFFIX=".NEW" 191 | cp "${INSTALL_ROOT}${CONFIGFILE}" "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}" 192 | fi 193 | 194 | bash ./migrate-config.sh "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}" 195 | bash ./migrate-main-instance.sh "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}" "${INSTALL_ROOT}${INSTANCEDIR}/main.cfg${SUFFIX}" 196 | 197 | echo "A previous version of ATLAS Server Tools was detected in your system, your old configuration was not overwritten. You may need to manually update it." 198 | echo "A copy of the new configuration file was included in '${CONFIGFILE}.NEW'. Make sure to review any changes and update your config accordingly!" 199 | exit 2 200 | else 201 | cp -n "${INSTALL_ROOT}${CONFIGFILE}.example" "${INSTALL_ROOT}${CONFIGFILE}" 202 | cp -n "${INSTALL_ROOT}/${INSTANCEDIR}/instance.cfg.example" "${INSTALL_ROOT}/${INSTANCEDIR}/main.cfg" 203 | fi 204 | else 205 | # Copy atlasmanager to /usr/bin and set permissions 206 | cp atlasmanager "${INSTALL_ROOT}${BINDIR}/atlasmanager" 207 | chmod +x "${INSTALL_ROOT}${BINDIR}/atlasmanager" 208 | 209 | # Copy the uninstall script to ~/.local/share/atlasmanager 210 | mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" 211 | cp uninstall.sh "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager-uninstall.sh" 212 | chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager-uninstall.sh" 213 | sed -i -e "s|^BINDIR=.*|BINDIR=\"${BINDIR}\"|" \ 214 | -e "s|^LIBEXECDIR=.*|LIBEXECDIR=\"${LIBEXECDIR}\"|" \ 215 | -e "s|^DATADIR=.*|DATADIR=\"${DATADIR}\"|" \ 216 | "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager-uninstall.sh" 217 | 218 | # Copy atlasdaemon to /etc/init.d ,set permissions and add it to boot 219 | if [ -f /lib/lsb/init-functions ]; then 220 | # on debian 8, sysvinit and systemd are present. If systemd is available we use it instead of sysvinit 221 | if [ -f /etc/systemd/system.conf ]; then # used by systemd 222 | mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" 223 | cp systemd/atlasmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager.init" 224 | sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager.init" 225 | chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager.init" 226 | cp systemd/atlasmanager.service "${INSTALL_ROOT}/etc/systemd/system/atlasmanager.service" 227 | sed -i "s|=/usr/libexec/atlasmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/atlasmanager.service" 228 | cp systemd/atlasmanager@.service "${INSTALL_ROOT}/etc/systemd/system/atlasmanager@.service" 229 | sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/atlasmanager@.service" 230 | if [ -z "${INSTALL_ROOT}" ]; then 231 | systemctl daemon-reload 232 | systemctl enable atlasmanager.service 233 | echo "ATLAS server will now start on boot, if you want to remove this feature run the following line" 234 | echo "systemctl disable atlasmanager.service" 235 | fi 236 | else # systemd not present, so use sysvinit 237 | cp lsb/atlasdaemon "${INSTALL_ROOT}/etc/init.d/atlasmanager" 238 | chmod +x "${INSTALL_ROOT}/etc/init.d/atlasmanager" 239 | sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}/etc/init.d/atlasmanager" 240 | # add to startup if the system use sysinit 241 | if [ -x /usr/sbin/update-rc.d -a -z "${INSTALL_ROOT}" ]; then 242 | update-rc.d atlasmanager defaults 243 | echo "ATLAS server will now start on boot, if you want to remove this feature run the following line" 244 | echo "update-rc.d -f atlasmanager remove" 245 | fi 246 | fi 247 | elif [ -f /etc/rc.d/init.d/functions ]; then 248 | # on RHEL 7, sysvinit and systemd are present. If systemd is available we use it instead of sysvinit 249 | if [ -f /etc/systemd/system.conf ]; then # used by systemd 250 | mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" 251 | cp systemd/atlasmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager.init" 252 | sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager.init" 253 | chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager.init" 254 | cp systemd/atlasmanager.service "${INSTALL_ROOT}/etc/systemd/system/atlasmanager.service" 255 | sed -i "s|=/usr/libexec/atlasmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/atlasmanager.service" 256 | cp systemd/atlasmanager@.service "${INSTALL_ROOT}/etc/systemd/system/atlasmanager@.service" 257 | sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/atlasmanager@.service" 258 | if [ -z "${INSTALL_ROOT}" ]; then 259 | systemctl daemon-reload 260 | systemctl enable atlasmanager.service 261 | echo "ATLAS server will now start on boot, if you want to remove this feature run the following line" 262 | echo "systemctl disable atlasmanager.service" 263 | fi 264 | else # systemd not preset, so use sysvinit 265 | cp redhat/atlasdaemon "${INSTALL_ROOT}/etc/rc.d/init.d/atlasmanager" 266 | chmod +x "${INSTALL_ROOT}/etc/rc.d/init.d/atlasmanager" 267 | sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}/etc/rc.d/init.d/atlasmanager" 268 | if [ -x /sbin/chkconfig -a -z "${INSTALL_ROOT}" ]; then 269 | chkconfig --add atlasmanager 270 | echo "ATLAS server will now start on boot, if you want to remove this feature run the following line" 271 | echo "chkconfig atlasmanager off" 272 | fi 273 | fi 274 | elif [ -f /sbin/runscript ]; then 275 | cp openrc/atlasdaemon "${INSTALL_ROOT}/etc/init.d/atlasmanager" 276 | chmod +x "${INSTALL_ROOT}/etc/init.d/atlasmanager" 277 | sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}/etc/init.d/atlasmanager" 278 | if [ -x /sbin/rc-update -a -z "${INSTALL_ROOT}" ]; then 279 | rc-update add atlasmanager default 280 | echo "ATLAS server will now start on boot, if you want to remove this feature run the following line" 281 | echo "rc-update del atlasmanager default" 282 | fi 283 | elif [ -f /etc/systemd/system.conf ]; then # used by systemd 284 | mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" 285 | cp systemd/atlasmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager.init" 286 | sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager.init" 287 | chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/atlasmanager.init" 288 | cp systemd/atlasmanager.service "${INSTALL_ROOT}/etc/systemd/system/atlasmanager.service" 289 | sed -i "s|=/usr/libexec/atlasmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/atlasmanager.service" 290 | cp systemd/atlasmanager@.service "${INSTALL_ROOT}/etc/systemd/system/atlasmanager@.service" 291 | sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/atlasmanager@.service" 292 | if [ -z "${INSTALL_ROOT}" ]; then 293 | systemctl daemon-reload 294 | systemctl enable atlasmanager.service 295 | echo "ATLAS server will now start on boot, if you want to remove this feature run the following line" 296 | echo "systemctl disable atlasmanager.service" 297 | fi 298 | fi 299 | 300 | # Create a folder in /var/log to let ATLAS tools write its own log files 301 | mkdir -p "${INSTALL_ROOT}/var/log/atlastools" 302 | chown "$steamcmd_user" "${INSTALL_ROOT}/var/log/atlastools" 303 | 304 | # Create a folder in /etc/atlasmanager to hold instance config files 305 | mkdir -p "${INSTALL_ROOT}${INSTANCEDIR}" 306 | chown "$steamcmd_user" "${INSTALL_ROOT}${INSTANCEDIR}" 307 | 308 | # Copy example instance config 309 | cp instance.cfg.example "${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example" 310 | chown "$steamcmd_user" "${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example" 311 | # Change the defaults in the new instance config template 312 | sed -i -e "s|\"/home/steam|\"/home/$steamcmd_user|" \ 313 | "${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example" 314 | 315 | # Copy atlasmanager bash_completion into /etc/bash_completion.d/ 316 | cp bash_completion/atlasmanager "${INSTALL_ROOT}/etc/bash_completion.d/atlasmanager" 317 | 318 | # Copy atlasmanager.cfg inside linux configuation folder if it doesn't already exists 319 | mkdir -p "${INSTALL_ROOT}/etc/atlasmanager" 320 | chown "$steamcmd_user" "${INSTALL_ROOT}/etc/atlasmanager" 321 | cp atlasmanager.cfg "${INSTALL_ROOT}${CONFIGFILE}.example" 322 | chown "$steamcmd_user" "${INSTALL_ROOT}${CONFIGFILE}.example" 323 | sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"$steamcmd_user\"|" \ 324 | -e "s|\"/home/steam|\"/home/$steamcmd_user|" \ 325 | -e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \ 326 | -e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \ 327 | -e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \ 328 | "${INSTALL_ROOT}${CONFIGFILE}.example" 329 | 330 | if [ -f "${INSTALL_ROOT}${CONFIGFILE}" ]; then 331 | SUFFIX= 332 | if [ "$migrateconfig" = "no" ]; then 333 | SUFFIX=".NEW" 334 | cp "${INSTALL_ROOT}${CONFIGFILE}" "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}" 335 | fi 336 | 337 | bash ./migrate-config.sh "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}" 338 | bash ./migrate-main-instance.sh "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}" "${INSTALL_ROOT}${INSTANCEDIR}/main.cfg${SUFFIX}" 339 | 340 | echo "A previous version of ATLAS Server Tools was detected in your system, your old configuration was not overwritten. You may need to manually update it." 341 | echo "A copy of the new configuration file was included in /etc/atlasmanager. Make sure to review any changes and update your config accordingly!" 342 | exit 2 343 | else 344 | cp -n "${INSTALL_ROOT}${CONFIGFILE}.example" "${INSTALL_ROOT}${CONFIGFILE}" 345 | cp -n "${INSTALL_ROOT}/${INSTANCEDIR}/instance.cfg.example" "${INSTALL_ROOT}/${INSTANCEDIR}/main.cfg" 346 | fi 347 | fi 348 | 349 | exit 0 350 | -------------------------------------------------------------------------------- /tools/instance.cfg.example: -------------------------------------------------------------------------------- 1 | # config environment 2 | #atlasserverroot="/home/steam/ATLAS" # Put a path here to override the default path in atlasmanager.cfg 3 | 4 | # ATLAS server options - use atlas_= 5 | # comment out these values if you want to define them 6 | # inside your GameUserSettings.ini file 7 | serverMap="Ocean" # server map (default Ocean) 8 | #serverMapModId="469987622" # Uncomment this to specify the Map Mod Id ( in http://steamcommunity.com/sharedfiles/filedetails/?id=) 9 | #atlas_TotalConversionMod="496735411" # Uncomment this to specify a total-conversion mod 10 | atlas_RCONEnabled="True" # Enable RCON Protocol 11 | atlas_RCONPort="32330" # RCON Port 12 | atlas_Port="5750" # ATLAS server port (default 7778) 13 | atlas_QueryPort="57550" # ATLAS query port (default 27015) 14 | atlas_ServerPassword="" # ATLAS server password, empty: no password required to login 15 | atlas_ServerAdminPassword="keyboardcat" # ATLAS server admin password, KEEP IT SAFE! 16 | atlas_MaxPlayers="70" 17 | #atlas_GameModIds="487516323,487516324,487516325" # Uncomment to specify additional mods by Mod Id separated by commas 18 | atlas_AltSaveDirectoryName="A1" #Set this to a unique folder name for each instance. 19 | 20 | # ATLAS server flags - use atlasflag_=true 21 | #atlasflag_NoBattlEye=true # Uncomment this to disable BattlEye for this instance. 22 | #atlasflag_OnlyAdminRejoinAsSpectator=true # Uncomment to only allow admins to rejoin as spectator 23 | #atlasflag_DisableDeathSpectator=true # Uncomment to disable players from becoming spectators when they die 24 | 25 | # ATLAS server options - i.e. for -optname=val, use atlasopt_optname=val 26 | #atlasopt_StructureDestructionTag=DestroySwampSnowStructures 27 | 28 | # ATLAS grid options 29 | atlas_ServerX=0 # Enter the grid X position of this instance. 30 | atlas_ServerY=0 # Enter the grid Y position of this instance. 31 | #atlas_GridConfig="ServerGrid.json" # Enter custom filename of json file for your map grid. 32 | 33 | # NOTE: To have custom code run before an instance starts, create a file in 34 | # this folder with the name of the instance and the .cfg replaced with .start 35 | 36 | #atlasPreStart="/etc/atlasmanager/instances/instance.start" # Set this to override the start script; defaults to config file name with .cfg replaced by .start 37 | -------------------------------------------------------------------------------- /tools/lsb/atlasdaemon: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ### BEGIN INIT INFO 3 | # Provides: ATLAS manager deamon 4 | # Required-Start: networking 5 | # Required-Stop: networking 6 | # Default-Start: 2 3 4 5 7 | # Default-Stop: 0 1 6 8 | # Short-Description: ATLAS manager deamon 9 | # Description: ATLAS manager daemon used to start the server and keep it updated 10 | # 11 | ### END INIT INFO 12 | 13 | # Using the lsb functions to perform the operations. 14 | . /lib/lsb/init-functions 15 | 16 | # Global variables 17 | source /etc/atlasmanager/atlasmanager.cfg 18 | 19 | NAME="ShooterGameServer" 20 | LOGFILE="${logdir}/${NAME}.log" 21 | DAEMON="/usr/bin/atlasmanager" 22 | 23 | SVCNAME="${0##*/}" 24 | INSTANCE="${SVCNAME#*.}" 25 | 26 | if [ "$INSTANCE" == "$SVCNAME" ]; then 27 | INSTANCE="$2" 28 | fi 29 | 30 | set -e 31 | 32 | # If the daemon is not there, then exit. 33 | test -x $DAEMON || exit 5 34 | 35 | function start_instance(){ 36 | local INSTANCE="$1" 37 | PID="$(<"/var/run/atlasmanager.${INSTANCE}.pid")" 38 | if [ -n "$PID" ] && kill -0 "$PID" >/dev/null 2>&1; then 39 | if grep " ${PID} .* ${DAEMON}" <(ps -ef) >/dev/null 2>&1; then 40 | echo "$NAME @${INSTANCE} is already running" 41 | return 0 42 | fi 43 | fi 44 | log_daemon_msg "Starting" "$NAME @${INSTANCE}" 45 | ulimit -n 100000 46 | "${DAEMON}" run "@${INSTANCE}" & 47 | PID="$!" 48 | 49 | sleep 5 50 | if kill -0 "$PID" >/dev/null 2>&1; then 51 | echo "$PID" >"/var/run/atlasmanager.${INSTANCE}.pid" 52 | log_end_msg 0 53 | return 0 54 | else 55 | log_end_msg 1 56 | return 1 57 | fi 58 | } 59 | 60 | function start_all_instances(){ 61 | local nosuccess=0 62 | local anyfailure=0 63 | for instance in $("${DAEMON}" list-instances --brief); do 64 | if start_instance "$instance"; then 65 | nosuccess=0 66 | else 67 | anyfailure=1 68 | fi 69 | done 70 | 71 | return $nosuccess 72 | } 73 | 74 | function stop_instance(){ 75 | local INSTANCE="$1" 76 | log_daemon_msg "Stopping $NAME @${INSTANCE}: " 77 | "${DAEMON}" stop "@${INSTANCE}" & 78 | rm -f "/var/run/atlasmanager.${INSTANCE}.pid" 79 | log_end_msg 0 80 | return 0 81 | } 82 | 83 | case "$1" in 84 | start) 85 | if [ -n "$INSTANCE" ]; then 86 | start_instance "$INSTANCE" 87 | exit $? 88 | else 89 | if start_all_instances; then 90 | exit 0 91 | else 92 | exit 1 93 | fi 94 | fi 95 | ;; 96 | 97 | stop) 98 | if [ -n "$INSTANCE" ]; then 99 | stop_instance "$INSTANCE" 100 | exit $? 101 | else 102 | for instance in $("${DAEMON}" list-instances --brief); do 103 | stop_instance "$instance" 104 | done 105 | exit $? 106 | fi 107 | ;; 108 | 109 | restart) 110 | "$0" stop 111 | "$0" start 112 | ;; 113 | 114 | status) 115 | "$DAEMON" status "@${INSTANCE:-all}" 116 | ;; 117 | 118 | *) 119 | # For invalid arguments, print the usage message. 120 | echo "Usage: $0 {start|stop|restart|status}" 121 | exit 2 122 | ;; 123 | esac 124 | 125 | exit 0 126 | -------------------------------------------------------------------------------- /tools/migrate-config.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | configfile="$1" 4 | newopts=( atlasbackupdir atlasautorestartfile install_bindir install_libexecdir install_datadir mod_appid ) 5 | newopt_steamcmd_appinfocache="${PREFIX}/Steam/appcache/appinfo.vdf" 6 | newopt_atlasbackupdir="${PREFIX}/ATLAS-Backups" 7 | newopt_atlasautorestartfile="ShooterGame/Saved/.autorestart" 8 | newopt_install_bindir="${BINDIR}" 9 | newopt_install_libexecdir="${LIBEXECDIR}" 10 | newopt_install_datadir="${DATADIR}" 11 | newopt_mod_appid=834910 12 | 13 | if grep '^\(servermail\|atlasstVersion\)=' "${configfile}" >/dev/null 2>&1; then 14 | sed -i '/^\(servermail\|atlasstVersion\)=/d' "${configfile}" 15 | fi 16 | 17 | for optname in "${newopts[@]}"; do 18 | if ! grep "^${optname}=" "${configfile}" >/dev/null 2>&1; then 19 | noptname="newopt_${optname}" 20 | echo "${optname}='${!noptname}'" >>"${configfile}" 21 | fi 22 | done 23 | -------------------------------------------------------------------------------- /tools/migrate-main-instance.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | configfile="$1" 4 | instancefile="$2" 5 | 6 | if ! grep '^atlasSingleInstance=' <"$configfile" >/dev/null 2>&1 && grep "^atlasserverroot=" <"$configfile" >/dev/null 2>&1 && [ ! -f "$instancefile" ]; then 7 | sed -n '/^#*\(atlas\(\|flag\|opt\)_[^=]*\|atlasserverroot\|serverMap\(\|ModId\)\)=/p' <"$configfile" >"$instancefile" 8 | sed -i '/^atlas\(serverroot\|_\(RCONPort\|Port\|QueryPort\)\)=/d' "$configfile" 9 | echo 'defaultinstance="main"' >>"$configfile" 10 | fi 11 | -------------------------------------------------------------------------------- /tools/openrc/atlasdaemon: -------------------------------------------------------------------------------- 1 | #!/sbin/runscript 2 | # Short-Description: ATLAS manager deamon 3 | # Description: ATLAS manager daemon used to start the server and keep it updated 4 | 5 | source /etc/atlasmanager/atlasmanager.cfg 6 | 7 | NAME="ShooterGameServer" 8 | LOGFILE="${logdir}/${NAME}.log" 9 | DAEMON="/usr/bin/atlasmanager" 10 | 11 | depend(){ 12 | need net 13 | } 14 | 15 | start(){ 16 | INSTANCE="${RC_SVCNAME#*.}" 17 | ebegin "Starting ATLAS manager daemon" 18 | ulimit -n 100000 19 | if [ "$INSTANCE" != "$RC_SVCNAME" ]; then 20 | "$DAEMON" start "@${INSTANCE}" 21 | else 22 | "$DAEMON" start "@all" 23 | fi 24 | eend $? 25 | } 26 | 27 | stop(){ 28 | INSTANCE="${RC_SVCNAME#*.}" 29 | ebegin "Stopping ATLAS manager daemon" 30 | if [ "$INSTANCE" != "$RC_SVCNAME" ]; then 31 | "$DAEMON" stop "@${INSTANCE}" 32 | else 33 | "$DAEMON" stop "@all" 34 | fi 35 | eend $? 36 | } 37 | 38 | -------------------------------------------------------------------------------- /tools/redhat/atlasdaemon: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # /etc/rc.d/init.d/atlasmanager 4 | # 5 | # ATLAS manager daemon 6 | # 7 | # chkconfig: 2345 80 20 8 | # description: ATLAS manager daemon used to start the server and keep it updated 9 | # processname: ShooterGameServer 10 | # config: /etc/atlasmanager/atlasmanager.cfg 11 | 12 | ### BEGIN INIT INFO 13 | # Provides: ATLAS manager deamon 14 | # Required-Start: networking 15 | # Required-Stop: networking 16 | # Default-Start: 2 3 4 5 17 | # Default-Stop: 0 1 6 18 | # Short-Description: ATLAS manager deamon 19 | # Description: ATLAS manager daemon used to start the server and keep it updated 20 | # 21 | ### END INIT INFO 22 | 23 | # Using the lsb functions to perform the operations. 24 | . /etc/rc.d/init.d/functions 25 | 26 | # Global variables 27 | source /etc/atlasmanager/atlasmanager.cfg 28 | 29 | NAME="ShooterGameServer" 30 | LOGFILE="${logdir}/${NAME}.log" 31 | DAEMON="/usr/bin/atlasmanager" 32 | 33 | GREEN="\\033[1;32m" 34 | RED="\\033[1;31m" 35 | NORMAL="\\033[0;39m" 36 | 37 | SVCNAME="${0##*/}" 38 | INSTANCE="${SVCNAME#*.}" 39 | 40 | if [ "$INSTANCE" == "$SVCNAME" ]; then 41 | INSTANCE="$2" 42 | fi 43 | 44 | set -e 45 | 46 | # If the daemon is not there, then exit. 47 | test -x $DAEMON || exit 5 48 | 49 | function start_instance(){ 50 | local INSTANCE="$1" 51 | PID="$(<"/var/run/atlasmanager.${INSTANCE}.pid")" 52 | if [ -n "$PID" ] && kill -0 "$PID" >/dev/null 2>&1; then 53 | if grep " ${PID} .* ${DAEMON}" <(ps -ef) >/dev/null 2>&1; then 54 | echo "$NAME @${INSTANCE} is already running" 55 | return 0 56 | fi 57 | fi 58 | echo -n "Starting $NAME @${INSTANCE}: " 59 | ulimit -n 100000 60 | "${DAEMON}" run "@${INSTANCE}" & 61 | PID="$!" 62 | 63 | sleep 5 64 | if kill -0 "$PID" >/dev/null 2>&1; then 65 | echo "$PID" >"/var/run/atlasmanager.${INSTANCE}.pid" 66 | touch "/var/lock/subsys/atlasmanager.${INSTANCE}" 67 | echo "[" "$GREEN" " OK " "$NORMAL" "]" 68 | return 0 69 | else 70 | echo "[" "$RED" " FAILED " "$NORMAL" "]" 71 | return 1 72 | fi 73 | } 74 | 75 | function start_all_instances(){ 76 | local nosuccess=0 77 | local anyfailure=0 78 | for instance in $("${DAEMON}" list-instances --brief); do 79 | if start_instance "$instance"; then 80 | nosuccess=0 81 | else 82 | anyfailure=1 83 | fi 84 | done 85 | 86 | return $nosuccess 87 | } 88 | 89 | function stop_instance(){ 90 | local INSTANCE="$1" 91 | echo -n "Stopping $NAME @${INSTANCE}: " 92 | "${DAEMON}" stop "@${INSTANCE}" & 93 | rm -f "/var/lock/subsys/atlasmanager.${INSTANCE}" 94 | rm -f "/var/run/atlasmanager.${INSTANCE}.pid" 95 | echo "[" "$GREEN" " OK " "$NORMAL" "]" 96 | return 0 97 | } 98 | 99 | case "$1" in 100 | start) 101 | if [ -n "$INSTANCE" ]; then 102 | start_instance "$INSTANCE" 103 | exit $? 104 | else 105 | if start_all_instances; then 106 | touch /var/lock/subsys/atlasmanager 107 | exit 0 108 | else 109 | exit 1 110 | fi 111 | fi 112 | ;; 113 | 114 | stop) 115 | if [ -n "$INSTANCE" ]; then 116 | stop_instance "$INSTANCE" 117 | exit $? 118 | else 119 | for instance in $("${DAEMON}" list-instances --brief); do 120 | stop_instance "$instance" 121 | done 122 | rm -f "/var/lock/subsys/atlasmanager" 123 | exit $? 124 | fi 125 | ;; 126 | 127 | restart) 128 | "$0" stop 129 | "$0" start 130 | ;; 131 | 132 | status) 133 | "$DAEMON" status "@${INSTANCE:-all}" 134 | exit 0 135 | ;; 136 | 137 | *) 138 | # For invalid arguments, print the usage message. 139 | echo "Usage: $0 {start|stop|restart|status}" 140 | exit 1 141 | ;; 142 | esac 143 | -------------------------------------------------------------------------------- /tools/systemd/atlasmanager.init: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DAEMON="/usr/bin/atlasmanager" 4 | 5 | for service in $(${DAEMON} list-instances --brief); do 6 | case "$1" in 7 | start) 8 | systemctl start atlasmanager@${service} 9 | ;; 10 | stop) 11 | systemctl stop atlasmanager@${service} 12 | ;; 13 | esac 14 | done 15 | -------------------------------------------------------------------------------- /tools/systemd/atlasmanager.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Starts and stops all atlas server instances 3 | After=network.target 4 | 5 | [Service] 6 | ExecStart=/usr/libexec/atlasmanager/atlasmanager.init start 7 | ExecStop=/usr/libexec/atlasmanager/atlasmanager.init stop 8 | Type=forking 9 | RemainAfterExit=yes 10 | 11 | [Install] 12 | WantedBy=multi-user.target 13 | -------------------------------------------------------------------------------- /tools/systemd/atlasmanager@.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Daemon to start an atlas server instance 3 | 4 | [Service] 5 | User=steam 6 | ExecStart=/usr/bin/atlasmanager useconfig %i start --no-background 7 | Type=simple 8 | -------------------------------------------------------------------------------- /tools/uninstall-user.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # uninstall-user.sh 4 | 5 | BINDIR="/home/steam/bin" 6 | DATADIR="/home/steam/.local/share/atlasmanager" 7 | 8 | for f in "${BINDIR}/atlasmanager" \ 9 | "${DATADIR}/uninstall.sh" 10 | do 11 | if [ -f "$f" ]; then 12 | rm "$f" 13 | fi 14 | done 15 | -------------------------------------------------------------------------------- /tools/uninstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # uninstall.sh 4 | 5 | BINDIR="/usr/bin" 6 | DATADIR="/usr/share/atlasmanager" 7 | LIBEXECDIR="/usr/libexec/atlasmanager" 8 | INITSCRIPT= 9 | 10 | if [ -f "/etc/rc.d/init.d/atlasmanager" ]; then 11 | INITSCRIPT="/etc/rc.d/init.d/atlasmanager" 12 | if [ -f "/etc/rc.d/init.d/functions" ]; then 13 | chkconfig atlasmanager off 14 | fi 15 | elif [ -f "/etc/init.d/atlasmanager" ]; then 16 | INITSCRIPT="/etc/init.d/atlasmanager" 17 | if [ -f "/lib/lsb/init-functions" ]; then 18 | update-rc.d -f atlasmanager remove 19 | elif [ -f "/sbin/runscript" ]; then 20 | rc-update del atlasmanager default 21 | fi 22 | elif [ -f "/etc/systemd/system/atlasmanager.service" ]; then 23 | INITSCRIPT="/etc/systemd/system/atlasmanager.service" 24 | systemctl disable atlasmanager.service 25 | fi 26 | 27 | if [ -n "$INITSCRIPT" ]; then 28 | for f in "${INITSCRIPT}" \ 29 | "${BINDIR}/atlasmanager" \ 30 | "${LIBEXECDIR}/atlasmanager.init" \ 31 | "${LIBEXECDIR}/atlasmanager-uninstall.sh" 32 | do 33 | if [ -f "$f" ]; then 34 | rm "$f" 35 | fi 36 | done 37 | fi 38 | 39 | # remove bash_completion.d 40 | if [ -f "/etc/bash_completion.d/atlasmanager" ]; then 41 | rm "/etc/bash_completion.d/atlasmanager" 42 | fi 43 | -------------------------------------------------------------------------------- /tools/upstart/atlasmanager-instance.conf: -------------------------------------------------------------------------------- 1 | description "ATLAS Server Tools service" 2 | 3 | instance $service 4 | 5 | setuid steam 6 | 7 | env DAEMON="/usr/bin/atlasmanager" 8 | 9 | exec "$DAEMON" useconfig $service start --no-background 10 | -------------------------------------------------------------------------------- /tools/upstart/atlasmanager.conf: -------------------------------------------------------------------------------- 1 | start on runlevel [345] 2 | stop on runlevel [!345] 3 | 4 | env DAEMON="/usr/bin/atlasmanager" 5 | 6 | script 7 | for service in $(${DAEMON} list-instances --brief); do 8 | start atlasmanager-instance service=${service} 9 | done 10 | end script 11 | --------------------------------------------------------------------------------