具体类型:打开已有系统界面的拍脸(新手奖励本地实例)

本文只讲:复用已有 SceneId,通过一个拍脸 Item 直接打开已存在的 Window。
当前实例目标 Window:_MOE.WindowName.UI_NoviceReward_MainView。
当前配置和 Lua 均为本地链路实例,不是新需求可直接复制的正式 ID/排序/业务条件。


0. 先判断是否属于“打开已有系统界面”的新增

0.1 类型对比

情况 识别条件 是否使用本文 应转向
直接打开已有 Window WindowName 已存在;当前场景允许打开;不需要 ActivityModel 根据活动配置选页 是 按本文 Step 1~6
按活动 ID 打开活动详情 已有真实 activityId,且 ActivityModel:ShowPushFaceActivity 已有活动映射 否 通用模板“通过 ActivityModel 打开活动页”分支
目标 UI 尚不存在 Window、资源或打开入口尚未实现 否 先完成 UI/业务功能,再接拍脸;不要在 Item 中虚构 WindowName
需要异步资源/数据 UI 打开前必须下载资源、请求协议或等待模型就绪 不直接使用 通用模板“异步资源/数据准备”分支;先设计就绪和失败推进
纯逻辑、没有 UI 只发事件、打点、刷新或执行一次逻辑 否 通用模板“纯逻辑”分支;HandleShow 完成后 return false
Feature 内已有 UI 配表 featureName 非空,Window/业务模型属于副玩法包 仅复用本文接口思路 Item 放 Feature/<featureName>/Script/PushFace/Items/,并验证 Feature 包加载

0.2 使用本文的必要条件

全部满足才使用本文:

  • 已从源码确认目标 WindowName 存在。
  • 已确认 Window 可在目标 Scene 和窗口层级状态下打开。
  • 已确认需要直接 OpenWindow,而不是 ActivityModel、跳转系统或 Feature 专用入口。
  • 已确认打开参数;若无参数,也经过源码/现有调用点确认。
  • 已有可复用 SceneId;若没有,先返回通用模板“新增全新 SceneId”。
  • 已有正式 NeedShow 条件;若暂时恒 true,仅限本地测试。

0.3 快速判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
目标界面已存在?
├─ 否 → 先实现 UI,不使用本文
└─ 是
├─ 应由 activityId 决定活动详情?
│ ├─ 是 → ActivityModel 分支
│ └─ 否
├─ 是否依赖尚未就绪的数据/资源?
│ ├─ 是 → 异步准备分支
│ └─ 否
├─ 是否真的会打开一个可关闭的 UI?
│ ├─ 否 → 纯逻辑分支,HandleShow 返回 false
│ └─ 是 → 使用本文:NeedShow + OpenWindow
└─ 是否属于 Feature?
├─ 是 → 使用 Feature Item 目录
└─ 否 → 使用主玩法 Items 目录

1. 当前本地实例与目标

1.1 已交叉验证的当前事实

配置导出中已存在

只读核对文件:

1
letsgo_common/excel/Export/pbin/PushFaceData_Total.txt

当前行:

字段 当前值 说明
id 1000128 当前本地已占用示例,不可作为新需求 ID 复用
sortId 0 本地链路测试值,不代表正式排序建议
codeName NoviceRewardLocalTest 明确带 LocalTest,正式提交应替换/清理
fequency 1 Always
open true 已开启
needLevel 1 等级前置
sceneIds 1 当前导出 Scene 1;对应 Scene 表中 LoginDone
activityId 未配置 本例直接打开 Window,不走 ActivityModel
featureName 未配置 走主玩法 Item 目录

1000128 已被当前本地实例占用。新增正式配置必须重新查重并申请/选择 <新ID>,不能复制该 ID。

Item 文件已存在

1
LetsGo/Content/LetsGo/Script/PushFace/Items/PushFace_NoviceRewardLocalTest.lua

当前行为:

