前提 : 一个安装了NCMS后的worldbox , 一个文本编辑器(有ide更好),一个至少可以反编译框架版本为.net framework 4.72类库的工具 (我用的是dnspy),从安装NCMS自动生成的Example Mod的文件夹中抄一份符合规格的mod文件以便于进行之后的修改。
正文: 首先进入游戏源文件中(...\worldbox_Data\Managed)打开一个名为Assembly-CSharp.dll寻找我们想要修改部分相关的代码与其中的逻辑关系(找的过程省略)
可以得到如下的东西 : worldbox中的特质是一个派生自Asset类的ActorTrait类其中自定义了一个方法
其中有以下比较重要的字段id 、 path_icon、group_id,这些是在ActorTraitLibrary类的方法init()中被创建的ActorTrait类的对象都进行了赋值的字段,根据ActorTrait类自定义的方法可以得到属性path_icon与该特质获取对应的图像有关,而继续进行分析可以得到如下结论(过程省略):
字段id决定了该特质的名字和描述
字段group_id则决定了在特质编辑器中对应特质所在的栏位
当然还有一些其他的字段 如 birth代表了一个生物被创建时获得该特质的几率,inherit代表了遗传给子代的概率
opposite与oppositeArr表示了与之相对立的特质,era_active_night与era_active_night配合only_active_on_era_flag则可以赋予拥有该特质在黑暗纪元与皓月纪元被启用,以及最重要的base_stats表示了该特质如何影响拥有该特质的单位的属性。
同时一个ActorTrait类还拥有四种的委托 分别是 WorldAction类委托的action_death与action_special_effect(与special_effect_interval配合使用)
AttackAction类的action_attack_target以及GetHitAction类的 action_get_hit 通过方法Delegate.Combine(Delegate a, Delegate b)可以创造更加多样的个性化
比如如下的代码就是对以上所说的一个具体实例
这是在游戏中的效果
这是所添加的攻击事件的效果
正文: 首先进入游戏源文件中(...\worldbox_Data\Managed)打开一个名为Assembly-CSharp.dll寻找我们想要修改部分相关的代码与其中的逻辑关系(找的过程省略)
可以得到如下的东西 : worldbox中的特质是一个派生自Asset类的ActorTrait类其中自定义了一个方法
其中有以下比较重要的字段id 、 path_icon、group_id,这些是在ActorTraitLibrary类的方法init()中被创建的ActorTrait类的对象都进行了赋值的字段,根据ActorTrait类自定义的方法可以得到属性path_icon与该特质获取对应的图像有关,而继续进行分析可以得到如下结论(过程省略):
字段id决定了该特质的名字和描述
字段group_id则决定了在特质编辑器中对应特质所在的栏位
当然还有一些其他的字段 如 birth代表了一个生物被创建时获得该特质的几率,inherit代表了遗传给子代的概率
opposite与oppositeArr表示了与之相对立的特质,era_active_night与era_active_night配合only_active_on_era_flag则可以赋予拥有该特质在黑暗纪元与皓月纪元被启用,以及最重要的base_stats表示了该特质如何影响拥有该特质的单位的属性。
同时一个ActorTrait类还拥有四种的委托 分别是 WorldAction类委托的action_death与action_special_effect(与special_effect_interval配合使用)
AttackAction类的action_attack_target以及GetHitAction类的 action_get_hit 通过方法Delegate.Combine(Delegate a, Delegate b)可以创造更加多样的个性化
比如如下的代码就是对以上所说的一个具体实例
这是在游戏中的效果
这是所添加的攻击事件的效果