+ Antworten
Ergebnis 1 bis 16 von 16

Problem mit Wiederholung und Variablen [How-To]

Eine Diskussion über Problem mit Wiederholung und Variablen [How-To] im Forum Maps & Mods. Teil des StarCraft 2-Bereichs; Hallo erst mal, Um bei meiner TD map meine Waves nacheinander spawnen zu lassen will ich eine schleife verwenden mit ...

  1. #1
    Kriegsdienstverweigerer

    Registriert seit
    02.05.2011
    Beiträge
    6

    Zwinker Problem mit Wiederholung und Variablen [How-To]

    Hallo erst mal,
    Um bei meiner TD map meine Waves nacheinander spawnen zu lassen will ich eine schleife verwenden mit folgender Funktion:

    Wiederhole x mal
    variable i = variable i +1
    erzeuge einheit aus variable einheit(i)
    erzeuge variable einheitenanzahl(i) * einheiten


    In worten ich will meine variable i immer um 1 erhöhen und dann meine anderen variablen an dies an passen.
    also soll statt variable: einheit(i) statt i der aktuelle intagerwert eingetragen werden
    da ich in den namen einer variable keine andere variable einbauen kann habe ich nun ein problem

    Nun meine Frage weis jemand wie ich diese Problem lösen bzw. umgehen oder anders lösen kann

    Danke im vorraus

    mfG

    Blackyyy

  2. #2
    Major
    Avatar von Bandito
    Registriert seit
    19.08.2007
    Ort
    bei Berlin
    Alter
    33
    Beiträge
    9.713
    Name
    Sebastian
    Nick
    -Bandito-
    Clans
    SoDsW
    im UF.

    Boa...vom Maps erstellen hab ich leider keine Ahnung. Ich hoffe dezi wird hier noch reinschnuppern und dir helfen können.


  3. #3
    Kriegsdienstverweigerer

    Registriert seit
    02.05.2011
    Beiträge
    6
    Danke dir

    Da wird schon nochmal jemand vorbeischauen

    Ich hab nun noch einen weiter idee falls die beschreibung oben nicht ausführlich genug ist.
    ich will sozusagen ein feld wie bei JAVA erstellen hab leider nur nicht so viel Kenntnisse mit JASS.

  4. #4
    OP-Abuser:D
    Avatar von Mantaza
    Registriert seit
    15.04.2010
    Alter
    24
    Beiträge
    4.460
    Name
    Robin
    Nick
    Mantaza
    yo wilkommen im UF ich persönlich hab wohl auch keine ahnung vom Map editor hab mich nie damit befasst sry
    aber Dezi ist ziemlich viel mit dem Map editor am rum fuchteln vll kann er dir ja helfen der schaut hier bestimmt noch rein

  5. #5
    Administrator
    Avatar von Kasian
    Registriert seit
    05.11.2006
    Ort
    Munich/ ehem.Schweinfurt
    Alter
    27
    Beiträge
    16.387
    Name
    Benjamin
    Nick
    RoAdRuNnNeR
    Clans
    SoDsW, !BAMM!
    dezi ist nen Kacknap was Trigger angeht, der baut nur Meleemaps

    tbH hab ich aber auch krasse Defizite gerade was Variablen angeht, habe versucht die zu vermeiden.
    Bei deinem Beispiel fällt mir spontan aber auch nichts anderes ein.

    Darum würde ich dir, schweren Herzens^^, empfehlen, dass du hier mal rumfragts http://www.sc2mapster.com/
    Die Jungs dort haben echt Ahnung.
    Wollte mich eigentlich auch mehr damit befassen, da aber dieses verkackte Blizzard mit nem Patch meine gesamte Arbeit vernichtet hat habsch keine Lust mehr :/

    Wie auch immer, wäre schön wenn du, solltest du eine Lösung gefunden haben, diese dann hier postest, vielleicht verirren sich ja doch nochmal paar Mapper hierher, wäre schön

    Ach und im UF

  6. #6
    Kriegsdienstverweigerer

    Registriert seit
    02.05.2011
    Beiträge
    6

    Die Lösung .....

    NAja ich machs jetzt auf die stupide art und weise, falls doch jemand ne möglichkeit weis wie ich ein "JAVA-Feld" definieren kann dann immer her damit.

    Hier meine Lösung;
    Verbesserungsvorschläge Erwünscht,
    Für einsteiger vielleicht auch ganz Hilfereich,
    Erklärungen in Klammern (())
    falls was unklar is einfach fragen.

    Wave 001
    Ereignisse
    Timer - Verstrichene Zeit beträgt 30.0 Spielzeit Sek. ( erklärung: erste Wave spawnt nach 30 s.)
    Lokale Variablen
    keine
    Bedingungen
    keine
    Aktionen
    Allgemein - (Aktionen) 25 Mal wiederholen (erklärung: 25 mal 1 einheit spawnen: sonst blocken sie sich gegenseitig, und die globale Variable Supply (intager; von beginn auf 0 gesetzt) um 1 erhöhen, dazu nachher mehr, anzahl an wiederholungen kann auch nach belieben angepasst werden je nach dem wie viele einheiten spawnen sollen )
    Aktionen
    Allgemein - 1.0 Sekunde warten
    Einheit - 1 (beliebige Einheit) für Spieler 15 bei Region 011) mit Ausrichtung 270.00 Grad erstellen (Keine Optionen)(erklärung: beliebige einheit für Spieler 15 : der ist immer feindlich Mitte Region 011 ist einfach eine Region in der die Einheiten gespwnt werden sollen, Ausrichtungswinkel ist eigentlich egal)
    Variable - Supply anpassen + 1
    ---------Wiederholung ende
    Allgemein - (Aktionen) für immer wiederholen
    Aktionen
    Allgemein -Wenn (Bedingung), dann führe (Dann) Aktion aus, sonst führe (Sonst) Aktion aus.
    (erkärung: erstellt eine Bedingung und was passiert wenn sie erfüllt wird und was wenn nicht)
    Falls
    Supply == 0 (erklärungn: wenn supply = erreicht wird die (Dann) Aktion ausgeführt)
    Dann
    Auslöser - Wave 002 starten (erklärung starte wave 002 welche wiederum das gleiche skript wie wave 001 eins besitz jedoch die name angepasst (bsp statt wave 002 ==> 003 .....) für jede weiter Welle muss ein neuer Auslöser erstellt werden)
    Allgemein - Unterbrechen (erklärung: Endlosschleife abbrechen nachdem Auslöser Wave 002 gestarte wird)
    Sonst
    Allgemein - 0.1 Sekunden in Spielzeit warten ( erklärung: wartet 0.1 sekunden und starten dann sie endlosschleife von neu)
    ---------Wiederholung ende


    Nun werden noch ein paar andere Auslöser gebraucht

    - 2 einfache Aulöser die einfach nur die Variable Supply um 1 verkleiner wenn eine Einheit von spieler 15 getöten wird oder entfernt wird. Somit kann man dafür sorgen das die nächste Wave erst dann spawn wenn die erste tot oder am ende verschwunden ist.
    - mehre Aulöser die die Gegner über die map bewegen lassen ( das is ganz einfach überlegt es euch selbst falls ihrs nicht schafft pm me ^^)
    - und zu guter letzt einen aulöser der die Einheiten entfernt die das ende der map errreicht haben.


    So das ganze wurde jetzt doch länger als ich dachte aber villeicht hilfts ja jemand .....
    oder auch nicht
    Hab auch noch 4 Screens angehangen da sollte es wesentlich besser zu sehen sein

    mfG
    Blackyyy
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	screen 001.JPG 
Hits:	17 
Größe:	59,7 KB 
ID:	76187   Klicke auf die Grafik für eine größere Ansicht 

