+----------------------------------+ | Bertram收到的指令列表 | | 2025.12.5 | +----------------------------------+ 注意: 1、收到post数据,必须回答;没有正常的应答,就发送文档最下方的无用应答; 2、所有的msgName,都是宏定义,有专门的字符串的值; 3、所有的turnType、OpenType,都是宏定义,有专门的数字的值; 1、游戏开始 let webMsg = { msgName: GSUserMsg.GameStart, roomID: roomID, //这桌唯一的ID号 jsonObj: t } let t: GSUserMsg.tGameStartNT = { juCount: 1, playingChairNos: [0,1,2,3], gameData: GZMsg.tGameStartData, } let gameStartData:GZMsg.tGameStartData = { juCount: 1, //第几局 zhuangChairNo: 2, //庄家号 mainCard: {3,4}, 对你没用, otherMainCard: 对你没用, mCard: 对你没用, oCard: 对你没用, bloodCount: 3, //几张血 } //-------------------------------------- 2、手牌增加 webMsg.push({ msgName: GameCommonMsg.DealCards, postion: 'lord_up', cards: '[3,'D'],[9,'S'],[8,'H']', }) //-------------------------------------- 3、叫主同步(亮主请求,可多次) let webMsg = { msgName: GZMsg.CallStatus, zhuangChairNo: 3, mainCard: 8, mainSuit: 'H', //主花色 mainValue: 8, //打几 nextCallCount: 2, //可以几张叫主 } 第二局以后用户亮主(亮主应答,可多次) 此处可以用亮主应答,也可以用改主应答 //-------------------------------------- 4、给用户发送 可以改主 let webMsg = { msgName: GameCommonMsg.Turn, jsonObj: bertramTurnInfo, } bertramTurnInfo = { turnType: GZDefine.TurnType.GaiMain, postion: 'lord_up', bloodCount: 3, //几张血 mainSuit: 'H', //主花色 mainValue: 8, //打几 } //-------------------------------------- 5、给用户发送 错误信息 let webMsg = { msgName: GSUserMsg.Error, jsonObj: t, } t={ errCode: errCode, errMsg: errMsg, needRestart: needRestart == null ? false : needRestart, } //-------------------------------------- 6、给所有用户发送暴动信息 let webMsg = { msgName: GameCommonMsg.OpenCard, jsonObj: bertramOpenInfo, } bertramOpenInfo = { openType: GZDefine.OpenType.BaoDong, postion: 'lord_up', cards: '[3,'D'],[9,'S'],[8,'H']', } //-------------------------------------- 7、给所有用户发需要进贡(请求) let webMsg = { msgName: GameCommonMsg.Turn, jsonObj: bertramTurnInfo, } bertramTurnInfo = { turnType: GZDefine.TurnType.BloodLoser, postion: 'lord_up', bloodCount: 3, //几张血 mainSuit: 'H', //主花色 mainValue: 8, //打几 } //-------------------------------------- 8、给所有用户发送 某人进贡 bertramOpenInfo = { openType: GZDefine.OpenType.BloodLoser, postion: 'lord_up', cards: '[3,'D'],[9,'S'],[8,'H']', } let webMsg = { msgName: GameCommonMsg.OpenCard, jsonObj: bertramOpenInfo, } //-------------------------------------- 9、给所有用户发需要回贡(请求) let webMsg = { msgName: GameCommonMsg.Turn, jsonObj: bertramTurnInfo, } bertramTurnInfo = { turnType: GZDefine.TurnType.BloodWinner, postion: 'lord_up', bloodCount: 3, //几张血 mainSuit: 'H', //主花色 mainValue: 8, //打几 } //-------------------------------------- 10、给所有用户发送 某人回贡 bertramOpenInfo = { openType: GZDefine.OpenType.BloodWinner, postion: 'lord_up', cards: '[3,'D'],[9,'S'],[8,'H']', } let webMsg = { msgName: GameCommonMsg.OpenCard, jsonObj: bertramOpenInfo, } //-------------------------------------- 11、给所有用户发送 干锅 bertramOpenInfo = { openType: GZDefine.OpenType.GanGuo, postion: 'lord_up', cards: '[3,'D'],[9,'S'],[8,'H']', } let webMsg = { msgName: GameCommonMsg.OpenCard, jsonObj: bertramOpenInfo, } //-------------------------------------- 12、给所有用户发送 亮底牌 bertramOpenInfo = { openType: GZDefine.OpenType.LiangDi, postion: 'lord_up', cards: '[3,'D'],[9,'S'],[8,'H']', } let webMsg = { msgName: GameCommonMsg.OpenCard, jsonObj: bertramOpenInfo, } //-------------------------------------- 13、给所有用户 需要扣底(请求) let webMsg = { msgName: GameCommonMsg.Turn, jsonObj: bertramTurnInfo, } bertramTurnInfo = { turnType: GZDefine.TurnType.KouDi, postion: 'lord_up', bloodCount: 3, //几张血 mainSuit: 'H', //主花色 mainValue: 8, //打几 } //-------------------------------------- 14、给所有用户 或 庄家 发送扣底结果 bertramOpenInfo = { openType: GZDefine.OpenType.KouDi, postion: 'lord_up', cards: '[3,'D'],[9,'S'],[8,'H']', } let webMsg = { msgName: GameCommonMsg.OpenCard, jsonObj: bertramOpenInfo, } //-------------------------------------- 15、给所有用户 需要扣王(请求) let webMsg = { msgName: GameCommonMsg.Turn, jsonObj: bertramTurnInfo, } bertramTurnInfo = { turnType: GZDefine.TurnType里关于扣王的一些列常量, postion: 'lord_up', bloodCount: 3, //几张血 mainSuit: 'H', //主花色 mainValue: 8, //打几 } //-------------------------------------- 16、给所有用户 发送扣王结果 bertramOpenInfo = { openType: GZDefine.OpenType.KW_Do, postion: 'lord_up', cards: '[3,'D'],[9,'S'],[8,'H']', } let webMsg = { msgName: GameCommonMsg.OpenCard, jsonObj: bertramOpenInfo, } //-------------------------------------- 17、给所有用户 需要出牌(请求) let webMsg = { msgName: GameCommonMsg.Turn, jsonObj: bertramTurnInfo, } bertramTurnInfo = { turnType: GZDefine.TurnType.OutCard, postion: 'lord_up', bloodCount: 3, //几张血 mainSuit: 'H', //主花色 mainValue: 8, //打几 } //-------------------------------------- 18、给所有用户发送 某用户出牌结果 let webMsg:BertramCards = { msgName: GameCommonMsg.OutCard, postion: 'lord_up', cards: '[3,'D'],[9,'S'],[8,'H']', } //-------------------------------------- 19、给所有用户发送闲家捡分的情况 bertramOpenInfo = { openType: GZDefine.OpenType.ScoreCards, postion: 'lord_up', cards: '[3,'D'],[9,'S'],[8,'H']', } let webMsg = { msgName: GameCommonMsg.OpenCard, jsonObj: bertramOpenInfo, } +------------------------------------+ | Bertram 要发送 的指令列表 | | 2025.12.9 | +------------------------------------+ 不管发给你的是什么turn请求,统一返回下列json格式: { openType: number, cards: string, } openType说明: 1、除扣王以外,这个值无意义,返回0即可; 2、扣王:如果有扣的王,openType = GZDefine.OpenType.KW_Do; 如果没有扣王,openType = 根据上面第15项的turnNT.turnType来决定选择了哪个按钮; 3、如果这把没有结果返回,只是应答一下,openType=101; cards说明: 1、统一保存,你要返回的牌 1、第二局以后用户发送亮主的指令,比如:'[3,'D'],[9,'S'],[8,'H']' ////////////////////////////////////////// //本地模拟发送扣底执行(测试用) MONI_KouDi(t:GameCommonMsg.tTurnNT) { //不是自己:处理扣王前置选择 if(t.chairNo != this.selfChairNo) { //搞一套没用的临时牌,发送用 let tmpPai:CardArray = CardArray.empty let card = new Card(1, 3); tmpPai.push(card.obj) //处理扣王前置选择 let req:GameCommonMsg.tOutCardReq = { outType:GZDefine.OutType.Operate, openInfos: [{ chairNo: this.selfChairNo, openType: GZDefine.OpenType.KW_PrevNot_Abandon, //本地测试选放弃(有三种选择:自己、对家、放弃) cards: tmpPai.obj, }] } this.sendDelay(GameCommonMsg.OutCard, req, 3, true); Log.oth.info("[",this.selfChairNo,"]===>MONI_KouDi() KouWang QianZhi select....."); //退出 return; } //庄家自己的正常扣底操作 ... } /////////////////////////////////////////// //本地模拟发送扣王执行(测试用) MONI_KouWang(t:GameCommonMsg.tTurnNT) { //不是自己 if(t.chairNo != this.selfChairNo) return; //准备要应答的数据 let req:GameCommonMsg.tOutCardReq = null req = { outType:GZDefine.OutType.Operate, openInfos:[{ chairNo: this.selfChairNo, openType:-1, }] } //全选不扣 switch(t.turnType) { // 选择自己是否扣 case GZDefine.TurnType.KouWang_SelSelf: { req.openInfos[0].openType = GZDefine.OpenType.KW_Self_No } break // 选择对家是否扣(包括全扣) case GZDefine.TurnType.KouWang_SelDuiJiaQuanKou: { req.openInfos[0].openType = GZDefine.OpenType.KW_DuiJia_No } break // 选择对家是否扣 case GZDefine.TurnType.KouWang_SelDuiJia: { req.openInfos[0].openType = GZDefine.OpenType.KW_DuiJia_No } break // 其它情况,全部选不扣 default: { req.openInfos[0].openType = GZDefine.OpenType.KW_Self_No } break } this.sendDelay(GameCommonMsg.OutCard, req, 3, true); Log.oth.info("[",this.selfChairNo,"]===>MONI_KouWang() ....."); }