Class GuiApiServer
java.lang.Object
server.gui.GuiApiServer
GUI 管理控制台的輕量 HTTP API,提供
gui/ 前端讀取「即時」伺服器狀態。
使用 JDK 內建 HttpServer(零新相依),僅綁定
127.0.0.1 ——永遠不對外可達,符合本專案 localhost 信任的安全姿態
(與 DatabaseConnection 對 loopback DB 的特例一致)。回應為 UTF-8 JSON。
於 server.Start.run() 在三個 Netty 伺服器與遊戲資料皆就緒後啟動
(start()),於關服流程停止(stop())。可由 settings.ini
的 gui.api.enabled / gui.api.port 開關與設定埠號。
端點:
GET /api/health—— 存活檢查。GET /api/overview—— 總覽頁所需的即時資訊(在線、歷史最高、運行時間、 今日註冊、倍率、各頻道狀態、最近嚴重事件、管理員模式、倒數關機狀態)。GET /api/players—— 玩家管理頁的角色清單(characters表內容聯結accounts取遊戲帳號名,並依目前在線玩家集合標記online狀態)。GET /api/players/{id}—— 單一角色 + 其帳號的完整詳情(供詳情/編輯視窗)。POST /api/players/{id}—— 儲存詳情視窗的修改(帳號欄位、角色欄位, 以及帳號/MAC/IP 的封鎖狀態);角色在線時變更會即時套用到遊戲中(見LiveCharacterEditor)。POST /api/players/{id}/password—— 以{"password":"…"}變更該角色所屬帳號的密碼。GET /api/bans/related—— 封鎖/解封頁的「關聯帳號」:以創建與最後連線的 IP/MAC 連動歸群(union-find 連通分量),回傳每組共用 IP/MAC 的帳號(含其所有角色名與封鎖狀態)。POST /api/bans/account/{id}—— 以{"banned":bool}切換單一帳號的封鎖狀態 (accounts.banned)。POST /api/control/shutdown—— 以{"minutes":N}排程倒數關機 (等同遊戲內!shutdowntime N);{"cancel":true}取消倒數。POST /api/control/admin-mode—— 以{"enabled":bool}切換 「管理員模式」(只有 GM 帳號可登入),並寫回settings.ini以便重啟後記住。GET /api/chatlog?type=N&names=a,b—— 對話紀錄頁的訊息清單(依頻道型別、可選角色名稱 篩選;chatlog表聯結characters取角色名,依時間遞增回傳最近 N 筆)。GET /api/chatlog/context?id=N—— 某句話前後的對話上下文(同頻道、不套用名稱篩選),供「跳到」檢視。GET /api/chatlog/check-name?name=X—— 驗證遊戲暱稱是否存在(供加入篩選前檢查)。GET /api/logs/lookup?q=X—— 統一紀錄頁的查詢:以遊戲帳號或角色暱稱解析出帳號 + 其所有角色 (角色暱稱搜尋會一併回傳預選的角色 id)。GET /api/logs/entries?accId=N&charId=M—— 某角色(CHAR範圍)與其帳號(ACC範圍) 在當前週期的_acc_char_log計數(依日/週/月/永久分類,與遊戲端getLog讀同一列)。POST /api/logs/entry—— 以{accId,charId,scope,resetType,eventName,count}覆蓋當前週期某筆計數。POST /api/logs/entry/delete—— 以{accId,charId,scope,resetType,eventName}刪除當前週期某筆計數。GET /api/drops/monsters—— 「掉落物設定 / 怪物掉落」頁的怪物清單(WZMob.img的 怪物 id → 名稱,附各怪在drop_data的掉落列數dropCount)。GET /api/drops/monster/{id}—— 單一怪物的掉落列(drop_data聯結wz_itemdata取道具名)。POST /api/drops/monster/{id}—— 以{itemId,min,max,chance,questId}新增一筆掉落, 寫入drop_data並重載掉落表使其即時生效(等同!reloaddrops)。PUT /api/drops/drop/{id}—— 以{min,max,chance,questId}修改既有掉落列 (以drop_data.id定位,不更換物品),並重載掉落表使其即時生效。DELETE /api/drops/drop/{id}—— 刪除既有怪物掉落列(以drop_data.id定位),並重載掉落表使其即時生效。GET /api/drops/item-lookup?code=X|name=Y—— 道具代碼↔名稱互查(讀wz_itemdata),供新增視窗自動帶入另一欄。GET /api/drops/global—— 全部全域掉落(drop_data_global聯結wz_itemdata取道具名; 含怪物等級門檻mobLevel、活動旗標eventOnly與起訖時間startDate/endDate)。POST /api/drops/global—— 以{itemId,min,max,chance,mobLevel,eventOnly,startDate,endDate}新增一筆全域掉落(continent=-1套用所有地圖),寫入drop_data_global並重載掉落表使其即時生效。PUT /api/drops/global/{id}—— 以{min,max,chance,mobLevel,eventOnly,startDate,endDate}修改既有全域掉落 (以drop_data_global.id定位,不更換物品),並重載掉落表使其即時生效。DELETE /api/drops/global/{id}—— 刪除既有全域掉落列(以drop_data_global.id定位),並重載掉落表使其即時生效。
寫入端點同樣只綁 127.0.0.1,沿用本專案 localhost 信任的安全姿態。
-
Method Summary
-
Method Details
-
start
public static void start()啟動 HTTP API(依 settings.ini 開關;重複呼叫無作用)。 -
stop
public static void stop()停止 HTTP API(關服流程呼叫;未啟動則無作用)。
-