Jump to content
模组网
icedream

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

Recommended Posts

本文转自《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的最后一个内测版已经出来了,应该不久就会有正式版问世,哈哈

Share this post


Link to post
Share on other sites

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

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

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

Edited by tiancaishu
把滚4脚本当滚5脚本了

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...