borderlands技术理论吧 关注:3,164贴子:17,392

无主之地2 Mod制作基础知识(一)

只看楼主收藏回复

下面是无主之地2Mod,或者说补丁制作基础知识,第一部分。
不多废话,我们开始吧。


IP属地:江苏1楼2017-12-14 16:15回复
    教程分为三部分:1. Mod制作须知 2. 装备修改 3. 技能修改


    IP属地:江苏2楼2017-12-14 16:15
    收起回复
      一 Mod制作基础知识
      所需工具:
      1 GibbedBorderlands2 SaveEdit,就是所谓的SE。
      2 能运行的无主之地2游戏。
      3 好用的文本编辑器,比如UE。当然记事本也行。
      前提:
      1 已开启控制台。
      2 对游戏有基本的了解。如果你对游戏机制和装备配件有了解会方便许多。
      注意事项:
      1装备修改正盗版皆可。技能修改理论上正盗版皆可,但是本教程需要正版且可以联网。
      2 请务必拿出耐心。


      IP属地:江苏3楼2017-12-14 16:15
      收起回复
        二 装备修改
        装备修改较技能修改简单一些。我们举一个例子即可。
        Example:将诺法雷每发弹头数改为4并将弹容扩充2倍。
        1 建立补丁文件
        首先我们建立一个Mod补丁文件,后缀为.txt即可。将其放入游戏的Binaries文件夹下。文件名任意,尽量不要出现汉字。
        比如图中的NorfleetEX.txt

        2 dump需要的数据
        随后我们打开SE。思考:诺法雷的独特配件是枪管。所以找到一把Norfleet,将其数据中的Barrel复制。如图:

        进入游戏主界面,打开控制台,输入:
        objdump GD_Weap_Launchers.Barrel.L_Barrel_Alien_Maliwan_Norfleet并回车,将这个Barrel的数据dump下来。然后去Documents\My Games\Borderlands 2\WillowGame\Logs下找到Launch.log,在其文末找到dump的数据。如图:


        IP属地:江苏4楼2017-12-14 16:17
        收起回复
          3 修改弹头数
          从” *** Property dumpfor object 'WeaponPartDefinitionGD_Weap_Launchers.Barrel.L_Barrel_Alien_Maliwan_Norfleet' ***”开始,下面便是诺法雷枪管的属性。其中最重要的是WeaponAttributeEffects部分,共4条。我们拿第一条为例:
          WeaponAttributeEffects(0)=(AttributeToModify=AttributeDefinition'D_Attributes.Weapon.WeaponDamage',ModifierType=MT_Scale,BaseModifierValue=(BaseValueConstant=1.200000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000))
          可以看到,这条WeaponAttributeEffects编号0,修改的属性是”武器伤害”,修改方式为”Scale(缩放)”,基础修改值为:基础值1.2,基础缩放值1.0(这个值会乘以基础修改值1.2)。
          其他三条类推,依次修改了元素几率、单发弹头数、单发消耗弹药量。我们首先来修改其中的单发弹头数,原文如下:
          WeaponAttributeEffects(2)=(AttributeToModify=AttributeDefinition'D_Attributes.Weapon.WeaponProjectilesPerShot',ModifierType=MT_PreAdd,BaseModifierValue=(BaseValueConstant=2.000000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000))
          可以看到修改属性是“单发弹头数”,修改方式是“添加”,添加了2.00*1.00=2.00发。所以诺法雷一发三个弹头。
          打开我们的NorfleetEX.txt文件,按以下格式输入补丁内容:
          set 装备名 属性名 属性内容。每一项之间用空格间隔,这一条无论多长务必写到一行里。
          举例,如果我们要把弹头数改为4发。装备名为诺法雷枪管GD_Weap_Launchers.Barrel.L_Barrel_Alien_Maliwan_Norfleet,属性名为WeaponAttributeEffects,属性内容为(复制粘贴上面等号后的内容并修改数值、在首尾添加括号)((AttributeToModify=AttributeDefinition'D_Attributes.Weapon.WeaponProjectilesPerShot',ModifierType=MT_PreAdd,BaseModifierValue=(BaseValueConstant=3.000000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000)))。完整来写就是:
          set GD_Weap_Launchers.Barrel.L_Barrel_Alien_Maliwan_NorfleetWeaponAttributeEffects ((AttributeToModify=AttributeDefinition'D_Attributes.Weapon.WeaponProjectilesPerShot',ModifierType=MT_PreAdd,BaseModifierValue=(BaseValueConstant=3.000000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000)))
          如图:

          我打开了记事本的自动换行,其实是在一行的。
          然后我们保存并关闭这个补丁文件。在游戏里打开控制台输入exec Norfleet.txt回车。
          之后进入游戏查看:

          确实是4个弹头了。


          IP属地:江苏5楼2017-12-14 16:18
          回复
            4 修改弹夹容量
            弹夹容量的修改与弹头数几乎一样。但是注意到原dump中并没有弹夹容量这个属性,也就是说保持了默认。我们只要参照下文的常见属性稍作变通即可。单修改弹夹容量的补丁如下:
            setGD_Weap_Launchers.Barrel.L_Barrel_Alien_Maliwan_Norfleet WeaponAttributeEffects((AttributeToModify=AttributeDefinition'D_Attributes.Weapon.WeaponClipSize',ModifierType=MT_Scale,BaseModifierValue=(BaseValueConstant=2.000000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000)))
            注意这里的修改方式是Scale即缩放,所以弹夹容量翻倍。
            将上述代码直接粘贴在NorfleetEX.txt文末,记得另起一行。同理exec即可。
            这里给出常见Attribute的名称:
            每发弹头数:
            (AttributeToModify=AttributeDefinition'D_Attributes.Weapon.WeaponProjectilesPerShot',ModifierType=MT_PreAdd,BaseModifierValue=(BaseValueConstant=4.000000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000))
            弹速:
            (AttributeToModify=AttributeDefinition'D_Attributes.Weapon.WeaponProjectileSpeedMultiplier',ModifierType=MT_Scale,BaseModifierValue=(BaseValueConstant=3.000000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000))
            武器伤害:
            (AttributeToModify=AttributeDefinition'D_Attributes.Weapon.WeaponDamage',ModifierType=MT_Scale,BaseModifierValue=(BaseValueConstant=40.000000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000))
            弹匣容量:
            (AttributeToModify=AttributeDefinition'D_Attributes.Weapon.WeaponClipSize',ModifierType=MT_Scale,BaseModifierValue=(BaseValueConstant=0.000000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000))
            连射数量:
            (AttributeToModify'D_Attributes.WeaponAutomaticBurstCount',ModifierType=MT_PreAdd,BaseModifierValue=(BaseValueConstant=1.000000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleCOnstant=1.000000))
            开火速率:
            (AttributeToModify=AttributeDefinition'D_Attributes.Weapon.WeaponFireInterval',ModifierType=MT_Scale,BaseModifierValue=(BaseValueConstant=-15.500000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000))
            后坐力:
            (AttributeToModify=AttributeDefinition'D_Attributes.Weapon.WeaponPerShotAccuracyImpulse',ModifierType=MT_PreAdd,BaseModifierValue=(BaseValueConstant=1.000000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000))


            IP属地:江苏6楼2017-12-14 16:19
            收起回复
              6 关于SE中的其他配件
              其他配件均可以按照上面的例子修改。其中比较特殊的是Balance。我们比较感兴趣的是这个部件保留着游戏里一些约束。比如无限不可能出现Bandit握把,要打破这个限制,我们可以做如下修改:
              dump无限的balance数据。头部如下:
              [0071.09]Log: *** Property dump for object 'WeaponBalanceDefinition GD_Weap_Pistol.A_Weapons_Legendary.Pistol_Vladof_5_Infinity'***
              [0071.09]Log: === WeaponBalanceDefinition properties ===
              [0071.09]Log: WeaponPartListCollection=WeaponPartListCollectionDefinition'GD_Weap_Pistol.A_Weapons_Legendary.Pistol_Vladof_5_Infinity:PartList'
              [0071.09]Log: RuntimePartListCollection=WeaponPartListCollectionDefinition'GD_Weap_Pistol.A_Weapons_Legendary.Pistol_Vladof_5_Infinity:WeaponPartListCollectionDefinition_107'
              注意最后一行的RuntimePartListCollection后面的Definition:GD_Weap_Pistol.A_Weapons_Legendary.Pistol_Vladof_5_Infinity:WeaponPartListCollectionDefinition_107。我们将它dump下来,得到如下内容:
              [0134.28]Log: === WeaponPartListCollectionDefinition properties ===
              [0134.28]Log: AssociatedWeaponType=WeaponTypeDefinition'GD_Weap_Pistol.A_Weapons.WeaponType_Vladof_Pistol'
              [0134.28]Log: BodyPartData=(bEnabled=True,WeightedParts=((Part=WeaponPartDefinition'GD_Weap_Pistol.Body.Pistol_Body_Vladof_4',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2)))
              [0134.28]Log: GripPartData=(bEnabled=True,WeightedParts=((Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Vladof',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2),(Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Dahl',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2),(Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Torgue',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2),(Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Maliwan',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2),(Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Jakobs',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2),(Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Hyperion',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2)))
              在GripPartData中,可以看到这把枪不允许bandit握把生成。我们可以在补丁中做如下修改:
              GripPartData=(bEnabled=True,WeightedParts=((Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Vladof',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2),(Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Dahl',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2),(Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Torgue',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2),(Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Maliwan',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2),(Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Jakobs',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2),(Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Hyperion',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2),(Part=WeaponPartDefinition'GD_Weap_Pistol.Grip.Pistol_Grip_Bandit',Manufacturers=,MinGameStageIndex=0,MaxGameStageIndex=1,DefaultWeightIndex=2)))
              注意文末增加了Bandit握把的定义。
              善用dump,并多dump那些你看起来感兴趣的项目。所有GD_开头的项目基本都可以dump,各种collection、definition也是。比如我们想知道哈罗德的弹头分裂是哪里决定的,我们可以dump哈罗德的枪管,然后容易发现其中有一项CustomFiringModeDefinition
              明显就是我们想要的。Dump出它后面给的定义,就能看到哈罗德弹头分裂的详细设置。其中三个TimerEvents决定了弹头分裂的数量、距离、角度等,可以很方便的修改。其实整个CustomFiringModeDefinition项我们可以直接搬到其他武器上去。
              装备修改应该说比SE更进一步了吧。
              最后,如何修改武器皮肤。目前给出两个比较简单的办法:
              1 set 目标武器SE中的MaterialParent 拥有目标皮肤武器的SE中的Material项dump后GunMaterial一栏的数据
              2 同上,将Parent关键字换成Material关键字。
              第一种会将后面武器的皮肤混合到前面武器上。
              第二种会把后面武器的皮肤直接替换到前面武器上。
              第二种更严格一些,武器差距越大(类型、生产商),效果越差。
              注:较复杂的办法:哪怕是国外,Mod制作的资料也是少之又少非常少,更不用说其中的皮肤修改了。不过如果你真的感兴趣,我确实找到这样一份资料:
              1jIzltquf7mt


              IP属地:江苏8楼2017-12-14 16:21
              回复
                三 技能修改部分
                为方便,我们建立一个新的skill.txt用来编辑技能。
                技能修改与装备修改不同,需要用到hotfix机制。简单来说,hotfix分为三种:
                1 Patch
                2OnDemand
                3 Level
                Patch类hotfix严格来讲和我们平时写的set语句并没有什么区别。输入、回车,就生效了。这类语句对GearBox是很有用的,对Modder没什么用处。
                OnDemand类语句执行之后,只有当被它修改的内容实际载入时才会生效。典型例子就是技能相关的内容。比如你在游戏主界面obj dump GD_Soldier_Skills.Gunpowder.Nuke是拿不到任何数据的,只有你选择了大兵并且进入游戏,大兵的技能数据才会真正载入。
                Leve类hotfix语句执行之后,当每次角色级别改变的时候生效。典型例子是用来修改各种与等级有关的内容,比如稀有怪的出现概率。我们暂时不做讨论。
                我们修改技能用的是OnDemand类的hotfix。它的语法如下:
                无论修改了多少个技能有关的内容,总共只能出现两条set语句:
                setTransient.SparkServiceConfiguration_6 Keys (“修改1名称”,”修改2名称”,”修改3名称以此类推”)
                setTransient.SparkServiceConfiguration_6 Values (“修改1内容”,” 修改2内容”,” 修改3内容以此类推”)
                比如我们想要将Maya的Fleet技能描述修改为:“justlike a Hong Kong journalist”
                第一句set标明每次修改的名字。我们只有一次修改(修改技能描述),所以编辑如下:
                setTransient.SparkServiceConfiguration_6 Keys("SparkOnDemandPatchEntry-Maya1")
                其中SparkOnDemandPatchEntry表示我下面会进行一次OnDemand修改,Maya1表示修改的名称是Maya1。这个Maya1更多的是给人看而不是给游戏看,所以取一个看起来易懂的名称即可。
                第二句set正式开始修改。首先去文末查到Fleet技能的名称(你也可以去SE里拿到这些名称):GD_Siren_Skills.Motion.Fleet.然后我们将它dump下来(注意主界面是dump不了的,需要你选择一个Maya并进入游戏),在log文件中查看。
                可以看到SkillDescription一行保存的即技能描述。于是我们如下编辑:
                setTransient.SparkServiceConfiguration_6 Values("GD_Siren_Streaming,GD_Siren_Skills.Motion.Fleet,SkillDescription,, justlike a Hong Kong journalist ")
                注意,OnDemand语句values的格式如下:"<package>,<object>,<path>,<old_value>,<value>"
                package是GD_Siren_Streaming,这个是固定的。每个角色均有这样一个package,文末有整理。
                object是你要修改的目标,我们这里自然是fleet技能,修改的path是技能描述SkillDescription,old_value我们可以不填,value是你要修改成的值。
                现在skill.txt内容如下:
                set Transient.SparkServiceConfiguration_6Keys ("SparkOnDemandPatchEntry-Maya1")
                setTransient.SparkServiceConfiguration_6 Values("GD_Siren_Streaming,GD_Siren_Skills.Motion.Fleet,SkillDescription,, justlike a Hong Kong journalist ")
                这两条语句括号内都可以有使用逗号分隔的多项,每一项用引号括起来。关键是上下依次一一对应。
                保存。在游戏主界面里exec即可。
                关于描述修改,还有一点注意事项。在你想要改变颜色的字段前后分别加[skill]和[-skill]可以使其变成淡黄色,就像官方的技能描述一样。同样的还有[slag]和[-slag],[shock]和[-shock],[incendiary]和[-incendiary],[corrosive]和[-corrosive]。就不多做解释了。
                接下来是修改技能效果。跟修改装备大同小异,给出一个例子,增加fleet的每级加速提高至15%:
                setTransient.SparkServiceConfiguration_6 Keys ("SparkOnDemandPatchEntry-Maya2")
                setTransient.SparkServiceConfiguration_6 Values ("GD_Siren_Streaming,GD_Siren_Skills.Motion.Fleet,SkillEffectDefinitions,,((AttributeToModify=AttributeDefinition'D_Attributes.GameplayAttributes.FootSpeed',bIncludeDuelingTargets=False,bIncludeSelfAsTarget=False,bOnlyEffectTargetsInRange=False,bExcludeNonPlayerCharacters=False,EffectTarget=TARGET_Self,TargetInstanceDataName=,TargetCriteria=CRITERIA_None,ModifierType=MT_Scale,BaseModifierValue=(BaseValueConstant=0.100000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000),GradeToStartApplyingEffect=1,PerGradeUpgradeInterval=1,PerGradeUpgrade=(BaseValueConstant=0.150000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000),BonusUpgradeList=))")
                将GD_Siren_Skills.Motion.Fleet的SkillEffectDefinitions项照抄,并修改PerGradeUpgrade的BaseValueConstant至0.15即可。
                注意SkillEffectDefinitions是技能最重要的,也是我们一般最想要修改的部分。其中各项基本都可以理解。比如BaseModifierValue 中的BaseValueConstant是技能生效后的基础值,BaseValueScaleConstant是该基础值的乘数。PerGradeUpgrade中的BaseValueConstant是每级技能增加的基础值,BaseValueScaleConstant是该基础值的乘数。
                有趣的是GradeToStartApplyingEffect项,我们可以把它修改为3来让加速加成在fleet超过三点时才生效。
                注意到有些技能加成不止一个,dump下来的SkillEffectDefinitions也就不止一项。极端例子比如大兵的Ranger技能,总共有7个加成。遗憾的是,log中虽然分项显示了这些加成,实际上依然是一个语句。如果我们要修改其中一条,我们需要把全部的effect照抄、合并并修改其中想要修改的部分。注意语法。因为虽然抄了一大堆,但这一堆语句本质上仍然是“第二个set语句括号中的一项”,所以应该放在一对引号中。这里括号数量较多,注意左右匹配。


                IP属地:江苏9楼2017-12-14 16:21
                收起回复
                  添加删除某个技能的SkillEffectDefinitions也是可以的。比如我们想要使Fleet技能除去加速,每级还增加10%的暴击伤害,可以做如下编辑(为方便省略了整第一句set与第二句set里的技能描述修改):
                  setTransient.SparkServiceConfiguration_6 Values("GD_Siren_Streaming,GD_Siren_Skills.Motion.Fleet,SkillEffectDefinitions,,((AttributeToModify=AttributeDefinition'D_Attributes.GameplayAttributes.FootSpeed',bIncludeDuelingTargets=False,bIncludeSelfAsTarget=False,bOnlyEffectTargetsInRange=False,bExcludeNonPlayerCharacters=False,EffectTarget=TARGET_Self,TargetInstanceDataName=,TargetCriteria=CRITERIA_None,ModifierType=MT_Scale,BaseModifierValue=(BaseValueConstant=0.100000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000),GradeToStartApplyingEffect=1,PerGradeUpgradeInterval=1,PerGradeUpgrade=(BaseValueConstant=0.100000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000),BonusUpgradeList=),(AttributeToModify=AttributeDefinition'D_Attributes.GameplayAttributes.PlayerCriticalHitBonus',bIncludeDuelingTargets=False,bIncludeSelfAsTarget=False,bOnlyEffectTargetsInRange=False,bExcludeNonPlayerCharacters=False,EffectTarget=TARGET_Self,TargetInstanceDataName=,TargetCriteria=CRITERIA_None,ModifierType=MT_Scale,BaseModifierValue=(BaseValueConstant=0.100000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000),GradeToStartApplyingEffect=3,PerGradeUpgradeInterval=1,PerGradeUpgrade=(BaseValueConstant=0.100000,BaseValueAttribute=None,InitializationDefinition=None,BaseValueScaleConstant=1.000000),BonusUpgradeList=))")
                  从外向内分析这个括号。首尾最外层均有set语句自带的括号。之后是一对引号,表明中间的内容为一项。之后去掉开头的GD_Siren_Streaming,GD_Siren_Skills.Motion.Fleet,SkillEffectDefinitions,,(packageobject path和oldvalue),剩下的内容均为SkillEffectDefinitions本体。形式如下:
                  ((AttributeToModify…),(AttributeToModify…))
                  这样就清晰多了。将SkillEffectDefinitions改为了两项,分别修改了移动速度和暴击伤害。
                  想要更清晰的理解,可以在执行这个补丁之后将技能dump下来。Log里会把两个属性分开写,很易懂。
                  如果想要删除某项加成,这里推荐将其SkillEffectDefinitions中该属性的各种值均置为0,而不是通过重写将其删掉。除去游戏稳定性,后文还会提到一个特殊原因。
                  修改技能之后,我们需要修改技能加成显示,就是你在技能树中查看某个技能时显示的“移动速度:+10%”等。
                  每个“移动速度:+10%”这样的显示均为技能dump里SkillEffectPresentations的一项。而SkillEffectPresentations指向一个AttributePresentationDefinition,这里面存放着加成的描述。所以我们将Fleet的技能dump下来,它默认只有一条SkillEffectPresentations,指向AttributePresentationDefinition'GD_Siren_Skills.Motion.Fleet:AttributePresentationDefinition_77'。
                  我们再把这个GD_Siren_Skills.Motion.Fleet:AttributePresentationDefinition_77dump下来,可以看到真正的描述存在于它的Description项中。需要注意的只有一点,这里一般用$NUMBER$来直接显示加成数值。所以最终形式大约是这样:
                  set Transient.SparkServiceConfiguration_6Values (“GD_Siren_Streaming,GD_Siren_Skills.Motion.Fleet:AttributePresentationDefinition_77, Description,,Speed:$NUMBER$”)
                  需要注意,这里的$NUMBER$系统会自动计算。但是如果有多种加成,到底计算哪种加成的数值由该AttributePresentationDefinition中的Attribute项决定。我们可以在这个GD_Siren_Skills.Motion.Fleet:AttributePresentationDefinition_77的dump中看到Attribute是AttributeDefinition'D_Attributes.GameplayAttributes.FootSpeed,也就是说,这条技能描述中的$NUMBER$计算的是这个技能中对移动速度的加成。


                  IP属地:江苏10楼2017-12-14 16:21
                  回复
                    理解一下技能卡片中那行“移动速度:+10%”的产生原理:Fleet这个技能原本默认只有一个加成,加成显示用的是SkillEffectPresentations指向的GD_Siren_Skills.Motion.Fleet:AttributePresentationDefinition_77。它通过attribute项找到SkillEffectDefinitions中加移动速度的那一项,并计算出目前加成数值,把这个值显示到$NUMBER$处。
                    如果你明白了这行标识的产生原理,问题就来了。回到一开始,我们想为Fleet增加第二个暴击加成。一个SkillEffectPresentations倒是可以指向多条AttributePresentationDefinition(逗号隔开),但是我们手头只有一条GD_Siren_Skills.Motion.Fleet:AttributePresentationDefinition_77。想要显示“移动速度:+10%暴击伤害:+xx%”这样的字样,可行的路只有这几条:
                    1 你的暴击伤害也是每级加10%。严格来说,你的暴击伤害加成里那四个数值跟移动速度的四个数值完全一样。那你可以用这一个加成显示通过换行来显示两种加成,反正算出来$NUMBER$都一样。你可以通过在预想的行末输入<br>来换行。
                    2 能不能为Fleet添加一个类似GD_Siren_Skills.Motion.Fleet:AttributePresentationDefinition_77这样的项目,比如GD_Siren_Skills.Motion.Fleet:AttributePresentationDefinition_78,并让SkillEffectPresentations指向这两个AttributePresentationDefinition呢?
                    遗憾的是,通过观察原本就有多条AttributePresentationDefinition的技能dump,可以发现定义末尾的编号无规律可循(而且也不知道应该怎么添加)。比如Maya灵犀之眼的加成描述分别为AttributePresentationDefinition'GD_Siren_Skills.Harmony.MindsEye:AttributePresentationDefinition_77和AttributePresentationDefinition'GD_Siren_Skills.Harmony.MindsEye:AttributePresentationDefinition_1。同一个技能两种加成的AttributePresentationDefinition编号让人摸不到头脑。
                    所以只剩下最后一条路,就是借用其他技能的AttributePresentationDefinition项。其中最好借的莫过于大兵的Ranger了。7项加成,数值也完全一样,$NUMBER$自然也一样。所以改到一条AttributePresentationDefinition里,空出来的那些AttributePresentationDefinition就可以为你所用了!只需要修改一下这些AttributePresentationDefinition的Attribute和Descprition,就可以让你愉快地为技能添加新的加成描述。
                    之所以上文提到“删除某个技能的某个加成,最好是置为0而不是删掉”也是这个原因。因为我们不知道删掉加成后系统会不会顺手就把(本可以拿来二次利用的)技能加成描述给注销(析构或者禁用)掉。
                    方便起见,这里给出释放大兵Ranger的AttributePresentationDefinition示例:
                    setTransient.SparkServiceConfiguration_6 Keys ("SparkOnDemandPatchEntry-FreeAxtonRangerAPD1","SparkOnDemandPatchEntry- FreeAxtonRangerAPD2")
                    setTransient.SparkServiceConfiguration_6 Values ("GD_Soldier_Streaming,GD_Soldier_Skills.Gunpowder.Ranger,SkillEffectPresentations,,(AttributePresentationDefinition'GD_Soldier_Skills.Gunpowder.Ranger:AttributePresentationDefinition_10',)","GD_Soldier_Streaming,GD_Soldier_Skills.Gunpowder.Ranger:AttributePresentationDefinition_10,Description,,GunDamage: $NUMBER$<br>Accuracy: $NUMBER$<br>Critical Hit Damage:$NUMBER$<br>Fire Rate: $NUMBER$<br>Magazine Size:$NUMBER$<br>Reload Speed: $NUMBER$<br>Maximum Health: $NUMBER$")
                    大兵的AttributePresentationDefinition原本有7个,编号为0,1,2,3,4,5,10。现在只用了一个10,0到5就可以为你所用了。
                    同理,你也可以去其他原本有多个数值相同加成的技能那里借AttributePresentationDefinition,这里就不多说了。
                    关于交换技能位置:
                    你可以通过obj dump GD_Assassin_Skills.skilltree.Branch_Bloodshed或者诸如此类的语句来获取角色某一列的技能表。其中包含按Tier分的诸多技能定义,从左到右、从上到下。
                    于是你可以使用类似这样的语句来交换技能位置(交换Fearless与Grim):
                    "GD_Assassin_Streaming,GD_Assassin_Skills.SkillTree.Branch_BloodShed,Tiers[1].Skills[0],,SkillDefinition'GD_Assassin_Skills.Cunning.Fearless'"
                    "GD_Assassin_Streaming,GD_Assassin_Skills.SkillTree.Branch_Cunning,Tiers[1].Skills[0],,SkillDefinition'GD_Assassin_Skills.Bloodshed.Grim'"
                    说白了就是改了下指针。非常方便。


                    IP属地:江苏11楼2017-12-14 16:22
                    回复
                      修改完技能,剩下的就是修改游戏内mod加成了。有了前面知识的铺垫,你会发现dump出的mod内容非常好理解。这里就不贴了。
                      至此,帖子的正文算是完结了。我们现在应该可以对武器以及技能树进行比较深的修改了。潘多拉的环境我们尚无力改变,但我们已经能一定程度上影响游戏的玩法了。
                      下面是lz的一点点感受,与知识性的内容无关了。比较冗长,没什么具体意义,大家可以忽略。
                      玩这个游戏两年左右了。不长,也不算短。原版的表层上的知识也算知道个五五六六了(我不敢说七七八八),深层次的数据、配件、细节还是不到位。但对于一个普通玩家,说实话,已经有那么一点点乏味了。
                      一个月前吧,开始接触社区补丁。之后把补丁的内容翻译了一下,搬运到贴吧来。两个吧的吧友都很友善,技术理论吧的dalao也指出了我的许多翻译错误,我也学到了很多之前不知道的知识。算是受到了吧友们的鼓励吧,我开始考虑能不能为这个游戏、这个吧做些什么。之后想起了自己一直不怎么敢动手的潜猎,出乎意料的是居然几遍就过去了。想着魔女潜猎的视频并不是很多(可能有很多打得过的朋友,但是比鲨虫之类要少一些),于是自己做了一个。怎么说呢再次感受到了大家的好意。无论是打不过的吧友,还是提出优化的dalao,对我一个萌新都很友好。用专业一点的词汇,好感度刷得差不多了(笑
                      其实最初接触社区补丁的时候,就在想 为什么我自己不能做一个呢?然后去google查资料,意料之中的少。其实不仅是少,最初用类似borderlands 2 modding这样的关键词,根本就什么都没查到。倒是有一些modding有关的社区,但是人少的可怜,年代也久,帖子还大部分是求se改枪的。
                      最后还是自力更生。总结了下社区补丁的语句结构,然后用不知道从哪里找到的dump命令自己试。结果发现事实异常简单。实验了一天左右,把常见的坑跳了一遍,觉得可以写个基础教程出来了。于是用了有7个小时吧,完成了这个帖子。
                      Mod本身就是延续游戏寿命的重要工具。我之前是半个Minecraft玩家,所以对Mod相对容易接受(那是一个有了mod完全就是两款游戏的游戏,只是最近的GTNH看着就肝不动…)。像装备修改、技能修改,这种工具潜力是非常非常大的。就看脑洞几何,怎么使用了。
                      还有,这帖子虽然开始标了(一),但那只是用来表示“我写的内容是基础中的一部分”,至于有没有(二)、(三),可能就要看以后了。其实剩下的掉落修改等内容,应该对大家已经不是什么问题了。
                      我说完了。谢谢大家。


                      IP属地:江苏12楼2017-12-14 16:22
                      收起回复
                        附录:
                        技能列表
                        SkillData- Assasin
                        Skill
                        1 GD_Assassin_Skills.ActionSkill.Skill_Deception
                        2GD_Assassin_Skills.Sniping.HeadShot
                        3GD_Assassin_Skills.Sniping.Optics
                        4GD_Assassin_Skills.Sniping.Killer
                        5GD_Assassin_Skills.Sniping.Precision
                        6GD_Assassin_Skills.Sniping.OneShotOneKill
                        7GD_Assassin_Skills.Sniping.Bore
                        8GD_Assassin_Skills.Sniping.Velocity
                        9GD_Assassin_Skills.Sniping.KillConfirmed
                        10GD_Assassin_Skills.Sniping.AtOneWithTheGun
                        11GD_Assassin_Skills.Sniping.CriticalAscention
                        12GD_Assassin_Skills.Cunning.FastHands
                        13 GD_Assassin_Skills.Cunning.FastHands
                        14GD_Assassin_Skills.Cunning.Fearless
                        15GD_Assassin_Skills.Cunning.Ambush
                        16GD_Assassin_Skills.Cunning.RisingShot
                        17GD_Assassin_Skills.Cunning.DeathMark
                        18GD_Assassin_Skills.Cunning.Unforseen
                        19GD_Assassin_Skills.Cunning.Innervate
                        20GD_Assassin_Skills.Cunning.TwoFang
                        21GD_Assassin_Skills.Cunning.DeathBlossom
                        22GD_Assassin_Skills.Bloodshed.KillingBlow
                        23GD_Assassin_Skills.Bloodshed.IronHand
                        24GD_Assassin_Skills.Bloodshed.Grim
                        25GD_Assassin_Skills.Bloodshed.BeLikeWater
                        26GD_Assassin_Skills.Bloodshed.Followthrough
                        27GD_Assassin_Skills.Bloodshed.Execute
                        28GD_Assassin_Skills.Bloodshed.Backstab
                        29GD_Assassin_Skills.Bloodshed.Resurgence
                        30GD_Assassin_Skills.Bloodshed.LikeTheWind
                        31GD_Assassin_Skills.Bloodshed.ManyMustFall
                        PlayerClass
                        GD_Assassin.Character.CharClass_Assassin
                        Skill
                        1GD_Soldier_Skills.Scorpio.Skill_Scorpio
                        2GD_Soldier_Skills.Guerrilla.Sentry
                        3GD_Soldier_Skills.Guerrilla.Ready
                        4GD_Soldier_Skills.Guerrilla.LaserSight
                        5GD_Soldier_Skills.Guerrilla.Willing
                        6GD_Soldier_Skills.Guerrilla.Onslaught
                        7GD_Soldier_Skills.Guerrilla.ScorchedEarth
                        8GD_Soldier_Skills.Guerrilla.Able
                        9GD_Soldier_Skills.Guerrilla.Grenadier
                        10GD_Soldier_Skills.Guerrilla.CrisisManagement
                        11GD_Soldier_Skills.Guerrilla.DoubleUp
                        12GD_Soldier_Skills.Gunpowder.Impact
                        13GD_Soldier_Skills.Gunpowder.Expertise
                        14GD_Soldier_Skills.Gunpowder.Overload
                        15GD_Soldier_Skills.Gunpowder.MetalStorm
                        16GD_Soldier_Skills.Gunpowder.Steady
                        17GD_Soldier_Skills.Gunpowder.LongBowTurret
                        18GD_Soldier_Skills.Gunpowder.Battlefront
                        19GD_Soldier_Skills.Gunpowder.DutyCalls
                        20GD_Soldier_Skills.Gunpowder.DoOrDie
                        21GD_Soldier_Skills.Gunpowder.Ranger
                        22GD_Soldier_Skills.Gunpowder.Nuke
                        23GD_Soldier_Skills.Survival.HealthY
                        24GD_Soldier_Skills.Survival.Preparation
                        25GD_Soldier_Skills.Survival.LastDitchEffort
                        26GD_Soldier_Skills.Survival.Pressure
                        27GD_Soldier_Skills.Survival.Forbearance
                        28GD_Soldier_Skills.Survival.PhalanxShield
                        29GD_Soldier_Skills.Survival.QuickCharge
                        30GD_Soldier_Skills.Survival.Resourceful
                        31GD_Soldier_Skills.Survival.Mag-Lock
                        32GD_Soldier_Skills.Survival.Grit
                        33GD_Soldier_Skills.Survival.Gemini
                        PlayerClass
                        GD_Soldier.Character.CharClass_Soldier
                        Skill
                        1GD_Tulip_Mechromancer_Skills.Action.Skill_DeathTrap
                        2GD_Tulip_Mechromancer_Skills.BestFriendsForever.CloseEnough
                        3GD_Tulip_Mechromancer_Skills.BestFriendsForever.CookingUpTrouble
                        4GD_Tulip_Mechromancer_Skills.BestFriendsForever.FancyMathematics
                        5GD_Tulip_Mechromancer_Skills.BestFriendsForever.BuckUp
                        6GD_Tulip_Mechromancer_Skills.BestFriendsForever.TheBetterHalf
                        7GD_Tulip_Mechromancer_Skills.BestFriendsForever.PotentAsAPony
                        8GD_Tulip_Mechromancer_Skills.BestFriendsForever.UpshotRobot
                        9GD_Tulip_Mechromancer_Skills.BestFriendsForever.UnstoppableForce
                        10GD_Tulip_Mechromancer_Skills.BestFriendsForever.ExplosiveClap
                        11GD_Tulip_Mechromancer_Skills.BestFriendsForever.MadeOfSternerStuff
                        12GD_Tulip_Mechromancer_Skills.BestFriendsForever.20PercentCooler
                        13GD_Tulip_Mechromancer_Skills.BestFriendsForever.SharingIsCaring
                        14GD_Tulip_Mechromancer_Skills.LittleBigTrouble.MorePep
                        15GD_Tulip_Mechromancer_Skills.LittleBigTrouble.Myelin
                        16GD_Tulip_Mechromancer_Skills.LittleBigTrouble.ShockStorm
                        17GD_Tulip_Mechromancer_Skills.LittleBigTrouble.TheStare
                        18GD_Tulip_Mechromancer_Skills.LittleBigTrouble.StrengthOfFiveGorillas
                        19GD_Tulip_Mechromancer_Skills.LittleBigTrouble.ElectricalBurn
                        20GD_Tulip_Mechromancer_Skills.LittleBigTrouble.ShockAndAAAGGGHHH
                        21GD_Tulip_Mechromancer_Skills.LittleBigTrouble.EvilEnchantress
                        22GD_Tulip_Mechromancer_Skills.LittleBigTrouble.OneTwoBoom
                        23GD_Tulip_Mechromancer_Skills.LittleBigTrouble.WiresDontTalk
                        24GD_Tulip_Mechromancer_Skills.LittleBigTrouble.InterspersedOutburst
                        25GD_Tulip_Mechromancer_Skills.LittleBigTrouble.LightningStrike
                        26GD_Tulip_Mechromancer_Skills.LittleBigTrouble.MakeItSparkle
                        27GD_Tulip_Mechromancer_Skills.EmbraceChaos.SmallerLighterFaster
                        28GD_Tulip_Mechromancer_Skills.EmbraceChaos.Anarchy
                        29GD_Tulip_Mechromancer_Skills.EmbraceChaos.PreshrunkCyberpunk
                        30GD_Tulip_Mechromancer_Skills.EmbraceChaos.RobotRampage
                        31GD_Tulip_Mechromancer_Skills.EmbraceChaos.BloodSoakedShields
                        32GD_Tulip_Mechromancer_Skills.EmbraceChaos.AnnoyedAndroid
                        33GD_Tulip_Mechromancer_Skills.EmbraceChaos.Discord
                        34GD_Tulip_Mechromancer_Skills.EmbraceChaos.TypecastIconoclast
                        35GD_Tulip_Mechromancer_Skills.EmbraceChaos.RationalAnarchist
                        36GD_Tulip_Mechromancer_Skills.EmbraceChaos.DeathFromAbove
                        37GD_Tulip_Mechromancer_Skills.EmbraceChaos.TheNthDegree
                        38GD_Tulip_Mechromancer_Skills.EmbraceChaos.WithClaws


                        IP属地:江苏13楼2017-12-14 16:24
                        回复
                          PlayerClass
                          GD_Tulip_Mechromancer.Character.CharClass_Mechromancer
                          Skill
                          1GD_Lilac_SkillsBase.ActionSkill.Skill_Psycho
                          2GD_Lilac_Skills_Bloodlust.Skills.BloodfilledGuns
                          3GD_Lilac_Skills_Bloodlust.Skills.BloodyTwitch
                          4GD_Lilac_Skills_Bloodlust.Skills.TasteOfBlood
                          5GD_Lilac_Skills_Bloodlust.Skills.BloodyRevival
                          6GD_Lilac_Skills_Bloodlust.Skills.BloodOverdrive
                          7GD_Lilac_Skills_Bloodlust.Skills.BloodBath
                          8GD_Lilac_Skills_Bloodlust.Skills.BuzzAxeBombadier
                          9GD_Lilac_Skills_Bloodlust.Skills.FuelTheBlood
                          10GD_Lilac_Skills_Bloodlust.Skills.BloodTrance
                          11GD_Lilac_Skills_Bloodlust.Skills.BoilingBlood
                          12GD_Lilac_Skills_Bloodlust.Skills.NervousBlood
                          13GD_Lilac_Skills_Bloodlust.Skills.Bloodsplosion
                          14GD_Lilac_Skills_Bloodlust.Skills._Bloodlust
                          15GD_Lilac_Skills_Mania.Skills.EmptyRage
                          16GD_Lilac_Skills_Mania.Skills.PullThePin
                          17GD_Lilac_Skills_Mania.Skills.FeedTheMeat
                          18GD_Lilac_Skills_Mania.Skills.EmbraceThePain
                          19GD_Lilac_Skills_Mania.Skills.FuelTheRampage
                          20GD_Lilac_Skills_Mania.Skills.ThrillOfTheKill
                          21GD_Lilac_Skills_Mania.Skills.LightTheFuse
                          22GD_Lilac_Skills_Mania.Skills.StripTheFlesh
                          23GD_Lilac_Skills_Mania.Skills.RedeemTheSoul
                          24GD_Lilac_Skills_Mania.Skills.SaltTheWound
                          25GD_Lilac_Skills_Mania.Skills.SilenceTheVoices
                          26GD_Lilac_Skills_Mania.Skills.ReleaseTheBeast
                          27GD_Lilac_Skills_Hellborn.Skills.BurnBabyBurn
                          28GD_Lilac_Skills_Hellborn.Skills.FuelTheFire
                          29GD_Lilac_Skills_Hellborn.Skills.NumbedNerves
                          30GD_Lilac_Skills_Hellborn.Skills.PainIsPower
                          31GD_Lilac_Skills_Hellborn.Skills.ElementalElation
                          32GD_Lilac_Skills_Hellborn.Skills.DelusionalDamage
                          33GD_Lilac_Skills_Hellborn.Skills.FireFiend
                          34GD_Lilac_Skills_Hellborn.Skills.FlameFlare
                          35GD_Lilac_Skills_Hellborn.Skills.HellfireHalitosis
                          36GD_Lilac_Skills_Hellborn.Skills.ElementalEmpathy
                          37GD_Lilac_Skills_Hellborn.Skills.RavingRetribution
                          38GD_Lilac_Skills_Hellborn.Skills.FireStatusDetector
                          39GD_Lilac_Skills_Hellborn.Skills.AppliedStatusEffectListener
                          PlayerClass
                          GD_Lilac_PlayerClass.Character.CharClass_LilacPlayerClass
                          Skill
                          1GD_Siren_Skills.Phaselock.Skill_Phaselock
                          2GD_Siren_Skills.Motion.Ward
                          3GD_Siren_Skills.Motion.Accelerate
                          4GD_Siren_Skills.Motion.Suspension
                          5GD_Siren_Skills.Motion.KineticReflection
                          6GD_Siren_Skills.Motion.Fleet
                          7GD_Siren_Skills.Motion.Converge
                          8GD_Siren_Skills.Motion.Inertia
                          9GD_Siren_Skills.Motion.Quicken
                          10GD_Siren_Skills.Motion.SubSequence
                          11GD_Siren_Skills.Motion.ThoughtLock
                          12GD_Siren_Skills.Harmony.MindsEye
                          13GD_Siren_Skills.Harmony.SweetRelease
                          14GD_Siren_Skills.Harmony.Restoration
                          15GD_Siren_Skills.Harmony.Wreck
                          16GD_Siren_Skills.Harmony.Elated
                          17GD_Siren_Skills.Harmony.Res
                          18GD_Siren_Skills.Harmony.Recompense
                          19GD_Siren_Skills.Harmony.Sustenance
                          20GD_Siren_Skills.Harmony.LifeTap
                          21 GD_Siren_Skills.Harmony.Scorn
                          22GD_Siren_Skills.Cataclysm.Flicker
                          23GD_Siren_Skills.Cataclysm.Foresight
                          24GD_Siren_Skills.Cataclysm.Immolate
                          25GD_Siren_Skills.Cataclysm.Helios
                          26GD_Siren_Skills.Cataclysm.ChainReaction
                          27GD_Siren_Skills.Cataclysm.CloudKill
                          28GD_Siren_Skills.Cataclysm.Backdraft
                          29GD_Siren_Skills.Cataclysm.Reaper
                          30GD_Siren_Skills.Cataclysm.BlightPhoenix
                          31GD_Siren_Skills.Cataclysm.Ruin
                          PlayerClass
                          GD_Siren.Character.CharClass_Siren
                          Skill
                          1GD_Mercenary_Skills.ActionSkill.Skill_Gunzerking
                          2GD_Mercenary_Skills.Gun_Lust.LockedandLoaded
                          3GD_Mercenary_Skills.Gun_Lust.QuickDraw
                          4GD_Mercenary_Skills.Gun_Lust.ImYourHuckleberry
                          5GD_Mercenary_Skills.Gun_Lust.AllIneedIsOne
                          6GD_Mercenary_Skills.Gun_Lust.DivergentLikness
                          7GD_Mercenary_Skills.Gun_Lust.AutoLoader
                          8GD_Mercenary_Skills.Gun_Lust.MoneyShot
                          9GD_Mercenary_Skills.Gun_Lust.LayWaste
                          10GD_Mercenary_Skills.Gun_Lust.DownNotOut
                          11GD_Mercenary_Skills.Gun_Lust.KeepItPipingHot
                          12GD_Mercenary_Skills.Gun_Lust.NoKillLikeOverkill
                          13GD_Mercenary_Skills.Rampage.Inconceivable
                          14GD_Mercenary_Skills.Rampage.FilledtotheBrim
                          15GD_Mercenary_Skills.Rampage.AllInTheReflexes
                          16GD_Mercenary_Skills.Rampage.LastLonger
                          17GD_Mercenary_Skills.Rampage.ImReadyAlready
                          18GD_Mercenary_Skills.Rampage.SteadyAsSheGoes
                          19GD_Mercenary_Skills.Rampage.5Shotsor6
                          20GD_Mercenary_Skills.Rampage.YippeeKiYay
                          21GD_Mercenary_Skills.Rampage.DoubleYourFun
                          22GD_Mercenary_Skills.Rampage.GetSome
                          23GD_Mercenary_Skills.Rampage.KeepFiring
                          24GD_Mercenary_Skills.Brawn.Diehard
                          25GD_Mercenary_Skills.Brawn.Incite
                          26GD_Mercenary_Skills.Brawn.Asbestos
                          27GD_Mercenary_Skills.Brawn.ImTheJuggernaut
                          28GD_Mercenary_Skills.Brawn.AintGotTimeToBleed
                          29GD_Mercenary_Skills.Brawn.FistfulOfHurt
                          30GD_Mercenary_Skills.Brawn.OutOfBubblegum
                          31GD_Mercenary_Skills.Brawn.BusThatCantSlowDown
                          32GD_Mercenary_Skills.Brawn.JustGotReal
                          33GD_Mercenary_Skills.Brawn.SexualTyrannosaurus
                          34GD_Mercenary_Skills.Brawn.ComeAtMeBro


                          IP属地:江苏14楼2017-12-14 16:24
                          回复
                            附录:
                            各种包:
                            GD_Assassin_Streaming
                            GD_Lilac_Psycho_Streaming
                            GD_Mercenary_Streaming
                            GD_Soldier_Streaming
                            GD_Siren_Streaming
                            GD_Tulip_Mechro_Streaming


                            IP属地:江苏15楼2017-12-14 16:41
                            回复
                              顶一下


                              IP属地:河南来自Android客户端16楼2017-12-14 17:20
                              收起回复