工程参考/配置文件/Public/DropNotify.txt

来自天龙知识库
跳到导航跳到搜索


首页 · 配置文件索引 · 修改约定

DropNotify.txt 给击杀掉落的拾取广播提供文案。掉落包在 DropBoxContent 第 3 列写下通知编号;玩家捡起物品后,Server 按编号在本表里找稿,同一编号有多行时随机取一条。它不是开箱/转蛋公告,也不替代物品表上的广播开关。

位置与生效 · 文件格式 · 字段详解 · 修改实例

文件位置与生效

项目 说明
运行文件 ../Public/Config/DropNotify.txt,相对于 Server 工作目录。源码宏 FILE_ITEM_DROP_NOTIFY。
读取程序 Server 在 ItemTable::Init 加载;拾取掉落盒时按包上的通知编号查询。GM 命令 reloadtab=DropNotify 可重读
生效方法 推荐停服后备份并修改实际 Public 副本,再重启 Server。已有最高 GM 权限的管理入口可执行 reloadtab=DropNotify,等号右侧名称区分大小写,不带 .txt;它不是 Lua 调用。当前重载重新分配通知表,源码未释放旧分配,不用于频繁循环刷新。客户端不加载本表。
样本格式 GB18030-compatibleCRLF。保留原编码;源码读取器不会自动把中文转为 UTF-8。

样本 101 行、5 列。第 2 列通知编号 0..74,必须按非递减排列,允许重复;样本不少编号有 2 或 3 条稿。第 1 列索引加载器不读,但仍须唯一,因为 DBC 按首列建索引。样本频道列全是 4。

谁决定发不发 作用
DropBoxContent 第 3 列 写入通知编号。-1 表示该包不带通知号。
物品表广播开关 装备、普通物品、材料、宝石各表的广播标志为假则直接返回。任务物品恒为假。
本表 按编号选文案和频道。找不到编号就不发。

占位符在发送前替换:&A 活动描述、&S 场景名、&T 同场景队长名(没有则用拾取者名)、&U 拾取者、&I 物品传输串。模板和结果都限 255 字节。不要在文案里写 %,替换后按 sprintf 处理。

文件格式

首行是类型行:INT INT INT STRING STRING;第二行是列名行,程序跳过其内容;从第三行开始读取数据。各列用真实 Tab 分隔,保留首列、空列及行尾,不用空格代替。数据行行首 # 表示注释,分号不是此表的注释规则。首列为空的行被跳过;不足的尾列补为空值,多余列不参与本页字段读取。空整数和非数字经 atoi 可能成为 0,空字符串仍为空,不把解析成功当作业务合法。第一列须唯一,重复会触发读取器错误。

字段详解

列号从 1 开始,源码列下标从 0 开始。

字段与类型 含义与修改要点 缺项或特殊值
第 1 列
INT:索引(无具体含义)
行号。DBC 按本列建索引,加载通知内容时不读它。样本 0..100 唯一递增。 空首列跳行。重复编号触发 DBC 错误。改它不会改变按通知号查找的结果。
第 2 列
INT:广播类型ID(顺序递增)
通知编号,对应 DropBoxContent 第 3 列。查找按本列全表扫描,同一编号的多行随机抽一条。加载时若本行编号小于上一行则断言失败。 须保持非递减。-1 不会被掉落包当作有效通知号来发。样本 0 有 3 条。
第 3 列
INT:频道类型:4-系统消息,6-帮派消息,7-门派消息
聊天频道。4 或其它非 6、非 7 的值都按系统消息发送;6 发帮派并加前缀 @*;SrvMsg;GLD:;7 发门派。枚举定义在 GameDefine2.h:系统=4、帮派=6、门派=7。样本全为 4。 空值经 atoi 为 0,仍走系统频道。改成 6/7 后仍要有对应帮会或门派才会看到。
第 4 列
STRING:活动描述$1$
替换 &A 时插入的短描述。拷入 64 字节缓冲,超长截断并补 0。样本第一行是企鹅王。 空串合法。不参与编号匹配。
第 5 列
STRING:广播内容…
广播模板。拷入 256 字节缓冲,超长截断并补 0。发送时依次替换五个占位符。列数必须至少 5。 缺列断言失败。模板里不要出现 %。

