Compare commits

..

2 commits

39 changed files with 1483 additions and 777 deletions

3
.gitmodules vendored Normal file
View file

@ -0,0 +1,3 @@
[submodule "src/assets/server-grid-editor"]
path = src/assets/server-grid-editor
url = https://github.com/GrapeshotGames/ServerGridEditor.git

View file

@ -4,6 +4,9 @@
<w>deparse</w> <w>deparse</w>
<w>gameplay</w> <w>gameplay</w>
<w>pegjs</w> <w>pegjs</w>
<w>powerstones</w>
<w>sublevel</w>
<w>sublevels</w>
</words> </words>
</dictionary> </dictionary>
</component> </component>

1
.idea/vcs.xml generated
View file

@ -2,5 +2,6 @@
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" /> <mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="$PROJECT_DIR$/src/assets/server-grid-editor" vcs="Git" />
</component> </component>
</project> </project>

20
package-lock.json generated
View file

@ -1886,8 +1886,7 @@
"@types/geojson": { "@types/geojson": {
"version": "7946.0.7", "version": "7946.0.7",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz",
"integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==", "integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ=="
"dev": true
}, },
"@types/glob": { "@types/glob": {
"version": "7.1.1", "version": "7.1.1",
@ -1919,11 +1918,18 @@
"version": "1.5.7", "version": "1.5.7",
"resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.5.7.tgz", "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.5.7.tgz",
"integrity": "sha512-FiPU4NQwH+jQ2wc3IjD7+9hgNZ95m4ry8qILO+eS6L4eUUVSXr+472+k4SRVEW+8j18QwqY7PFqudDQzfpRXTQ==", "integrity": "sha512-FiPU4NQwH+jQ2wc3IjD7+9hgNZ95m4ry8qILO+eS6L4eUUVSXr+472+k4SRVEW+8j18QwqY7PFqudDQzfpRXTQ==",
"dev": true,
"requires": { "requires": {
"@types/geojson": "*" "@types/geojson": "*"
} }
}, },
"@types/leaflet-imageoverlay-rotated": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@types/leaflet-imageoverlay-rotated/-/leaflet-imageoverlay-rotated-0.1.4.tgz",
"integrity": "sha512-b5Q2h1D4APy/hsYfqU1D1WGzsg7/jcxaezZk52R6V0VicqS9Lno72+ok0VNYTkdWmAWHhRFuwJOU1TldznYBqQ==",
"requires": {
"@types/leaflet": "*"
}
},
"@types/minimatch": { "@types/minimatch": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@ -7340,6 +7346,14 @@
"resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz",
"integrity": "sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ==" "integrity": "sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ=="
}, },
"leaflet-imageoverlay-rotated": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/leaflet-imageoverlay-rotated/-/leaflet-imageoverlay-rotated-0.2.1.tgz",
"integrity": "sha512-8MsrIuW/aXI0EjDXgJSJJ67nqVNQJsP/glmND9g6yc6t+zQgdPUbTRHC65jSs/IBwzwyhggnDgDuydalcEX+ew==",
"requires": {
"leaflet": "^1.0.0"
}
},
"less": { "less": {
"version": "3.9.0", "version": "3.9.0",
"resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz",

View file

@ -21,10 +21,12 @@
"@angular/router": "~8.2.11", "@angular/router": "~8.2.11",
"@asymmetrik/ngx-leaflet": "^6.0.1", "@asymmetrik/ngx-leaflet": "^6.0.1",
"@ng-bootstrap/ng-bootstrap": "^5.1.1", "@ng-bootstrap/ng-bootstrap": "^5.1.1",
"@types/leaflet-imageoverlay-rotated": "^0.1.4",
"@types/pegjs": "^0.10.1", "@types/pegjs": "^0.10.1",
"ace-builds": "^1.4.7", "ace-builds": "^1.4.7",
"bootstrap": "^4.3.1", "bootstrap": "^4.3.1",
"leaflet": "^1.6.0", "leaflet": "^1.6.0",
"leaflet-imageoverlay-rotated": "^0.2.1",
"rxjs": "~6.4.0", "rxjs": "~6.4.0",
"ts-pegjs": "^0.2.6", "ts-pegjs": "^0.2.6",
"tslib": "^1.10.0", "tslib": "^1.10.0",

View file

@ -9,6 +9,7 @@ import { ServersComponent } from "./pages/config/servers/servers.component";
import { ServerComponent } from "./pages/config/servers/server/server.component"; import { ServerComponent } from "./pages/config/servers/server/server.component";
import { IslandInstanceComponent } from "./pages/config/servers/island-instance/island-instance.component"; import { IslandInstanceComponent } from "./pages/config/servers/island-instance/island-instance.component";
import { MapComponent } from "./pages/config/map/map.component"; import { MapComponent } from "./pages/config/map/map.component";
import { DiscoveryZoneComponent } from "./pages/config/servers/discovery-zone/discovery-zone.component";
const routes: Routes = [ const routes: Routes = [
@ -22,6 +23,7 @@ const routes: Routes = [
{path: 'servers', component: ServersComponent}, {path: 'servers', component: ServersComponent},
{path: 'server/:index', component: ServerComponent}, {path: 'server/:index', component: ServerComponent},
{path: 'server/:index/island/:islandIndex', component: IslandInstanceComponent}, {path: 'server/:index/island/:islandIndex', component: IslandInstanceComponent},
{path: 'server/:index/discovery/:discoIndex', component: DiscoveryZoneComponent},
{path: 'map', component: MapComponent} {path: 'map', component: MapComponent}
] ]
} }

View file

@ -25,6 +25,7 @@ import { SelectObjectComponent } from './components/form/select-object/select-ob
import { IslandInstanceComponent } from './pages/config/servers/island-instance/island-instance.component'; import { IslandInstanceComponent } from './pages/config/servers/island-instance/island-instance.component';
import { LeafletModule } from "@asymmetrik/ngx-leaflet"; import { LeafletModule } from "@asymmetrik/ngx-leaflet";
import { MapComponent } from './pages/config/map/map.component'; import { MapComponent } from './pages/config/map/map.component';
import { DiscoveryZoneComponent } from './pages/config/servers/discovery-zone/discovery-zone.component';
@NgModule({ @NgModule({
declarations: [ declarations: [
@ -45,7 +46,8 @@ import { MapComponent } from './pages/config/map/map.component';
SelectListComponent, SelectListComponent,
SelectObjectComponent, SelectObjectComponent,
IslandInstanceComponent, IslandInstanceComponent,
MapComponent MapComponent,
DiscoveryZoneComponent
], ],
imports: [ imports: [
BrowserModule, BrowserModule,

View file

@ -0,0 +1,34 @@
import { Deserialize } from "../util/deserialize.model";
export class DiscoveryZoneModel implements Deserialize {
id: number;
name: string;
sizeX: number = 0;
sizeY: number = 0;
sizeZ: number = 0;
worldX: number = 0;
worldY: number = 0;
rotation: number = 0;
xp: number = 0;
allowSea: boolean = false;
explorerNoteIndex: number = 0;
bIsManuallyPlaced: boolean = false;
ManualVolumeName: string;
deserialize(input: any): this {
Object.assign(this, input);
return this;
}
toJSON(): object {
let json = Object.assign({}, this);
// Key not shown at all if manually placed.
if (!json.bIsManuallyPlaced) delete json.ManualVolumeName;
return json;
}
}

View file

@ -1,6 +1,7 @@
import { Deserialize } from "../util/deserialize.model"; import { Deserialize } from "../util/deserialize.model";
import { ServerSublevelModel } from "./serverSublevel.model"; import { ServerSublevelModel } from "./serverSublevel.model";
import { IslandInstanceModel } from "./island-instance.model"; import { IslandInstanceModel } from "./island-instance.model";
import { DiscoveryZoneModel } from "./discovery-zone.model";
export class ServerModel implements Deserialize { export class ServerModel implements Deserialize {
// General Settings // General Settings
@ -46,7 +47,7 @@ export class ServerModel implements Deserialize {
extraSublevels: string[]; extraSublevels: string[];
totalExtraSublevels: string[]; totalExtraSublevels: string[];
islandInstances: IslandInstanceModel[]; islandInstances: IslandInstanceModel[];
discoZones; discoZones: DiscoveryZoneModel[];
spawnRegions; spawnRegions;
// Dont render if default/empty // Dont render if default/empty
@ -72,6 +73,7 @@ export class ServerModel implements Deserialize {
Object.assign(this, input); Object.assign(this, input);
this.sublevels = this.sublevels.map(i => new ServerSublevelModel().deserialize(i)); this.sublevels = this.sublevels.map(i => new ServerSublevelModel().deserialize(i));
this.islandInstances = this.islandInstances.map(i => new IslandInstanceModel().deserialize(i)); this.islandInstances = this.islandInstances.map(i => new IslandInstanceModel().deserialize(i));
this.discoZones = this.discoZones.map(i => new DiscoveryZoneModel().deserialize(i));
return this; return this;
} }
} }

View file

@ -4,6 +4,7 @@
<button class="btn btn-primary btn-block" [routerLink]="['dbs']">DB Settings</button> <button class="btn btn-primary btn-block" [routerLink]="['dbs']">DB Settings</button>
<button class="btn btn-primary btn-block" [routerLink]="['quests']">Quest Settings</button> <button class="btn btn-primary btn-block" [routerLink]="['quests']">Quest Settings</button>
<button class="btn btn-primary btn-block" [routerLink]="['servers']">Server Settings</button> <button class="btn btn-primary btn-block" [routerLink]="['servers']">Server Settings</button>
<button class="btn btn-primary btn-block" [routerLink]="['map']">Map</button>
</div> </div>
<div class="col-10"><router-outlet></router-outlet></div> <div class="col-10"><router-outlet></router-outlet></div>
</div> </div>

View file

@ -1,9 +1,7 @@
<div style="height: 400px;" <div style="height: 600px;"
leaflet leaflet
[leafletOptions]="options" [leafletOptions]="options">
[(leafletCenter)]="center" <div *ngFor="let s of serverLayers" [leafletLayer]="s"></div>
[(leafletZoom)]="zoom"> <div *ngFor="let i of islandLayers" [leafletLayer]="i"></div>
<div *ngFor="let l of layers" [leafletLayer]="l"></div> <div *ngFor="let d of discoveryLayers" [leafletLayer]="d"></div>
</div> </div>
<p>Zoom: {{ zoom }}</p>
<p>Center lat: {{ center.lat }} Center long: {{ center.lng }}</p>

View file

@ -1,8 +1,11 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { CRS, LatLng, latLng, LatLngBounds, latLngBounds, Rectangle, tileLayer } from "leaflet"; import { Circle, CRS, ImageOverlay, LatLng, LatLngBounds, Rectangle } from "leaflet";
import { Server } from "../../../server"; import { Server } from "../../../server";
import { IslandInstanceModel } from "../../../models/atlasData/island-instance.model";
import * as L from 'leaflet';
import 'leaflet-imageoverlay-rotated';
const SIZE_SCALE = 100_000; const RADIAN_RATIO = Math.PI / 180;
@Component({ @Component({
selector: 'app-map', selector: 'app-map',
@ -13,16 +16,20 @@ export class MapComponent implements OnInit {
options = { options = {
crs: CRS.Simple, crs: CRS.Simple,
zoom: 0, zoom: -16,
maxBounds: undefined, maxBounds: undefined,
maxBoundsViscosity: 0.5, maxBoundsViscosity: 0.5,
center: undefined, center: undefined,
layers: [] layers: [],
minZoom: -16,
}; };
center: LatLng; serverLayers = [];
zoom: number; islandLayers = [];
layers = []; discoveryLayers = [];
maxX: number;
maxY: number;
constructor(private server: Server) { constructor(private server: Server) {
} }
@ -30,28 +37,83 @@ export class MapComponent implements OnInit {
ngOnInit() { ngOnInit() {
// all in Y X format. Also, upside down! (0,0 is bottom left instead of top left) // all in Y X format. Also, upside down! (0,0 is bottom left instead of top left)
// Also, due to insanely large sizes, divide by 100_000 // Also, due to insanely large sizes, divide by 100_000
const maxX = (this.server.serverGrid.gridSize * this.server.serverGrid.totalGridsX) / SIZE_SCALE; this.maxX = this.server.serverGrid.gridSize * this.server.serverGrid.totalGridsX;
const maxY = (this.server.serverGrid.gridSize * this.server.serverGrid.totalGridsY) / SIZE_SCALE; this.maxY = this.server.serverGrid.gridSize * this.server.serverGrid.totalGridsY;
const northEast = new LatLng(0, maxX); const northEast = new LatLng(0, this.maxX);
const southWest = new LatLng(maxY, 0); const southWest = new LatLng(this.maxY, 0);
this.options.maxBounds = new LatLngBounds(southWest, northEast); this.options.maxBounds = new LatLngBounds(southWest, northEast);
this.options.center = new LatLng(0, 0); this.options.center = new LatLng(0, 0);
this.options.layers[0] = new Rectangle(this.options.maxBounds, { this.options.layers.push(new ImageOverlay('./assets/server-grid-editor/WaterTiles/instinctworld-autoscaling.png', this.options.maxBounds));
color: '#3c3c00',
weight: 5,
fillColor: 'lightblue',
fill: true
});
this.server.serverGrid.servers.forEach(i => { this.server.serverGrid.servers.forEach(s => {
const servMinX = (this.server.serverGrid.gridSize * i.gridX) / SIZE_SCALE; // Server Layer
const servMaxX = servMinX + (this.server.serverGrid.gridSize / SIZE_SCALE); const servMinX = this.server.serverGrid.gridSize * s.gridX;
const servMinY = (this.server.serverGrid.gridSize * i.gridY) / SIZE_SCALE; const servMaxX = servMinX + this.server.serverGrid.gridSize;
const servMaxY = servMinY + (this.server.serverGrid.gridSize / SIZE_SCALE); const servMinY = this.server.serverGrid.gridSize * s.gridY;
const servMaxY = servMinY + this.server.serverGrid.gridSize;
const servNE = new LatLng(servMinY, servMaxX); const servNE = new LatLng(servMinY, servMaxX);
const servSW = new LatLng(servMaxY, servMinX); const servSW = new LatLng(servMaxY, servMinX);
const servBounds = new LatLngBounds(servSW, servNE); const servBounds = new LatLngBounds(servSW, servNE);
this.layers.push(new Rectangle(servBounds,{color: 'pink', weight: 5})); this.serverLayers.push(new Rectangle(servBounds,{color: 'black', weight: 1}));
s.islandInstances.forEach(i => {
const imgUrl = this.server.islands.islandData[i.name].imagePath;
const islandLocation = this.islandToImageRotation(i);
this.islandLayers.push(L.imageOverlay.rotated(imgUrl, islandLocation[0], islandLocation[1], islandLocation[2]));
});
s.discoZones.forEach(d => {
if (d.ManualVolumeName !== undefined) return;
const imgUrl = './assets/server-grid-editor/Resources/discoZoneBox.png';
const discoLocation = this.discoveryZoneToImageRotation(d);
this.discoveryLayers.push(L.imageOverlay.rotated(imgUrl, discoLocation[0], discoLocation[1], discoLocation[2]));
});
}) })
} }
gridCoordinateToMapLatLng(gridX: number, gridY: number): LatLng {
// Need to invert gridY for the Latitude.
const newY = this.maxY - gridY;
return new LatLng(newY, gridX);
}
islandToImageRotation(island: IslandInstanceModel): LatLng[] {
return this.gridCoordinateToImageRotation(island.worldX, island.worldY, island.rotation, island.islandWidth, island.islandHeight);
}
discoveryZoneToImageRotation(disco): LatLng[] {
return this.gridCoordinateToImageRotation(disco.worldX, disco.worldY, disco.rotation, disco.sizeX, disco.sizeY);
}
gridCoordinateToImageRotation(worldX, worldY, rotation, width, height): LatLng[] {
const halfWidth = width / 2;
const halfHeight = height / 2;
const radians = (rotation + 90) * RADIAN_RATIO;
const cosR = Math.cos(radians);
const sinR = Math.sin(radians);
// https://gamedev.stackexchange.com/questions/86755/how-to-calculate-corner-positions-marks-of-a-rotated-tilted-rectangle
// Rotate any point around
// Nx = x * cos(a) - y * sin(a)
// Ny = x * sin(a) + y * cos(a)
// REMEMBER everything is upside down
// Top Left -1, 1
const topLeftX = worldX + (-halfWidth * cosR) - (halfHeight * sinR);
const topLeftY = worldY + (-halfWidth * sinR) + (halfHeight * cosR);
// Bottom Left -1, -1 BUT mirrored for some reason so 1, 1
const botLeftX = worldX + (halfWidth * cosR) - (halfHeight * sinR);
const botLeftY = worldY + (halfWidth * sinR) + (halfHeight * cosR);
// Top Right 1, 1 BUT mirrored for some reason so -1, -1
const topRightX = worldX + (-halfWidth * cosR) - (-halfHeight * sinR);
const topRightY = worldY + (-halfWidth * sinR) + (-halfHeight * cosR);
return [
this.gridCoordinateToMapLatLng(topLeftX, topLeftY),
this.gridCoordinateToMapLatLng(topRightX, topRightY),
this.gridCoordinateToMapLatLng(botLeftX, botLeftY)
];
}
} }

View file

@ -0,0 +1,55 @@
<div class="mt-3">
<h2>{{ discovery.name }}
<button class="btn btn-primary btn-sm" [routerLink]="['/config', 'server', cellIndex]">Back to Cell</button>
</h2>
<p>{{ discovery.sizeX }} by {{ discovery.sizeY }} by {{ discovery.sizeZ }}</p>
<ngb-accordion>
<ngb-panel title="General Settings">
<ng-template ngbPanelContent>
<app-text id="name" label="Name" [(text)]="discovery.name"></app-text>
<app-number id="worldX" label="World X" [(number)]="discovery.worldX"></app-number>
<app-number id="worldY" label="World Y" [(number)]="discovery.worldY"></app-number>
<app-number id="rotation" label="Rotation" [(number)]="discovery.rotation" step="0.000001"
min="{{ minRot }}" max="{{ maxRot }}"></app-number>
<h4>Zone Size</h4>
<app-number id="sizeX" label="Size X" [(number)]="discovery.sizeX"></app-number>
<app-number id="sizeY" label="Size Y" [(number)]="discovery.sizeY"></app-number>
<app-number id="sizeZ" label="Size Z" [(number)]="discovery.sizeZ"
help="If the discovery zone has any size, this is normally 40,000"></app-number>
</ng-template>
</ngb-panel>
<ngb-panel title="Discovery Settings">
<ng-template ngbPanelContent>
<app-number id="xp" label="XP" [(number)]="discovery.xp"
help="XP Gained for discovering this zone. Note this also alters the max XP you can gain by levelling"></app-number>
<app-checkbox id="allowSea" label="Allow Sea Discovery" [(checkbox)]="discovery.allowSea"
help="May not do what you think - Always false on Official Server"></app-checkbox>
<app-select-object id="explorerNoteIndex" label="Explorer Note" [optionObject]="explorerNotes"
[option]="discovery.explorerNoteIndex" (optionChange)="setExplorerNote($event)"
help="Opens a page in the players Discoveries menu on unlocking"></app-select-object>
</ng-template>
</ngb-panel>
<ngb-panel title="Manual Volumes">
<ng-template ngbPanelContent>
<p>Manual Volumes are either specific points on a map, or a particular 'discovery' available in a
cell. For example, certain Forests and Pools on an island are discovery zones in the official
server. Also the Powerstone locations are a discovery point, however the names for these aren't tied
to a specific island.</p>
<p>When a player enters the area of the 'Volume' or otherwise triggers it (in the case of Powerstones),
the discovery zone will be unlocked. This happens whether the player is on land, gliding, or
swimming. This only happens with these Manual Volume Discoveries - Normal discovery zones require
you to set foot on the area.</p>
<p>If the Zone size (under general settings) is set to 0 for XYZ, then no shimmer will show around the
discovery. Any other size will show a shimmer of that set size, and location, in game.</p>
<p>Note as well, the location of a Manual Volume discovery doesnt really matter, however it defaults to
the center of the cell.</p>
<app-checkbox id="bIsManuallyPlaced" label="Enable Manual Volume"
[(checkbox)]="discovery.bIsManuallyPlaced"></app-checkbox>
<app-select-list id="ManualVolumeName" label="Manual Volume Name" *ngIf="discovery.bIsManuallyPlaced"
[optionList]="discoveryVolumeNameOptionKeys"
[option]="discovery.ManualVolumeName" (optionChange)="setDiscoveryVolumeName($event)"></app-select-list>
<button class="btn btn-warning" (click)="setLocationCenterOfCell()">Set Center to Cell Center</button>
</ng-template>
</ngb-panel>
</ngb-accordion>
</div>

View file

@ -0,0 +1,69 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from "@angular/router";
import { Server } from "../../../../server";
import { ServerModel } from "../../../../models/atlasData/server.model";
import { DiscoveryZoneModel } from "../../../../models/atlasData/discovery-zone.model";
import * as ExplorerNotes from '../../../../../data/explorer-notes.json';
@Component({
selector: 'app-discovery-zone',
templateUrl: './discovery-zone.component.html'
})
export class DiscoveryZoneComponent implements OnInit {
private cell: ServerModel;
private cellIndex;
private discovery: DiscoveryZoneModel;
private discoIndex;
private minX: number;
private maxX: number;
private minY: number;
private maxY: number;
private minRot: number = 0;
private maxRot: number = 360;
private explorerNotes;
private discoveryVolumeNameOptions: object = {};
private discoveryVolumeNameOptionKeys: string[] = [];
constructor(private server: Server, private route: ActivatedRoute) {
}
ngOnInit() {
this.cellIndex = this.route.snapshot.paramMap.get('index');
this.discoIndex = this.route.snapshot.paramMap.get('discoIndex');
this.cell = this.server.serverGrid.servers[this.cellIndex];
this.discovery = this.cell.discoZones[this.discoIndex];
this.minX = this.cell.gridX * this.server.serverGrid.gridSize;
this.maxX = this.minX + this.server.serverGrid.gridSize;
this.minY = this.cell.gridY * this.server.serverGrid.gridSize;
this.maxY = this.minY + this.server.serverGrid.gridSize;
this.explorerNotes = (ExplorerNotes as any).default;
this.cell.islandInstances.forEach(i => {
const islandData = this.server.islands.islandData[i.name];
if (islandData.discoveryVolumeNames.length === 0 ) return;
islandData.discoveryVolumeNames.forEach(
i => {
this.discoveryVolumeNameOptions[i.name] = i;
this.discoveryVolumeNameOptionKeys.push(i.name);
}
)
});
this.discoveryVolumeNameOptionKeys = this.discoveryVolumeNameOptionKeys.sort();
}
private setExplorerNote(option: string) {
this.discovery.explorerNoteIndex = parseInt(option);
}
private setDiscoveryVolumeName(option: string) {
console.log(this.discoveryVolumeNameOptions[option]);
}
private setLocationCenterOfCell() {
this.discovery.worldX = this.minX + ( this.server.serverGrid.gridSize / 2 );
this.discovery.worldY = this.minY + ( this.server.serverGrid.gridSize / 2 );
}
}

View file

@ -34,6 +34,7 @@ export class IslandInstanceComponent implements OnInit {
this.minY = this.cell.gridY * this.server.serverGrid.gridSize; this.minY = this.cell.gridY * this.server.serverGrid.gridSize;
this.maxY = this.minY + this.server.serverGrid.gridSize; this.maxY = this.minY + this.server.serverGrid.gridSize;
} }
// TODO Need to update subLevels in parent Cell when updating X and Y...
// Issue with text arrays and editing jumps on each change. // Issue with text arrays and editing jumps on each change.
trackByFn(index: any, item: any) { trackByFn(index: any, item: any) {

View file

@ -50,11 +50,55 @@
<ngb-panel title="Island Settings"> <ngb-panel title="Island Settings">
<ng-template ngbPanelContent> <ng-template ngbPanelContent>
<p><em>Note that Sublevel settings are sorted in the background</em></p> <p><em>Note that Sublevel settings are sorted in the background</em></p>
<div *ngFor="let island of cell.islandInstances; let i = index">
<h4>Island Instance {{ i }} - ID {{ island.id }} <button class="btn btn-sm btn-primary" [routerLink]="['island', i]">Edit</button></h4> <table class="table table-hover">
<app-select-object id="{{ i }}-island-name" label="Island Model" [optionObject]="islandOptions" <thead>
<tr>
<th>Name & Model</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<app-select-object id="new-island" label="New Island" [optionObject]="islandOptions" [withEmptyOption]="true"
[(option)]="newIslandName"></app-select-object>
</td>
<td><button class="btn btn-warning" (click)="addNewIsland()" [disabled]="!newIslandName">Add</button></td>
</tr>
<tr *ngFor="let island of cell.islandInstances; let i = index">
<td>
<app-select-object id="{{ i }}-island-name" label="{{ island.name }}" [optionObject]="islandOptions"
[option]="island.name" (optionChange)="changeIslandModel(i, $event)"></app-select-object> [option]="island.name" (optionChange)="changeIslandModel(i, $event)"></app-select-object>
</div> </td>
<td><button class="btn btn-primary" [routerLink]="['island', i]">Edit</button></td>
<td><button class="btn btn-danger" (click)="deleteIsland(i)">Delete</button></td>
</tr>
</tbody>
</table>
</ng-template>
</ngb-panel>
<ngb-panel title="Discovery Zone Settings">
<ng-template ngbPanelContent>
<table class="table table-hover">
<thead>
<tr>
<th>Name</th>
<th>Discovery Type</th>
<th><button class="btn btn-sm btn-warning" (click)="addNewDiscovery()">Add</button></th>
<th></th>
</tr>
</thead>
<tbody>
<tr *ngFor="let disco of cell.discoZones; let i = index">
<th>{{ disco.name }}</th>
<td>{{ disco.bIsManuallyPlaced ? "Location" : "Island" }}</td>
<td><button class="btn btn-sm btn-primary" [routerLink]="['discovery', i]">Edit</button></td>
<td><button class="btn btn-sm btn-danger" (click)="deleteDiscovery(i)">Delete</button></td>
</tr>
</tbody>
</table>
</ng-template> </ng-template>
</ngb-panel> </ngb-panel>
</ngb-accordion> </ngb-accordion>

View file

@ -5,6 +5,7 @@ import { ServerModel } from "../../../../models/atlasData/server.model";
import { IslandDataModel } from "../../../../../data/models/island-data.model"; import { IslandDataModel } from "../../../../../data/models/island-data.model";
import { IslandInstanceModel } from "../../../../models/atlasData/island-instance.model"; import { IslandInstanceModel } from "../../../../models/atlasData/island-instance.model";
import { ServerSublevelModel } from "../../../../models/atlasData/serverSublevel.model"; import { ServerSublevelModel } from "../../../../models/atlasData/serverSublevel.model";
import { DiscoveryZoneModel } from "../../../../models/atlasData/discovery-zone.model";
@Component({ @Component({
selector: 'app-server', selector: 'app-server',
@ -14,6 +15,7 @@ export class ServerComponent implements OnInit {
private cell: ServerModel; private cell: ServerModel;
private templateOptions: string[]; private templateOptions: string[];
private islandOptions: object = {}; private islandOptions: object = {};
private newIslandName: string;
constructor(private server: Server, private route: ActivatedRoute) { constructor(private server: Server, private route: ActivatedRoute) {
} }
@ -22,43 +24,43 @@ export class ServerComponent implements OnInit {
let index = this.route.snapshot.paramMap.get('index'); let index = this.route.snapshot.paramMap.get('index');
this.cell = this.server.serverGrid.servers[index]; this.cell = this.server.serverGrid.servers[index];
this.templateOptions = this.server.serverGrid.serverTemplates.map(i => i.name); this.templateOptions = this.server.serverGrid.serverTemplates.map(i => i.name);
Object.values(this.server.islands).forEach((i: IslandDataModel) => this.islandOptions[i.name] = i.customDisplayName()); Object.values(this.server.islands.islandData).forEach((i: IslandDataModel) => {this.islandOptions[i.name] = i.customDisplayName()});
} }
private changeIslandModel(index: number, name: string) { private changeIslandModel(index: number, name: string) {
let oldIsland = this.cell.islandInstances[index]; let oldIsland = this.cell.islandInstances[index];
const newIslandData = this.server.islands[name]; let newIsland = IslandInstanceModel.fromIslandData(this.server.islands[name]);
const oldIslandData = this.server.islands[oldIsland.name]; newIsland.id = this.server.serverGrid.getNextId();
let newIsland = IslandInstanceModel.fromIslandData(newIslandData);
// keep X, Y and Rotation the same // keep X, Y and Rotation the same
newIsland.worldX = oldIsland.worldX; newIsland.worldX = oldIsland.worldX;
newIsland.worldY = oldIsland.worldY; newIsland.worldY = oldIsland.worldY;
newIsland.rotation = oldIsland.rotation; newIsland.rotation = oldIsland.rotation;
// Remove old Sublevels this.removeSublevelsForIsland(oldIsland);
oldIslandData.sublevelNames.forEach(i => { this.addSublevelsForIsland(newIsland);
this.cell.islandInstances[index] = newIsland;
this.updateExtraSublevels();
}
private removeSublevelsForIsland(island: IslandInstanceModel) {
const islandData = this.server.islands[island.name];
islandData.sublevelNames.forEach(i => {
const j = this.cell.sublevels.findIndex(sublevel => sublevel.name === i); const j = this.cell.sublevels.findIndex(sublevel => sublevel.name === i);
if (j > -1) { if (j > -1) {
this.cell.sublevels.splice(j, 1); this.cell.sublevels.splice(j, 1);
} }
}); });
}
// Get new unique ID private addSublevelsForIsland(island: IslandInstanceModel) {
newIsland.id = this.server.serverGrid.getNextId(); const islandData = this.server.islands[island.name];
islandData.sublevelNames.forEach(i => {
// Add new Sublevels
newIslandData.sublevelNames.forEach(i => {
let newSublevel = new ServerSublevelModel(); let newSublevel = new ServerSublevelModel();
newSublevel.name = i; newSublevel.name = i;
newSublevel.setupFromIsland(newIsland, newIslandData, this.cell, this.server.serverGrid); newSublevel.setupFromIsland(island, islandData, this.cell, this.server.serverGrid);
this.cell.sublevels.push(newSublevel); this.cell.sublevels.push(newSublevel);
}); });
this.cell.islandInstances[index] = newIsland;
this.updateExtraSublevels();
} }
private updateExtraSublevels() { private updateExtraSublevels() {
@ -75,4 +77,30 @@ export class ServerComponent implements OnInit {
}); });
}); });
} }
addNewIsland() {
const newIslandData = this.server.islands[this.newIslandName];
let newIsland = IslandInstanceModel.fromIslandData(newIslandData);
newIsland.id = this.server.serverGrid.getNextId();
this.addSublevelsForIsland(newIsland);
this.cell.islandInstances.push(newIsland);
this.updateExtraSublevels();
}
deleteIsland(index: number) {
let oldIsland = this.cell.islandInstances[index];
this.removeSublevelsForIsland(oldIsland);
this.cell.islandInstances.splice(index, 1);
this.updateExtraSublevels();
}
addNewDiscovery() {
let newDisco = new DiscoveryZoneModel();
newDisco.id = this.server.serverGrid.getNextId();
this.cell.discoZones.push(newDisco);
}
deleteDiscovery(index: number) {
this.cell.discoZones.splice(index, 1);
}
} }

View file

@ -1,20 +1,16 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { ServerGridModel } from "./models/serverGrid.model"; import { ServerGridModel } from "./models/serverGrid.model";
import * as islandData from '../data/islands.json'; import { Islands } from "../data/models/islands.model";
import { IslandDataModel } from "../data/models/island-data.model";
@Injectable() @Injectable()
export class Server { export class Server {
private rawData: string = ""; private rawData: string = "";
private jsonData: object = {}; private jsonData: object = {};
public serverGrid: ServerGridModel = new ServerGridModel(); public serverGrid: ServerGridModel = new ServerGridModel();
public islands; public islands: Islands;
constructor() { constructor() {
this.islands = (islandData as any).default; this.islands = new Islands();
Object.keys(this.islands).forEach(i => {
this.islands[i] = new IslandDataModel().deserialize(this.islands[i])
});
} }
public load(raw) { public load(raw) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

@ -0,0 +1 @@
Subproject commit cffac3d0dff6391908bde5d2180efb6bbc76a101

View file

@ -0,0 +1,30 @@
{
"0": "None Set",
"1": "The Ladle of Life",
"2": "Gorgon's Perch",
"3": "The Fish's Mouth",
"4": "The Slender Gate",
"5": "Widowmaker's Claw",
"6": "Faceplant!",
"8": "Horseshoe of Eternity",
"9": "The Rainless Reef",
"11": "Hawthorn's Trap",
"12": "Giant's Crown",
"13": "Eagle's Eye",
"14": "Twin Tales",
"15": "Unknown Temple",
"16": "The Prancing Lady",
"17": "The Great and Angry Warrior",
"18": "Shattered Castle",
"19": "Eye of the Wolf",
"20": "The Demon of the Deep",
"21": "PowerStone 1",
"22": "PowerStone 2",
"23": "PowerStone 3",
"24": "PowerStone 4",
"25": "PowerStone 5",
"26": "PowerStone 6",
"27": "PowerStone 7",
"28": "PowerStone 8",
"29": "PowerStone 9"
}

View file

@ -1,67 +1,4 @@
{ {
"Mnt_A_WF": {
"name": "Mnt_A_WF",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_WF_img.png",
"landscapeMaterialOverride": 5,
"sublevelNames": [
"Mnt_A_Far_02",
"Mnt_A_Farthest_02",
"Mnt_A_Near_02",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_Temperate",
"MasterIBL_Temperate_Canopy",
"MasterIBL_Temperate_Canopy_B"
],
"treasureMapSpawnPoints": [
"8921.124023 30547.748047 4917.777832",
"7230.389160 25989.990234 6905.658203",
"15830.124023 13777.124023 11607.922852",
"21957.662109 13347.965820 7677.936523",
"22628.544922 22246.619141 5067.901367",
"23745.550781 30948.507813 2846.626221",
"-2828.437500 36882.769531 5152.625488",
"-9656.533203 33648.035156 5198.667480",
"-16213.519531 29116.818359 4618.129883",
"-19528.693359 18594.833984 3985.249756",
"-22234.255859 7789.173828 4094.790771",
"-25453.400391 -1344.499390 4357.291016",
"-24248.972656 -8108.288086 5597.098633",
"-19519.425781 -11615.983398 6905.234375",
"-14811.935547 -15212.053711 9463.232422",
"-12189.482422 -20796.500000 10144.284180",
"-6501.245117 -28727.552734 8514.227539",
"-3497.902344 -35701.308594 7281.631348",
"1774.628418 -34117.937500 6986.360840",
"-19502.822266 -30072.041016 2784.364746",
"6085.345215 -24932.974609 22098.029297",
"5755.739258 3202.950928 8290.310547",
"1151.750977 11569.606445 5687.476563",
"-5535.373047 20782.283203 5767.212402"
],
"wildPirateCampSpawnPoints": [
"3686.645020 9962.317383 9225.774414",
"-10708.725586 -12305.980469 13985.858398",
"-4720.640625 -36073.984375 9840.366211",
"-9154.465820 29647.667969 8465.973633",
"26829.423828 27281.474609 4649.251465"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Cay_A_TR": { "Cay_A_TR": {
"name": "Cay_A_TR", "name": "Cay_A_TR",
"x": 305000.0, "x": 305000.0,
@ -127,7 +64,7 @@
"name": "Mnt_B_WF", "name": "Mnt_B_WF",
"x": 306000.0, "x": 306000.0,
"y": 306000.0, "y": 306000.0,
"imagePath": "./IslandImages/Mnt_B_WF_img.png", "imagePath": "./IslandImages/MNT_B_WF_img.png",
"landscapeMaterialOverride": 5, "landscapeMaterialOverride": 5,
"sublevelNames": [ "sublevelNames": [
"Mnt_B", "Mnt_B",
@ -1773,65 +1710,6 @@
"singleSpawnPointY": -48244.0, "singleSpawnPointY": -48244.0,
"singleSpawnPointZ": 800.0 "singleSpawnPointZ": 800.0
}, },
"Mnt_A_TR": {
"name": "Mnt_A_TR",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_TR_img.png",
"landscapeMaterialOverride": 8,
"sublevelNames": [
"Mnt_A_Far_01",
"Mnt_A_Farthest_01",
"Mnt_A_Near_01",
"Mnt_A_Marine_Warm_Near",
"Mnt_A_TU"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_Tropical",
"MasterIBL_Tropical_Canopy_Oak",
"MasterIBL_Tropical_Canopy_RE"
],
"treasureMapSpawnPoints": [
"-39221.386719 -2427.513672 4113.858398",
"-36525.812500 7716.993652 4346.002441",
"-32196.333984 22036.154297 5042.043457",
"-20721.113281 19188.937500 4917.281738",
"-11334.916992 20511.111328 5002.015625",
"-453.383392 20052.134766 6783.128418",
"4050.586670 7264.685059 6988.692871",
"9271.979492 -3435.085938 7016.474609",
"16039.641602 11123.782227 6749.042480",
"22026.318359 28821.359375 5097.370605",
"-2880.620361 -37306.265625 10351.495117",
"-12037.959961 -33522.984375 7496.958008",
"-16083.880859 -25581.726563 6762.905762",
"-24370.158203 -22847.683594 5835.610840",
"-37383.593750 -18054.251953 4680.374023",
"-25427.869141 1104.235962 4883.775879",
"-14331.927734 7869.374512 11785.143555",
"-10475.956055 32285.230469 7317.989746",
"2209.369629 37153.433594 4755.005859",
"10320.745117 31029.701172 4569.124023"
],
"wildPirateCampSpawnPoints": [
"-3266.309326 -13798.226563 16354.730469",
"-15192.075195 -31771.974609 8421.763672",
"-27027.603516 868.178040 4108.173340",
"-12488.033203 26870.892578 11347.929688",
"12383.118164 20897.154297 16061.109375"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Cay_K_TR_E": { "Cay_K_TR_E": {
"name": "Cay_K_TR_E", "name": "Cay_K_TR_E",
"x": 254000.0, "x": 254000.0,
@ -4309,241 +4187,6 @@
"singleSpawnPointY": 25566.0, "singleSpawnPointY": 25566.0,
"singleSpawnPointZ": 1750.0 "singleSpawnPointZ": 1750.0
}, },
"Mnt_A_ET": {
"name": "Mnt_A_ET",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_ET_img.png",
"landscapeMaterialOverride": 4,
"sublevelNames": [
"Mnt_A_Far_03",
"Mnt_A_Farthest_03",
"Mnt_A_Near_03",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_EasternTemperate",
"MasterIBL_EasternTemperate_Canopy_RedMaple"
],
"treasureMapSpawnPoints": [
"23300.851563 19066.119141 5886.382813",
"15616.995117 26994.703125 6035.875977",
"4328.860840 34889.828125 4599.498535",
"-3051.374512 33028.808594 5540.892578",
"-12426.577148 32739.037109 5723.621094",
"-17251.091797 28556.269531 3580.928223",
"-18415.175781 20434.296875 4213.995605",
"-20363.949219 10388.594727 4097.361816",
"-22712.511719 1823.869263 4356.798340",
"-30041.662109 -7305.967285 4167.445313",
"-32877.289063 -18283.722656 4239.025879",
"-20280.568359 -12611.360352 12148.539063",
"-12825.218750 -13884.480469 12373.512695",
"-13856.831055 -5348.271484 10833.792969",
"-15554.403320 1644.106201 9738.410156",
"-15276.648438 9918.864258 8757.969727",
"-32423.572266 22293.447266 4434.692871",
"-33245.796875 1627.237427 3484.802979",
"-31736.296875 -8026.277344 3813.484131",
"-34100.050781 -16449.515625 3974.248535"
],
"wildPirateCampSpawnPoints": [
"-14442.728516 -27578.666016 15104.608398",
"-22133.792969 -8607.928711 13782.070313",
"-11161.720703 20822.830078 8124.202637",
"17319.625000 26353.490234 11589.660156",
"-1529.395752 -9384.915039 12556.161133"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 27992.0,
"singleSpawnPointY": 25147.0,
"singleSpawnPointZ": 1550.0
},
"Mnt_A_WR": {
"name": "Mnt_A_WR",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_WR_img.png",
"landscapeMaterialOverride": 8,
"sublevelNames": [
"Mnt_A_Far_04",
"Mnt_A_Farthest_04",
"Mnt_A_Near_04",
"Mnt_A_Marine_Warm_Near",
"Mnt_A_TU"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_Tropical",
"MasterIBL_Tropical_Canopy_Oak",
"MasterIBL_Tropical_Canopy_RE"
],
"treasureMapSpawnPoints": [
"-16319.966797 19310.255859 5196.956543",
"-19781.716797 12174.086914 6540.497559",
"-25604.515625 730.787048 9503.510742",
"-35903.437500 6640.364746 10179.867188",
"-38640.113281 -1389.074707 6281.706543",
"-40731.691406 -8948.490234 9149.079102",
"-34410.695313 -19055.984375 5384.916016",
"-13043.833008 -1079.698486 12232.010742",
"57.451523 -4843.188965 13067.989258",
"7558.433594 -5478.813965 8258.023438",
"8802.402344 3227.071777 8584.834961",
"964.915283 10208.411133 7034.237305",
"-614.771912 21159.304688 5082.153809",
"-30.795099 33272.714844 5389.859863",
"-7718.686035 32698.550781 4900.445801",
"-11238.574219 26925.666016 4586.316406",
"-19416.068359 25745.462891 4055.743408",
"1694.893555 7357.131836 15986.680664",
"-1565.773682 -31170.025391 10273.754883",
"-15868.557617 -31048.855469 4615.850098"
],
"wildPirateCampSpawnPoints": [
"20706.734375 25303.759766 6627.017090",
"-5884.183105 20850.359375 9037.580078",
"-16820.082031 -12121.963867 17184.175781",
"8048.974609 3369.842285 7099.167969",
"-2541.370361 -29156.621094 11817.947266"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_A_WU": {
"name": "Mnt_A_WU",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_WU_img.png",
"landscapeMaterialOverride": 9,
"sublevelNames": [
"Mnt_A_Far_06",
"Mnt_A_Farthest_06",
"Mnt_A_Near_06",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_WesternTundra",
"MasterIBL_WesternTundra_Canopy_Evergreen",
"MasterIBL_WesternTundra_Canopy_Tamarack"
],
"treasureMapSpawnPoints": [
"-18042.894531 -29979.585938 3075.684814",
"-11214.928711 -29678.425781 6187.490723",
"-4681.496094 -33013.539063 8289.916016",
"2222.194824 -33966.558594 6984.114258",
"2548.885254 -20686.343750 18359.154297",
"9073.424805 -6774.549316 7991.787109",
"5975.436523 1440.155029 4623.303223",
"4609.000000 5029.975586 4257.562012",
"1584.336792 12084.308594 5932.004395",
"-4704.628906 19997.816406 4756.916016",
"-7327.812012 31067.732422 5721.006348",
"-13953.450195 33286.617188 4039.494873",
"-17655.982422 39035.269531 3244.038086",
"-20342.855469 21448.156250 3037.118164",
"-19121.525391 18318.718750 3862.701172",
"-21522.505859 9254.354492 4223.569824",
"-25618.996094 -960.561340 4143.033203",
"-37046.531250 3711.564941 2729.034424",
"-33623.039063 29229.640625 11026.258789",
"-32581.525391 -10203.798828 14291.716797"
],
"wildPirateCampSpawnPoints": [
"-10671.178711 -6897.952148 16074.672852",
"-10086.010742 28760.408203 10429.531250",
"22435.064453 25148.003906 5556.701660",
"7433.569336 -1776.115601 6984.225586",
"-6267.743164 -31590.962891 10015.768555"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_A_CL": {
"name": "Mnt_A_CL",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_CL_img.png",
"landscapeMaterialOverride": 3,
"sublevelNames": [
"Mnt_A_Far_10",
"Mnt_A_Farthest_10",
"Mnt_A_Near_10",
"Mnt_A_Marine_Warm_Near",
"Mnt_A_TU"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_LowDesert",
"MasterIBL_LowDesert_Canopy_DatePalm"
],
"treasureMapSpawnPoints": [
"-6775.080078 33581.414063 5339.703613",
"-3901.758789 26557.550781 5036.619629",
"-1034.917114 27727.207031 5472.959473",
"-1069.415405 18667.478516 5209.427246",
"-6988.755859 3783.157471 16516.882813",
"-24003.324219 -1625.404785 6612.399902",
"-23734.455078 -9008.786133 5206.272949",
"-21897.666016 -14717.655273 7264.745117",
"-16229.936523 -33361.425781 3882.633301",
"-5932.629395 -29586.519531 6184.830078",
"2185.764404 -22713.724609 8536.102539",
"8451.831055 -9422.732422 6245.456055",
"4935.706055 4293.772461 5396.137695",
"8808.493164 12974.325195 6313.133789",
"8405.929688 17747.066406 13092.387695",
"-1716.658203 20650.845703 5096.760742",
"-36420.730469 27674.109375 6618.101074",
"-22928.410156 32069.351563 4629.217285",
"-17762.628906 21170.199219 4249.635254",
"13734.286133 12914.721680 6900.388184",
"24451.494141 27750.486328 4196.981934"
],
"wildPirateCampSpawnPoints": [
"-14474.885742 -28859.289063 8563.893555",
"-23080.291016 -10062.727539 9972.525391",
"-8437.710938 20721.583984 6368.823730",
"21296.687500 28393.369141 6572.314941",
"-4203.813477 -22654.722656 24002.294922"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 26732.0,
"singleSpawnPointY": 27966.0,
"singleSpawnPointZ": 1500.0
},
"Mnt_B_ET": { "Mnt_B_ET": {
"name": "Mnt_B_ET", "name": "Mnt_B_ET",
"x": 306000.0, "x": 306000.0,
@ -9975,69 +9618,6 @@
"singleSpawnPointY": -8476.0, "singleSpawnPointY": -8476.0,
"singleSpawnPointZ": 1200.0 "singleSpawnPointZ": 1200.0
}, },
"Mnt_A_WU_E": {
"name": "Mnt_A_WU_E",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_WU_E_img.jpg",
"landscapeMaterialOverride": 9,
"sublevelNames": [
"Mnt_A_Far_06_E",
"Mnt_A_Farthest_06_E",
"Mnt_A_Near_06_E",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_WesternTundra",
"MasterIBL_WesternTundra_Canopy_Evergreen",
"MasterIBL_WesternTundra_Canopy_Tamarack"
],
"treasureMapSpawnPoints": [
"23304.650391 28357.632813 7346.293945",
"15110.938477 29136.640625 8008.031250",
"6607.625000 26615.041016 9184.242188",
"-2768.143066 23299.013672 9114.582031",
"-8902.627930 28147.964844 8328.683594",
"-12841.750000 36599.148438 6526.341797",
"-22669.263672 33300.867188 9685.276367",
"-20255.564453 18168.187500 4107.428711",
"-23983.101563 10709.409180 3648.567383",
"-25220.861328 2398.911133 3460.032471",
"-28877.457031 -4479.493652 2926.621826",
"-31086.761719 -12862.573242 14216.467773",
"-14207.977539 -18643.226563 12399.709961",
"-8331.723633 -14284.345703 11795.544922",
"-428.522675 -35068.523438 11686.916016",
"26425.808594 -13047.953125 5241.231445",
"34385.734375 5239.154785 4710.686523",
"25333.580078 16428.525391 5913.722168",
"22267.259766 23878.593750 5478.328613",
"21888.523438 31238.580078 4791.255859",
"11120.199219 20744.664063 11486.977539",
"1315.605713 12455.618164 5493.397949",
"3368.548584 7416.109375 4310.032227",
"5884.703613 712.244507 4426.167480"
],
"wildPirateCampSpawnPoints": [
"-8427.049805 -7669.066406 13551.295898",
"-6309.895996 -35013.363281 10702.545898",
"29640.363281 -13378.908203 4185.428711",
"35348.511719 5021.483887 5416.140137",
"21901.765625 25632.488281 9391.201172"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": -1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_F_ET_E": { "Mnt_F_ET_E": {
"name": "Mnt_F_ET_E", "name": "Mnt_F_ET_E",
"x": 101600.0, "x": 101600.0,
@ -10346,63 +9926,6 @@
"singleSpawnPointY": -74676.0, "singleSpawnPointY": -74676.0,
"singleSpawnPointZ": 800.0 "singleSpawnPointZ": 800.0
}, },
"Mnt_A_CH": {
"name": "Mnt_A_CH",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_CH_img.jpg",
"landscapeMaterialOverride": 2,
"sublevelNames": [
"Mnt_A_Far_09",
"Mnt_A_Farthest_09",
"Mnt_A_Near_09",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_HighDesert",
"MasterIBL_HighDesert_Canopy"
],
"treasureMapSpawnPoints": [
"-35740.875000 -18374.009766 5510.986328",
"-26410.099609 -11890.727539 6531.834961",
"-20267.736328 -15241.211914 8124.222168",
"-6991.263672 -14632.373047 19557.578125",
"-8319.404297 -986.505005 16732.705078",
"3332.029053 2170.399902 10244.501953",
"8830.062500 -6753.045898 6961.143555",
"11401.590820 4022.376953 9775.975586",
"15010.574219 12336.619141 9868.496094",
"18275.900391 22467.449219 8554.437500",
"25304.644531 28179.339844 6661.007324",
"22029.359375 35649.312500 7216.578125",
"13324.855469 33483.398438 4842.224609",
"5143.525391 29133.242188 6373.472656",
"-2341.235596 27369.232422 5644.958496",
"-9594.993164 24409.031250 4721.160645",
"-18869.082031 18516.554688 4615.711426",
"-22776.205078 6753.891602 4367.715820",
"-23685.408203 -4728.526855 5238.054199"
],
"wildPirateCampSpawnPoints": [
"13604.176758 16290.165039 10947.601563",
"-17216.478516 18744.845703 7128.184082",
"-6878.863770 -10676.119141 21317.347656",
"-13862.058594 -30055.144531 6369.392090",
"-22821.218750 -12690.331055 10530.900391"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 27225.0,
"singleSpawnPointY": 27937.0,
"singleSpawnPointZ": 1400.0
},
"Mnt_R_CL_PVE": { "Mnt_R_CL_PVE": {
"name": "Mnt_R_CL_PVE", "name": "Mnt_R_CL_PVE",
"x": 306000.0, "x": 306000.0,
@ -12472,6 +11995,9 @@
"Mnt_H_Marine_Cold_Near", "Mnt_H_Marine_Cold_Near",
"Mnt_H_PO" "Mnt_H_PO"
], ],
"discoveryVolumeNames": [
"Mnt_H_Near_08B-BarricadeofIce"
],
"spawnerOverrides": {}, "spawnerOverrides": {},
"extraSublevels": [ "extraSublevels": [
"MasterIBL_CaveEntrance_Polar", "MasterIBL_CaveEntrance_Polar",
@ -12702,61 +12228,6 @@
"singleSpawnPointY": 56574.0, "singleSpawnPointY": 56574.0,
"singleSpawnPointZ": 1800.0 "singleSpawnPointZ": 1800.0
}, },
"Mnt_A_CH_B": {
"name": "Mnt_A_CH_B",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_CH_B_img.jpg",
"landscapeMaterialOverride": 2,
"sublevelNames": [
"Mnt_A_Far_09B",
"Mnt_A_Farthest_09B",
"Mnt_A_Near_09B",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_HighDesert",
"MasterIBL_HighDesert_Canopy"
],
"treasureMapSpawnPoints": [
"-32108.099609 -12808.000000 5895.708008",
"-24836.136719 -11438.191406 6578.490234",
"-16014.962891 -13316.976563 11002.657227",
"-14065.828125 -26226.058594 7175.365234",
"-4803.361816 -27816.361328 7803.044922",
"-1564.247437 -21659.277344 10546.609375",
"5731.886719 -14321.405273 10060.417969",
"4640.200684 -1670.797974 7279.479980",
"3004.115967 7380.430176 5711.780762",
"1654.062256 14502.811523 5189.428711",
"-3939.256592 22920.544922 5187.621582",
"-10331.433594 26403.435547 5782.427246",
"-19307.488281 27800.859375 5347.322754",
"-21057.939453 18143.000000 3544.948730",
"-21476.578125 6260.457031 5651.628418",
"-25290.320313 -4412.205078 5554.392090",
"-9781.649414 32662.320313 8686.000977"
],
"wildPirateCampSpawnPoints": [
"-28295.781250 -7800.558105 10004.723633",
"-15288.873047 21442.154297 7521.703125",
"2837.685059 11135.558594 8887.337891",
"-11564.146484 -7089.494141 22536.314453",
"-5637.882813 -30638.125000 10387.915039"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 26732.0,
"singleSpawnPointY": 27966.0,
"singleSpawnPointZ": 1500.0
},
"Mnt_C_CH_B": { "Mnt_C_CH_B": {
"name": "Mnt_C_CH_B", "name": "Mnt_C_CH_B",
"x": 101600.0, "x": 101600.0,
@ -13473,126 +12944,6 @@
"singleSpawnPointY": -81047.0, "singleSpawnPointY": -81047.0,
"singleSpawnPointZ": 1650.0 "singleSpawnPointZ": 1650.0
}, },
"Mnt_A_WU_B": {
"name": "Mnt_A_WU_B",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_WU_B_img.jpg",
"landscapeMaterialOverride": 9,
"sublevelNames": [
"Mnt_A_Far_06B",
"Mnt_A_Farthest_06B",
"Mnt_A_Near_06B",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_WesternTundra",
"MasterIBL_WesternTundra_Canopy_Evergreen",
"MasterIBL_WesternTundra_Canopy_Tamarack"
],
"treasureMapSpawnPoints": [
"-35388.078125 -23165.611328 6390.755859",
"-35450.695313 -10049.711914 5251.254883",
"-24899.007813 550.957336 4795.335938",
"-23991.230469 15574.333984 3425.397461",
"-19343.474609 27255.800781 3856.504883",
"-17586.117188 37536.781250 4569.224609",
"-7789.189941 35650.808594 5478.009277",
"-10763.719727 28955.986328 5299.406738",
"-10056.610352 20469.708984 6286.781250",
"-2489.498535 18165.636719 5280.645508",
"523.259644 9338.525391 5067.944824",
"6053.696289 2926.221436 5350.270020",
"13118.771484 6138.366211 7769.156250",
"11357.637695 13101.028320 10808.270508",
"10094.054688 22086.470703 12265.933594",
"3121.832275 27809.265625 13000.363281",
"-3897.670654 -210.781204 13779.238281",
"-6369.445313 -11102.523438 12841.676758",
"-7269.771484 -20814.730469 11369.663086",
"2908.048340 -25487.294922 11604.296875",
"6657.367676 -17592.033203 12439.599609"
],
"wildPirateCampSpawnPoints": [
"-14898.756836 -18859.867188 13575.396484",
"7948.134277 2770.275146 9633.106445",
"11089.072266 22548.535156 10310.013672",
"-13794.674805 24534.058594 8345.067383",
"-6794.797363 -2446.077881 15465.110352"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_A_WU_C": {
"name": "Mnt_A_WU_C",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_WU_C_img.jpg",
"landscapeMaterialOverride": 9,
"sublevelNames": [
"Mnt_A_Far_06B",
"Mnt_A_Farthest_06B",
"Mnt_A_Near_06B",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_WesternTundra",
"MasterIBL_WesternTundra_Canopy_Evergreen",
"MasterIBL_WesternTundra_Canopy_Tamarack"
],
"treasureMapSpawnPoints": [
"-35388.078125 -23165.611328 6390.755859",
"-35450.695313 -10049.711914 5251.254883",
"-24899.007813 550.957336 4795.335938",
"-23991.230469 15574.333984 3425.397461",
"-19343.474609 27255.800781 3856.504883",
"-17586.117188 37536.781250 4569.224609",
"-7789.189941 35650.808594 5478.009277",
"-10763.719727 28955.986328 5299.406738",
"-10056.610352 20469.708984 6286.781250",
"-2489.498535 18165.636719 5280.645508",
"523.259644 9338.525391 5067.944824",
"6053.696289 2926.221436 5350.270020",
"13118.771484 6138.366211 7769.156250",
"11357.637695 13101.028320 10808.270508",
"10094.054688 22086.470703 12265.933594",
"3121.832275 27809.265625 13000.363281",
"-3897.670654 -210.781204 13779.238281",
"-6369.445313 -11102.523438 12841.676758",
"-7269.771484 -20814.730469 11369.663086",
"2908.048340 -25487.294922 11604.296875",
"6657.367676 -17592.033203 12439.599609"
],
"wildPirateCampSpawnPoints": [
"-14898.756836 -18859.867188 13575.396484",
"7948.134277 2770.275146 9633.106445",
"11089.072266 22548.535156 10310.013672",
"-13794.674805 24534.058594 8345.067383",
"-6794.797363 -2446.077881 15465.110352"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_J_WU": { "Mnt_J_WU": {
"name": "Mnt_J_WU", "name": "Mnt_J_WU",
"x": 204000.0, "x": 204000.0,
@ -19908,64 +19259,6 @@
"singleSpawnPointY": 0.0, "singleSpawnPointY": 0.0,
"singleSpawnPointZ": 0.0 "singleSpawnPointZ": 0.0
}, },
"Mnt_A_WU_D": {
"name": "Mnt_A_WU_D",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./IslandImages/Mnt_A_WU_D_img.jpg",
"landscapeMaterialOverride": 9,
"sublevelNames": [
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU",
"Mnt_A_Near_06D",
"Mnt_A_Farthest_06D",
"Mnt_A_Far_06D"
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_WesternTundra",
"MasterIBL_WesternTundra_Canopy_Evergreen",
"MasterIBL_WesternTundra_Canopy_Tamarack"
],
"treasureMapSpawnPoints": [
"-38698.117188 -7910.122559 6970.310547",
"-36162.929688 15789.360352 8173.864746",
"-35365.847656 25305.294922 9875.699219",
"-15362.139648 33499.007813 5020.332031",
"-13457.119141 26561.998047 5125.049805",
"-8361.398438 12461.761719 9154.880859",
"-7721.176270 553.670898 18257.652344",
"-5502.931152 -17865.792969 21040.931641",
"-17256.367188 -21958.599609 8194.637695",
"-6019.041504 -37349.304688 13991.281250",
"-5090.549316 -48616.093750 14836.836914",
"5783.769531 -1886.086304 7190.939453",
"5099.058105 8737.717773 8166.959473",
"12067.832031 4474.467285 12688.034180",
"12160.580078 20791.974609 10282.052734",
"7164.411621 23532.482422 9806.642578",
"-1489.868652 27648.523438 5197.384766",
"-7317.666016 27735.687500 6491.034180",
"-4251.575684 36425.417969 6953.914063"
],
"wildPirateCampSpawnPoints": [
"-8939.093750 -14080.763672 13484.836914",
"3931.334473 7910.164551 7602.589355",
"-7784.326660 20821.330078 8117.607422",
"-12162.979492 35787.468750 7057.665527",
"-38065.082031 29156.400391 9562.736328"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Cay_C_EE_B": { "Cay_C_EE_B": {
"name": "Cay_C_EE_B", "name": "Cay_C_EE_B",
"x": 532000.0, "x": 532000.0,

854
src/data/mnt/a/islands.json Normal file
View file

@ -0,0 +1,854 @@
{
"Mnt_A_CH": {
"name": "Mnt_A_CH",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_CH.png",
"landscapeMaterialOverride": 2,
"sublevelNames": [
"Mnt_A_Far_09",
"Mnt_A_Farthest_09",
"Mnt_A_Near_09",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"discoveryVolumeNames": [
{
"name": "Mnt_A_Near_09-FishesMouth",
"size": {
"sizeX": 17500.0,
"sizeY": 10000.0,
"sizeZ": 40000.0
}
}
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_HighDesert",
"MasterIBL_HighDesert_Canopy"
],
"treasureMapSpawnPoints": [
"-35740.875000 -18374.009766 5510.986328",
"-26410.099609 -11890.727539 6531.834961",
"-20267.736328 -15241.211914 8124.222168",
"-6991.263672 -14632.373047 19557.578125",
"-8319.404297 -986.505005 16732.705078",
"3332.029053 2170.399902 10244.501953",
"8830.062500 -6753.045898 6961.143555",
"11401.590820 4022.376953 9775.975586",
"15010.574219 12336.619141 9868.496094",
"18275.900391 22467.449219 8554.437500",
"25304.644531 28179.339844 6661.007324",
"22029.359375 35649.312500 7216.578125",
"13324.855469 33483.398438 4842.224609",
"5143.525391 29133.242188 6373.472656",
"-2341.235596 27369.232422 5644.958496",
"-9594.993164 24409.031250 4721.160645",
"-18869.082031 18516.554688 4615.711426",
"-22776.205078 6753.891602 4367.715820",
"-23685.408203 -4728.526855 5238.054199"
],
"wildPirateCampSpawnPoints": [
"13604.176758 16290.165039 10947.601563",
"-17216.478516 18744.845703 7128.184082",
"-6878.863770 -10676.119141 21317.347656",
"-13862.058594 -30055.144531 6369.392090",
"-22821.218750 -12690.331055 10530.900391"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 27225.0,
"singleSpawnPointY": 27937.0,
"singleSpawnPointZ": 1400.0
},
"Mnt_A_CH_B": {
"name": "Mnt_A_CH_B",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_CH_B.png",
"landscapeMaterialOverride": 2,
"sublevelNames": [
"Mnt_A_Far_09B",
"Mnt_A_Farthest_09B",
"Mnt_A_Near_09B",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"discoveryVolumeNames": [
{
"name": "Mnt_A_Near_09B-ABeautifulVista",
"size": {
"sizeX": 15000.0,
"sizeY": 12500.0,
"sizeZ": 40000.0
}
}
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_HighDesert",
"MasterIBL_HighDesert_Canopy"
],
"treasureMapSpawnPoints": [
"-32108.099609 -12808.000000 5895.708008",
"-24836.136719 -11438.191406 6578.490234",
"-16014.962891 -13316.976563 11002.657227",
"-14065.828125 -26226.058594 7175.365234",
"-4803.361816 -27816.361328 7803.044922",
"-1564.247437 -21659.277344 10546.609375",
"5731.886719 -14321.405273 10060.417969",
"4640.200684 -1670.797974 7279.479980",
"3004.115967 7380.430176 5711.780762",
"1654.062256 14502.811523 5189.428711",
"-3939.256592 22920.544922 5187.621582",
"-10331.433594 26403.435547 5782.427246",
"-19307.488281 27800.859375 5347.322754",
"-21057.939453 18143.000000 3544.948730",
"-21476.578125 6260.457031 5651.628418",
"-25290.320313 -4412.205078 5554.392090",
"-9781.649414 32662.320313 8686.000977"
],
"wildPirateCampSpawnPoints": [
"-28295.781250 -7800.558105 10004.723633",
"-15288.873047 21442.154297 7521.703125",
"2837.685059 11135.558594 8887.337891",
"-11564.146484 -7089.494141 22536.314453",
"-5637.882813 -30638.125000 10387.915039"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 26732.0,
"singleSpawnPointY": 27966.0,
"singleSpawnPointZ": 1500.0
},
"Mnt_A_CL": {
"name": "Mnt_A_CL",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_CL.png",
"landscapeMaterialOverride": 3,
"sublevelNames": [
"Mnt_A_Far_10",
"Mnt_A_Farthest_10",
"Mnt_A_Near_10",
"Mnt_A_Marine_Warm_Near",
"Mnt_A_TU"
],
"discoveryVolumeNames": [
{
"name": "Mnt_A_Near_10-CrumblingRuinsoftheDawn",
"size": {
"sizeX": 80000.0,
"sizeY": 67500.0,
"sizeZ": 40000.0
}
},
{
"name": "Mnt_A_Near_10-RuinsoftheDawn",
"size": {
"sizeX": 75000.0,
"sizeY": 57500.0,
"sizeZ": 40000.0
}
}
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_LowDesert",
"MasterIBL_LowDesert_Canopy_DatePalm"
],
"treasureMapSpawnPoints": [
"-6775.080078 33581.414063 5339.703613",
"-3901.758789 26557.550781 5036.619629",
"-1034.917114 27727.207031 5472.959473",
"-1069.415405 18667.478516 5209.427246",
"-6988.755859 3783.157471 16516.882813",
"-24003.324219 -1625.404785 6612.399902",
"-23734.455078 -9008.786133 5206.272949",
"-21897.666016 -14717.655273 7264.745117",
"-16229.936523 -33361.425781 3882.633301",
"-5932.629395 -29586.519531 6184.830078",
"2185.764404 -22713.724609 8536.102539",
"8451.831055 -9422.732422 6245.456055",
"4935.706055 4293.772461 5396.137695",
"8808.493164 12974.325195 6313.133789",
"8405.929688 17747.066406 13092.387695",
"-1716.658203 20650.845703 5096.760742",
"-36420.730469 27674.109375 6618.101074",
"-22928.410156 32069.351563 4629.217285",
"-17762.628906 21170.199219 4249.635254",
"13734.286133 12914.721680 6900.388184",
"24451.494141 27750.486328 4196.981934"
],
"wildPirateCampSpawnPoints": [
"-14474.885742 -28859.289063 8563.893555",
"-23080.291016 -10062.727539 9972.525391",
"-8437.710938 20721.583984 6368.823730",
"21296.687500 28393.369141 6572.314941",
"-4203.813477 -22654.722656 24002.294922"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 26732.0,
"singleSpawnPointY": 27966.0,
"singleSpawnPointZ": 1500.0
},
"Mnt_A_ET": {
"name": "Mnt_A_ET",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_ET.png",
"landscapeMaterialOverride": 4,
"sublevelNames": [
"Mnt_A_Far_03",
"Mnt_A_Farthest_03",
"Mnt_A_Near_03",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"discoveryVolumeNames": [
{
"name": "Mnt_A_Near_03-RazerbackRidge",
"size": {
"sizeX": 42500.0,
"sizeY": 45000.0,
"sizeZ": 40000.0
}
}
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_EasternTemperate",
"MasterIBL_EasternTemperate_Canopy_RedMaple"
],
"treasureMapSpawnPoints": [
"23300.851563 19066.119141 5886.382813",
"15616.995117 26994.703125 6035.875977",
"4328.860840 34889.828125 4599.498535",
"-3051.374512 33028.808594 5540.892578",
"-12426.577148 32739.037109 5723.621094",
"-17251.091797 28556.269531 3580.928223",
"-18415.175781 20434.296875 4213.995605",
"-20363.949219 10388.594727 4097.361816",
"-22712.511719 1823.869263 4356.798340",
"-30041.662109 -7305.967285 4167.445313",
"-32877.289063 -18283.722656 4239.025879",
"-20280.568359 -12611.360352 12148.539063",
"-12825.218750 -13884.480469 12373.512695",
"-13856.831055 -5348.271484 10833.792969",
"-15554.403320 1644.106201 9738.410156",
"-15276.648438 9918.864258 8757.969727",
"-32423.572266 22293.447266 4434.692871",
"-33245.796875 1627.237427 3484.802979",
"-31736.296875 -8026.277344 3813.484131",
"-34100.050781 -16449.515625 3974.248535"
],
"wildPirateCampSpawnPoints": [
"-14442.728516 -27578.666016 15104.608398",
"-22133.792969 -8607.928711 13782.070313",
"-11161.720703 20822.830078 8124.202637",
"17319.625000 26353.490234 11589.660156",
"-1529.395752 -9384.915039 12556.161133"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 27992.0,
"singleSpawnPointY": 25147.0,
"singleSpawnPointZ": 1550.0
},
"Mnt_A_TR": {
"name": "Mnt_A_TR",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_TR.png",
"landscapeMaterialOverride": 8,
"sublevelNames": [
"Mnt_A_Far_01",
"Mnt_A_Farthest_01",
"Mnt_A_Near_01",
"Mnt_A_Marine_Warm_Near",
"Mnt_A_TU"
],
"discoveryVolumeNames": [
{
"name": "Mnt_A_Near_01-TheStoneShark",
"size": {
"sizeX": 97500.0,
"sizeY": 65000.0,
"sizeZ": 40000.0
}
}
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_Tropical",
"MasterIBL_Tropical_Canopy_Oak",
"MasterIBL_Tropical_Canopy_RE"
],
"treasureMapSpawnPoints": [
"-39221.386719 -2427.513672 4113.858398",
"-36525.812500 7716.993652 4346.002441",
"-32196.333984 22036.154297 5042.043457",
"-20721.113281 19188.937500 4917.281738",
"-11334.916992 20511.111328 5002.015625",
"-453.383392 20052.134766 6783.128418",
"4050.586670 7264.685059 6988.692871",
"9271.979492 -3435.085938 7016.474609",
"16039.641602 11123.782227 6749.042480",
"22026.318359 28821.359375 5097.370605",
"-2880.620361 -37306.265625 10351.495117",
"-12037.959961 -33522.984375 7496.958008",
"-16083.880859 -25581.726563 6762.905762",
"-24370.158203 -22847.683594 5835.610840",
"-37383.593750 -18054.251953 4680.374023",
"-25427.869141 1104.235962 4883.775879",
"-14331.927734 7869.374512 11785.143555",
"-10475.956055 32285.230469 7317.989746",
"2209.369629 37153.433594 4755.005859",
"10320.745117 31029.701172 4569.124023"
],
"wildPirateCampSpawnPoints": [
"-3266.309326 -13798.226563 16354.730469",
"-15192.075195 -31771.974609 8421.763672",
"-27027.603516 868.178040 4108.173340",
"-12488.033203 26870.892578 11347.929688",
"12383.118164 20897.154297 16061.109375"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_A_WF": {
"name": "Mnt_A_WF",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_WF.png",
"landscapeMaterialOverride": 5,
"sublevelNames": [
"Mnt_A_Far_02",
"Mnt_A_Farthest_02",
"Mnt_A_Near_02",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"discoveryVolumeNames": [
{
"name": "Mnt_A_Near_02-ATinyDock",
"size": {
"sizeX": 30000.0,
"sizeY": 17500.0,
"sizeZ": 40000.0
}
},
{
"name": "Mnt_A_Near_02-EagleDive",
"size": {
"sizeX": 35000.0,
"sizeY": 25000.0,
"sizeZ": 40000.0
}
}
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_Temperate",
"MasterIBL_Temperate_Canopy",
"MasterIBL_Temperate_Canopy_B"
],
"treasureMapSpawnPoints": [
"8921.124023 30547.748047 4917.777832",
"7230.389160 25989.990234 6905.658203",
"15830.124023 13777.124023 11607.922852",
"21957.662109 13347.965820 7677.936523",
"22628.544922 22246.619141 5067.901367",
"23745.550781 30948.507813 2846.626221",
"-2828.437500 36882.769531 5152.625488",
"-9656.533203 33648.035156 5198.667480",
"-16213.519531 29116.818359 4618.129883",
"-19528.693359 18594.833984 3985.249756",
"-22234.255859 7789.173828 4094.790771",
"-25453.400391 -1344.499390 4357.291016",
"-24248.972656 -8108.288086 5597.098633",
"-19519.425781 -11615.983398 6905.234375",
"-14811.935547 -15212.053711 9463.232422",
"-12189.482422 -20796.500000 10144.284180",
"-6501.245117 -28727.552734 8514.227539",
"-3497.902344 -35701.308594 7281.631348",
"1774.628418 -34117.937500 6986.360840",
"-19502.822266 -30072.041016 2784.364746",
"6085.345215 -24932.974609 22098.029297",
"5755.739258 3202.950928 8290.310547",
"1151.750977 11569.606445 5687.476563",
"-5535.373047 20782.283203 5767.212402"
],
"wildPirateCampSpawnPoints": [
"3686.645020 9962.317383 9225.774414",
"-10708.725586 -12305.980469 13985.858398",
"-4720.640625 -36073.984375 9840.366211",
"-9154.465820 29647.667969 8465.973633",
"26829.423828 27281.474609 4649.251465"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_A_WR": {
"name": "Mnt_A_WR",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_WR.png",
"landscapeMaterialOverride": 8,
"sublevelNames": [
"Mnt_A_Far_04",
"Mnt_A_Farthest_04",
"Mnt_A_Near_04",
"Mnt_A_Marine_Warm_Near",
"Mnt_A_TU"
],
"discoveryVolumeNames": [
{
"name": "Mnt_A_Near_04-ANaturalWaterfall",
"size": {
"sizeX": 60000.0,
"sizeY": 50000.0,
"sizeZ": 40000.0
}
},
{
"name": "Mnt_A_Near_04-CircleofTheFlowStones",
"size": {
"sizeX": 42500.0,
"sizeY": 47500.0,
"sizeZ": 40000.0
}
}
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_Tropical",
"MasterIBL_Tropical_Canopy_Oak",
"MasterIBL_Tropical_Canopy_RE"
],
"treasureMapSpawnPoints": [
"-16319.966797 19310.255859 5196.956543",
"-19781.716797 12174.086914 6540.497559",
"-25604.515625 730.787048 9503.510742",
"-35903.437500 6640.364746 10179.867188",
"-38640.113281 -1389.074707 6281.706543",
"-40731.691406 -8948.490234 9149.079102",
"-34410.695313 -19055.984375 5384.916016",
"-13043.833008 -1079.698486 12232.010742",
"57.451523 -4843.188965 13067.989258",
"7558.433594 -5478.813965 8258.023438",
"8802.402344 3227.071777 8584.834961",
"964.915283 10208.411133 7034.237305",
"-614.771912 21159.304688 5082.153809",
"-30.795099 33272.714844 5389.859863",
"-7718.686035 32698.550781 4900.445801",
"-11238.574219 26925.666016 4586.316406",
"-19416.068359 25745.462891 4055.743408",
"1694.893555 7357.131836 15986.680664",
"-1565.773682 -31170.025391 10273.754883",
"-15868.557617 -31048.855469 4615.850098"
],
"wildPirateCampSpawnPoints": [
"20706.734375 25303.759766 6627.017090",
"-5884.183105 20850.359375 9037.580078",
"-16820.082031 -12121.963867 17184.175781",
"8048.974609 3369.842285 7099.167969",
"-2541.370361 -29156.621094 11817.947266"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_A_WU": {
"name": "Mnt_A_WU",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_WU.png",
"landscapeMaterialOverride": 9,
"sublevelNames": [
"Mnt_A_Far_06",
"Mnt_A_Farthest_06",
"Mnt_A_Near_06",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"discoveryVolumeNames": [
{
"name": "Mnt_A_Near_06-TotemofLife",
"size": {
"sizeX": 65000.0,
"sizeY": 30000.0,
"sizeZ": 40000.0
}
}
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_WesternTundra",
"MasterIBL_WesternTundra_Canopy_Evergreen",
"MasterIBL_WesternTundra_Canopy_Tamarack"
],
"treasureMapSpawnPoints": [
"-18042.894531 -29979.585938 3075.684814",
"-11214.928711 -29678.425781 6187.490723",
"-4681.496094 -33013.539063 8289.916016",
"2222.194824 -33966.558594 6984.114258",
"2548.885254 -20686.343750 18359.154297",
"9073.424805 -6774.549316 7991.787109",
"5975.436523 1440.155029 4623.303223",
"4609.000000 5029.975586 4257.562012",
"1584.336792 12084.308594 5932.004395",
"-4704.628906 19997.816406 4756.916016",
"-7327.812012 31067.732422 5721.006348",
"-13953.450195 33286.617188 4039.494873",
"-17655.982422 39035.269531 3244.038086",
"-20342.855469 21448.156250 3037.118164",
"-19121.525391 18318.718750 3862.701172",
"-21522.505859 9254.354492 4223.569824",
"-25618.996094 -960.561340 4143.033203",
"-37046.531250 3711.564941 2729.034424",
"-33623.039063 29229.640625 11026.258789",
"-32581.525391 -10203.798828 14291.716797"
],
"wildPirateCampSpawnPoints": [
"-10671.178711 -6897.952148 16074.672852",
"-10086.010742 28760.408203 10429.531250",
"22435.064453 25148.003906 5556.701660",
"7433.569336 -1776.115601 6984.225586",
"-6267.743164 -31590.962891 10015.768555"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_A_WU_B": {
"name": "Mnt_A_WU_B",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_WU_B.png",
"landscapeMaterialOverride": 9,
"sublevelNames": [
"Mnt_A_Far_06B",
"Mnt_A_Farthest_06B",
"Mnt_A_Near_06B",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"discoveryVolumeNames": [
{
"name": "Mnt_A_Near_06B-MaraudersBeach",
"size": {
"sizeX": 47500.0,
"sizeY": 35000.0,
"sizeZ": 40000.0
}
},
{
"name": "Mnt_A_Near_06B-TheStoneBridge",
"size": {
"sizeX": 22500.0,
"sizeY": 25000.0,
"sizeZ": 40000.0
}
}
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_WesternTundra",
"MasterIBL_WesternTundra_Canopy_Evergreen",
"MasterIBL_WesternTundra_Canopy_Tamarack"
],
"treasureMapSpawnPoints": [
"-35388.078125 -23165.611328 6390.755859",
"-35450.695313 -10049.711914 5251.254883",
"-24899.007813 550.957336 4795.335938",
"-23991.230469 15574.333984 3425.397461",
"-19343.474609 27255.800781 3856.504883",
"-17586.117188 37536.781250 4569.224609",
"-7789.189941 35650.808594 5478.009277",
"-10763.719727 28955.986328 5299.406738",
"-10056.610352 20469.708984 6286.781250",
"-2489.498535 18165.636719 5280.645508",
"523.259644 9338.525391 5067.944824",
"6053.696289 2926.221436 5350.270020",
"13118.771484 6138.366211 7769.156250",
"11357.637695 13101.028320 10808.270508",
"10094.054688 22086.470703 12265.933594",
"3121.832275 27809.265625 13000.363281",
"-3897.670654 -210.781204 13779.238281",
"-6369.445313 -11102.523438 12841.676758",
"-7269.771484 -20814.730469 11369.663086",
"2908.048340 -25487.294922 11604.296875",
"6657.367676 -17592.033203 12439.599609"
],
"wildPirateCampSpawnPoints": [
"-14898.756836 -18859.867188 13575.396484",
"7948.134277 2770.275146 9633.106445",
"11089.072266 22548.535156 10310.013672",
"-13794.674805 24534.058594 8345.067383",
"-6794.797363 -2446.077881 15465.110352"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_A_WU_C": {
"name": "Mnt_A_WU_C",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_WU_C.png",
"landscapeMaterialOverride": 9,
"sublevelNames": [
"Mnt_A_Far_06B",
"Mnt_A_Farthest_06B",
"Mnt_A_Near_06B",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"discoveryVolumeNames": [
{
"name": "Mnt_A_Near_06B-MaraudersBeach",
"size": {
"sizeX": 47500.0,
"sizeY": 35000.0,
"sizeZ": 40000.0
}
},
{
"name": "Mnt_A_Near_06B-TheStoneBridge",
"size": {
"sizeX": 22500.0,
"sizeY": 25000.0,
"sizeZ": 40000.0
}
}
],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_WesternTundra",
"MasterIBL_WesternTundra_Canopy_Evergreen",
"MasterIBL_WesternTundra_Canopy_Tamarack"
],
"treasureMapSpawnPoints": [
"-35388.078125 -23165.611328 6390.755859",
"-35450.695313 -10049.711914 5251.254883",
"-24899.007813 550.957336 4795.335938",
"-23991.230469 15574.333984 3425.397461",
"-19343.474609 27255.800781 3856.504883",
"-17586.117188 37536.781250 4569.224609",
"-7789.189941 35650.808594 5478.009277",
"-10763.719727 28955.986328 5299.406738",
"-10056.610352 20469.708984 6286.781250",
"-2489.498535 18165.636719 5280.645508",
"523.259644 9338.525391 5067.944824",
"6053.696289 2926.221436 5350.270020",
"13118.771484 6138.366211 7769.156250",
"11357.637695 13101.028320 10808.270508",
"10094.054688 22086.470703 12265.933594",
"3121.832275 27809.265625 13000.363281",
"-3897.670654 -210.781204 13779.238281",
"-6369.445313 -11102.523438 12841.676758",
"-7269.771484 -20814.730469 11369.663086",
"2908.048340 -25487.294922 11604.296875",
"6657.367676 -17592.033203 12439.599609"
],
"wildPirateCampSpawnPoints": [
"-14898.756836 -18859.867188 13575.396484",
"7948.134277 2770.275146 9633.106445",
"11089.072266 22548.535156 10310.013672",
"-13794.674805 24534.058594 8345.067383",
"-6794.797363 -2446.077881 15465.110352"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_A_WU_D": {
"name": "Mnt_A_WU_D",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_WU_D.png",
"landscapeMaterialOverride": 9,
"sublevelNames": [
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU",
"Mnt_A_Near_06D",
"Mnt_A_Farthest_06D",
"Mnt_A_Far_06D"
],
"discoveryVolumeNames": [],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_WesternTundra",
"MasterIBL_WesternTundra_Canopy_Evergreen",
"MasterIBL_WesternTundra_Canopy_Tamarack"
],
"treasureMapSpawnPoints": [
"-38698.117188 -7910.122559 6970.310547",
"-36162.929688 15789.360352 8173.864746",
"-35365.847656 25305.294922 9875.699219",
"-15362.139648 33499.007813 5020.332031",
"-13457.119141 26561.998047 5125.049805",
"-8361.398438 12461.761719 9154.880859",
"-7721.176270 553.670898 18257.652344",
"-5502.931152 -17865.792969 21040.931641",
"-17256.367188 -21958.599609 8194.637695",
"-6019.041504 -37349.304688 13991.281250",
"-5090.549316 -48616.093750 14836.836914",
"5783.769531 -1886.086304 7190.939453",
"5099.058105 8737.717773 8166.959473",
"12067.832031 4474.467285 12688.034180",
"12160.580078 20791.974609 10282.052734",
"7164.411621 23532.482422 9806.642578",
"-1489.868652 27648.523438 5197.384766",
"-7317.666016 27735.687500 6491.034180",
"-4251.575684 36425.417969 6953.914063"
],
"wildPirateCampSpawnPoints": [
"-8939.093750 -14080.763672 13484.836914",
"3931.334473 7910.164551 7602.589355",
"-7784.326660 20821.330078 8117.607422",
"-12162.979492 35787.468750 7057.665527",
"-38065.082031 29156.400391 9562.736328"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": 1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
},
"Mnt_A_WU_E": {
"name": "Mnt_A_WU_E",
"x": 152000.0,
"y": 152000.0,
"imagePath": "./assets/mnt/a/Mnt_A_WU_E.png",
"landscapeMaterialOverride": 9,
"sublevelNames": [
"Mnt_A_Far_06_E",
"Mnt_A_Farthest_06_E",
"Mnt_A_Near_06_E",
"Mnt_A_Marine_Cold_Near",
"Mnt_A_TU"
],
"discoveryVolumeNames": [],
"spawnerOverrides": {},
"extraSublevels": [
"MasterIBL_WesternTundra",
"MasterIBL_WesternTundra_Canopy_Evergreen",
"MasterIBL_WesternTundra_Canopy_Tamarack"
],
"treasureMapSpawnPoints": [
"23304.650391 28357.632813 7346.293945",
"15110.938477 29136.640625 8008.031250",
"6607.625000 26615.041016 9184.242188",
"-2768.143066 23299.013672 9114.582031",
"-8902.627930 28147.964844 8328.683594",
"-12841.750000 36599.148438 6526.341797",
"-22669.263672 33300.867188 9685.276367",
"-20255.564453 18168.187500 4107.428711",
"-23983.101563 10709.409180 3648.567383",
"-25220.861328 2398.911133 3460.032471",
"-28877.457031 -4479.493652 2926.621826",
"-31086.761719 -12862.573242 14216.467773",
"-14207.977539 -18643.226563 12399.709961",
"-8331.723633 -14284.345703 11795.544922",
"-428.522675 -35068.523438 11686.916016",
"26425.808594 -13047.953125 5241.231445",
"34385.734375 5239.154785 4710.686523",
"25333.580078 16428.525391 5913.722168",
"22267.259766 23878.593750 5478.328613",
"21888.523438 31238.580078 4791.255859",
"11120.199219 20744.664063 11486.977539",
"1315.605713 12455.618164 5493.397949",
"3368.548584 7416.109375 4310.032227",
"5884.703613 712.244507 4426.167480"
],
"wildPirateCampSpawnPoints": [
"-8427.049805 -7669.066406 13551.295898",
"-6309.895996 -35013.363281 10702.545898",
"29640.363281 -13378.908203 4185.428711",
"35348.511719 5021.483887 5416.140137",
"21901.765625 25632.488281 9391.201172"
],
"minTreasureQuality": -1.0,
"maxTreasureQuality": -1.0,
"useNpcVolumesForTreasures": false,
"useLevelBoundsForTreasures": true,
"prioritizeVolumesForTreasures": false,
"islandTreasureBottleSupplyCrateOverrides": "",
"islandPoints": -1,
"singleSpawnPointX": 28008.0,
"singleSpawnPointY": 31219.0,
"singleSpawnPointZ": 1000.0
}
}

View file

@ -0,0 +1,23 @@
import { Deserialize } from "../../app/models/util/deserialize.model";
class Size implements Deserialize {
sizeX: number;
sizeY: number;
sizeZ: number;
deserialize(input: any): this {
Object.assign(this, input);
return this;
}
}
export class DiscoveryVolumeNamesModel implements Deserialize {
name: string;
size: Size;
deserialize(input: any): this {
Object.assign(this, input);
this.size = new Size().deserialize(this.size);
return this;
}
}

View file

@ -1,5 +1,5 @@
import { Deserialize } from "../../app/models/util/deserialize.model"; import { Deserialize } from "../../app/models/util/deserialize.model";
import { IslandInstanceModel } from "../../app/models/atlasData/island-instance.model"; import { DiscoveryVolumeNamesModel } from "./DiscoveryVolumeNames.model";
export class IslandDataModel implements Deserialize { export class IslandDataModel implements Deserialize {
name: string; name: string;
@ -8,6 +8,7 @@ export class IslandDataModel implements Deserialize {
imagePath: string; imagePath: string;
landscapeMaterialOverride: number; landscapeMaterialOverride: number;
sublevelNames: string[]; sublevelNames: string[];
discoveryVolumeNames: DiscoveryVolumeNamesModel[] = [];
spawnerOverrides: object; spawnerOverrides: object;
extraSublevels: string[]; extraSublevels: string[];
treasureMapSpawnPoints: string[]; treasureMapSpawnPoints: string[];
@ -34,6 +35,7 @@ export class IslandDataModel implements Deserialize {
CL: "Low Desert", CL: "Low Desert",
CP: "Polar", CP: "Polar",
EE: "Equatorial", EE: "Equatorial",
EQ: "Equatorial Tropical",
ET: "Eastern Temperate", ET: "Eastern Temperate",
PO: "Polar", PO: "Polar",
TR: "Tropical", TR: "Tropical",
@ -54,6 +56,7 @@ export class IslandDataModel implements Deserialize {
deserialize(input: any): this { deserialize(input: any): this {
Object.assign(this, input); Object.assign(this, input);
console.log(input);
const parsedName = this.name.split('_'); const parsedName = this.name.split('_');
@ -66,6 +69,15 @@ export class IslandDataModel implements Deserialize {
? parsedName[3] ? parsedName[3]
: this._variantLookup[parsedName[3]]; : this._variantLookup[parsedName[3]];
// Override image paths from server grid editor to included code
if (this.imagePath.substr(2, 6) === 'Island') {
this.imagePath = './assets/server-grid-editor/' + this.imagePath.substr(2);
}
this.discoveryVolumeNames = this.discoveryVolumeNames.map(
i => new DiscoveryVolumeNamesModel().deserialize(i)
);
return this; return this;
} }

View file

@ -0,0 +1,26 @@
import { IslandDataModel } from "./island-data.model";
// Original from Grapeshot
import * as rawIslandData from '../islands.json';
// Split down files with updates
import * as rawMntAData from '../mnt/a/islands.json';
interface IslandDataMap {
[name: string]: IslandDataModel
}
export class Islands {
islandData: IslandDataMap = {};
constructor() {
// Split down so easier to maintain each type
[
rawIslandData,
rawMntAData
].forEach(r => {
const data = (r as any).default;
Object.keys(data).forEach(i => {
this.islandData[i] = new IslandDataModel().deserialize(data[i]);
})
});
}
}

View file

@ -0,0 +1,144 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://atlasconfig.tbsliver.me/schemas/island.schema.json",
"title": "Islands",
"description": "Base Island data for the Atlas Config",
"type": "object",
"patternProperties": {
"^(Mnt|Isl|Cay)_[A-Z]{1,2}_[A-Z]{1,2}(_[A-Z]{1,2})?$": {
"properties": {
"name": {
"type": "string",
"pattern": "^(Mnt|Isl|Cay)_[A-Z]{1,2}_[A-Z]{1,2}(_[A-Z]{1,2})?$"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"imagePath": {
"type": "string"
},
"landscapeMaterialOverride": {
"type": "integer"
},
"sublevelNames": {
"$ref": "#stringArray"
},
"discoveryVolumeNames": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"size": {
"type": "object",
"properties": {
"sizeX": {
"type": "number"
},
"sizeY": {
"type": "number"
},
"sizeZ": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"sizeX",
"sizeY",
"sizeZ"
]
}
}
}
},
"spawnerOverrides": {
"type": "object",
"patternProperties": {
"^.*$": {
"type": "string"
}
}
},
"extraSublevels": {
"$ref": "#stringArray"
},
"treasureMapSpawnPoints": {
"$ref": "#stringArray"
},
"wildPirateCampSpawnPoints": {
"$ref": "#stringArray"
},
"minTreasureQuality": {
"type": "number"
},
"maxTreasureQuality": {
"type": "number"
},
"useNpcVolumesForTreasures": {
"type": "boolean"
},
"useLevelBoundsForTreasures": {
"type": "boolean"
},
"prioritizeVolumesForTreasures": {
"type": "boolean"
},
"islandTreasureBottleSupplyCrateOverrides": {
"type": "string"
},
"islandPoints": {
"type": "integer"
},
"singleSpawnPointX": {
"type": "number"
},
"singleSpawnPointY": {
"type": "number"
},
"singleSpawnPointZ": {
"type": "number"
}
},
"required": [
"name",
"x",
"y",
"imagePath",
"landscapeMaterialOverride",
"sublevelNames",
"discoveryVolumeNames",
"spawnerOverrides",
"extraSublevels",
"treasureMapSpawnPoints",
"wildPirateCampSpawnPoints",
"minTreasureQuality",
"maxTreasureQuality",
"useLevelBoundsForTreasures",
"useNpcVolumesForTreasures",
"prioritizeVolumesForTreasures",
"islandPoints",
"islandTreasureBottleSupplyCrateOverrides",
"singleSpawnPointX",
"singleSpawnPointY",
"singleSpawnPointZ"
],
"type": "object"
}
},
"additionalProperties": false,
"definitions": {
"stringArray": {
"$id": "#stringArray",
"type": "array",
"items": {
"type": "string"
}
}
}
}

View file

@ -0,0 +1,6 @@
{
"beaches": {
"NPCSpawnEntries": "",
"NPCSpawnLimits": ""
}
}