适用范围
本文适用于复用既有 FeelFeedBack800 七日登录 UI、仅调整活动日期的场景。
当前服务端脚本:
服务端/ubuntu/tlbb/services/scripts/Reward/FeelFeedBack800.lua
活动脚本 ID 为 792012。客户端界面通过服务端 UI 指令接收活动最后日期,因此日期调整不需要修改客户端文件。
结论
只改活动时间、奖励内容不变时,只需修改服务端 FeelFeedBack800.lua 顶部的四个常量:
local ACTIVITY_VERSION = 260723
local ACTIVITY_START_TIME = os.time({ year = 2026, month = 7, day = 23, hour = 0, min = 0, sec = 0 })
local ACTIVITY_END_TIME = os.time({ year = 2026, month = 7, day = 30, hour = 0, min = 0, sec = 0 })
local ACTIVITY_LAST_DAY = 20260729
不需要修改:
客户端/Interface/FeelFeedBack800/FeelFeedBack800.lua
services/scripts/scripts.lua 的脚本注册
services/scripts/obj/item/FeelFeedBack800Gift.lua
日期规则
活动开启判断为:
now >= ACTIVITY_START_TIME and now < ACTIVITY_END_TIME
这是半开区间。若活动希望覆盖 开始日 至 结束日 的完整自然日,ACTIVITY_END_TIME 必须写为结束日的下一天零点。
| 目标活动日期 |
ACTIVITY_START_TIME |
ACTIVITY_END_TIME |
ACTIVITY_LAST_DAY |
| 2026-07-23 至 2026-07-29 |
2026-07-23 00:00:00 |
2026-07-30 00:00:00 |
20260729 |
不要把结束时间写成 2026-07-29 00:00:00,否则 7 月 29 日全天都会关闭活动。
四个常量的职责
| 常量 |
用途 |
改期要求 |
ACTIVITY_VERSION |
区分活动期次,并隔离玩家旧的登录天数和领奖记录 |
每一期使用新的唯一值,建议 YYMMDD,例如 260723 |
ACTIVITY_START_TIME |
开放的起始时刻 |
通常写活动首日 00:00:00 |
ACTIVITY_END_TIME |
开放的排他结束时刻 |
写最后一天的下一日 00:00:00 |
ACTIVITY_LAST_DAY |
下发给 UI 的展示截止日期 |
写 YYYYMMDD,例如 20260729 |
ACTIVITY_VERSION 不能省略。登录天数记录在任务数据槽 137,领奖状态在槽 136;版本变化后,ResetOldActivityData() 会清空旧期数据,避免上一期的领取记录影响新一期。
客户端 UI 为什么不需要改日期
服务端 OnOpenMainWindow() 通过 UI 指令 79201202 下发:
self:UICommand_AddInt(1)
self:UICommand_AddInt(nTime)
self:UICommand_AddInt(nLingQu)
self:UICommand_AddInt(ACTIVITY_LAST_DAY)
self:DispatchUICommand(selfId, 79201202)
客户端 FeelFeedBack800_OnEvent() 读取第 4 个参数,拆出月、日后显示:
g_FeelFeedBack800_MD_LastDay = Get_XParam_INT(3)
local nMDLast = math.mod(g_FeelFeedBack800_MD_LastDay, 10000)
local nMDMonth = math.floor(nMDLast / 100)
local nMDMDay = math.mod(nMDLast, 100)
FeelFeedBack800_Text2:SetText(ScriptGlobal_Format("#{QRDL_20211229_18}", nMDMonth, nMDMDay))
因此客户端没有写死本期的具体日期。服务端改好 ACTIVITY_LAST_DAY 后,玩家重新打开活动窗口即可看到新日期。
改奖励时的额外要求
本教程的“只改一个服务端文件”结论只适用于改期,不适用于改奖励。
- 服务端
g_FeelFeedBack800_PrizeList 决定实际发放的物品和数量。
- 客户端
g_FeelFeedBack800_PrizeList 决定界面显示的物品和数量。
修改奖励时,两端都要同步,否则玩家看到的奖励可能与实际获得的奖励不同。客户端文件仅在奖励、图标数量、界面布局或文案需要调整时才需要改动;单纯改日期不要修改客户端。
上线步骤
- 修改四个活动常量。
- 用 Lua 编译器执行语法检查:
luac -p services/scripts/Reward/FeelFeedBack800.lua
- 通过现有脚本热重载机制重载
FeelFeedBack800,或重启相应服务。
- 使用活动期间角色重新打开活动界面,确认截止日期显示为预期日期。
- 用未参与过本期的角色确认首次登录计为第 1 天;用上一期已有记录的角色确认数据已按新版本重置。
- 在结束日当天确认活动仍可领取,并在次日 00:00 后确认活动关闭。
常见错误
| 现象 |
原因 |
修复 |
| 最后一天零点后活动就关闭 |
ACTIVITY_END_TIME 写成最后一天零点 |
改为下一天零点 |
| 新一期仍显示旧领奖状态 |
没有修改 ACTIVITY_VERSION |
使用新的唯一版本号 |
| UI 日期没刷新 |
脚本未重载,或玩家未重新打开窗口 |
重载脚本并重新打开窗口 |
| UI 显示奖励与实际发奖不同 |
只改了服务端或客户端其中一侧奖励表 |
修改奖励时同步两端表 |