Benutzerdefinierte Variablen / Felder für Einheiten? [abgeschlossen]

Gibt es eine Möglichkeit, neue / benutzerdefinierte Variablen mit Einheiten zu verknüpfen?

Es gibt zwei Trigger, die ich auf eine Einheit anwenden möchte.

  • Der erste Auslöser, der auf einer Einheit aufgerufen wird, sollte die ihm zugewiesene aktuelle Bestellung überprüfen und sich an das Auftragsziel (von Typ unit oder integer (Unit ID) erinnern)
  • Zweiter Auslöser, der auf der gleichen Einheit auftritt, sollte sich an den Wert erinnern und etwas damit machen. Aber wenn der zweite Auslöser auftritt, existiert die alte Ordnung nicht mehr.

Es gibt UnitSetCustomValue , aber dieses funktioniert auf Real Typen und nicht int oder unit . Ich kann keine Unit-ID darin speichern, weil ich die Präzision verliere.

  • Kannst du eine Wiederholung finden, die gegen einen gut durchgeführten Proxy-Rush auf Blistering Sands verteidigt?
  • Sonde, die zurückkehrt: Aus welchem ​​Mineralfeld sammelte es Ressourcen?
  • Ist es möglich zu bestimmen oder zu kontrollieren, wo sich ein SCV während des Baus bewegt?
  • Gibt es eine Gebühr für die Stornierung eines Gebäudes?
  • Kann ich nur Starcraft 2 Multiplayer installieren, ohne Kampagne?
  • Ist LAN mit StarCraft 2 definitiv nicht möglich?
  • One Solution collect form web for “Benutzerdefinierte Variablen / Felder für Einheiten? [abgeschlossen]”

    Sie können Datentabellen verwenden, indem Sie die Einheiten-Tags verwenden, um "erstellen" zu erstellen und beliebige Felder zu verwalten.

    • Datentabelle – ist ein String -> Any hashmap. Sie können jeden Wert des eingebauten Typs darin speichern.

      Es gibt eine global und eine local Datentabelle. Sie brauchen die globale, um die Werte anhalten zu lassen.

    • Unit-Tag – ist eine eindeutige ID-Integer, die mit jeder Einheit verknüpft ist

    Wenn Sie also ein benutzerdefiniertes Feld "FooBar" mit einer Einheit mit gegebener ID verknüpfen möchten, können Sie "{ID} FooBar" in der Datentabelle speichern und später abrufen. Betrachten Sie die Verwendung von Helper-Funktionen / Aktionen, um das zu verwalten:

     (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) ) 

    Ein ähnlicher Satz von Getter / Setter kann für andere Typen, zB Einheiten, definiert werden.

    Es ist nicht der schnellste Weg, es zu erreichen, aber es funktioniert. Es wäre toll, wenn man eine Einheit zerstört, löscht man die nicht mehr benötigten Einträge. Sonst bekommst du ein Speicherleck.