玩《模拟人生3》的都知道什么是MOD,没有MOD相信很大一部分人都不会玩这游戏吧!但对于游戏中的众多MOD看到自己喜欢的,因为各种冲突导致不能使用而烦心吧,本帖将深入介绍MOD使用中为什么会出现冲突,为什么游戏版本一更新就要更新一些功能性的MOD以及MOD的高级使用方法。

首先,让我们从最初的如何使用MOD开始。目前我们知道使用MOD有两种方法:一种是最初玩家根据游戏结构发现的,在游戏安装目录中放置;另一种是官方提供的,在系统我的文档下的游戏目录中放置,而官方的是在游戏基础版 1.12.70 后开放对游戏MOD支持的。这里我们推荐用官方提供的,为什么要用官方提供的呢?因为官方提供了对功能性MOD和游戏的兼容性检查,大多数功能性MOD都能被游戏所检测并发现并提示给玩家。如果是在进入游戏读取时退出的,那是因为游戏的内部程序接口有大改动,对旧的接口调用方法不支持,造成调用错误而造成游戏还没等读取到主菜单界面就弹错退出。

使用MOD我们都知道不管是官方形式的还是游戏安装目录下形式的,都需要使用 Resource.cfg 文件。这个文件的作用就是让游戏知道载入哪些MOD文件,从哪里载入。官方形式的配置基本如下:

当然我们以黑字书写的部分为准。

配置内容说明

PackedFile Packages/*.package

PackedFile Packages/*/*.package

★指定文件类型,告诉游戏载入的文件是什么类型的,让游戏以该类型形式读取资源。

★文件夹名称,告诉游戏载入MOD文件的文件夹名称,官方形式的游戏内部自动有Mods文件夹分配,所以配置只要写 Packages 即可,当然你也可以用你自定义的名称,如 Skins。全行写法:PackedFile Skins/*.package

★文件名称,告诉游戏载入MOD的文件名

★文件后缀名,告诉游戏载入MOD的文件后缀名,当然也可以是其它的,只要是游戏MOD的文件规格(内部格式)即可。

注:星号(*)为通配符,代表任何字符(文件夹名或文件名)

MOD载入顺序和游戏的关系。游戏调用MOD是按文件名称以递增的方式载入的,如果你有两个相同内容的物件MOD,游戏将会载入排第一个位置的文件,而第二个位置的文件因内容和第一个位置文件的内容相同而忽略,不再载入。这里牵涉到一个内存分配的问题。因为两个文件的内存分配地址都是相同的,所以只有放入第一个的文件游戏中才会有效。如果有两个不同的文件,但文件的内部包含的子文件有部分分配地址是相同的,就会以第一个载入的文件为准;而第二个载入的文件就有部分内容没有载入,这样就造成了游戏的冲突,使游戏中该文件对应的物件一些功能没有效果。而严重的造成游戏退出的就是游戏在调用该文件内部文件时,没有找到对应地址正确的内容,造成内存错误,然后游戏就退出了。这些大都以功能性MOD为主。

例如,目前最常见的官方互动物件修复文件放置后没有达到修复的情况。这是因为你放了多个内存分配地址和相同的文件,而第一个载入的文件不是完整的,如你放如了某个官方互动物件的Package 格式的,而该文件按游戏载入MOD的顺序排在了修复文件的前面,这样就造成修复文件内已经修复的内容需要的一些内存地址被该物件分配后占用,使游戏载入时忽略了该修复文件内内容。

功能性MOD和游戏的关系。我们都知道游戏是在不断更新的,但在更新的同时使用的一些旧MOD也要同时更新。首先,让我们先来知道什么是功能性MOD。功能性MOD就是连接游戏开放的接口实现游戏中的一些特定功能(如NRaas的超级电脑)或扩展游戏的功能(如官方商店的互动物件)。每次更新游戏后,如果官方对游戏开放接口的一些程序进行了改写,那就会造成玩家制作的一些功能性MOD失效;就是因为游戏中该MOD调用不到过去游戏接口提供的方法,所以造成了游戏读取中弹错或游戏中使用该物件弹错。游戏中的弹错跟调用的时机有关,有些MOD是在游戏进入后使用时才生效的,有些是游戏载入的时候就生效的。

例如(游戏提供了一个接口方法):

public CASPart GetCASPart(uint ageGenderSpecies, uint category, uint bodyType, bool randomize)

{

    return CASUtils_GetCASPartImpl(ageGenderSpecies, category, bodyType, randomize);

}

当一个自定义功能性MOD使用了该方法时,ageGenderSpecies 参数最初游戏提供了0x00, 0x01, 0x02 三个参数设置(0x00, 人类;0x01, 鬼魂;0x02, 木乃伊);后来因为游戏的更新,造成参数变成(0x00, 人类;0x01, 鬼魂;0x02, 宠物),而在使用该MOD的时候当设置到 0x02 时,因参数对应的方法不同,就造成错误而游戏弹错。

MOD使用高级篇。前面我们已经讲过配置文件的载入顺序和MOD的载入顺序和方法了。这里就来讲讲如何自定义MOD文件夹内内容。首先,官方提供的MOD使用,Mods文件夹是必须存在的,这是游戏内部设定好的,而该文件夹下的内容你可以随便定义,当然配置文件 Resource.cfg 内也要同步设置。

范例:

Priority 500

PackedFile Skins/*.package

PackedFile Clothing/*.package

PackedFile Store/*.dbc

红色部分定义了 Skins 文件夹来放任何文件名的皮肤MOD和 Clothing 文件夹来放任何文件名的服装MOD。

蓝色部分定义了 Store 文件夹来放任何文件名的官方商店的MOD。

评论:模拟人生3MOD使用高级篇:深入了解MOD的冲突