Commit Graph
305 Commits
Author SHA1 Message Date
npc0-hue e8ebf562c7 Clarify AI config dispatch failures 2026-09-23 09:54:18 +08:00
npc0-hue a8b5d483a3 Remove AI config approval flow 2026-09-22 15:33:32 +08:00
npc0-hue 20008b4043 Fix declared server config file reads 2026-09-21 10:05:50 +08:00
npc0-hue b481b1b798 Promote MySQL driver to a direct dependency 2026-09-21 09:21:58 +08:00
npc0-hue ab1cd01351 feat: simplify SCUM activity management 2026-09-20 21:22:15 +08:00
npc0-hue 1488d5a43e fix: redesign SCUM gift item lists 2026-09-20 18:33:31 +08:00
npc0-hue 5f2bac3280 fix: support mixed SCUM gift catalog entries 2026-09-20 16:46:42 +08:00
npc0-hue 4abdf75c77 fix: classify SCUM gift items 2026-09-20 16:16:02 +08:00
npc0-hue a10878deee fix: clarify SCUM gift list 2026-09-20 15:41:26 +08:00
npc0-hue 4b7739a274 fix: make SCUM gift management gift-first 2026-09-20 12:13:06 +08:00
npc0-hue e03b33cf25 fix: match Kinglet aircraft exactly 2026-09-20 11:04:20 +08:00
npc0-hue 312804c55e fix: improve SCUM map playback filters 2026-09-20 10:45:32 +08:00
npc0-hue 60d479db71 feat: surface SCUM vehicle functional state 2026-09-18 16:56:36 +08:00
npc0-hue 156392df1e Improve SCUM map playback and vehicle markers 2026-09-18 15:53:32 +08:00
npc0-hue 4009b7260e Fold the trajectory replay controls into a collapsed dropdown
The live map's replay row is now a single 回放 pill that expands to the position readout, play/pause, 回到最新 and speed select, so the map keeps its full width and no slider-shaped control sits above the legend.
2026-09-17 12:24:21 +08:00
npc0-hue c5d8141d2a Tuck the trajectory replay controls into a compact pill
The wide range scrubber under the map was the loudest element on the live
map. Keep replay, speed and 回到最新, drop the slider itself, and shrink the
bar to a right aligned pill so the map and the colour legend stay in focus.
2026-09-16 21:31:11 +08:00
npc0-hue bc45188be9 Send user trajectories from the user list into a focused live map
- Open 「用户轨迹」 straight on the live map instead of a drawer, carrying the
  server, the focused user and a start/end window through the plugin page hash.
- Default that window to one hour before the user's last seen time and keep the
  plugin page query available to bundles through the host context.
- Replace the time range preset gate with always visible start/end datetime
  fields plus a quick-range select, so the user list rebuilds from the window.
- Drop the bulky trajectory list and draw one compact colour legend under the
  map, keeping a stable colour per identity and restricting vehicle tracks to
  the vehicles the selected users actually rode.
2026-09-16 19:35:31 +08:00
npc0-hue 6488f6b31d Keep SCUM poll jobs and drop orphan job log streams
The metadata snapshot deleted every SCUM sqlite query job while persisting, so
the recurring database poll lost its job records as soon as anything wrote the
snapshot and left its stdout/stderr streams behind. Those polls are the only
producer for the platform scum_user and scum_vehicle tables, and the service
already retires older terminal polls with their streams, so the snapshot no
longer drops them.

Startup now removes job log streams whose job no longer exists, keeping the
autonomous lifecycle streams the Run posts without a platform job. That clears
the streams left by the removed poll producers instead of carrying them in
every snapshot.
2026-09-16 18:41:44 +08:00
npc0-hue 6985f77963 Keep the recurring SCUM database poll bounded
Each dispatched poll is a durable job with two job log streams, so an
unbounded poll history would grow the platform store by roughly two
thousand jobs a day per server. A new poll now retires older terminal jobs
of the same template together with their job log streams, leaving at most
two rows per template while nothing is in flight.
2026-09-16 18:08:18 +08:00
npc0-hue 300390dc4d Fill the SCUM user and vehicle tables from the plugin-declared database read path
The SCUM 用户管理 list stayed empty because the typed scum_user and
scum_vehicle tables had no producer: the run ingest endpoint is signed-run
only, and the previously registered plugin templates asked for a Run
database capability the endpoint never advertises.

