// True numeric value binding ko.bindingHandlers.numericValue = { init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { var underlyingObservable = valueAccessor(); var interceptor = ko.dependentObservable({ read: underlyingObservable, write: function (value) { if (!isNaN(value)) { underlyingObservable(parseFloat(value)); } } }); ko.bindingHandlers.value.init(element, function () { return interceptor }, allBindingsAccessor, viewModel, bindingContext); }, update: ko.bindingHandlers.value.update }; var editor = ace.edit("config-editor"); editor.setTheme("ace/theme/monokai"); editor.session.setMode("ace/mode/javascript"); var parser; $.get('js/atlas.pegjs', function(data) { parser = PEG.buildParser(data); }); var viewmodel = ko.mapping.fromJS({ // Server Argument Section "BaseServerArgs": "", "AdditionalCmdLineParams": "", // World Options "WorldFriendlyName": "New Server", "WorldAtlasId": "", "WorldAtlasPassword": "", "ModIDs": "", // Grid Options "gridSize": 1000, "totalGridsX": 1, "totalGridsY": 1, "coordsScaling": 0.000000000001, "globalTransitionMinZ": 0.0, // Image Paths "backgroundImgPath": "image.png", "discoZonesImagePath": "image.png", // URL Options "MetaWorldURL": "", "AuthListURL": "", "MapImageURL": "", // Time Options "Day0": "2019-01-09 20:28:56", "bUseUTCTime": false, "columnUTCOffset": 0.0, "lastImageOverride": "0001-01-01T00:00:00", // Info Options "showServerInfo": false, "showDiscoZoneInfo": false, "showShipPathsInfo": false, "showIslandNames": false, "showLines": false, "showBackground": false, // S3 Options "LocalS3URL": "", "LocalS3AccessKeyId": "", "LocalS3SecretKey": "", "LocalS3BucketName": "", "LocalS3Region": "", // Unsorted... "globalGameplaySetup": "", "shipPathsIdGenerator": 1, "idGenerator": 127, "regionsIdGenerator": 0, // Tribe Log Tab "TribeLogConfig": { // Main Options "MaxRedisEntries": 1000, "BackupMode": "off", "MaxFileHistory": 10, "HttpBackupURL": "", "HttpAPIKey": "", //S3 Options "S3URL": "", "S3AccessKeyId": "", "S3SecretKey": "", "S3BucketName": "", "S3KeyPrefix": "" }, // Travel Data Tab "TravelDataConfig": { // Main Options "BackupMode": "off", "MaxFileHistory": 10, "HttpBackupURL": "", "HttpAPIKey": "", //S3 Options "S3URL": "", "S3AccessKeyId": "", "S3SecretKey": "", "S3BucketName": "", "S3KeyPrefix": "" }, // Shared Log Tab "SharedLogConfig": { // Main Options "FetchRateSec": 60, "SnapshotCleanupSec": 900, "SnapshotRateSec": 1800, "SnapshotExpirationHours": 48, "BackupMode": "off", "MaxFileHistory": 10, "HttpBackupURL": "", "HttpAPIKey": "", //S3 Options "S3URL": "", "S3AccessKeyId": "", "S3SecretKey": "", "S3BucketName": "", "S3KeyPrefix": "" }, // Databases Tab "DatabaseConnections": [ { "Name": "Default", "URL": "127.0.0.1", "Port": 6390, "Password": "" }, { "Name": "TribeDB", "URL": "127.0.0.1", "Port": 6390, "Password": "" }, { "Name": "TravelDataDB", "URL": "127.0.0.1", "Port": 6390, "Password": "" }, { "Name": "TerritoryDB", "URL": "127.0.0.1", "Port": 6390, "Password": "" }, { "Name": "LogDB", "URL": "127.0.0.1", "Port": 6390, "Password": "" } ], // Servers Tab "servers": [ { // Basic Data "name": "Server Name", "serverTemplateName": "No Build PVE", "ip": "127.0.0.1", "port": 29145, "gamePort": 3045, "seamlessDataPort": 31029, "gridX": 0, "gridY": 0, "MachineIdTag": "", "isHomeServer": false, "AdditionalCmdLineParams": "", "floorZDist": 0, "utcOffset": 0, "transitionMinZ": 0, // Biome Options "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)", "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)", // Override Options "OceanDinoDepthEntriesOverride": "", "OceanEpicSpawnEntriesOverrideValues": "(NPCSpawnEntries=((NPCsToSpawn=(BlueprintGeneratedClass'/Game/Atlas/Creatures/MeanWhale/MeanWhale_Character_BP.MeanWhale_Character_BP_C'),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=-700.000000)),NPCsToSpawnPercentageChance=(1.000000)),(NPCsToSpawn=(BlueprintGeneratedClass'/Game/Atlas/Creatures/MeanWhale/MeanWhale_SeaMonster_Character_BP.MeanWhale_SeaMonster_Character_BP_C'),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=-700.000000)),NPCsToSpawnPercentageChance=(1.000000))),NPCSpawnLimits=,MaxDesiredNumEnemiesMultiplier=4.000000)", "oceanFloatsamCratesOverride": "", "treasureMapLootTablesOverride": "", "oceanEpicSpawnEntriesOverrideTemplateName": "", "NPCShipSpawnEntriesOverrideTemplateName": "", "regionOverrides": "", // Style Options "waterColorR": 0.0, "waterColorG": 0.0, "waterColorB": 0.0, "skyStyleIndex": 0, "serverIslandPointsMultiplier": 1.0, "sublevels": [ { "name": "Mnt_Y_Far_05_PVE", "additionalTranslationX": -317251.5, "additionalTranslationY": -272744.5, "additionalTranslationZ": 0.0, "additionalRotationPitch": 0.0, "additionalRotationYaw": 0.0, "additionalRotationRoll": 0.0, "id": 28, "landscapeMaterialOverride": -1 }, { "name": "Mnt_Y_Farthest_05_PVE", "additionalTranslationX": -317251.5, "additionalTranslationY": -272744.5, "additionalTranslationZ": 0.0, "additionalRotationPitch": 0.0, "additionalRotationYaw": 0.0, "additionalRotationRoll": 0.0, "id": 28, "landscapeMaterialOverride": -1 }, { "name": "Mnt_Y_Marine_Cold_Near", "additionalTranslationX": -317251.5, "additionalTranslationY": -272744.5, "additionalTranslationZ": 0.0, "additionalRotationPitch": 0.0, "additionalRotationYaw": 0.0, "additionalRotationRoll": 0.0, "id": 28, "landscapeMaterialOverride": -1 }, { "name": "Mnt_Y_Near_05_PVE", "additionalTranslationX": -317251.5, "additionalTranslationY": -272744.5, "additionalTranslationZ": 0.0, "additionalRotationPitch": 0.0, "additionalRotationYaw": 0.0, "additionalRotationRoll": 0.0, "id": 28, "landscapeMaterialOverride": -1 }, { "name": "Mnt_Y_PVE", "additionalTranslationX": -317251.5, "additionalTranslationY": -272744.5, "additionalTranslationZ": 0.0, "additionalRotationPitch": 0.0, "additionalRotationYaw": 0.0, "additionalRotationRoll": 0.0, "id": 28, "landscapeMaterialOverride": -1 }, { "name": "Mnt_G_Far_03_PVE", "additionalTranslationX": 51799.0, "additionalTranslationY": 329860.0, "additionalTranslationZ": 0.0, "additionalRotationPitch": 0.0, "additionalRotationYaw": 0.0, "additionalRotationRoll": 0.0, "id": 34, "landscapeMaterialOverride": -1 }, { "name": "Mnt_G_Farthest_03_PVE", "additionalTranslationX": 51799.0, "additionalTranslationY": 329860.0, "additionalTranslationZ": 0.0, "additionalRotationPitch": 0.0, "additionalRotationYaw": 0.0, "additionalRotationRoll": 0.0, "id": 34, "landscapeMaterialOverride": -1 }, { "name": "Mnt_G_Near_03_PVE", "additionalTranslationX": 51799.0, "additionalTranslationY": 329860.0, "additionalTranslationZ": 0.0, "additionalRotationPitch": 0.0, "additionalRotationYaw": 0.0, "additionalRotationRoll": 0.0, "id": 34, "landscapeMaterialOverride": -1 }, { "name": "Mnt_G_PVE", "additionalTranslationX": 51799.0, "additionalTranslationY": 329860.0, "additionalTranslationZ": 0.0, "additionalRotationPitch": 0.0, "additionalRotationYaw": 0.0, "additionalRotationRoll": 0.0, "id": 34, "landscapeMaterialOverride": -1 }, { "name": "Mnt_G_Marine_Cold_Near", "additionalTranslationX": 51799.0, "additionalTranslationY": 329860.0, "additionalTranslationZ": 0.0, "additionalRotationPitch": 0.0, "additionalRotationYaw": 0.0, "additionalRotationRoll": 0.0, "id": 34, "landscapeMaterialOverride": -1 } ], "lastModified": "2019-04-14T21:32:04.7310108Z", "lastImageOverride": "0001-01-01T00:00:00", "islandLocked": true, "discoLocked": true, "pathsLocked": false, "extraSublevels": [], "totalExtraSublevels": [ "ChildIBL_EasternTundra.uasset", "ChildIBL_EasternTundra_Box.uasset", "ChildIBL_EasternTundra_Canopy_JapanesePine.uasset", "ChildIBL_EasternTundra_Canopy_Paulownia.uasset", "ChildIBL_EasternTundra_Canopy_RedMaple.uasset", "MasterIBL_EasternTemperate", "MasterIBL_EasternTemperate_Canopy_RedMaple", "MasterIBL_Temperate", "MasterIBL_Temperate_Canopy", "MasterIBL_Temperate_Canopy_B" ], "islandInstances": [ { "name": "Mnt_Y_EU_PVE", "id": 28, "spawnerOverrides": {}, "minTreasureQuality": -1.0, "maxTreasureQuality": -1.0, "useNpcVolumesForTreasures": false, "useLevelBoundsForTreasures": true, "prioritizeVolumesForTreasures": false, "islandPoints": -1, "islandTreasureBottleSupplyCrateOverrides": "", "islandWidth": 306000.0, "islandHeight": 306000.0, "worldX": 5982748.5, "worldY": 7427255.5, "rotation": 0.0 }, { "name": "Mnt_G_ET_PVE", "id": 34, "spawnerOverrides": {}, "minTreasureQuality": -1.0, "maxTreasureQuality": -1.0, "useNpcVolumesForTreasures": false, "useLevelBoundsForTreasures": true, "prioritizeVolumesForTreasures": false, "islandPoints": -1, "islandTreasureBottleSupplyCrateOverrides": "", "islandWidth": 306000.0, "islandHeight": 306000.0, "worldX": 6351799.0, "worldY": 8029860.0, "rotation": 0.0 } ], "discoZones": [ { "name": "Jotunheim", "sizeX": 283627.0, "sizeY": 268249.5, "sizeZ": 40000.0, "id": 109, "xp": 30.0, "bIsManuallyPlaced": false, "explorerNoteIndex": 0, "allowSea": false, "worldX": 5981788.5, "worldY": 7414445.0, "rotation": 0.0 }, { "name": "The Ashen Reaches", "sizeX": 289322.0, "sizeY": 297295.5, "sizeZ": 40000.0, "id": 116, "xp": 30.0, "bIsManuallyPlaced": false, "explorerNoteIndex": 0, "allowSea": false, "worldX": 6359387.5, "worldY": 8013876.0, "rotation": 0.0 } ], "spawnRegions": [], // ??? "OverrideShooterGameModeDefaultGameIni": {} } ], "spawnerOverrideTemplates": [], "shipPaths": [], "serverTemplates": [], // ?!?! "OverrideShooterGameModeDefaultGameIni": {} }); ko.applyBindings(viewmodel); updateEditor(); ko.computed(function () { return ko.toJSON(viewmodel); }).subscribe(function () { updateEditor(); }); editor.on("change", function () { setTimeout(function () { ko.mapping.fromJSON(editor.getValue(), viewmodel); }, 100); }); function updateEditor() { var interim = ko.mapping.toJS(viewmodel); interim.coordsScaling = Number(interim.coordsScaling).toFixed(12); editor.setValue(ko.toJSON(interim, null, 2)); } function addDatabase() { var newDB = { "Name": ko.observable("NewDB"), "URL": ko.observable("127.0.0.1"), "Port": ko.observable(6390), "Password": ko.observable("") }; viewmodel.DatabaseConnections.push(newDB); } function removeDatabase(obj) { viewmodel.DatabaseConnections.remove(obj); } function addServer() { console.log('boo'); } function removeServer() { console.log('boo2'); } function deparseEdit(key, data, event) { console.log('boop'); console.log(data); console.log(key); console.log(parser.parse(data[key]())); }