hnmj

11


海南麻将接口

<h1>海南麻将协议</h1> <p>[TOC]</p> <h2>协议基本说明</h2> <pre><code>按Unix换行符(\r\n)分隔socket流,每条协议都为json格式 json数据的固定格式为:{cmd:345, msg:{...}} msg可以没有</code></pre> <h2>平台ID</h2> <p>固定为<strong>1</strong></p> <hr /> <h2>麻将牌的定义</h2> <pre><code class="language-python"> DONG_FENG = 42 XI_FENG = 44 NAN_FENG = 46 BEI_FENG = 48 HONG_ZHONG = 51 FA = 53 BAI = 55 CHUN = 62 XIA = 64 QIU = 66 DONG = 68 MEI = 72 LAN = 74 ZHU = 76 JU = 78 FENG_PAI = (DONG_FENG, XI_FENG, NAN_FENG, BEI_FENG) JIAN_PAI = (HONG_ZHONG, FA, BAI) HUA_PAI = (CHUN, XIA, QIU, DONG, MEI, LAN, ZHU, JU) ALL_PAPER_CARDS = ( 11, 12, 13, 14, 15, 16, 17, 18, 19, # 万字: 1~9 21, 22, 23, 24, 25, 26, 27, 28, 29, # 线条: 1~9 31, 32, 33, 34, 35, 36, 37, 38, 39, # 筒子:1~9 DONG_FENG, XI_FENG, NAN_FENG, BEI_FENG, # 东西南北 HONG_ZHONG, FA, BAI, # 中发白 CHUN, XIA, QIU, DONG, MEI, LAN, ZHU, JU ) </code></pre> <h3>游戏中的常量定义</h3> <p>ACTION_TYPE_CHU = 1 ACTION_TYPE_CHI = 2 ACTION_TYPE_PENG = 3 ACTION_TYPE_GONG_GANG = 4 ACTION_TYPE_AN_GANG = 5 ACTION_TYPE_MING_GANG = 6 ACTION_TYPE_BU = 7 ACTION_TYPE_GUO = 8 ACTION_TYPE_HU = 9 ACTION_TYPE_ZI_MO = 10 ACTION_TYPE_ZHUA_NIAO = 11 ACTION_TYPE_QIANG_GANG_HU = 12</p> <p>T_IDLE = 0 # 空闲中 T_READY = 1 # 准备中 T_PLAYING = 2 # 游戏中 T_CHECK_OUT = 3 # 结算中</p> <p>T_IN_IDLE = 0 # 无状态 T_IN_CHU_PAI = 1 # 在出牌中 T_IN_PUBLIC_OPRATE = 2 # 公共操作过程中 T_IN_MO_PAI = 3 # 在摸牌中暗(未公示) T_IN_MO_PAI_CALL = 4 # 在摸牌后的呼叫中 T_IN_MING_GANG_PAI_CALL = 5 # 抢杠胡判断流程 T_IN_GONG_GANG_PAI_CALL = 6 # 抢杠胡判断流程 T_IN_AN_GANG_PAI_CALL = 7 # 抢杠胡判断流程 T_IN_GANG_PAI_CALL = 8 # 杠牌操作流程 T_IN_OTHER_GANG_PAI_CALL = 9 # 杠牌后自己不可操作别人的操作流程 T_IN_WILL_BEGIN_OPTION = 10 # 开局前的玩家操作选项 T_IN_TIAN_HU = 12 # 庄家天胡 T_IN_TIAN_HU_AN_GANG_MO_PAI = 13 # 天胡暗杠摸牌 T_IN_DI_HU_CHU_PAI = 13 # 庄家天胡结束出牌 地胡判断阶段</p> <p>PASS_SECONDS = 1 # 过场时间 TIAN_HU_SECONDS = 10 # 天胡时间 CALL_SECONDS = 10 # 等待玩家响应的秒数 ATTACK_SECONDS = 10 # 出牌等待时间 FIRST_CALL_SECONDS = 10 # 第一位玩家的等待时间 CHECKOUT_SECONDS = 10 OPEARATE_SECONDS = 120 HEART_BEAT_SECONDS = 10 # 玩家端的心跳超时时间</p> <h3>通讯中的错误码</h3> <pre><code class="language-python"># 服务端错误码列表 OK = 0 # 请求正常 DATA_BROKEN = -1 # 客户端请求数据错误,不符合即定格式 TOKEN_ERROR = -2 # TOKEN错误 SYSTEM_ERROR = -3 # 系统错误 DUPLICATE_LOGIN = -4 # 客户端收到通知,账号已在别处登陆 SEAT_FULL = -5 # 坐位已满 TABLE_NOT_EXIST = -6 # 桌子不存在 USER_NOT_EXIST = -7 # 玩家数据不存在 RULE_ERROR = -8 # 出牌不符合规则 NOT_YOUR_TURN = -9 # 当前循问的玩家不是你 CARD_NOT_EXIST = -10 # 所出牌不存在 IN_OTHER_ROOM = -11 # 玩家当前已在其它房间中 TABLE_FULL = -12 # 桌子已满 NOT_YOUR_ROOM = -13 # 不是你的桌子无法解散 COMMAND_DENNY = -14 # 命令不允许被执行</code></pre> <h2>协议列表--非游戏过程</h2> <h3>心跳协议</h3> <p>命令号: <strong>101</strong> 心跳时间约定为<strong>5</strong>秒</p> <pre><code class="language-js">// 请求 { timestamp : 123232323.33 //发起消息的心跳时间 } // 应答 { timestamp : 123232323.33 //转发客户端消息的心跳时间,客户端凭此时间的对比值来确定网络质量 }</code></pre> <hr /> <h3>停服命令</h3> <p>命令号: <strong>103</strong> 必须是指定IP地址的WEB发送消息过来</p> <pre><code class="language-js">// 请求 { key : fdafdsafdsa, // 简单密钥 isForce: true | false, // 是否强制, 必须先发送非强制,并等待一段时间后才可以强制结束 } // 应答 { server_id: 123, // 服务器ID in_stop: true | false, // 停机状态 }</code></pre> <hr /> <h3>网关认证</h3> <p>命令号:<strong>201</strong></p> <pre><code class="language-js">// 请求 { uid : 22, // 玩家ID key : abcabc, // 认证key 登录返回的token platformID : 1, // 游戏平台ID 不是子游戏类型 } // 应答 { code : 0 //0正确 1校验失败 DATA_BROKEN = -1 # 客户端请求数据错误,不符合即定格式 TOKEN_ERROR = -2 # token错误 }</code></pre> <hr /> <h3>换服通知</h3> <p>命令号:<strong>105</strong></p> <pre><code class="language-js">// 服务器广播消息,不需要请求 { host: 11.1.1.1, // 新的服务器地址 port: 8889, // 新的服务器端口 }</code></pre> <h3>请求进入房间</h3> <p>命令号:<strong>202</strong></p> <pre><code class="language-js">// 请求 { roomID : 222333, x: 333.212, // 经度 y: 12.323, // 纬度 data : xxx //客户端自定义的转发型数据 }, // 响应 // 如果进房间成功,后面接着下发房间内的玩家信息,以及房间配置信息 { code : 0, // 错误码请上面的 《服务端错误码列表》 如果code为0,则有以下属性 roomID : 111111 }, TABLE_NOT_EXIST = -6 # 桌子不存在 NOT_CLUB_MEMBER = -27 # 不是俱乐部成员 FORBIDDEN = -29 # 禁止加入 NOT_OWNER_FRIEND = -58 # 非房主好友</code></pre> <h3>801下发进入房间</h3> <p>命令号:<strong>801</strong></p> <pre><code class="language-js">// 请求 { }, // 如果进房间成功,后面接着下发房间内的玩家信息,以及房间配置信息 { code : 0, // 错误码请上面的 《服务端错误码列表》 如果code为0,则有以下属性 roomID : 111111 gameType: 8 },</code></pre> <hr /> <h3>842同步房间信息</h3> <p>命令号:<strong>842</strong></p> <pre><code class="language-js">// 请求 { }, // 如果进房间成功,后面接着下发房间内的玩家信息,以及房间配置信息 { code : 0, // 错误码请上面的 《服务端错误码列表》 如果code为0,则有以下属性 },</code></pre> <hr /> <h3>请求退出房间 退出房间 以及其他玩家退出也用这个</h3> <p>命令号:<strong>802</strong></p> <pre><code class="language-js">// 请求 { } // 返回,如果成功则此消息为广播消息 { uid: 0, // 玩家ID code : 1, // 0普通离开 1房间解散 2被踢 3全部游戏结束导致解散房间 kickTime : 30 // code为2时用到 }</code></pre> <hr /> <h3>下发玩家进入房间</h3> <p>命令号:<strong>804</strong></p> <pre><code class="language-js">{ uid : 22, data : xxx, // 客户端自定义的属性 score : -3, // 积分 IP : '222.222.222.222', // 登录IP seatID : 2, // 坐位ID isPrepare : 1, // 1已准备 0未准备 status: 1, // 0空闲中,1等待中,2游戏中 shouPai : [31,32,33,21], // 手牌,只有自己有此属性 offline: true|false, // 玩家离线标志 shangGa:-1|0~5 , //玩家是否上嘎 -1 标识本局没上嘎 0~5为上嘎分 shangGaScore:1,//上嘎分,每局不清,下次上嘎不能小于本值 countCard:5,//剩余手牌数量 tuoGuan:1,//托管状态 chengPai: [{cards: [13, 14, 15], actType: 2}, {cards: [13, 14, 15], actType: 2}], // 桌牌列表 [[牌型, 牌1, 牌2, 牌3,], ] 如果有暗杠 仅自己可见暗杠牌 outCards: [], // 自己的出牌记录 buHuaCards:[]//补花牌 louHuCards : [11,12], //漏胡的‰Œ列表 isLockCard : 1, //是否为锁定手牌状态 handCards:[] //手牌仅自己可见 operates:[] //可进行操作仅自己可见 lock_cards:[]//锁定出牌 用于天听情况下 只能出锁定牌 louHu:0 //是否漏胡尽自己可见 },</code></pre> <h3>下发房间信息</h3> <p>客户端据此获取房间配置、以及游戏当前进展的信息。参数定义参见PHP跟游戏服的接口[createRoom] 命令号:<strong>803</strong></p> <pre><code class="language-js">//回应 { config : { gameType : 8, //游戏类型ID totalRound : 8, //设置局数 ruleType: 1, // 子规则类型,如果大类型需要细分小类型通过此字段标识 huType : 2, //胡牌类型 zhuangXian : 0, //庄闲 0是不选择 1是选择 isSevenPairs : 1, //可胡七对 isHongZhong : 0, //是否开启癞子 limitScore: 20, // 分封顶 maxPlayer : 0, // 最大玩家数 ruleDetails: {}, // 附加规则 isFan:0, // 有无番 tuoGuan:0, //托管 lianKai:0, //连开 lianZhuang:0, //连庄 shangGa:0, //上嘎 liuJuSuanFen:0, //流局算分 huaHu:0, //花胡 fangGouJiao:0, //防勾脚 wuZiPai:0, //无字牌 haiDiBaoPai:0, //海底包牌 jiaoLing:0, //叫令 }, creator : 22, //创建者 status: 0, // 房间状态 0 空闲中 1 准备中 2 游戏中 3 结算中, 只有游戏中才有以下数据 inFlow:1, // 所处游戏流程标记,参考最下面的游戏流程通知消息查看具体表述 roundIndex : 1, // 正在进行的局数索引 leftCount: 10, // 牌墙剩余牌张,在游戏中有此数据 dealer : 2, //庄家 shang_ga_list:[1,2,3,4,5] ,//可上嘎列表 curr_feng_ling:1, // 桌子当前风令 打到什么风令了 固定显示 feng_ling:1,//首局确定的风令 庄家为东风令 客户端根据此项确定玩家对应风位置 remainSeconds: 30, // 当前玩家所剩余的时间秒数 lastSeatID : 2, //上一个操作的座位。公共操作时用到。开局时为空 lastAct : 1, // 总共包括 ACTION_TYPE lastCard : 21, turn: 1, // 轮到某人 };</code></pre> <p>{ 'winInfo': [], 'seats': [{ 'buHuaCards': [], 'seatID': 1, 'handCards': [25], 'totalScore': 0, 'scoreFrom': { 'score': 0 }, 'score': 0, 'tableCards': [ [2, 17, 18, 19, 4], [2, 39, 37, 38, 4], [3, 11, 11, 11, 3], [3, 14, 14, 14, 4] ] }, { 'buHuaCards': [], 'seatID': 2, 'handCards': [19, 38, 18, 39, 37, 17, 33], 'totalScore': 0, 'scoreFrom': { 'score': 0 }, 'score': 0, 'tableCards': [ [3, 13, 13, 13, 4], [2, 23, 22, 21, 1] ] }, { 'buHuaCards': [], 'seatID': 3, 'handCards': [15, 15, 15, 39], 'totalScore': 0, 'scoreFrom': { 'score': 0 }, 'score': 0, 'tableCards': [ [2, 24, 25, 23, 2], [2, 27, 28, 29, 2], [2, 37, 36, 35, 2] ] }, { 'buHuaCards': [], 'seatID': 4, 'handCards': [12, 34, 11, 16, 16, 34, 13], 'totalScore': 0, 'scoreFrom': { 'score': 0 }, 'score': 0, 'tableCards': [ [2, 26, 27, 28, 3], [2, 31, 32, 33, 3] ] }], 'finishType': 0, 'hasNextRound': True, 'rate': 1, 'isHuangZhuang': 1, 'leftCards': [33, 36, 25, 12, 17, 15, 35, 16, 27, 16, 23, 19, 34, 21, 36], 'seq': 0 }</p> <hr /> <h3>下发玩家离开房间</h3> <p>命令号:<strong>805</strong></p> <pre><code class="language-js">{ seatID: 1 // 座位号 },</code></pre> <hr /> <h3>解散房间[房主专用]</h3> <p>命令号:<strong>805</strong> 房主专用,且一旦房间游戏已经开始,则不可解散</p> <pre><code class="language-js">// 请求 { }, // 响应,此回应为广播消息 { code : 0 // 0成功 1失败 reason: 0 // 解散原因 },</code></pre> <hr /> <h3>申请解散房间</h3> <p>命令号:<strong>810</strong></p> <pre><code class="language-js">// 请求 关于解散房间的消息 { agree : true | false, // 同意或不同意解散 }, // 响应[广播消息] 每次有人同意或拒绝都会广播 { configTime : 300, // 固定配置,单位秒 remainTime : 290, // 剩余时间 yesSeatIDs : [3,1], // 第一个是申请人 noSeatIDs : [2], result : true | false, // 为空是尚无结论 true 解散 false 继续 },</code></pre> <hr /> <h3>准备</h3> <p>命令号:<strong>811</strong> (坐下时系统会自动准备。一局结束后,玩家要手动准备)</p> <pre><code class="language-js">// 请求 { }, // 响应[广播] { seatID : 2, isPrepare: true | false, // 是否已经准备,当未开局时收到未准备的消息,则要检查同IP问题 code : 0 // 0 成功 其它:失败 },</code></pre> <hr /> <h3>玩家连接状态改变[掉线或重进]</h3> <p>命令号:<strong>824</strong></p> <pre><code class="language-js">// 响应[广播] { uid : 22, seatID : 2, IP : 8.8.8.8, offline: true | false, // 离线标志 },</code></pre> <hr /> <h3>设置麻将牌[debug模式下专用]</h3> <p>命令号:<strong>829</strong></p> <pre><code class="language-js">// 请求,注意请求设置的牌必须是合法值,且不得是5个小一这种错误的数据, // 每一个玩家的牌都可以单独设置,但不得超过20张,剩余牌也不能超过20张 // 如果只想设其中某一个玩家的牌,可以单独指定项数据并把其它数据留空 { cards: [ [102, 103, 104], // 坐位ID1的手牌 [102, 103, 104], // 坐位ID2的手牌 [102, 103, 104], // 坐位ID3的手牌 [102, 103, 104], // 坐位ID4的手牌 [102, 103, 104], // 剩余牌 ], dealer: 1, // 庄家位置 } // 响应 { code: 0, // 返回状态码 },</code></pre> <hr /> <hr /> <h3>客户端请求房间内广播 用于聊天信息</h3> <p>命令号:<strong>825</strong></p> <pre><code class="language-js">// 请求 { data : xxx } // 响应,此返回为广播消息 { uid : 22, data: xxx }</code></pre> <hr /> <h3>831通知开局位置信息</h3> <p>命令号:<strong>831</strong></p> <pre><code class="language-js">// 收到此消息可进行如下操作,[退出房间、解散房间(房主)、开始游戏(即准备)] { distances: [ [10888, 28282, 88484],// 玩家1与2,3,4的距离 [10888, 28282],// 玩家2与3,4的距离 [10888],// 玩家3与4的距离 ], }</code></pre> <h3>832请求定位信息</h3> <p>命令号:<strong>832</strong></p> <pre><code class="language-js">//请求 {} //响应 { distances: [ [10888, 28282, 88484],// 玩家1与2,3,4的距离 [10888, 28282],// 玩家2与3,4的距离 [10888],// 玩家3与4的距离 ], }</code></pre> <h2>协议列表--游戏过程</h2> <h3>806房间游戏开始</h3> <p>命令号:<strong>806</strong></p> <pre><code class="language-js">// 广播 { "tid": 111 , 房间号 "club_id": 111, 俱乐部ID 为0 标识没有 "rule_type": 小规则ID 暂默认为1 code: 0, // 0 成功 其它 失败 }</code></pre> <hr /> <h3>807房间游戏结束</h3> <p>命令号:<strong>807</strong></p> <pre><code class="language-js">{ gid : 1, //牌组ID seats : [ { "seatID": 1 "totalScore": 1 "zhuangCount": 1 "winCount": 1 "dianPaoCount": 1 "ziMoCount": 1 "chiHuCount": 1 "mingGangCount": 1 "anGangCount": 1 "fangGangCount": 1 "mingTangCount": 1 "roundMaxScore": 1 "mingTangList": [] }, {}, {}, {} ] }, `` *** ### 一局游戏开始 命令号:**808** ```js { seq: 1, // 牌局序号,比如1表示这组牌局中的第1局 dealerSeatID: 2, // 庄家坐位ID },</code></pre> <hr /> <h3>一局游戏结束</h3> <p>命令号:<strong>809</strong></p> <pre><code class="language-js">{ rate: 1, 倍率 暂时默认为1 winInfo: { "rate": 1, "huCards": [], "lastSeat": 1 "huPath": [] "birdList": [] "fanList": [], "huCardIndex": 1, "winner":1, "handCardIndex": len(winner.zhuo_pai) + 1, }, winner: [] 麻将可能出现多个赢家,但是海南只会有一个, seq : 8, //牌组子序号,比如8表示这组牌局中的第8局 hasNextRound: true | false, // 是否还有下一局,如果是解散房间就直接结束的 finishType: 0|1, // 结束类型,0正常结束 1房间解散结束 isHuangZhuang: 0|1, // 流局 birdList: [21, 22, 23, 24], //鸟牌 无用 leftCards: [102, 102, ...], // 剩余的牌 seats : [ { seatID : 1, handCards : [1], //按摸牌时间顺序,后摸的牌在右边 tableCards:[], //碰杠的牌 huType : 0|1, //0自摸1接炮,胡牌者才有此属性 dianPaoCount : 1, //点炮总数,一炮多响时大于1,点炮者才有此属性 score : 0, //得分 totalScore : 0 //总分 shangGaScore:1 scoreFrom: [] } }, {}, {}, {} ], }, 示例: { '''玩家座位列表''' 'seats': [{ 'seatID': 1, 'tableCards': [ [3, 11, 11, 11, 3], [3, 44, 44, 44, 4] ], 'scoreFrom': { 'score_ming_xi': { 0: 1, 33: -2, 2: 3, 29: 1, 34: 3, 31: 18 }, 'score': 24, 'fan_xing': [6] }, 'handCards': [17, 33, 16, 34, 35, 18, 51], 'buHuaCards': [74], 'score': 24, 'totalScore': 24 }, { 'seatID': 2, 'tableCards': [ [5, 12, 12, 12, 12, 2] ], 'scoreFrom': { 'score_ming_xi': { 33: 6, 2: -1, 34: -1, 31: -6 }, 'score': -2 }, 'handCards': [28, 25, 39, 42, 42, 27, 27, 55, 39, 53], 'buHuaCards': [64, 76], 'score': -2, 'totalScore': -2 }, { 'seatID': 3, 'tableCards': [ [3, 13, 13, 13, 4], [2, 35, 34, 33, 2] ], 'scoreFrom': { 'score_ming_xi': { 0: -1, 33: -2, 2: -1, 31: -6, 34: -1, 29: -1 }, 'score': -12 }, 'handCards': [38, 28, 29, 31, 39, 33, 27], 'buHuaCards': [78], 'score': -12, 'totalScore': -12 }, { 'seatID': 4, 座位ID 'tableCards': [桌牌列表 第一位是类型 最后一位是fromseatid [2, 36, 37, 38, 3], [2, 35, 36, 37, 3] ], 'scoreFrom': {分数来源 'score_ming_xi': {分数明细 33: -2, 2: -1, 34: -1, 31: -6 }, 'score': -10 }, 'handCards': [31, 51, 55, 42, 42, 55, 32],手牌 'buHuaCards': [72, 68],补花的牌 'score': -10, 'totalScore': -10 总分 }], 'hasNextRound': True, 是否有下局 'finishType': 0, '''0是正常结束, 1是解散结束''' 'winInfo': [{ 'fanList': [], 番型列表 'lastSeat': 3, 最后座位 'winner': 1, 赢家座位ID 'huPath': [ 胡牌路径 [16, 17, 18], [33, 34, 35], [51, 51] ], 'handCardIndex': 3, '''桌牌组数+1 这里如果用不上可无视''' 'rate': 1, 'huCardIndex': 1, '''固定为1 不需要可无视''' 'bao_pai_seat_id': 0, '''包赔 为0则没有''' 'huCards': [51], 胡的牌 'bao_pai_reason': 0,包赔原因 'birdList': [] 鸟列表此处不会用到 }], 'rate': 1, 'winner': [1], 'isHuangZhuang': 0, 'seq': 0, 'leftCards': [14, 14, 53, 32, 23, 29, 53, 15, 19, 48, 26, 14, 22, 38, 11, 29, 46, 36, 46, 36, 66, 19, 26, 26, 28, 34, 16, 24, 62, 37, 17, 21, 22, 32, 23, 24, 18, 24, 19, 37, 35, 25, 44, 25, 48, 17, 25, 46, 18, 24, 16, 22, 22, 21, 15, 28, 18, 23, 15, 38, 46];//桌面上剩下的牌 }</code></pre> <hr /> <h3>830 PLAYER_SHANG_GA_BEGIN 玩家上嘎流程开始</h3> <p>命令号:<strong>830</strong></p> <pre><code class="language-js">// 无请求 服务器下发 { } // 响应,此返回为广播消息 { "can_shang_list": [1,2,3,4,5] }</code></pre> <h3>833玩家上嘎</h3> <p>命令号: PLAYER_SHANG_GA<strong>833</strong></p> <pre><code class="language-js">// 无请求 服务器下发 { "shangGa":1 } // 响应,此返回为广播消息 { "shangGa":1 }</code></pre> <hr /> <h3>818发牌</h3> <p>命令号: <strong>818</strong></p> <pre><code class="language-js">{ seatID : 3, dealerSeatID:1 remainCards:55 剩余张数 牌墙 handCards : [21,...],手牌 发的牌 };</code></pre> <hr /> <h3>812 下发 轮到玩家出牌</h3> <p>命令号: <strong>812</strong></p> <pre><code class="language-js">{ seatID : 3, canTianTing:True|False //是否可选天听,是的话显示天听,不能天听的话没有此字段 lockCards: [31,32] //锁定出牌列表,天听情况下出现,不是天听没有此字段,可能有多张,及单张情况 remainTime : 99 // 倒计时剩余秒 cmdSeatID:1 },</code></pre> <hr /> <h3>836 下发 公共操作开始</h3> <p>命令号: <strong>836</strong></p> <pre><code class="language-js">{ card: 33, // 公共牌 seatID: 3, // 出牌者 seconds: 33, // 等待时间 operates: [2,3,5], // 可做的操作列表 cards:33 //当前出的牌 leftCount:33 //牌墙剩余 }</code></pre> <hr /> <h3>846 下发 天胡流程操作开始</h3> <p>命令号: <strong>846</strong></p> <pre><code class="language-js">{ seconds: 33, // 等待时间 operates: [2,3,5], // 可做的操作列表 leftCount:33 //牌墙剩余 }</code></pre> <hr /> <h3>813出牌</h3> <p>命令号: <strong>813</strong></p> <pre><code class="language-js">{ // 请求 cards : [22] } { // 响应 code : 0 //0成功 1失败 "seatID": ,5 "cards": ,5 "seconds": f,5 "leftCount":,55 "tuoGuan": ,1 }</code></pre> <hr /> <h3>820摸牌</h3> <p>命令号: <strong>820</strong></p> <pre><code class="language-js">{ // 响应 seatID:1 leftCount: 55 seconds: 20, // 剩余多少秒 card: 22, // 摸到的牌 自己看的到 operates: [2,3], // 自己能做的操作列表自己看的到 }</code></pre> <hr /> <h3>822 碰牌</h3> <p>命令号:<strong>822</strong></p> <pre><code class="language-js">// 请求 {} // 推送消息 { seatID: 1, // 坐位ID isFinish: 0|1, // 是否是动作确认完成,0:已记录,1:动作成功 }</code></pre> <hr /> <h3>817杠牌</h3> <p>明杠|暗杠怎么表达? 命令号:<strong>817</strong></p> <pre><code class="language-js">// 请求 { gangType: 4|5|6, // 放杠|暗杠|明杠 card: 33, // 所杠的牌 } // 推送消息 { seatID: 1, // 坐位ID act: 4|5|6, // 放杠|暗杠|明杠 fromSeatID: 1 card: 33, // 所杠的牌 isFinish: 0|1, // 是否是动作确认完成,0:已记录,1:动作成功 }</code></pre> <hr /> <h3>821吃牌</h3> <p>命令号:<strong>821</strong></p> <pre><code class="language-js">// 请求 { chiPai: [21, 22], // 吃口 } // 响应[广播] { seatID: 1, // 坐位ID chiPai: ... // 同请求 isFinish: 0|1, // 是否是动作确认完成,0:已记录,1:动作成功 }</code></pre> <hr /> <h3>814过牌</h3> <p>命令号:<strong>814</strong></p> <pre><code class="language-js">// 请求 { }, // 响应 { seatID: 2, // 坐位ID }</code></pre> <hr /> <h3>826胡牌</h3> <p>命令号:<strong>826</strong></p> <pre><code class="language-js">// 请求 如果有多种胡法另行设计 {} // 响应[广播] { huInfo{ seatID: 1, // 坐位ID isFinish: 0|1, // 是否是动作确认完成,0:已记录,1:动作成功 } }</code></pre> <hr /> <h3>834天听 上下都是一个命令</h3> <p>命令号:<strong>834</strong></p> <pre><code class="language-js">// 请求 玩家选择是否天听 { isTianTing: 0|1, // 是否天听,-1: 放弃天听,1:确定天听 ps:跟此处有关的说明,tianting状态为0时则尚未选择,这里只传-1 跟1 } {} // 响应[广播不带锁定牌, 单独给天听用户发锁定出牌,如果是放弃天听,只有天听玩家接收消息,不广播] { tianTing: -1||1, // 是否天听,-1: 放弃天听,1:确定天听 seatID: 1~4 // 天听玩家座位ID lockCards:[31,32,33],// 锁定出牌列表,标识只能出锁定牌 此项只有天听用户,切选择了天听之后收得到 }</code></pre> <h3>850补花</h3> <p>命令号:<strong>850</strong></p> <pre><code class="language-js">// 下行 无需请求 { } {} // 响应[] { bu_hua_cards: [31,32], // 补花后的牌 仅补花玩家能接收 bei_bu_hua_cards:[72,74] //被补花的牌 seatID: 1~4 // 补花玩家座位ID handCards:[31,32,33],// 补花后手牌, 仅补花玩家能接收 看需要,不需要可移除此字段 leftCount: 33, //补花后牌堆剩余张数 }</code></pre> <h3>839玩家风令改变</h3> <p>命令号:PLAYER_FENG_LING_CHANGE<strong>839</strong></p> <pre><code class="language-js">// 下行 无需请求 { } {} // 响应[] { seatID,//玩家座位ID feng_ling, // 当前游戏风令 取值 1.2.3.4 分别对应东南西北风 风牌牌值为42,44, 46, 48 取末位/2 与风令对应 }</code></pre> <h3>840风令改变</h3> <p>命令号:FENG_LING_CHANGE<strong>40</strong></p> <pre><code class="language-js">// 下行 无需请求 { } {} // 响应[] { curr_feng_ling:1, // 桌子当前风令 打到什么风令了 固定显示 feng_ling:1,//首局确定的风令 庄家为东风令 客户端根据此项确定玩家对应风位置 }</code></pre> <p>2020/1/8 新增</p> <h3>501赠送钻石接口</h3> <p>命令号:GIVE_DIAMOND<strong>501</strong></p> <pre><code class="language-js"> // 下行 { acceptUid: 赠送对象UID give_diamond_count:赠送钻石数量 } { 可能出现错误码: DATA_BROKEN = -1 # 客户端请求数据错误,不符合即定格式 DIAMOND_NOT_ENOUGHT = -29 # 钻石数量不够(已开房有锁定钻石计算在内) } // 响应[] { “left_diamond":1 剩余钻石数量 } ### 502接收赠送钻石接口 命令号:RECEIVE_DIAMOND**207** ```js // 下行 { msgid: 消息ID } { 可能出现错误码: DATA_BROKEN = -1 # 客户端请求数据错误,不符合即定格式 参数不对,或查询不到该记录 或记录对应操作人不对等 DIAMOND_NOT_ENOUGHT = -29 # 钻石数量不够(已开房有锁定钻石计算在内) SYSTEM_ERROR = 3 # 系统错误,校验成功,但是操作失败返回此项 MSG_STATUS_DIAMOND_RECEIVE = 2 # 已领取 MSG_STATUS_DIAMOND_BACK = 3 #已退回 } // 响应[] { “left_diamond":1 剩余钻石数量 } ### 503领回赠送钻石接口 命令号:BACK_DIAMOND**503** ```js // 下行 { msgid: 消息ID } { 可能出现错误码: DATA_BROKEN = -1 # 客户端请求数据错误,不符合即定格式 参数不对,或查询不到该记录 或记录对应操作人不对等 SYSTEM_ERROR = 3 # 系统错误,校验成功,但是操作失败返回此项 MSG_STATUS_DIAMOND_RECEIVE = 2 # 已领取 MSG_STATUS_DIAMOND_BACK = 3 #已退回 } // 响应[] { “left_diamond":1 剩余钻石数量 } ### 504 添加好友接口 命令号:ADD_FRIEND**504** ```js // 下行 { addUid: 消息ID } { 可能出现错误码: DATA_BROKEN = -1 # 客户端请求数据错误,不符合即定格式 参数不对,或查询不到该记录 或记录对应操作人不对等 SYSTEM_ERROR = 3 # 系统错误,校验成功,但是操作失败返回此项 MSG_STATUS_DIAMOND_RECEIVE = 2 # 已领取 MSG_STATUS_DIAMOND_BACK = 3 #已退回 } // 响应[] { “left_diamond":1 剩余钻石数量 } ### 2370 添加好友接口 命令号:CLUB_RECHARGE_JI_JIN**2370** ```js // 下行 { clubID:亲友圈ID, diamond: 1,房卡数量 } { 可能出现错误码: DATA_BROKEN = -1 # 客户端请求数据错误,不符合即定格式 参数不对,或查询不到该记录 或记录对应操作人不对等(此接口参数没有的时候返回) SYSTEM_ERROR = 3 # 系统错误,校验成功,但是操作失败返回此项(此接口的时候,如果减玩家房卡,或者增加亲友圈基金失败的时候会返回) DIAMOND_NOT_ENOUGHT = -29 房卡不够 } // 响应[] { “left_diamond":1 剩余钻石数量 }</code></pre>

页面列表

ITEM_HTML