Starcraft-2
如何讓worker攜帶多種資源?
我想做一個相當簡單的(?)改變:我希望探測器(或其他工人)能夠同時攜帶多種礦物。我希望調查能夠:
- 接近礦場
- 收集礦物
- 再次收集礦物
- … 然後再次…
- 然後把它帶回基地
原本我以為是worker的簡單數據變化:我以為可以簡單的把行為
Carry Mineral Field Minerals->(Basic) Stats; Maximum Stack Count
從1改成5。可惜,一旦探針採集到礦物,它就會自動返回。在仔細考慮之後,我認為可能有一些內置觸發器,檢查工人是否已經攜帶礦物 - 如果是這樣 - 發出“返回”命令。從那時起,我一直在研究可用的觸發器、腳本、解壓 Liberty 和 Swarm 模組,但到目前為止 - 我什麼也沒找到。
有任何想法嗎?指針?
我是改裝新手,我不打算做任何大事。只是想破解這個進行一些實驗……
我知道如何增加收集時間以及如何使探測器在一個更新檔中只攜帶更多礦物質……但我想特別讓探測器在它返回之前多次重新觸發收集(並在兩者之間增加一些延遲)
此外,我不在乎將礦物與氣體或任何其他資源混合時會發生什麼。
遵循 user1337 的想法,我提出了以下想法:
- 當一個工人在收割時,記住它是從哪個礦場做的
- 當工人完成收割後,取出貨物並重複收割順序,再次為同一礦場。
- 有一個“堆棧計數”來記住上述點發生了多少次。當達到門檻值時,讓設備正常返回。
- 返回的礦物數量應乘以堆疊數量。
第一點是要記住,在單位中,它是從哪個礦場採集的。該資訊將在稍後返回時使用。查看問題/答案探測返回:從哪個礦區採集資源?和單位的自定義變數/欄位?
(Trigger) onStartGettingResources Events TriggerAddEventUnitAbility(null, "ProbeHarvest", 0, c_abilHarvestStageHarvest, false) TriggerAddEventUnitAbility(null, "DroneHarvest", 0, c_abilHarvestStageHarvest, false) TriggerAddEventUnitAbility(null, "SCVHarvest", 0, c_abilHarvestStageHarvest, false) Local Variables minerals <unit> EventUnitTargetUnit() Actions StoreUnitWithUnit(EventUnit(), "miningFrom", minerals) //custom function for custom "fields" in a unit
第二個觸發應該發生在工人完成收割時。實驗表明,當它開始攜帶礦物時,它最好通過改變單位行為來觸發。在技能階段觸發它
ApproachDropOff
會導致動畫短時卡頓。(Trigger) onProbeGetResources Events TriggerAddEventUnitBehaviorChange(null, "CarryMineralFieldMinerals", c_unitBehaviorChangeActivate) Conditions Comparison(UnitGetType(EventUnit()), ==, "Probe") Actions GatherResourcesStack("ProbeHarvest", 0) //custom function, see below .... //Similar triggers for SCV and Drone (Global variable) g_gatherStackCount <constant int> 4 (Action definition) GatherResourcesStack Parameters gatherCommand <Ability Command - Unit> Local Variables mineralPatch <unit> GetUnitWithUnit(EventUnit(), "miningFrom") stackCount <int> GetIntWithUnit(EventUnit(), "minigStackCount") Actions SetVariable(stackCount, ArithmeticInt(stackCount, +, 1)) IfThenElse() if Comparison(stackCount, <, g_gatherStackCount) then UnitSetPropertyFixed(EventUnit(), c_unitPropCarriedMinerals, 0.0) StoreIntWithUnit(EventUnit(), "miningStackCount", stackCount) UnitBehaviorRemove(EventUnit(), "CarryMineralFieldMinerals", 1) UnitIssueOrder(EventUnit(), OrderTargetingUnit(gatherCommand, mineralPatch), c_orderQueueReplace) else StoreIntWithUnit(EventUnit(), "miningStackCount", 0) UnitSetPropertyFixed(EventUnit(), c_unitPropCarriedMinerals, ArithmeticReal( UnitGetPropertyFixed(EventUnit(), c_unitPropCarriedMinerals, c_unitPropCurrent), *, g_gatherStackCount ) )