辐射新维加斯吧 关注:47,007贴子:1,078,828
  • 5回复贴,共1

【一个心得】根据自动注射治疗针,简单的常时脚本

只看楼主收藏回复

MOD心得,不算教程,但也可以算教程。
暂不详细介绍脚本如何写。
BEGIN GameMode
If ( Player.GetHealthPercentage < 0.25 ) && (Player.IsInCombat == 1)
If ( Player.IsHardcore == 1 ); Check for Hardcore mode and heal-over-time effect.
If ( Player.HasMagicEffect RestoreHealth == 0); Player doesn't have Stimpak in his system (Hardcore only).
If ( Player.GetItemCount NVDLC04AutoInjectSuperStimpak > 0 )
ShowMessage NVDLC04AutoInjectSuperStimpakUsedMSG;
PlaySound NPCHumanUsingStimpak;
Player.CastImmediateOnSelf NVDLC04AutoInjectSuperStimpak;
Player.RemoveItem NVDLC04AutoInjectSuperStimpak 1;
EndIf
Endif
Else
If ( Player.GetItemCount NVDLC04AutoInjectSuperStimpak > 0 )
ShowMessage NVDLC04AutoInjectSuperStimpakUsedMSG;
PlaySound NPCHumanUsingStimpak;
Player.CastImmediateOnSelf NVDLC04AutoInjectSuperStimpak;
Player.RemoveItem NVDLC04AutoInjectSuperStimpak 1;
EndIf
EndIf
超级版的脚本,一句句注释。
If ( Player.GetHealthPercentage < 0.25 ) && (Player.IsInCombat == 1) ;两个条件,如果玩家血量在25%以下且在战斗时,与潜行服MKII一样,不在战斗不会给你乱打针。
If ( Player.IsHardcore == 1 ) ; Check for Hardcore mode and heal-over-time effect. 检查是否是硬核模式,此变量同时还会附带检查是否已经有同类效果,但是下方已经有检查回血变量存在的条件了,不知道具体原理,也许注释写错了。
If ( Player.HasMagicEffect RestoreHealth == 0 ) ; Player doesn't have Stimpak in his system (Hardcore only).硬核模式下独有的条件,是否存在回血效果,也即治疗针打针效果。
If ( Player.GetItemCount NVDLC04AutoInjectSuperStimpak > 0 ) ;检测玩家背包里面是否有自动注射超级治疗针,只能大于0,不能等于0。
ShowMessage NVDLC04AutoInjectSuperStimpakUsedMSG;左上角弹出的使用信息。
PlaySound NPCHumanUsingStimpak;播放打针音效。
Player.CastImmediateOnSelf NVDLC04AutoInjectSuperStimpak;立即对玩家使用【自动注射超级治疗针】,这个castimmediateonself语句,wiki上说是无前摇应用actor effect,辐射4的手动打针有打针动画也一定程度说明这句话被“曲线应用”了。
Player.RemoveItem NVDLC04AutoInjectSuperStimpak 1;看起来上一句cast巴拉巴拉语句不会导致物品被使用掉,所以要用这一段移除,所以这也是左上角会同时弹出这根针被【移除】的消息,而不是正常使用掉,如果正常使用掉,那么是不会弹消息的。
好,硬核模式段落结束。中间有一段ELSE,如果分段正确的话,它的作用是针对
If ( Player.IsHardcore == 1 ) ; Check for Hardcore mode and heal-over-time effect.
这一句进行分部分。因为脚本要执行一套,需要如此格式:
首先begin然后末尾写end,这是一整个脚本的第一大前提。
然后里面有分支结果,就用if……endif,没有例外。但如果你想if中间有第二个结果,就夹杂一个else,形成if……else……endif格式。
基本上并不复杂,把if……endif看成一个大括号即可,它包了这句里面所有内容,不得将内容写出这两端之外,否则geck不让保存。如果看不懂的话,横着看,然后将if与endif替换成左右括号,应该就懂了。
第二段跟硬核模式的内容基本一样,只是少了一个判断回血效果存在与否的语句。不再多解释。
但是光靠脚本是无法常时执行的,否则很多脚本都会同时执行,游戏连运行都做不到就炸了,所以我们需要一个actor。这个actor不是指“演员”,而是启动器的意思,只有通过它,大部分脚本才能执行,从NPC到PERK到任务,都算作在内。
NPC和PERK都不能算完全的常时执行,我们要的效果是从米歇尔床上醒来就在执行了,所以这里要用到任务quest。自动注射就是这种做法。


IP属地:广西1楼2022-08-06 19:13回复
    任务这个东西不仅是用来给奖励给经验,还可以用来做很多东西,比如代替输入控制台指令。如果有研究的话就会发现,学会动力甲是经由一个叫Generic的任务控制的,在quest stage任务阶段80处写着一段result script:SetPCCanUsePowerArmor 1
    是不是很眼熟?
    虽然经由正经script写也可以,但这里讲究的是便利性,能在哪里写就在哪里写,只要功能一样即可,大部分脚本都可以直接写在那里不必多分一套脚本出来。
    好了,开始设置一个常时任务。首先看到一个Start Game Enabled,打勾,醒来的时候就会触发了,就像一大堆轻型皮甲,老姑的喷子,老舅的10MM那样,它们就是这样给你的。其它项目先不用管了。
    重点来了,quest data内,有一栏script,这里才是真正的让脚本常时执行的地方,只要这个任务不会结束,脚本就会一直执行。
    有很多空头任务都是这样设置奖励或脚本的,什么叫空头任务?只有一个script是有内容的,其它栏目都是空。


    IP属地:广西2楼2022-08-06 19:25
    回复
      脚本内容?我才不知道呢,随便怎么写就是了,只要用一个开局触发又没有结尾的任务,那么这个脚本就是常时触发了。


      IP属地:广西3楼2022-08-06 19:27
      回复
        你这脚本一用的话谁还需要自动注射治疗针啊?


        IP属地:广东来自Android客户端4楼2022-08-11 13:20
        回复
          家访玩意闹麻了👉。


          IP属地:辽宁来自Android客户端7楼2024-03-14 16:54
          回复
            贴吧下放拉黑功能就是为了让正常人能把你这种疯狗关在门外的


            IP属地:辽宁来自Android客户端8楼2024-03-14 17:02
            回复