FloatPilot 使用說明

官方客戶端橋接使用指南

本指南說明如何讓官方 aLogin.exe 先連到 FloatPilot,再由 FloatPilot 將同一條 TCP 連線轉送到官方伺服器。

重要:FloatPilot 的 server.ini 與官方客戶端的 SERVER.INI 用途不同。FloatPilot 必須保留真正的官方伺服器 IP;只有官方客戶端的 SERVER.INI 要改成本機 BridgeHost。目前尚未逐一完成所有官方客戶端版本的 live 相容性驗證。

先分清楚兩份伺服器設定

設定檔 用途 應該填什麼
FloatPilot 的 server.ini 提供 Bridge 要連線的真正官方伺服器 保留官方伺服器 IP,不要改成 127.0.0.x
官方客戶端的 SERVER.INI aLogin.exe 先連到 FloatPilot 將原本使用的伺服器 IP 改成帳號清單顯示的 BridgeHost,port 保持 6414

不同官方版本的 section 與 key 排版可能不同。請只修改該版本原本存在的伺服器 IP,不要自行新增猜測的 key。

快速開始

  1. 啟動 FloatPilot,開啟登入視窗。
  2. 選擇帳號、官方伺服器與角色位置。
  3. 將「連線方式」選為 aLogin 橋接
  4. 按下「登入」,等待帳號清單顯示 等待 aLogin
  5. 使用該帳號清單顯示的 BridgeHost:6414 修改官方客戶端 SERVER.INI
  6. 啟動對應的 aLogin.exe

登入視窗不再提供橋接控制模式或額外端點說明;橋接控制固定是 Shared。帳號清單仍會顯示目前 relay 狀態與端點,供設定 SERVER.INI 使用。

正常連線時,帳號狀態會依序顯示:

等待 aLogin
aLogin 已連線
連線官方伺服器中
官方伺服器已連線
遊戲已登入

橋接控制與 App SEND 閘門

橋接固定使用 Shared:aLogin 與 App 的封包會進入同一個有界 outbound queue,再依序寫入同一條官方伺服器連線。舊設定檔中的 ObservationAppControl 仍可被讀取以維持相容性,但執行時會正規化為 Shared,不能繞過新的閘門。

  • aLogin 的原始 client→official 與 official→client TCP 流量會持續透明轉送;在閘門開啟前也不會丟棄或改寫 aLogin 封包。
  • App 自己產生的 SEND 在目前 bridge generation 收到並組裝出官方 server→client 23/05 frame 前,一律不會寫入 socket,呼叫會得到未送出的結果。
  • 收到該 exact session 的 23/05 後,App SEND 才會對同一 generation 解鎖;TCP fragmentation 或 coalescing 不會誤判。
  • 斷線、重新連線、新 generation 或舊 generation 的 late frame 都會重新鎖定;舊 session 的 23/05 不能解鎖新 session。

這個 23/05 parser 確認的 session 狀態也會直接標記為「遊戲已登入」,不再依賴 IsAbleToControl 的推論。

本機端點與多帳號

Bridge 固定使用 TCP port 6414,每個帳號使用不同的 IPv4 loopback 位址:

帳號 A:127.0.0.1:6414
帳號 B:127.0.0.2:6414
帳號 C:127.0.0.3:6414

正式執行只接受 127.0.0.0/8。LAN 位址、0.0.0.0、IPv6 ::1 或重複的 BridgeHost 都會被拒絕。合法的已保存位址會優先保留,不會因帳號清單排序改變而漂移。

同時使用多個帳號時,請為每個官方客戶端使用獨立資料夾,避免不同 aLogin.exe process 共用同一份 SERVER.INI

用 App 操作同一個 Session

確認帳號狀態已到「遊戲已登入」後,App 與 aLogin 會共用同一條 bridge 連線。可以用「傳送 → 回遊樂場」作為簡單測試:

  1. 確認角色目前不在戰鬥、對話、交易或其他忙碌狀態。
  2. 開啟 FloatPilot 上方選單的「傳送」。
  3. 按下「回遊樂場」。
  4. 等待官方伺服器回覆,再執行下一個動作。

23/05 尚未收到、session 已斷線或 generation 已過期,App 會拒絕送出,不會先在本地把地圖狀態改成成功;aLogin 的透明 relay 仍可繼續處理它自己的流量。

斷線與重新連線

  • aLogin 關閉、官方伺服器斷線、App 停止或帳號停止時,該帳號的 relay、socket、listener 與 outbound queue 會一起清理。
  • 一個帳號斷線不會停止其他帳號的 listener 或 relay。
  • 同一帳號重新啟動時會沿用已保存的 BridgeHost,但 App SEND 必須等待新 generation 的 23/05
  • 舊 session 的封包、狀態 callback 與 App 指令都帶有 generation token,不會套用到新的 session。
  • App 正常關閉時會有界等待 Bridge 清理,不需要手動結束 listener。

常見問題與排錯順序

一直顯示「等待 aLogin」

  1. 確認 FloatPilot 已完成帳號登入流程。
  2. 確認修改的是官方客戶端的 SERVER.INI,不是 FloatPilot 的 server.ini
  3. 確認 IP 與帳號清單顯示的 BridgeHost 完全相同。
  4. 確認 port 是 6414
  5. 確認已啟動正確資料夾內的 aLogin.exe

顯示 listener-unavailable

表示該 127.0.0.x:6414 已被其他程式占用。請關閉舊的 FloatPilot/aLogin process,並確認不同帳號沒有共用相同的 BridgeHost

顯示 upstream-connect-failed

確認 FloatPilot 自己的 server.ini 仍保存正確的官方伺服器 IP,不要把這份檔案改成 127.0.0.x

aLogin 連上後立即斷線

這可能是該官方版本的 handshake、header、版本號或加密流程尚未相容。請保留客戶端版本、SERVER.INI、Bridge structured log 與必要的 raw capture,再依證據分析。

App 動作尚未送出

先確認帳號狀態已收到同一 generation 的 server→client 23/05,且帳號仍連線。未收到前只有 aLogin 透明 relay 會繼續,App SEND 會明確被拒絕。

相容性界線

目前已確認的是本機 endpoint 分配、固定 6414、透明 TCP relay、固定 Shared outbound、23/05 parser 閘門、同 session outbound、generation cleanup 與多帳號隔離。

目前仍未知:

  • 尚未以每個官方 aLogin.exe 版本完成 live handshake、header、version、加密登入與完整登入流程驗證。
  • 官方 server→client 即時狀態解析仍缺各版本的 live golden capture;靜態 parser 不能代替 wire evidence。
  • 23/05 在所有官方版本中的語意與出現時機仍需 live capture 持續確認。

最後檢查清單

  • FloatPilot 的 server.ini 仍指向真正的官方伺服器 IP。
  • 官方客戶端的 SERVER.INI 已指向帳號清單的 BridgeHost:6414
  • 登入視窗的連線方式已選為 aLogin 橋接
  • FloatPilot 先進入「等待 aLogin」,再啟動 aLogin.exe
  • 多帳號使用不同的 127.0.0.x,且最好使用獨立客戶端資料夾。
  • 帳號狀態已收到 exact session 的 23/05 後,再由 App 執行操作。
  • 遇到版本相容問題時,已保留版本、設定與診斷證據。