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

来自天龙知识库
雪舞留言 | 贡献2026年9月11日 (五) 21:50的版本 (维护配置文件知识库:完整字段、读取范围、手工修改实例与核对状态)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航跳到搜索


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

Condition.txt 是城市玩法的条件表。建筑升级与研究项目都通过编号引用这里的一行;判定通过后会按本行扣除帮派资金与帮派属性,并把任务数当作研究进度条的上限。样本 79 行、7 列。

它只描述「要花什么、要先有什么」,不描述升级后得到什么——那部分在 CityBuilding.txt 与 ResearchItem.txt。

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

文件位置与生效

项目 说明
运行文件 ../Public/Config/Condition.txt,路径写死在加载函数里,相对于 World 工作目录。当前检索没有发现客户端注册本表,改它不需要同步客户端。
读取程序 World 进程:TableInit::Init_ConditionTable 用 DBCFile::OpenFromTXT 打开 "../Public/Config/Condition.txt"
生效方法 正常保存并停 World 后重启 World。当前检索未发现单独重载本文件的可用入口。
样本格式 GB18030-compatibleCRLF。保留原编码;源码读取器不会自动把中文转为 UTF-8。

服务端 Init_ConditionTable 逐行读第 2 到第 7 列(0 基 1 到 6),第 1 列只用于建立 DBC 索引,代码不读它。引用方统一用 g_ConditionTbl.m_Table[ConditionIndex - 1],所以编号是 1 起的行号。

