Commit Graph
3162 Commits
Author SHA1 Message Date
phidias 41ab6588eb Merge branch 'explosivegaming:main' into translate 2026-11-09 21:46:46 +09:00
phidias 7689af7b4f enemy locale (#522) 2026-11-09 09:23:12 +00:00
phidias 26512eeb06 tick instead of second (#521) 2026-11-09 09:22:27 +00:00
phidias 353b8c6919 Merge branch 'explosivegaming:main' into translate 2026-11-08 00:22:31 +09:00
phidias ce29218f14 Research Milestone (#517)
* new research milestone

* energy

* revert

* minute

* moving

* config
2026-11-07 15:19:42 +00:00
phidias 637e47bf8c Quick Action Locale (#518)
* quick action locale

* remove marking

* new ln
2026-11-07 15:18:47 +00:00
BastiaanandClaude Opus 5.5 2cca280e30 Use controller.hosts.records for the host datastore (#520)
clusterio #1180 made controller.hosts a HostManager. The datastore with
set and the update event now lives on controller.hosts.records.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 14:29:58 +00:00
phidias ad9777732c Merge branch 'explosivegaming:main' into translate 2026-11-06 19:04:43 +09:00
phidias d59e246278 fullscreen mode (#519) 2026-11-04 15:58:43 +00:00
phidias 9c8106e7ae Merge branch 'explosivegaming:main' into translate 2026-11-04 01:25:56 +09:00
phidias 222e42630f Merge pull request #516 from PHIDIAS0303/translate
chore(l10n): update translations
2026-11-03 16:15:40 +00:00
e4c7304129 chore(l10n): update Chinese (Traditional Han script) translation (#58)
chore(l10n): update Chinese (Simplified Han script) translation

chore(l10n): update Chinese (Simplified Han script) translation

chore(l10n): update Chinese (Traditional Han script) translation

chore(l10n): update Chinese (Traditional Han script) translation

chore(l10n): update Chinese (Simplified Han script) translation

chore(l10n): update Chinese (Simplified Han script) translation

chore(l10n): update Chinese (Traditional Han script) translation

chore(l10n): update Chinese (Traditional Han script) translation

chore(l10n): update Chinese (Simplified Han script) translation



Language: Chinese (Simplified Han script)
Language: Chinese (Traditional Han script)
Progress: 100.0% (499 of 499 strings)
Progress: 100.0% (5 of 5 strings)
Progress: 100.0% (64 of 64 strings)
Translate-URL: https://translate.aperx.org/projects/expcluster/expplayerstatistic/zh_Hans/
Translate-URL: https://translate.aperx.org/projects/expcluster/expplayerstatistic/zh_Hant/
Translate-URL: https://translate.aperx.org/projects/expcluster/expscenario/zh_Hans/
Translate-URL: https://translate.aperx.org/projects/expcluster/expscenario/zh_Hant/
Translate-URL: https://translate.aperx.org/projects/expcluster/expserverlist/zh_Hans/
Translate-URL: https://translate.aperx.org/projects/expcluster/expserverlist/zh_Hant/
Translation: ExpCluster/ExpPlayerStatistic
Translation: ExpCluster/ExpScenario
Translation: ExpCluster/ExpServerList

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: phidias <phidias@aperx.org>
2026-11-03 20:56:32 +09:00
8fa1cfda94 chore(l10n): update translations (#57)
* chore(l10n): update Chinese (Simplified Han script) translation

chore(l10n): update Chinese (Traditional Han script) translation

chore(l10n): update Chinese (Traditional Han script) translation

chore(l10n): update Chinese (Simplified Han script) translation

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: phidias <phidias@aperx.org>
Language: Chinese (Simplified Han script)
Language: Chinese (Traditional Han script)
Progress: 100.0% (499 of 499 strings)
Progress: 100.0% (5 of 5 strings)
Translate-URL: https://translate.aperx.org/projects/expcluster/expscenario/zh_Hans/
Translate-URL: https://translate.aperx.org/projects/expcluster/expscenario/zh_Hant/
Translate-URL: https://translate.aperx.org/projects/expcluster/expserverlist/zh_Hans/
Translate-URL: https://translate.aperx.org/projects/expcluster/expserverlist/zh_Hant/
Translation: ExpCluster/ExpScenario
Translation: ExpCluster/ExpServerList

* Update zh-CN.cfg

* Update zh-TW.cfg

---------

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: phidias <phidias@aperx.org>
2026-11-03 20:50:21 +09:00
phidias 377b3f2a25 Merge branch 'explosivegaming:main' into translate 2026-10-29 15:34:41 +09:00
Cooldude2606 48f86959d9 Fix display of playtime and join count in stats table 2026-10-29 00:28:35 +00:00
Cooldude2606 be68248fe7 Merge pull request #514 from bbassie/fix/clusterio-master-compat
Update for clusterio master (Vite, error classes, async factories)
2026-10-29 00:26:02 +00:00
bbassieandClaude Opus 5.5 fa26bc380e Drop the empty web entrypoints
clusterio#1140 no longer reports plugins without a web entrypoint as
failing to load, so the empty web modules from 99d47cf1 can go. The
browser tsconfig of these plugins now checks index.ts instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:58:51 +00:00
bbassieandClaude Opus 5.5 389004d652 Replace RequestError with the HTTP-style error classes
clusterio#999 removed RequestError. Handlers now throw NotFoundError,
ValidationError, ConflictError or UnavailableError, and exp_auto_restart
treats any ClientError from the host as a final refusal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:43:25 +00:00
bbassieandClaude Opus 5.5 afc1d35668 Load datastores with SubscribableDatastore.fromProvider
clusterio#1129 replaced DatastoreProvider.bootstrap with async factories
and Instance now takes its FactorioServer in the constructor, so the
instance tests pass their server stub there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:43:25 +00:00
bbassieandClaude Opus 5.5 e84bd97b99 Build plugin web bundles with Vite
clusterio#1130 replaced webpack with Vite and the web interface rejects
webpack-built plugin bundles. Each plugin now builds with clusterioPlugin()
from @clusterio/web_ui/vite.mjs, and the webpack configs and dependencies
are gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:43:25 +00:00
phidias 10769c9e54 Merge branch 'explosivegaming:main' into translate 2026-10-26 16:38:46 +09:00
Cooldude2606 c61dcaecb5 Merge pull request #512 from bbassie/feature/reports-watch-list
Add a watch list and read state to exp_reports
2026-10-25 22:12:53 +00:00
BastiaanandClaude Opus 5.5 20ca539af3 Save controller plugin data on the save hook (#513)
exp_groups and exp_roles only saved their datastores on shutdown, and
exp_scenario saved the player store but not the feature store on the
save hook. The controller runs the save hook on its autosave interval,
so a crash or kill lost every change since the controller started.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 21:57:21 +00:00
bbassieandClaude Opus 5.5 38fe2ed62a Address review on the exp_reports watch list
Save both datastores on the save hook so autosave covers them, the
controller also runs it at shutdown. Watch list names are case
insensitive, matching Factorio and Clusterio users. The new
exp_reports.announce_to_all_instances config, on by default, can limit
the join message to the instance the player joined. The Discord embed
lists the three newest unread reports and counts the rest in the footer,
since Discord rejects embeds with more than 25 fields. Both tables now
sort newest first by default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:01:44 +00:00
bbassieandClaude Opus 5.5 44ae3a5f0e Add a watch list and read state to exp_reports
Players on the watch list are announced to every online admin on every
instance when they join, and the join is posted to the Discord and JSON
webhooks. The Reports page has a second table for the watch list with an
Add button and a Delete button per row.

Reports can be marked read or unread from the web interface. Each report
row also has an Add to watch list button which opens the add form filled
in with the player and reason. Setting exp_reports.watch_unread_reports
treats players with unread reports as watched.

Reports now store created_at_ms because marking them read changes
updated_at_ms. Old reports.json files migrate on load with updated_at_ms
as the creation time. The report webhook moved from the datastore update
listener to the create handler so reading a report is not posted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 18:36:22 +00:00
phidias e1db3fd117 Merge branch 'explosivegaming:main' into translate 2026-10-18 01:33:49 +09:00
Cooldude2606 82abc2c332 7.0.4 2026-10-17 16:54:48 +01:00
Cooldude2606 99d47cf114 Fix web module not loading 2026-10-17 16:54:13 +01:00
phidias a0de42f725 Merge branch 'explosivegaming:main' into translate 2026-10-18 00:29:31 +09:00
BastiaanandClaude Opus 5.5 472db1e22a Fix unknown sprite on the readme join button (#510)
utility/downloading_white was a 1.1 sprite. Neither 2.0 nor 2.1 has it,
so drawing the readme for a modded server crashed on_player_created.
utility/downloading exists in both, so no version check is needed.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 16:14:40 +01:00
Cooldude2606 54799ef619 Included migrated playtime and join count in stats table 2026-10-17 16:13:17 +01:00
phidias abc4ccb7a7 Merge branch 'explosivegaming:main' into translate 2026-10-17 13:09:07 +09:00
Cooldude2606 383893e0cd Fix build for two plugins 2026-10-17 00:09:44 +01:00
Cooldude2606 f3553dd570 Fix publish issue in some plugins 2026-10-17 00:05:24 +01:00
phidias 584fc10752 Add spaces in formatted time output (#509) 2026-10-16 19:53:29 +01:00
phidias 95b5c8679d Merge branch 'explosivegaming:main' into translate 2026-10-17 02:55:57 +09:00
Cooldude2606 4142db68cf Update readme 2026-10-16 14:34:20 +01:00
Cooldude2606 cf7ea7f8fb Fix dev dependencies 2026-10-16 14:26:36 +01:00
Cooldude2606 9d19f4eaea 7.0.2 2026-10-16 14:13:17 +01:00
Cooldude2606 a7e66ccdd4 Remove collection of player locale (#508) 2026-10-16 13:55:06 +01:00
phidias 08f1d3ac2a Merge branch 'explosivegaming:main' into translate 2026-10-16 14:31:53 +09:00
BastiaanandClaude Opus 5.5 8d7d5ff10f Add a readme to every plugin and list them in the main readme (#505)
Commands, Permission Groups, Player Statistics, Reports, Roles, Scenario,
Server UPS and Module Utilities get a readme covering their config,
permissions, commands, web pages and Lua and Node API.

The existing readmes are brought up to date: Auto Restart now that
clusterio marks a restart after a plugin install, Discord Auth gets the
code timeout, command aliases and its Lua API, and the GUI guide says what
the plugin is and has its toolbar examples and an iterator name fixed.

The main readme gets a Plugins section listing each plugin by name and
package with a one line description.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 23:12:48 +01:00
phidias 87dd7e1967 Merge branch 'explosivegaming:main' into translate 2026-10-16 01:37:23 +09:00
BastiaanandClaude Opus 5.5 8e7ac3c872 Pick a long bracket the json does not close in rcon commands (#506)
exp_reports, exp_roles and exp_groups wrapped the json they send to Lua in
a fixed [=[ ]=] long bracket. A report reason, role name or group name
containing ]=] closed it early and the rest ran as Lua through /sc. Any
player can make a report, so any player could run code on the server.

Use the next level the json does not contain, like the other plugins do.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 17:07:47 +01:00
a34ceb19fa chore(l10n): update translations (#49)
* chore(l10n): add Chinese (Simplified Han script) translation

chore(l10n): add Chinese (Traditional Han script) translation

chore(l10n): add Chinese (Simplified Han script) translation

chore(l10n): add Chinese (Traditional Han script) translation

chore(l10n): update Chinese (Traditional Han script) translation

chore(l10n): update Chinese (Simplified Han script) translation

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: phidias <phidias@aperx.org>
Language: Chinese (Simplified Han script)
Language: Chinese (Traditional Han script)
Progress: 100.0% (493 of 493 strings)
Translate-URL: https://translate.aperx.org/projects/expcluster/expdiscordauth/zh_Hans/
Translate-URL: https://translate.aperx.org/projects/expcluster/expdiscordauth/zh_Hant/
Translate-URL: https://translate.aperx.org/projects/expcluster/expscenario/zh_Hans/
Translate-URL: https://translate.aperx.org/projects/expcluster/expscenario/zh_Hant/
Translate-URL: https://translate.aperx.org/projects/expcluster/expserverlist/zh_Hans/
Translate-URL: https://translate.aperx.org/projects/expcluster/expserverlist/zh_Hant/
Translation: ExpCluster/ExpDiscordAuth
Translation: ExpCluster/ExpScenario
Translation: ExpCluster/ExpServerList

* Rename zh_Hans.cfg to zh-CN.cfg

* Rename zh_Hant.cfg to zh-TW.cfg

* Rename zh_Hant.cfg to zh-TW.cfg

* Rename zh_Hans.cfg to zh-CN.cfg

---------

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: phidias <phidias@aperx.org>
2026-10-15 23:49:04 +09:00
phidias 93b5806dd9 Merge branch 'explosivegaming:main' into translate 2026-10-15 23:45:41 +09:00
Bastiaan 55bdf72fff Merge pull request #504 from bbassie/refactor/remove-exp-legacy
Remove the exp_legacy plugin
2026-10-15 14:07:01 +01:00
Cooldude2606 98c3173807 Merge pull request #497 from bbassie/feature/statistics-plugin
Move player statistics into an exp_player_statistics plugin
2026-10-15 13:32:44 +01:00
phidias 455328d945 Merge branch 'explosivegaming:main' into translate 2026-10-15 14:25:12 +09:00
bbassieandClaude Opus 5.5 ad1c83def8 Address review on the statistics plugin
The plugin is now exp_player_statistics (@expcluster/player-statistics),
with the module, global, permission, route and database directory
renamed to match. The exp-statistics locale section keeps its name.

Every statistic is tracked unconditionally, so the enable flags are gone
from config.lua. Playtime and JoinCount are no longer counted in game:
clusterio already keeps online time and joins for each user, so the
controller fills them in from the user when a player's totals are
requested, and the web page does the same from the user list. They are
not stored or adjusted by the plugin.

The web table has a column picker, a multiple select with check boxes,
Select all and Reset buttons, showing "N statistics selected". The
choice is kept in local storage. The user page shows the statistics of
the player in a grid like the core player stats.

The readme statistics table drops its second title and uses the short
time format.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:36:00 +00:00