【工具更新发布】INI织网者1.0.8
艾木魁
2026年03月26日 21:23

一、自述

本工具是一个可视化的INI编辑器,可以以极高速度编写基本INI,并为复杂INI工程带来极大的方便。

红警2mod在编写INI时,通常不会有头铁用户完全从零开始手打,而一般是从现存的诸多INI模块中复制粘贴现成的语句。在这一过程中,用户需要在 Rulesmd (或者对应的扩展引擎说明书)中反复查找,复制粘贴,再用各种语句去引用其他类的 INI 片段,最后还需要添加注册,如InfantryTypes,Animations之类。在 Ares 时代,虽然新增复制单位的过程可以用继承系统来简单实现,但注册这一步是始终没法省略的。而在INI内容方面,例如创造一个单位的主武器和精英主武器,如果都写全套,就会创造7个模块之多,而这已经是相当简单的情况了。复杂情况下,如果 INI 的安排比较散乱,就得在多个 INI 文件中上下滚动,企图理清各个模块之间的逻辑关系,但人的记忆力毕竟比较有限,难免看到晕头转向。

这些过程可谓是INI编写过程中普遍存在的痛点。

本编辑器解决了这些麻烦之处,让写 INI 的过程变为可视化操作,对不同种类的模块进行染色区分方便整理逻辑,并尽可能减少了手动输入语句的过程。

当前主要版本特性:全面支持即插即用语句包,AImd图形化编写(复杂输入格式),系统模块(单值,集线器等),修改语句在画布上的显示,激光取色器(见上图)

下载:群文件:905426530

下载:群文件:905426530

下载:群文件:905426530

二、主要特性

1.工程文件

