Spiel-Cache – Mappedia

Spiel-Cache

Aus Mappedia
(Weitergeleitet von Gamecache)
Wechseln zu: Navigation, Suche


Variablentyp: gamecache
extends agent
Funktionen mit gamecache als Rückgabewert
Funktionen mit gamecache als Parameter

Der Spiel-Cache oder englisch Gamecache ist ein Zwischenspeicher, in dem im Gegensatz zur Hash-Tabelle nur Variable vom Typ Boolean, Integer, Real, String oder Unit gespeichert werden können. Da er aus dem RAM in Form einer Datei auch auf die Festplatte geschrieben werden kann, bietet er die einzige Möglichkeit, Daten über das Ende einer Karte hinaus zu erhalten. So können beispielsweise Helden in einer Kampagne in die nachfolgende Karte transportiert werden.

Inhaltsverzeichnis

Aufbau

Man kann sich den Aufbau des Spiel-Caches als Tabelle vorstellen. Die Spalte entspricht dem Begriff missionKey, die Zeile entspricht dem Begriff key . key und missionKey sind jeweils Zeichenketten. Wichtig ist, dass man für einen missionKey und einen key, einen exaktes Wertepaar für einen gespeicherten bzw. geladenen Wert definiert.

Verwendung

Initialisierung

Spiel-Cache - Create a game cache from my_gamecache.w3v
Set my_gamecache = (Last created game cache)
    set udg_my_gamecache = InitGameCache( "my_gamecache.w3v" )

Speichern

Spiel-Cache - Store 1337 as label of Category in my_gamecache
Spiel-Cache - Store 1337 as key of missionkey in my_gamecache
    call StoreInteger( udg_my_gamecache, "Category", "label", 1337 )
    call StoreInteger( udg_my_gamecache, "missionkey", "key", 1337 )

Laden

Set my_integer = (Load label of Category from my_gamecache)
Set my_integer = (Load key of missionkey from my_gamecache)
    set udg_my_integer = GetStoredInteger( udg_my_gamecache, "Category", "label" )
    set udg_my_integer = GetStoredInteger( udg_my_gamecache, "missionkey", "key" )

Mehrspieler

Obwohl das Übertragen von Daten in eine andere Karte sehr gut funktioniert, wenn man alleine spielt, bleibt diese Möglichkeit den Erstellern von Mehrspielerwelten leider verwehrt. Der Grund dafür ist, dass es nicht gewährleistet ist, dass sich in ein Spiel Spieler mit den exakt gleichen Spiel-Cache-Daten einklinken. Allerdings bedeutet das nicht, dass man den Spiel-Cache nicht in Mehrspielerkarten verwenden kann. Im Gegenteil: Vor dem Patch 1.24 hatte sich dieser Weg, Daten einer Karte zu speichern, im der Erstellung eigener Zauber etabliert und galt gemeinhin als Standard für eigene Zauber, die mit Timern, lokalen Auslösern oder ForGroup-Anweisungen arbeiteten. Hier hatte sich vor allem die Arbeit mit dem Return-Bug durchgesetzt. Inzwischen (seit dem Patch 1.24) wurde der Spiel-Cache in diesem Bereich durch die neu eingeführte Hash-Tabelle ersetzt.

Verwendung mit dem Return-Bug (veraltet)

Wie bereits vorher schon umrissen, werden neben dem eigentlichen Wert auch eine Kategorie und eine Bezeichnung ("label") mitgespeichert, um den Wert anschließend wiederzufinden. Ersteres kann nun zweckentfremdet werden, indem man dort die ID eines Handles mittels Return-Bug speichert. Das hat den Vorteil, dass bei lokalen Triggern, Timern oder sonstigen Handle-Objekten der gespeicherte Wert eindeutig zuzuordnen ist. Damit kann man den Spiel-Cache als eine Mischung aus globaler und lokaler Variable ansehen. Global, weil man den Wert von jeder anderen Funktion abrufen kann, sofern man die benötigte Objekt-ID (z.B. "GetExpiredTimer()" bei Timer-Funktionen oder "GetTriggeringTrigger()" bei lokalen Triggern) hat. Lokal, weil man ohne diesen "Schlüssel" in Form der Handle-ID an den Wert nicht herankommt und gegebenenfalls einen anderen Wert erhält, der aber, das ist der Trick an der Sache, sinnvoller für die ganze Sache ist.

Benötigte Funktionen:

function LocalVars takes nothing returns gamecache
    return udg_GameCacheVariable
endfunction

function SetHandleHandle takes handle subject, string name, handle value returns nothing
    if value==null then
        call FlushStoredInteger(LocalVars(),I2S(H2I(subject)),name)
    else
        call StoreInteger(LocalVars(), I2S(H2I(subject)), name, H2I(value))
    endif
endfunction

function GetHandleHandle takes handle subject, string name returns handle
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction

Um diese Funktionen für andere Typen tauglich zu machen, kann einfach die letzte Funktion angepasst werden, indem einfach der Return-Typ verändert wird.

Funktionen

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Warcraft-Mapping
Werkzeuge

Notice: Memcache::get() [memcache.get]: Server 85.13.160.44 (tcp 11212) failed with: Connection refused (111) in /www/htdocs/global/live/codecraft/classes/cache/cache.class.php on line 56