战地2吧 关注:142,927贴子:3,882,848
  • 17回复贴,共1

【教程】论如何以正确姿势的偷懒

只看楼主收藏回复

你还在为统一一大堆同类武器还老漏改而苦恼吗?你还在一条一条的修改新加地图的阵营?你想要一次性修改N把武器N张地图的阵营而不用反反复复的做同一件事吗?这个教程可以帮到你
【WARNING】本教程适合已经用有一定修改经验的人,所以不建议纯菜鸟学习,当然真要冒险也无所谓
【WARNING】本教程适合已经用有一定修改经验的人,所以不建议纯菜鸟学习,当然真要冒险也无所谓
【WARNING】本教程适合已经用有一定修改经验的人,所以不建议纯菜鸟学习,当然真要冒险也无所谓
这个有一点经验指的不是改几个武器参数的级别,是要达到随心所欲的移植任何出现在某个载具中任意中意的武器的级别,并清楚的知道相关代码的作用的级别,只会改改某一条武器数据载具数据的,我不保证可以一次成功,不报错
类似的操作,我在PR模组和之前诸葛云疯58的纯步战CBZ模组里见过,但我只是电子专业的鼓捣硬件那种,只会拿最低级的C语言程序做点玩具的水平,所以就懒得研究相关的代码了(其实代码都能看懂,只是偷懒罢了,真要学估计也就一小会的事)
我的方法相比PR和CBZ的方法很像,原理基本一样,都是调用外部文件,但区别在于,我的方法是直接调用文档,一段代码一个文档,而PR和CBZ的方法更类似于编程中的头文件,调用的是文档中的某段代码,我不能评价两个方法孰优孰劣,毕竟我没用过PR和CBZ的方法,但我的方法对编程方面的知识要求应该更低一些
----------------------------------------------------武器部分---------------------------------------------------
一般武器需要改的内容不外乎以下部分,其中整行等于号之间的是性能方面的代码,也是同类型武器里面重复度最高的代码,毕竟同样是一把BF4的AK12,一把后坐力上天一把无后座的违和感,肯定让人不爽
rem ---BeginComp:WeaponHud ---
ObjectTemplate.createComponent WeaponHud
ObjectTemplate.weaponHud.weaponIcon Ingame\Weapons\Icons\Hud\bf4_ak12
ObjectTemplate.weaponHud.altWeaponIcon Ingame\Weapons\Icons\Hud\bf4_ak12
ObjectTemplate.weaponHud.selectIcon Ingame\Weapons\Icons\Hud\Selection\bf4_ak12
ObjectTemplate.weaponHud.hudName "AK-12"
ObjectTemplate.weaponHud.guiIndex 4
ObjectTemplate.weaponHud.altGuiIndex 52
ObjectTemplate.weaponHud.deviationFactor 5
ObjectTemplate.weaponHud.maxVisualDeviation 50
ObjectTemplate.weaponHud.minVisualDeviation 15
ObjectTemplate.weaponHud.disableOnSprint 1
rem ---EndComp ---
================================================================
rem ---BeginComp:SingleFireComp ---
ObjectTemplate.createComponent SingleFireComp
ObjectTemplate.fire.roundsPerMinute 600
ObjectTemplate.fire.addFireRate 2
ObjectTemplate.fire.addFireRate 0
ObjectTemplate.fire.fireInCameraDof 1
rem ---EndComp ---
rem ---BeginComp:defaultAmmoComp ---
ObjectTemplate.createComponent DefaultAmmoComp
ObjectTemplate.ammo.ammoType 1
ObjectTemplate.ammo.nrOfMags 7
ObjectTemplate.ammo.magSize 31
ObjectTemplate.ammo.reloadTime 3.3
rem ---EndComp ---
rem ---BeginComp:SoldierBasedRecoilComp ---
ObjectTemplate.createComponent SoldierBasedRecoilComp
ObjectTemplate.recoil.hasRecoilForce 1
ObjectTemplate.recoil.recoilForceUp CRD_UNIFORM/1.28/1.3/0
ObjectTemplate.recoil.recoilForceLeftRight CRD_UNIFORM/1.17/-1.12/0
ObjectTemplate.recoil.zoomModifier 0.5
ObjectTemplate.recoil.recoilGraphFrameCount 5
ObjectTemplate.recoil.recoilGraphExponent 5
ObjectTemplate.recoil.recoilGraphTotalMovement 0.25
rem ---EndComp ---
rem ---BeginComp:SoldierDeviationComp ---
ObjectTemplate.createComponent SoldierDeviationComp
ObjectTemplate.deviation.setFireDev 1.17 2.1 0.1
ObjectTemplate.deviation.minDev 0.6
ObjectTemplate.deviation.setTurnDev 0 0 0 0
ObjectTemplate.deviation.setSpeedDev 1.17 0.4 0.4 0.2
ObjectTemplate.deviation.setMiscDev 1.5 2 0.1
ObjectTemplate.deviation.devModStand 1.17
ObjectTemplate.deviation.devModCrouch 1
ObjectTemplate.deviation.devModLie 0.83
ObjectTemplate.deviation.devModZoom 0.2
rem ---EndComp ---
================================================================
rem ---BeginComp:defaultSoundComp ---
ObjectTemplate.createComponent DefaultSoundComp
rem ---EndComp ---
rem ---BeginComp:defaultAnimationComp ---
ObjectTemplate.createComponent DefaultAnimationComp
rem ---EndComp ---
rem ---BeginComp:defaultZoomComp ---
ObjectTemplate.createComponent DefaultZoomComp
ObjectTemplate.zoom.zoomDelay 0.15
ObjectTemplate.zoom.zoomLod 1
ObjectTemplate.zoom.addZoomFactor 0
ObjectTemplate.zoom.addZoomFactor 0.8
现在我们要把这段代码单独做一个文件,con和tweak应该都可以,我是用con的,tweak我最开始的模仿con里最末的include语句时用过,应该不会有什么问题,下面我就都叫con了
下面我们要先新建一个文档,因为武器是AK12所以文档就叫AK12.con吧,以后改的时候方便区分文档代表的是哪个武器的数据
建好之后,我们要把这些同类武器中的重复代码(整行等于号之间部分)都拷到这个文档里,就像我写的这样
rem ---BeginComp:SingleFireComp ---
ObjectTemplate.createComponent SingleFireComp
ObjectTemplate.fire.roundsPerMinute 600
ObjectTemplate.fire.addFireRate 2
ObjectTemplate.fire.addFireRate 0
ObjectTemplate.fire.fireInCameraDof 1
rem ---EndComp ---
rem ---BeginComp:defaultAmmoComp ---
ObjectTemplate.createComponent DefaultAmmoComp
ObjectTemplate.ammo.ammoType 1
ObjectTemplate.ammo.nrOfMags 7
ObjectTemplate.ammo.magSize 31
ObjectTemplate.ammo.reloadTime 3.3
rem ---EndComp ---
rem ---BeginComp:SoldierBasedRecoilComp ---
ObjectTemplate.createComponent SoldierBasedRecoilComp
ObjectTemplate.recoil.hasRecoilForce 1
ObjectTemplate.recoil.recoilForceUp CRD_UNIFORM/1.28/1.3/0
ObjectTemplate.recoil.recoilForceLeftRight CRD_UNIFORM/1.17/-1.12/0
ObjectTemplate.recoil.zoomModifier 0.5
ObjectTemplate.recoil.recoilGraphFrameCount 5
ObjectTemplate.recoil.recoilGraphExponent 5
ObjectTemplate.recoil.recoilGraphTotalMovement 0.25
rem ---EndComp ---
rem ---BeginComp:SoldierDeviationComp ---
ObjectTemplate.createComponent SoldierDeviationComp
ObjectTemplate.deviation.setFireDev 1.17 2.1 0.1
ObjectTemplate.deviation.minDev 0.6
ObjectTemplate.deviation.setTurnDev 0 0 0 0
ObjectTemplate.deviation.setSpeedDev 1.17 0.4 0.4 0.2
ObjectTemplate.deviation.setMiscDev 1.5 2 0.1
ObjectTemplate.deviation.devModStand 1.17
ObjectTemplate.deviation.devModCrouch 1
ObjectTemplate.deviation.devModLie 0.83
ObjectTemplate.deviation.devModZoom 0.2
rem ---EndComp ---
然后保存,现在我们吧文档搞定了,这个就是我们的武器所需要的文档,现在我们要调用这个文档
因为我们已经有了这个放数据的文档,武器里和文档中重复的部分就没有利用价值了,我们把这些没用的代码删掉,换成调用文档的代码即run /objects/Weapons/data/ak12.con的部分(注意:这里是只要没有rem掉的重复的部分都必须删掉,一个都不留,两个文档里的非rem的代码,绝对不能有重复的)
rem ---BeginComp:WeaponHud ---
ObjectTemplate.createComponent WeaponHud
ObjectTemplate.weaponHud.weaponIcon Ingame\Weapons\Icons\Hud\bf4_ak12
ObjectTemplate.weaponHud.altWeaponIcon Ingame\Weapons\Icons\Hud\bf4_ak12
ObjectTemplate.weaponHud.selectIcon Ingame\Weapons\Icons\Hud\Selection\bf4_ak12
ObjectTemplate.weaponHud.hudName "AK-12"
ObjectTemplate.weaponHud.guiIndex 4
ObjectTemplate.weaponHud.altGuiIndex 52
ObjectTemplate.weaponHud.deviationFactor 5
ObjectTemplate.weaponHud.maxVisualDeviation 50
ObjectTemplate.weaponHud.minVisualDeviation 15
ObjectTemplate.weaponHud.disableOnSprint 1
rem ---EndComp ---
run /objects/Weapons/data/ak12.con
rem ---BeginComp:defaultSoundComp ---
ObjectTemplate.createComponent DefaultSoundComp
rem ---EndComp ---
rem ---BeginComp:defaultAnimationComp ---
ObjectTemplate.createComponent DefaultAnimationComp
rem ---EndComp ---
rem ---BeginComp:defaultZoomComp ---
ObjectTemplate.createComponent DefaultZoomComp
ObjectTemplate.zoom.zoomDelay 0.15
ObjectTemplate.zoom.zoomLod 1
ObjectTemplate.zoom.addZoomFactor 0
ObjectTemplate.zoom.addZoomFactor 0.8
rem ---EndComp ---
rem ---BeginComp:defaultCollisionComp ---
ObjectTemplate.createComponent DefaultCollisionComp
rem ---EndComp ---
ObjectTemplate.geometry bf4_ak12
ObjectTemplate.hasMobilePhysics 0
ObjectTemplate.aiTemplate AR
run /objects/Weapons/data/ak12.con的意思是读取模组中路径objects/Weapons/data下的ak12.con文档,即读取路径objects/Weapons下的data文件夹里的ak12.con,因为我自己模组里的武器基本就是占戈土也4的枪包所以我就在Weapons下建了个data文件夹,当然如果你不想统一放在一个篮子里,也无所谓只要相关路径和这句代码里写的路径对的上就好然后把其它要统一数据的武器也改掉,并进游戏试试效果
因为现在我们已经把这些需要统一的武器数据,全部统一放到一个文件并调用这个文件了,所以我们修改武器中统一调用的这部分代码时,就不需要一个一个的改武器con文档了,只要改这个刚刚建好的文档就好,效果等同与同时修改原先所有调用这个文档的武器的con文档
----------------------------------------------------地图部分---------------------------------------------------
地图部分比前面武器部分,其实要简单很多,如果你搞明白前面武器部分的话,估计不会出什么问题
我们现在要改的是地图上的阵营部分
我们先来看看原来的地图I档里阵营的代码
上面这些代码我们可以进行归类,红色是阵营1的蓝色是阵营2的灰色是中立据点调用的旗帜代码,在这里估摸着大家都懂,但为了那些浑水摸鱼的修改菜鸟,所以还是这么放出来吧
知道那些代码是干什么之后我们可以模仿改武器那种操作那来改阵营了,这里建议那些模组里加了四五个阵营及以上阵营的人和我之前改武器部分一样建一个统一的文件夹,这样看着明白,不然levels目录下一堆文档,看着不舒服,当然我就弄总两个阵营,所以就直接放在levels文件夹下了
现在我们搞阵营的文档,先把阵营1和阵营2的代码分开保存到对应文档中,我这里的阵营1是ERUSEA,阵营2是OSEA,所以我们就和之前给武器数据文档起名时一样,叫ERUSEA_1.con和OSEA_2.con吧,_1和_2是为了区分用在阵营1或阵营2,当然不这么搞也不要紧,我这么搞纯粹是因为这样不容易出错,毕竟不可能头脑发昏打个_3嘛

