Hi~ o(* ̄▽ ̄*)ブ米娜桑,
当你兴致勃勃的打开编辑器,准备好一展拳脚开始自嗨之路。却发现自己那充满创造性的被动设想不存在于那一串列表中任何的文字中;又或者发现那些东缝西凑的来自都市各强者的被动名让这自嗨用的mod有着一种莫名的寒碜感吗。 那么,就让我们一起来学习如何自制一些轻自设级的被动吧。
首先我们需要一个下好的 "dnspy" 来对游戏根目录的"Assembly-CSharp.dll"进行一些前置的分析。
然后我们可以发现找到"Assembly-CSharp.dll"是一个基于"Net Framwork 4.0框架"的类库,因此为了兼容性考虑,我们在自行编写被动时会考虑采用这一有点有点臃肿的框架.
接着,我们来到"PassiveAbilityBase"这一类中。
我们可以看到这一类引用了三个名称空间"System","System.Collections.Generic","LOR_DiceSystem" .
其中"LOR_DiceSystem"并不是来自于系统自带的,因此我们可以去这一名称空间进行进一步的探索
可以看到该名称空间内定义了许多的枚举类型,而根据我们的游戏理解和一些直觉可以感知到,这些枚举类型将会和我们自定义战斗书页等将会有非常重要的作用。不过像我一样仅仅粗通皮毛的话,现在的我们还没到达这种境界,可以暂且不管。
接下来,我们来到这个类的初始化器,我们可以看到一个传入的参数,且该参数的类型为"BattleUnitModel", 通过我们游戏理解可以判断, 这两个耦合在一起的模块中这个"BattleUnitModel"的类所定义的参数与游戏中玩家的角色有密切的关联。在我们之后的被动编辑中将会多次引用变量"owner"。 同时,我们还应该阅读这一"父类"所定义的各种方法为我们接下来的自定义被动做铺垫.
那么接下来我们就可以在进行简单的被动编辑前做最后一件事,便是要记住我们一定会用到的类"PassiveAbilityBase", "BattleUnitModel", 和一个名称空间 "LOR_DiceSystem",如果有着我们想要实现的功能,我们应该先尝试从这些类里面找到是否已有对应的"方法".
举个例子, 我们想要这样一个被动"每回合开始时,将手中所有费用不为一的书页费用减一。每回合开始后,获得每一个存活的敌方单位卡组中任一一张战斗书页且将书页的费用置为零"
我们可以这样逐步的完成被动的编写
以类"PassiveAbilityBase"为父类定义一个派生类.
以关键词override 重载父类的方法 "OnRoundStart" 定义一个 "BattleDiceCardModel"的"list"泛型 通过 父类中定义的变量"owner" 访问"BattleUnitBase"定义的变量"allyCardDetail"的方法"GetAllDeck()".
之后, 通过 "foreach"语句 遍历 该泛型中的所有元素。 为每一个元素(以if else语句或switch语句)分别执行方法"AddCost()"("其中也可以通过continue"关键字完成AddCost(0)的操作)
这样,我们便完成了该被动的一半。接下来我们照猫画虎,即可完成剩下的一半(可通过控制跳出循环的语句控制加入手中的书页。)
当然,如果觉得这加卡加卡过于imba,可以通过方法"AddBuf()"为书页添加"佚亡"效果,至于编写完被动之后就是对.xml文件进行编辑了。
当你兴致勃勃的打开编辑器,准备好一展拳脚开始自嗨之路。却发现自己那充满创造性的被动设想不存在于那一串列表中任何的文字中;又或者发现那些东缝西凑的来自都市各强者的被动名让这自嗨用的mod有着一种莫名的寒碜感吗。 那么,就让我们一起来学习如何自制一些轻自设级的被动吧。
首先我们需要一个下好的 "dnspy" 来对游戏根目录的"Assembly-CSharp.dll"进行一些前置的分析。
然后我们可以发现找到"Assembly-CSharp.dll"是一个基于"Net Framwork 4.0框架"的类库,因此为了兼容性考虑,我们在自行编写被动时会考虑采用这一有点有点臃肿的框架.
接着,我们来到"PassiveAbilityBase"这一类中。
我们可以看到这一类引用了三个名称空间"System","System.Collections.Generic","LOR_DiceSystem" .
其中"LOR_DiceSystem"并不是来自于系统自带的,因此我们可以去这一名称空间进行进一步的探索
可以看到该名称空间内定义了许多的枚举类型,而根据我们的游戏理解和一些直觉可以感知到,这些枚举类型将会和我们自定义战斗书页等将会有非常重要的作用。不过像我一样仅仅粗通皮毛的话,现在的我们还没到达这种境界,可以暂且不管。
接下来,我们来到这个类的初始化器,我们可以看到一个传入的参数,且该参数的类型为"BattleUnitModel", 通过我们游戏理解可以判断, 这两个耦合在一起的模块中这个"BattleUnitModel"的类所定义的参数与游戏中玩家的角色有密切的关联。在我们之后的被动编辑中将会多次引用变量"owner"。 同时,我们还应该阅读这一"父类"所定义的各种方法为我们接下来的自定义被动做铺垫.
那么接下来我们就可以在进行简单的被动编辑前做最后一件事,便是要记住我们一定会用到的类"PassiveAbilityBase", "BattleUnitModel", 和一个名称空间 "LOR_DiceSystem",如果有着我们想要实现的功能,我们应该先尝试从这些类里面找到是否已有对应的"方法".
举个例子, 我们想要这样一个被动"每回合开始时,将手中所有费用不为一的书页费用减一。每回合开始后,获得每一个存活的敌方单位卡组中任一一张战斗书页且将书页的费用置为零"
我们可以这样逐步的完成被动的编写
以类"PassiveAbilityBase"为父类定义一个派生类.
以关键词override 重载父类的方法 "OnRoundStart" 定义一个 "BattleDiceCardModel"的"list"泛型 通过 父类中定义的变量"owner" 访问"BattleUnitBase"定义的变量"allyCardDetail"的方法"GetAllDeck()".
之后, 通过 "foreach"语句 遍历 该泛型中的所有元素。 为每一个元素(以if else语句或switch语句)分别执行方法"AddCost()"("其中也可以通过continue"关键字完成AddCost(0)的操作)
这样,我们便完成了该被动的一半。接下来我们照猫画虎,即可完成剩下的一半(可通过控制跳出循环的语句控制加入手中的书页。)
当然,如果觉得这加卡加卡过于imba,可以通过方法"AddBuf()"为书页添加"佚亡"效果,至于编写完被动之后就是对.xml文件进行编辑了。