二七王:建房选项配置补精灵键、bit 统一挂到 item、补 || {} 保护声明
Sprites_CreateRoom.js 的注释说「配置里每个选项声明自己用哪个精灵键」,但 EQW_RoomOptions
的 items 只有 label/value,渲染器只剩「按下标拼字符串」一条路——而那正是同文件明文禁止的;
何况也拼不对(组的 key 是 'rules',精灵却叫 ROOM_BOX_RULE_1)。
- 每个类别加 titleSprite,每个选项加 box/text 精灵键,房卡附注加 noteSprite。
- bit 统一挂到每个 item 上(单选组各项写同一个 bit),拼 roomtype 的循环对
radio/checkbox 是同一个形状(item → 写 value 到 bit),不再按组/项两种层级分支;
checkbox 项补上 value:'1'。
- 补上其他常量文件都有的 `|| {}` 保护性声明。
- 守卫新增:精灵键必须存在且互不重复、必须恰好覆盖建房 View 预置的全部选项精灵、
bit 不得再挂在组上、单选组内 bit 一致、多选组 bit 互异、位号刚好铺满 0–4
(对齐服务端 class.config.js 的 IDX_ASET..IDX_NOCHECK)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -80,23 +80,35 @@ EQW_Layout.ROOM_OPTION_OVERFLOW_GRID = {
|
||||
//整个界面由本配置驱动渲染,加一个选项 = 配置里加一条,不改渲染逻辑(工程总则 §5 OCP / §6 配置优先)。
|
||||
//type: 'radio' 单选 / 'checkbox' 多选 / 'radioOptional' 单选可不选
|
||||
//选择框帧号 = (useCheckbox ? 3 : 1) + (selected ? 1 : 0),useCheckbox = (checkbox 或 radioOptional)
|
||||
//【roomtype 拼串只在一处实现】每个选项自带 bit 与 value,拼串就是遍历本配置,
|
||||
//不得在别处按下标硬拼(与服务端 class.config.js parse() 对称的 SSOT 要求)
|
||||
var EQW_RoomOptions = {
|
||||
//
|
||||
//【精灵键由配置给出】每个类别声明自己的标题精灵 titleSprite,每个选项声明自己的选择框精灵 box
|
||||
//与文字精灵 text,附注声明 noteSprite——渲染器一律按键名取精灵,【不得按下标拼字符串】
|
||||
//(组的 key 是 'rules'、精灵却叫 ROOM_BOX_RULE_1,本来就拼不出来)。
|
||||
//
|
||||
//【roomtype 拼串只在一处实现】拼串就是遍历本配置,不得在别处按下标硬拼
|
||||
//(与服务端 class.config.js parse() 对称的 SSOT 要求)。bit/value 统一挂在【每个 item 上】:
|
||||
// - radio:组内各 item 写同一个 bit,选中哪个就把该 item 的 value 写进该位;
|
||||
// - checkbox:勾选写 item.value、不勾写 '0'。
|
||||
//这样拼串循环对两种 type 是同一个形状(item → 写 value 到 bit),不必按组/项两种层级分支
|
||||
var EQW_RoomOptions = EQW_RoomOptions || {
|
||||
categories: [
|
||||
{ titleFrame: 1, /* 牌局 */ groups: [
|
||||
{ key: 'aset', type: 'radio', bit: 0,
|
||||
items: [ { label: '6局', value: '0' }, { label: '12局', value: '1' } ] },
|
||||
{ key: 'card', type: 'radio', bit: 1, note: 'cardCost',
|
||||
items: [ { label: '房主扣卡', value: '0' }, { label: 'AA每人扣卡', value: '1' } ] }
|
||||
{ titleFrame: 1, titleSprite: 'ROOM_CAT_TITLE_1', /* 牌局 */ groups: [
|
||||
{ key: 'aset', type: 'radio',
|
||||
items: [ { label: '6局', value: '0', bit: 0, box: 'ROOM_BOX_ASET_1', text: 'ROOM_TEXT_ASET_1' },
|
||||
{ label: '12局', value: '1', bit: 0, box: 'ROOM_BOX_ASET_2', text: 'ROOM_TEXT_ASET_2' } ] },
|
||||
{ key: 'card', type: 'radio', note: 'cardCost', noteSprite: 'ROOM_TEXT_CARD_COST',
|
||||
items: [ { label: '房主扣卡', value: '0', bit: 1, box: 'ROOM_BOX_CARD_1', text: 'ROOM_TEXT_CARD_1' },
|
||||
{ label: 'AA每人扣卡', value: '1', bit: 1, box: 'ROOM_BOX_CARD_2', text: 'ROOM_TEXT_CARD_2' } ] }
|
||||
] },
|
||||
{ titleFrame: 2, /* 模式 */ groups: [
|
||||
{ key: 'peek', type: 'radio', bit: 4,
|
||||
items: [ { label: '可查牌', value: '0' }, { label: '不查牌', value: '1' } ] }
|
||||
{ titleFrame: 2, titleSprite: 'ROOM_CAT_TITLE_2', /* 模式 */ groups: [
|
||||
{ key: 'peek', type: 'radio',
|
||||
items: [ { label: '可查牌', value: '0', bit: 4, box: 'ROOM_BOX_PEEK_1', text: 'ROOM_TEXT_PEEK_1' },
|
||||
{ label: '不查牌', value: '1', bit: 4, box: 'ROOM_BOX_PEEK_2', text: 'ROOM_TEXT_PEEK_2' } ] }
|
||||
] },
|
||||
{ titleFrame: 3, /* 规则 */ groups: [
|
||||
{ titleFrame: 3, titleSprite: 'ROOM_CAT_TITLE_3', /* 规则 */ groups: [
|
||||
{ key: 'rules', type: 'checkbox',
|
||||
items: [ { label: '傍王', bit: 2 }, { label: '爬坡', bit: 3 } ] }
|
||||
items: [ { label: '傍王', value: '1', bit: 2, box: 'ROOM_BOX_RULE_1', text: 'ROOM_TEXT_RULE_1' },
|
||||
{ label: '爬坡', value: '1', bit: 3, box: 'ROOM_BOX_RULE_2', text: 'ROOM_TEXT_RULE_2' } ] }
|
||||
] }
|
||||
],
|
||||
//房卡消耗联动(协议 §0.5):不硬编码在 UI 代码里
|
||||
|
||||
Reference in New Issue
Block a user