饥荒联机版海上漂浮物刷新机制介绍

时间:2022-11-20 06:32

饥荒联机版中海上漂浮物是如何刷新的?新手玩家可能对其规律还不了解,下面一起来看看饥荒联机版海上漂浮物刷新机制介绍吧。

饥荒联机版海上漂浮物刷新机制介绍

饥荒联机版海上漂浮物刷新机制介绍

一、漂浮物种类

权重刷新物品:

中文名,代码,权重

浮木, driftwood_log, 1

船残骸, boatfragment03, 0.3

船残骸, boatfragment04,0.3

船残骸, boatfragment05, 0.3,

割下的草, cutgrass,1

绳子, twigs,1

海底垃圾, oceanfishableflotsam_water, 1

必刷物品:

漂流瓶,messagebottle

二、表层逻辑

1、漂流瓶刷新和其他物品的刷新是两个互不干扰的流程,但会共同使用一些相关函数。

2、漂流瓶的刷新周期为随机1-2天,如果随机生成的刷新点不满足条件,则会在8分之一天之后重新刷新。刷新地点为以玩家为中心,角度随机,半径40的点。

3、其他物品的首次刷新周期为随机1-150秒,之后的刷新周期为随机30-180秒。地点与漂流瓶相同。

4、每个玩家独立刷新,也就是说,凑在一起的玩家数越多,感官上刷新的会越快(多)。

三、底层逻辑

本部分所有函数默认在flotsamgerator组件下,每个生成过程都与单独一个玩家绑定。

漂流瓶刷新流程:当系统需要生成漂流瓶时,系统会首先调用StartGuaranteedSpawn函数。紧接着调用ScheduleGuaranteedSpawn函数对漂流瓶设置一个计时器,周期为1-2个游戏天数(TUNING.TOTAL_DAY_TIME)的均匀分布。当计时器时间结束,便会触发SpawnGuaranteedFlotsam函数。此时会调用SpawnFlotsamForPlayer函数对物品进行生成。生成之后会根据生成的结果回调ScheduleGuaranteedSpawn函数为漂流瓶的下次更新计时。如果生成物品成功,则按之前的时间计时;如果生成物品失败,则上述计时器的周期为8分之一游戏天数(GUARANTEED_FLOTSAM_REATTEMPT_DELAY)。

其他物品刷新流程:当系统需要生成其他漂浮物品时,系统会首先调用ScheduleSpawn函数。系统会设置一个计时器,计时周期为1-150的随机秒数(150的来源为代码中写的是180-30)。计时周期调用SpawnFlotsamForPlayer函数生成其他物品,并重新进入计时周期。之后的计时周期为30-180的随机秒数。

SpawnFlotsamForPlayer函数:首先获取玩家的位置,并判断玩家是否在船上,如果不在船上则直接返回。否则就获取船的坐标。物品刷新的位置仅与玩家位置和船的位置有关,物品位置生成的函数为GetSpawnPoint。如果生成的坐标可用,则会生成漂浮物。这里需要注意的一点,当系统需要生成漂流瓶时,会传入override_prefab和override_notrealflotsam两个参数,而当生成其他漂流物时,这两个参数传入的为空。override_prefab和override_notrealflotsam两个参数会接着传给GetSpawnPoint函数。第一个参数用来指定生成的漂浮物,如果不指定该参数,则会根据权重随机生成漂浮物。(因此只有当这里传入“漂流瓶”参数时,才能生成漂流瓶。)第二个参数override_notrealflotsam最终会被传给setinsttoflotsam函数,用来判断是否给生成物品添加"flotsam"标记。除此之外,SpawnFlotsamForPlayer函数还有一个额外的参数reschedule,这个参数类型是一个函数名。当系统从ScheduleSpawn函数地调用SpawnFlotsamForPlayer函数是,会将ScheduleSpawn函数本身作为reschedule的参数,来为下一个计时周期做准备。

SpawnFlotsam函数:该函数共有3个参数spawnpoint, prefab, notrealflotsam。spawnpoint为从SpawnFlotsamForPlayer函数传进来的物品坐标,prefab为指定生成物品(可以为空)。notrealflotsam会传给setinsttoflotsam函数。如上述所说,函数会先判断prefab是否为空,如果为空,则通过权重随机选择一个物品生成。之后生成一个随机数,用来判断是否对物品旋转180度。然后将物品转移到相应的坐标,然后将物品和notrealflotsam参数传入setinsttoflotsam函数。

GetSpawnPoint函数:生成坐标。。大致思想是,以玩家坐标为基础,角度随机,半径为40的点生成。会对坐标的可用性进行判断。

setinsttoflotsam函数:该函数共有三个参数,inst, time, notag。inst为要生成的物品。如果time为空,则会将time赋值为3-4个游戏周期(均匀分布)。该时间被用来计算物品刷新到沉没的时间。notag用来判断是否增加"flotsam"tag。同时,为物品设计3个监听事件,分别为到沉没时间、被捡起、被移除。之后会分别有其他函数来对应处理。比较有意思的是,当物品沉没时,会在物品原坐标处生成一个“splash_sink”。(本人在游戏中测试了一下,好像是一个气泡。)

整体逻辑:

有一个变量_maxflotsam,用来控制最大的漂浮物数量,目前为4(但是并没有在程序中看到对当前漂浮物数量的判断。所以这个变量可能并未被实际使用)。

当生成世界时,会对_updating变量进行判断,如果为false,则置为true,并让所有在_activeplayers列表中的玩家进入漂流瓶生成流程和其他漂浮物生成流程。如果为true,则删除当前所有的漂浮物(包括漂流瓶)的数据,并重新生成。。

当新玩家进入游戏时,会将玩家添加到_activeplayers列表中。同时进入生成漂流瓶的流程。除此之外,会判断_updating变量。如果为true,则额外进入生成其他漂浮物的流程。

标签:
随便看看
本类推荐
本类排行
热门标签

我国国家通讯社行不行啊细狗新年贺词祝福语2023年祝福语新年新年贺词新年贺词祝福语居家抗病毒小药箱除夕高速免费吗2022年除夕高速免费吗春联春联句子大全春联句子大全七字年夜饭十二道菜年夜饭十二道菜单年夜饭吃什么年夜饭吃什么菜吃年夜饭的寓意年夜饭黑芝麻菊花茶晒菊花茶腌腊肉送妈妈生日礼物汉白玉送闺蜜水钻送女人礼物爸爸生日送礼物送老公