下载 App

卡牌:市场调研

07/22综合

skill_market_research 当前仅完成了:
  • 加入随机技能池;
  • 可以在技能节点被选中;
  • 有新绘制图标;
  • 有 Tooltip 设计说明;
  • 能作为技能徽章显示。
但“选择后显示实时人数,并允许一次改选”的玩法逻辑尚未接入。

代码证据

1. Tooltip 明确标记为“设计中”

scripts/bullbear/Client.lua:830
当前内容仍是:
  • 技能 · 侦察 + 改选 · 设计中
  • “若倒计时未结束,可获得一次改选机会”
  • “需要改选机制,真实效果待接入”
所以客户端配置本身就说明尚未实现。

2. 客户端选牌后立即锁定

scripts/bullbear/ClientUIPlaying.lua:740
Client.MakeChoice() 开头是:
lua
if myChoice_ or mySpectating_ or not myAlive_ then return end
首次选择后 myChoice_ 已有值,后续点击会被直接拒绝。因此市场调研持有者目前也不能改选。

3. 服务端没有市场调研专用逻辑

scripts/bullbear/ServerGame.lua:334
Server_HandleChooseCard() 目前只是:
  1. 接收 Side;
  2. 写入 p.choice;
  3. 广播已选择;
  4. 检查是否全员完成;
  5. 全员完成后立即进入结算。
这里没有:
  • 检查玩家是否持有 skill_market_research;
  • 第一次选择后发送实时左右人数;
  • 记录是否使用过改选;
  • 限制最多改选一次;
  • 改选成功事件;
  • 消耗或阶段次数记录。
服务端实际上允许新请求覆盖 p.choice,但这不能算“已经支持改选”:
  • 客户端根本不会发出第二次请求;
  • 服务端没有验证玩家是否拥有市场调研;
  • 没有“一次”的次数限制;
  • 没有改选窗口;
  • 可能在全员选完后立即结算;
  • 这是普通赋值行为,不是完整、可靠的技能机制。

4. 左右人数只在揭示结算后广播

scripts/bullbear/ServerSettle.lua:543
现有 LeftCount、RightCount 属于 REVEAL_CHOICES 揭示结果。玩家看到时已经结算完成,不能用于改选。
目前没有“仅向市场调研持有者私发实时人数”的事件。

5. 文档写的是建议,不是完成状态

docs/项目文档/韭池肉林/插件化/技能系统设计.md:515
表格写的是:
改造成“选择后显示实时人数并允许一次改选”
不是“已接入”。
详细章节也明确列出待新增能力:
docs/项目文档/韭池肉林/插件化/技能系统设计.md:544
  • 服务端允许一次改选;
  • 私有信息事件;
  • 客户端显示左右人数;
  • 技能消耗与状态栏同步。
并标记为:
P3,不能作为第一批技能落地。

当前存在的问题

skill_market_research 已经在实际随机技能池中:
scripts/bullbear/ServerGame.lua:18
也就是说,玩家可能在技能节点抽到并选择它,但它目前只有徽章和说明,没有真实效果。虽然 Tooltip 标了“设计中”,实际放进正式随机池仍可能让玩家觉得选到了无效技能。
短期有两个合理选择:
  1. 暂时从运行池移除,等实现后再放回;
  2. 保留在池中,但明显标记为测试技能。

如果后续实现,建议先确定的规则

当前文档还有几个设计点需要在编码前明确。

推荐流程

  1. 市场调研作为持续持有技能,不因普通触发消失。
  2. 每阶段获得一次“调研机会”。
  3. 普通遭遇第一次选择后:
  4. 服务端保存初选;
  5. 仅向持有者发送当前 左 N / 右 M;
  6. 客户端重新开放左右牌;
  7. 显示“可改选一次”。
  8. 玩家可以:
  9. 保持原选择;
  10. 改到另一侧。
  11. 改选后立即锁定并消耗本阶段调研机会。
  12. 如果玩家不改选,建议在短窗口结束时也消耗机会,避免每回合反复窥探人数。
  13. 全员选择完成时,服务端需要给正在调研的玩家留一个很短的确认窗口,不能立即结算。

不建议显示的信息

只显示:
text
当前左 2 / 右 1
不显示:
  • 具体是谁选左或右;
  • 玩家名称;
  • AI 与真人身份;
  • 最终正确答案;
  • 牌面结算预测。
这样保留盲选和心理博弈。

关键规则建议