The plugin now declares bounded, read-only SQLite projections for players
and vehicles (sql/scum-db-v57/*.sql with query schemas), and the platform
dispatches those templates as durable remote.run.db.sqlite.query jobs on
run heartbeat and page open, then projects the returned rows into the typed
SCUM tables through the same shared ingest path used by signed run facts.
2026-09-16 18:01:33 +08:00
npc0-hue 0ce264836f Rebuild the SCUM live map with zoom, pan, and trajectory tracking 2026-09-16 10:48:54 +08:00
npc0-hue f2a9c7b1ca Serve plugin assets from the repository root in the dev server 2026-09-16 09:36:38 +08:00
npc0-hue c959a5bc03 Give the SCUM live map the full width and add catalog icon pickers
- Drop the live-map stat strip and the half-width detail column: the map board now spans the row, is taller, and the selected point renders as a compact strip under it.
- Fit the map filters into a single row with small layer chips, and switch the board between terrain, topo and night base layers plus the extracted building-zone overlay.
- Add a searchable SCUM catalog picker with icons for gift items and event produces, show gift item and vehicle icons in the lists, and keep the picker grid closed until it is opened so no icon is requested up front.
2026-09-16 07:58:48 +08:00
npc0-hue 839aff35ed Load SCUM catalog icons on demand instead of importing every icon module
- Resolve the 2604 extracted icons through a generated static asset URL lookup instead of an eager import.meta.glob, so opening a plugin page no longer pulls every icon as its own dev-server module.
- Keep the icon URLs cacheable per rendered element and add a test that the catalog never regains the module glob and that every declared icon file ships.
2026-09-15 16:43:49 +08:00
npc0-hue 59a8657297 Add SCUM entity catalog with extracted map and icons
- Import 2492 entity records (2391 items, 54 vehicles, 25 zombies, 12 animals, 10 armed NPCs) with spawn commands and icon names from the SCUM Admin Helper 0.4.0.5 payload.
- Ship the 2604 extracted item/NPC icons plus 4096 terrain, topo, night and building-zone map layers.
- Resolve vehicle icons through the catalog so live-map and trajectory markers cover every known vehicle class.
- Point map geometry and the live map background at the 4096 terrain layer.
2026-09-15 15:56:44 +08:00
npc0-hue 05f5a97ba9 Add graceful SCUM stop, restart, and version update flow
SCUM 停止/重启/更新以前只有“结束进程”这一条路,插件没有声明任何优雅关闭方式,
平台也没有把停止后重新启动串起来。现在插件声明自己的关闭脚本,run 先执行它,
平台在停止或更新成功后再自动拉起服务。

run:
- lifecycle stop 支持插件声明的 gracefulStop(可执行文件、参数、环境、超时、
  fallback=report|terminate);关闭命令超时且声明 report 时任务失败,不再默默杀进程。
- 新增 steam.update 依赖探针:调用 steamcmd +app_info_print 获取公开分支 buildid,
  与本地 steamapps/appmanifest_<appid>.acf 的 buildid 比较,输出
  installed/latest/update=yes|no|unknown。

platform:
- 新增 POST /api/v1/server-instances/{id}/restart 与 /update。
- restart 派发插件 stop 动作(走优雅关闭),终态成功后入队 start 作业。
- update 派发插件 install 动作;插件在更新前必须先优雅关闭 SCUM,关闭失败直接拒绝
  SteamCMD 更新,成功后平台再拉起服务。
- 依赖检查输入带上插件声明的服务器安装根目录,供 steam.update 读取 appmanifest。

plugin (SCUM server plugin 0.1.16):
- bin/scum-stop.cmd:解析已声明的可执行文件路径,定位同路径正在运行的 SCUMServer.exe,
  通过本地 RCON 公告并发送关闭命令,等待进程自行退出;不再使用 taskkill。
- bin/scum-rcon.ps1:插件自有的 Source RCON 客户端,从 UE4SS mod config.ini 读取
  密码/端口,密钥不离开本机。
- actions/stop.json 声明 gracefulStop;actions/install.json 更新前先执行同一关闭脚本。

platform_web:
- 服务器详情新增“重启”按钮和“SCUM 版本更新”面板;点“检查更新”查询公开分支版本,
  只有检测到更新时“更新版本”按钮才会置为可用并高亮,点击后先确认再派发更新任务。
2026-09-15 13:30:15 +08:00
npc0-hue 4ea27bda6a Isolate server search from the delete password prompt
The delete confirmation adds a password field. Browsers and password managers
paired it with the only other text field on the page and filled the account
name into the server search box on the server list.

The search input now stays out of the DOM while a delete confirmation is open,
and the toolbar shows a suspended notice styled to match the field it replaces
so the row does not jump. A jsdom test drives the real action menu and dialog
instead of asserting page source strings.
2026-09-15 12:25:17 +08:00
npc0-hue a822e9250a Store SCUM facts in typed platform tables
Run pushes typed SCUM facts through POST /api/v1/run/scum/facts, but the
production router rejected that path before the signature middleware because
runServiceRequest listed individual Run channel prefixes, and MySQL kept SCUM
rows inside the whole metadata snapshot instead of platform tables.

- /api/v1/run/ is now the signed machine channel space while
  /api/v1/run/endpoints keeps normal bearer/admin authorization.
- MySQL gets real scum_user, scum_user_trajectory, scum_vehicle,
  scum_vehicle_trajectory and scum_vehicle_lock tables with parameterized
  per-row repositories instead of full snapshot rewrites. Snapshot-shaped
  tables from the unreleased interim build are replaced, and SCUM rows still
  inside a metadata snapshot are migrated once.
- Facts ingest verifies the target server plugin type and converges stale
  online users to offline after SCUMUserOfflineAfter.
- The plugin page and browser read one bounded /scum/surface response instead
  of five list calls per refresh.

Call-count budget for one server: per 5s facts batch, one SELECT plus one
INSERT/UPDATE per reported user and vehicle, one INSERT per moved trajectory
sample or new lock row, one bounded stale-user SELECT, and a trajectory
retention DELETE at most once per hour. One browser refresh issues one surface
request every 15s instead of five list requests.
2026-09-15 12:12:11 +08:00
npc0-hue 63e2340db7 Prune stale plugin metadata 2026-09-14 17:32:51 +08:00
npc0-hue ecdca8e28b Remove SCUM sqlite user projections 2026-09-14 13:41:44 +08:00
npc0-hue b1f102bafb Stop configuration snapshot request loop 2026-09-11 16:35:42 +08:00
npc0-hue 6e858e1b9c Expand SCUM configuration catalog 2026-09-11 12:16:01 +08:00
npc0-hue 8e6d12f6f1 Add server configuration editor 2026-09-11 11:40:06 +08:00
npc0-hue 8c924b5928 Reduce log ingest and SCUM page refresh pressure 2026-09-09 16:21:12 +08:00
npc0-hue e6e38b275a Declare SCUM database data target 2026-09-09 15:35:29 +08:00
npc0-hue 892c6d843f Hydrate terminal drawer with current log history 2026-09-09 15:02:39 +08:00
npc0-hue f88123e185 Tighten SCUM user table layout 2026-09-09 11:36:44 +08:00
npc0-hue dfe4bd72d8 Prioritize functional implementation before 1.0 2026-09-09 10:35:02 +08:00
npc0-hue 84380105fc Keep SCUM data parsing plugin-owned 2026-09-09 10:13:47 +08:00
npc0-hue 4f20fcaf5b Show SCUM create inputs when adopting servers 2026-09-08 14:48:17 +08:00
npc0-hue fd9dbab669 Reduce hot run polling pressure 2026-09-07 20:26:20 +08:00
npc0-hue 4ab7bb820d Reduce server console polling load 2026-09-07 19:49:20 +08:00
npc0-hue 1b583f3ca6 Fix server file list fallback 2026-09-07 18:54:56 +08:00
npc0-hue f69429bfc7 Fix server create plugin filtering 2026-09-07 18:17:33 +08:00
npc0-hue 86167a3a1b Fix SCUM query port startup input 2026-09-07 14:56:12 +08:00
npc0-hue 5be7ec112e fix: isolate server search from password autofill 2026-09-07 12:01:45 +08:00
npc0-hue 49090fc3aa fix: declare SCUM trajectory bridge producers 2026-09-07 11:50:49 +08:00
npc0-hue cf836715e2 fix: prevent loopback Run release URLs 2026-09-05 18:11:58 +08:00
npc0-hue 4923308fb4 Document hot-path data access rules 2026-09-04 17:41:08 +08:00
npc0-hue 44f0b4a44b Render log entries without content classification 2026-09-04 14:41:21 +08:00