Added a working parser for the crazy data config
This commit is contained in:
parent
41ca84a497
commit
5aa89b0524
5 changed files with 391 additions and 4 deletions
2
.idea/jsLibraryMappings.xml
generated
2
.idea/jsLibraryMappings.xml
generated
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JavaScriptLibraryMappings">
|
||||
<file url="PROJECT" libraries="{@types/knockout, @types/knockout.mapping, ace, bootstrap, jquery-3.4.1, knockout, knockout.mapping, popper}" />
|
||||
<file url="PROJECT" libraries="{@types/knockout, @types/knockout.mapping, ace, bootstrap, jquery-3.4.1, knockout, knockout.mapping, peg, popper}" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -12,5 +12,6 @@
|
|||
<orderEntry type="library" name="@types/knockout" level="application" />
|
||||
<orderEntry type="library" name="knockout.mapping" level="application" />
|
||||
<orderEntry type="library" name="@types/knockout.mapping" level="application" />
|
||||
<orderEntry type="library" name="peg" level="application" />
|
||||
</component>
|
||||
</module>
|
||||
|
|
@ -542,6 +542,9 @@
|
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"
|
||||
integrity="sha256-gaGobNk1cPaj0abcVmyZxUYgCPsueCJwN5i4DjC4BS0="
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/pegjs/0.9.0/peg.js"
|
||||
integrity="sha256-cwfR02g6XnRmRxZLIwyChnsn4ODrS2uSl6eODJkjrnY="
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
146
js/atlas.pegjs
Normal file
146
js/atlas.pegjs
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
// Atlas Grammar
|
||||
// ============
|
||||
//
|
||||
// Based on the JSON example Grammar from PEG.js examples
|
||||
//
|
||||
|
||||
Atlas_text = ws value:value ws { return value; }
|
||||
|
||||
begin_object = ws "(" ws
|
||||
end_object = ws ")" ws
|
||||
name_separator = ws "=" ws
|
||||
value_separator = ws "," ws
|
||||
|
||||
ws "whitespace" = [ \t\n\r]*
|
||||
|
||||
// ----- Values -----
|
||||
|
||||
value = false / null / true / object / array / number / stringval / class / empty
|
||||
|
||||
empty = "" { return undefined; }
|
||||
null = "None" { return null; }
|
||||
false = "False" { return false; }
|
||||
true = "True" { return true; }
|
||||
|
||||
// ----- Objects -----
|
||||
|
||||
object
|
||||
= begin_object
|
||||
members:(
|
||||
head:member
|
||||
tail:(value_separator m:member { return m; })*
|
||||
{
|
||||
var result = {};
|
||||
|
||||
[head].concat(tail).forEach(function(element) {
|
||||
result[element.name] = element.value;
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
)?
|
||||
end_object
|
||||
{ return members !== null ? members: {}; }
|
||||
|
||||
member
|
||||
= name:stringkey name_separator value:value {
|
||||
return { name: name, value: value };
|
||||
}
|
||||
|
||||
// ----- Arrays -----
|
||||
|
||||
array
|
||||
= begin_object
|
||||
values:(
|
||||
head:value
|
||||
tail:(value_separator v:value { return v; })*
|
||||
{ return [head].concat(tail); }
|
||||
)?
|
||||
end_object
|
||||
{ return values !== null ? values : []; }
|
||||
|
||||
// ----- Numbers -----
|
||||
|
||||
number "number"
|
||||
= minus? int frac? exp? { return parseFloat(text()); }
|
||||
|
||||
decimal_point
|
||||
= "."
|
||||
|
||||
digit1_9
|
||||
= [1-9]
|
||||
|
||||
e
|
||||
= [eE]
|
||||
|
||||
exp
|
||||
= e (minus / plus)? DIGIT+
|
||||
|
||||
frac
|
||||
= decimal_point DIGIT+
|
||||
|
||||
int
|
||||
= zero / (digit1_9 DIGIT*)
|
||||
|
||||
minus
|
||||
= "-"
|
||||
|
||||
plus
|
||||
= "+"
|
||||
|
||||
zero
|
||||
= "0"
|
||||
|
||||
// ----- Strings -----
|
||||
|
||||
stringkey "string key" = sequence:keychar* { return sequence.join(""); }
|
||||
|
||||
stringval "string value"
|
||||
= quotation_mark chars:char* quotation_mark { return chars.join(""); }
|
||||
|
||||
class = key:stringkey singlequote_mark chars:pathchar* singlequote_mark { return [ key, chars.join("") ]; }
|
||||
|
||||
keychar = sequence:( [a-zA-Z] / "_" ) { return sequence; }
|
||||
|
||||
pathchar = sequence:(
|
||||
[a-zA-Z0-9]
|
||||
/ "_"
|
||||
/ "."
|
||||
/ "/"
|
||||
)
|
||||
{ return sequence; }
|
||||
|
||||
char
|
||||
= unescaped
|
||||
/ escape
|
||||
sequence:(
|
||||
'"'
|
||||
/ "\\"
|
||||
/ "/"
|
||||
/ "b" { return "\b"; }
|
||||
/ "f" { return "\f"; }
|
||||
/ "n" { return "\n"; }
|
||||
/ "r" { return "\r"; }
|
||||
/ "t" { return "\t"; }
|
||||
/ "u" digits:$(HEXDIG HEXDIG HEXDIG HEXDIG) {
|
||||
return String.fromCharCode(parseInt(digits, 16));
|
||||
}
|
||||
)
|
||||
{ return sequence; }
|
||||
|
||||
escape
|
||||
= "\\"
|
||||
|
||||
quotation_mark
|
||||
= '"'
|
||||
|
||||
singlequote_mark = "'"
|
||||
|
||||
unescaped
|
||||
= [^\0-\x1F\x22\x5C]
|
||||
|
||||
// ----- Core ABNF Rules -----
|
||||
|
||||
// See RFC 4234, Appendix B (http://tools.ietf.org/html/rfc4234).
|
||||
DIGIT = [0-9]
|
||||
HEXDIG = [0-9a-f]i
|
||||
243
js/main.js
243
js/main.js
|
|
@ -162,7 +162,236 @@ var viewmodel = ko.mapping.fromJS({
|
|||
}
|
||||
],
|
||||
|
||||
"servers": [],
|
||||
"servers": [
|
||||
{
|
||||
"gridX": 4,
|
||||
"gridY": 5,
|
||||
"MachineIdTag": "",
|
||||
"ip": "51.68.68.225",
|
||||
"name": "The Crystal Sea",
|
||||
"port": 29145,
|
||||
"gamePort": 3045,
|
||||
"seamlessDataPort": 31029,
|
||||
"isHomeServer": false,
|
||||
"AdditionalCmdLineParams": "",
|
||||
"OverrideShooterGameModeDefaultGameIni": {},
|
||||
"floorZDist": 0,
|
||||
"utcOffset": 0,
|
||||
"transitionMinZ": 0,
|
||||
"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)",
|
||||
"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": "",
|
||||
"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": [],
|
||||
"serverTemplateName": "No Build PVE"
|
||||
}
|
||||
],
|
||||
"spawnerOverrideTemplates": [],
|
||||
"shipPaths": [],
|
||||
"serverTemplates": [],
|
||||
|
|
@ -198,10 +427,18 @@ function addDatabase() {
|
|||
"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);
|
||||
}
|
||||
}
|
||||
|
||||
var parser;
|
||||
|
||||
$.get('js/atlas.pegjs', function(data) {
|
||||
console.log(data);
|
||||
parser = PEG.buildParser(data);
|
||||
console.log(parser.parse(viewmodel.servers()[0].GlobalBiomeSeamlessServerGridPreOffsetValues()));
|
||||
});
|
||||
Loading…
Add table
Reference in a new issue