當前位置:菜譜大全網 - 菜譜 - 饑荒聯機版海上漂浮物刷新機制介紹

饑荒聯機版海上漂浮物刷新機制介紹

饑荒聯機版中海上漂浮物是如何刷新的?新手玩家可能對其規律還不了解,下面壹起來看看饑荒聯機版海上漂浮物刷新機制介紹吧。

饑荒聯機版海上漂浮物刷新機制介紹

壹、漂浮物種類

權重刷新物品:

中文名,代碼,權重

浮木, 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,則額外進入生成其他漂浮物的流程。