# Pk足球 ## 定義表 下注, 輸贏, 籌碼限額 ... ``` [失敗,獲勝,0球,1球,2球,3球,4球,5球] ``` ## client -> server 为cli端请求srv端的cmd, 透过 cbId 做消息配对, 响应后c端先判断 err 字段是否为空作例外处理. ### RoomStatus 请求参数: { "svr": "pkfootball", // <string> 游戏名 "route": "pkfootball.roomStatus", // <string> 游戏名.的cmd "args": null, // <any> "cbId": 3 } <table> <thead class="ant-table-thead"> <tr> <th key="name" style="width: 500px">名称</th> <th key="type">类型</th> <th key="required">是否必须</th> <th key="default">默认值</th> <th key="desc">备注</th> <th key="sub">其他信息</th> </tr> </thead> <tbody className="ant-table-tbody"> <tr key="0-0"> <td key="0"> <span style="padding-left: 0px" ><span style="color: #8c8a8a"></span> svr</span > </td> <td key="1"><span>string</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap"></span></td> <td key="5"></td> </tr> <tr key="0-1"> <td key="0"> <span style="padding-left: 0px" ><span style="color: #8c8a8a"></span> route</span > </td> <td key="1"><span>string</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap"></span></td> <td key="5"></td> </tr> <tr key="0-2"> <td key="0"> <span style="padding-left: 0px" ><span style="color: #8c8a8a"></span> cbId</span > </td> <td key="1"><span>number</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap"></span></td> <td key="5"></td> </tr> <tr key="0-3"> <td key="0"> <span style="padding-left: 0px" ><span style="color: #8c8a8a"></span> args</span > </td> <td key="1"><span>object</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap"></span></td> <td key="5"></td> </tr> <tr key="0-3-0"> <td key="0"> <span style="padding-left: 20px" ><span style="color: #8c8a8a">├-</span> 1</span > </td> <td key="1"><span>object</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap"></span></td> <td key="5"></td> </tr> <tr key="0-3-0-0"> <td key="0"> <span style="padding-left: 40px" ><span style="color: #8c8a8a">├─</span> id</span > </td> <td key="1"><span>number</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap"></span></td> <td key="5"></td> </tr> <tr key="0-3-0-1"> <td key="0"> <span style="padding-left: 40px" ><span style="color: #8c8a8a">├─</span> name</span > </td> <td key="1"><span>string</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap">房间标题</span></td> <td key="5"></td> </tr> <tr key="0-3-0-2"> <td key="0"> <span style="padding-left: 40px" ><span style="color: #8c8a8a">├─</span> gametype_name</span > </td> <td key="1"><span>string</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap">游戏代号</span></td> <td key="5"></td> </tr> <tr key="0-3-0-3"> <td key="0"> <span style="padding-left: 40px" ><span style="color: #8c8a8a">├─</span> from_wallet</span > </td> <td key="1"><span>string</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap">钱包 from</span></td> <td key="5"></td> </tr> <tr key="0-3-0-4"> <td key="0"> <span style="padding-left: 40px" ><span style="color: #8c8a8a">├─</span> to_wallet</span > </td> <td key="1"><span>string</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap">钱包 to</span></td> <td key="5"></td> </tr> <tr key="0-3-0-5"> <td key="0"> <span style="padding-left: 40px" ><span style="color: #8c8a8a">├─</span> bet_level</span > </td> <td key="1"><span>number []</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap">筹码 下注阵列</span></td> <td key="5"> <p key="3"> <span style="font-weight: '700'">item 类型: </span><span>number</span> </p> </td> </tr> <tr key="array-1"> <td key="0"> <span style="padding-left: 60px" ><span style="color: #8c8a8a">├─</span> </span> </td> <td key="1"><span></span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"> <span style="white-space: pre-wrap">筹码 比值 1: 10000</span> </td> <td key="5"></td> </tr> <tr key="0-3-0-6"> <td key="0"> <span style="padding-left: 40px" ><span style="color: #8c8a8a">├─</span> player_bet_upper_limit</span > </td> <td key="1"><span>number []</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"> <span style="white-space: pre-wrap">个人上限 比值 1: 10000</span> </td> <td key="5"> <p key="3"> <span style="font-weight: '700'">item 类型: </span><span>number</span> </p> </td> </tr> <tr key="array-2"> <td key="0"> <span style="padding-left: 60px" ><span style="color: #8c8a8a">├─</span> </span> </td> <td key="1"><span></span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"> <span style="white-space: pre-wrap" >[失敗,獲勝,0球,1球,2球,3球,4球,5球,] 比值 1: 10000</span > </td> <td key="5"></td> </tr> <tr key="0-3-0-7"> <td key="0"> <span style="padding-left: 40px" ><span style="color: #8c8a8a">├─</span> player_bet_lower_limit</span > </td> <td key="1"><span>number []</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"> <span style="white-space: pre-wrap">个人下限 比值 1: 10000</span> </td> <td key="5"> <p key="3"> <span style="font-weight: '700'">item 类型: </span><span>number</span> </p> </td> </tr> <tr key="array-3"> <td key="0"> <span style="padding-left: 60px" ><span style="color: #8c8a8a">├─</span> </span> </td> <td key="1"><span></span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"> <span style="white-space: pre-wrap" >[失敗,獲勝,0球,1球,2球,3球,4球,5球,] 比值 1: 10000</span > </td> <td key="5"></td> </tr> <tr key="0-3-0-8"> <td key="0"> <span style="padding-left: 40px" ><span style="color: #8c8a8a">├─</span> area_bet_upper_limit</span > </td> <td key="1"><span>number []</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"> <span style="white-space: pre-wrap">单区上限 比值 1: 10000</span> </td> <td key="5"> <p key="3"> <span style="font-weight: '700'">item 类型: </span><span>number</span> </p> </td> </tr> <tr key="array-4"> <td key="0"> <span style="padding-left: 60px" ><span style="color: #8c8a8a">├─</span> </span> </td> <td key="1"><span></span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"> <span style="white-space: pre-wrap" >[失敗,獲勝,0球,1球,2球,3球,4球,5球,] 比值 1: 10000</span > </td> <td key="5"></td> </tr> <tr key="0-4"> <td key="0"> <span style="padding-left: 0px" ><span style="color: #8c8a8a"></span> err</span > </td> <td key="1"><span>string</span></td> <td key="2">必须</td> <td key="3"></td> <td key="4"><span style="white-space: pre-wrap">错误提示</span></td> <td key="5"></td> </tr> </tbody> </table> 返回数据: ``` { "svr": "", "route": "", "cbId": 3, "args": { "25": { "id": 25, "name": "P125", "gametype_name": "世足PK賽", "from_wallet": "TCTfPcF1wTRDK1qFAb7w2zGjF11WE9v8DA", "to_wallet": "TRCJhQw5u4F3wZ1PkY199p3jm2XN4WjKYR", "bet_level": [ 10000000, 50000000, 100000000, 200000000, 500000000, 1000000000 ], "player_bet_upper_limit": [ 1000000000, 1000000000, 70000000, 300000000, 600000000, 600000000, 300000000, 70000000 ], "player_bet_lower_limit": [ 10000000, 10000000, 10000000, 10000000, 10000000, 10000000, 10000000, 10000000 ], "area_bet_upper_limit": [ 100000000000, 100000000000, 7000000000, 30000000000, 60000000000, 60000000000, 30000000000, 7000000000 ], "tmp_bet_balance_limit": 10000000000 } }, "err": null } ``` ### JoinGame 请求参数: ``` { "svr": "pkfootball", "route": "pkfootball.joinGame", "args": { "room_id":25 }, "cbId": 3 } ``` 返回数据: ``` { "svr": "", "route": "", "cbId": 3, "args": { "info": { "id": 25, "name": "P125", "gametype_name": "世足PK賽", "from_wallet": "TCTfPcF1wTRDK1qFAb7w2zGjF11WE9v8DA", "to_wallet": "TRCJhQw5u4F3wZ1PkY199p3jm2XN4WjKYR", "bet_level": [ 10000000, 50000000, 100000000, 200000000, 500000000, 1000000000 ], "player_bet_upper_limit": [ 1000000000, 1000000000, 70000000, 300000000, 600000000, 600000000, 300000000, 70000000 ], "player_bet_lower_limit": [ 10000000, 10000000, 10000000, 10000000, 10000000, 10000000, 10000000, 10000000 ], "area_bet_upper_limit": [ 100000000000, 100000000000, 7000000000, 30000000000, 60000000000, 60000000000, 30000000000, 7000000000 ], "tmp_bet_balance_limit": 10000000000 }, "self": { "id": 9896316, "nickname": "666666" }, "player_count": 1, "history": { "history": [ { "code": [ 進球:0左,12左上,34中,56右上,7右 沒進:8左,9a左上,bc中,de右上,f右 "6", "6", "b", "3", "1" ], "ball": [ 1.進 2.沒進 1, 進 第一球 1, 進 第二球 2, 沒進 第三球 1, 進 第四球 1 進 第五球 ], "win_area": [ -1, 失敗 1, 獲勝 -1, 0球 -1, 1球 -1, 2球 -1, 3球 1, 4球 -1 5球 ] }, ], "win_ratio": [ 45, 獲勝 54 失敗 ], "good_road": 0, "good_road_name": "沒有" }, "room_chips": [ 0, 0, 0, 0, 0, 0, 0, 0 ], "bets": [ 0, 0, 0, 0, 0, 0, 0, 0 ], "room_remain_chips": [ 100000000000, 100000000000, 7000000000, 30000000000, 60000000000, 60000000000, 30000000000, 7000000000 ], "round_uuid": "PKFBP1252211020031", "bet_ratio": [ 0, 失敗 0 獲勝 ] }, "err": null } ``` ### Leave 请求参数: ``` { "svr": "pkfootball", "route": "pkfootball.leave", "args": {}, "cbId": 3 } ``` 返回数据: ``` { "svr": "", "route": "", "cbId": 3, "args": "成功啦", "err": "" } ``` ### Bet 请求参数: ``` { "svr": "pkfootball", "route": "pkfootball.bet", "args": { "bets":[0,10000000,10000000,10000000,10000000,10000000,10000000,10000000], "room_id":25 }, "cbId": 3 } ``` 返回数据: ``` { "svr": "", "route": "", "cbId": 3, "args": { "room_id": 25, "room_chips": [ 0, 10000000, 10000000, 10000000, 10000000, 10000000, 10000000, 10000000 ], "room_remain_chips": [ 100010000000, 99990000000, 6990000000, 29990000000, 59990000000, 59990000000, 29990000000, 6990000000 ], "my_bets": [ 0, 10000000, 10000000, 10000000, 10000000, 10000000, 10000000, 10000000 ], "before_balance": 100044500000, "after_balance": 99974500000, "bet_ratio": [ 0, 失敗 100 獲勝 ] }, "err": null } ``` ## server -> client RestStage 推送时间: 休息阶段开始 route:"pkfootball.restStage" ``` { "svr": "", "route": "pkfootball.restStage", "cbId": 0, "args": { "cd": 5, "cd_max": 5, "msg": "等待開局", "round_uuid": "BBJB1022207270313" }, "err": "" } ``` ### RestStageMid 推送时间: 中途加入休息阶段 route:"pkfootball.restStageMid" ``` { "svr": "", "route": "pkfootball.restStageMid", "cbId": 0, "args": { "cd": 2, "cd_max": 5, "msg": "等待開局" }, "err": "" } ``` ### BetStage 推送时间: 下注阶段开始 route:"pkfootball.restStage" ``` { "svr": "", "route": "pkfootball.betStage", "cbId": 0, "args": { "cd": 25, "cd_max": 25, "msg": "開始下注" }, "err": "" } ``` ### BetStageMid 推送时间: 中途加入下注阶段 route:"pkfootball.restStageMid" ``` { "svr": "", "route": "pkfootball.betStageMid", "cbId": 0, "args": { "cd": 10, "cd_max": 25, "msg": "開放下注" }, "err": "" } ``` ### HashStage 推送时间: 開始取得哈希 route:"pkfootball.restStage" { "svr": "", "route": "pkfootball.hashStage", "cbId": 0, "args": { "cd": 30, "cd_max": 30, "msg": "等待哈希值" }, "err": "" } ### HashStageMid 推送时间: 中途加入取哈希阶段 route:"pkfootball.restStageMid" ``` { "svr": "", "route": "pkfootball.hashStageMid", "cbId": 0, "args": { "cd": 6, "cd_max": 30, "msg": "等待哈希值" }, "err": "" } ``` ### SettleStage 返回數據: ``` { "svr": "", "route": "pkfootball.settleStage", "cbId": 0, "args": { "cd": 60, "cd_max": 60, "msg": "結算階段", "block_hash": "0000000001b70b4ef77f16be0fad8a6f6ba67ba4c8cc57f954d7635b5398d134", "block_number": 28773198, "block_tx_id": "190b43de2f0a910ab540d6c1f96f0b5429e87b5308c4264d9bdfb0620e5494f8", "code": [ "8", "d", "1", "3", "4" ], "ball": [ 2, 2, 1, 1, 1 ], "win_area": [ -1, 1, -1, -1, -1, 1, -1, -1 ], "win_ratio": [ 45, 55 ] }, "err": null } ``` ### SettleStageMid 推送时间: 中途加入結算階段 返回數據: ``` { "svr": "", "route": "pkfootball.settleStageMid", "cbId": 0, "args": { "cd": 7, "cd_max": 60, "msg": "结算完成", "block_hash": "0000000001b70b34518c7b41dbbc66a03aa1c22471d6fc50a55db7288c65f48f", "block_number": 28773172, "block_tx_id": "9182b7a9f25761e13366738c22917be8d0db73d27b4c6a67a6c2075201b3b3ef", "code": [ "5", "f", "4", "8", "f" ], "ball": [ 1, 2, 1, 2, 2 ], "win_area": [ 1, -1, -1, -1, 1, -1, -1, -1 ], "win_ratio": [ 43, 56 ] }, "err": null } ``` ### RoomPlayerCounter 推送时间: 每n秒同步給房內玩家 route: "football.roomPlayerCounter" ``` { "svr": "", "route": "football.roomPlayerCounter", "cbId": 0, "args": 1, // 人數 "err": "" } ``` ### ChangeStage 推送时间: 加入观察者后, 每局切换都以这个做路子 route: "football.changeStage" 返回數據: ``` { "svr": "", "route": "pkfootball.changeStage", "cbId": 0, "args": { "id": 25, "stage": 4, "stage_name": "结算階段", "cd": 18, "cd_max": 60, "history": { "history": [ { "code": [ "6", "6", "b", "3", "1" ], "ball": [ 1, 1, 2, 1, 1 ], "win_area": [ -1, 1, -1, -1, -1, -1, 1, -1 ] }, { "code": [ "0", "c", "0", "5", "c" ], "ball": [ 1, 2, 1, 1, 2 ], "win_area": [ -1, 1, -1, -1, -1, 1, -1, -1 ] ], "win_ratio": [ 46, 53 ], "good_road": 0, "good_road_name": "沒有" }, "player_count": 1, "bets": [ 0, 0, 0, 0, 0, 0, 0, 0 ] }, "err": null } ``` ### SettleReport 返回數據: ``` { "svr": "", "route": "pkfootball.settleReport", "cbId": 0, "args": { "id": "PKFBP1252211020033-09896316", "round_uuid": "PKFBP1252211020033", "game_type": 24, "game_code": "PKFB", "game_name": "世足PK賽", "room_id": 25, "round": 33, "sub_round": 0, "player_id": 9896316, "dealer_id": 0, "total_bet": 70000000, "you_xiao_tou_zhu": 69500000, "you_xiao_ying_fen": 0, "total_winlose": -20500000, "bets": [ 0, 10000000, 10000000, 10000000, 10000000, 10000000, 10000000, 10000000 ], "total_real_bet": 0, "prepay": 0, "winloses": [ 0, 9500000, -10000000, -10000000, -10000000, 20000000, -10000000, -10000000 ], "date": "", "created_at": "2022-11-02T10:50:05.33429727+08:00", "type": 1, "status": 1, "currency": "TWD" }, "err": null } ```