inWarcraft Forum  

Zurück   inWarcraft Forum > Allgemeine Foren > Mapping Foren > Material

Antwort
 
Themen-Optionen Ansicht
Alt 28. September 2011, 22:13   #1
muzzel
 
Benutzerbild von muzzel
Staff Maps
Map-Contests
 
Registriert seit: Sep 2008
Ort: BaWü
BNet Acc: muzzel
Beiträge: 3.228
AAT - lokale Timer und Daten attachen in GUI

Advertising
AAT - v1.4 (2011-09-28)

AAT ermöglicht es dem Benutzer in GUI lokale Timer zu benutzen und Daten daran zu attachen. Das System ist in Jass geschrieben, die Schnittstelle zu GUI wird durch wenige Customscripts realisiert an denen nichts verändert werden muss da alle Daten über globale Variablen übergeben werden.
Ist in der Map TimerUtils vorhanden so werden automatisch alle benutzten Timer recycled.
Das System richtet sich vorallem an erfahrenere GUI Benutzer die die Einschränkungen von GUI gegenüber Jass elegant umgehen wollen. AAT ist besonders zu Entwicklung von Spells sehr hilfreich und es kann oft eine bessere Performance ermöglichen als durch reinen GUI Code möglich ist.

Habe das System damals AAT genannt, hat keinen tieferen Sinn, das "T" steht für Timer und das "AA" sorgt dafür, dass die benutzten GUI Variablen immer schön weit oben in der Liste sind.

Um dem System Daten zu übergeben speichert man sie in einer vorgegebenen GUI Variablen und ruft dann ein Customscript auf welches die Daten aus der Variablen ausliest und intern einlagert.

Ich werde die Funktion an einem kleinen Zauber "Teleport" erklären, der den Zauberer nach dem Zaubern 3 mal im Abstand von 8.5 Sekunden an die Position teleportiert, an der er den Zauber benutzt hat.

1. Timer erstellen:

Set AAT_Counter = 3
Set AAT_Timeout = 8.50
Set AAT_Trigger = Teleport2 <gen>
Custom script: call AAT_prepareTimer()

Die Variable AAT_Counter gibt an wie oft der Timer durchlaufen soll bis er automatisch zerstört wird (hier 3 mal).
Die Variable AAT_Timeout gibt die Zeit an nach der der Timer auslaufen soll (hier 8.5 Sekunden).
Die Variable AAT_Trigger gibt an welcher Trigger aufgerufen werden soll wenn der Timer ausläuft (hier "Teleport2 <gen>").
In diesem Beispiel wird also ein Timer alle 8.5 Sekunden den Trigger "Teleport2 <gen>" starten. Nach 3 mal bricht er ab und wird zerstört.

2. Daten anhängen ("attachen"):
Jeder Timer hat intern einen Speicher für beliebige Daten die angehängt werden können. Dieser ist als Stack organisiert was das First-In-Last-Out Prinzip zur Folge hat. Konkret bedeutet das:
Man kann beliebig viele Daten anhängen und beim Auslaufen des Timers wieder auslesen. Beim Auslesen müssen die Daten in umgekehrter Reihenfolge wie sie angehängt wurden entnommen werden!
Momentan können folgende Datentypen angehängt werden: Integer, Real, Einheit, Effekt, Group.
Beispiel: Wir wollen die "Triggering Unit" und ihre momentane Position speichern.
Wir speichern die Einheit in "AAT_store_unit" und rufen danach das "AAT_pushUnit()" Customscript auf.

Set AAT_store_unit = (Triggering unit)
Custom script: call AAT_pushUnit()

Wir speichern die x Koordinate der Einheit in "AAT_store_real" und rufen "AAT_pushReal()" auf.

Set AAT_store_real = (X of (Position of (Triggering unit)))
Custom script: call AAT_pushReal()

Wir speichern die y Koordinate der Einheit in "AAT_store_real" und rufen nochmal "AAT_pushReal()" auf.

Set AAT_store_real = (Y of (Position of (Triggering unit)))
Custom script: call AAT_pushReal()

Wir haben also die Einheit, die x Koordinate und die y Koordinate gespeichert (Reihenfolge beachten!).

3. Timer starten:
Um den Timer zu starten muss nur das Customscript "AAT_startTimer" aufgerufen werden.
Custom script:   call AAT_startTimer()


Der Timer wird jetzt 3 mal im Abstand von 8.5 Sekunden den Trigger "Teleport2 <gen>" aufrufen. In diesem Trigger müssen wir die Daten (Einheit, X, Y) die an den Timer angehängt sind auslesen und die Einheit teleportieren.

4. Daten auslesen:
Wir müssen die Daten im umgekehrter Reihenfolge auslesen wie wir sie angehängt haben, also "Y, X, Einheit". Die einzelnen Variablen werden mit den "pop" Customscripts ausgelesen, in den "AAT_store_*" Variablen zwischengespeichert und können von dort aus in eine eigene Variable kopiert werden.

Custom script: call AAT_popReal()
Set Teleport_Y = AAT_store_real

Auslesen der Y Koordinate und speichern in der Variablen "Teleport_Y".

Custom script: call AAT_popReal()
Set Teleport_X = AAT_store_real

Auslesen der Y Koordinate und speichern in der Variablen "Teleport_X".

Custom script: call AAT_popUnit()
Set Teleport_Zauberer = AAT_store_unit

Auslesen der Einheit und speichern in der Variablen "Teleport_Zauberer".

5. Daten verwenden:
Jetzt können die ausgelesenen Daten die wir in unsren Variablen zwischengespeichert haben weiterverwendet werden. Wir teleportieren also den Helden an die gespeicherte Position:

Einheit - Move Teleport_Zauberer instantly to (Point(Teleport_X, Teleport_Y))


6. Timer löschen:
Am Ende jedes Triggers in dem wir Daten mittels den "AAT_pop_*" Customscripts ausgelesen haben, müssen wir das Customscript "AAT_deleteTimer" aufrufen (jedes Mal! auch wenn wir den Timer mehrere Male laufen lassen, der Timer wird erst beim letzten mal tatsächlich zerstört).
Der Hintergrund dazu ist, dass durch das Auslesen der Daten der Stackpointer auf das unterste Element des Stacks zeigt und wir ihn, damit wir die Daten nochmals auslesen können, wieder auf das oberste Element setzen müssen.


Analog zu den im Beispiel verwendeten Reals und Einheiten können auch Integers, Effekte und Groups angehängt und ausgelesen werden.

In der angehängten Karte sind sowohl das System + Customscripts als auch der Beispielzauber "Teleport" enthalten.
Angehängte Dateien
Dateityp: w3x AAT_1.4.w3x (19,4 KB, 26x aufgerufen)
__________________

<Argon]> in der zeit, in der ich das mit tikz gebastelt hab, hätt ich das als 2m^2 holzskulptur schnitzen können
<Argon]> mit nem Skalpell
Penguin World Domination - be part of it!
» LaTeX2png Converter | Gaias Retaliation ORPG | Ulumulu Entertainment | AAT

Geändert von muzzel (13. Februar 2013 um 18:39 Uhr) Grund: Tippfehler
muzzel ist offline   Mit Zitat antworten
Antwort

Das könnte Dich auch interessieren

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Jass] einheiten an timer attachen abfl Triggerforum 1 11. September 2010 11:40
Create 2 Timer - Destroy First Timer Window!? FliesGold Triggerforum 3 17. September 2006 16:28
Polygone attachen Barade Skinning/Modelling 3 02. September 2006 16:34
Prob. mit Attachen DaveZabransky Skinning/Modelling 5 06. September 2005 21:27
Waffen Attachen Imrahil2 Triggerforum 0 22. September 2004 21:07


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:46 Uhr.


Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Counter-Strike: Global Offensive

ingame Netzwerk
Call of Duty | Counter-Strike: Global Offensive | Diablo 3 | Dota 2 | League of Legends | Quake 3 | Starcraft 2 | Torchlight 2 | Warcraft 3 | World of Warcraft | Hearthstone | Kino, TV, Film und Promis

Support | AGB | Probleme mit der Werbung melden
Online Werbung | Mediadaten | Unternehmen | Karriere | Impressum

© ingame GmbH, ingame™, in™ und incup™ sind eingetragene Markenzeichen der ingame GmbH. Verwendung von Inhalten nur mit schriftlicher Genehmigung.