现在开始装填内容
ERUSEA_1.con↓
gameLogic.setTeamName 1 "ERUSEA"
gameLogic.setTeamLanguage 1 "MEC"
gameLogic.setTeamFlag 1 "flag_erusea"
gameLogic.setKit 1 0 "BF4_RU_Support2" "BF4_RU_support_soldier"
gameLogic.setKit 1 1 "BF4_RU_Engineer2" "BF4_RU_enginner_soldier"
gameLogic.setKit 1 2 "BF4_RU_Assault2" "BF4_RU_assault_soldier"
gameLogic.setKit 1 3 "BF4_RU_Engineer" "BF4_RU_enginner_soldier"
gameLogic.setKit 1 4 "BF4_RU_Support" "BF4_RU_support_soldier"
gameLogic.setKit 1 5 "BF4_RU_Assault" "BF4_RU_assault_soldier"
gameLogic.setKit 1 6 "BF4_RU_Recon" "BF4_RU_recon_soldier"
OSEA_2.con↓
gameLogic.setTeamName 2 "OSEA"
gameLogic.setTeamLanguage 2 "English"
gameLogic.setTeamFlag 2 "flag_osea"
gameLogic.setKit 2 0 "BF4_US_Support2" "BF4_US_support_soldier"
gameLogic.setKit 2 1 "BF4_US_Engineer2" "BF4_US_enginner_soldier"
gameLogic.setKit 2 2 "BF4_US_Assault2" "BF4_US_assault_soldier"
gameLogic.setKit 2 3 "BF4_US_Engineer" "BF4_US_enginner_soldier"
gameLogic.setKit 2 4 "BF4_US_Support" "BF4_US_support_soldier"
gameLogic.setKit 2 5 "BF4_US_Assault" "BF4_US_assault_soldier"
gameLogic.setKit 2 6 "BF4_US_Recon" "BF4_US_recon_soldier"
然后保存,还记得我命名里那个区分阵营用的_1和_2吗
没错把这两个文件都复制一份把名字改为ERUSEA_2.con和OSEA_1.con,并对内容进行修改
ERUSEA_2.con↓
gameLogic.setTeamName 2 "ERUSEA"
gameLogic.setTeamLanguage 2 "MEC"
gameLogic.setTeamFlag 2 "flag_erusea"
gameLogic.setKit 2 0 "BF4_RU_Support2" "BF4_RU_support_soldier"
gameLogic.setKit 2 1 "BF4_RU_Engineer2" "BF4_RU_enginner_soldier"
gameLogic.setKit 2 2 "BF4_RU_Assault2" "BF4_RU_assault_soldier"
gameLogic.setKit 2 3 "BF4_RU_Engineer" "BF4_RU_enginner_soldier"
gameLogic.setKit 2 4 "BF4_RU_Support" "BF4_RU_support_soldier"
gameLogic.setKit 2 5 "BF4_RU_Assault" "BF4_RU_assault_soldier"
gameLogic.setKit 2 6 "BF4_RU_Recon" "BF4_RU_recon_soldier"
OSEA_1.con↓
gameLogic.setTeamName 1 "OSEA"
gameLogic.setTeamLanguage 1 "English"
gameLogic.setTeamFlag 1 "flag_osea"
gameLogic.setKit 1 0 "BF4_US_Support2" "BF4_US_support_soldier"
gameLogic.setKit 1 1 "BF4_US_Engineer2" "BF4_US_enginner_soldier"
gameLogic.setKit 1 2 "BF4_US_Assault2" "BF4_US_assault_soldier"
gameLogic.setKit 1 3 "BF4_US_Engineer" "BF4_US_enginner_soldier"
gameLogic.setKit 1 4 "BF4_US_Support" "BF4_US_support_soldier"
gameLogic.setKit 1 5 "BF4_US_Assault" "BF4_US_assault_soldier"
gameLogic.setKit 1 6 "BF4_US_Recon" "BF4_US_recon_soldier"
保存完了就可以进行调用了
打开要改的那些地图的i档,然后把重复代码删掉,并调用这些要用的文档(注意:这里和上面武器部分一样,绝对不能有重复的,当然不要把中立的旗帜那条代码也给删了)
下面是我地图里这部分的代码(阵营1是OSEA阵营2是ERUSEA),作为例子
gameLogic.setTeamFlag 0 "flag_neutral_ac7"
run /Levels/ERUSEA_2.con
run /Levels/OSEA_1.con

