icedream

dr5腰斩脚本学习讨论(增加一个测试版)

3 个帖子在此主题

本文转自《dr5腰斩脚本学习讨论(增加一个测试版)》,原作者为newalbert。
放出一个测试版,稍微调高了一点子弹时间出现的几率,对腰斩调整如下:
1,横步重斩时,如果是MM敌人,斩首将变为斩腰。对男性以及其它斩首模式未做调整
2,腰斩时去掉了内脏,俺不喜欢
3,穿长袍等连体衣裤的也可以腰斩,衣服会丢在一旁

另外附带了两个自己做的对MM斩首和腰斩时的声音文件,原来的我不大喜欢

显然还有一些bug,而且我编入了一些无用信息,文件稍大(4M多),有兴趣的同学下着玩吧

文件名:  DR5调整腰斩.rar
下载地址:  http://www.rayfile.com/files/1a98c7cc-e232-11de-8a32-0014221b798a/

对于重要人物的斩首,我以为自己已经修正了,没想到出了更恐怖的BUG,这版暂不放出吧

现在开始学习研究老滚的script,拿了DR5做参考,希望抛砖引玉,共同学习
老滚mod的script中,大概只有30%是真正完成作者的意图,其它都是一些善后处理和避免出现各种异常的补救代码
首先研究了DR5的腰斩,发出来共享一下:

Scn skycaptainsNPCDecapQuestScript    ;文件名

变量定义若干
。。。

外部对象引用定义若干
。。。

其它一些action
。。。

