• 注册
  • 永恒梦境 永恒梦境 关注:121 内容:35

    RITC扩展包制作教程

  • 查看作者
  • 打赏作者
  • 当前位置: ODDBA社区 > 永恒梦境 > 正文
  • 66
  • 永恒梦境
  • 版主
    炉火纯青
    VIP3
    该内容使用了刷新卡,原发布时间:2年前

    RITC扩展包制作教程

    PID: 75778903

    唯一指定官方群“往世乐土”:792787604

    ————————————————保留节目————————————————

    发完发布帖发现它从首页冒出来了……出问题。

    赶紧施工教程……

    等会儿吃个饭去,俩小时不知道能不能写完

    笑死,俩小时?两天! [s-25] 

    ————————————————注意事项————————————————

    1. 本教程适用于对塔科夫服务端以及json结构有基础了解,但没有能力编写服务端Mod的人群,并非面向完全小白。

    2. 在制作扩展包时,推荐使用VSCode,当然你如果想用NotePad++我也没意见,总之别当记事本战神。

    3. 关于超级模组以及MG-Mod的独立物品如何制作我不再赘述,如果你有相关的问题,可能不适合阅读这篇教程。

    4. 如果遇到不懂的问题,建议优先参考Mod内置的示例包是否有相关内容,没有的话再来问我。

    5. 读到这里如果你还想继续往下看,默认你拥有基础的电脑知识、VSCode的基础操作知识以及对json结构的基础了解。

    6. 这条先放在这,后面需要再补充。

    ————————————————教程内容————————————————

    1. 创建一个新的扩展包

    1.1 在RITC的发布帖内找到下载链接,其内部有一个名为空白包的文件夹。

    RITC扩展包制作教程

    1.2 将「空白包」更改为你的扩展包所需要的名字,此处用「教程包」。

    RITC扩展包制作教程

    1.3 之后将更改完名字的扩展包复制到mod下的package文件夹内。

    RITC扩展包制作教程

    1.4 打开VSCode,将扩展包拖入VSCode以创建工作区。

    RITC扩展包制作教程

    1.5 打开package.json,修改其中的内容。

    其中,pathname必须与扩展包文件夹的名字一致。

    RITC扩展包制作教程

    1.6 修改完成后按下保存或Ctrl+S进行保存,随后启动服务端,可以看到扩展包正常加载,不过现在没有任何实际内容。

    RITC扩展包制作教程

    2. 创建一个新的商人

    2.1 找到示例包的traders文件夹,打开其下的trader文件夹。

    RITC扩展包制作教程

    可以看到有两个文件,这个就是商人的基础文件了。

    2.2 将ExampleTrader.json复制到你的扩展包的相应目录下。

    RITC扩展包制作教程

    2.3 将其更改为你需要的商人的ID,这里使用GuideTrader。

    RITC扩展包制作教程

    2.4 在VSCode里打开对应的json文件。

    RITC扩展包制作教程

    将_id选项修改为你的商人ID。

    2.5 修改商人描述等内容,这里我将暂时不需要讲解的内容折叠了。

    RITC扩展包制作教程

    瞎写的嗷,魂学家别来找我……

    2.6 寻找一张合适的图片,裁切成正方形,后缀调整为jpg,将其重命名成你的商人的ID,然后放在res/avatar目录下。

    推荐使用512×512像素。

    RITC扩展包制作教程

    2.7 保存,重新启动服务端,会看到一个错误提示,这是因为现在创建了一个商人,但是没有添加任何交易报价单导致的,先不急,启动游戏看看。

    RITC扩展包制作教程

    2.7 诶,有了。

    RITC扩展包制作教程

    可以看到商人现在没有任何内容,让我们继续下一步。

    RITC扩展包制作教程

    2.8 为商人启用各种功能(保险与维修)

    控制保险相关的部分在商人文件内的insurance条目里

    RITC扩展包制作教程

    availability表示是否启用,默认呢为false。

    excluded_category表示排除某项装备,这个我没试过,填的应该是装备栏名称……

    max_return_hour和min_return_hour很好理解,就是保险最长和最短的归还时间。

    max_storage_time表示最大存储时间,即保险经过多长时间后过期,单位为小时。

    min_payment表示最少要支付多少?可能,我没试过。

    insuranceChance表示回保概率,0-100,100则表示绝对不会有物品丢失,低于100有概率丢失物品。

    insuranceMulti表示投保价格系数,0-1。

    然后是本地化部分,insuranceLog负责本地化文本存储。

    这里使用示例包讲解。

    RITC扩展包制作教程

    insuranceStart表示保险启用的文本,insuranceFound表示保险生效的文本,insuranceFailed和insuranceFailedLabs分别表示保险未成功失效(丢失)以及在实验室投保(实验室无论如何都不会回保)的对应文本,insuranceExpired则表示保险过期,最后的insuranceComplete表示保险完成?这个文本似乎不会被调用。

    此处的本地化部分只需要填写本地化key,文本需要在本地化文本文件中编写。

    找到res/locale/text.json,在其中填入对应内容。

    比如图中示例商人2保险激活文本1,其在text.json中如下所示。

    RITC扩展包制作教程

    2.9 自定义商人的货币

    比如你把东西卖给Peacekeeper,他会给你美元,你可以通过这个功能让你的商人在交易时使用自定义的货币。

    又双叒叕是示例包。

    RITC扩展包制作教程

    如图所示,在商人处添加customcurrency和customcurrencyMulti,分别为自定义货币的物品ID与汇率。

    举例,假设一个东西卖给你的商人能卖5000卢布,汇率填写100,最后你会得到5000/100=50自定义货币,小数点会自动向下取整。

    此处强烈建议将倍率与你的自定义货币的价值设置为相同的数字。

    如果想使用原版的美元或欧元则不需要这两个参数,只有自定义货币的商人需要这两个参数,原版的美元或欧元使用currency参数即可,参数值有三种,RUB、USD和EUR,分别代表卢布美元与欧元,具体参考原版商人。

    3. 创建一个新的交易报价单

    3.1 打开traders/AssortData.json,这里我把示例包也拉进了VSCode打开,不然来回找麻烦……

    RITC扩展包制作教程

    打开示例包的AssortData.json,这里以第一个作为参考。

    RITC扩展包制作教程

    依然是复制到你的扩展包的对应文件里,记得不要逗号嗷,这种基础知识我只讲一遍。

    RITC扩展包制作教程

    接下来是重点,我会讲解AssortData的格式。

    ID:报价单选项的ID,拥有唯一性,不可重复。

    Trader:报价单所属的商人的ID,原版商人的话自己查表,空白包里有查询表。(没错,支持给原版商人添加报价单

    Item:报价单的内容,即商人需要出售的物品的数据,这里由于只有一个物品,所以只有一个。

    以下以Item[0]指代Item的第一个内容。

    Item[0]的_id:与报价单的ID相同。

    Item[0]的_tpl:商人出售的物品的ID。

    parentId与slotId都为hideout,对于非预设物品报价单(包含多个物品的报价单,比如枪械、护甲、弹药包等物品)来说皆如此。

    upd里的四个选项:

    BuyRestrictionMax:单次补货的最大购买数量,即限购数量。

    BuyRestrictionCurrent:不知道有啥用……默认是0。

    StackObjectsCount:商人的存货数量,由于目前线上版本商人所有物品都不再会被买空,建议填写999999或99999999。

    UnlimitedCount:控制物品是否显示为「大量」,设置为true即为大量,没有此关键字则显示具体数量(但其实你在跳蚤市场上还是能看到具体数量……)。

    DogTag:参与兑换的狗牌的需求,详细的例子可以在示例包中找到,可以留空。

    Barter:参与兑换的物品的需求,格式为itemid:count,前面填写物品id,后面填写物品数量。

    TrustLevel:报价单所需的商人好感(信任度),分别为1234级(如果你的商人只有1级和皇冠则是1和2)。

    isWeapon:是否将报价单按照武器处理,只有在报价单是武器时才能设置为true,否则产生问题概不负责。

    Locked:报价单是否被锁定(需要任务解锁),设置为true即为锁定。

    Quest:解锁报价单所需要完成的任务的ID。

    3.2 讲完了,接下来让我们修改一下报价单的内容,为教程包的商人添加一个报价单。

    修改完成后的内容如下。

    RITC扩展包制作教程

    用人能看懂的话呢就是为ID为GuideTrader的商人增加一个无需任务解锁的、ID为「教程包商人报价单1」的报价单,报价单的内容为使用400美元换取一根耐力针(SJ6 TGLabs),一次最多购买四个,信任度需求为1级。

    3.3 让我们保存,重启服务端,进入游戏查看效果。

    可以看到服务端不再反复提示先前的报错了。

    RITC扩展包制作教程

    进游戏看下,哎,非常完美。

    RITC扩展包制作教程

    3.3 附录:关于如何构建预设物品(武器、护甲、弹药包)报价单,这里只给出武器的例子,具体结构示例包里也有

    目前呢有三种方法,不过不管哪种方法,我的推荐都是在游戏内先改好你需要的枪而不是真的嗯写。

    这里放个简单的例子(因为复杂了写起来麻烦……)

    方法1:手写

    我们简单改一把CT同款usp

    RITC扩展包制作教程

    然后打开AssortData,还是老样子,复制个模板,改下基础数据。

    RITC扩展包制作教程

    首先查找usp的id,把Item[0]的_tpl修改为usp的id

    RITC扩展包制作教程

    重启,进入游戏,发现只有个红色的本体。

    重启完发现我json文件写错了……少个逗号。

    大家别学我。

    再重启。

    重启,进入游戏,发现只有个红色的本体。

    RITC扩展包制作教程

    别急,找到物品的原始文件(表里也有),搜索USP的ID。

    拉到Slots部分,这个呢就是USP的本体上可以装备的所有配件槽。

    RITC扩展包制作教程

    让我们点开USP的本体,可以看到不算枪膛呢一共有七个槽位。

    RITC扩展包制作教程

    先把枪管想办法装上去,搜索我们改装好的USP的枪管的ID。

    也就是它。

    RITC扩展包制作教程

    复制,返回到AssortData

    这样在Items里创建一个新对象,_id随便填,手写的话最好像这样写可读性高的。

    _tpl填写枪管的ID。

    RITC扩展包制作教程

    然后就是最重要的部分,parentId和slotId,parentId是这个物品安装在的物品的_id(不是_tpl,是_id!!),slotId为这个物品安装在的配件槽的名字。

    比如枪管是安装在USP本体上的,parentId就填写USP本体的_id,slotId呢根据我们在物品文件里的查询可以看到是mod_barrel,于是就像下面这样。

    RITC扩展包制作教程

    老样子,保存,重启。

    ……写武器记得把isWeapon设置成true。

    言传身授了属于是,草。

    ……一定记住是_id和_tpl(言传身授x2)。

    回到正题,重进游戏发现有枪管了。

    其他部件以此类推。

    RITC扩展包制作教程

    诶,那么有同学可能就会问了,啊手写好麻烦啊有没有简单点的办法。

    当然有了,请看VCR啊呸,请继续往下看。

    方法2:提取预设

    回到第一步啊,改好的枪。

    RITC扩展包制作教程

    点击右上角的另存为,将它存储为一个新的预设。

    RITC扩展包制作教程

    之后保存,退出游戏,找到当前存档所对应的存档文件(位于user/profiles目录下)。

    RITC扩展包制作教程

    不知道是哪个的话,看启动器,启动器里你的名字下面那串东西就是存档ID。

    RITC扩展包制作教程RITC扩展包制作教程

    拖入VSCode打开,搜索刚才保存的预设名字。

    诶,有了。

    RITC扩展包制作教程

    然后我们把Item数组整个复制,替换掉我们AssortData里Item的内容。

    RITC扩展包制作教程

    记得把Item[0]的_id换成报价单的ID。

    RITC扩展包制作教程

    RITC扩展包制作教程

    然后把upd的内容替换掉,当然,还有缺失的parentId和slotId。

    RITC扩展包制作教程

    保存,退出,重启,一气呵成。

    诶,有了。

    RITC扩展包制作教程

    护甲呢也是一样的流程,不过护甲记得把isWeapon设置成flase,而且护甲不能保存预设,只能手写或者从原版的globals里导出。

    好消息呢是护甲是不存在套娃的,不会说有部件(插板)上装部件的情况,因此手写起来比较简单。

    方法3:安装塔科夫控制台Mod,使用控制台导出存档的预设

    在服务端输入cwp + 玩家名,将导出该玩家保存的所有预设

    RITC扩展包制作教程

    找到对应的文件位置

    RITC扩展包制作教程

    就这样。

    4. 创建一个新的任务

    扩展包的任务文件被拆分成了三部分,任务初始化信息、任务条件和任务奖励(不考虑本地化)。

    文件全部在traders/questdata里。

    创建一个任务的第一步是将任务进行初始化,任务初始化信息由traders/questdata/initQuest.json存储。

    4.1 老规矩啊,复制,修改。

    RITC扩展包制作教程

    initQuest的格式讲解:

    ID:任务的ID,很好理解。

    Type:任务的类型,这个影响的是任务的那个小的图案,PickUp是一个向上的手指、Elimination是一个骷髅头,etc.。

    imagepath:任务图片的路径,除了最后的文件名,其余的不需要改动

    TraderID:任务发布者的商人的ID,也很好理解。

    Location:地图,SearchMap里有查询表,填any的话就是任意地图。

    Restartable:决定任务在失败后是否可以重新接取,设置为true则可以重新接取。

    回到正题,修改好任务的初始化内容。

    RITC扩展包制作教程

    任务图片放置在res/image目录下。

    随便挑一张,教程头图这张吧,记得把初始化里的图片名字改了。

    RITC扩展包制作教程

    保存,重启!

    有了,本地化会在后面讲,先别急着接。

    RITC扩展包制作教程

    4.2 增添任务条件

    任务条件由QuestConditions存储,key需要和任务ID对应。

    创建教程任务1的空模板。

    RITC扩展包制作教程

    熟悉的关键字讲解环节,Start的内容表示接取任务所需的条件,Finish表示完成任务所需的条件,Fail则表示任务失败的条件。

    所有条件都填入Data。

    Override关键字设置为true时,加载器将先清除任务ID所对应任务的对应条件,然后再加载条件内容,这意味着你可以通过创建原版ID的任务条件数据并将Override设置为true,以修改原版任务。

    由于一个讲太麻烦,这里就不一一示范了,我会把每一种条件都在下面列出来,使用示例包的任务进行说明。

    任务开始条件:

    第一种是要求某个任务的状态,如下

    RITC扩展包制作教程

    id和questid想必能读到这里的都能理解,后面就不过多描述了,type的Quest表示这是一个任务条件。

    status里的数字代表任务状态,其中1为可接取,2为进行中,3为待交付,4为已完成,5为失败。

    第二种是要求玩家达到指定等级

    RITC扩展包制作教程

    第三种是要求指定商人的好感达到指定等级

    RITC扩展包制作教程

    trader表示商人id,count表示需达到的等级

    任务完成条件:

    这个可以讲的就太多了,我们一个个来,先来简单的

    寻找与上交物品:

    RITC扩展包制作教程

    结构完全一样,inraid表示是否要求物品拥有「在战局中找到」的状态

    当然,它也可以是任务物品,任务物品的话建议将inraid设置为false,任务物品的部分会在后面讲

    RITC扩展包制作教程

    杀敌:

    RITC扩展包制作教程

    讲起来太麻烦了……推荐自己对照示例任务= =

    熬了一天属实有点顶不住……

    id和type就不讲了,onraid表示是否需要在单局内完成(未测试单局不完成是否会导致失败),count表示需求击杀的数量,bot表示要求击杀的敌人类型,可用参数包括Any(任意敌人)、Savage(Scav类型敌人)、Pmc(任意PMC干员)、Bear和Usec,错了的话以示例为准……

    role用于细分Savage敌人类型,包括狙击手、Boss、游荡者、掠夺者等。

    bodyPart表示要求造成部位击杀,留空则为无要求。

    daytime表示要求的时间区间,24小时制。

    distance表示要求的距离,distancetype表示距离的比较方式,>=是要求在xx距离外,<=则要求在xx距离内。

    weapon表示要求的武器,Mod表示武器需要安装的配件(都是物品ID,留空则表示无要求)。

    location表示条件要求的地图。

    zone表示在指定的地点完成击杀,这个反查原版任务地点即可。

    Equip表示需要穿戴的装备,其为二维数组,每一个数组里的装备只需要任意一个即可(比如原版的任意巴拉克拉瓦)。

    踩点与撤离条件

    RITC扩展包制作教程

    踩点:

    zoneid表示踩点的区域,依然可以从原版任务查找。

    撤离:

    oneraid、count不再解释……location表示在指定的地图撤离,一定要填!!全地图的话需要把所有地图写上。

    status表示撤离状态,参数可以从原版任务查询,有幸存、匆匆逃离、失踪、死亡等。

    chosenextractpoint表示是否需要指定撤离点,false的话下面那个参数不用填。

    extractpoint表示指定的撤离点,只有在chosenextractpoint为true时有效,撤离点查地图文件。

    达到指定等级、安放物品与达到指定技能等级条件:

    RITC扩展包制作教程

    这个也很好明白,安放需求的zoneid是区域,注意,虽然理论上通用,但踩点的zone和安放的zone有些无法通用,推测是判定问题,请自行尝试。

    itemid是需要安放的物品,time是时间(感觉自己在说废话)。

    失败条件由于未经测试,暂时空着,理论上击杀、撤离(死亡也是一种撤离状态)、等级、好感、完成任务都是支持的,有兴趣的可以自行尝试。

    困困困……

    算了,今天的工先施到这里……

    没讲的部分真急需的话自己对照一下示例包吧,我先摸了,剩下的部分明天再施工= =

    嗨嗨嗨,我又来辣!

    堂堂复活!进入下一章节。

    4.3 为任务创建奖励

    突然发现任务奖励忘了写……

    找到traders/questdata/QuestRewards.json

    依然是复制啊,我这里就不复制了,拿示例包进行讲解。

    任务奖励是数组,可以乱序,会在生成的时候自动重新排列。

    经验奖励:

    RITC扩展包制作教程

    Condition的Finish表示任务阶段,意思是完成任务的奖励,相应的,Start表示在任务开始阶段给予的奖励,Failed则表示任务失败给予的奖励。

    Quest表示对应的任务ID。

    Count表示经验数量。

    Name表示奖励的名称,同时也用作奖励的ID,最好不要重复。

    Desc是任务奖励的介绍,仅为了提高可读性,可以重复。

    商人好感(信任度)奖励:

    RITC扩展包制作教程

    重复的参数我就不再讲了。

    Count表示的是增加的好感对应的数量,一次0.0几是很正常的。

    TraderID表示增加好感的商人的ID。

    解锁商人(类似耶格)的奖励:

    RITC扩展包制作教程

    Trader表示任务解锁的商人ID,初始锁定的商人需要在base文件里设置unlockByDefault,详见示例的ExampleTrader2。

    物品奖励:

    RITC扩展包制作教程

    物品奖励比较特殊,首先是Items里可以存在多个物品,依然支持预设格式但是要去掉预设主物品的parentId和slotId,堆叠数量什么的也需要手动填写(单个堆叠可以不写)。

    就像这样。

    RITC扩展包制作教程

    物品奖励的Count表示在外部显示的堆叠数量,与实际数量无关。

    技能等级奖励:

    RITC扩展包制作教程

    Skill表示技能。

    Count表示等级。

    报价单和藏身处配方会在这两个地方单独处理。

    4.4 为你的任务创建本地化文本

    刚想起来我TM忘了讲这个……

    任务的本地化文件位于res/locale/quest.json。

    RITC扩展包制作教程

    结构呢非常简单,name就是名字,note不知道干啥的,好像和笔记功能有关系,description是任务介绍。

    failMessageText表示任务失败的文本。

    startMessageText表示任务开始时发送的文本,一般与介绍相同。

    successMessageText表示任务成功的文本。

    conditions里填写任务条件的ID,用于为任务条件进行本地化。

    你也可以把它们写到res/loclae/text.json里,和其他的本地化文本写在一起。

    5. 创建独立物品

    5.1 现成的独立物品安装

    RITC支持三种格式的独立物品,包括超级模组、MG-Mod与RITC原生格式,items/superitem用于放置超级模组的独立物品;mgitem用于放置MG-Mod的独立物品,ritcitem用于放置RITC的独立物品。

    5.2 创建RITC格式的独立物品

    新建一个物品文件,填写如下信息。

    RITC扩展包制作教程

    其中_id为物品ID,推荐与文件名一致。

    target为独立物品复制的物品ID,即原物品ID,这个做过独立物品的都能明白。

    name可以不填,也可以不改,无影响。

    _props里的这些都是重要数据

    Name、ShortName和Description分别为物品的名字、缩略名字(物品图标右上角所显示的名字)和物品描述。

    DefaultPrice是物品的预设价格,RagfairType为跳蚤市场分类标签,必填。

    CanFindInRaid决定该物品是否可以在战局内刷新,默认为false,填true则可以在战局内找到。

    注意:CanFindInRaid设置为false时,不会阻止物品在一些特殊渠道出现(如Fence、Scav宝箱等),如果希望阻止这些内容,需要配置BlackListType选项,这部分会在附录里讲解。

    CustomLoot则表示是否自定义刷新,默认情况下,独立物品会与target共享刷新池,比如你的独立物品源物品是比特币,并且启用了战局内刷新,则所有能找到比特币的地方都有概率找到你的独立物品。

    CustomLootTarget:你要自定义的刷新的目标物品。

    isMoney:设置物品是否按照货币处理,只有在设置为true的情况下,才能正确处理自定义货币,否则在使用自定义货币购买物品时,将导致整叠物品被全部消耗。

    剩下的属性呢和独立物品相同,把你需要修改的属性复制过来,修改对应的数据即可,其他数据无需补全,Mod会在加载时自动补充。

    5.3 附录:关于部分特殊物品

    以下直接使用示例物品讲解

    独立任务物品:

    RITC扩展包制作教程

    isQuestItem:决定物品是否是任务物品,设置为true将被视作任务物品处理(记得target改成任务物品!!)。

    QuestItemData:任务物品的刷新点数据。

    RITC扩展包制作教程

    locationId表示刷新点信息的索引,建议使用坐标。

    probability表示概率,固定为1。

    templete中ID表示刷新点的索引。

    useGravity表示刷新是否受重力影响,建议设置为false以便于调整位置。

    Position和Rotation表示刷新物品刷新的坐标和旋转角,关于如何创建自定义刷新点,请参考我之前的教程:[教程]自定义出生点/物品刷新点,不需要把任务物品写在原版的位置了(大概没人看)

    Root表示刷新物品的ID。

    Items里的参数我就不需要再讲解了吧……能看到这跟着做到这肯定能理解的。

    注射器/带有buff的可使用物品(食物与饮品等):

    RITC扩展包制作教程

    StimulatorBuffs表示你的物品的buff所使用的索引ID,不可重复。

    BuffValue表示你的物品的buff效果,这个可以参考原版进行编写。

    原版抽奖箱:

    RITC扩展包制作教程

    isGiftBox:是否是原版抽奖箱,设置为true的话将按照原版抽奖箱处理。

    BoxData:抽奖箱的数据。

    Count:开启一次箱子获得的战利品数量。

    Rewards:战利品池,格式为物品ID:权重。

    别问我什么是权重。

    原版抽奖箱性能极差,没有保底,不支持堆叠物品,不支持预设,推荐使用RITC提供的自定义抽奖箱。

    请看VCR——

    自定义抽奖箱(高级抽奖箱):

    RITC扩展包制作教程

    isadvGiftBox:同上,判断物品是否是高级抽奖箱。

    advBoxData:高级抽奖箱的抽奖数据。

    count:依然是开启一次箱子获得的物品数量(抽卡次数)。

    forcefindinraid:是否强制给予带勾物品,设置为true的话无论开启的箱子是否带勾,开出的物品都会带勾;false则会让开出的物品带勾状态跟随箱子的带勾状态。

    giftdata:卡池配置的ID。

    卡池配置位于traders/GiftData.json

    RITC扩展包制作教程

    name和key就不需要讲了,basereward控制卡池内三种稀有度的参数,其结构相同(normal除外,因为除了金紫就只有normal),然后金和紫(superrare和rare)是一样的,这里就只讲结构了。

    havebasereward:决定当前卡池是否存在保底,比如每10抽必出紫,每90抽必有金(这套系统的灵感来自哪里想必大家都能看出来)。

    chance:单次抽卡命中的概率。

    upchance:单次抽卡命中时抽中up的概率(没错,卡池支持配置up池^w^)。

    upaddchance:单次抽卡没抽中up的话下次命中时抽到up的额外增加概率(比如up概率0.5,额外概率0.5,就能实现大小保底)。

    chancegrowcount:第X-1抽依然未命中时,接下来的抽卡每一次都会增加额外的命中概率(仅在启用保底时有效)。

    chancegrowpercount:第X-1抽依然未命中时,接下来的抽卡每一次增加的命中概率。

    注意:X指的是增加开始前一次,比如第74次依然不出,接下来每次增加0.06,到第90抽时为0.06*(90-74)+0.04=1即必出,于是chancegrowcount填写73。

    总之就是比实际计算开始次数少1,紫色的保底如果选择10次必出的话对着范例1的数据抄即可,其他的请自行计算……

    itempool:这个参数表示卡池的内容

    包括superrare、rare和normal,每个池子又分为chanceup和normal(即up内容和普通内容)。

    卡池支持五种物品格式,Item(普通物品)、CustomPreset(自定义预设物品)、VanillaPreset(普通预设物品)、AmmoBox(子弹盒)以及Container(容器)

    Item的格式:

    RITC扩展包制作教程

    name表示物品名字,用于提升可读性。

    itemid表示物品id(又是废话)。

    type表示卡池内容的解析格式(废话)。

    stackcount表示堆叠数量,不可堆叠物品填1,可堆叠随便填,不超过堆叠上限就可以。

    CustomPreset的格式:

    RITC扩展包制作教程

    item是数组,其结构为预设,与AssortData的Item结构大体相同,从存档导出后无需任何修改即可使用,当然也支持手写。

    反正我是直接从示例的报价单那边抄的……

    RITC扩展包制作教程

    VanillaPreset的格式:

    RITC扩展包制作教程

    item表示物品ID,Mod会自动寻找第一个符合物品ID的预设并返回。

    AmmoBox的格式:

    RITC扩展包制作教程

    itemid表示物品ID,Mod会自动匹配弹药盒的容积大小。

    Container的格式:

    RITC扩展包制作教程

    与预设比较接近,推荐在存档内编辑容器后截取内容进行修改粘贴。

    固定抽奖箱(或者叫物资箱更合适):

    RITC扩展包制作教程

    isStaticBox:控制物品是否是固定抽奖箱。

    StaticBoxData:内容物配置,与高级抽奖箱基本一致,count表示数量,forcefindinraid表示强制战局中发现状态。

    giftdata是个数组,里面的内容与卡池内容的格式相同,不同之处在于固定抽奖箱的内容永远是固定的,比如你填五万美元,你开一万次它只会给你五万美元,不会给你别的。

    注意:抽奖箱必须修改独立物品的name参数!!

    通常用于处理从商人处单次交易获得多个物品的可能(原版并不允许这种事情),比如仅用一个物品换取可堆叠的一组物品。

    独立武器:

    RITC扩展包制作教程

    FixMastering:是否修复添加专精。

    CustomMasteringTarget自定义专精修复目标,不留此参数的话修复专精默认选择复制目标。

    AddMastering是否为武器添加新的专精。

    Mastering添加的新专精内容。

    5.4 杂项内容:

    maxCountInRaid:战局最大携带数量,填写整数。

    CustomFixID:自定义修复目标,不填写此条目则默认为复制目标

    FixType:修复物品兼容度,格式为数组

    其可用选项如下

    None:不修复任何内容,填写了None请不要填写其它内容。

    Mags:添加弹匣兼容,通常用于独立子弹。

    Chamber:添加枪膛兼容,通常用于独立子弹。

    Mods:添加配件兼容。

    ModBlackList:添加冲突的配件兼容。

    Container:添加容器的兼容。

    ContainerBlackList:添加容器黑名单的兼容。

    QuestEquip:添加任务装备的兼容。

    QuestWeapon:添加单武器任务的武器使用兼容。

    HandOverItem:添加单物品上交任务的上交物品兼容。

    QuestWeaponGroup:添加任务的武器使用兼容。

    HandOverItemgGroup:添加任务的上交物品兼容。

    QuestEquipBlackList:添加任务屏蔽的装备的兼容。

    InRaidCountLimit:添加战局携带限制,与复制目标相同,如果填写了maxCountInRaid自定义数量则无需此条。

    BlackListType:屏蔽的可获取途径,格式为数组

    其可用选项如下

    AirDrop:阻止物品在空投中生成

    PMCLoot:阻止物品在PMC身上生成

    ScavCaseLoot:阻止物品在Scav宝箱中生成

    Fence:阻止物品在Fence处出现

    独立物品的部分到此结束,剩下的就是藏身处相关以及package的配置杂项了。

    哦我任务奖励没写。

    回来再写……

    写完了。

    6. 藏身处配方及自定义Scav宝箱项目

    6.1 创建新的藏身处配方。

    配方管理文件位于traders/RecipeData.json。

    RITC扩展包制作教程

    结构依然是非常简单,ID不用说。

    Area表示配方所属的藏身处区域,依然有查询表。

    AreaLevel表示区域对应的等级。

    Output表示产出的物品的ID。

    OutputCount表示产出的物品的数量。

    Time是制作时间,秒为单位。

    NeedFuel表示是否全程需要开启发电机,参考信号棒,不建议开启。

    Locked和Quest依然表示是否需要任务解锁,参考前面。

    Require里的Tool和Item分别表示需要的工具(不消耗)和物品(消耗),结构相同。

    6.2 自定义Scav宝箱项目

    自定义Scav宝箱的文件位于traders/ScavCaseData.json。

    RITC扩展包制作教程

    id,time,requires不需要多说了。

    rewards分三个类型,common(普通)、rare(稀有)、superrare(超稀有),其数字分别表示最小数量和最大数量。

    具体池子内容不清楚……没找到在哪。

    7. 附录

    7.1 配置自定义战利品黑名单

    在package.json内找到Config里的LootBlackList,将你不希望在战局内(包括Scav宝箱、空投物资箱、PMC身上)找到的物品填入其中即可。

    7.2 配置自定义物资刷新

    在package.json内找到Config里的GenerateList,在这里配置自定义战利品刷新,格式为「需要刷新的物品ID:物品ID」。

    比如你希望让自定义的物品在能出现比特币的地方刷新,那么就要把自定义物品ID写在冒号前,比特币写在冒号后。

    7.3 配置自定义货币

    在package.json内找到Config里的CustomMoney,将你的自定义货币的ID填入其中即可。

    7.4 配置自定义跳蚤市场黑名单

    在package.json内找到Config里的CustomRagfairBlackList,将你不希望能在跳蚤出售的物品ID填入其中即可,支持覆盖原版。

    7.4 配置自定义跳蚤市场白名单

    在package.json内找到Config里的CustomRagfairWhiteList,将你希望能在跳蚤出售的物品ID填入其中即可,支持覆盖原版。

    ————————————————更新日志————————————————

    ————————————————相关链接————————————————

    炉火纯青
    赠送了礼物[666]
    回复
    渐入佳境
    打赏了18金币
    回复
    炉火纯青

    厉害啊佬

    回复
    登堂入室
    赠送了礼物[666]
    回复
    自成一派
    2021
    赠送了礼物[赞]
    回复
    自成一派
    赠送了礼物[比心]
    回复
    自成一派

    这必须给个赞 [s-7]

    回复
    炉火纯青

    独立物品不在商人处显示

  • 千叶玲花需要自己写AssortData,参见教程3
    拉黑 2年前 电脑端回复
  • 回复
    炉火纯青
    2021

    高质量教程贴 [s-13]

    回复
    炉火纯青
    2021
    赠送了礼物[火箭]
    回复

    请登录之后再进行评论

    登录
    永恒梦境
  • 今日 0
  • 内容 35
  • 关注 121
  • 聊天
    关注 3184

    【招募】GRIFFIN TKF项目开工 期待你的加入 || 你是否想加入格里芬书写自己与人形的故事

    捐助我们

    • 微信
    • 支付宝
  • 签到
  • 任务
  • 发布
  • 模式切换
  • 偏好设置
  • 帖子间隔 侧栏位置: