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.

  • Was soll ich für Zerg in StarCraft 2 verwenden?
  • Wie man Zerg mit Terrans belästigt (im frühen Spiel)
  • Optimale Auftragsreihenfolge in Bezug auf Geräte-Upgrades
  • Was sind die populären Aufträge für Protoss in StarCraft 2?
  • Wie benutze ich ordnungsgemäß vor und nach dem Bau / baneling Geschwindigkeit?
  • Was ist die "kanonische" Option für die Wings of Liberty Split Missionen?
  • 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.