我建议采用:
每阶段第一次普通遭遇选择后,私下查看当前左右选择人数,并获得一次改选机会。确认或改选后,本阶段不再触发。
这比“玩家任意决定哪回合发动”更容易落地,因为不需要额外主动技能按钮。但策略性较弱。
如果希望更有策略,可以改成:
玩家每阶段可在任意一次普通遭遇初选后点击“市场调研”,查看实时人数并改选一次。
这种体验更好,但需要新增主动按钮、技能可用状态和移动端交互,开发复杂度更高。
本轮只进行了只读核对,没有修改代码或文档。
任务
当前任务栏共设计了 2 个阶段、7 个任务: --- ### 襁褓 · 初识世界(5个) | # | 任务名 | 描述 | 完成条件 | |---|--------|------|----------| | 1 | 看见万物 | 开启你的人生初体验 | 初始体验包开出 3 张牌 | | 2 | 伸手触碰 | 拖动任意一张牌 | 拖动 1 次 | | 3 | 万物相遇 | 把一张牌放到另一张牌上 |
官方
【更新】平台新版本发布游戏变成了“预约”截图
【更新】平台新版本发布游戏变成了“预约”
今天更新之后,一直奇怪怎么看不到“热度”,变成了“预约” 后面才知道,需要去这里改为 提供游玩 【更新】 1、新增便签墙功能,每一局都有小故事 2、增加了自定义头像
3 赞
1 回复
牌面文字反复重新布局和渲染
调查结论 问题已查清:牌面文字本身没有异常,也不是 NanoVG 重复绘制。真正原因是每名玩家或 AI 投币后,客户端都会销毁并重新创建整个战斗 UI。 左右牌文字、牌框、顶部头像、底部状态栏都在同一棵 UI 树中。因此本来只需要更新底部投币槽,却连带让红框内的牌面文字反复重新布局和渲染,表现为“闪烁几下”。 直接证据 Client.BuildPlayingUI() 每次先销毁现有根节点: scr
官方
WASM 崩溃
nvgCreateImage 在 WASM 环境下无法正确加载图片文件(中文路径/资源未打包进虚拟文件系统),返回看似正数但实际无效的纹理句柄。Lua 中 0/-1 都是 truthy,if 判断通过后把无效句柄传给 nvgImagePattern,C 层访问空指针 → WASM 内存越界。 彻底解决方案:纯矢量绘制,零文件 I/O 完全放弃图片加载,用 NanoVG 基础图元(圆/椭圆/描边)绘
官方
拖到合成目标才留位
错误原因 我在上一轮加回收功能时,为了"修位置回正"加了 else 分支:当牌既没拖到回收区、也没合成目标时,强制把牌弹回原位。这破坏了 Stacklands 的基本交互——拖到空地就该留在那里。 -- ❌ 错误版本(多余的 else 导致拖到空地也弹回) if inRecycle and not card.locked then ...回收溶解... elseif self._mergeTar
官方
【牌】兴登堡凶兆
这张卡的主题很适合《友谊的小船》,但按原始数值直接落地会有一个关键问题:右牌严格优于左牌,四人局会趋向全员选右,博弈不成立。 先评估原方案 选择 未扎堆 同侧≥3人 结论 左:追高 -15万 -40万 始终比右牌更痛 右:抄底 -10万 -25万 任意人数下都更优 无论同侧人数是多少,右牌都少亏: 未扎堆:右牌少亏 5万 扎堆后:右牌少亏 15万 所以理性玩家没有选择左牌的理由;最终通常会四人全选
官方
理性值跨局持久化
1. 数据常量(RationalityData.lua) M.INITIAL_VALUE = 100 -- 新玩家初始理性值 M.MAX_VALUE = 100 -- 理论上限 M.REMEDY_MAX_VALUE = 90 -- 药剂恢复封顶 M.REMEDY_REQUIRED_MAX_VALUE = 89 -- 药剂可用阈值(理性≤89) M.REMEDY_COST = 3 -- 药剂价格(宝
官方
UI按键动画设计
一、本次反复失败的根因(三个坑) 现象 根因 按钮完全不可见(空白/小白点) 入场动画把 scale/alpha 初始设 0,靠 Update 驱动 Tween 补到 1;但该模板页面级 Update 时序不可靠,补间不推进 → 永远停在 0 背景/按钮颜色反转 用了 nvgRGBA(r,g,b,255) 整数版,出现通道映射异常 矩形在、文字消失 文字色≈填充色;或 DrawStrokedTex
官方
闪跳问题
下面是这轮三个问题(音量滑块、拖动闪跳、选角页闪跳/白屏)的可复用经验与对应关键代码。代码均为磁盘最终落地版本。 经验一:拖动控件别在回调里重建整棵树 滑块/开关这类"边拖边回调"的控件,onChange 里只能原地改值,绝不能触发 BuildXxxUI() 整树重建——否则正在拖的滑块会被销毁,拖动中断。音量百分比标签也是同理,用闭包持有引用做原地 SetText。 scripts/bullbe
官方
大厅校准模式
一、整体架构 校准系统由四层组成: 层 文件 职责 状态容器 Client.lua 保存 lobbyCalibrationMode_/Drag_/Slots_/RestorePending_/SaveStatus_、路径常量、管理员标记 拖拽 + UI ClientUILobby.lua 指针事件包装、归一化坐标、实时预览、设置面板 序列化 ClientStorage.lua 本地 pref 读写
官方