Name:	Screen 002.JPG 
Hits:	5 
Größe:	32,0 KB 
ID:	76188  

    Klicke auf die Grafik für eine größere Ansicht 

Name:	Screen 003.JPG 
Hits:	7 
Größe:	27,5 KB 
ID:	76189   Klicke auf die Grafik für eine größere Ansicht 

Name:	Screen 004.JPG 
Hits:	5 
Größe:	26,9 KB 
ID:	76190  


  7. #7
    Administrator
    Avatar von Kasian
    Registriert seit
    05.11.2006
    Ort
    Munich/ ehem.Schweinfurt
    Alter
    27
    Beiträge
    16.387
    Name
    Benjamin
    Nick
    RoAdRuNnNeR
    Clans
    SoDsW, !BAMM!
    Sehr geil, danke dir
    Hoffe du stellst die Map hier rein wenn sie fertig ist

  8. #8
    Kriegsdienstverweigerer

    Registriert seit
    02.05.2011
    Beiträge
    6
    Mit sicherheit dauert, haber noch ne gnaze zeit bin nämlich bald erst mal en woche weg aber dannach ^^

  9. #9
    Kriegsdienstverweigerer

    Registriert seit
    06.05.2011
    Beiträge
    4
    Ich möchte dir noch eine Alternative vorschlagen, da deine Methode doch sehr aufwändig ist in meinen Augen
    Zunächst einmal brauchst du 3 Globale Variablen (Namen frei wählbar):

    CreepTyp ist eine Einheitentyp/Unit Type Variable mit einem Haken bei "Array" (bin mir nicht sicher obs in der deutschen Version ebenso heißt) mit der "Size" von 25 (Dies entspricht der Anzahl der Level, kannst du nach deinem belieben wählen).
    Sieht im Editor bei mir so aus:

    "CreepNum" ist ein Integer und ebenfalls ein Array mit derselben Größe wie "CreepTyp", Level ist auch ein Integer aber _kein_ Array.

    Nun brauchen wir einen SpawnTrigger:

    Der Ereignisse/Event ist in dem Fall freigelassen, da kannst du einsetzen was du gerne möchtest
    Zur Erklärung:
    Zum einen wird bei dieser Variante bedingt durch die For-each-Schleife eine Integervariable benötigt. Da wir dafür auf keine Globale-Variable sondern auf eine Lokale zurückgreifen wollen, wird eine Lokale-Variable "i" (integer) definiert. Anschließend wird unter Allgemein die Schleife gesucht, und im Variablenfeld "i" ausgewählt. Starten sollte die Schleife bei 1 und Enden sollte diese bei "CreepNum", Increment kann bei 1 belassen werden. Nun wird er noch bei CreepNum einen Index haben wollten dort wählst du die Variable Level aus (Erklärung dazu später). Die Schleife soll dabei jeweils eine Einheit von dem Wert die die Variable "CreepTyp" für den Index Level hat erzeugen und diese "Last Created unit" wird anschließend mit einem "Move" befehl dazu genötigt sich zu bewegen. Zum abschluss noch ein wait damit alle nicht instant spawnen.

    Soweit ist der Trigger aber noch nicht funktionsfähig. Damit überhaupt Creeps spawnen müssen wir den Variablen "CreepTyp" und "CreepNum" noch einen Wert zuweisen. Dazu erstellen wir einen weiteren Trigger "Creeps zuweisen":

    Als Event hab ich "Map initialization" gewählt, da dieser Trigger mit als erstes ausgeführt werden _muss_! Anschließend werden den Variablen "CreepTyp" und "CreepNum" die jeweiligen Werte mit dem Index zugewiesen. [1] = Level 1; [2] = Level 2 und so weiter. Dabei gibt "CreepTyp" immer die Einheit die in dem jeweiligen Level erzeugt werden soll an und "CreepNum" immer wie viele erzeugt werden sollen.

    Um festzustellen, ob alle "Creeps" tot sind kann dann folgender Trigger verwendet werden:

    Der Trigger löst damit jedesmal aus, wenn sich das Supply von Spieler 9 ändert und vergleicht dann, ob dies gleich 0 ist. Sollte dies der Fall sein, wird die Variable Level um eins Erhöht und es könnte die nächste Welle spawnen oder sonstige Aktionen folgen. Aufpassen musst du allerdings bei Einheiten wie dem Zergling, wo zwei Einheiten 1 Supply kosten (ich würd daher die Kosten auf 1 Supply erhöhen pro Stück)

    Hoffe das ist alles soweit klar wie ich das meine, falls du dazu noch fragen hast versuch ich die gerne zu beantworten Der Vorteil daran ist das du wesentlich weniger Trigger benötigst, dir damit eine Menge arbeit sparst und das ganze auch übersichtlicher werden sollte.

    Eine funktionsfähige Version der Map kanns du hier bekommen:
    Download

  10. #10
    Kriegsdienstverweigerer

    Registriert seit
    02.05.2011
    Beiträge
    6
    Danke dir, so hatte ich das auch eigentlich geplant, hab aber leider die "JAVA-FELD" möglichkeit nicht gefunden.
    Werd ich dannn gleich mal umsetzen.

    Eine frage habe ich noch.
    Wie schaffe ich es das die nächste wave nicht instant spawnt.
    Muss ich dazu einen wait befehl vor die for-each-Schleife setzten, denn innerhalb wäre ja sinnlos ^^

    Trotzdem großten dank hast mir viel schreibarbeit erspart.
    Geändert von Blackyyy (08.05.2011 um 12:53 Uhr)

  11. #11
    Administrator
    Avatar von Kasian
    Registriert seit
    05.11.2006
    Ort
    Munich/ ehem.Schweinfurt
    Alter
    27
    Beiträge
    16.387
    Name
    Benjamin
    Nick
    RoAdRuNnNeR
    Clans
    SoDsW, !BAMM!
    Hey Skanjin im UF, schön paar neue Mapper vorzufinden

  12. #12
    Administrator
    Avatar von freezy
    Registriert seit
    26.09.2002
    Ort
    Dark Citadel
    Alter
    29
    Beiträge
    59.449
    Nick
    freezy
    Clans
    SoDsW
    Blackyyy und Skanjin erhalten beide eine Strategiemedaille für ihre detaillierten Ausführungen zum Worldbuilder.

  13. #13
    Kriegsdienstverweigerer

    Registriert seit
    06.05.2011
    Beiträge
    4
    Das ist gar kein Problem, jedoch würde ich statt Wait lieber Timer verwenden, die lassen sich schön anzeigen und man kann allgemein besser mit ihnen Arbeiten. Als Resultat sollte dann sowas Ingame entstehen:

    In der von mir verlinkten Map hatte ich das ja bereits umgesetzt, aber hier noch einmal die nötigen Schritte:

    Zuerst musst du wieder zwei normale Variblen anlegen zum einen eine Variable vom Typ "Timer" und die andere vom Typ "TimerWindow" (könnte in der deutschen Version anders heißen):


    Anschließend musst du zuerst einmal ein TimerWindow erstellen und am besten auch gleich den ersten Timer auslösen. Die benötigten Aktionen findest du in der Kategorie "Timer" (deutsch kann mögl. wieder anders heißen) und Zeitwerte und Text kannst du ja nach belieben frei wählen. (Als Ereignis würde ich Map Initialization oder Time Elapsed wählen). Um später bequem auf das von dir erstellte Timer Window zugreifen zu können, musst du die Variable noch manuell zuweisen mit einem "Set Variable". Sollte dann so in etwa aussehen:


    Anschließend müssen die bestehenden Trigger noch angepasst werden, dabei beginnen wir mit dem Spawn Trigger. Hier muss praktisch nur das Ereignis "Timer - Elapsed" mit der von dir erstellten und gestarteten Timer-Variable hinzugefügt werden. Unter Aktionen kann man noch "Timer - Hide Timer Window" hinzufügen, da man sonst oben in der Ecke den Timer bei 0:00 stehen hat (also was rein kosmetisches ):


    Ebenfalls muss der NextLevel-Trigger geändert werden, damit wir alles von selbst "rennt". Dazu werden zwei Aktionen eingefügt. Zum einen muss der Timer erneut gestartet werden. Dazu wird die Aktion "Timer-Start" verwendet und solltest du das "Timer-Window" versteckt haben, würd ich das natürlich wieder anzeigen lassen "Timer - Show/Hide Timer Window".


    Solltest du natürlich ein Wait vorziehen dürfte dies vor der Schleife ausreichen.

    @ Kasian:
    Danke

  14. #14
    Mac Moneysac
    Avatar von dezi
    Registriert seit
    05.11.2006
    Alter
    33
    Beiträge
    24.923
    Du wirst doch nicht etwa doch im Editor rumpfuschen Ingo? OO

    The night is dark and full of terrors.

  15. #15
    Kriegsdienstverweigerer

    Registriert seit
    06.05.2011
    Beiträge
    4
    Zitat Zitat von dezi Beitrag anzeigen
    Du wirst doch nicht etwa doch im Editor rumpfuschen Ingo? OO
    Hab ich schon längst bzw bin noch dabei

  16. #16
    Kriegsdienstverweigerer

    Registriert seit
    02.05.2011
    Beiträge
    6
    Danke dir ein weiteres mal,
    Sehr deailiert (wie auch immer man das schreibt^^)

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •