查看“︁工程参考/配置文件/Public/ItemCompound.txt”︁的源代码
来自天龙知识库
←
工程参考/配置文件/Public/ItemCompound.txt
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:<span style="font-size:24px;line-height:1.4;overflow-wrap:anywhere;">工程参考/配置文件/Public/ItemCompound.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;"> [[首页|首页]] · [[工程参考/配置文件索引|配置文件索引]] · [[工程参考/配置文件修改约定|修改约定]] ItemCompound.txt 是生活技能的配方表。要改某件物品的制作材料或时间,先找到它的配方行,再确认这一行由内置制作流程还是 Lua 脚本处理。第 28 列“脚本ID”决定这个分支;有脚本的配方不能只改表格就假定消耗和产物也会改变。 [[#文件位置与生效|位置与生效]] · [[#文件格式|文件格式]] · [[#字段详解|字段详解]] · [[#常用修改实例|修改实例]] == 文件位置与生效 == {| 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;">../Public/Config/ItemCompound.txt</code>,相对于 Server 的工作目录;客户端使用自己的同名配置资源。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 读取程序 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Server 游戏进程;Game.exe 的配方界面、等级检查和进度显示 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 生效方法 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 正常保存并停服后,修改各 Server 实际使用的文件,再重启 Server;同步客户端资源并重启 Game.exe。当前检索范围未发现本表独立重载入口。保留编号时,已学会该配方的角色下次制作使用新的表值;修改配方不会自动重做已产出的物品。 |- | 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。 |} === 先辨认要改的编号 === {| 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;" | 第 1 列 index | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 配方编号。当前 Server 按从 0 开始的数据行位置查询;样本编号连续为 0..1082。保留此对应关系,不能按名称排序、删掉中间行或插入跳号。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 3 列 ResultID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 产物的物品模板编号,例如 10200011;不是配方编号、角色 GUID 或背包格。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 5 列对应技能ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 对应 Ability.txt 的生活技能,例如 4 是铸造;不是战斗技能表编号。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 7..16 列材料 | 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;" | 客户端选中的特殊材料背包位置通过另一路参数传入,再按第 32 列核对 CommonItem 子类;它不等于第 15 列 Stuff5ID。 |} === 两端各改哪里 === 服务端修改实际 Server 工作目录上一级的 Public/Config/ItemCompound.txt。客户端根据 Client/Bin/FairyResources.cfg 的 [General] 配置,使用 Client/Data/Config 散文件或 Client/Data/Config.axp 内的 ItemCompound.txt;源码 resources/Public 样本不会自动复制到客户端。修改配方名称、材料、需求或时间时同步两端同名资源;只有服务端改了,界面仍可能显示旧值。脚本本身修改服务端 Public/Data/Script 对应文件,不把服务端 Lua 函数拿到客户端控制台调用。 == 文件格式 == 首行是类型行:<code style="white-space:normal;overflow-wrap:anywhere;">INT STRING INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT STRING INT INT</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;" | 样本有 1083 行,编号 0..1082;内置制作入口要求编号 >0,所以 0 行保留为占位,不作为新增可制作示例。总数据行必须少于 2048。重复编号拒绝;空首列使整行被跳过,后续行位置随之改变。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 2 列</code><br>STRING:名称$1$ | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 客户端配方名称;Server 业务加载不保存本列。$1$ 是原表头内容,不是名称中必须填写的标记。 | 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;">第 3 列</code><br>INT:ResultID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 内置流程的产物物品模板编号,须在对应物品基础表中存在。脚本分支可从脚本自己的表决定产物。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 只有正数保存为有效编号,0、空值或负数变为 -1。无产物编号不等于安全停用配方;校验和创建仍可能被调用。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 4 列</code><br>INT:ResultNum | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 内置流程产物数量,按件或堆叠数量传入物品创建。装备通常保留 1。Server 保存为 BYTE,建议只填写合法正整数 1..255,并核对物品堆叠限制。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 0 不创建正常产物,但消耗流程仍可能执行。256 转为 0,257 转为 1,-1 转为 255;不要用负数或超范围值。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 5 列</code><br>INT:对应技能ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 配方所属生活技能,与 Ability.txt 编号及玩家发起的技能匹配。1 烹饪、2 制药、4 铸造、5 缝纫、6 工艺、11..19 为九类门派制作,46..48 为对应精制类。 | 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;">第 6 列</code><br>INT:技能等级需求(此列最低填1) | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 生活技能等级需求。客户端开始制作时检查;内置流程还把它传给熟练度脚本作为配方等级,影响所得熟练度。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 按原表要求至少填 1。当前内置 Server 检查技能归属和已学配方,但没有在 IsFitPrescr 中重复这项等级比较,不能把客户端限制说成服务端也一定有同一检查。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 7 列</code><br>INT:Stuff1ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 1 种普通材料的物品模板编号。内置流程统计未锁定物品数量并按模板扣除,不要求客户端为每种普通材料选择一个背包格。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 正数表示有效材料;无材料用 -1/-1 完整配对放在末尾。有效材料之间不能插空。编号为 0、负数或空时,读取器只前进一列,会影响后续材料,详见“材料为什么必须连续”。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 8 列</code><br>INT:Stuff1num | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 与前一列材料编号配对的消耗数量,单位为该模板的物品件数。填写正整数,并与实际堆叠和库存上限相容。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 有效材料配 0 或负数量没有可靠的业务合法性检查,不应用作免费配方开关。无材料时两列都保留 -1,不留一个正数量。重复材料号分别检查,不能保证按合计数量检查,合并为一对。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 9 列</code><br>INT:Stuff2ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 2 种普通材料的物品模板编号。内置流程统计未锁定物品数量并按模板扣除,不要求客户端为每种普通材料选择一个背包格。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 正数表示有效材料;无材料用 -1/-1 完整配对放在末尾。有效材料之间不能插空。编号为 0、负数或空时,读取器只前进一列,会影响后续材料,详见“材料为什么必须连续”。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 10 列</code><br>INT:Stuff2num | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 与前一列材料编号配对的消耗数量,单位为该模板的物品件数。填写正整数,并与实际堆叠和库存上限相容。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 有效材料配 0 或负数量没有可靠的业务合法性检查,不应用作免费配方开关。无材料时两列都保留 -1,不留一个正数量。重复材料号分别检查,不能保证按合计数量检查,合并为一对。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 11 列</code><br>INT:Stuff3ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 3 种普通材料的物品模板编号。内置流程统计未锁定物品数量并按模板扣除,不要求客户端为每种普通材料选择一个背包格。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 正数表示有效材料;无材料用 -1/-1 完整配对放在末尾。有效材料之间不能插空。编号为 0、负数或空时,读取器只前进一列,会影响后续材料,详见“材料为什么必须连续”。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 12 列</code><br>INT:Stuff3num | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 与前一列材料编号配对的消耗数量,单位为该模板的物品件数。填写正整数,并与实际堆叠和库存上限相容。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 有效材料配 0 或负数量没有可靠的业务合法性检查,不应用作免费配方开关。无材料时两列都保留 -1,不留一个正数量。重复材料号分别检查,不能保证按合计数量检查,合并为一对。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 13 列</code><br>INT:Stuff4ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 4 种普通材料的物品模板编号。内置流程统计未锁定物品数量并按模板扣除,不要求客户端为每种普通材料选择一个背包格。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 正数表示有效材料;无材料用 -1/-1 完整配对放在末尾。有效材料之间不能插空。编号为 0、负数或空时,读取器只前进一列,会影响后续材料,详见“材料为什么必须连续”。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 14 列</code><br>INT:Stuff4num | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 与前一列材料编号配对的消耗数量,单位为该模板的物品件数。填写正整数,并与实际堆叠和库存上限相容。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 有效材料配 0 或负数量没有可靠的业务合法性检查,不应用作免费配方开关。无材料时两列都保留 -1,不留一个正数量。重复材料号分别检查,不能保证按合计数量检查,合并为一对。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 15 列</code><br>INT:Stuff5ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 5 种普通材料的物品模板编号。内置流程统计未锁定物品数量并按模板扣除,不要求客户端为每种普通材料选择一个背包格。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 正数表示有效材料;无材料用 -1/-1 完整配对放在末尾。有效材料之间不能插空。编号为 0、负数或空时,读取器只前进一列,会影响后续材料,详见“材料为什么必须连续”。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 16 列</code><br>INT:Stuff5num | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 与前一列材料编号配对的消耗数量,单位为该模板的物品件数。填写正整数,并与实际堆叠和库存上限相容。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 有效材料配 0 或负数量没有可靠的业务合法性检查,不应用作免费配方开关。无材料时两列都保留 -1,不留一个正数量。重复材料号分别检查,不能保证按合计数量检查,合并为一对。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 17 列</code><br>INT:活力需求 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 制作的基础活力需求,单位为活力点。内置流程先计算辅助技能修正后的需求,再检查和扣除;烹饪、制药、门派制作可由 ConfigInfo.ini 的 AssistantDemandFormulaParam0..3 修正。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 0 或负值在已核对内置扣除分支不扣活力,不会反向奖励。技能修正与脚本分支另行处理,不能假定任意配方实际消耗都等于此列。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 18 列</code><br>INT:精力需求 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 制作的基础精力需求,单位为精力点。烹饪、制药和门派制作与活力类似,可受辅助技能和全局公式修正。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 内置扣除只对修正后正值执行。0/负值不是返还精力,脚本配方可有自己的需求。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 19 列</code><br>INT:门派贡献度需求 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 内置流程的门派贡献点需求;正值时检查余额,制作时扣除。不是帮贡、金币或元宝。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 0、负数或空值不在此内置分支扣门派贡献。脚本可自行另算。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 20 列</code><br>INT:属性需求2数量 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 保留的第二种属性需求。Server 保存此列,但已核对校验与扣除处的分支为空,没有实际扣除操作。 | 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;">第 21 列</code><br>INT:冷却时间(毫秒) | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 内置流程注册的冷却时长,单位毫秒。5000 表示 5 秒。仅在第 23 列冷却组非负且本值 >0 时注册冷却;不是制作读条时长。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 0/负值不登记新冷却,但第 23 列仍可能检查已有的同组冷却。第 27 列才是操作时间。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 22 列</code><br>INT:需求工具ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 配方额外要求的工具物品模板编号。内置检查要求背包至少存在一件,不在普通材料循环中自动扣除工具;Ability.txt 自身的工具条件也先行检查。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 正数启用;0、空值、负数转换为 -1,表示本表没有额外工具要求。它不是场景中炉子等平台对象 ID。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 23 列</code><br>INT:冷却组ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 冷却组编号。非负时检查角色是否仍处于同组冷却;同组会相互影响。它不是冷却秒数,也不是配方编号。Server 保存为有符号 16 位整数,正组号不能超过 32767。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 关闭本配方的内置冷却组检查;0 是会参与检查的组,空值读成 0。32768 会成为负数而跳过检查,不能填写。保留已使用的有效组,新增组及其跨技能影响需要实测。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 24 列</code><br>INT:熟练度需求 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 内置制作要求的当前生活技能熟练度,直接与服务器内部整数比较。内部 100 对应通常界面显示的 1 点;例如要求显示 10 点应按 1000 内部单位核对。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 大于当前值时拒绝,等于可以通过。0/负值不会通过这项检查拒绝正常的非负熟练度;不是角色升级经验。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 25 列</code><br>INT:增加熟练度 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Server 保存为 m_ExpIncrement;当前检索范围未发现内置制作或客户端直接使用此字段增加熟练度。内置流程调用脚本 701601 的 GainExperience。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 保留原值。把 1 改为 100 不能据此保证制作所得熟练度增加百倍;脚本的实际计算见下方。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 26 列</code><br>INT:功能分组 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 客户端配方功能分类值,通过界面数据接口返回。Server 业务加载器不读取本列;不是随机掉落组或服务端品质组。 | 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;">第 27 列</code><br>INT:操作时间 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 每次制作的操作时长,单位毫秒。正值覆盖 Ability.txt 的基础操作时间;Server 和客户端读条都读取本列。3000 表示 3 秒。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 0、负值或空值不使用配方自定义时长,沿用技能时长,不表示瞬间完成。此覆盖发生在脚本分支选择之前。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 28 列</code><br>INT:脚本ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Server 脚本编号,对应 Public/Data/Script.dat。-1 走内置制作;其他值调用对应脚本的 AbilityCheck 和 AbilityProduce,参数依次为场景实例 ID、角色对象 ID、配方编号。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须显式填写 -1 或核对过的脚本编号。0、空值及其他负数都不是关闭标记;可能进入缺失脚本或函数分支。回调返回业务 ORESULT,不能随意用 true/false 代替。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 29 列</code><br>INT:失败时产品编号 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 正数加载为失败替代品的物品模板编号;0/空值/负数变为 -1。已找到生成一个替代品的 OnProcFailure 实现,但当前内置 OnProcOver 完成后直接走成功分支。 | 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;">第 30 列</code><br>STRING:随机配方的详细描述$1$ | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 客户端返回的配方详细描述,Server 业务加载器不保存。用于随机配方说明,不解析成产物列表。 | 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;">第 31 列</code><br>INT:品质规则 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 名字是“品质规则”,内置创建实际把它作为创建原因 reason 传入。普通路径 -1 变为 0;铸造、缝纫、工艺的进阶实现可能先加所选特殊材料 CommonItem 的物品等级档次,再把结果 -1 变为 0。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 不是固定星数、套装编号,也不是直接查 ItemSegQuality 第一列的行号。具体装备按 EquipBase 的品质规则和创建原因选择分布;保留原值并关联品质分布页核对。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 32 列</code><br>INT:特殊材料的物品子类(From CommonItem.txt),若填写则必须 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 铸造、缝纫、工艺的进阶流程要求的特殊材料 CommonItem 物品子类。>=0 时先要求客户端提供第 5 个材料位置参数,再在消耗阶段核对所选物品的子类。客户端变量虽叫 nIsNeedSpecial,实际表值不是普通的 0/1 开关。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 不要求提供特殊材料,但客户端如果仍传入特殊材料位置,消耗分支仍检查并扣一件。0/空值要求子类 0,不表示关闭;普通制作类或脚本未必使用同一规则。 |} == 常用修改实例 == 示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件保留原样本编码、中文表头与 CRLF。网页文字使用浏览器编码显示,不表示运行文件应改存 UTF-8。 === 把“三亭砍山刀图样”的制作时间从 3 秒改为 4 秒 === 修改前: <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 STRING INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT STRING INT INT index 名称$1$ ResultID ResultNum 对应技能ID 技能等级需求(此列最低填1) Stuff1ID Stuff1num Stuff2ID Stuff2num Stuff3ID Stuff3num Stuff4ID Stuff4num Stuff5ID Stuff5num 活力需求 精力需求 门派贡献度需求 属性需求2数量 冷却时间(毫秒) 需求工具ID 冷却组ID 熟练度需求 增加熟练度 功能分组 操作时间 脚本ID 失败时产品编号 随机配方的详细描述$1$ 品质规则 特殊材料的物品子类(From CommonItem.txt),若填写则必须 1 三亭砍山刀图样 10200011 1 4 1 20103001 25 20103061 10 20103097 12 20308001 1 -1 -1 20 -1 -1 -1 -1 -1 -1 0 1 1 3000 -1 -1 我填了 7 -1</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 STRING INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT STRING INT INT index 名称$1$ ResultID ResultNum 对应技能ID 技能等级需求(此列最低填1) Stuff1ID Stuff1num Stuff2ID Stuff2num Stuff3ID Stuff3num Stuff4ID Stuff4num Stuff5ID Stuff5num 活力需求 精力需求 门派贡献度需求 属性需求2数量 冷却时间(毫秒) 需求工具ID 冷却组ID 熟练度需求 增加熟练度 功能分组 操作时间 脚本ID 失败时产品编号 随机配方的详细描述$1$ 品质规则 特殊材料的物品子类(From CommonItem.txt),若填写则必须 1 三亭砍山刀图样 10200011 1 4 1 20103001 25 20103061 10 20103097 12 20308001 1 -1 -1 20 -1 -1 -1 -1 -1 -1 0 1 1 4000 -1 -1 我填了 7 -1</pre> 在完整文件中按第 1 列定位配方 1“三亭砍山刀图样”,核对第 3 列产物为 10200011、第 5 列技能为 4。只把第 27 列 3000 改成 4000,保存原编码、32 列和 Tab。服务端与客户端都做同一项修改。 保留四组材料 20103001×25、20103061×10、20103097×12、20308001×1,末尾材料对 -1/-1、活力 20、脚本 -1、品质原因 7、特殊材料子类 -1 和其他字段不动。不额外选择特殊材料。预期是同一已学配方、材料和工具齐全的测试角色,每次制作读条约由 3 秒变为 4 秒;产物仍为原物品,材料与基础活力需求保持不变。网络延迟、打断或队列可能影响实际完成时刻,须同时检查服务器结果和客户端进度。 这三行仅供对照与读取器验证,不能替代整表:单独留下配方 1 会把它变成零基第 0 行。始终编辑完整文件的原行,保留配方 0 和所有其他行。 == 验证与排查 == 先核对 32 列、两行表头、首列编号与数据行位置一致、所有材料连续且数量为正。服务端启动时检查 Load Ability Prescription、Init Prescription failed 或 ItemCompound.txt layout error;出现 Done 日志还不等于完成游戏验证。用已学配方 1 的测试角色制作,比较修改前后读条、物品编号、四种材料和活力变化,测试材料不足、工具不足、背包满和中途打断时的结果;核对客户端提示与重新登录后的行为。恢复时正常停服,还原两端配置并重启。配置备份只能恢复规则,不会返还已消耗的材料或撤销已生成物品;本次没有实际执行制作。 === 材料为什么必须连续 === 加载器遇到有效材料编号才继续读取紧随的数量;编号无效时仅前进一列。例如第一组写 -1/-1,第二组开始又放有效材料,Server 会把第一个 -1 当作空材料、第二个 -1 又当作下一种空材料,后面材料整体错位。更危险的是 -1/99:99 会被当成下一种材料编号,后面的物品编号可能变成数量。 安全布局是先写所有有效材料对,剩余对统一填 -1/-1。当前 1083 行样本均没有“无效材料后又有有效材料”的间隔;编辑时沿用这条规则。不要把后面的材料左移一列,也不要删除 Tab。 === 内置制作和脚本制作 === 内置流程先检查技能与已学配方,再检查工具、熟练度、未锁材料、活力精力、门派贡献、冷却和空间。读条结束再次核对后才消耗,随后调用熟练度脚本和产物创建。扣除与产出不是一次自动回滚事务:普通扣材料分支没有检查每次删除的返回值,进阶分支也可能在扣了一部分材料后失败,所以不能承诺“制作失败一定不消耗”。 脚本分支在开始与结束时调用 AbilityCheck,通过后调用 AbilityProduce 并直接返回。脚本自行完成检查、消耗、熟练度和产物处理,Server 不再替它执行上述内置消耗和正常产出。样本实际使用的脚本映射如下,路径相对 Public/Data/Script;改脚本号前必须确认该脚本自己的配方表有目标编号。 {| 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;" | 700900 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">event/peifang/general_recipe.lua</code> |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 700901 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">event/peifang/foodmat.lua</code> |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 700959 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">event/peifang/substuff.lua</code> |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 700960 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">event/peifang/g_fengren_yifu.lua</code> |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 335134 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">obj/item/ShenQi_XueYuShenBing.lua</code> |} === 熟练度到底由哪里增加 === 内置流程调用 obj/growpoint/cp_abilitylogic.lua 的 x701601_GainExperience,传入技能编号和第 6 列配方等级。当前脚本在技能等级 1..12 且有有效升级配置的情况下,以内部整数计算:技能等级不高于配方等级加 100,高 1 级加 50,高 2 级及以上加 0,并限制在本级熟练度上限。通常分别显示为 1 点、0.5 点、0 点;界面可能以整数显示。升级配置读取失败时脚本中的 ExpLimit 没有本次可靠赋值,需要检查脚本日志,不能当成默认无限上限。脚本配方可传不同的等级或自行决定是否增加。第 25 列不参与这段公式。 === 特殊材料另有条件 === 第 32 列不是独立决定所有特殊材料的开关。当前铸造/精制铸造还要求材料模板为 20500001..20500008,缝纫对应 20501001..20501008,工艺对应 20502001..20502008,且 CommonItem 档次 >1;存在于表内和子类匹配也须成立。额外材料按客户端提供的背包位置扣一件,不能填写物品 GUID 代替背包格。子类校验发生在普通材料扣除之后,错误选择可能已造成部分消耗;本页示例不更改此字段,绑定继承与特殊产物需要单独实测。 === 相关 Lua 查询 === [[Lua接口/服务端/IsPrescrLearned|IsPrescrLearned]] 的顺序是 <code style="white-space:normal;overflow-wrap:anywhere;">IsPrescrLearned(sceneId, selfId, recipeId)</code>,正常人类角色上下文返回数字 1 或 0。selfId 是当前场景对象 ID,不是 GUID;recipeId 是配方编号。[[Lua接口/服务端/GetAbilityExp|GetAbilityExp]] 返回服务器内部熟练度整数,[[Lua接口/服务端/SetPrescription|SetPrescription]] 用于学习状态,调用前须阅读各接口页。仅修改本表不会自动让角色学会新配方。 == 关联与依据 == [[工程参考/配置文件/Public/CommonItem.txt|Public/CommonItem.txt]] · [[工程参考/配置文件/Server/ConfigInfo.ini|Server/ConfigInfo.ini]] · [[工程参考/配置文件/Server/ItemSegQuality.txt|Server/ItemSegQuality.txt]] [[工程参考/配置文件索引|其他配置及整理状态]] · [[工程参考/服务端外网设置|服务端外网设置]] · [[Lua接口/服务端函数索引|Lua 接口索引]] * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityManager.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/Ability.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityManager.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityCompound.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityCompound.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityAdvancedCompound.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityFoundry.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityTailor.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityArtwork.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/Ability.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityCooking.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityPharmacy.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityMenpai.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Script/LuaFnTbl_Ability.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Script/LuaInterface.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Obj/Obj_Human_Skill.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/DB/HumanDB.inl</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/ServerBase/FileDef.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/ServerBase/ScriptDef.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/GameDefine.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/Type.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;">Client/Client/Common/TDDBC_Struct.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Game/DBC/GMDataBase.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Game/Object/Character/AI/GMAI_MySelf.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Game/Object/Character/Obj_Character_Logic.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Game/Interface/GMGameInterface_Script_DataPool.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Game/Interface/GMGameInterface_Script_LifeAbility.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Render/ResourceProvider.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Render/RenderSystem.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Core/Core/FairySystem.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Client/Bin/FairyResources.cfg</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Client/Bin/FairyResources正式服.cfg</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Config/Ability.txt</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Config/CommonItem.txt</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Config/EquipBase.txt</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Data/Script.dat</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Data/Script/obj/growpoint/cp_abilitylogic.lua</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Data/Script/event/peifang/general_recipe.lua</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Data/Script/event/peifang/foodmat.lua</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Data/Script/event/peifang/substuff.lua</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Data/Script/event/peifang/g_fengren_yifu.lua</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Data/Script/obj/item/ShenQi_XueYuShenBing.lua</code>:实际加载、解析、字段使用或示例关联依据 原始 DBC、配方结构、加载/行查询与内置校验、消耗、脚本分支流程通过隔离夹具测试。库存、Lua 执行、计时与产物创建使用测试壳,进阶制作和客户端为源码核对;没有运行游戏或实际扣物品。两端交互、绑定、随机产物、脚本错误恢复仍需要实测。 </div> [[Category:工程参考]]
返回
工程参考/配置文件/Public/ItemCompound.txt
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
创建账号
登录
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
搜索
工具
链入页面
相关更改
页面信息