From c9f355ab425403aa7da3069a520c4304553ec800 Mon Sep 17 00:00:00 2001 From: Abdy Franco Date: Tue, 21 Apr 2026 16:05:52 -0600 Subject: [PATCH 1/4] Add options.json for shipping configurable options Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> --- options.json | 610 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 610 insertions(+) create mode 100644 options.json diff --git a/options.json b/options.json new file mode 100644 index 0000000..ddb017e --- /dev/null +++ b/options.json @@ -0,0 +1,610 @@ +{ + "id": 1, + "name": "Pterodactyl Configurable Options", + "description": "Configurable options for Pterodactyl game server provisioning", + "hidden": 0, + "hide_options": 0, + "options": [ + { + "id": 1, + "label": "Location", + "name": "location_id", + "description": "The Pterodactyl node location to deploy the server to", + "type": "text", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 1, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": null, + "max": null, + "step": null, + "image": null, + "pricing": [ + { + "id": 1, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 2, + "label": "Nest", + "name": "nest_id", + "description": "The Pterodactyl nest ID to use for the server", + "type": "text", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 2, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": null, + "max": null, + "step": null, + "image": null, + "pricing": [ + { + "id": 2, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 3, + "label": "Egg", + "name": "egg_id", + "description": "The Pterodactyl egg ID to use for the server", + "type": "text", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 3, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": null, + "max": null, + "step": null, + "image": null, + "pricing": [ + { + "id": 3, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 4, + "label": "Port Range", + "name": "port_range", + "description": "Comma-separated port ranges in format NNNN-NNNN (e.g. 25565-25570,25580-25590)", + "type": "text", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 4, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": null, + "max": null, + "step": null, + "image": null, + "pricing": [ + { + "id": 4, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 5, + "label": "Pack", + "name": "pack_id", + "description": "The Pterodactyl pack ID to use for the server", + "type": "text", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 5, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": null, + "max": null, + "step": null, + "image": null, + "pricing": [ + { + "id": 5, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 6, + "label": "Memory (MB)", + "name": "memory", + "description": "The amount of memory in MB allocated to the server", + "type": "quantity", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 6, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": 0, + "max": null, + "step": 1, + "image": null, + "pricing": [ + { + "id": 6, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 7, + "label": "Swap (MB)", + "name": "swap", + "description": "The amount of swap memory in MB allocated to the server. Use -1 for unlimited", + "type": "quantity", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 7, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": -1, + "max": null, + "step": 1, + "image": null, + "pricing": [ + { + "id": 7, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 8, + "label": "CPU (%)", + "name": "cpu", + "description": "CPU limit as a percentage (e.g. 200 = 2 cores)", + "type": "quantity", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 8, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": 0, + "max": null, + "step": 1, + "image": null, + "pricing": [ + { + "id": 8, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 9, + "label": "Disk (MB)", + "name": "disk", + "description": "The amount of disk space in MB allocated to the server", + "type": "quantity", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 9, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": 0, + "max": null, + "step": 1, + "image": null, + "pricing": [ + { + "id": 9, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 10, + "label": "IO", + "name": "io", + "description": "Block IO adjustment number (higher = more I/O priority, typically 10-1000)", + "type": "quantity", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 10, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": 0, + "max": null, + "step": 1, + "image": null, + "pricing": [ + { + "id": 10, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 11, + "label": "Startup Command", + "name": "startup", + "description": "Custom startup command override for the server (leave empty to use egg default)", + "type": "text", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 11, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": null, + "max": null, + "step": null, + "image": null, + "pricing": [ + { + "id": 11, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 12, + "label": "Docker Image", + "name": "image", + "description": "Custom Docker image override for the server (leave empty to use egg default)", + "type": "text", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 12, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": null, + "max": null, + "step": null, + "image": null, + "pricing": [ + { + "id": 12, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 13, + "label": "Databases", + "name": "databases", + "description": "Number of allowed database allocations (leave empty for unlimited)", + "type": "quantity", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 13, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": 0, + "max": null, + "step": 1, + "image": null, + "pricing": [ + { + "id": 13, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 14, + "label": "Allocations", + "name": "allocations", + "description": "Number of additional port allocations (leave empty for unlimited)", + "type": "quantity", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 14, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": 0, + "max": null, + "step": 1, + "image": null, + "pricing": [ + { + "id": 14, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + }, + { + "id": 15, + "label": "Backups", + "name": "backups", + "description": "Number of allowed backups (leave empty for unlimited)", + "type": "quantity", + "addable": 1, + "editable": 1, + "hidden": 0, + "disable_pricing": 1, + "hide_on_invoice": 1, + "values": [ + { + "id": 15, + "name": "", + "value": "", + "default": 0, + "status": "active", + "order": 0, + "min": 0, + "max": null, + "step": 1, + "image": null, + "pricing": [ + { + "id": 15, + "term": 1, + "period": "month", + "price": "0.0000", + "price_renews": "0.0000", + "price_transfer": null, + "setup_fee": "0.0000", + "cancel_fee": "0.0000", + "currency": "USD", + "precision": 2 + } + ] + } + ] + } + ], + "condition_sets": [] +} From 3d7523d19fd7b9cf2ac9bd6ab5fd06f398544b76 Mon Sep 17 00:00:00 2001 From: Abdy Franco Date: Tue, 21 Apr 2026 16:27:00 -0600 Subject: [PATCH 2/4] Fix quantity option values: set required name field Quantity type options require a non-empty name field for validation. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> --- options.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/options.json b/options.json index ddb017e..9e05d22 100644 --- a/options.json +++ b/options.json @@ -219,7 +219,7 @@ "values": [ { "id": 6, - "name": "", + "name": "Memory (MB)", "value": "", "default": 0, "status": "active", @@ -259,7 +259,7 @@ "values": [ { "id": 7, - "name": "", + "name": "Swap (MB)", "value": "", "default": 0, "status": "active", @@ -299,7 +299,7 @@ "values": [ { "id": 8, - "name": "", + "name": "CPU (%)", "value": "", "default": 0, "status": "active", @@ -339,7 +339,7 @@ "values": [ { "id": 9, - "name": "", + "name": "Disk (MB)", "value": "", "default": 0, "status": "active", @@ -379,7 +379,7 @@ "values": [ { "id": 10, - "name": "", + "name": "IO", "value": "", "default": 0, "status": "active", @@ -499,7 +499,7 @@ "values": [ { "id": 13, - "name": "", + "name": "Databases", "value": "", "default": 0, "status": "active", @@ -539,7 +539,7 @@ "values": [ { "id": 14, - "name": "", + "name": "Allocations", "value": "", "default": 0, "status": "active", @@ -579,7 +579,7 @@ "values": [ { "id": 15, - "name": "", + "name": "Backups", "value": "", "default": 0, "status": "active", @@ -607,4 +607,4 @@ } ], "condition_sets": [] -} +} \ No newline at end of file From e9643e42042be8881b2401bff2baa06500209ecb Mon Sep 17 00:00:00 2001 From: Abdy Franco Date: Tue, 21 Apr 2026 16:29:37 -0600 Subject: [PATCH 3/4] Fix quantity option values: use null value instead of empty string Quantity type values are stored as null in the database, not empty string. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> --- options.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/options.json b/options.json index 9e05d22..e93094b 100644 --- a/options.json +++ b/options.json @@ -220,7 +220,7 @@ { "id": 6, "name": "Memory (MB)", - "value": "", + "value": null, "default": 0, "status": "active", "order": 0, @@ -260,7 +260,7 @@ { "id": 7, "name": "Swap (MB)", - "value": "", + "value": null, "default": 0, "status": "active", "order": 0, @@ -300,7 +300,7 @@ { "id": 8, "name": "CPU (%)", - "value": "", + "value": null, "default": 0, "status": "active", "order": 0, @@ -340,7 +340,7 @@ { "id": 9, "name": "Disk (MB)", - "value": "", + "value": null, "default": 0, "status": "active", "order": 0, @@ -380,7 +380,7 @@ { "id": 10, "name": "IO", - "value": "", + "value": null, "default": 0, "status": "active", "order": 0, @@ -500,7 +500,7 @@ { "id": 13, "name": "Databases", - "value": "", + "value": null, "default": 0, "status": "active", "order": 0, @@ -540,7 +540,7 @@ { "id": 14, "name": "Allocations", - "value": "", + "value": null, "default": 0, "status": "active", "order": 0, @@ -580,7 +580,7 @@ { "id": 15, "name": "Backups", - "value": "", + "value": null, "default": 0, "status": "active", "order": 0, From e270110cb536b6c8b5ec8213847e72b217f4b67d Mon Sep 17 00:00:00 2001 From: Abdy Franco Date: Tue, 21 Apr 2026 16:43:42 -0600 Subject: [PATCH 4/4] Fix swap option: set min to 0 (minimum allowed value for quantity type) Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> --- options.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options.json b/options.json index e93094b..b9a10a9 100644 --- a/options.json +++ b/options.json @@ -264,7 +264,7 @@ "default": 0, "status": "active", "order": 0, - "min": -1, + "min": 0, "max": null, "step": 1, "image": null,