Abyssstew 2024/06/18 04:35

制作进度#03 研究分享:表格控制的采集系统

■ 引入

唐突题外话:我在上一篇文章的开头添加了新的演示视频,暂时无法游玩demo的朋友们也可以通过演示视频来了解游戏内容哦~


最近我在优化游戏中的采集系统。虽然这几天总是感到迷茫,不过优化的结果却挺好的,发现了一些新的关于采集系统的处理方法,在这里分享给各位。

演示。看上去似乎没什么特别之处,其实重要的是实现的方式。这个采集系统是通过excel表格来控制的,修改表格内的物品或概率,都能够被游戏所读取,而实现方式又不复杂,所以在这里分享给有需要的人,我想应该会有所帮助。


这里需要用到的工具是DatabaseConverterMV,它是免费的,你可以在steam上找到。它的用法简单来说就是:
1.将你的工程的数据库导出为excel表格。
2.你编辑excel表格。
3.将编辑后的表格导回工程文件。
平平无奇,是吗?能够批量编辑数据库,就能节省大量时间,这是它的主要用途,但它的上限却不在于此。有一天我发现我在表格内随意录入的信息能够被游戏程序读取,这才打开了新世界大门,也就有了今天的表格控制采集系统的研究。
PS:前阵子我对游戏进行翻译时,已经开始在使用这个技巧了,不过因为不是人人都需要翻译自己的游戏,也就没有作为技巧分享出来。直到今天我用它制作了采集表,并且成功运行……这个工具的上限比预想的要高很多,它能够完成很多复杂的设计,总之我是相见恨晚了。
另外,demo中事件备注标有"<Copy Event: 4, 1>"字样的是yanfly大佬的插件:YEP_EventCopier.js;信息框标有"_pum[0,0,0,0,Normal]"的是やな大佬的插件:CommonPopupCore.jsPopupMessage.js。这几个插件在这次制作中不是必须的,只起到辅助作用,具体可以查看插件的说明。


介绍完工具,该准备动手了,先看一个采集运作流程的示例:
1.玩家调查采集点
2.采集点生成随机数、激活采集处理器,然后暂时隐藏自己(其实就是"可以反复开的宝箱")
3.采集处理器被激活并根据随机数从素材池中获得特定的物品ID
4.采集处理器使玩家获得该物品
5.结束
看起来没什么问题,实际上实现起来的话,如果没有编程基础,要么被巨大的数据量压垮,要么只能得到灵活度有限的设计。低数据量和高灵活性不能兼得。

■ 表格编辑

而制作采集表格可以解决这个问题。我们在构想采集系统的时候,采集点的类型(木头还是石头)、所处位置(新手村还是魔王城)、产出素材(垃圾和稀有素材)、产出概率(高还是低)这些都是理所当然会想到的
我们要利用这些想当然的东西,来完成这个系统。
首先,我们要将采集点的类型、位置、具体素材、概率,以数据的逻辑进行思考:

・采集点的类型,用数字来表示,1表示草、2表示石、3表示水产……以此类推。之所以不用字符串表示,是因为这个数据之后要参与计算。
・位置的话,根据同类采集点产出素材的不同,给游戏划分1、2、3、4……等区域。(同样是草类采集点,产出素材却不同,原因就是所处区域不同)
・产出的具体素材。可以用ID表示这些物品,也可以用名称,因为这里数据多,为了让表格方便查看和修改,我使用了名称。
・产出概率。写在对应素材的旁边就好。一个采集点内的概率建议总和为100,方便计算。(有经验者可以自己构想)


然后我们就得到了这样的数据表格,我们的目标是将这个表格导入工程,实现所见即所得。


不过目前这个表格和database的结构不一样,并不能直接使用,需要让这个表格符合database的结构。

我把表格格式改成这样,这次就真正能够导入工程了。

← 完整的表格是这样子的。

将这个完整表格(在ExportFolder文件夹中)导入工程中,运行游戏,在F8的控制台中输入 $dataItems[22].dropA,就能得到结果:"草I"("草!"),同理 $dataItems[22].dropAP的结果为"50"。

到这一步,经常使用脚本的朋友,就已经知道接下来该怎么做了。

■ 事件编辑

你的面前有一个采集点,你碰了一下,它……
1.它生成了一个0~99的随机数,将自己的采集点类型(1表示草,2表示石)和随机数分别存入变量,然后叫醒了采集处理器。

2.采集处理器启动后:获取自身所处地图的地图ID,将地图ID转换为区域编号。(根据上表,新米草原A的编号为21,新米草原B编号为26,魔王城编号为31)

3.区域编号和采集点类型相加,得到的数值就会索引到特定的采集点。(比如采集处理器得到的编号为26,被触摸的采集点返回了其类型数值为2,相加得到28,28代表的就是database表格内ID为28的这一行)

到这里,我们已经掌握了眼前采集点的全部信息,剩下的就是如何通过概率,让玩家获得采集点里面的物品了。

【概率计算】
概率的计算方式,大家可能有自己的偏好,这里我就只写一个作为参考吧:
前面我们让采集点内的每个素材概率相加的结果为100,而且得到了一个0~99的随机数p。
假设该采集点为魔王城的石(ID:33),会出现石III、石IV、石V这三种物品,其概率分别为50%,30%,20%。预想:
p>=0 && p<50 , 获得石III
p>=50 && p<50+30, 获得石IV
P>=50+30 && p<50+30+20, 获得石V
写成脚本形式:

这一步我们只得到了要获得的物品的名字,想要直接获取到该物品,我们需要这个物品的ID。我们先把物品的名字存进变量I中,下一步要用到。

【获取物品】
创建一个循环,目的是遍历整个物品列表的物品名称,和我们之前获得的物品名称进行比对。


← 脚本在在工程文件中的展示。

■ 结语

到这一步,就算全部完成了,今后只需要更新database表格,便能够控制采集点的素材以及概率。
采集点的刷新、中大奖、多重采集等,可以在这个机制上进行添加,由于不是本次的主题,这里就不展开讲了。以上。

フォロワー以上限定無料

这个是本次采集系统的示例工程文件(附有表格)

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索