改完之后保存去实验一下吧,如果你想吧阵营对调一下,只要和改武器一样把调用文件的代码改对就好了,例如
gameLogic.setTeamFlag 0 "flag_neutral_ac7"
run /Levels/ERUSEA_1.con
run /Levels/OSEA_2.con
因为我的ERUSEA_1.con里的内容是ERUSEA在阵营1里时的内容OSEA_2.con里的内容是OSEA在阵营2里时的内容,所以现在地图的阵营1是ERUSEA,阵营2是OSEA,而不是改之前的阵营1是OSEA,阵营2是ERUSEA


IP属地:浙江1楼2019-09-13 09:58回复
    猪 头 屎 度,С у к а б л я д ь,发个图片一堆限制


    IP属地:浙江2楼2019-09-13 10:05
    收起回复
      @蓝色侧卫 麻烦加个精


      IP属地:浙江3楼2019-09-13 10:23
      回复
        之前试着引用con文件,这种格式的路径完全用不了,难道是因为我objects前面没加/?


        IP属地:广东来自Android客户端4楼2019-09-13 10:29
        收起回复
          武器T档里的调用代码截图


          IP属地:浙江5楼2019-09-13 10:56
          回复
            为啥我有修改经验也看不明白


            IP属地:广东6楼2019-09-13 11:44
            回复
              这个办法好


              IP属地:四川7楼2019-09-14 16:13
              回复
                这年头,贴吧人这么少了吗


                IP属地:浙江8楼2019-09-18 21:46
                回复
                  可以


                  IP属地:湖北9楼2019-09-18 22:27
                  回复
                    好方法! 之前在FIX模组里调用阵营的时候见过这个方法 现在终于知道该怎么用了


                    IP属地:福建来自Android客户端10楼2019-09-29 18:45
                    回复
                      支持


                      IP属地:上海来自Android客户端11楼2019-10-02 08:54
                      回复
                        include ../../common/deviation.con "marksman" "undeployed" "bullpup"
                        感觉还是PR这种简单明了


                        IP属地:北京12楼2019-10-02 21:21
                        收起回复