Starcraft-2

單位的自定義變數/欄位?

  • November 23, 2014

有沒有辦法將新/自定義變數與單位相關聯?

我想在一個單元上應用兩個觸發器。

  • 第一個觸發器,在一個單元上呼叫,應該檢查分配給它的目前訂單並記住訂單目標(類型unitinteger(單元 ID))
  • 發生在同一單元上的第二個觸發器應該呼叫該值,並對其進行處理。但是當第二次觸發發生時,舊的訂單就不再存在了。

UnitSetCustomValue,但這個適用於Real類型而不是intor unit。我無法在其中儲存單元 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 集。

這不是實現它的最快方法,但它確實有效。當一個單元被銷毀時,您刪除不再需要的條目會很棒;否則你會得到記憶體洩漏。

引用自:https://gaming.stackexchange.com/questions/192562