CMO数据库初步解析

CMO汉化1.04版本支持修改数据库,为向CMO中添加自定义武器装备提供了条件,但添加数据的前提是了解CMO装备数据模型的运行机制。

一、对 CMO 模型运行机制的猜测

CMO程序已经封装,在没有反编译情况下,只能通过对数据库操作来验证其建模方法。猜测其可能机制为:整体模型分为两大部分,一是针对通用和专用装备的框架模型,二是数据库核心参数。

框架模型规定了武器装备在CMO中的抽象和建模方式,具有一定程度的通用性。相同类型不同型号的武器装备通过对数据库中核心参数设置来区分性能。框架模型已经封装,难以直接修改,数据库则可通过增删改相关信息实现对装备功能干预,进而可以修改对应装备参数使其符合现实情况,还可以增加CMO中原本没有的数据以引入自定义新装。

二、数据库内容解析

本文解析数据库版本为CMO1.04中的DB3K_493,其中包含Tables 163个,除表“Capabilities”“ManagementDatabase”外,其余表分为两类,一类以“Data”开头,其中存储数据,另一类以Enum开头,其中包含大量枚举类信息。Data中包含大量编码数据,如“2001”等,其对应含义,通过Enum表阐释,而Enum表中的具体的项则对应于框架模块中具体的功能。

数据库中表可分为更加具体的13类,如下图1所示
image
图1 数据库整体分类

表有分类,但实际上各表中数据相互关联交织,形成了武器装备模型的核心参数。分析各表内容发现CMO中数据表是有构建规则的。

首先CMO中对象分为在场景中可直接布置的平台和需依托平台部署的组件。可直接布置平台有:Aircraft、Surface Ship、Facility、Submarine和Satellite,分别对应平台主表DataAircraft、DataShip、DataFacility、DataSatellite和DataSubmarine。其余的武器、传感器、通信设备等组件,均需要依托上述五类进行部署,表构造方法如下图所示。

图2 数据表构造示意图

可部署平台有均对应一个平台主表,(CMO可能因为多次迭代,数据表存在部分规则混乱的地方,特别是地面单位GroundUnit与Facility之间,在图形界面只能通过Facility类添加GroundUnit中的内容,但是在数据表中GroundUnit与Facility又类似都是平台类对象),组件与平台两两交叉形成子表,子表形成指示平台和组件的联接关系,组件具体信息按类汇总到组件主表中。

在向数据库中添加自定义对象时,需要首先分析添加的是直接部署平台还是依附于平台的组件。这决定了向哪些表添加数据。其次,添加一个对象涉及到为其添加一系列的特性,具体有哪些特性,可以通过数据库查看器查看同类型对象,查看器中有的元素在数据库都需要一一添加,当然,还需要对数据表与查看器中的内容建立起对应关系,对应关系的建立可参考数据库思维导图。

以飞行器的武器挂载为例(见附件的飞行器武器挂载数据表思维导图),首先通过DataAircraft表得到飞行器对应的ID,而后在DataAircraftLoadouts表中通过飞行器ID查询得到该飞行器的全部挂载方案ID,需要注意的是一个飞行器有多重挂载,即一个飞行器ID对应多个挂载方案ID。得到挂载ID后在DataLoadoutWeapons表中通过飞行器挂载方案ID查询得到该挂载方案对应的多种武器的挂载模式ID,在DataWeaponRecord表中通过武器挂载模式ID查询得到对应的武器ID及其挂载数目,最终在DataWeapon表中通过武器ID查询得到具体的武器信息。
image

图3 飞行器的武器挂载查询方法

掌握了上述层层递进的表间关系后,想要自行拟定或者修改飞行器挂载方式就可以通过操作数据库表来实现了。当然,想要实操通过数据库向CMO添加新对象,还需要对表中各栏数据对应的实际意义有明确了解,这其中还涉及诸多验证工作,希望本文的一点内容能够抛砖引玉,对大家有所帮助。

最后是数据库的初步完整解析,需要了解不同数据表含义,以及交叉关系的可以查看思维导图。

6 个赞

感觉比起解析更适合作为为介绍让没玩过想入坑的玩家对CMO的数据库的内容体制有一个大致的了解,毕竟这些内容对于玩过一点的人来说都是摆在明面上的内容。

:+1:,我就是才入门呀,记录下便于后面的人入门用

1 个赞

楼主,你的研究很有意义,方便的话加下我哈,咱们一起研究。
QQ19352635

对数据库进行修改之后,应当修正数据库中的DBInfo.dat 文件