elseif(action == 3)            ;横步重斩死亡模式启动
  if(Block >0)                ;小子想挡?
    if(wristcut == 1)          ;批准断手
      。。。
    。。。
   。。。

  if((Player.ispowerattacking == 0 || timer >2 ) && instaEffect == 0)
  ;如果不是重击或者超过一定时间,并且已经到了慢镜心跳模式的最后
     
    Set action to 100           ;切换回普通攻击
  
  elseif((instaeffect == 0 &&(myhealth - me.GetActorValue health >10 || me.GetActorValue health < 1)) || (instaEffect == 2 && me.GetDead == 0 && me.GetActorValue health >0))
  ;这是腰斩和斩首的前置条件
  
  ;(instaeffect == 0 && (myhealth - me.GetActorValue health >10 || me.GetActorValue health < 1))
  ;这是第一个完整的前置条件,其实比较奇怪,要求你比敌人hp多10以上,或者敌人的hp<1!!!
  ;小于1就是0嘛,看来这个是一些特殊情况的处理,比方说敌人中毒,在hp从1到0的一瞬间,你给它重击了一下,同样可以把敌人斩首或腰斩,哪怕这时候你的hp也不多

  ;(instaEffect == 2 && me.GetDead == 0 && me.GetActorValue health >0)
  ;这是第二个完整的前置条件,如果正在慢镜心跳模式中让玩家选择打击部位,并且敌人还没死,hp还高于0


    if((weaponreach >0.5 &&anglex < (anglez) &&anglex >anglex2 &&myrobes == 0 &&myrobesNboots == 0 &&mywholebody == 0 &&instaEffect == 0) &&skullcrush == 0)
    ;腰斩的具体条件,比斩首要求高很多:
    ;慢镜心跳模式结束,武器距离,各种角度(是不是瞄准的腰部)都合适,而且敌人穿的不是连体袍子,也不是连靴袍,当然身体也是由upperbody和lowerbody构成的。
    ;最后还有一个硬条件,当前不满足碎颅,碎颅是优先于腰斩的


     ;好了,条件成熟,下面我们要把敌人腰斩
      Set killed to 1                                     ;腰斩后敌人肯定挂了
      Set count to (2 - count)                           
      me.AddItem stopflag count
      Set stopflagadded to 1
      Set gutsUsed to 1
      Set count to me.GetItemCount lookatweaponflag
      me.RemoveItem lookatweaponflag count
      me.PlayGroup idle 1
      me.PlaySound3d cutsound   
                          ;咔嚓一声
           
      Player.pushactoraway me 1                           ;上半身飞出去
      

      ;最有趣的部分来了,其实腰斩就是创建两个敌人模型,通过装备一个腰部伤口,一个把下半身隐藏掉,一个把上半身隐藏掉,这样来模拟身体的两个部分
      ;me就是原来的敌人身体,现在变成上半身
      ;myextra就是copy出来的一个身体,把上半身隐藏掉,冒充下半身

      if(mygreaves != 0)
                          
       myextra.AddItem mygreaves 1 
                      ;这个装备,现在要出现在下半身
        myextra.EquipItem mygreaves
        me.UnequipItem mygreaves 1
        me.RemoveItem mygreaves 1
                          ;好了,下半身已经装备了,上半身就不需要了
      else
        myextra.UnequipItem skycaptainslowercpants
      endif
                     
      if(myboots != 0) 
                                   ;如果原来敌人穿着鞋子,
        myextra.AddItem myboots 1                          ;鞋子应该出现在下半身上
        myextra.EquipItem myboots      
                     
        me.UnequipItem myboots 1 
                         ;上半身不能出现鞋子了
        me.RemoveItem myboots 1                            ;删除之
      else
        myextra.UnequipItem skycaptainsshoes
      endif
      myextra.UnequipItem skycaptainslowercshirt 
         ;lowershirt这种上衣当然不能出现在下半身上
      myextra.RemoveItem skycaptainslowercshirt 1
      if(me.GetIsSex male == 1) 
                          ;敌人是男性
        me.PlaySound3d maleScream                          ;男性惨叫
        me.AddItem skycaptainsPlugLowerBody 1              ;me是原本敌人的身体,我们要把它变成只有上半身,做法是装备一个占据了lowerbody栏位的腰部伤口

        me.EquipItem skycaptainsPlugLowerBody
       myextra.AddItem skycaptainsplugupperbody 1   
      ;下半身同理,装备一个占据了upperbody栏位的腰部伤口
        myextra.EquipItem skycaptainsplugupperbody
      else 
                                                                           ;敌人是MM
        me.PlaySound3d WomanScream                             ;MM惨叫
        me.AddItem skycaptainsPlugLowerBodyfemale 1        
        me.EquipItem skycaptainsPlugLowerBodyfemale 
      ;me是原本敌人的身体,我们要把它变成只有上半身,做法是装备一个占据了lowerbody栏位的腰部伤口

        myextra.AddItem skycaptainsplugupperbodyfemale 1
        myextra.EquipItem skycaptainsplugupperbodyfemale 
 ;下半身同理,装备一个占据了upperbody栏位的腰部伤口
      endif

      me.AddItem skycaptainsshoes 1
      myextra.UnequipItem skycaptainsgloves
                ;继续处理装备,下半身肯定不能有袖子肩装等道具
      myextra.RemoveItem skycaptainsgloves 1
      myextra.AddItem skycaptainsGlovesForEmitter 1
      myextra.EquipItem skycaptainsglovesForEmitter
      myextra.AddItem skycaptainsWaistExtraSplatter 1 
     下半身腰部伤口喷血
      myextra.EquipItem skycaptainsWaistExtrasplatter
      me.AddItem skycaptainsWaistSplatter 1   
             上半身腰部伤口喷血
      me.EquipItem skycaptainsWaistsplatter
      me.EquipItem skycaptainsshoes

      

      ;以下是摆放上下半身各自的位置和角度,以及一些善后处理
      Set anglez to me.GetAngle z + me.GetHeadingAngle Player
      myextra.SetAngle z anglez
      Set anglez to anglez + 30
      me.SetAngle z anglez
                     
      Set posx to me.GetPos x
      Set posy to me.GetPos y
      Set posz to me.GetPos z
                     
      if(me.GetDead == 0 &&me.GetActorValue health >0)         
        me.Kill Player                                          
      endif
                     
      myextra.SetPos x posx
      myextra.SetPos y posy
      myextra.SetPos z posz

      。。。

其实DR5的脚本并不难懂,我看到这些代码的时候,脑子里蹦出了无穷无尽的想法,但其实难的不是写script,而是做模型和贴图。。。
希望能找一下模型贴图方面的牛人大大帮忙

顺便说一下,DR6的最后一个内测版已经出来了,应该不久就会有正式版问世,哈哈
0

分享此帖子


帖子链接
分享到其他网站

发表于 (已编辑)

总感觉滚5的脚本性能比滚4低好多 你这种判断 脱 穿 判断 脱穿 不会弄出几秒时间么?

之前窝试着穷举玩家装备 结果。。。。那速度。。

啊……等等 这是滚4的脚本。。。。 最近眼花了。。。。。

编辑于 ,编辑者 tiancaishu
把滚4脚本当滚5脚本了
0

分享此帖子


帖子链接
分享到其他网站

创建账户或者登录再讨论

您需要成为会员才能留下讨论

创建账户

在本社区注册新账户。很简单的!


注册为新账户

登录

已有账户?这边登录


马上登录