破门而入吧 关注:7,870贴子:32,993

如何制作mod?

只看楼主收藏回复

求个教程,想自制武器和地图,但是搞不懂....多谢


IP属地:浙江来自Android客户端1楼2021-03-14 15:43回复
    地图容易上手,用地图编辑界面就行了,但要画得好就需要更多的技巧和经验,这个我也不擅长。


    IP属地:广东2楼2021-03-14 16:10
    收起回复
      搞武器MOD最好是懂3D MAX,或其他的3D软件但最后都需要3D MAX转换成游戏中需要的格式文件。


      IP属地:广东3楼2021-03-14 16:14
      收起回复
        解决了模型后,另一个失败MOD需要用到的软件就是绘图软件,因为UI图、材质图需要制作成DDS格式或TGA格式的图片,我是用PHOTO SHOP制作的。
        能搞定图片后,最后需要用的工具就是编制XML格式文件了,可以用写字板或其他文档编辑器去修改,我有时用写字板,有时用notepad++。然后就是能读懂它的语句来修改了。


        IP属地:广东4楼2021-03-14 16:16
        收起回复
          我暂时就打那么多字吧,以上只是准备工作,接下来你需要了解哪一方面的,我再细讲。另外吧里也有其他人也懂,他们也可以补充。


          IP属地:广东5楼2021-03-14 16:17
          回复
            制作武器MOD需要以下几个文件
            equipment目录里的
            firearm_ammo.xml负责弹药
            firearm_attacktypes.xml负责射击方式
            firearm_scopes.xml是瞄准镜
            firearms_pistols.xml是手枪
            firearms_rifles.xml是长枪
            但武器的名称和说明文字在另一个地方,是localization目录里的game.txt
            模型放在models目录,XML里引用模型时要写对目录位置
            枪声文件在sounds,后面讲到枪声时再慢慢解释


            IP属地:广东6楼2021-03-14 17:08
            回复
              其实写字板也能改XML文件,但新手的话我是建议用notepad++之类的软件,因为不同颜色表示,但方便你熟悉这些代码,哪些是语句,哪些是数值,哪些少个符号少个字也容易提示出来。等熟悉后用写字板也没问题。另外有时改坏了,进入游戏时报错会报哪个文件的第几行,用Notepad++找行数就方便了。


              IP属地:广东7楼2021-03-14 17:17
              回复
                先讲firearms_rifles.xml
                <Firearm name="MP5A" inventoryBinding="PrimaryWeapon" category="rifle" unlockCost="4"
                第一个武器名称,不是游戏中显示的武器,是参数文件中唯一指定的名称,是不能重名的,重名会有问题。
                然后inventoryBinding="PrimaryWeapon" category="rifle" 是指定这件武器放在主武器栏内,如果是放在手枪栏内就会是inventoryBinding="SecondaryWeapon" category="pistol"了。
                unlockCost="4"是解锁的星星数量
                接下来的
                tooltip="@firearm_mp5a_name"
                description="@firearm_mp5a_desc"
                这两行分别是游戏界面中显示的武器名称和说明。必须有个@符号,后面的字段就是对应localization目录里的game.txt,你打开game.txt去查找@firearm_mp5a_name,就明白怎么回事了。
                然后
                img="data/models/weapons/mp5a3_ui.dds"
                就是武器UI界面中的贴图,原版是DDS格式文件,我喜欢制作成TGA格式文件,所以你会看到我制作的MP5/10的这一行是这样写的
                img="data/models/weapons/mp510_ui.tga"
                然后
                animationSet="rifle"
                指的是持枪、换弹匣等动作是长枪还是短枪,把参数改成pistol自然就是手枪动作了。


                IP属地:广东8楼2021-03-14 17:25
                回复
                  <ClassBinding name="Assault"/>
                  是指这件武器由突击手使用
                  <ClassBinding name="Support"/>
                  是机枪手使用
                  <ClassBinding name="Marksman"/>
                  是精射员使用
                  <ClassBinding name="Medic"/>
                  是医疗兵
                  <ClassBinding name="Grenadier"/>
                  是榴弹兵
                  所以长枪的这一组语句往往只有一两条,手枪往往是全都有。


                  IP属地:广东9楼2021-03-14 17:27
                  回复
                    <MobilityModifiers moveSpeedModifierPercent="-2" turnSpeedModifierPercent="0"/>
                    是这件武器对机动力的影响,前一个数值是对移动速度的影响,后一个数值是对转方向的速度影响
                    <RenderObject3D model="data/models/weapons/mp5a3.khm" attachSlot="prop_front_rifle" skipGOSSAO="true" diffuseTex="data/models/weapons/mp5a3.dds"/>
                    第一个RenderObject3D的数值就是3D模型的指定,必须是khm格式的,这个用官方的3D MAX插件可以导出。
                    而材质贴图文件指定是最后一个diffuseTex的数值。
                    所以我用M4模型扮演的RO727,在RenderObject3D model里是写m4.khm,而在diffuseTex里是写colt727.dds,这个colt727.dds就是我用PHOTOSHOP把M4的dds文件涂上迷彩后另存生成的文件。
                    所以我这把RO727是改颜色改出来的假货

                    回到刚才那行语,还有两个命令
                    attachSlot="prop_front_rifle"
                    指的是换枪时,这枪放在什么位置。
                    prop_front_rifle是挂在胸前
                    prop_back_rifle是背在身手
                    prop_sidearm就是放在腰侧枪套里了,所以手枪才写这句
                    skipGOSSAO="true"是啥我也不知道,百度SSAO是什么动态模糊但我不确认这游戏里是不是这个意思,试过故意把ture改成false,但在游戏中看不出有区别。


                    IP属地:广东10楼2021-03-14 17:40
                    回复
                      下一段<ModifiableParams就是基本性能里
                      numPellets="1"
                      是射出的弹头数,我试做的霰弹枪就是把1改成9,这样就射出9个弹头
                      roundsPerMagazine="30"
                      是弹匣容量
                      closedBolt="0"
                      0是表示开膛待击,1是表示闭膛待击。游戏中的效果就是会不会多装1发。比如弹匣容量30,开膛待击,在游戏中就是30发。而改成闭膛待击时,就是31发。
                      cyclicReload="0"
                      这是换弹匣时,是一发一发装还是一次换完整个弹匣。0就是一发一发地装,比如我试搞的管状弹仓泵动霰弹就是把这个数值写成1,因此装弹时就一发一发地上。
                      reloadTime="2700"
                      reloadEmptyTime="2700"
                      这两个是换弹匣的时间长度,单位是毫秒。所以2700就是2.7秒。前一句是膛内有弹时换弹匣的动作,后一句是膛内无弹时的动作,对于闭膛待击的枪,当弹匣完全打空后,你换上新弹匣时,需要有一个上膛的动作。所以后一句通常会长一些。
                      以下的时间单位也全是毫秒。
                      changeInTime="0"
                      changeOutTime="0"
                      是长短枪更换的时间长度。就算你设定为0也不会瞬间完成,因为换枪动画的基础时间还是会有的,通常是背在身后的枪会加一个时间。
                      readyTime="350"
                      guardTime="160"
                      这两句你可以理解为举枪准备射击所需的时间。前一句是移动中发现敌人,后一句是停止时发现敌人。
                      accuracyStart="200"
                      accuracyEnd="150"
                      accuracyStartDist="0"
                      accuracyEndDist="100"
                      这4行是精度参数,start是第一发精度,end是最后一发精度。这个不我也只有模糊的认识,不算特别了解。不细说怕说错。总之数值越大精度越高,首发和最后一发差距越大时,连发射击中的散布范围就越大。


                      IP属地:广东11楼2021-03-14 17:51
                      回复
                        下一个<Params是弹药和作战距离
                        caliberInfoText="@firearm_caliber_9x19_name"
                        这是在武器选择界面中说明它是什么口径的,注意凡是有@符号的,都去是localization目录里的game.txt找对应字段
                        operationInfoText="@firearm_operation_mp5navy_name"
                        是在武器选择界面中说明它的射击方式,这个也是有@的
                        ejectingShellEntity="BulletCasingSmall"
                        是射击时抛出弹壳的大小
                        ai_rangeMin="1.0"
                        ai_rangeOptimal="10.0"
                        ai_rangeMax="25.0"
                        这是AI控制队员自动交战的最大、最小距离 什么的
                        ai_stopWhenShooting="false"
                        这个是射击时会不会停止移动。这个就看你怎么搞了。比如手枪、冲锋枪、短步枪一般是让队员能够移动中射击,边走边打,所以写成false,而通用机枪、精射步枪一般设置成ture,当遇到敌人时会停止前进来射击。


                        IP属地:广东12楼2021-03-14 17:55
                        回复
                          <AmmoTypes>
                          <Ammo name="919FMJM882_Mp5ASMG"/>
                          <Ammo name="919FMJM1152_Mp5ASMG"/>
                          <Ammo name="919JHPM1153_Mp5ASMG"/>
                          </AmmoTypes>
                          是选用的弹药列表,对应的弹药参数分在firearm_ammo.xml里找
                          <ScopeTypes>
                          <Scope name="IronSights"/>
                          <Scope name="M68CCO"/>
                          <Scope name="Holosight"/>
                          </ScopeTypes>
                          是选用的瞄准镜列表,对应的瞄准镜类型是firearm_scopes.xml里找
                          这两个文件后面再解释
                          先写那么多,歇歇哈
                          另外上面的内容如果我认识有错,或认知比较模糊的,也欢迎其他人指正。大家共同进步。


                          IP属地:广东13楼2021-03-14 17:58
                          收起回复
                            下面这串是射击模式的
                            <AttackTypes>
                            <AttackType name="Rangers_SMGAutoFire" rangeMeters="4"/>
                            <AttackType name="Rangers_SMGBurstFire" rangeMeters="8"/>
                            <AttackType name="Rangers_RapidFireMed" rangeMeters="12"/>
                            <AttackType name="Rangers_CarbineAimedFire" rangeMeters="20"/>
                            <AttackType name="Rangers_CarbineAimedFireXX" rangeMeters="9999"/>
                            </AttackTypes>
                            AttackType name=后面的参数关联到firearm_attacktypes.xml里,同样是后面再解释这个XML。而rangeMeters=是这种攻击模式的使用距离,4就是4米。所以上面那个例子分别表示:
                            4米内使用Rangers_SMGAutoFire
                            4~8米内使用Rangers_SMGBurstFire
                            12~8米内使用Rangers_RapidFireMed
                            如此类推
                            如果是机枪或狙击枪的参数,会是这样
                            <AttackType name="Rangers_GPMGStrafeMed" inCoverOverride="Rangers_LMGStrafeMedMounted" rangeMeters="35"/>
                            就是在使用距离前多了一串inCoverOverride,这表示依托掩体时所用的射击方式,其实就是变相的架枪模式


                            IP属地:广东14楼2021-03-14 21:46
                            收起回复
                              下面是枪口焰相关的参数
                              <MuzzleFlash lightTemplate="ShotLightLarge" tracerTemplate="Tracer_Rifle">
                              <Flare particles="FX_MUZZLE_FLASH_PISTOL_01" />
                              <Flare particles="FX_MUZZLE_FLASH_PISTOL_02" />
                              <Flare particles="FX_MUZZLE_FLASH_PISTOL_03" />
                              <Flare particles="FX_MUZZLE_FLASH_PISTOL_04" />
                              </MuzzleFlash>
                              lightTemplate是枪焰的大小,但基本就固定large和small两种模式,tracerTemplate是弹道的贴图效果,直接复制相应的武器所写的就行了。
                              Flare particles=这个比较麻烦,一般我是懒得去调整,就直接复制原版游戏的普通步枪、普通手枪、消声武器这3种固定的搭配字段来用。因为它要引用effects目录里的muzzle_flashes.xml,以及枪焰和烟雾的dds格式贴图文件,我尝试过,然后嫌太麻烦了太难懂就干脆不搞了。


                              IP属地:广东15楼2021-03-14 21:51
                              回复