1
2
3
4
NeedShow 恒 true(仅本地测试)
→ AddPushFaceItemCount
→ OpenWindow(UI_NoviceReward_MainView)
→ 无显式返回,等待 UI 关闭事件推进

目标 Window 已存在

源码可检索到:

1
_MOE.WindowName.UI_NoviceReward_MainView

本例打开目标:

1
2
3
_MOE.UIManager:OpenWindow(
_MOE.WindowName.UI_NoviceReward_MainView
)

1.2 本例要验证什么

1
2
3
4
5
6
配置能被 Scene 1 收集
→ 动态 require 到 PushFace_NoviceRewardLocalTest.lua
→ NeedShow=true 时入队
→ 按同 Scene 排序消费
→ HandleShow 打开新手奖励主界面
→ 关闭界面后继续下一个拍脸

不验证:

  • 新手奖励正式业务条件是否已确定。
  • 1000128 是否可用于正式版本。
  • sortId=0 是否符合正式同 Scene 排序。
  • Scene 1 是否一定是新需求最终触发时机。

2. 完整步骤:新手奖励实例

Step 1:配表

1.1 唯一编辑入口

1
2
letsgo_common/excel/xls/P_拍脸.xlsx
└─ sheet:拍脸内容

禁止直接编辑:

1
2
3
letsgo_common/excel/Export/pbin/PushFaceData_Total.txt
letsgo_common/excel/client/data/PushFaceData_Total.txt
对应的 .pbin

1.2 当前本地示例行

字段 示例值 正式化动作
id 1000128 换成已查重的 <新ID>;该值不可复用
sortId 0 比较同 Scene 全量配置后确定 <正式sortId>
codeName NoviceRewardLocalTest 换成正式 <CodeName>,并同步 Item 文件名
fequency 1 按正式需求确认 1/2/3
open true 正式开关按发布计划确认
needLevel 1 按正式需求确认
sceneIds 1 仅在正式触发确为 LoginDone 时保留
activityId 空 直接打开已有 Window 时通常无需填写
featureName 空 主玩法目录;若迁移到 Feature,必须填写真实 Feature 名

1.3 SceneId 查证

当前只读 Scene 导出:

1
letsgo_common/excel/Export/pbin/PushFaceSceneData.txt

当前事实:

1
2
3
id: 1
sceneKey: "LoginDone"
checkFunc: "CheckLoginDone"

运行条件还需核对 PushFaceModel:CheckLoginDone:

1
2
必须位于允许大厅拍脸的场景
且 UIManager:IsOnLobbyViewWithNoDefaultWindowVisible() 为 true

正式需求若不是“登录完成且大厅窗口状态满足”,不要因为本例是 sceneIds=1 就照抄。

1.4 排序查证

当前框架:

