Atlas-Config-Generator/index.html

1304 lines
82 KiB
HTML

<!doctype html>
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
crossorigin="anonymous">
<link rel="stylesheet"
href="css/main.css">
</head>
<body>
<nav class="navbar bg-light">
<a class="navbar-brand" href="#">Atlas Config Generator</a>
</nav>
<div class="container-fluid">
<div class="nav nav-tabs">
<a id="nav-config" class="nav-item nav-link active" data-toggle="tab" href="#tab-config">Config</a>
<a id="nav-basic" class="nav-item nav-link" data-toggle="tab" href="#tab-basic">Basic Options</a>
<a id="nav-tribe-log" class="nav-item nav-link" data-toggle="tab" href="#tab-tribe-log">Tribe Log</a>
<a id="nav-travel-data" class="nav-item nav-link" data-toggle="tab" href="#tab-travel-data">Travel Data</a>
<a id="nav-shared-log" class="nav-item nav-link" data-toggle="tab" href="#tab-shared-log">Shared Log</a>
<a id="nav-databases" class="nav-item nav-link" data-toggle="tab" href="#tab-databases">Databases</a>
<a id="nav-servers" class="nav-item nav-link" data-toggle="tab" href="#tab-servers">Servers</a>
<a id="nav-spawners" class="nav-item nav-link" data-toggle="tab" href="#tab-spawners">Spawners</a>
<a id="nav-ships" class="nav-item nav-link" data-toggle="tab" href="#tab-ships">Ships</a>
</div>
<div class="tab-content" id="tab-content">
<div class="tab-pane fade show active" id="tab-config">
<span>Paste your server config in here then click Editor to Config, or use tabs to modify settings and click Config to Editor!</span>
<button class="btn btn-primary" data-bind="click: editorToConfig">Editor to Config</button>
<button class="btn btn-primary" data-bind="click: configToEditor">Config to Editor</button>
<div id="config-editor"></div>
<span>Note, coordsScaling may need modifying from scientific notation to a number - Javascript Limitation...</span>
</div>
<div class="tab-pane fade" id="tab-basic">
<form>
<fieldset>
<legend>Server Arguments</legend>
<div class="form-group row">
<label for="BaseServerArgs" class="col-sm-2 col-form-label">Base Server Args</label>
<div class="col-sm-10">
<textarea id="BaseServerArgs" data-bind="value: BaseServerArgs" rows="3"
class="form-control"></textarea>
</div>
</div>
<div class="form-group row">
<label for="AdditionalCmdLineParams" class="col-sm-2 col-form-label">Additional CLI
Params</label>
<div class="col-sm-10">
<textarea id="AdditionalCmdLineParams" data-bind="value: AdditionalCmdLineParams" rows="3"
class="form-control"></textarea>
</div>
</div>
</fieldset>
<fieldset>
<legend>World Options</legend>
<div class="form-group row">
<label for="WorldFriendlyName" class="col-sm-2 col-form-label">Friendly Name</label>
<div class="col-sm-10">
<input id="WorldFriendlyName" data-bind="value: WorldFriendlyName" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="WorldAtlasId" class="col-sm-2 col-form-label">Atlas ID</label>
<div class="col-sm-10">
<input id="WorldAtlasId" data-bind="value: WorldAtlasId" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="WorldAtlasPassword" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input id="WorldAtlasPassword" data-bind="value: WorldAtlasPassword" type="text"
class="form-control">
</div>
</div>
</fieldset>
<fieldset>
<legend>Grid Options</legend>
<div class="form-group row">
<label for="gridSize" class="col-sm-2 col-form-label">Grid Size</label>
<div class="col-sm-10">
<input id="gridSize" data-bind="numericValue: gridSize" type="number" step="0.1"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="coordsScaling" class="col-sm-2 col-form-label">Coords Scaling</label>
<div class="col-sm-10">
<input id="coordsScaling" data-bind="numericValue: coordsScaling" type="number"
step="0.000000000001" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="totalGridsX" class="col-sm-2 col-form-label">No. Grids X</label>
<div class="col-sm-10">
<input id="totalGridsX" data-bind="numericValue: totalGridsX" type="number"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="totalGridsY" class="col-sm-2 col-form-label">No. Grids Y</label>
<div class="col-sm-10">
<input id="totalGridsY" data-bind="numericValue: totalGridsY" type="number"
class="form-control">
</div>
</div>
</fieldset>
<fieldset>
<legend>Image Paths</legend>
<div class="form-group row">
<label for="backgroundImgPath" class="col-sm-2 col-form-label">Background Image</label>
<div class="col-sm-10">
<input id="backgroundImgPath" data-bind="value: backgroundImgPath" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="discoZonesImagePath" class="col-sm-2 col-form-label">Discovery Zones Image</label>
<div class="col-sm-10">
<input id="discoZonesImagePath" data-bind="value: discoZonesImagePath" type="text"
class="form-control">
</div>
</div>
</fieldset>
<fieldset>
<legend>URL Options</legend>
<div class="form-group row">
<label for="MetaWorldURL" class="col-sm-2 col-form-label">Meta World URL</label>
<div class="col-sm-10">
<input id="MetaWorldURL" data-bind="value: MetaWorldURL" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="AuthListURL" class="col-sm-2 col-form-label">Auth List URL</label>
<div class="col-sm-10">
<input id="AuthListURL" data-bind="value: AuthListURL" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="MapImageURL" class="col-sm-2 col-form-label">Map Image URL</label>
<div class="col-sm-10">
<input id="MapImageURL" data-bind="value: MapImageURL" type="text" class="form-control">
</div>
</div>
</fieldset>
<fieldset>
<legend>Time Options</legend>
<div class="form-group row">
<label for="Day0" class="col-sm-2 col-form-label">Day Zero</label>
<div class="col-sm-10">
<input id="Day0" data-bind="value: Day0" type="text" class="form-control">
<small class="text-muted">Format: YYYY-mm-DD HH:MM:SS</small>
</div>
</div>
<div class="form-group row">
<label for="bUseUTCTime" class="col-sm-2 col-form-label">Use UTC Time</label>
<div class="col-sm-10">
<input id="bUseUTCTime" data-bind="checked: bUseUTCTime" type="checkbox"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="columnUTCOffset" class="col-sm-2 col-form-label">UTC Offset</label>
<div class="col-sm-10">
<input id="columnUTCOffset" data-bind="numericValue: columnUTCOffset" type="number"
step="0.1" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="lastImageOverride" class="col-sm-2 col-form-label">Day Zero</label>
<div class="col-sm-10">
<input id="lastImageOverride" data-bind="value: lastImageOverride" type="text"
class="form-control">
<small class="text-muted">Format: YYYY-mm-DDTHH:MM:SS - Note different to Day Zero!</small>
</div>
</div>
</fieldset>
<fieldset>
<legend>Info Options</legend>
<div class="form-group row">
<label for="showServerInfo" class="col-sm-2 col-form-label">Show Server Info</label>
<div class="col-sm-10">
<input id="showServerInfo" data-bind="checked: showServerInfo" type="checkbox"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="showDiscoZoneInfo" class="col-sm-2 col-form-label">Show Discovery Zone Info</label>
<div class="col-sm-10">
<input id="showDiscoZoneInfo" data-bind="checked: showDiscoZoneInfo" type="checkbox"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="showShipPathsInfo" class="col-sm-2 col-form-label">Show Ship Path Info</label>
<div class="col-sm-10">
<input id="showShipPathsInfo" data-bind="checked: showShipPathsInfo" type="checkbox"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="showIslandNames" class="col-sm-2 col-form-label">Show Island Names</label>
<div class="col-sm-10">
<input id="showIslandNames" data-bind="checked: showIslandNames" type="checkbox"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="showLines" class="col-sm-2 col-form-label">Show Lines</label>
<div class="col-sm-10">
<input id="showLines" data-bind="checked: showLines" type="checkbox" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="showBackground" class="col-sm-2 col-form-label">Show Background</label>
<div class="col-sm-10">
<input id="showBackground" data-bind="checked: showBackground" type="checkbox"
class="form-control">
</div>
</div>
</fieldset>
<fieldset>
<legend>S3 Options</legend>
<div class="form-group row">
<label for="LocalS3URL" class="col-sm-2 col-form-label">URL</label>
<div class="col-sm-10">
<input id="LocalS3URL" data-bind="value: LocalS3URL" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="LocalS3AccessKeyId" class="col-sm-2 col-form-label">Access Key ID</label>
<div class="col-sm-10">
<input id="LocalS3AccessKeyId" data-bind="value: LocalS3AccessKeyId" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="LocalS3SecretKey" class="col-sm-2 col-form-label">Secret Key</label>
<div class="col-sm-10">
<input id="LocalS3SecretKey" data-bind="value: LocalS3SecretKey" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="LocalS3BucketName" class="col-sm-2 col-form-label">Bucket Name</label>
<div class="col-sm-10">
<input id="LocalS3BucketName" data-bind="value: LocalS3BucketName" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="LocalS3Region" class="col-sm-2 col-form-label">Region</label>
<div class="col-sm-10">
<input id="LocalS3Region" data-bind="value: LocalS3Region" type="text" class="form-control">
</div>
</div>
</fieldset>
<fieldset>
<legend>Misc Options</legend>
<div class="form-group row">
<label for="globalGameplaySetup" class="col-sm-2 col-form-label">Gameplay Setup</label>
<div class="col-sm-10">
<input id="globalGameplaySetup" data-bind="value: globalGameplaySetup" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="shipPathsIdGenerator" class="col-sm-2 col-form-label">Ship Paths ID
Generator</label>
<div class="col-sm-10">
<input id="shipPathsIdGenerator" data-bind="numericValue: shipPathsIdGenerator"
type="number" step="1" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="idGenerator" class="col-sm-2 col-form-label">ID Generator</label>
<div class="col-sm-10">
<input id="idGenerator" data-bind="numericValue: idGenerator" type="number" step="1"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="regionsIdGenerator" class="col-sm-2 col-form-label">Regions ID Generator</label>
<div class="col-sm-10">
<input id="regionsIdGenerator" data-bind="numericValue: regionsIdGenerator" type="number"
step="1" class="form-control">
</div>
</div>
</fieldset>
</form>
</div>
<div class="tab-pane fade" id="tab-tribe-log">
<form data-bind="with: TribeLogConfig">
<fieldset>
<legend>Main Options</legend>
<div class="form-group row">
<label for="Tribe-MaxRedisEntries" class="col-sm-2 col-form-label">Max Redis Entries</label>
<div class="col-sm-10">
<input id="Tribe-MaxRedisEntries" data-bind="numericValue: $data.MaxRedisEntries"
type="number" step="1" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Tribe-BackupMode" class="col-sm-2 col-form-label">Backup Mode</label>
<div class="col-sm-10">
<select id="Tribe-BackupMode" data-bind="options: ['off', 'on'], value: $data.BackupMode"
class="form-control"></select>
</div>
</div>
<div class="form-group row">
<label for="Tribe-MaxFileHistory" class="col-sm-2 col-form-label">Max File History</label>
<div class="col-sm-10">
<input id="Tribe-MaxFileHistory" data-bind="numericValue: $data.MaxFileHistory"
type="number" step="1" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Tribe-HttpBackupURL" class="col-sm-2 col-form-label">Backup URL</label>
<div class="col-sm-10">
<input id="Tribe-HttpBackupURL" data-bind="value: $data.HttpBackupURL" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Tribe-HttpAPIKey" class="col-sm-2 col-form-label">API Key</label>
<div class="col-sm-10">
<input id="Tribe-HttpAPIKey" data-bind="value: $data.HttpAPIKey" type="text"
class="form-control">
</div>
</div>
</fieldset>
<fieldset>
<legend>S3 Options</legend>
<div class="form-group row">
<label for="Tribe-S3URL" class="col-sm-2 col-form-label">URL</label>
<div class="col-sm-10">
<input id="Tribe-S3URL" data-bind="value: $data.S3URL" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Tribe-S3AccessKeyId" class="col-sm-2 col-form-label">Access Key ID</label>
<div class="col-sm-10">
<input id="Tribe-S3AccessKeyId" data-bind="value: $data.S3AccessKeyId" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Tribe-S3SecretKey" class="col-sm-2 col-form-label">Secret Key</label>
<div class="col-sm-10">
<input id="Tribe-S3SecretKey" data-bind="value: $data.S3SecretKey" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Tribe-S3BucketName" class="col-sm-2 col-form-label">Bucket Name</label>
<div class="col-sm-10">
<input id="Tribe-S3BucketName" data-bind="value: $data.S3BucketName" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Tribe-S3KeyPrefix" class="col-sm-2 col-form-label">Key Prefix</label>
<div class="col-sm-10">
<input id="Tribe-S3KeyPrefix" data-bind="value: $data.S3KeyPrefix" type="text"
class="form-control">
</div>
</div>
</fieldset>
</form>
</div>
<div class="tab-pane fade" id="tab-travel-data">
<form data-bind="with: TravelDataConfig">
<fieldset>
<legend>Main Options</legend>
<div class="form-group row">
<label for="Travel-BackupMode" class="col-sm-2 col-form-label">Backup Mode</label>
<div class="col-sm-10">
<select id="Travel-BackupMode" data-bind="options: ['off', 'on'], value: $data.BackupMode"
class="form-control"></select>
</div>
</div>
<div class="form-group row">
<label for="Travel-MaxFileHistory" class="col-sm-2 col-form-label">Max File History</label>
<div class="col-sm-10">
<input id="Travel-MaxFileHistory" data-bind="numericValue: $data.MaxFileHistory"
type="number" step="1" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Travel-HttpBackupURL" class="col-sm-2 col-form-label">Backup URL</label>
<div class="col-sm-10">
<input id="Travel-HttpBackupURL" data-bind="value: $data.HttpBackupURL" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Travel-HttpAPIKey" class="col-sm-2 col-form-label">API Key</label>
<div class="col-sm-10">
<input id="Travel-HttpAPIKey" data-bind="value: $data.HttpAPIKey" type="text"
class="form-control">
</div>
</div>
</fieldset>
<fieldset>
<legend>S3 Options</legend>
<div class="form-group row">
<label for="Travel-S3URL" class="col-sm-2 col-form-label">URL</label>
<div class="col-sm-10">
<input id="Travel-S3URL" data-bind="value: $data.S3URL" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Travel-S3AccessKeyId" class="col-sm-2 col-form-label">Access Key ID</label>
<div class="col-sm-10">
<input id="Travel-S3AccessKeyId" data-bind="value: $data.S3AccessKeyId" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Travel-S3SecretKey" class="col-sm-2 col-form-label">Secret Key</label>
<div class="col-sm-10">
<input id="Travel-S3SecretKey" data-bind="value: $data.S3SecretKey" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Travel-S3BucketName" class="col-sm-2 col-form-label">Bucket Name</label>
<div class="col-sm-10">
<input id="Travel-S3BucketName" data-bind="value: $data.S3BucketName" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Travel-S3KeyPrefix" class="col-sm-2 col-form-label">Key Prefix</label>
<div class="col-sm-10">
<input id="Travel-S3KeyPrefix" data-bind="value: $data.S3KeyPrefix" type="text"
class="form-control">
</div>
</div>
</fieldset>
</form>
</div>
<div class="tab-pane fade" id="tab-shared-log">
<form data-bind="with: SharedLogConfig">
<fieldset>
<legend>Main Options</legend>
<div class="form-group row">
<label for="Shared-FetchRateSec" class="col-sm-2 col-form-label">Fetch Rate (Seconds)</label>
<div class="col-sm-10">
<input id="Shared-FetchRateSec" data-bind="numericValue: $data.FetchRateSec" type="number"
step="1" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Shared-SnapshotCleanupSec" class="col-sm-2 col-form-label">Snapshot Cleanup
(Seconds)</label>
<div class="col-sm-10">
<input id="Shared-SnapshotCleanupSec" data-bind="numericValue: $data.SnapshotCleanupSec"
type="number" step="1" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Shared-SnapshotRateSec" class="col-sm-2 col-form-label">Snapshot Rate
(Seconds)</label>
<div class="col-sm-10">
<input id="Shared-SnapshotRateSec" data-bind="numericValue: $data.SnapshotRateSec"
type="number" step="1" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Shared-SnapshotExpirationHours" class="col-sm-2 col-form-label">Snapshot Expiration
(Hours)</label>
<div class="col-sm-10">
<input id="Shared-SnapshotExpirationHours"
data-bind="numericValue: $data.SnapshotExpirationHours" type="number" step="1"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Shared-BackupMode" class="col-sm-2 col-form-label">Backup Mode</label>
<div class="col-sm-10">
<select id="Shared-BackupMode" data-bind="options: ['off', 'on'], value: $data.BackupMode"
class="form-control"></select>
</div>
</div>
<div class="form-group row">
<label for="Shared-MaxFileHistory" class="col-sm-2 col-form-label">Max File History</label>
<div class="col-sm-10">
<input id="Shared-MaxFileHistory" data-bind="numericValue: $data.MaxFileHistory"
type="number" step="1" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Shared-HttpBackupURL" class="col-sm-2 col-form-label">Backup URL</label>
<div class="col-sm-10">
<input id="Shared-HttpBackupURL" data-bind="value: $data.HttpBackupURL" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Shared-HttpAPIKey" class="col-sm-2 col-form-label">API Key</label>
<div class="col-sm-10">
<input id="Shared-HttpAPIKey" data-bind="value: $data.HttpAPIKey" type="text"
class="form-control">
</div>
</div>
</fieldset>
<fieldset>
<legend>S3 Options</legend>
<div class="form-group row">
<label for="Shared-S3URL" class="col-sm-2 col-form-label">URL</label>
<div class="col-sm-10">
<input id="Shared-S3URL" data-bind="value: $data.S3URL" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Shared-S3AccessKeyId" class="col-sm-2 col-form-label">Access Key ID</label>
<div class="col-sm-10">
<input id="Shared-S3AccessKeyId" data-bind="value: $data.S3AccessKeyId" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Shared-S3SecretKey" class="col-sm-2 col-form-label">Secret Key</label>
<div class="col-sm-10">
<input id="Shared-S3SecretKey" data-bind="value: $data.S3SecretKey" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Shared-S3BucketName" class="col-sm-2 col-form-label">Bucket Name</label>
<div class="col-sm-10">
<input id="Shared-S3BucketName" data-bind="value: $data.S3BucketName" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label for="Shared-S3KeyPrefix" class="col-sm-2 col-form-label">Key Prefix</label>
<div class="col-sm-10">
<input id="Shared-S3KeyPrefix" data-bind="value: $data.S3KeyPrefix" type="text"
class="form-control">
</div>
</div>
</fieldset>
</form>
</div>
<div class="tab-pane fade" id="tab-databases">
<button class="btn btn-primary" data-bind="click: addDatabase">Add Database</button>
<!-- ko foreach: DatabaseConnections -->
<form>
<fieldset>
<legend>DB Connection: <span data-bind="text: $data.Name"></span>
<button class="btn btn-danger pull-right" data-bind="click: removeDatabase">Remove Database
</button>
</legend>
<div class="form-group row">
<label data-bind="attr: { for: $index() + '-DB-Name' }"
class="col-sm-2 col-form-label">Name</label>
<div class="col-sm-10">
<input data-bind="attr: { id: $index() + '-DB-Name' }, value: $data.Name" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: $index() + '-DB-URL' }"
class="col-sm-2 col-form-label">URL</label>
<div class="col-sm-10">
<input data-bind="attr: { id: $index() + '-DB-URL' }, value: $data.URL" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: $index() + '-DB-Port' }"
class="col-sm-2 col-form-label">Port</label>
<div class="col-sm-10">
<input data-bind="attr: { id: $index() + '-DB-Port' }, numericValue: $data.Port" type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: $index() + '-DB-Password' }" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input data-bind="attr: { id: $index() + '-DB-Password' }, value: $data.Password"
type="text" class="form-control">
</div>
</div>
</fieldset>
</form>
<!-- /ko -->
</div>
<div class="tab-pane fade" id="tab-servers">
<button class="btn btn-primary" data-bind="click: addServer">Add Server</button>
<div class="row" data-bind="foreach: servers">
<div class="col-3 m-1">
<a class="btn btn-success" data-bind="attr: { href: '#server-tab-' + $index() }">
<span data-bind="text: $data.name "></span> - (<span data-bind="text: $data.gridX "></span>,
<span data-bind="text: $data.gridY "></span>)
</a>
</div>
</div>
<!-- ko foreach: servers -->
<div class="row">
<div class="col">
<hr>
<a data-bind="attr: { id: 'server-tab-' + $index() }"><h2><span
data-bind="text: $data.name "></span> - (<span data-bind="text: $data.gridX "></span>,
<span data-bind="text: $data.gridY "></span>)</h2></a>
<button class="btn btn-danger" data-bind="click: removeServer">Remove Server</button>
<form>
<div class="row">
<fieldset class="col-6">
<legend>Basic Data</legend>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-name-' + $index() }"
class="col-sm-2 col-form-label">Name</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-name-' + $index() }, value: $data.name"
type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-serverTemplateName-' + $index() }"
class="col-sm-2 col-form-label">Template Name</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-serverTemplateName-' + $index() }, value: $data.serverTemplateName"
type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-ip-' + $index() }"
class="col-sm-2 col-form-label">IP</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-ip-' + $index() }, value: $data.ip"
type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-port-' + $index() }"
class="col-sm-2 col-form-label">Port</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-port-' + $index() }, numericValue: $data.port"
type="number"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-gamePort-' + $index() }"
class="col-sm-2 col-form-label">Game Port</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-gamePort-' + $index() }, numericValue: $data.gamePort"
type="number"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-seamlessDataPort-' + $index() }"
class="col-sm-2 col-form-label">Seamless Data Port</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-seamlessDataPort-' + $index() }, numericValue: $data.seamlessDataPort"
type="number"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-gridX-' + $index() }"
class="col-sm-2 col-form-label">Grid X</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-gridX-' + $index() }, numericValue: $data.gridX"
type="number"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-gridY-' + $index() }"
class="col-sm-2 col-form-label">Grid Y</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-gridY-' + $index() }, numericValue: $data.gridY"
type="number"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-MachineIdTag-' + $index() }"
class="col-sm-2 col-form-label">Machine ID Tag</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-MachineIdTag-' + $index() }, value: $data.MachineIdTag"
type="text"
class="form-control">
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-isHomeServer-' + $index() }"
class="col-sm-2 col-form-label">Is Home Server</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-isHomeServer-' + $index() }, checked: $data.isHomeServer"
type="checkbox"
class="form-control">
</div>
</div>
<!-- ko template: { name: 'textInputTemplate', data: {
id: 'Server-AdditionalCmdLineParams-' + $index(),
value: $data.AdditionalCmdLineParams,
key: 'AdditionalCmdLineParams',
label: 'CLI Params'
} } --><!-- /ko -->
</fieldset>
<div class="col-6">
<fieldset>
<legend>Biome Options</legend>
<!-- ko template: { name: 'deparseInputTemplate', data: {
id: 'Server-GlobalBiomeSeamlessServerGridPreOffsetValues-' + $index(),
value: $data.GlobalBiomeSeamlessServerGridPreOffsetValues,
key: 'GlobalBiomeSeamlessServerGridPreOffsetValues',
label: 'Land Values'
} } --><!-- /ko -->
<!-- ko template: { name: 'deparseInputTemplate', data: {
id: 'Server-GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater-' + $index(),
value: $data.GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater,
key: 'GlobalBiomeSeamlessServerGridPreOffsetValuesOceanWater',
label: 'Water Values'
} } --><!-- /ko -->
</fieldset>
<fieldset>
<legend>Override Options</legend>
<!-- ko template: { name: 'textInputTemplate', data: {
id: 'Server-OceanDinoDepthEntriesOverride-' + $index(),
value: $data.OceanDinoDepthEntriesOverride,
key: 'OceanDinoDepthEntriesOverride',
label: 'Dino Depth Entries'
} } --><!-- /ko -->
<!-- ko template: { name: 'deparseInputTemplate', data: {
id: 'Server-OceanEpicSpawnEntriesOverrideValues-' + $index(),
value: $data.OceanEpicSpawnEntriesOverrideValues,
key: 'OceanEpicSpawnEntriesOverrideValues',
label: 'Epic Spawn Values'
} } --><!-- /ko -->
<!-- ko template: { name: 'textInputTemplate', data: {
id: 'Server-oceanFloatsamCratesOverride-' + $index(),
value: $data.oceanFloatsamCratesOverride,
key: 'oceanFloatsamCratesOverride',
label: 'Floatsam Crates'
} } --><!-- /ko -->
<!-- ko template: { name: 'textInputTemplate', data: {
id: 'Server-treasureMapLootTablesOverride-' + $index(),
value: $data.treasureMapLootTablesOverride,
key: 'treasureMapLootTablesOverride',
label: 'Map Loot Tables'
} } --><!-- /ko -->
<!-- ko template: { name: 'textInputTemplate', data: {
id: 'Server-oceanEpicSpawnEntriesOverrideTemplateName-' + $index(),
value: $data.oceanEpicSpawnEntriesOverrideTemplateName,
key: 'oceanEpicSpawnEntriesOverrideTemplateName',
label: 'Epic Spawn Template'
} } --><!-- /ko -->
<!-- ko template: { name: 'textInputTemplate', data: {
id: 'Server-NPCShipSpawnEntriesOverrideTemplateName-' + $index(),
value: $data.NPCShipSpawnEntriesOverrideTemplateName,
key: 'NPCShipSpawnEntriesOverrideTemplateName',
label: 'Ship Spawn Template'
} } --><!-- /ko -->
<!-- ko template: { name: 'textInputTemplate', data: {
id: 'Server-RegionOverrides-' + $index(),
value: $data.regionOverrides,
key: 'regionOverrides',
label: 'Region'
} } --><!-- /ko -->
</fieldset>
</div>
<fieldset class="col-6">
<legend>Style Options</legend>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-waterColorR-' + $index() }"
class="col-sm-2 col-form-label">Water Colour Red</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-waterColorR-' + $index() }, numericValue: $data.waterColorR"
type="number" step="0.1"
class="form-control">
<small class="form-text text-muted">waterColorR</small>
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-waterColorG-' + $index() }"
class="col-sm-2 col-form-label">Water Colour Green</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-waterColorG-' + $index() }, numericValue: $data.waterColorG"
type="number" step="0.1"
class="form-control">
<small class="form-text text-muted">waterColorG</small>
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-waterColorB-' + $index() }"
class="col-sm-2 col-form-label">Water Colour Blue</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-waterColorB-' + $index() }, numericValue: $data.waterColorB"
type="number" step="0.1"
class="form-control">
<small class="form-text text-muted">waterColorB</small>
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-skyStyleIndex-' + $index() }"
class="col-sm-2 col-form-label">Sky Style</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-skyStyleIndex-' + $index() }, numericValue: $data.skyStyleIndex"
type="number" step="1"
class="form-control">
<small class="form-text text-muted">skyStyleIndex</small>
</div>
</div>
</fieldset>
<fieldset class="col-6">
<legend>Misc Options</legend>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-floorZDist-' + $index() }"
class="col-sm-2 col-form-label">Floor Z Distance</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-floorZDist-' + $index() }, numericValue: $data.floorZDist"
type="number" step="1"
class="form-control">
<small class="form-text text-muted">floorZDist</small>
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-utcOffset-' + $index() }"
class="col-sm-2 col-form-label">UTC Offset</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-utcOffset-' + $index() }, numericValue: $data.utcOffset"
type="number" step="1"
class="form-control">
<small class="form-text text-muted">utcOffset</small>
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-transitionMinZ-' + $index() }"
class="col-sm-2 col-form-label">Min Z Transition</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-transitionMinZ-' + $index() }, numericValue: $data.transitionMinZ"
type="number" step="1"
class="form-control">
<small class="form-text text-muted">transitionMinZ</small>
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-serverIslandPointsMultiplier-' + $index() }"
class="col-sm-2 col-form-label">Point Multiplier</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-serverIslandPointsMultiplier-' + $index() }, numericValue: $data.serverIslandPointsMultiplier"
type="number" step="0.1"
class="form-control">
<small class="form-text text-muted">serverIslandPointsMultiplier</small>
</div>
</div>
</fieldset>
<fieldset class="col-6">
<legend>Date Options</legend>
<!-- ko template: { name: 'textInputTemplate', data: {
id: 'Server-lastModified-' + $index(),
value: $data.lastModified,
key: 'lastModified',
label: 'Last Modified'
} } --><!-- /ko -->
<!-- ko template: { name: 'textInputTemplate', data: {
id: 'Server-lastImageOverride-' + $index(),
value: $data.lastImageOverride,
key: 'lastImageOverride',
label: 'Last Image'
} } --><!-- /ko -->
</fieldset>
<fieldset class="col-6">
<legend>Boolean Options</legend>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-islandLocked-' + $index() }"
class="col-sm-2 col-form-label">Island Locked</label>
<div class="col-sm-2">
<input data-bind="attr: { id: 'Server-islandLocked-' + $index() }, checked: $data.islandLocked"
type="checkbox"
class="form-control">
</div>
<div class="col-sm-8">
<small class="form-text text-muted">islandLocked</small>
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-discoLocked-' + $index() }"
class="col-sm-2 col-form-label">Discovery Locked</label>
<div class="col-sm-2">
<input data-bind="attr: { id: 'Server-discoLocked-' + $index() }, checked: $data.discoLocked"
type="checkbox"
class="form-control">
</div>
<div class="col-sm-8">
<small class="form-text text-muted">discoLocked</small>
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Server-pathsLocked-' + $index() }"
class="col-sm-2 col-form-label">Paths Locked</label>
<div class="col-sm-2">
<input data-bind="attr: { id: 'Server-pathsLocked-' + $index() }, checked: $data.pathsLocked"
type="checkbox"
class="form-control">
</div>
<div class="col-sm-8">
<small class="form-text text-muted">pathsLocked</small>
</div>
</div>
</fieldset>
<fieldset class="col-12">
<legend>Sub Levels</legend>
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>X</th>
<th>Y</th>
<th>Z</th>
<th>Pitch</th>
<th>Yaw</th>
<th>Roll</th>
<th>Override</th>
<th><button class="btn btn-primary" data-bind="click: addServerSubLevel">&plus;</button></th>
</tr>
</thead>
<tbody data-bind="foreach: sublevels">
<tr>
<td><input class="form-control" type="number" data-bind="numericValue: $data.id"></td>
<td><input class="form-control" type="text" data-bind="value: $data.name"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.additionalTranslationX"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.additionalTranslationY"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.additionalTranslationZ"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.additionalRotationPitch"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.additionalRotationYaw"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.additionalRotationRoll"></td>
<td><input class="form-control" type="number" data-bind="numericValue: $data.landscapeMaterialOverride"></td>
<td><button class="btn btn-primary" data-bind="click: removeServerSubLevel">&minus;</button></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset class="col-12">
<legend>Islands</legend>
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Spawner Overrides</th>
<th>Min Treasure Quality</th>
<th>Max Treasure Quality</th>
<th>NPC Volumes for Treasure</th>
<th>Level Bounds for Treasure</th>
<th>Prioritise Volumes for Treasures</th>
<th>Points</th>
<th>Bottle Supply Override</th>
<th>Width</th>
<th>Height</th>
<th>X</th>
<th>Y</th>
<th>Rotation</th>
<th><button class="btn btn-primary" data-bind="click: addServerIslandInstance">&plus;</button></th>
</tr>
</thead>
<tbody data-bind="foreach: islandInstances">
<tr>
<td><input class="form-control" type="number" data-bind="numericValue: $data.id"></td>
<td><input class="form-control" type="text" data-bind="value: $data.name"></td>
<td><i>TODO</i></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.minTreasureQuality"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.maxTreasureQuality"></td>
<td><input class="form-control" type="checkbox" data-bind="checked: $data.useNpcVolumesForTreasures"></td>
<td><input class="form-control" type="checkbox" data-bind="checked: $data.useLevelBoundsForTreasures"></td>
<td><input class="form-control" type="checkbox" data-bind="checked: $data.prioritizeVolumesForTreasures"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.islandPoints"></td>
<td><input class="form-control" type="text" data-bind="value: $data.islandTreasureBottleSupplyCrateOverrides"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.islandWidth"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.islandHeight"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.worldX"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.worldY"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.rotation"></td>
<td><button class="btn btn-primary" data-bind="click: removeServerIslandInstance">&minus;</button></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset class="col-12">
<legend>Discovery Zones</legend>
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Size X</th>
<th>Size Y</th>
<th>Size Z</th>
<th>XP</th>
<th>Manually Placed</th>
<th>Explorer Note Index</th>
<th>Allow Sea</th>
<th>World X</th>
<th>World Y</th>
<th>Rotation</th>
<th><button class="btn btn-primary" data-bind="click: addServerDiscoveryZone">&plus;</button></th>
</tr>
</thead>
<tbody data-bind="foreach: discoZones">
<tr>
<td><input class="form-control" type="number" data-bind="numericValue: $data.id"></td>
<td><input class="form-control" type="text" data-bind="value: $data.name"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.sizeX"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.sizeY"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.sizeZ"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.xp"></td>
<td><input class="form-control" type="checkbox" data-bind="checked: $data.bIsManuallyPlaced"></td>
<td><input class="form-control" type="number" data-bind="numericValue: $data.explorerNoteIndex"></td>
<td><input class="form-control" type="checkbox" data-bind="checked: $data.allowSea"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.worldX"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.worldY"></td>
<td><input class="form-control" type="number" step="0.001" data-bind="numericValue: $data.rotation"></td>
<td><button class="btn btn-primary" data-bind="click: removeServerDiscoveryZone">&minus;</button></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset class="col-6">
<legend>Spawn Regions</legend>
<table class="table table-striped">
<thead>
<tr>
<th>Name</th>
<th><button class="btn btn-primary" data-bind="click: addServerSpawnRegion">&plus;</button></th>
</tr>
</thead>
<tbody data-bind="foreach: spawnRegions">
<tr>
<td><input class="form-control" type="text" data-bind="value: $data.name"></td>
<td><button class="btn btn-primary" data-bind="click: removeServerSpawnRegion">&minus;</button></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset class="col-6">
<legend>Extra Sublevels</legend>
<table class="table table-striped">
<thead>
<tr>
<th>Name</th>
<th><button class="btn btn-primary" data-bind="click: addExtraSubLevels">&plus;</button></th>
</tr>
</thead>
<tbody data-bind="foreach: extraSublevels">
<tr>
<td><input class="form-control" type="text" data-bind="value: $data"></td>
<td><button class="btn btn-primary" data-bind="click: removeExtraSubLevels">&minus;</button></td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset class="col-6">
<legend>Total Extra Sublevels</legend>
<table class="table table-striped">
<thead>
<tr>
<th>Name</th>
<th><button class="btn btn-primary" data-bind="click: addTotalExtraSubLevels">&plus;</button></th>
</tr>
</thead>
<tbody data-bind="foreach: totalExtraSublevels">
<tr>
<td><input class="form-control" type="text" data-bind="value: $data"></td>
<td><button class="btn btn-primary" data-bind="click: removeTotalExtraSubLevels">&minus;</button></td>
</tr>
</tbody>
</table>
</fieldset>
</div>
</form>
</div>
</div>
<!-- /ko -->
</div>
<div class="tab-pane fade" id="tab-spawners">
<button class="btn btn-primary" data-bind="click: addSpawner">Add Spawner</button>
<!-- ko foreach: spawnerOverrideTemplates -->
<hr>
<form>
<fieldset>
<legend><span data-bind="text: $data.Name"></span>
<button class="btn btn-primary" data-bind="click: removeSpawner">Delete Spawner</button>
</legend>
<!-- ko template: { name: 'textInputTemplate', data: {
id: 'Spawner-Name-' + $index(),
value: $data.Name,
key: 'Name',
label: 'Name'
} } --><!-- /ko -->
<!-- ko template: { name: 'deparseInputTemplate', data: {
id: 'Spawner-NPCSpawnEntries-' + $index(),
value: $data.NPCSpawnEntries,
key: 'NPCSpawnEntries',
label: 'Spawn Entries'
} } --><!-- /ko -->
<!-- ko template: { name: 'deparseInputTemplate', data: {
id: 'Spawner-NPCSpawnLimits-' + $index(),
value: $data.NPCSpawnLimits,
key: 'NPCSpawnLimits',
label: 'Spawn Limits'
} } --><!-- /ko -->
<div class="form-group row">
<label data-bind="attr: { for: 'Server-MaxDesiredNumEnemiesMultiplier-' + $index() }"
class="col-sm-2 col-form-label">Multiplier</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Server-MaxDesiredNumEnemiesMultiplier-' + $index() }, numericValue: $data.MaxDesiredNumEnemiesMultiplier"
type="number" step="0.1"
class="form-control">
<small class="form-text text-muted">MaxDesiredNumEnemiesMultiplier</small>
</div>
</div>
</fieldset>
</form>
<!-- /ko -->
</div>
<div class="tab-pane fade" id="tab-ships">
<button class="btn btn-primary" data-bind="click: addShip">Add Ship</button>
<!-- ko foreach: shipPaths -->
<hr>
<form>
<fieldset>
<legend>
<span data-bind="text: $data.PathName"></span>
<button class="btn btn-warning" data-bind="click: removeShip">Delete Ship</button>
</legend>
<!-- ko template: { name: 'textInputTemplate', data: {
id: 'Ship-PathName-' + $index(),
value: $data.PathName,
key: 'PathName',
label: 'Name'
} } --><!-- /ko -->
<div class="form-group row">
<label data-bind="attr: { for: 'Ship-PathId-' + $index() }"
class="col-sm-2 col-form-label">ID</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Ship-PathId-' + $index() }, numericValue: $data.PathId"
type="number" step="1"
class="form-control">
<small class="form-text text-muted">PathId</small>
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Ship-AutoSpawnEveryUTCInterval-' + $index() }"
class="col-sm-2 col-form-label">Spawn Interval</label>
<div class="col-sm-10">
<input data-bind="attr: { id: 'Ship-AutoSpawnEveryUTCInterval-' + $index() }, numericValue: $data.AutoSpawnEveryUTCInterval"
type="number" step="1"
class="form-control">
<small class="form-text text-muted">AutoSpawnEveryUTCInterval</small>
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Ship-autoSpawn-' + $index() }"
class="col-sm-2 col-form-label">Auto Spawn</label>
<div class="col-sm-2">
<input data-bind="attr: { id: 'Ship-autoSpawn-' + $index() }, checked: $data.autoSpawn"
type="checkbox"
class="form-control">
</div>
<div class="col-sm-8">
<small class="form-text text-muted">autoSpawn</small>
</div>
</div>
<div class="form-group row">
<label data-bind="attr: { for: 'Ship-isLooping-' + $index() }"
class="col-sm-2 col-form-label">Loop</label>
<div class="col-sm-2">
<input data-bind="attr: { id: 'Ship-isLooping-' + $index() }, checked: $data.isLooping"
type="checkbox"
class="form-control">
</div>
<div class="col-sm-8">
<small class="form-text text-muted">isLooping</small>
</div>
</div>
<!-- ko template: { name: 'deparseInputTemplate', data: {
id: 'Ship-AutoSpawnShipClass-' + $index(),
value: $data.AutoSpawnShipClass,
key: 'AutoSpawnShipClass',
label: 'Ship Class'
} } --><!-- /ko -->
<table class="table table-striped">
<thead>
<tr>
<th>Distance</th>
<th>X</th>
<th>Y</th>
<th>Rotation</th>
<th><button class="btn btn-primary" data-bind="click: addShipNode">&plus;</button></th>
</tr>
</thead>
<tbody data-bind="foreach: $data.Nodes">
<tr>
<td><input class="form-control" type="number" step="0.1" data-bind="numericValue: $data.controlPointsDistance"></td>
<td><input class="form-control" type="number" step="0.01" data-bind="numericValue: $data.worldX"></td>
<td><input class="form-control" type="number" step="0.01" data-bind="numericValue: $data.worldY"></td>
<td><input class="form-control" type="number" step="0.00000001" data-bind="numericValue: $data.rotation"></td>
<td><button class="btn btn-warning" data-bind="click: removeShipNode">&minus;</button></td>
</tr>
</tbody>
</table>
</fieldset>
</form>
<!-- /ko -->
</div>
</div>
</div>
<div id="deparse-modal" class="modal">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Deparsed Editor</h5>
<button class="close" data-bind="click: cancelDeparseEdit">&times;</button>
</div>
<div class="modal-body">
<p>JSON! Its all JSON. Only magical ones are the 'BlueprintGeneratedClass' and 'SoundWave' items - these
appear as an array of two items, the 'class' name and the argument for them.</p>
<div id="deparse-editor"></div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-bind="click: cancelDeparseEdit">Close</button>
<button class="btn btn-primary" data-bind="click: saveDeparseEdit">Save</button>
</div>
</div>
</div>
</div>
<script type="text/html" id="textInputTemplate">
<div class="form-group row">
<label data-bind="attr: { for: id }, text: label" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<input data-bind="attr: { id: id }, value: value"
type="text"
class="form-control">
<small class="form-text text-muted" data-bind="text: key"></small>
</div>
</div>
</script>
<script type="text/html" id="deparseInputTemplate">
<div class="form-group row">
<label data-bind="attr: { for: id }, text: label" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<div class="input-group">
<input data-bind="attr: { id: id }, value: value" type="text" class="form-control" disabled>
<div class="input-group-append">
<button class="btn btn-outline-primary" data-bind="click: deparseEdit">
Edit
</button>
</div>
</div>
<small class="form-text text-muted" data-bind="text: key"></small>
</div>
</div>
</script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.5/ace.js"
integrity="sha256-5Xkhn3k/1rbXB+Q/DX/2RuAtaB4dRRyQvMs83prFjpM="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.0/knockout-min.js"
integrity="sha256-Tjl7WVgF1hgGMgUKZZfzmxOrtoSf8qltZ9wMujjGNQk="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"
integrity="sha256-gaGobNk1cPaj0abcVmyZxUYgCPsueCJwN5i4DjC4BS0="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pegjs/0.9.0/peg.js"
integrity="sha256-cwfR02g6XnRmRxZLIwyChnsn4ODrS2uSl6eODJkjrnY="
crossorigin="anonymous"></script>
<script src="js/atlas_reparser.js"></script>
<script src="js/main.js"></script>
</body>
</html>