Starcraft-2
單位的自定義變數/欄位?
有沒有辦法將新/自定義變數與單位相關聯?
我想在一個單元上應用兩個觸發器。
- 第一個觸發器,在一個單元上呼叫,應該檢查分配給它的目前訂單並記住訂單目標(類型
unit
或integer
(單元 ID))- 發生在同一單元上的第二個觸發器應該呼叫該值,並對其進行處理。但是當第二次觸發發生時,舊的訂單就不再存在了。
有
UnitSetCustomValue
,但這個適用於Real
類型而不是int
orunit
。我無法在其中儲存單元 ID,因為我失去了精度。
您可以使用帶有單元標籤的數據表來“創建”和管理任意欄位。
- 數據表 - 是一個
String -> Any
雜湊圖。您可以在其中儲存任何內置類型的值。有一個
global
和一個local
數據表。您需要全域變數來使值持久化。
- 單元標籤 - 是與每個單元關聯的唯一 ID 整數
因此,如果您想要一個與具有給定 ID 的單元關聯的自定義欄位“FooBar”,您可以將“{ID}FooBar”儲存在數據表中,然後再檢索它。考慮使用輔助函式/操作來管理:
(Action Definition) StoreIntWithUnit Parameters owner <unit> fieldname <string> value <int> Local Variables ID = <int> UnitGetTag(owner) Actions DataTableSetInt(true, CombineString(IntToString(ID), fieldname), value) (Function Definition) GetIntWithUnit Return Type: <int> Parameters owner <unit> fieldname <string> Local Variables ID = <int> UnitGetTag(owner) Actions Return( DataTableGetInt(true, CombineStrings(IntToString(ID), fieldname) )
可以為其他類型(例如單位)定義類似的 getter/setter 集。
這不是實現它的最快方法,但它確實有效。當一個單元被銷毀時,您刪除不再需要的條目會很棒;否則你會得到記憶體洩漏。