前言
个人在游戏过程中的一点经验分享,没有做系统教程的经验,还望海涵,能有帮助到你的地方就好。
最近永大又更新了阎魔刀的动作(B站搜索“永日铭”即可看到相关演示),配上维吉尔科目一的“次元斩·绝”,岂不美哉。可惜的是该技能的伤害是由脚本定义的,在edit里不能直观地修改,为了能有一个成长的体验,我终于找到了办法——
修改psc脚本文档
次元斩·绝的N网指路已附在上面,在简介页面里有说明伤害的公式计算,图如上所示。
在最后一行我们可以知道,它的伤害面板是由角色三维加起来再乘以一个定值(默认为1)得来的,最终数值会受到游戏难度影响,我在N网评论后几页下看到了作者回复一条评论道,要想修改这个伤害可以去编辑脚本,于是就找到了这个mod的脚本文件夹,在那里看到了伤害相关的脚本文档。此前也有大佬开贴说过,mod都分为什么,里面有系统地提过老滚的脚本,我就不再赘述。
"Spelldmg"应该就是法术伤害的意思,而psc文件是可以直接用记事本打开的,或者是VS等编辑器也行。
Scriptname zzz_ap05sFXsc_Spelldmg extends activemagiceffect
Spell property Spellref auto
Enchantment property Dispelref auto
;Int property DmgType auto
;Float property LossHpDmg auto
GlobalVariable property DmgPlusMultiply auto
;Float property DmgDelay auto
GlobalVariable property JCEDmgHP auto
GlobalVariable property JCEDmgSP auto
GlobalVariable property JCEDmgMP auto
Spell property Dispelpower1 auto
float dmgfloat
Event OnEffectStart(Actor TgActor, Actor akCaster)
TgActor.dispelspell(Dispelpower1)
Float HP = TgActor.getBaseav("Health") * JCEDmgHP.GetValue()
Float SP = TgActor.getBaseav("Stamina") * JCEDmgSP.GetValue()
Float MP = TgActor.getBaseav("Magicka") * JCEDmgMP.GetValue()
dmgfloat = DmgPlusMultiply.getvalue()
if dmgfloat <= 0.0
dmgfloat == 0.001
endif
Float DMG = (HP + SP + MP) * dmgfloat
if DMG <= 0.0
DMG == 0.001
endif
Spellref.SetNthEffectMagnitude(0, DMG)
Spellref.Cast(TgActor)
endevent
虽然我不是很懂编程,但是靠着作者的简介还是能大概分析得出,要定义伤害有这么几个关键的地方:
- 声明:在第一部分里,可以看到有这么三行代码
GlobalVariable property JCEDmgHP auto
GlobalVariable property JCEDmgSP auto
GlobalVariable property JCEDmgMP auto
- 定义:在第二部里,就有与之相对应的定义变量以及调用的函数,这些函数方法我在维基查阅之后发现是老滚里面的,所以在这个脚本前面才要声明那些开头吧(我瞎猜的)
大概意思就是,定义一个浮点变量,然后它的值会通过老滚的函数读取角色信息来赋予,在这代码里就是读取角色的基本属性,比如生命值(即白字属性,不计算装备附魔和天赋效果等额外添加的,要是不想这样那就使用"Getav( )"这个函数方法),后面这个"*"跟着的东西我就不太明白了,不过照猫画虎还是会的,总之后面模仿着来就行。
Float HP = TgActor.getBaseav("Health") * JCEDmgHP.GetValue()
Float SP = TgActor.getBaseav("Stamina") * JCEDmgSP.GetValue()
Float MP = TgActor.getBaseav("Magicka") * JCEDmgMP.GetValue()
- 公式:最后,打出的伤害公式,一个简单的四则运算
Float DMG = (HP + SP + MP) * dmgfloat
这些函数方法是在维基上查阅的,可以点击这里康康,不过需要配合科学上网食用。
举例说明,我想给这个伤害公式加点参数,比如说再加上一个我的角色单手技能等级,就可以这么来:
在第一部分加上"GlobalVariable property JCEDmgOH auto"
在第二部分加上"Float OH = TgActor.getav("OneHanded") * JCEDmgOH.GetValue()"
最后在公式里加上"OH"即可。即"Float DMG = (HP + SP + MP + OH) * dmgfloat",当然也可以有别的算法,总之最后这些参数怎么组合都是可以的。假如说把单手技能等级变成一个乘数放在括号外的话,这个法术伤害就会受到单手技能熟练度的线性加成了,那么在游戏里你就不会觉得刮痧,而且也有变强的动力。
编译psc脚本文档
当时我以为弄到这一步就OK了,保存后进游戏发现伤害不变,几经百度谷歌后才知道原来老滚里生效的是pex文件,psc只是用来留档的。那么该如何完成这一步的,这里我就分享一条快捷的思路,排一排自己踩过的坑。
- 下载Creation kit:
正版玩家可以在steam里直接下载,国内非正版玩家建议直接使用Creation kit 1.5.73,可以在某大猫上搜索关键字下载,或者自行百度搜索下载。下载完成后把所有文件无脑丢进SkyrimSE.exe在那个文件夹里。
- 下载Papyrus Compiler App
N网指路这里,下载完后解压到任意位置就好,但是我看到分享教程里说还需要复制一边里面的东西在游戏根目录里(即SkyrimSE.exe在的那个文件夹里),我照做了,虽然不知道原理是什么,且在游戏根目录里打开这个软件是黑屏的,只有在外面打开才行,很神奇。
- 准备编译环境
首先你需要把要编译的mod里的所有psc脚本文件复制到“游戏根目录\Data\Scripts\Source下”,然后打开在外面这个软件(就不要打开游戏根目录里的那个就行)。
在设置这里调好路径,第二行的话,你会发现下载来的CK有一个名为Papyrus Compiler的文件夹,那里面其实就是CK用来编译脚本的东西,总之路径设置在那里就好。
然后点到Compilation界面,打开要修改的mod目录,找到要转化的psc文件,拖到软件窗口里,再点START,有提示绿色的√就说明转化成功,虽然mod文件夹里对应的pex文件的修改日期没有发生变化,但是进游戏就会发现伤害不一样了,很神奇。