织网者使用自己的工程文件格式.iproj。这是只有织网者可以识别的工程格式,不是游戏直接可以读取的内容。在编辑完毕后,用户需将工程文件导出为INI,并使用Ares的[#include]机制启用导出的文件。不怕麻烦的用户也可以手动将导出的INI合并到主Rulesmd中。需要注意,低版本的织网者无法打开高版本织网者保存的工程文件,而高版本可以兼容低版本。

本编辑器目前不适合用于编辑现有的INI文件,截止至1.08,不存在整个导入INI文件的机制。

本编辑器正当的使用方式是以一个单位创建一个工程文件的形式,以多个离散的ini文件构成一个mod。当然,如果你的mod比较白板,在一个画布上存放成百上千个基础单位也是可行的。

2.内置字典

早期的织网者默认用户已经掌握了所有INI语句的含义,因此仅录入了核心关联语句,其他语句均不做任何注释。自1.08版本起,织网者将内置红警DIY论坛2025年版INI大辞典、截止至PhobosB48的语句注释、截止至KratosPP0.2.2p8的官方说明书。将鼠标指向任意语句就会显示此语句的注释。

注意!上述大辞典非手动录入,而是用脚本将现行的说明书和大辞典转换为织网者可识别的格式,可能有切分错误、遗漏、适用对象错误等。如有疑问,以RA2DIY知识库词典(https://wiki.ra2diy.com/w/Category:%E8%AF%8D%E5%85%B8)和各引擎官方说明书为准。

2.默认操作和快捷键

编辑器使用画布和模块的可视化编辑方式。左键拖拽移动画布,点击选中模块,右键按住并拖动可以框选模块,ctrlc 复制,ctrlv 粘贴。选中模块时右键点击画布可弹出菜单。按 F1 可以切换显示模式,即显示真实注册名。默认按 F2 可以重命名模块的注释名。按 F3 可以修改模块的注册名。

3.模块库

模块库系统可以理解为,系统内已经在几个文件目录内装好了许许多多复制好了的模块,用户只需要把这些模块扔到画布上,就等于是将一个原有的 INI 块复制粘贴到 ini 文件里了。也就是无需打开原INI或引擎说明书复制粘贴。

此外,“语句包”是一类特殊的块,可以将其理解为预制好的剪贴板。任意模块使用编辑器内置语句创建连线点链接到语句包上,就会将其包含的语句粘贴到对应的模块上,而不是创建独立的新模块。模块库内的扩展平台语句包仍然是AI脚本整理的,可能有错漏,如有疑问,以官方说明书为准。你也可以打开global\modules自行修正

左键双击画布也可以弹出一个全量模块库,可以进行搜索。但是这个模块库没有整理和排序,只有在你确定知道自己要用什么时候才比较方便。

4.可视化编辑

如果需要让某个语句后面填写其他模块的名称,如武器需要指明抛射体,则只需要将武器模块上的抛射体语句后的连接点连到一个抛射体上即可。

软件界面上显示的「武器1」、「抛射体1」、「弹头1」等最终均为注释。模块大类不可更改,如有需求,请创建新的。

织网者也支持反向链接并自动创建连接语句:如一个抛射体需要被武器引用,则只需要将抛射体左上角蓝色节点拖拽到武器模块上,将会自动连接 Projectile= 语句。如果武器模块上没有这个语句,则会自动生成一个语句并连接。

如果一个链接节点没有连接到任何模块,则这个节点在最终不会输出。

选中任何模块,即可显示快速文本编辑模式。语句左侧的蓝色点表示此语句会显示在画布上。双击模块标题或点击编辑文本按钮,即可进入完全文本编辑模式。在画布上进行编辑和在左侧编辑是等效的。

AresInherit是编辑器特有的语句,见后文。

双击模块标题或点击编辑文本按钮,进入完全文本编辑模式。在此模式下可以彻底删除模块内的语句。

可以打开视图菜单,用于画布导航。

(红警酒馆根机制文件:回合流程部分,很宏大吧)

另外,为了保证织网者创建的INI块绝对不会重复,除非用户手动对模块的注册名进行编辑,否则注册名将会是随机生成的。另一种意义上这也可以使得INI变得难以篡改,因为没有工程文件的话乱码注册名几乎无法阅读。另外,为了体现出这个INI是用织网者导出的并满足艾木魁的恶趣味,程序不会输出yes和no的字样,除非模块库里一开始写的就是yes和no。

5.自动注册

织网者配置了自动注册机制。需要注册的大类,如动画、单位、弹头、粒子系统之类对象在导出时,会自动创建注册表并汇总。用户再也不用操心抛射体注册表到底是Projectiles还是ProjectileTypes了,笑死。

6.自动素材引入

你可以直接将SHP、VXL文件拖入织网者窗口来自动创建对应的Artmd模块。Vxl文件会自动创建Art片段,SHP文件会询问SHP类型,分别会使用不同的INI模版,如步兵会自带一个Sequence。抛射体素材文件注册为动画主要是为了适配Ares的AnimLength功能。

7.特殊格式与编辑器内置语句

任何前置了#号的语句均会在画布上显示,手动输入和快速文本编辑勾选是等效的。#前输入的任何文本都可以改变本模块上这一语句的显示。

编辑器内置了AresInherit语句,用于创建Ares格式的继承。在范例中,如果武器1的注册名是0WSa1dK2B3So1,则会在输出的ini中产出:

[0WSa1dK2B3So1]:[120mm]。

1.08版本开始,引入了专用语句UseFlagPack,该语句用于链接语句包类对象。

8.快捷模块管理

参照3dsmax,织网者有一套快捷的模块管理机制。在顶部菜单“列表”栏目,可以浏览画布上的全体模块,并对勾选的模块进行隐藏、冻结、创建副本等操作。

右键按住画布可以进行框选,随后在画布上点击右键弹出菜单。

其中,编组会将对应的模块缩合到一起,以便整理画布。

忽略和隐藏的模块不会导出。

导出为模块则是将选择的成品INI导出到模块库里,保留其逻辑关联和数值,以便之后快速调用。

三、编辑器自定义

本编辑器的设计思想也是引擎层-配置层。用户上手可用的编辑器可以视为拥有巨量预设配置的官方mod。编辑器发布时,虽然也提供了许多个模块,但这显然不可能涵盖一个用户日常可能使用到的一切需求。因此,我们鼓励用户自己定义自己的模块库和字典,将自己需要经常复制的内容放入模块库和字典里,以方便之后使用。

模块库位于\Global\Modules下。其中样本.ini为提供了模块库文件标注注释的样例。“短描述”是指直接显示在画布上的文字。“长描述”指鼠标指向对象时显示的提示。

在拖入模块后,系统会自动将预制模块中****的部分替换为乱数注册名。如果是固定名称的片段,如ArmorTypes,则是直接录入注册名。

所有在预录入模块库内写了 =yes 或 =no 的语句,只要没有被字典收录,都会自动被系统判定为 bool 类,只要在模块上的框内打钩即等于填写 yes 或 no。当然你也可以填yeaaaaaaah_fuuuuuuuuck。

除了手动录入模块库之外,系统也支持从剪贴板创建模块。剪贴板样本创建的模块可以保留模块之间的位置关系,而手动录入的不能。打开剪贴板样本.ini可以看到更多说明。

编辑器内置的语句字典和大类类别注册表,位于 Global 文件夹下。任何RegisterTypes*.json和TypeAlt*.csv都会被读取。

RegisterTypes.json是编辑器的系统配置文件。这里配置了编辑器引擎内存在多少种大类类型,如WeaponTypes, Warheads,Animations等。字典中的「链接种类」必须填写 RegisterTypes 内声明过的大类。Json 文件中已经有较为详细的注释了,用户可以根据需求自行引入其他引擎补丁可能添加的各种抽象大类。

RegisterTypesCompound.json是输入类型的配置,主要针对于只识别固定文本的情况,如EliteAbilities, Locomotor之类只能填写游戏引擎内固定的值。

csv 是语句和节点配置文件。名称数高的覆盖名称数低的。给出的TypeAlt9Links是最初的最简化字典,只包括了链接到其他对象的语句。TypeAlt8Compound则设定了需要使用特殊输入格式的语句,与RegisterTypesCompound.json联动,其中多出来的最后一列填写预设好的输入类别。其他csv则是神奇脚本自动整理的字典文件。其中很多enum类输入都没有进行整理,而是设成了String模式,这就需要用户去自行完善字典了(我知道没有人会去做的,笑)。

织网者是偏重逻辑关联的编辑器,不会检查integer,float,double之类的数值格式,这些在编辑器内都是string。同样,shp文件等,因为是直接抄文件名,不管带不带后缀,反正只是一段文本。

四、其他设置

\Resources\language.ini 为语言文件,可以将编辑器翻译为其他语言。

\Resources\config.json 为编辑器的主配置文件,可以修改快捷键等。常用快捷键也在其中登记了。

以启动参数 -debugmenu 启动,可以显示调试菜单。

五、开发团队

钢铁之锤:搬砖的程序猿

艾木魁/Kenosis:本软件的概念和功能设计;模块库维护者;使用神奇脚本录入了Ares字典、Kratos字典;主要测试者;手册作者

九千天华:录入了Phobos字典和原版字典;维护RA2DIY2025年版INI大辞典。

三个冲:测试

白羽鸽:初步录入了WIC模块

六、本版本更新日志

BUG修复: 修复了三级及以上菜单不能正常工作的bug。 修复了文本编辑模式出现多个AresInherit行的bug。 修复了格式化组件识别出错时没有正确处理的bug。 修复了输入类型为String的处理异常bug。 修复了编辑栏当中非可重语句出现意外的重复键的bug。 修复了切换语言时重置主菜单宽度的bug。 修复了一个与文本编辑有关的崩溃bug。 修复了连线不能选择正确INI的bug。 修复了修改模块注册名时链接错乱的bug。 修复了模块上语句顺序与编辑栏不一致的bug。 修复了解除语句包连接后也不会输出块的bug。 修复了字典没收录的语句不显示的bug。 修复了字典没收录的语句设置显示状态在文本编辑后丢失的bug。 修复了字典未收录语句转节点时连线崩溃的bug。 修复了字典未收录语句连线显示异常的bug。 修复了创建模块副本时丢失语句显示状态的bug。 修复了选中单个模块时按下Ctrl+X无响应的bug。 修复了拖动多个模块时模块坐标向鼠标偏移的bug。 修复了csv解析时对双写引号处理异常的bug。 修复了链接多个东西的节点,删除链接对象时候逗号会残留的bug。 修复了字典里面没收录的语句,直接打=no不会被判为bool的bug。 修复了语句包没有正确更新标题栏样式的bug。 修复了配置文件缺项时默认值工作异常的bug。 修复了列表第一个项无法正确移除的bug。 修复了高帧率下一次ctrl+v会连续粘贴多次的bug。 修复了模块变动时没有正确更新模块列表的bug。 修复了预载模块时无法正确识别换行符为CR或带有BOM的模块的bug。 修复了注释名丢失的bug。 修复了EnumCombo输入组件的排版bug。 修复了Ctrl+A不能正确全选的bug。 修复了MultipleChoice/EnumRadio输入组件在不满行时把下个组件拉到同一行的bug。 修复了在输入框上复制/剪切/删除/粘贴影响整个画布的bug。 修复了删除最后一个模块且这个模块有对外连接时显示异常的bug。 修复了修改值的时候链接没有立即保持一致的bug。 修复了单击链接限制1的节点时不能断开连接的bug。 修复了模块宽度伸缩异常的bug。 修复了自动导出时偶发数目不匹配弹窗的bug。 修复了处于不同INI的语句包和模块不能合并的bug。 修复了Bool输入组件指定格式无效的bug。 修复了输出空语句的bug。 修复了包含接收节点值的列表无法正确导出的bug。 修复了继承接收节点值时的显示与导出异常bug。 修复了继承无法在读档时保留显示状态的bug。 修复了接收节点无法递归替换的bug。 修复了反向链接时候不会按照连线限制约束值的bug。 修复了注释块文本框过窄的bug。 修复了打开选择文件窗口后无法正常放置模块的bug。 修复了模块上最后一个显示的是文本输入框时有额外空行的bug。 修复了接收节点遮挡右键菜单的bug。 修复了缩放时编组块的宽度异常的bug。 修复了双击节点自己的短注释时不能转输入框的bug。 修复了自动拉长模块时短注释被节点挡住的bug。 修复了完全一致的语句多次输出的bug。 修复了跳过导出模块时仍然输出多余回车的bug。 修复了SameLine为true时EnumRadio和MultipleChoice输入类型结尾不换行的bug。 修复了取消隐藏模块时的异常位移bug。 修复了解组时模块的异常位移与未恢复原位置关系的bug。 修复了关闭时保存弹窗的异常位移bug。 修复了接收节点的环形链接检测误判的bug。 修复了RegType缺少Default字段时在内置类型上报错的bug。 修复了可重语句当中的索引异常的bug。 修复了字号≤18时右键菜单无限延长的bug。 修复了初始隐藏的Bool类型输入组件显示时崩溃的bug。 修复了ExportConstraint工作异常的bug。 修复了SetValue活动时一直显示未保存的bug。 修复了ValueList格式类型不读取ExportConstraint属性的bug。 新增与改进功能: 功能调整: 添加了语句包、可重语句、接收节点等。 现在类型为_AnyType的块可以被任何类型的块连接。 可以在模块当中使用WidthRatio#Var=<float>调整模块宽度较标准的比例。默认是1.0,数字越大模块越宽。 为模块添加了跳过导出和隐藏标题栏的选项;和单值块一样可以使用#Var标签启用。 (单值块:SingleVal#Var=true;跳过导出:SkipExport#​Var=true;隐藏标题栏:SkipTitle#Var=true) 现在设置了SkipExport为true的模块不会自动生成AresInherit语句。 现在可以同时继承多个模块了。 解除了语句属于哪个SubSec的硬编码。 解除了语句是否进行环形链接检查的硬编码。 现在UseFlagPack这个语句不再有硬编码的设定。 现在继承语句被硬编码为不是可重的。 现在按Ctrl+D会创建选中模块的副本。 现在按ESC会关闭界面上的弹窗。 添加了集线器/字符串列表/单值块/顺序集线器几个特殊模块。 配置调整: 升级模块库到最新版本。 添加了新的TypeAltSpecial.csv,包含了一些特殊的Key。 更新了language.ini,调整了本地化文本。 增补了字库的字符。 在hint.txt当中增补了一些内容。 添加了-logconfig命令行参数,让程序按顺序输出加载的配置文件名称。 RegisterType添加了RegisterListName属性,允许指定导出时使用的注册表名称。 RegisterTypes.json当中,将RegisterType当中每个类型定义的Export属性更名为NeedRegisterList。 RegisterTypes.json当中,将RegisterType当中每个类型定义的IniType属性更名为ExportToINI。 RegisterTypes.json当中,现在RegisterType的DefaultLinks属性支持使用_MyType和_AnyType来指定默认连接的目标类型。 添加了RegisterTypesSpecial.json,包括了SubSec等信息。 代码重构: 重构了数据同步更新的逻辑。 重构了对字典未收录语句的处理逻辑。 重构了选择模式的逻辑。 重构了创建副本的逻辑。 重构了标识框绘制的逻辑。 重构了导出顺序的控制逻辑。 重构了反向链接的逻辑。 重构了导出INI的逻辑。 重构了语句字典的逻辑,大幅减少了内存占用。 重构了模块库加载的逻辑,大幅减少了内存占用。 重构了INI行的数据通路。 重构了链接显示的逻辑。 重构了动态数据的存储,大幅减少了运行时体积。 重构了整体的数据通路。 整体调整了模块尺寸的控制逻辑。 大幅提升了运行时的性能。 清理了部分废弃代码和弃用的工作模式。 池化了所有的语句键名,减少了运行时的内存占用。 UI: 现在如果打开自动导出,且未设置所有INI的导出文件名时,会在导出时弹窗提示用户设置。 现在编辑栏添加行时会根据输入的部分Key提示候选项。 现在编辑栏添加语句时可以按照首字母序列查找。 现在如果模块上的描述文字太长,会拉伸模块宽度以适应。 现在拖拽窗口时的尺寸抖动更小了。 现在保存时不会再弹出请稍候的提示了。 调整了链接限制为0时的处理逻辑,现在行为与107之前一致。 调整了语句包节点的连线位置。 被连接到语句包节点的块的左上节点会移到顶部中间。 编辑栏添加了“粘贴时刷新注册名”的选项,默认开启。 增补了关于页面的内容。 补充了必要的版权信息。 重新调整了输入框的渲染逻辑以解决框太长的问题。 现在在编辑栏上右键单击控制语句是否在模块上显示的按钮时,会弹出编辑该语句在模块上描述的文本框。 大幅调整了调试菜单的内容。 现在注释块/集线器/字符串列表/单值块/顺序集线器单独分到了系统模块里面。 现在可以切换节点和输入框的组件可以直接双击占据的行切换。 减小了缩放模块时节点左右抖动的幅度。 继续调整了画布上的排版操作。 略微调大了模块的基准宽度(约10%)。 右键模块上语句的短描述会弹出包括转节点/接收节点/编辑注释/删除行的菜单。 现在编辑栏上右键Key和右键控制模块上显示的节点有相同的效果。 现在编辑栏上右键Key/控制模块上显示的节点时添加了一个删除该行的按钮。 导出INI: 现在即使没有任何修改,按下保存也会重新导出INI了。 现在会在导出时自动进行环形继承/环形语句包连接检测,在发现环形时会弹窗提示并阻止导出。 现在导出模板时会连带注释名一起导出。 现在会按照继承顺序自动调整字段的输出顺序了。 现在在导出INI的开头会放一个占位的块以防Ares无法正确处理继承。 增加了接收节点的环形链接检测,现在不会因为此类情况在导出时闪退了。 为文本编辑模式添加了“放弃修改”的按钮,按下会退出文本编辑且不应用修改。 为Import导出模式的IniType添加了_AnyType的选项,从所有INI当中搜索并合并。 调整了NewLineAfterDesc=true时接收节点和接收区域的位置。 为控制接收节点的AcceptType添加了NodeColor项,可以独立于链接类型控制节点颜色。 添加了新的Nothing导出模式,表示这个语句不被导出。 输入表单: 新增一个值为空的行时,会尝试写入输入表单的初始值。 现在按F1时MultipleChoice/EnumCombo/EnumRadio输入组件也会在选项值和短描述之间切换。 预置的Import输入类型分为Import和ImportAndMerge,其中MergeTarget属性分别为false和true。 为输入类型添加了LineIDFrom属性,现在可以显示可重组件的编号了。 为输入类型添加了Multiple选项,控制语句是否是可重的。 为输入类型添加了NewLineAfterDesc选项,控制短描述之后是否会换行。 --输入组件-- 为所有的输入组件添加了Disabled/ColoredFrame两个属性。 为所有的输入组件添加了显示条件,控制什么时候显示这个组件。 现在输入组件的Hint字段可以填写长短描述了。 调整了InputText和InputInt输入组件的排版处理。 为MultipleChoice和EnumRadio添加了MaxInOneLine属性,允许在一行内显示多个选项。 现在MultipleChoice输入组件加入了Delim属性,允许指定选项之间的分隔符,默认为逗号。 添加了新的SetValue输入组件。 添加了ColorPanel输入组件,用于控制颜色显示。 将InputText/Bool/EnumCombo/InputInt/SliderInt/ColorPanel输入组件UI上的注释挪到了左侧。 为输入组件的显示条件添加了正则表达式控制的选项。 --格式组件-- 添加了<Export_Key>这个新的格式组件,允许在文本中直接使用Key的值。 添加了Collect格式组件,专用于语句的导出模式。 为格式组件添加了导出条件,仅导出环节生效。 为纯文本组件添加了另一种定义方式。 之前仅供导出模式的格式组件现在也在接收节点当中可用。 添加了获取当前模块注册名的格式组件<Export_Registry>。 添加了ValueList类型的格式组件,将多个ValueID的值以逗号分隔的形式输出。 添加了RandomString类型的格式组件,输出指定长度的随机字符串。 添加了LineIndexFrom类型的格式组件,输出键的重数索引。 --接收节点-- 添加了语句的接收节点:如果当前语句”已经被当作接收节点“或”配置里面说可以当作接收节点“,那么就会占据对应的接收区域; 没有接收区域也可以手动连到某个语句。 语句被当作的类型由配置决定,缺少配置时取当前模块的类型为默认值。 导出时被替换成的字符串由配置决定,缺少配置时取这一行的值为默认值。 看到的那个节点只是个样子货,需要把线拉到语句上面(此时UI会有指示) 连接到接收节点时语句的值变为Section$$Key。 为接收节点添加了FullArea属性,为true时会让单个语句的接收区域占满整个模块。 --导出模式-- 添加了Recompose这个新的导出模式,会根据值和输入表单重组出新的键值对。 Import类型的导出模式加入了MergeTarget属性,决定被导入的目标是否会单独导出,为true时不会,默认false。 Import类型的导出模式当中IniType属性现在可以填写_MyType指定为当前块的INI类型。 Import类型的导出模式当中IniType属性现在可以填写_LinkType指定从链接类型得到目标的INI类型。

下载:群文件:905426530

下载:群文件:905426530