查看“︁工程参考/配置文件/Server/NotifyDate.txt”︁的源代码
来自天龙知识库
←
工程参考/配置文件/Server/NotifyDate.txt
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:<span style="font-size:24px;line-height:1.4;overflow-wrap:anywhere;">工程参考/配置文件/Server/NotifyDate.txt</span>}} __NOTOC__ <div class="config-file-reference" style="max-width:1200px;margin:0 auto;line-height:1.8;color:#29343a;font-family:Arial,'Microsoft YaHei',sans-serif;letter-spacing:0;overflow-wrap:anywhere;"> [[首页|首页]] · [[工程参考/配置文件索引|配置文件索引]] · [[工程参考/配置文件修改约定|修改约定]] NotifyDate.txt 是「日期区间 → 文案」的对照表:第 2、3 列是起止日期(八位 YYYYMMDD),第 4 列是这段时间内登录后要发的文案。样本 40 行,内容是平安夜、圣诞节、元旦、情人节这类固定日期的问候。 和星期表一样,它自己不会生效,需要 NotifyOnline.txt 里 mode = 2 的行把日期转换领进去。 [[#文件位置与生效|位置与生效]] · [[#文件格式|文件格式]] · [[#字段详解|字段详解]] · [[#常用修改实例|修改实例]] == 文件位置与生效 == {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="width:24%;text-align:left;background:#edf3f2;padding:8px;" | 项目 ! scope="col" style="width:76%;text-align:left;background:#edf3f2;padding:8px;" | 说明 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 运行文件 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">./Config/NotifyDate.txt</code>,相对 Server 工作目录;路径写死在加载函数里。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 读取程序 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Server 进程:NotifyOnline.cpp 的 LoadNotifyDateTab 加载,NotifyDateProcess 在 NotifyOnline.txt 出现 mode = 2 的行时按当前日期匹配 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 生效方法 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 正常保存并停服后重启 Server。仅在 NotifyOnline.txt 有 mode = 2 且 isShow ≠ 0 的行时才会被用到。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 样本格式 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">GB18030-compatible</code>,<code style="white-space:normal;overflow-wrap:anywhere;">CRLF</code>。保留原编码;源码读取器不会自动把中文转为 UTF-8。 |} 日期由 <code style="white-space:normal;overflow-wrap:anywhere;">PlayerLoginProcess</code> 算成 <code style="white-space:normal;overflow-wrap:anywhere;">年*10000 + 月*100 + 日</code>,例如 2026 年 9 月 11 日是 20260911。判定式是 <code style="white-space:normal;overflow-wrap:anywhere;">datBegin <= iDate && datEnd >= iDate</code>,**两端都包含**。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="width:24%;text-align:left;background:#edf3f2;padding:8px;" | 检查项 ! scope="col" style="width:76%;text-align:left;background:#edf3f2;padding:8px;" | 行为 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 区间写法 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 同一天写成起止相同即可;跨月、跨年也支持,因为它只是一个整数比较。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 多条命中 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 全部发送,不做去重。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 上限 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 最多 64 行(m_tabDate[64]),超出读不进来。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 过期条目 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 不会报错,只是永远匹配不到;样本里就保留着 2006、2007 年的条目。 |} == 文件格式 == 首行是类型行:<code style="white-space:normal;overflow-wrap:anywhere;">INT INT INT STRING</code>;第二行是列名行,程序跳过其内容;从第三行开始读取数据。各列用真实 Tab 分隔,保留首列、空列及行尾,不用空格代替。数据行行首 # 表示注释,分号不是此表的注释规则。首列为空的行被跳过;不足的尾列补为空值,多余列不参与本页字段读取。空整数和非数字经 atoi 可能成为 0,空字符串仍为空,不把解析成功当作业务合法。第一列须唯一,重复会触发读取器错误。 == 字段详解 == 列号从 1 开始,源码列下标从 0 开始。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="width:34%;text-align:left;background:#edf3f2;padding:8px;" | 字段与类型 ! scope="col" style="width:42%;text-align:left;background:#edf3f2;padding:8px;" | 含义与修改要点 ! scope="col" style="width:24%;text-align:left;background:#edf3f2;padding:8px;" | 缺项或特殊值 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 1 列</code><br>INT:index | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 人工编号,判定不看它。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 不参与判定,允许重复。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 2 列</code><br>INT:BeginDate | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 区间起始日期,格式 YYYYMMDD(如 20061224)。包含在判定范围内。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 填 0 会让所有日期都满足“不小于起点”;加载过程不校验是不是合法日期,写 20261332 也不会报错,只是匹配不到。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 3 列</code><br>INT:EndDate | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 区间结束日期,格式同上。包含在判定范围内。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 小于起始日期时这条永远匹配不到。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 4 列</code><br>STRING:info$1$ | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 命中区间时发送的文案。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 发送时按单字节长度截断到 255;空串会发出一条空的系统消息。 |} == 常用修改实例 == 示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件保留原样本编码、中文表头与 CRLF。网页文字使用浏览器编码显示,不表示运行文件应改存 UTF-8。 === 把新年问候的有效期从 1 月 1 日延长到 1 月 3 日 === 修改前: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">INT INT INT STRING index BeginDate EndDate info$1$ 2 20070101 20070101 新年伊始,万象更新,天龙八部祝您在新的一年里,心想事成,万事如意。</pre> 修改后: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">INT INT INT STRING index BeginDate EndDate info$1$ 2 20070101 20070103 新年伊始,万象更新,天龙八部祝您在新的一年里,心想事成,万事如意。</pre> 按第 1 列定位 index 2(新年问候,起止原本都是 20070101)。只改第 3 列:20070101 → 20070103,之后 1 月 1 日到 1 月 3 日每天登录都会收到这条提示(两端都算在内)。 样本里的年份是 2007,实际启用请把日期改成今年的值。八位整数的写法不能有分隔符:2007-01-03 会被解析失败。其余三列保持原样。示例块含类型行、列名行与该行原文,不能覆盖整表。 == 验证与排查 == 改动后重启 Server,并确认 NotifyOnline.txt 里存在 mode = 2 且 isShow ≠ 0 的行。把某行的起始日期改成今天、结束日期改成明天,登录角色应当看到这条文案;把同样的起止改成去年,同一年内不会再出现这条提示。 换行、恢复后重启。 === 八位整数,两端包含 === 写 20070101 而不是 2007-01-01;<code style="white-space:normal;overflow-wrap:anywhere;">datBegin <= iDate && datEnd >= iDate</code>,起止当天都算数。 === 跨年只是整数比较 === 没有其他日历逻辑,20261225 到 20270105 这种跨年区间可以直接写。 === 过期条目不会报错 === 超过 64 行之外读不进来,读进来的过期条目只是永远命中不了,不会有任何提示——这也是样本里堆着大量 2006/2007 年条目的原因。 === 入口开关在另一张表 === 没有 NotifyOnline.txt 的 mode = 2 行,这张表不会被遍历。 == 关联与依据 == [[工程参考/配置文件/Server/NotifyOnline.txt|Server/NotifyOnline.txt]] · [[工程参考/配置文件/Server/NotifyWeek.txt|Server/NotifyWeek.txt]] [[工程参考/配置文件索引|其他配置及整理状态]] · [[工程参考/服务端外网设置|服务端外网设置]] · [[Lua接口/服务端函数索引|Lua 接口索引]] * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Module/NotifyOnline.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Module/NotifyOnline.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/DataBase/TLBB_DBC.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/DataBase/TLBB_DBC.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Server/Config/NotifyDate.txt</code>:实际加载、解析、字段使用或示例关联依据 本页核对 LoadNotifyDateTab 的四列读取与 64 行上限、NotifyDateProcess 的闭区间判定式,以及 iDate = 年*10000+月*100+日 的计算方式;未启动服务端与游戏,实际推送需要实测。 </div> [[Category:工程参考]]
返回
工程参考/配置文件/Server/NotifyDate.txt
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
创建账号
登录
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
搜索
工具
链入页面
相关更改
页面信息