初始化 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,35 @@
{
"#table3031#sound" :
{
"cols" : ["Id","Type","PathZnTw","PathEn"],
"rows" : [[3031001,2,"sounds/Slot/Slot1202/Sushi_BGM",null]]
},
"#table3031#string" :
{
"cols" : ["Id","MsgEn","MsgZnTw","MsgZnCh","MsgVi","MsgTh"],
"rows" : [[1,"INFO","INFO","INFO","INFO","INFO"],[2,"Bet","總押注","总押注","Bet","Bet"],[3,"Win","獲勝","获胜","Win","Win"],[4,"<size=24>REBET</size>","續押","续押","<size=24>REBET</size>","<size=24>REBET</size>"],[5,"<size=24>CLEAR</size>","清除","清除","<size=24>CLEAR</size>","<size=24>CLEAR</size>"],[6,"Bet is max.","押注已達上限","押注已达上限","Bet is max.","Bet is max."],[7,"<size=66>Please place your bet.</size>","請押注","请押注","<size=66>Please place your bet.</size>","<size=66>Please place your bet.</size>"],[8,"Bets synchronization.","同步押注資訊中","同步押注信息中","Bets synchronization.","Bets synchronization."],[9,"The final bet is subject to the system record.","最終押注結果以系統記錄為準","最终押注结果以系统记录为准","The final bet is subject to the system record.","The final bet is subject to the system record."],[10,"Processing result....\n<size=52>please wait for {0} seconds.</size>","開獎中,請稍等{0}","开奖中,请稍等{0}","Processing result....\n<size=52>please wait for {0} seconds.</size>","Processing result....\n<size=52>please wait for {0} seconds.</size>"],[11,"<size=60><b>PLAYER</b></size>","<size=85>閒家</size>","<size=85>闲家</size>","<size=60><b>PLAYER</b></size>","<size=60><b>PLAYER</b></size>"],[12,"<size=60><b>BANKER</b></size>","<size=85>莊家</size>","<size=85>庄家</size>","<size=60><b>BANKER</b></size>","<size=60><b>BANKER</b></size>"],[13,"Shuffling","洗牌中","洗牌中","Shuffling","Shuffling"],[14,"The bet must be greater than {0}","押注需大於{0}","押注需大于{0}","The bet must be greater than {0}","The bet must be greater than {0}"],[101,"Bet quota","押注額度","押注额度","Bet quota","Bet quota"],[102,"Description","押注說明","押注说明","Description","Description"],[103,"<size=30>VIP Tiers would have an impact on the placed bet.</size>","<size=30> VIP影響可押注金額,等級越高上限越高!</size>","<size=30> VIP影响可押注金额,等级越高上限越高!</size>","<size=30>VIP Tiers would have an impact on the placed bet.</size>","<size=30>VIP Tiers would have an impact on the placed bet.</size>"],[104,"<size=28>VIP Tiers</size>","<size=28>VIP卡別</size>","<size=28>VIP卡别</size>","<size=28>VIP Tiers</size>","<size=28>VIP Tiers</size>"],[105,"<size=28>B/P Max</size>","<size=28>莊/閒上限</size>","<size=28>庄/闲上限</size>","<size=28>B/P Max</size>","<size=28>B/P Max</size>"],[106,"<size=28>Others Max</size>","<size=28>其他上限</size>","<size=28>其他上限</size>","<size=28>Others Max</size>","<size=28>Others Max</size>"],[107,"Normal","<size=30>一般</size>","<size=30>一般</size>","Normal","Normal"],[108,"Silver","<size=30>白銀</size>","<size=30>白银</size>","Silver","Silver"],[109,"Gold","<size=30>黃金</size>","<size=30>黄金</size>","Gold","Gold"],[110,"Diamond","<size=30>晶鑽</size>","<size=30>晶钻</size>","Diamond","Diamond"],[111,"Stars","<size=30>星辰</size>","<size=30>星辰</size>","Stars","Stars"],[112,"Supreme","<size=30>至尊</size>","<size=30>至尊</size>","Supreme","Supreme"],[113,null,"玩家可預猜莊閒牌點及組合進行下注,每區皆有不同的賠率。
【續押】會將上一次的押注疊加到現在盤面。
*若押注倒數結束前斷線或離開遊戲,則該局結果不計,直接退還押注。",null,null,null],[151,"<size=18><color=#362408FF>ROADMAP</color></size>","<size=30>珠路</size>","<size=30>珠路</size>","<size=18><color=#362408FF>ROADMAP</color></size>","<size=18><color=#362408FF>ROADMAP</color></size>"],[152,"N.R.P","閒問路","闲问路","N.R.P","N.R.P"],[153,"N.R.B","莊問路","庄问路","N.R.B","N.R.B"],[154,"B :","莊 :","庄 :","B :","B :"],[155,"P :","閒 :","闲 :","P :","P :"],[156,"T :","和 :","和 :","T :","T :"],[157,"B.P :","莊對 :","庄对 :","B.P :","B.P :"],[158,"P.P :","閒對 :","闲对 :","P.P :","P.P :"],[159,"B","莊","庄","B","B"],[160,"P","閒","闲","P","P"],[161,"T","和","和","T","T"],[162,"<color=yellow>S6</color>","莊<color=yellow><size=22>6</size></color>","庄<color=yellow><size=22>6</size></color>","<color=yellow>S6</color>","<color=yellow>S6</color>"],[401,"System Message","系統訊息","系统讯息","Tin nhăn hệ thông","ข้อความระบบ"],[402,"Idle timeout \n Back to the game lobby.","閒置時間過久\n請重新進入遊戲","闲置时间过久\n请重新进入游戏","Gián đoạn kết nối","ไม่มีการเชื่อมต่อ"],[403,"The game is in progress,\nplease wait a second.","正在押注中\n請等待本局結束","正在押注中\n请等待本局结束","Trò chơi đang diễn ra \n xin vui lòng chờ một giây.","เกมกำลังดำเนินอยู่ \n โปรดรอสักครู่"],[404,"Not enough money.","金額不足\n請前往轉點","金额不足\n请前往转点","Số tiền không đủ","ยอดเงินไม่เพียงพอ"],[405,"Please wait a second.","{0}桌{1}靴{2}局進行中\n請結束後再進入","{0}桌{1}靴{2}局進行中\n请结束后再进入","Vui lòng đợi một chút.","โปรดรอสักครู่"],[406,"System error \n Back to the game lobby.","系統錯誤\n請重新進入遊戲","系统错误\n请重新进入游戏","Gián đoạn kết nối","ไม่มีการเชื่อมต่อ"],[407,"Bet is max.","押注已達上限","押注已达上限","Đặt cược là tối đa.","เดิมพันสูงสุด"],[408,"The bet must be greater than {0}","押注需大於{0}","押注需大于{0}","Đặt cược phải lớn hơn {0}.","เงินเดิมพันต้องมากกว่า {0}"]]
},
"#table3031#paytable" :
{
"cols" : ["Id","Big","Small","Odd","Even","Red4","Red3","Red1","Red0"],
"rows" : [[1,0.95,0.95,0.95,0.95,13.5,2.7,2.7,13.5],[2,1.1,1.1,1.1,1.1,22.5,3.9,3.9,22.5]]
},
"#table3031#pay" :
{
"cols" : ["Id","Big","Small","Odd","Even","Red4","Red3","Red1","Red0"],
"rows" : [[1,1,0,0,1,1,0,0,0],[2,1,0,1,0,0,1,0,0],[3,0,0,0,1,0,0,0,0],[4,0,1,1,0,0,0,1,0],[5,0,1,0,1,0,0,0,1]]
},
"#table3031#fixed" :
{
"cols" : ["Id","BValue","CValue"],
"rows" : [[1,null,null],[2,10,null],[11,null,null],[12,null,null],[13,null,null],[14,null,null],[15,null,null],[16,null,null],[17,null,null],[18,null,null],[111,null,25000],[112,null,1000],[113,null,1200],[114,null,1500],[115,null,100],[116,null,3000],[117,null,850],[121,null,null],[122,null,1250],[123,null,3000],[124,null,1000],[141,null,null],[142,null,500],[143,null,1000],[144,null,500],[145,null,1000],[146,null,1500],[147,null,3500],[148,null,800]]
},
"#table3031#bet" :
{
"cols" : ["Id","Show","Type1","Type2","Type3","Type4"],
"rows" : [[1,[100,500000],[100,500000],[100,500000],[100,50000],[100,50000]],[2,[100,500000],[100,500000],[100,500000],[100,50000],[100,50000]],[3,[100,500000],[100,500000],[100,500000],[100,50000],[100,50000]]]
}
}