判定逻辑集中在 BuildingCore.cpp:{| 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;" | 需求建筑类型不为 -1 时,取该类型建筑的当前等级,要求 >= 需求级别 - 1。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 帮派属性 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 消耗属性类型不为 -1 时,要求对应帮派属性 >= 消耗属性值。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 帮派资金 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 帮派资金列不为 -1 时,要求帮派资金 >= 该值。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 扣除 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 判定通过且传入扣除标志时,按消耗属性值扣帮派属性、按帮派资金列扣资金。 |}

这里用 -1(INVALID_ID)表示「不检查 / 不扣除」,不是 0。研究进度上限直接取任务数列:m_iMaxProgress = m_MissionNum

文件格式

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

字段详解

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

字段与类型 含义与修改要点 缺项或特殊值
第 1 列
INT:ID
条件编号,同时是 DBC 索引列。引用方按 m_Table[ConditionIndex - 1] 取用,因此这一列必须等于行号(1 起)。ResearchItem.txt 的条件列与 CityBuilding.txt 的 LevelRequire 列都指向它。 必须唯一且非空;重复触发 DBC 重复索引错误,空首列使整行被跳过。
第 2 列
INT:帮派资金
需要的帮派资金下限,判定通过后会按这个数值从帮派资金里扣除。 填 -1 表示既不检查也不扣除;填 0 表示只检查(资金必然满足)且扣 0。加载时断言非负,所以 -1 之外不能填其它负数。
第 3 列
INT:任务数
研究进度条的上限,研究发起时直接写进 m_iMaxProgress。 加载时断言非负;填 0 会让进度条一发起就满。
第 4 列
INT:消耗属性类型
要检查并扣除的帮派属性,取自 GUILD_ATTR_TYPE:0 工业、1 农业、2 商业、3 国防、4 科技、5 环境。 填 -1 表示不检查也不扣属性。加载时断言落在 0 到 5,超出会断言失败。
第 5 列
INT:消耗属性值
对应帮派属性需要达到的下限,判定通过后按这个数值扣除。 配合第 4 列使用;第 4 列为 -1 时本列不参与判定。
第 6 列
INT:需求建筑类型
前置建筑类型,取自 BUILDING_TYPE:0 县衙、1 厢房、2 酒肆、3 钱庄、4 防具、5 锻台、6 武具、7 米仓、8 城墙、9 集仿、10 医舍、11 武仿、12 箭塔、13 书房、14 奇迹、15 校场、16 火冰塔、17 大旗,最大 17。 填 -1 表示没有建筑前置。加载时断言落在 -1 到 BUILDING_MAX-1。
第 7 列
INT:需求级别
前置建筑需要达到的等级。判定式是「建筑当前等级 >= 需求级别 - 1」,因此填 1 表示建筑只要存在(0 级)即可。 填 -1 时判定式变成「当前等级 >= -2」,实际等同于不限制。加载时断言 >= -1。

常用修改实例

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

把 1 号条件的帮派资金要求从 10000 提高到 12000

修改前:

INT	INT	INT	INT	INT	INT	INT
ID	帮派资金	任务数	消耗属性类型	消耗属性值	需求建筑类型	需求级别
1	10000	5	5	0	1	1

修改后:

INT	INT	INT	INT	INT	INT	INT
ID	帮派资金	任务数	消耗属性类型	消耗属性值	需求建筑类型	需求级别
1	12000	5	5	0	1	1

按第 1 列定位 1 号条件。原本要求帮派资金 10000、任务数 5、消耗属性类型 5(环境)、消耗属性值 0、需求建筑类型 1(厢房)、需求级别 1。这里只把第 2 列改成 12000,其余 6 列全部保留。

改这一列会同时抬高「检查门槛」和「扣除金额」,因为判定与扣除用的是同一个值。只想抬高门槛而不想多扣,需要另建一行条件并让引用方改指过去。

示例块含类型行、列名行与该行原文,不能覆盖整表。改完需要重启 World。

验证与排查

World 启动日志里 Init_ConditionTable 会打印 “Load Condition.txt ... OK!”;消耗属性类型超出 0 到 5、需求建筑类型超出 -1 到 17、或资金与任务数为负都会断言。改动后重启 World,分别在帮派资金不足 / 属性不足 / 前置建筑等级不足的情况下尝试升级与研究,预期失败并能在帮派日志里看到对应的 ConditionTest 记录;再在条件满足时确认扣除金额与进度条上限正确。失败时恢复备份并重启。

编号是 1 起的行号

引用方一律 m_Table[ConditionIndex - 1],编号必须落在 1 到行数(上限 MAX_CONDITION = 512)之间。只改第 1 列而不挪行会让所有引用错位。

-1 才是「不检查」

帮派资金、消耗属性类型、需求建筑类型三列都用 -1(INVALID_ID)表示跳过该项检查,不是 0。填 0 会真的去做一次「>= 0」的比较并扣 0。

需求级别的判定要减一

RequiredLevel < Condition.m_RequireBuildingLevel - 1 才判失败,也就是「当前等级 >= 需求级别 - 1」通过。填 1 表示 0 级建筑即可,填 5 要求建筑已到 4 级。

判定与扣除用同一个值

帮派资金与消耗属性值既当下限又当扣除量,没有单独的「扣除量」列。想分离就要新建一行条件。

当前只有服务端读取

本页检索到的加载与消费都在 World 侧;没有发现客户端注册或读取 Condition.txt,改它不需要同步客户端资源。

关联与依据

Public/ResearchItem.txt · Public/CityBuilding.txt

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

  • Common/DataBase/TLBB_DBC.cpp:实际加载、解析、字段使用或示例关联依据
  • Common/DataBase/TLBB_DBC.h:实际加载、解析、字段使用或示例关联依据
  • Server/Server/WorldServer/World/Main/WorldTable.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/WorldServer/World/Main/WorldTable.h:实际加载、解析、字段使用或示例关联依据
  • Common/GameDefine_City.h:实际加载、解析、字段使用或示例关联依据
  • Server/Server/WorldServer/World/WorldData/City.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/WorldServer/World/WorldData/IBuilding.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/WorldServer/World/WorldData/BuildingCore.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/WorldServer/World/WorldData/exe/ExeCityResearchLevelUp.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/WorldServer/World/WorldData/exe/ExeCityBuildingLevelUp.cpp:实际加载、解析、字段使用或示例关联依据
  • Common/GameDefine_Guild.h:实际加载、解析、字段使用或示例关联依据
  • resources/Public/Config/Condition.txt:实际加载、解析、字段使用或示例关联依据

本页核对 Init_ConditionTable 的 0 基列号与六个字段的断言范围、BuildingCore::ConditionTest 与 CanLevelUp 的判定与扣除流程(含「等级 - 1」的比较式与 INVALID_ID 跳过语义)、ExeCityResearchLevelUp 里 m_MissionNum 作为进度上限的用法,以及 GUILD_ATTR_TYPE 与 BUILDING_TYPE 两个枚举的取值范围;未启动服务端与游戏,实际升级与研究的扣费表现需要实测。