1
2
table.sort(PushFaceList, function(a, b) return a.sortId > b.sortId end)
local CheckCell = CheckList[#CheckList]

因此:

1
2
3
sortId 降序排列
+ 从队尾消费
= 较小 sortId 先消费

sortId=0 会倾向于比同 Scene 的较大值更早消费,但它只是当前本地示例。正式值仍必须导出并比较同 Scene 配置,明确要排在哪两个现有项之间;相同 sortId 不得依赖稳定顺序。

1.5 频率查证

fequency 含义
1 Always,总是;仍受业务条件和“今日不再显示”等状态影响
2 OneDayOnce,每日一次
3 Once,总共一次

字段名当前实际拼写是 fequency,不要自行改为 frequency。


Step 2:编写 Item

2.1 文件路径与动态加载

当前文件:

1
LetsGo/Content/LetsGo/Script/PushFace/Items/PushFace_NoviceRewardLocalTest.lua

配表关系:

1
2
3
4
featureName 为空
→ basePath = LetsGo.Script.PushFace.Items
codeName = NoviceRewardLocalTest
→ require LetsGo.Script.PushFace.Items.PushFace_NoviceRewardLocalTest

2.2 当前本地恒 true 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-- 仅用于本地拍脸链路测试,提交前必须替换正式条件或删除。
return {
NeedShow = function(SceneId, activityId, id)
_MOE.Logger.Log(
"[PushFace_NoviceRewardLocalTest] NeedShow",
"SceneId=", SceneId,
"activityId=", activityId,
"id=", id
)
return true
end,

HandleShow = function(SceneId, activityId, id)
_MOE.Logger.Log(
"[PushFace_NoviceRewardLocalTest] HandleShow",
"SceneId=", SceneId,
"activityId=", activityId,
"id=", id
)

_MOE.Models.PushFaceModel:AddPushFaceItemCount()
_MOE.UIManager:OpenWindow(
_MOE.WindowName.UI_NoviceReward_MainView
)
end
}

提交前必须删除这个本地 Item,或把 NeedShow 恒 true 替换为正式条件,并同步清理 LocalTest 命名、测试 ID、测试排序和过量日志。

2.3 正式业务框架:直接打开新手奖励 Window

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
local function _NeedShowNoviceReward(SceneId, activityId, id)
local model = <已确认的新手奖励业务Model>
if not model then
return false
end

-- 只调用源码已存在、语义已确认的正式接口
return model:<已确认的CanShow接口>(activityId)
end

return {
NeedShow = function(SceneId, activityId, id)
return _NeedShowNoviceReward(SceneId, activityId, id)
end,

HandleShow = function(SceneId, activityId, id)
-- 若在消费到此项时条件可能变化,可在这里做最后防御
if not _NeedShowNoviceReward(SceneId, activityId, id) then
return false -- 没有打开 UI,立即推进
end

_MOE.Models.PushFaceModel:AddPushFaceItemCount()
_MOE.UIManager:OpenWindow(
_MOE.WindowName.UI_NoviceReward_MainView
)
-- OpenWindow 当前通常没有有意义的成功返回值;成功发起打开后可不返回
-- 不要为了“统一格式”写死 return true
end
}

模板中的 <已确认...> 必须替换为源码真实对象和接口;本文不代填、也不虚构。

2.4 HandleShow 返回值必须正确

场景 应如何返回 原因
已调用 OpenWindow,等待窗口关闭推进 nil / 无返回通常即可 当前关闭事件会触发下一拍脸
打开 API 自身返回有意义结果 return result 保留真实成功/失败语义
条件变化、业务 Model 缺失、打开 API 明确失败 return false 没有 UI 可关闭,框架需立即推进
纯逻辑完成 return false 同上
无论什么都 return true 禁止 会掩盖未打开 UI的失败,可能卡住队列

当前 UIManager:OpenWindow 没有稳定的有意义成功返回值;它还可能因资源依赖或竖屏窗口限制提前返回。因此若业务需要可确认的打开结果,应使用业务已有、返回语义明确的封装,而不是擅自把 OpenWindow 包装成恒 true。

2.5 如果正式需求实际是“七日礼/七日 BP”

当前源码中已确认可参考的业务查询:

1
2
3
_MOE.Models.NoviceRewardModel:GetCacheSevenDayDetailActData()
_MOE.Models.NoviceRewardModel:GetSevenDayBPHasUnRewardList(activityId, true)
_MOE.Models.NoviceRewardModel:GetIsSevenDayBPOpen(activityId)

已有参考 Item:

1
2
LetsGo/Content/LetsGo/Script/PushFace/Items/PushFace_SevenDayBP.lua
LetsGo/Content/LetsGo/Script/PushFace/Items/PushFace_SevenDayBPForWX.lua

参考逻辑表达的是:

1
2
3
4
5
缓存详情已就绪
→ 查询是否有未领取奖励
→ 查询七日 BP 开启/界面形态
→ 叠加微信大厅/引导条件
→ 决定是否展示

但必须注意:

  • 这些接口已在当前源码存在,不代表“新手奖励”正式需求一定等于七日 BP。
  • 是否采用、采用哪些返回值、是否需要活动 ID、是否区分微信大厅,必须由正式需求和目标界面逻辑确认。
  • 如果最终要按活动 ID 打开七日活动详情,应转到 ActivityModel 分支,而不是机械地直接打开 UI_NoviceReward_MainView。
  • 不要把参考代码中的活动 ID、引导 ID或平台条件复制到新需求。

Step 3:导表

1
2
3
4
修改 P_拍脸.xlsx
→ 使用团队现行表工具 Compile
→ 执行 Pbin
→ 核对 PushFaceData_Total.txt / PushFaceSceneData.txt

导出后核对:

1
rg -n "<新ID>|<正式CodeName>" letsgo_common/excel/Export/pbin/PushFaceData_Total.txt

通过标准:

  • 新 ID 唯一。
  • sortId/codeName/fequency/open/needLevel/sceneIds/featureName 与 Excel 一致。
  • 没有通过手改 txt/pbin 制造“本地看起来正确”的假结果。
  • 若本次未新增 SceneId,PushFaceSceneData 不应出现无关变更。

Step 4:静态检查

4.1 配置与文件

检查 预期
ID 不使用已占用 1000128;新 ID 全局唯一
codeName 与 PushFace_<codeName>.lua 完全一致
featureName 本例为空;迁移 Feature 时与路径一致
SceneId 正式触发时机与 Scene 的 sceneKey/checkFunc 一致
排序 已比较同 Scene 项;知道较小值先消费
频率 数字与业务语义一致
Window _MOE.WindowName.UI_NoviceReward_MainView 在当前源码存在

4.2 Item 接口

1
2
3
4
return table
├─ NeedShow:正式条件;本地阶段可临时 true
├─ HandleShow:打开已确认 Window
└─ ShouldKeepInQueue:本例不需要,不要无故添加

检查命令示例:

1
rg -n "NeedShow|HandleShow|return true|return false|UI_NoviceReward_MainView" LetsGo/Content/LetsGo/Script/PushFace/Items/PushFace_<正式CodeName>.lua

4.3 返回值检查

  • 打开成功路径:无返回或传播真实打开结果。
  • 条件失效/Model 缺失:return false。
  • 不允许所有路径统一 return true。
  • AddPushFaceItemCount 不应在明确失败前调用;若业务 API 能返回 false,应在结果非 false 后计数。

Step 5:本地测试

5.1 触发前准备

  • 确认测试账号等级满足 needLevel。
  • 确认处于 Scene 1 对应的登录完成大厅环境。
  • 确认没有 Loading、强引导、回流屏蔽或基础资源未就绪。
  • 确认目标 UI 当前没有打开。
  • 若测试 fequency=2/3,先明确是否需要清理对应本地展示缓存。

5.2 观察顺序

1
2
3
4
5
6
7
8
9
10
11
TriggerPushFaceListBySceneId(1)
→ CollectPushFaceListBySceneId(1)
→ 找到 id=1000128 / NoviceRewardLocalTest
→ _checkPreConditions 通过
→ require PushFace_NoviceRewardLocalTest
→ NeedShow 返回 true
→ 频率检查通过
→ 按 sortId 降序入队排序
→ 从队尾消费
→ HandleShow
→ OpenWindow(UI_NoviceReward_MainView)

5.3 测试矩阵

用例 操作 预期
本地通链 保留临时 NeedShow=true,进入触发场景 打开新手奖励主界面
UI 关闭 关闭新手奖励主界面 收到关闭事件并推进下一个拍脸
正式条件命中 替换正式条件,准备可展示账号状态 NeedShow=true 且打开 UI
正式条件不命中 清空奖励/关闭活动/让数据未就绪 NeedShow=false,不入队
消费时条件变化 收集后、打开前让条件失效 HandleShow return false,立即推进
同 Scene 排序 同时命中相邻配置 实际顺序与“较小 sortId 先消费”一致
频率 重复触发、跨日/重登按需求测试 与 fequency 一致
资源拦截 模拟目标资源依赖未满足 不应假装打开成功并永久卡队列;记录业务处理方案

Step 6:正式化与清理

6.1 必须替换

本地内容 正式化要求
id=1000128 当前已占用示例;新需求使用已查重 <新ID>
sortId=0 比较同 Scene 后确定正式值
codeName=NoviceRewardLocalTest 改为正式业务名,文件同步重命名
NeedShow return true 替换为正式业务条件
本地详细日志 只保留必要、可检索、不泄漏数据的正式日志
sceneIds=1 重新确认正式触发时机后决定
fequency=1 重新确认正式频率后决定

6.2 必须删除或确认不提交

  • 临时测试配置行是否应删除。
  • PushFace_NoviceRewardLocalTest.lua 是否应删除或正式重命名。
  • 恒 true 是否已全局扫描清除。
  • 本地缓存清理代码、测试命令、临时开关是否已移除。
  • 导出产物是否全部来自 Excel 编译,而不是手改。
  • Diff 中是否没有无关业务源码、Excel 行或自动生成文件变化。

3. 完整树状调用链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
登录完成/大厅创建
└─ PushFaceModel:OnLobbyCreate
└─ TriggerPushFaceListBySceneId(Enum_SceneId.LoginDone, true)
├─ EnsureSceneIdConfigInited
│ └─ P_拍脸.xlsx / 拍脸SceneId
│ └─ Scene 1: LoginDone → CheckLoginDone
├─ PushFaceTable.LoadWebConfig(callback)
└─ CollectPushFaceListBySceneId(1)
├─ PushFaceTable.GetPushfaceConfigBySceneId(1)
│ └─ 读取 PushFaceData_Total 中 sceneIds 包含 1 的行
├─ _checkPreConditions
│ ├─ open=true
│ ├─ id 不在现有队列
│ ├─ 等级满足 needLevel
│ ├─ 平台满足 loginPlatArr
│ └─ 时间满足 CheckCanShow
├─ _getConfigByCodeName
│ └─ require LetsGo.Script.PushFace.Items.PushFace_NoviceRewardLocalTest
├─ Item.NeedShow(1, activityId, 1000128)
├─ _checkFrequencyLimit(fequency=1)
├─ 加入队列
└─ sortId 降序排序
└─ 当前消费时从队尾取较小值
└─ TryShowNextAutoShowWindow
├─ CheckLoginDone
└─ HandleShowByList(1)
├─ 可选 ShouldKeepInQueue(本例没有)
├─ Item.HandleShow
│ ├─ AddPushFaceItemCount
│ └─ UIManager:OpenWindow(UI_NoviceReward_MainView)
└─ SavePushFaceTime
├─ HandleShow=false → 立即继续下一项
└─ nil/true/无返回 → 等待 UI 关闭
└─ ON_CLOSE_WINDOW_IMMEDIATELY
└─ OnCloseWindowImmediately
└─ TryShowNextAutoShowWindow

4. 迁移到商城/签到/其他已有界面的替换矩阵

以下只使用占位符。必须先从对应模块源码确认真实 WindowName、Model、参数和展示条件。

迁移目标 配表 codeName NeedShow HandleShow 额外确认
商城已有界面 <ShopPushFaceCodeName> <ShopModel>:<CanShowMethod>(...) <ShopOpenAPI>(<已确认参数>) 或 OpenWindow(<ShopWindowName>) 页签参数、商品数据是否就绪、场景是否允许
签到已有界面 <CheckInPushFaceCodeName> <CheckInModel>:<HasRewardOrCanShow>(...) <CheckInOpenAPI>(...) 是直接 Window 还是 ActivityModel;活动 ID是否真实存在
其他主玩法界面 <BusinessPushFaceCodeName> <BusinessModel>:<CanShow>(...) OpenWindow(<BusinessWindowName>, <Args>) WindowName、参数、资源依赖、关闭事件
Feature 内已有界面 <FeaturePushFaceCodeName> <FeatureModel>:<CanShow>(...) <FeatureModel>:<Open>(...) 填真实 featureName;Item 放 Feature 目录;包体加载
打开 API 有返回值 <CodeName> <FormalCondition> return <OpenAPI>(...) 明确 false 是否代表未打开;不要吞掉结果
打开 API 无返回值 <CodeName> <FormalCondition> OpenWindow(<WindowName>, ... ) 后不返回 确认调用确实发起打开,失败前置要返回 false

替换时不能只换 WindowName;至少重审:

1
2
3
4
5
6
7
8
SceneId
→ featureName
→ NeedShow 条件
→ 打开参数
→ 异步依赖
→ frequency
→ 同 Scene sortId
→ 关闭推进

5. 常见错误与排查

5.1 常见错误

错误 现象 正确处理
复用 1000128 配置覆盖/冲突 它已被本地实例占用;新需求重新查重
直接改 PushFaceData_Total.txt 重导后丢失、环境不一致 改 P_拍脸.xlsx 后 Compile → Pbin
sortId 越大越先的误判 展示顺序相反 当前是降序排、队尾消费,较小值先
正式保留 NeedShow=true 每次满足框架条件都入队 替换正式活动/奖励/数据条件
HandleShow 恒 return true 未开 UI 时队列等待关闭事件 失败返回 false;成功传播真实结果或不返回
未打开 UI却无返回 当前队列卡住 返回 false,立即推进
WindowName 拼错 加载/打开失败 从 _MOE.WindowName 和现有调用点查证
忽略资源依赖 OpenWindow 被资源检查拦截 采用业务正式打开入口或设计资源就绪链路
AddPushFaceItemCount 先于明确失败 统计虚高 有业务返回结果时,仅在 result ~= false 后计数
把七日 BP 参考当正式需求 条件、活动、界面错误 由产品/业务确认是否真正采用三个参考接口
Feature 配表却放主目录 require 失败 featureName 与 Item 路径一致

5.2 建议断点

1
2
3
4
5
6
7
8
9
10
11
PushFaceModel:OnLobbyCreate
PushFaceModel:TriggerPushFaceListBySceneId
PushFaceModel:CollectPushFaceListBySceneId
PushFaceModel:_checkPreConditions
PushFaceModel:_getConfigByCodeName
PushFace_NoviceRewardLocalTest.NeedShow
PushFaceModel:HandleShowByList
PushFace_NoviceRewardLocalTest.HandleShow
UIManager:OpenWindow
PushFaceModel:OnCloseWindowImmediately
PushFaceModel:TryShowNextAutoShowWindow

5.3 建议日志关键字

1
2
3
4
5
6
7
8
PushFaceModel:TriggerPushFaceListBySceneId
PushFaceModel:CollectPushFaceListBySceneId accepted
PushFaceModel:_checkPreConditions
PushFaceModel:HandleShowByList CheckCell.codeName
[PushFace_NoviceRewardLocalTest] NeedShow
[PushFace_NoviceRewardLocalTest] HandleShow
UIManager:OpenWindow
ON_CLOSE_WINDOW_IMMEDIATELY

5.4 按现象定位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
完全没有触发日志
└─ 查 OnLobbyCreate / Scene 触发入口

有 Collect、没有 accepted
├─ open / needLevel / platform / time
├─ NeedShow=false
└─ frequency 已命中

提示 failed to load config
└─ 查 codeName / featureName / 文件路径 / 返回 table

进入 HandleShow 但 UI 不见
├─ WindowName 是否真实
├─ 资源依赖是否拦截
├─ 竖屏窗口限制是否拦截
└─ 当前场景/层级是否允许

UI 不见且后续拍脸不走
└─ HandleShow 未打开 UI却返回 nil/true;失败分支应 return false

展示顺序不对
└─ 导出同 Scene 配置,按“较小 sortId 先消费”重算

6. 验收与清理 Checklist

6.1 功能验收

  • 目标确实属于“直接打开已有 Window”。
  • _MOE.WindowName.UI_NoviceReward_MainView 可从当前源码查到。
  • 命中正式 NeedShow 时打开目标界面。
  • 不命中时不入队。
  • 消费时条件失效会返回 false 并继续下一项。
  • UI 关闭后会推进下一拍脸。
  • 同 Scene 实际顺序符合正式要求。
  • 频率、等级、平台、时间符合需求。
  • 没有重复打开或卡队列。

6.2 配置验收

  • 新需求未复用 id=1000128。
  • 正式 codeName 不含 LocalTest。
  • 正式 sortId 已比较同 Scene 配置。
  • sceneIds=1 已由正式触发需求确认,而非照抄。
  • fequency 已由正式需求确认。
  • Excel 已执行 Compile → Pbin。
  • txt/pbin 没有被手工编辑。

6.3 代码清理

  • NeedShow return true 已删除或替换。
  • 测试 Item 已删除或正式重命名。
  • 测试日志和临时开关已清理。
  • 未虚构业务 Model、API、活动 ID、WindowName 或参数。
  • HandleShow 没有统一写死 true。
  • 未打开 UI的所有分支都能返回 false。
  • 若打开 API 返回有意义结果,已原样传播。

6.4 回归与提交

  • 同 Scene 前后拍脸不受影响。
  • 登录、回大厅、切场景、关闭全部窗口回归通过。
  • 强引导、Loading、资源未就绪等拦截路径无异常。
  • Diff 仅包含本需求需要的 Excel、编译产物、Item;无业务源码误改。
  • 已准备关闭 open 或回滚 Excel + Item 的方案。

7. 风险与依据

7.1 风险

风险 本例表现 控制措施
把本地示例当正式配置 复用 1000128/0/LocalTest 正式需求重新查重、排同 Scene 顺序、改名
恒 true 提交 每次均满足业务条件 提交前扫描 NoviceRewardLocalTest 与 return true
UI 打开失败但等待关闭 后续队列卡住 最后防御;失败返回 false;不写死 true
Scene 误用 登录时机不符合业务 查 sceneKey/checkFunc/触发入口 三者
排序误解 与其他登录拍脸抢顺序 牢记较小值先消费,比较同 Scene 全量
参考七日礼条件误套 业务语义错误 三个接口仅是已存在参考,是否采用由正式需求确认
资源依赖被忽略 OpenWindow 提前返回 查资源包与正式业务打开入口,设计失败推进

7.2 已核对源码依据

事实 位置
本地 Item 已存在并打开新手奖励 Window LetsGo/Content/LetsGo/Script/PushFace/Items/PushFace_NoviceRewardLocalTest.lua
WindowName 注解与系统枚举记录存在 LetsGo/Content/LetsGo/Script/Config/WindowName.lua、Config/CommonDefine.lua
本地配置 1000128 当前已导出 letsgo_common/excel/Export/pbin/PushFaceData_Total.txt
Scene 1 是 LoginDone/CheckLoginDone letsgo_common/excel/Export/pbin/PushFaceSceneData.txt
动态 require 路径规则 LetsGo/Content/LetsGo/Script/PushFace/PushFaceModel.lua
排序与队尾消费 同文件:CollectPushFaceListBySceneId、HandleShowByList
HandleShow=false 立即推进 同文件:HandleShowByList
OpenWindow 本身无稳定成功返回,且可能被资源/窗口限制提前拦截 LetsGo/Content/LetsGo/Script/Core/UI/UIManager_Deprecated.lua
七日 BP 三个参考接口的真实用法 PushFace_SevenDayBP.lua、PushFace_SevenDayBPForWX.lua

本文没有提供新的真实配置 ID、正式 SceneId、正式排序值、活动 ID或商城/签到 API。所有占位符都必须在对应正式需求中从源码和配置交叉查证后替换。


本文从 LearnByCompany 原始文档 自动同步。