官方客戶端橋接使用指南
本指南說明如何讓官方 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。
快速開始
- 啟動 FloatPilot,開啟登入視窗。
- 選擇帳號、官方伺服器與角色位置。
- 將「連線方式」選為
aLogin 橋接。 - 按下「登入」,等待帳號清單顯示
等待 aLogin。 - 使用該帳號清單顯示的
BridgeHost:6414修改官方客戶端SERVER.INI。 - 啟動對應的
aLogin.exe。
登入視窗不再提供橋接控制模式或額外端點說明;橋接控制固定是 Shared。帳號清單仍會顯示目前 relay 狀態與端點,供設定 SERVER.INI 使用。
正常連線時,帳號狀態會依序顯示:
等待 aLogin
aLogin 已連線
連線官方伺服器中
官方伺服器已連線
遊戲已登入
橋接控制與 App SEND 閘門
橋接固定使用 Shared:aLogin 與 App 的封包會進入同一個有界 outbound queue,再依序寫入同一條官方伺服器連線。舊設定檔中的 Observation 或 AppControl 仍可被讀取以維持相容性,但執行時會正規化為 Shared,不能繞過新的閘門。
- aLogin 的原始 client→official 與 official→client TCP 流量會持續透明轉送;在閘門開啟前也不會丟棄或改寫 aLogin 封包。
- App 自己產生的 SEND 在目前 bridge generation 收到並組裝出官方 server→client
23/05frame 前,一律不會寫入 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 連線。可以用「傳送 → 回遊樂場」作為簡單測試:
- 確認角色目前不在戰鬥、對話、交易或其他忙碌狀態。
- 開啟 FloatPilot 上方選單的「傳送」。
- 按下「回遊樂場」。
- 等待官方伺服器回覆,再執行下一個動作。
若 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」
- 確認 FloatPilot 已完成帳號登入流程。
- 確認修改的是官方客戶端的
SERVER.INI,不是 FloatPilot 的server.ini。 - 確認 IP 與帳號清單顯示的
BridgeHost完全相同。 - 確認 port 是
6414。 - 確認已啟動正確資料夾內的
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 執行操作。 - 遇到版本相容問題時,已保留版本、設定與診斷證據。