游戏狂人
 
- 贡献度
- 129
- 金元
- 12644
- 积分
- 1780
- 精华
- 0
- 注册时间
- 2012-1-24
|
*看论坛一直没有,简单的分享一下如何制作mod,因为也是初学者,不保证全都能说对。
一、制作mod需要的工具
1、ExportTool
用于解包游戏文件,相当于游戏专用的winrar。
作者网址:https://github.com/Norbyte/lslib/releases
目前解包data目录下的Shared.pak、Gustav.pak两个文件基本就能满足需求。
2、文本搜索工具,anytxt searcher,用于定位技能所在的文件。
3、论坛大佬写的博得3查询工具,用于查各技能的名称。
https://bbs.blacksheepgame.com/thread-6442806-1-1.html
4、论坛内的斧子和ct,用于添加技能状态等。
二、mod作用原理
1、游戏在启动时,会调用mod里的指令。
2、如果指令名相同,mod的指令会覆盖原指令。
3、游戏会检查指令是否符合指令逻辑,不符合的话,大概率会卡在游戏读取。
三、如何被mod管理器读取
1、mod内文件树如下图,“mod name”,就是你要做的mod名称。
\Localization\English\mod name.xml,是各种描述文件,比如技能名、状态名等,英文mod的汉化就是在这里完成。
\Mods\mod name\meta.lsx,mod管理工具所需要的文件。
\Public\mod name\Stats\Generated\Data\mod name.txt,是mod本体文件。
2、meta.lsx的注意事项
meta.lsx内容如下,需要注意的地方会加入红色注释。
<?xml version="1.0" encoding="UTF-8"?>
<save>
<version major="4" minor="0" revision="0" build="77"/>
<region id="Config">
<node id="root"><children> <node id="Dependencies"/>
<node id="ModuleInfo">
<attribute id="Author" type="LSWString" value="yourname"/> #作者名,会显示在mod管理器中#
<attribute id="CharacterCreationLevelName" type="FixedString" value=""/>
<attribute id="Description" type="LSWString" value=""/>
<attribute id="Folder" type="LSWString" value="mod name"/> #路径名,需要和名为mod name的文件夹相同,如\Mods\mod name\和\Public\mod name# <attribute id="GMTemplate" type="FixedString" value=""/>
<attribute id="LobbyLevelName" type="FixedString" value=""/>
<attribute id="MD5" type="LSString" value=""/>
<attribute id="MainMenuBackgroundVideo" type="FixedString" value=""/>
<attribute id="MenuLevelName" type="FixedString" value=""/>
<attribute id="Name" type="FixedString" value="mod name"/>
<attribute id="NumPlayers" type="uint8" value="4"/>
<attribute id="PhotoBooth" type="FixedString" value=""/>
<attribute id="StartupLevelName" type="FixedString" value=""/>
<attribute id="Tags" type="LSWString" value=""/>
<attribute id="Type" type="FixedString" value="Add-on"/> #应该是mod的类型,这里是增加额外的内容的意思#
<attribute id="UUID" type="FixedString" value="26a06ca3-d933-4150-b15d-8ca702c2a411"/> #uuid标识,唯一代号,随便编一个或者用bg3-modders-multitool生成一个# <attribute id="Version" type="int32" value="268435456"/>
<children>
<node id="PublishVersion">
<attribute id="Version" type="int32" value="268435456"/>
</node>
<node id="Scripts"/>
<node id="TargetModes">
<children>
<node id="Target">
<attribute id="Object" type="FixedString" value="Story"/>
</node>
</children>
</node>
</children>
</node>
</children>
</node>
</region>
</save> 四、修改实操举例说明
1、想实现的功能为,以“魅惑人类”为原型,新增一个法术“倾国倾城”,效果为可魅惑多人,且目标一致保持被魅惑状态。
2、使用ExportTool解包游戏目录\Baldurs Gate 3\Data下Shared.pak、Gustav.pak两个文件。
设置好目录后,按Extract Package解包。
3、是用数据查询软件找到“魅惑人类”的英文技能名“Target_CharmPerson”。
这里会出现很多类似的技能名,实际上就是同一种技能的变种,我们做的mod也是如此。
在查找技能名时,不带后缀的那个就是我们要找的目标。
4、用anytxt searcher查找该技能名所在的文件,软件需要先建立索引。
找到指令为new entry "Target_CharmPerson"的文件。
在这里为\Public\Shared\Stats\Generated\Data\Spell_Target.txt
5、打开\mod name\Public\mod name\Stats\Generated\Data\mod name.txt文件。
将new entry "Target_CharmPerson"整段命令复制进去。
6、先解释下各行指令的意义。
new entry "Target_CharmPerson" #指令名称#
type "SpellData" #数据类型,这里指的是本条指令是相关于一个技能的数据# data "SpellType" "Target" #技能类型,这里指的是有目标型的法术,意味着它需要一个目标来施放# data "Level" "1" #技能级别,这里指的是1环法术#
data "SpellSchool" "Enchantment" #技能流派,这里指的是惑控流派#
data "TargetRadius" "18" #技能影响的范围,也就是施法者与目标的距离。# data "SpellRoll" "not SavingThrow(Ability.Wisdom, SourceSpellDC(),AdvantageOnCharmPerson())" #用于判定技能成功的骰判条件,这里使用了一个条件,表示如果目标没有通过智力豁免检定(根据施法者的法术 DC 和魅惑时的优势情况),则法术会成功。# data "SpellSuccess" "ApplyStatus(CHARMED,100,10)" #技能成功后,目标被施加 "CHARMED"(被魅惑)状态,持续10回合。# data "TargetConditions" "not Item() and not Self() and Character() and Tagged('HUMANOID') and not Tagged('UNDEAD') and not (not Player(context.Source) and IsCrowdControlled(context.Target)) " #描述了施放技能的目标条件。这里的条件是目标必须是"Character"(角色)、不是"Ally"(盟友)、不是不死人。# data "Icon" "Spell_Enchantment_CharmPerson" #使用的法术图标。# data "DisplayName" "hc3df2c93gdd42g4c64g82faga4c5cd24f049;1" #显示在游戏中的法术名称。# data "Description" "h50cad90fg8a5eg486cg85e3g4b0b969ceedc;7" #法术的描述。# data "ExtraDescription" "h4c9bff86g74d3g443cg8db8gb5e515776d71;4" #额外的法术描述。# data "TooltipAttackSave" "Wisdom" #显示在鼠标悬停时的攻击或豁免描述。# data "TooltipStatusApply" "ApplyStatus(CHARMED,100,10)" #显示在鼠标悬停时的状态应用描述。# data "TooltipUpcastDescription" "04cc3403-f67a-4747-b49e-a1802cc7a6ad" #这个数据定义了在游戏界面中,当玩家通过升级法术时,鼠标悬停在法术上时显示的升级描述。# data "TooltipPermanentWarnings" "967064bf-5cdf-44c7-a17c-86924aa04ae7;676ef361-c11d-4e5a-bcae-3b0332cbebf5" #这个数据定义了在游戏界面中,当玩家查看法术描述时可能显示的永久警告信息。# data "CastSound" "Spell_Cast_Control_CharmPerson_L1to3" #施法的声音效果。# data "TargetSound" "Spell_Impact_Control_CharmPerson_L1to3" #法术影响目标时的声音效果。# data "VocalComponentSound" "Vocal_Component_CharmPerson" #声音组件的声音效果。# data "CastTextEvent" "Cast" #施法时显示的文本事件。# data "CycleConditions" "Character() and not Ally() and not Dead()" #描述了循环施法条件。# data "UseCosts" "ActionPoint:1;SpellSlotsGroup:1:1:1" #使用法术的消耗。# data "SpellAnimation" "554a18f7-952e-494a-b301-7702a85d4bc9,,;,,;af94aac1-d8eb-4ccb-9520-694ade11b61c,,;f5db4001-b136-4c48-9aa4-026c4a7dd3b7,,;22dfbbf4-f417-4c84-b39e-2039315961e6,,;,,;5bfbe9f9-4fc3-4f26-b112-43d404db6a89,,;,,;,," #法术动画效果。# data "VerbalIntent" "Control" #法术的口头意图。# data "SpellFlags" "HasVerbalComponent;HasSomaticComponent;IsSpell;HasHighGroundRangeExtension;IgnorePreviouslyPickedEntities" #法术的标志,如是否有口头组件、手势组件等。# data "RechargeValues" "5-6" #法术的冷却回合范围。# data "HitAnimationType" "None" #法术命中后的动画效果。# data "MemoryCost" "1" #使用法术的记忆消耗。# data "PrepareEffect" "d7ff6074-0dee-46eb-84c2-fed6118b0cc3" #施法准备效果。# data "CastEffect" "238adc5b-64e5-474a-b5fa-c4c5d032a21b" #施法效果。# data "TargetEffect" "5cd08691-b441-43e1-b9d7-14668e4affa5" #目标效果。# data "BeamEffect" "ef76e96c-3b6e-41f1-8d62-7c8813ca7624" #法术的光束效果。# 7、修改,红字为修改部分,绿色为需要删除的部分。
new entry "Target_CharmPerson_qingguoqingcheng"
type "SpellData"
data "SpellType" "Target"
data "Level" "1"
data "SpellSchool" "Enchantment"
data "TargetRadius" "90" #5倍施法距离#
data "SpellRoll" "not SavingThrow(Ability.Wisdom, SourceSpellDC(),AdvantageOnCharmPerson())" #删掉语句,不做豁免判断#
data "SpellSuccess" "ApplyStatus(CHARMED,100,10)" #删掉语句,不做豁免判断# data "SpellProperties" "ApplyStatus(CHARMED,100,-1)" #增加data "SpellProperties"语句,意为法术作用效果, "ApplyStatus(CHARMED,100,-1)" 为给目标添加CHARMED状态,“-1”即为永久# data "AmountOfTargets" "9" #新增条目,意思为可以最多选择9个目标,相当于法术升环# data "TargetConditions" "not Item() and not Self() and Character() and Tagged('HUMANOID') and not Tagged('UNDEAD') and not (not Player(context.Source) and IsCrowdControlled(context.Target)) " #删掉绿的,即可魅惑非人生物,其他类型为enemy()、 party()、ally()等,用and连接,前面加not即为“非”,比如 not self()就是不包括自己#
data "Icon" "Spell_Enchantment_CharmPerson"
data "DisplayName" "qingguoqingcheng;1" #更改技能名称,第8步讲#
data "Description" "qingguoqingcheng_Des;2" #更改技能名称,第8步讲# data "ExtraDescription" "h4c9bff86g74d3g443cg8db8gb5e515776d71;4"
data "TooltipAttackSave" "Wisdom"
data "TooltipStatusApply" "ApplyStatus(CHARMED,100,-1)"
data "TooltipUpcastDescription" "04cc3403-f67a-4747-b49e-a1802cc7a6ad"
data "TooltipPermanentWarnings" "967064bf-5cdf-44c7-a17c-86924aa04ae7;676ef361-c11d-4e5a-bcae-3b0332cbebf5"
data "CastSound" "Spell_Cast_Control_CharmPerson_L1to3"
data "TargetSound" "Spell_Impact_Control_CharmPerson_L1to3"
data "VocalComponentSound" "Vocal_Component_CharmPerson"
data "CastTextEvent" "Cast"
data "CycleConditions" "Character() and not Ally() and not Dead()"
data "UseCosts" "ActionPoint:1;SpellSlotsGroup:1:1:1" #删掉消耗,即可无限使用此技能#
data "SpellAnimation" "554a18f7-952e-494a-b301-7702a85d4bc9,,;,,;af94aac1-d8eb-4ccb-9520-694ade11b61c,,;f5db4001-b136-4c48-9aa4-026c4a7dd3b7,,;22dfbbf4-f417-4c84-b39e-2039315961e6,,;,,;5bfbe9f9-4fc3-4f26-b112-43d404db6a89,,;,,;,,"
data "VerbalIntent" "Control"
data "SpellFlags" "HasVerbalComponent;HasSomaticComponent;IsSpell;HasHighGroundRangeExtension;IgnorePreviouslyPickedEntities"
data "RechargeValues" "5-6" #删掉CD#
data "HitAnimationType" "None"
data "MemoryCost" "1"
data "PrepareEffect" "d7ff6074-0dee-46eb-84c2-fed6118b0cc3" #可以换成更炫酷的法术起手式,用其他技能的同类数据代替这条即可,下同#
data "CastEffect" "238adc5b-64e5-474a-b5fa-c4c5d032a21b"
data "TargetEffect" "5cd08691-b441-43e1-b9d7-14668e4affa5"
data "BeamEffect" "ef76e96c-3b6e-41f1-8d62-7c8813ca7624" 改到此处,就等于新创造了一个名为“Target_CharmPerson_qingguoqingcheng”的技能,保存退出。
8、为“Target_CharmPerson_qingguoqingcheng”赋名,第七步紫色部分。
用记事本打开\Localization\Englishn\mod name.xml(自建也可以,但随便找一个小mod解包更改比较方便),添加下列语句。
意思是定义"qingguoqingcheng"为倾国倾城,"qingguoqingcheng_Des" 为靠你的姿色颠倒众生。
对应第7步的紫色部分。
<?xml version="1.0" encoding="utf-8"?>
<contentList>
<content contentuid=" qingguoqingcheng" version="1"> 倾国倾城</content>
<content contentuid=" qingguoqingcheng_Des" version="1"> 靠你的姿色颠倒众生。</content>
</contentList> 9、保存文件,然后打开ExportTool,将mod name.xml封包为mod name.lcoa。
10、封包mod。
注意version是博德3,compression是no compression(不压缩)。
11、导入试验。
mod添加,成功。
12、进入游戏测试,用斧子添加技能Target_CharmPerson_qingguoqingcheng。
游戏测试,成功。
13、修改的基本原理应该都讲得差不多了。
其他的还需要各位自己摸索。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
6
查看全部评分
-
|