Added a working parser for the crazy data config

This commit is contained in:
Tom Bloor 2019-08-25 16:33:10 +01:00
parent 41ca84a497
commit 5aa89b0524
Signed by: TBSliver
GPG key ID: 4657C7EBE42CC5CC
5 changed files with 391 additions and 4 deletions

View file

@ -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>

View file

@ -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>

View file

@ -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
View 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

View file

@ -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()));
});