可控村民就職的村民AI分析

## `0` gt
此時村民有職業(yè), 并且正在使用近端的工作方塊.
- `block_event`: 切換工作方塊, 從近到遠(yuǎn)
- `ValidateNearbyPoi`: 檢查工作方塊poi
? ? - `brain.eraseMemory(JOB_SITE)`: 刪除工作方塊的記憶
? ? - `brain.eraseMemory(POTENTIAL_JOB_SITE)`: 刪除潛在工作方塊的記憶
- `ResetProfession`: 重置職業(yè)
? ? - 檢查到有職業(yè),不是傻子且沒有經(jīng)驗, 通過
? ? - `refreshBrain()` 重置大腦, 也就是重新生成所有的 `goal`
## `1` gt
此時村民沒有職業(yè), 而且剛剛重置大腦. 遠(yuǎn)處有一個可用的工作方塊.
- `AcquirePoi`: 分配潛在工作方塊
? ? - 檢查到 `nextScheduledStart == 0L`:
? ? ? ? - `nextScheduledStart = 當(dāng)前時間 + nextInt(20)`: 更新下次可用時間, 此處的 `nextInt(20)` 后文稱為 `cd_19`
? ? ? ? - 不通過檢查, 跳過執(zhí)行步驟
? ? - 跳過執(zhí)行步驟
## `max(2, 1 + cd_19)` gt
此時村民沒有職業(yè), 超過可用時間(`AcquirePoi.nextScheduledStart`). 遠(yuǎn)處有一個可用的工作方塊.
- `AcquirePoi`: 分配潛在工作方塊
? ? - 檢查到 `當(dāng)前時間 >= nextScheduledStart` 通過檢查
? ? ? ? - `nextScheduledStart = 當(dāng)前時間 + 20L + nextIint(20)`: 更新下次可用時間, 此處的 `20L + nextInt(20)` 后文稱為 `cd_39`
? ? - 此處省略一些操作, 之后另開一篇文章詳細(xì)講.
? ? - 分配 潛在工作方塊 `poi` 到遠(yuǎn)端的工作方塊
? ? - `brain.setMemory(POTENTIAL_JOB_SITE, blockpos)`
## `max(2, 1 + cd_19) + cd_39` gt (最大值 `59` gt)
此時村民沒有職業(yè), 但是已經(jīng)分配了遠(yuǎn)端的潛在工作方塊, 超過可用時間(`AcquirePoi.nextScheduledStart`)
? ?
? ?
## `58` gt
此時村民沒有職業(yè), 但是已經(jīng)分配了遠(yuǎn)端的潛在工作方塊(`58 > max(2, 1 + cd_19)`)
- `block_event`: 切換工作方塊, 從遠(yuǎn)到近
- `ValidateNearbyPoi`: 檢查工作方塊poi
? ? - `brain.eraseMemory(JOB_SITE)`: 刪除工作方塊的記憶
? ? - `brain.eraseMemory(POTENTIAL_JOB_SITE)`: 刪除潛在工作方塊的記憶
- `AcquirePoi`: 分配潛在工作方塊
? ? - 檢查到 `當(dāng)前時間 >= nextScheduledStart` 通過檢查 (極端情況下會推遲到一個gt執(zhí)行 \[未驗證\])
? ? ? ? - `nextScheduledStart = 當(dāng)前時間 + 20L + nextIint(20)`: 更新下次可用時間
? ? - 此處省略一些操作, 之后另開一篇文章詳細(xì)講.
? ? - 分配 潛在工作方塊`poi` 到近端的工作方塊
? ? - `brain.setMemory(POTENTIAL_JOB_SITE, blockpos)`: 記住潛在工作方塊
- `AssignProfessionFromJobSite`: 分配職業(yè)
? ? - 檢查距離潛在工作方塊的距離 `< 2` 通過
? ? - `brain.eraseMemory(POTENTIAL_JOB_SITE)`: 刪除潛在工作方塊記憶
? ? - `brain.setMemory(JOB_SITE, blockpos)`: 記住工作方塊
? ? - 設(shè)置村民職業(yè)
## `60` gt
回到初始狀態(tài), 同 `0` gt. 此時村民有職業(yè), 并且正在使用近端的工作方塊.
- `block_event`: 切換工作方塊, 從近到遠(yuǎn)
- `ValidateNearbyPoi`: 檢查工作方塊poi
? ? - `brain.eraseMemory(JOB_SITE)`: 刪除工作方塊的記憶
? ? - `brain.eraseMemory(POTENTIAL_JOB_SITE)`: 刪除潛在工作方塊的記憶
- `ResetProfession`: 重置職業(yè)
? ? - 檢查到有職業(yè),不是傻子且沒有經(jīng)驗, 通過
? ? - `refreshBrain()` 重置大腦, 也就是重新生成所有的 `goal`