台服dnf吧 关注:126,122贴子:2,105,932
  • 12回复贴,共1

【教程贴】如何从0开始优化版本

取消只看楼主收藏回复


看贴吧也挺长时间了,也没发过言,最近一直在优化神迹版本,所以想着以教程的方式记录所有的修改。
玩过神迹和朝暮的同学应该都有自己的理解和想法。
神迹副本机制很全,内容完善,nut的功能非常强大,但是技能有点卡顿。
朝暮的技能非常流畅,而且柔滑到位,比较舒服。
本帖将以神迹版本(2022.2.4)为底,通过不断修复bug和缝合其他版本优点,详细的一步一步完善版本。


IP属地:广东1楼2022-03-12 00:05回复
    首先是大家最关心的技能
    如何将朝暮的技能和柔化缝合进神迹呢?
    首先得分析明白两个版本的特点
    神迹的nut伤害也是读写169技能的静态数据来实现,这个跟其他版本类似
    同时神迹给每个职业添加254号被动技能“唤醒”,通过读写此技能的静态数据来实现其他的伤害词条,具体nut路径为sqr/character/gunner/latentability/ap_latentability.nut
    朝暮的柔化通过给每个职业添加254号被动技能“体术逆转”,通过ap来实现角色状态变更(柔化)
    也就是说两个版本都是以254号被动技能为载体实现功能,那么有的同学如果直接无脑导入肯定是不可以的
    那么该怎么将朝暮的柔化加入到神迹当中呢?
    根据上面的分析,可以发现,两个版本的254号技能都是被动技能,学习该技能之后,在sqr/character/xxx/passive_skill_xxx.nut中的ProcPassiveSkill_XXX函数中可以定义这个被动技能的功能

    以鬼剑士的函数为例,学习254号被动技能之后,将会附加一个ap,神迹将全职业的伤害词条类型都写到了同一个nut中character/gunner/latentability/ap_latentability.nut
    那么最简单的加入朝暮柔化的方法就是将朝暮中的柔化功能添加到这个nut当中并调用


    IP属地:广东2楼2022-03-12 00:07
    收起回复
      2026-03-27 14:18:16
      广告
      不感兴趣
      开通SVIP免广告
      朝暮的柔化功能具体路径为sqr/character/xxx/appendage/ap_xxx_comminterrupt.nut,每个职业都有对应的nut
      然而神迹使用的是共用的nut,那么我们只需要将朝暮每个职业的comminterrupt中的函数加以整合,通过写一个角色判断+职业判断,整合全职业的柔化,就可以添加进神迹的character/gunner/latentability/ap_latentability.nut中,在proc_appendage_latentability函数中进行调用。
      具体形式如下
      function comminterrupt(appendage)//朝暮柔化
      {
      local parentObj = appendage.getParent();
      local sourceObj = appendage.getSource();
      if(!sourceObj || !parentObj) { return; }
      local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);//角色对象
      local job = sq_getJob(obj);//获取角色类型
      local type = sq_getGrowType(obj);//获取职业
      local mystate = obj.sq_GetState();
      local isTower = sq_IsTowerDungeon();//修復死亡之塔柔化閃退
      if(isTower) return;//修復死亡之塔柔化閃退
      switch (job) //嵌套一个switch来判断角色
      {
      case ENUM_CHARACTERJOB_SWORDMAN: //如果是鬼剑士
      相应的一些函数
      switch (type) //再嵌套一个switch来判断职业
      {
      case 1://劍魂
      EnableSoften(obj,67,8);//里鬼劍術
      SetSkillState(obj,67,8,[0,67]);
      and so on
      整合好的函数我会发出来(没发过贴 我不知道怎么上传)


      IP属地:广东4楼2022-03-12 00:18
      回复
        通过完成以上操作,我们实现了不需要新增技能,即可实现朝暮的柔化效果
        将神迹的254号特色被动“唤醒”与朝暮的254号特色被动“体术逆转”相结合
        做到这里,其实神迹的技能还是有不小的卡顿存在,虽然可以柔化,但是手感不对劲
        原因是神迹原作者对部分技能进行了修改,导致不太流畅
        那么下一步,如何将朝暮的技能覆盖进神迹中呢?
        这里用一个简单粗暴的方法,提取朝暮sqr/character/目录下的所有文件,然后删除掉所有loadstate.nut和每个职业文件夹目录下的common和header等等入口文件,只保留技能的nut。
        然后将所有文件一股脑导入神迹之中覆盖即可
        上游戏发现确实丝滑流畅,verygood


        IP属地:广东6楼2022-03-12 00:25
        收起回复
          接下来稍微说两个朋友在玩的时候遇到的神迹本身的bug如何修复
          第一个是红眼的大崩技能,释放之后抬手,然后人物消失,然后突然出现并完成最后一击
          动作的缺失首先去看一下ani文件
          pvfedit内搜索outrage并找到character/swordman/animation/outragebreakready.ani
          对比朝暮技能(剑圣二觉)可以发现神迹的此ani多了一帧

          删除第二帧并将上方的framemax改为1
          上游戏后继续测试,发现人物缺失的问题解决了,但是动作还是不对,无法选方向,而且瞬间砸地
          意识到可能神迹的作者重写了此技能,于是去sqr中翻找,确实重写了大崩
          那么我们只需要在sqr/character/swordman_load_state.nut中将重写大崩nut的调用删除或者注释掉即可

          再次上号测试,问题解决


          IP属地:广东8楼2022-03-12 00:33
          回复
            然后就是一个简单的礼包bug,索西亚的秘密礼包,如果暗夜去打开,会闪退
            这个就没什么技术难度了,打开这个礼包
            [booster category num]
            15
            发现这个礼包内含5个类型
            但具体只有四个职业有这个时装
            也就是不小心多写了一个类型进去
            只需要将最后一个[booster select category]下的内容删掉
            然后把[booster category num]中的5改成4即可


            IP属地:广东9楼2022-03-12 00:37
            回复
              暂时就这么多,如果大家在玩的时候遇到什么bug和问题,可以在发帖留言,之后我会统一修复并写下详细过程


              IP属地:广东10楼2022-03-12 00:42
              收起回复
                有人问到关于神迹版本新建角色会卡死的问题
                这个我也遇到了,可以通过修改数据库的方式跳过新手教程来修复
                这里我说一下具体方法
                首先用navicat连接数据库,找到taiwan_cain总表,点进去后选择charac_stat分表

                右键“设计表”,选择上方“触发器”选项页
                “名”中填写tutorial,“触发”选择Before,“插入”处打勾
                在“定义下填写”:
                begin
                set new.tutorial_flag=-1;
                end
                重跑五国


                IP属地:广东44楼2022-03-12 11:44
                回复
                  2026-03-27 14:12:16
                  广告
                  不感兴趣
                  开通SVIP免广告
                  有人反馈剑魂钝器拔刀会让越溪镇的小飞龙无限旋转飞天
                  这里说一下修复思路和方法
                  原版的台服pvf是没有钝器拔刀溜溜球的特效的,所以肯定是单独的nut写的
                  在鬼剑士的sqr/character/swordman_load_state.nut中可以看到确实写了单独的nut

                  那么我们需要先分析一下这个nut的流程和原理
                  进入badao.nut中看到onBeforeAttack_MomentarySlash这个函数
                  里面定义了内容,为了方便大家理解,我稍微写了几句注释:

                  也就是说,当玩家释放拔刀斩技能后,会判断使用的是什么类型的武器,如果是钝器,则会判断怪物是不是可以控制,如果可以控制,则会给被攻击到的对象附加两个ap(ap_badao和ap_badao2)第一个用于控制怪物旋转,第二个用于绘制溜溜球ani。
                  继续进入ap的nut分析:
                  在ap_badao.nut的proc函数中,可以发现问题所在
                  他首先会让怪物击上升一段距离,然后判断怪物的当前高度,如果z轴大于0,则会进入旋转状态并且绘制ani
                  这里就可以解释为什么越溪镇的小飞龙会无限旋转了,因为小飞龙的z轴一直>0,他会无限进入这个分支的代码

                  知道了问题,就非常好解决了
                  原本的判断是根据当前怪物z轴是否大于0来判断旋转的,那我们只需要将这个判断的值改为相对距离
                  也就是说,我们用怪物被击中后的初始z轴和当前z轴相减,如果这个相对距离小于0说明还在天上,如果大于等于0,说明已经落地了。
                  以上是解决思路,具体修改方法如下:

                  只需要如上图所示修改两处,就能解决这个问题。
                  不用跑五国上号测试,问题解决


                  IP属地:广东58楼2022-03-12 20:29
                  收起回复
                    看到有人说神迹的254加成装备不生效,其实是生效的
                    这里就稍微解读一下神迹254号技能“唤醒”的特殊伤害(其实是属性相关加成)的实现方式
                    首先分析proc_appendage_latentability函数中的内容:
                    1.通过sq_GetLevelData函数读取254号技能的静态数据
                    2.通过sq_getChangeStatus/sq_AddChangeStatus函数添加没有左下角状态图标的属性增益
                    具体我们可以参考nut文档中的调用方式

                    也就是说这个254号技能实际上是用来更改角色的一些固定属性的,比如三攻,属强等。
                    当然,进图之后才会触发相应的效果,站街确实没效果。
                    另外,看大家的学习热情好像不是很高,可能这种详细解读原理的帖子大家会觉得又长又臭不好看,
                    本来是不打算放任何成品上来的,希望的是大家能够自己动手实现,因为本身也没有什么技术含量在里面,
                    最后还是放两个之前讲过的修复后的nut,朝暮柔化函数整合还有钝器拔刀的修复,直接导入即可


                    IP属地:广东83楼2022-03-14 01:07
                    收起回复
                      base64:6ZO+5o6l77yaaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMTA0b01CUTlSOWxxWmd2Y0hScWpCY0EgCuaPkOWPluegge+8mjZmeTg=


                      IP属地:广东84楼2022-03-14 01:13
                      回复

                        @g19939904


                        IP属地:广东86楼2022-03-14 01:48
                        回复
                          最近事情特别多,实在是挤不出来时间,可能要鸽到四月初
                          吧友们提到的一些问题之后都会单独开帖子出来详细讲解(实现原理,提取流程)
                          比如伤害字体,nut终伤等等,都会单独开帖子从头开始详解
                          还有什么想了解的内容,都可以留言说一下,感谢大家耐心学习


                          IP属地:广东103楼2022-03-18 19:31
                          收起回复