初始化 Line_Project_Bot:LP_Bot 重構版(介面重設計+平台環境改讀試算表)

根本原因:
LP_Bot 介面老舊且環境設定寫死在程式內,新增平台或環境都要改碼重建。

影響:
全新深色控制台介面;首頁改為「平台+環境+Token」,平台清單與連線設定
即時讀取 Google 試算表(quickopen 同款資料來源),選擇與 Token 會記憶於
localStorage;支援「開遊戲」直開跳過維護網址;SD 機台自製 Spin 面板
(押注/延遲/倍率停/轉數停+Log 終端)。

修法:
- 底層引擎(Engine/Common/define/FormTable*)自 LP_Bot 原封搬移
- UI 層全部重寫(Login/Lobby/SlotList/SDGame),antd 深色主題
- 新增 GoogleSheetService:service account 簽 JWT 讀 Sheets API,
  非安全來源 fallback jsrsasign
- 移除 React.StrictMode(雙重掛載會讓 NetManagerSD 單例連線互蓋)
- SD socket 依 gameUrl 協定強制 wss
- 機台 1310/1311/1801/1803/1804/1805 Spin 帶 mode:0 特例
  (依 SD3 客戶端 MainState 原始碼)
- credentials.json 不進版控,附 credentials.example.json 範本

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-03 11:04:49 +08:00
co-authored by Claude Fable 5
commit ebe8c3caca
445 changed files with 42552 additions and 0 deletions
@@ -0,0 +1,42 @@
{
"#slot_038#wheel_client" :
{
"cols" : ["Id","SymbolList"],
"rows" : [[1,[2,2,2,0,5,0,3,0,7,0,4,0,6,0,1,0,5,0,2,2,2,0,7,0,6,0,3,0,6,0,4,0,5,0,1,0,7,0]],[2,[3,3,3,0,6,0,4,0,6,0,1,0,5,0,2,0,7,0,3,3,3,0,7,0,1,0,6,0,2,0,5,0,4,0,7,0,5,0]],[3,[4,4,4,0,7,0,2,0,5,0,1,0,6,0,3,0,6,0,4,4,4,0,5,0,2,0,7,0,1,0,5,0,3,0,7,0,6,0]]]
},
"#slot_038#wheel" :
{
"cols" : ["Id"],
"rows" : []
},
"#slot_038#wheel_form" :
{
"cols" : ["Id"],
"rows" : []
},
"#slot_038#sound" :
{
"cols" : ["Id","Type","PathZnTw"],
"rows" : [[901,1,"sounds/Slot/Common/Event_GetCoins"],[902,1,"sounds/Slot/Common/Event_GetCoins_Win"],[903,1,"sounds/Slot/Common/Event_GetCoins_Big"],[904,1,"sounds/Slot/Common/Event_GetCoins_Mega"],[905,1,"sounds/Slot/Common/Event_Bigwin_Skip"],[38001,2,"sounds/Slot/Default/Empty_BGM"],[38002,1,"sounds/Slot/Default/Event_Click"],[38003,1,"sounds/Common/Lobby_InToMechine"],[38011,1,"sounds/Slot/Default/Event_Bet_01"],[38012,1,"sounds/Slot/Default/Event_Bet_01"],[38013,1,"sounds/Slot/Default/Event_Bet_02"],[38014,1,"sounds/Slot/Default/Event_Bet_02"],[38015,1,"sounds/Slot/Default/Event_Bet_03"],[38016,1,"sounds/Slot/Default/Event_Bet_03"],[38017,1,"sounds/Slot/Default/Event_Bet_04"],[38018,1,"sounds/Slot/Default/Event_Bet_04"],[38019,1,"sounds/Slot/Default/Event_Bet_05"],[38020,1,"sounds/Slot/Default/Event_Bet_05"],[38021,1,"sounds/Slot/Default/Event_Bet_06"],[38022,1,"sounds/Slot/Default/Event_Bet_06"],[38023,1,"sounds/Slot/Default/Event_Bet_07"],[38024,1,"sounds/Slot/Default/Event_Bet_07"],[38025,1,"sounds/Slot/Default/Event_Bet_08"],[38026,1,"sounds/Slot/Default/Event_Bet_08"],[38027,1,"sounds/Slot/Default/Event_Bet_09"],[38028,1,"sounds/Slot/Default/Event_Bet_09"],[38029,1,"sounds/Slot/Default/Event_Bet_10"],[38030,1,"sounds/Slot/Default/Event_Bet_10"],[38071,1,"sounds/Slot/Default/Event_ReelStop_01"],[38072,1,"sounds/Slot/Default/Event_ReelStop_01"],[38073,1,"sounds/Slot/Default/Event_ReelStop_01"],[38074,1,"sounds/Slot/Default/Event_ReelStop_01"],[38075,1,"sounds/Slot/Default/Event_ReelStop_01"],[38091,1,"sounds/Slot/Default/Event_AllLineWin"],[38096,2,"sounds/Slot/Default/Event_BigWinMusic"],[38097,2,"sounds/Slot/Default/Event_BigWinMusic"],[38098,2,"sounds/Slot/Default/Event_BigWinMusic"],[38099,2,"sounds/Slot/Default/Event_BigWinMusic"],[38100,2,"sounds/Slot/Default/Event_BigWinMusic"],[38101,1,"sounds/Slot/Default/Event_Bigwin_PartA"],[38102,1,"sounds/Slot/Default/Event_Bigwin_PartB"],[38103,1,"sounds/Slot/Default/Event_Bigwin_PartC"],[38105,1,"sounds/Slot/Default/Event_Bigwin_A"],[38106,1,"sounds/Slot/Default/Event_Bigwin_B"],[38107,1,"sounds/Slot/Default/Event_Bigwin_C"],[38108,1,"sounds/Slot/Default/Event_Bigwin_D"],[38111,2,"sounds/Slot/Default/Event_JackPot"],[38112,2,"sounds/Slot/Default/Event_JackPot"],[38113,2,"sounds/Slot/Default/Event_JackPot"],[38114,2,"sounds/Slot/Default/Event_JackPot"],[38115,2,"sounds/Slot/Default/Event_JackPot"],[38121,1,"sounds/Slot/Default/Event_GotScore"],[38601,1,"sounds/Slot/Default/Classic_Random1"],[38602,1,"sounds/Slot/Default/Classic_Random2"],[38603,1,"sounds/Slot/Default/Classic_Random3"]]
},
"#slot_038#line" :
{
"cols" : ["Id","LineId"],
"rows" : [[1,1],[2,14],[3,27],[4,6],[5,22],[6,4],[7,17],[8,24],[9,11]]
},
"#slot_038#pay" :
{
"cols" : ["Id","X1","X2","X3"],
"rows" : [[0,0,0,0],[1,0,0,0],[2,0,0,90],[3,0,0,67.5],[4,0,0,45],[5,0,0,22.5],[6,0,0,18],[7,0,0,13.5]]
},
"#slot_038#symbol" :
{
"cols" : ["Id","PicIndex","SameShift","ContinuousPic","PicNext","PicPrev"],
"rows" : [[0,null,0,null,null,null],[1,null,0,null,null,null],[2,null,0,null,null,null],[3,null,0,null,null,null],[4,null,0,null,null,null],[5,null,0,null,null,null],[6,null,0,null,null,null],[7,null,0,null,null,null],[8,null,5,[8,9,10],9,null],[9,null,5,null,10,8],[10,null,5,null,null,9],[11,null,5,[11,12,13],12,null],[12,null,5,null,13,11],[13,null,5,null,null,12],[14,null,5,[14,15,16],15,null],[15,null,5,null,16,14],[16,null,5,null,null,15]]
},
"#slot_038#fixed" :
{
"cols" : ["Id","BValue","CValue"],
"rows" : [[1,9,null],[3,1,null],[4,20,null],[5,2,null],[6,0,null],[7,1,null],[11,null,null],[12,null,null],[13,null,null],[14,null,null],[15,null,null],[1001,135,null],[1002,45,null],[1003,22.5,null],[1004,9,null],[1005,9,null],[1006,9,null],[1007,4.5,null]]
}
}