#
通用状态
Tips
- SDK 保证状态有序串行从 APP 到达 MG;
- 可重复通知,无需保证通知次数;
- 通知后 SDK 会按 state 值缓存最新一次的 data 值,供 MG 随时主动获取;
- APP 仅需通知用户自己的状态,MG 服务会负责广播并同步到各对端;
- ISudFSTAPP void notifyStateChange(String state, String dataJson, ISudListenerNotifyStateChange listener)使用;
- 需要在onGameStarted之后以及onGameDestroyed之前调用
[TOC]
状态转换说明
0. 测试状态
- state
app_common_hello_fsm
- data
{
"msg": "Hello FSM from APP!"
}
- 说明
用于状态测试
1. 加入状态
- 最低版本: v1.1.30.xx
- state
app_common_self_in
- data
{
"isIn": true, // true 加入游戏,false 退出游戏
"seatIndex": 1, // 加入的游戏位(座位号) 默认传seatIndex = -1 随机加入,seatIndex 从0开始,不可大于座位数
"isSeatRandom": true, //(注:废弃,请使用isRandom替代) 默认为ture, 带有游戏位(座位号)的时候,如果游戏位(座位号)已经被占用,是否随机分配一个空位坐下 isSeatRandom=true 随机分配空位坐下,isSeatRandom=false 不随机分配
"isRandom": true, // 默认为ture, 带有游戏位(座位号)的时候,如果游戏位(座位号)已经被占用,是否随机分配一个空位坐下 isRandom=true 随机分配空位坐下,isRandom=false 不随机分配
"teamId": 1 // 不支持分队的游戏:数值填1;支持分队的游戏:数值填1或2(两支队伍);
}
- 说明
用户(本人)加入游戏/退出游戏
正确流程:
1.isIn=true: 加入游戏=>准备游戏=>开始游戏;
2.isIn=false: 结束=>取消准备=>退出游戏;
2. 准备状态
- 最低版本: v1.1.30.xx
- state
app_common_self_ready
- data
{
"isReady": true // true 准备,false 取消准备
}
- 说明
用户(本人)准备/取消准备
3. 游戏状态
- 最低版本: v1.1.30.xx
- state
app_common_self_playing
- data
{
"isPlaying": true, // true 开始游戏,false 结束游戏
"reportGameInfoExtras": "透传参数", // string类型,Https服务回调report_game_info参数,最大长度1024字节,超过则截断(2022-01-21)
"reportGameInfoKey": "透传参数key" // string类型,最大长度64字节,接入方服务端,可以根据这个字段来查询一局游戏的数据
}
- 说明
用户游戏状态,如果用户在游戏中,建议:
a.空出屏幕中心区:
关闭全屏礼物特效;
b.部分强操作类小游戏(spaceMax为true),尽量收缩原生UI,给游戏留出尽量大的操作空间:
收缩公屏;
收缩麦位;
如果不在游戏中,则恢复。
4. 队长状态
- 最低版本: v1.1.30.xx
- state
app_common_self_captain
- data
{
"curCaptainUID": "" // 必填,指定队长uid
}
- 说明
用户是否为队长,队长在游戏中会有开始游戏的权利。
5. 踢人
- 最低版本: v1.1.30.xx
- state
app_common_self_kick
- data
{
"kickedUID": "uid" // 被踢用户uid
}
- 说明
用户(本人,队长)踢其他玩家;
队长才能踢人;
6. 结束游戏
最低版本: v1.1.30.xx
state
app_common_self_end
- data
{}
- 说明
用户(本人,队长)结束(本局)游戏,提前结束本局游戏(所有人都不玩了)
7. 房间状态(depreated 已废弃 v1.1.30.xx)
- 请使用 app_common_self_in 代替
- state
app_common_self_room
- data
{
"isIn": true // true 在房间内,false 不在房间内
}
- 说明
用户(本人)房间状态,建议:
用户进出房间各通知一次
- 说明
用户(本人)离开
8. 麦位状态(depreated 已废弃 v1.1.30.xx)
- 请使用 app_common_self_in 代替
- state
app_common_self_seat
- data
{
"lastSeat": -1, // 之前在几号麦,从0开始,之前未在麦上值为-1
"currentSeat": 0 // 目前在几号麦,从0开始,目前未在麦上值为-1
}
- 说明
用户(本人)所处的麦位状态,建议:
进入房间后初始通知一次;
每次变更(上麦/下麦/移麦)通知一次;
9. 麦克风状态(depreated 已废弃 v1.1.30.xx)
- state
app_common_self_microphone
- data
{
"isOn": true, // true 开麦,false 闭麦
"isDisabled": false // true 被禁麦,false 未被禁麦
}
- 说明
用户(本人)麦克风状态,建议:
进入房间后初始通知一次;
每次变更(开麦/闭麦/禁麦/解麦)通知一次;
10. 文字命中状态
- state
app_common_self_text_hit
- data
{
"isHit": true, // true 命中,false 未命中
"keyWord": "关键", // 关键词
"text": "这是关键" // 聊天原始内容
}
- 说明
用户(本人)聊天信息命中关键词状态,建议:
精确匹配;
首次聊天内容命中关键词之后,后续聊天内容不翻转成未命中;
直至小游戏侧关键词更新,再将状态翻转为未命中;
11. 打开或关闭背景音乐(2021-12-27 新增)
- state
app_common_open_bg_music
- data
{
"isOpen": true // true 打开背景音乐,false 关闭背景音乐
}
- 说明
打开或者关闭背景音乐
12. 打开或关闭音效(2021-12-27 新增)
- state
app_common_open_sound
- data
{
"isOpen": true // true 打开音效,false 关闭音效
}
- 说明
打开或者关闭音效
13. 打开或关闭游戏中的振动效果(2021-12-27 新增)
- state
app_common_open_vibrate
- data
{
"isOpen": true // true 打开振动效果,false 关闭振动效果
}
- 说明
打开或者关闭振动效果
14. 设置游戏的音量大小(2021-12-31 新增)
- state
app_common_game_sound_volume
- data
{
"volume": 100 // 音量大小 0 到 100
}
- 说明
设置游戏的音量大小
15. 设置游戏玩法选项(2022-05-10 新增)
- state
app_common_game_setting_select_info
data
ludo
{
"ludo": { // 飞行棋
"mode": 0, // mode: 默认赛制,0: 快速, 1: 经典; 2: 竞技
"chessNum": 2, // chessNum: 默认棋子数量, 2: 对应2颗棋子; 4: 对应4颗棋子;
"item": 0 // item: 默认道具, 1: 有道具, 0: 没有道具
},
"whoisspy": { // 谁是卧底
"mode": 1 // 0:经典 ;1:爆词
},
"whoisspy": { // 谁是卧底
"mode": 0 // 0:经典 ;1:爆词
},
"bumper":{ // 碰碰
"userInfos": [
{
"uid": "", // 玩家id
"mass": 10, // 体型 默认值10,可填范围 10 20 30 40 50
"trail": 1, // 拖尾型号 1 2 3 4
},
{
"uid": "", // 玩家id
"mass": 10, // 体型 默认值10,可填范围 10 20 30 40 50
"trail": 1, // 拖尾型号 1 2 3 4
}
]
},
"numberbomb": {
"keyNum": 45, // 设置的最终的答案数字
"range": [1, 99], // 初始的显示范围
"save": 0, //是否保存 0: 不保存,就是每次的设置仅生效一次,如果下次没设置则恢复默认;1: 保存,就是每次设置会持续生效知道下次改变
}
}
- baloot
{
"baloot":{
// baloot
"mode":0 // 0:经典 ;1:快速
}
}
- 说明
设置游戏玩法选项
16. 设置游戏中的 AI 玩家(2022-05-11 新增)
- state
app_common_game_add_ai_players
- data
{
"aiPlayers": [
{
"userId": "", // 玩家id
"avatar": "", // 头像url
"name": "", // 名字
"gender": "male", // 性别 male:男,female:女
"level":1, // ai等级 1,2,3
}
],
"isReady": 1 // 机器人加入后是否自动准备 1:自动准备,0:不自动准备 默认为1
}
- 说明
设置游戏中的AI玩家
17. app 在收到游戏断开连接通知后,通知游戏重试连接(2022-06-21 新增)
- state
app_common_game_reconnect
- data
{}
- 说明
通知游戏重试连接
18. app 返回玩家当前积分
- state
app_common_game_score
- data
{
"score": 10 // 玩家当前积分
}
- 说明
app返回玩家当前积分
19. app 通知游戏点赞玩家(2022-11-19 增加,当前支持你画我猜,你说我猜,友尽闯关)
- state
app_common_self_click_good
- data
{}
- 说明
app通知游戏点赞玩家
20. app 通知游戏扔大便玩家(2022-11-19 增加,当前支持你画我猜,你说我猜,友尽闯关)
- state
app_common_self_click_poop
- data
{}
- 说明
app通知游戏点踩玩家
21. app 通知游戏设置 FPS
- state
app_common_game_fps
- data
{
"fps": 60
}
- 说明
app通知游戏设置FPS
22. app 通知游戏创建订单的结果
- state
app_common_game_create_order_result
- data
{
"result": 1 // app通知游戏创建订单的结果0:失败 1:成功
}
- 说明
app通知游戏创建订单的结果
23. app 通知游戏设置玩法(只支持 德州 pro 和 teenpattipro)
- state
app_common_game_settings
- data
{
// 具体参数请参考下文
}
- 德州 设置的数据配置(例子)
{
smallBlind: number, // 1 配置小盲,大盲为小盲的2倍[1,2,5,10,20,50,100,200,500,1000]
ante: number, // 0 前注
sBuyIn: number, // 100 带入值/最小带入配置[100,200,100,200,500,1000,2000,5000,100000]
bBuyIn: number, // 200 最大带入,无限(0)
isAutoStart: number, // 2 0表示关闭自动开始 [0,2,6,7,8,9]
isStraddle: number, // 0 0:关闭,1自由,2强制
tableDuration: number, // 0.5 牌桌时长配置(小时)[0.5,1,2,4,6,8]
thinkTime: number, // 20 思考时间(秒)[10,15,20]
}
- teenpatti 设置的数据配置(例子)
{
"ante": 10, // 底分
"darkCard": 2, // 暗牌回合
"isAutoStart": 2, // 是否自动开始
"potLimit": 1000, // 最大带入
"round": 10, // 最大回合
"singleLimit": 32, // 单注限
"tableDuration": 0.5, // 牌桌时长配置(小时)
"thinkTime": 15 // 思考时间(秒)
}
- 说明
app通知游戏创建订单的结果
24. app 通知游返回大厅(当前支持umo)
- state
app_common_game_back_lobby
- data
{}
- 说明
app通知游戏返回大厅
25. app通知游戏定制UI配置表
- state
app_common_game_ui_custom_config
- data
{
// 具体配置表内容请参考如下
}
- ludo(飞行棋)
{
"gameBoard01": "https://", // 棋盘底
"gameBoard02": "https://", // 棋盘
"diceBg": "https://", // 骰子白底
"diceBgGold": "https://", // 黄金骰子底
"dice01": "https://", // 骰子1
"dice02": "https://", // 骰子2
"dice03": "https://", // 骰子3
"dice04": "https://", // 骰子4
"dice05": "https://", // 骰子5
"dice06": "https://", // 骰子6
"diceCrown": "https://", // 骰子皇冠
"chessYellow": "https://", // 黄色棋子
"chessBlue": "https://", // 蓝色棋子
"chessGreen": "https://", // 绿色棋子
"chessRed": "https://", // 红色棋子
"players": { // 玩家单独的特定制Map, key为玩家uid, value 是定制的UIConfig, 如果没有可以不填
"uid_0" : { // 玩家的uid
"diceBg": "https://", // 骰子白底
"diceBgGold": "https://", // 黄金骰子底
"dice01": "https://", // 骰子1
"dice02": "https://", // 骰子2
"dice03": "https://", // 骰子3
"dice04": "https://", // 骰子4
"dice05": "https://", // 骰子5
"dice06": "https://", // 骰子6
"diceCrown": "https://", // 骰子皇冠
"chessYellow": "https://", // 黄色棋子
"chessBlue": "https://", // 蓝色棋子
"chessGreen": "https://", // 绿色棋子
"chessRed": "https://", // 红色棋子
"rollDiceEffect": {
"dragonSkeletonUrl": "https://xxxx/remoteDragonEffect/rundice_ske.json",
"dragonAtlasUrl": "https://xxxx/remoteDragonEffect/rundice_tex.json",
"dragonTextureUrl": "https://xxxx/remoteDragonEffect/rundice_tex.png",
"animatureName": "Armature",
"animationName": "newAnimation"
}
},
"uid_1" : { // 玩家的uid
"diceBg": "https://", // 骰子白底
"diceBgGold": "https://", // 黄金骰子底
"dice01": "https://", // 骰子1
"dice02": "https://", // 骰子2
"dice03": "https://", // 骰子3
"dice04": "https://", // 骰子4
"dice05": "https://", // 骰子5
"dice06": "https://", // 骰子6
"diceCrown": "https://", // 骰子皇冠
"chessYellow": "https://", // 黄色棋子
"chessBlue": "https://", // 蓝色棋子
"chessGreen": "https://", // 绿色棋子
"chessRed": "https://", // 红色棋子
"rollDiceEffect": {
"dragonSkeletonUrl": "https://xxxx/remoteDragonEffect/rundice_ske.json",
"dragonAtlasUrl": "https://xxxx/remoteDragonEffect/rundice_tex.json",
"dragonTextureUrl": "https://xxxx/remoteDragonEffect/rundice_tex.png",
"animatureName": "Armature",
"animationName": "newAnimation"
}
},
...
}
}
五子棋
{ "chessBoard": "https://", // 棋盘底 "chessBlack": "https://", // 黑棋 "chessWhite": "https://", // 白棋 "chessBg": "https://", // 棋子背景 "tipsChess": "https://", // 提示落棋标志 "curChessWhiteBg": "https://", // 当前出棋的白色标志 "curChessBlackBg": "https://", // 当前出棋的黑色标志 }
baloot
{ "bg": "https://", // 桌面背景 "cardBg": "https://" // 牌背 "players": { "uid_0" : { // 玩家的uid "popBg": "https://" // 气泡 }, "uid_1" : { // 玩家的uid "popBg": "https://" // 气泡 } ... } }
消消乐
// note: JSON格式,请确保配置正常,如果其中有配置错误或加载异常,则全部使用游戏自带的资源(相当于没有配置) { items: [ /** 5种元素列表 */ { imageUrls: ["https://", "https://"], // 元素图片urls,如果是仅有一张,则没有动画,多张则根据duration间隔来切换帧动画 duration: 0.1 // 可选,元素帧动画轮播间隔,单位秒,默认0.1秒 }, { imageUrls: ["https://"] // 元素图片urls,如果是仅有一张,则没有动画,多张则根据duration间隔来切换帧动画 // duration: 0.1 // 可选,元素帧动画轮播间隔,默认0.1秒 }, { imageUrls: ["https://", "https://"], duration: 0.5 }, { imageUrls: ["https://", "https://"], duration: 0.1 }, { imageUrls: ["https://"], duration: 0.1 } ], loadingUrl: "https://", // 可选,开始游戏时加载资源的loading的动画贴图url itemGridUrl: "https://", // 可选,元素格子url reconnectAnim: { // 可选,重连loading动画 imageUrls: ["https://", "https://"], // 贴图urls duration: 0.1 // 帧动画时间间隔,单位秒 } }
美式8球
{ "logo": "https://", // logo url 资源链接 "players": { "uid_0" : { // 玩家的uid "stick": "https://" // 球杆图片连接 "table": "https://" // 桌布图片链接 "table_cushion": "https://" // 球桌框 }, "uid_1" : { // 玩家的uid "stick": "https://" // 球杆图片连接 "table": "https://" // 桌布图片链接 "table_cushion": "https://" // 球桌框 } ... } }
twmahjong
{ "logo": "https://", // logo url 资源链接 }
大话骰
{ "logo": "https://", // logo url 资源链接 }
26. app通知游戏玩家信息列表 (赛车)
- state
app_common_users_info
- data
{
"infos": [
{"uid": "", "avatar": "", "name": ""}, // uid: 玩家id,avatar:玩家头像url,name:玩家名字
...
]
}
- 说明
app通知游戏定制UI配置表
27. app通知游戏自定义帮助内容 (赛车)
- state
app_common_custom_help_info
- data
{
"content": [
"content1",
"content2",
"content3"
...
]
}
- 说明
app通知游戏自定义帮助内容
28. app主动调起主界面(赛车)
- state
app_common_show_game_scene
- data
{
}
- 说明
APP通知游戏客户端指令动作app主动调起主界面
29. app主动调起主界面(赛车)
- state
app_common_show_game_scene
- data
{
}
- 说明
APP通知游戏客户端指令动作app主动调起主界面
30. app主动隐藏主界面(赛车)
- state
app_common_hide_game_scene
- data
{
}
- 说明
APP通知游戏客户端指令动作app主动隐藏主界面
31. app通知游戏爆词内容(谁是卧底)
- state
app_common_game_send_burst_word
- data
{
"text": "", // 爆词内容 备注:如果不传该字段就是原始内容
}
- 说明
app通知游戏爆词内容
32. app通知游戏玩家所持有的道具卡(大富翁)
- state
app_common_game_player_monopoly_cards
- data
{
"reroll_card_count": 0, // 重摇卡的数量 (注:也可用字段 paid_events_19 替代)
"free_rent_card_count": 0, // 免租卡的数量(注:也可用字段 paid_events_18 替代)
"ctrl_dice_card_count": 0, // 购买指定骰子点数卡的数量(注:也可用字段 paid_events_20 替代)
"paid_events_19": 0, // 重摇卡的数量 (注:如果同时存在reroll_card_count,优先使用reroll_card_count)
"paid_events_18": 0, // 免租卡的数量 (注:如果同时存在free_rent_card_count,优先使用free_rent_card_count)
"paid_events_20": 0, // 购买指定骰子点数卡的数量 (注:如果同时存在ctrl_dice_card_count,优先使用ctrl_dice_card_count)
}
- 说明
app通知游戏玩家所持有的道具卡
33. app通知游戏获取到道具卡(大富翁)
- state
app_common_game_show_monopoly_card_effect
- data
{
"type": 1, // 1:重摇卡,2:免租卡,3:指定点数卡 (注: 也可用字段 paid_events_type 替代指定道具卡类型, 和paid_events_type 二选一, 如果同时存在type和paid_events_type,优先使用type)
"paid_events_type": "paid_events_19", // paid_events_19: 重摇卡,paid_events_18:免租卡,paid_events_20:指定点数卡 (注:和 type 字段二选一,如果同时存在type和paid_events_type,优先使用type)
"fromUid": "", // 发送的玩家id
"toUid":"", // 接收方玩家id
"count": 0, // 数量
}
- 说明
app通知游戏获取到道具卡
34. app通知游戏侧更新游戏币(概率游戏相关玩法)
- state
app_common_update_game_money
- data
{
}
- 说明
app通知游戏侧更新游戏币
35. app通知游戏玩家所持有的道具卡(只支持飞行棋)
- state
app_common_game_player_props_cards
- data
{
"props": "返回的json字符串如下", // 道具卡数量结构的json字符串,具体返回如下
}
ludo 返回字符串结构说明
注:返回的是一个json数据的字符串,specify_dice_roll是遥控骰子字段对应的数量 {"props": "{\"specify_dice_roll\":0}"}
说明
app通知游戏玩家所持有的飞行棋道具卡
36. app通知游戏播放玩家所获得的道具卡的特效(只支持飞行棋)
- state
app_common_game_player_props_cards_effect
- data
{
"paid_events_type": "specify_dice_roll", // 获得的道具卡名字(注:道具卡名字标注请看下方说明)
"fromUid": "", // 发送的玩家id
"toUid":"", // 接收方玩家id
"count": 0, // 数量
}
飞行棋(ludo)
paid_events_type: "specify_dice_roll" // 控制指定摇出骰子点数的道具
说明
app通知游戏播放玩家所获得的道具卡的特效
37. app通知游戏指定observer观众观看的玩家
- state
app_common_game_observe_player
- data
{
"uid":"", // 观众观看的玩家id
}
- 说明
app通知游戏指定observer观众观看的玩家 支持游戏: 怪物消消乐,连连看