// ============================================================================ // 01_SubGame_modify.js —— 平台交互/创建房间接口「转发壳」(框架维护,子游戏不碰) // 顶部为「房型/创建房间配置区」(数据,子游戏填值);其下为接口转发壳(转发到 SubGameHooks)。 // 严格 ES5。 // ---------------------------------------------------------------------------- // 【平台约定精灵:25 号 = 创建房间确认按钮】(接入子游戏必看) // 平台框架在「创建房间」界面提供 25 号精灵作为“确认/提交”按钮;其点击交互与 // 发送的数据包,均需【子游戏自己实现】(平台不代发),约定流程: // 1. 子游戏在打开创建房间界面时注册 25 号精灵的点击(经 SpriteEventController // 或 mouseup),点击即“确认创建房间”。 // 2. 子游戏按界面选项拼出 roomtype(房型配置串,编码局数/人数/扣卡/规则等, // 由各子游戏按玩法自定义与解析),组装并发送创建房间请求: // Net.Send_create_room({ // agentid : GameData.AgentId, // playerid: C_Player.playerid, // gameid : GameData.GameId, // roomtype: <房型配置字符串> // }); // // 本麻将实现见 codes/game/ui/handlers/CreateRoomEventHandler(bindEvents 注册 // 25→submit;submit 用 UIManager._buildRoomTypeString 拼 roomtype 后 Net.Send_create_room)。 // ============================================================================ // ---------- 配置区(数据,子游戏按玩法填值;与 00 的 Game_Config 分工) ---------- var Game_Modify = Game_Modify || {}; // ---------- 平台需要的必须字段 ---------- Game_Modify.roomDes = ""; // 房间描述,子游戏在 setRoomDes 内填 Game_Modify.game_config = {}; // 游戏配置默认值 Game_Modify.combat = { maxPlayerCount: 5, pageOnelimitStrLen: 8, pageOneDoc: false, pageTwolimitStrLen: 16, pageTwoDoc: false }; Game_Modify.Type_1 = [ { id: 0, des: "10局(房卡X1)", roomcard: 1, type: 1 }, { id: 1, des: "20局(房卡X2)", roomcard: 2, type: 2 } ]; Game_Modify.Type_2 = [ { id: 0, des: "房主扣卡", type: 1 }, { id: 1, des: "每人扣卡", type: 2 } ]; Game_Modify.CreateRoomData = { Type_1: 0, Type_2: 0 }; // ---------- 接口转发壳(A 类:无 hook 即 no-op) ---------- Game_Modify.utlmousedown = function (gameid, spid, downx, downy, no1, no2, no3, no4, no5, no6) { if (window.SubGameHooks && SubGameHooks.utlmousedown) return SubGameHooks.utlmousedown(gameid, spid, downx, downy, no1, no2, no3, no4, no5, no6); }; Game_Modify.utlmousedown_nomove = function (gameid, spid, downx, downy, timelong, no1, no2, no3, no4, no5) { if (window.SubGameHooks && SubGameHooks.utlmousedown_nomove) return SubGameHooks.utlmousedown_nomove(gameid, spid, downx, downy, timelong, no1, no2, no3, no4, no5); }; Game_Modify.mouseup = function (gameid, spid_down, downx, downy, spid_up, upx, upy, timelong, no1, no2) { if (window.SubGameHooks && SubGameHooks.mouseup) return SubGameHooks.mouseup(gameid, spid_down, downx, downy, spid_up, upx, upy, timelong, no1, no2); }; Game_Modify.utlmousemove = function (gameid, spid, downx, downy, movex, movey, timelong, offmovex, offmovey, no1) { if (window.SubGameHooks && SubGameHooks.utlmousemove) return SubGameHooks.utlmousemove(gameid, spid, downx, downy, movex, movey, timelong, offmovex, offmovey, no1); }; Game_Modify.utlgamemydrawbegin = function (gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7) { if (window.SubGameHooks && SubGameHooks.utlgamemydrawbegin) return SubGameHooks.utlgamemydrawbegin(gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7); }; Game_Modify.gamemydraw = function (gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7) { if (window.SubGameHooks && SubGameHooks.gamemydraw) return SubGameHooks.gamemydraw(gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7); }; Game_Modify.OpenCreateRoom = function () { if (window.SubGameHooks && SubGameHooks.OpenCreateRoom) return SubGameHooks.OpenCreateRoom(); }; Game_Modify.CloseCreateRoom = function () { if (window.SubGameHooks && SubGameHooks.CloseCreateRoom) return SubGameHooks.CloseCreateRoom(); }; Game_Modify.setRoomDes = function (roomcode, asetcount, roomtype) { if (window.SubGameHooks && SubGameHooks.setRoomDes) return SubGameHooks.setRoomDes(roomcode, asetcount, roomtype); }; // ---------- gameCombat 兼容空定义 ---------- // 平台 gamemain.js 仍直接调用 gameCombat.utl*(战绩界面回调),保留全局对象与 6 个空接口防报错。 // 战绩功能由 RecordView 重建(见迁移子项目 2);届时这些接口可改为委托或保持空。 var gameCombat = gameCombat || {}; gameCombat.utlani_doend = gameCombat.utlani_doend || function () {}; gameCombat.utlmousedown = gameCombat.utlmousedown || function () {}; gameCombat.utlmouseup = gameCombat.utlmouseup || function () {}; gameCombat.utlmousemove = gameCombat.utlmousemove || function () {}; gameCombat.utlgamemydraw = gameCombat.utlgamemydraw || function () {}; gameCombat.utlgamemydrawbegin = gameCombat.utlgamemydrawbegin || function () {}; // 战绩接收入口(平台 09_Net 调):转发到 SubGameHooks(框架转发壳不引用 codes;子游戏在 SubGameHooks 内转 CombatService) gameCombat.get_player_grade1 = function (_msg) { if (window.SubGameHooks && SubGameHooks.get_player_grade1) return SubGameHooks.get_player_grade1(_msg); }; gameCombat.get_player_grade2 = function (_msg) { if (window.SubGameHooks && SubGameHooks.get_player_grade2) return SubGameHooks.get_player_grade2(_msg); }; // 战绩入口:13 号精灵点击 → 发送获取战绩请求(Net.Send_get_player_grade1,平台底层发送) // 点击经 平台 → Game_Modify.mouseup → SubGameHooks.mouseup → SpriteEventController 链到达 if (typeof SpriteEventController !== 'undefined' && SpriteEventController.registerMouseUp) { SpriteEventController.registerMouseUp(13, function () { if (typeof Net !== 'undefined' && Net.Send_get_player_grade1) { Net.Send_get_player_grade1({ agentid: GameData.AgentId, playerid: C_Player.playerid, gameid: GameData.GameId, type: 0 }); } }); } // 平台通用精灵交互(从 SubGameHooks 移入;经 Game_Modify.mouseup/gamemydraw→SubGameHooks→SpriteEventController 分发) // 注:25 号(创建房间提交)已归创建房间职责,移至 codes/game/ui/handlers/CreateRoomEventHandler.bindEvents。 if (typeof SpriteEventController !== 'undefined') { // 150:帮助按钮 if (SpriteEventController.registerMouseUp) { SpriteEventController.registerMouseUp(150, function () { if (typeof GameUI !== 'undefined' && GameUI.OpenHelp) { GameUI.OpenHelp(); } }); } // 248:协议勾选绘制(勾上时自绘钩) if (SpriteEventController.registerDraw) { SpriteEventController.registerDraw(248, function (e) { if (GameData.ProtocolIndex) { ifast_mydrawbmp(e.spriteId, 4, 5, 5, 40, 40, 0, 0, 40, 40); } }); } }