常用修改实例

示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件保留原样本编码、中文表头与 CRLF。网页文字使用浏览器编码显示,不表示运行文件应改存 UTF-8。

把企鹅王通知的频道从系统改为帮派

修改前:

INT	INT	INT	STRING	STRING
索引(无具体含义)	广播类型ID(顺序递增)	频道类型:4-系统消息,6-帮派消息,7-门派消息	活动描述$1$	广播内容(消息限长256CHAR,严禁使用字符%):&A-活动描述,&S-场景名称,&T-队长名称,&U-玩家名称,&I-物品名称$1$
0	0	4	企鹅王	#W&U#P在雪原上将#{_BOSS42}#P踹翻在地,捡起#W&I#P,飞一般的走了。

修改后:

INT	INT	INT	STRING	STRING
索引(无具体含义)	广播类型ID(顺序递增)	频道类型:4-系统消息,6-帮派消息,7-门派消息	活动描述$1$	广播内容(消息限长256CHAR,严禁使用字符%):&A-活动描述,&S-场景名称,&T-队长名称,&U-玩家名称,&I-物品名称$1$
0	0	6	企鹅王	#W&U#P在雪原上将#{_BOSS42}#P踹翻在地,捡起#W&I#P,飞一般的走了。

按第一列定位行 0。样本第 2 列为通知号 0,第 3 列为 4,活动描述为企鹅王。只把第 3 列改为 6,保留 5 列、模板和其余 100 行。本片段含表头与该行,不能覆盖整表。通知号 0 另有两行仍为频道 4;发送时在三行里随机,只有抽中本行才走帮派。隔离加载读回频道 6。实际拾取还要求掉落包填写通知号 0,且该物品广播开关为真。需要实测。

验证与排查

启动有 InitItemDropNotifyTable() Ok!。101 行、编号仍非递减,行 0 频道为 6。用引用通知号 0 的掉落包击杀并拾取,看系统或帮派频道。reloadtab=DropNotify 后新文案应生效,但不要反复重载。恢复备份后重启或再 reload 一次。

发送时机

在掉落盒拾取成功、物品进入背包之后发送,不是怪物死亡当下。Lua 开箱/转蛋用各自脚本广播,不读本表。

物品开关

GetIsBroadCast 按物品大类查装备、普通物品、宝石表。开关为假则本表再完整也不会发。

重载

命令解析取等号后整段,DropNotify 大小写必须一致。权限为最高 GM。重载不释放旧表。

关联与依据

Server/DropBoxContent.txt · Server/MonsterDropBoxs.txt · Public/CommonItem.txt · Public/GemInfo.txt

其他配置及整理状态 · 服务端外网设置 · Lua 接口索引

  • Server/Server/GameServer/Server/Item/ItemTable.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/ItemTable.h:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/ItemRuler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/ItemRuler.h:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Obj/Obj_ItemBox.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGCommandHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Common/GameDefine2.h:实际加载、解析、字段使用或示例关联依据
  • Common/ServerBase/FileDef.h:实际加载、解析、字段使用或示例关联依据
  • Common/DataBase/TLBB_DBC.cpp:实际加载、解析、字段使用或示例关联依据
  • Common/DataBase/TLBB_DBC.h:实际加载、解析、字段使用或示例关联依据
  • resources/Public/Config/DropNotify.txt:实际加载、解析、字段使用或示例关联依据
  • resources/Server/Config/DropBoxContent.txt:实际加载、解析、字段使用或示例关联依据

原始 DBC 与 InitItemDropNotifyTable 隔离测试。格式替换、频道发包和拾取流程为源码核对;未启动游戏。