diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..14d4dab
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "src/assets/server-grid-editor"]
+ path = src/assets/server-grid-editor
+ url = https://github.com/GrapeshotGames/ServerGridEditor.git
diff --git a/.idea/dictionaries/Tom.xml b/.idea/dictionaries/Tom.xml
index 084fc1d..745f7b5 100644
--- a/.idea/dictionaries/Tom.xml
+++ b/.idea/dictionaries/Tom.xml
@@ -4,6 +4,9 @@
deparsegameplaypegjs
+ powerstones
+ sublevel
+ sublevels
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 94a25f7..64afc6a 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,5 +2,6 @@
+
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 6a689a8..e888f96 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1886,8 +1886,7 @@
"@types/geojson": {
"version": "7946.0.7",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz",
- "integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==",
- "dev": true
+ "integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ=="
},
"@types/glob": {
"version": "7.1.1",
@@ -1919,11 +1918,18 @@
"version": "1.5.7",
"resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.5.7.tgz",
"integrity": "sha512-FiPU4NQwH+jQ2wc3IjD7+9hgNZ95m4ry8qILO+eS6L4eUUVSXr+472+k4SRVEW+8j18QwqY7PFqudDQzfpRXTQ==",
- "dev": true,
"requires": {
"@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": {
"version": "3.0.3",
"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",
"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": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz",
diff --git a/package.json b/package.json
index 3e976ba..a606d5d 100644
--- a/package.json
+++ b/package.json
@@ -21,10 +21,12 @@
"@angular/router": "~8.2.11",
"@asymmetrik/ngx-leaflet": "^6.0.1",
"@ng-bootstrap/ng-bootstrap": "^5.1.1",
+ "@types/leaflet-imageoverlay-rotated": "^0.1.4",
"@types/pegjs": "^0.10.1",
"ace-builds": "^1.4.7",
"bootstrap": "^4.3.1",
"leaflet": "^1.6.0",
+ "leaflet-imageoverlay-rotated": "^0.2.1",
"rxjs": "~6.4.0",
"ts-pegjs": "^0.2.6",
"tslib": "^1.10.0",
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index a9042e9..8191716 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -9,6 +9,7 @@ import { ServersComponent } from "./pages/config/servers/servers.component";
import { ServerComponent } from "./pages/config/servers/server/server.component";
import { IslandInstanceComponent } from "./pages/config/servers/island-instance/island-instance.component";
import { MapComponent } from "./pages/config/map/map.component";
+import { DiscoveryZoneComponent } from "./pages/config/servers/discovery-zone/discovery-zone.component";
const routes: Routes = [
@@ -22,6 +23,7 @@ const routes: Routes = [
{path: 'servers', component: ServersComponent},
{path: 'server/:index', component: ServerComponent},
{path: 'server/:index/island/:islandIndex', component: IslandInstanceComponent},
+ {path: 'server/:index/discovery/:discoIndex', component: DiscoveryZoneComponent},
{path: 'map', component: MapComponent}
]
}
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index bdc1989..3d9d4c8 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -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 { LeafletModule } from "@asymmetrik/ngx-leaflet";
import { MapComponent } from './pages/config/map/map.component';
+import { DiscoveryZoneComponent } from './pages/config/servers/discovery-zone/discovery-zone.component';
@NgModule({
declarations: [
@@ -45,7 +46,8 @@ import { MapComponent } from './pages/config/map/map.component';
SelectListComponent,
SelectObjectComponent,
IslandInstanceComponent,
- MapComponent
+ MapComponent,
+ DiscoveryZoneComponent
],
imports: [
BrowserModule,
diff --git a/src/app/models/atlasData/discovery-zone.model.ts b/src/app/models/atlasData/discovery-zone.model.ts
new file mode 100644
index 0000000..dc035be
--- /dev/null
+++ b/src/app/models/atlasData/discovery-zone.model.ts
@@ -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;
+ }
+}
\ No newline at end of file
diff --git a/src/app/models/atlasData/server.model.ts b/src/app/models/atlasData/server.model.ts
index 7d1f701..f0c694a 100644
--- a/src/app/models/atlasData/server.model.ts
+++ b/src/app/models/atlasData/server.model.ts
@@ -1,6 +1,7 @@
import { Deserialize } from "../util/deserialize.model";
import { ServerSublevelModel } from "./serverSublevel.model";
import { IslandInstanceModel } from "./island-instance.model";
+import { DiscoveryZoneModel } from "./discovery-zone.model";
export class ServerModel implements Deserialize {
// General Settings
@@ -46,7 +47,7 @@ export class ServerModel implements Deserialize {
extraSublevels: string[];
totalExtraSublevels: string[];
islandInstances: IslandInstanceModel[];
- discoZones;
+ discoZones: DiscoveryZoneModel[];
spawnRegions;
// Dont render if default/empty
@@ -72,6 +73,7 @@ export class ServerModel implements Deserialize {
Object.assign(this, input);
this.sublevels = this.sublevels.map(i => new ServerSublevelModel().deserialize(i));
this.islandInstances = this.islandInstances.map(i => new IslandInstanceModel().deserialize(i));
+ this.discoZones = this.discoZones.map(i => new DiscoveryZoneModel().deserialize(i));
return this;
}
}
\ No newline at end of file
diff --git a/src/app/pages/config/config.component.html b/src/app/pages/config/config.component.html
index 2f5021a..526c189 100644
--- a/src/app/pages/config/config.component.html
+++ b/src/app/pages/config/config.component.html
@@ -4,6 +4,7 @@
+
\ No newline at end of file
diff --git a/src/app/pages/config/map/map.component.html b/src/app/pages/config/map/map.component.html
index 715a6db..d4e8506 100644
--- a/src/app/pages/config/map/map.component.html
+++ b/src/app/pages/config/map/map.component.html
@@ -1,9 +1,7 @@
-
-
-
-
Zoom: {{ zoom }}
-
Center lat: {{ center.lat }} Center long: {{ center.lng }}
{{ discovery.sizeX }} by {{ discovery.sizeY }} by {{ discovery.sizeZ }}
+
+
+
+
+
+
+
+
Zone Size
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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.
+
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.
+
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.
+
Note as well, the location of a Manual Volume discovery doesnt really matter, however it defaults to
+ the center of the cell.