| Autor | 
  
	
   | 
 
	 
  | 
	
   | 
  
	
	 
		
	  | Reaktivierbare Ereignisse trotz "never then" | 
	     | 
      
	 
   | 
 
 
  | 
	
   | 
  
	Manchmal möchte man ein Ereignis auslösen das erst nur ein mal durchlaufen soll und dann zu einem selbst bestimmten Zeitpunkt noch mal funktionieren soll... oder eben auch öfter. Klar, man könnte das Ereignis erneut in die Wac schreiben oder man verwendet die Möglichkeit einem Script einen Namen zu geben. Dieses Script kann man das jederzeit zurücksetzen, als wäre es nie durchlaufen. An einem einfachen Beispiel erklärt. Ich habe eine Text der links oben eingeblendet werden soll... Fall 1 (immer wieder aufs Neue) und Fall 2 (wenn eine Variable einen bestimmten Wert erhält der durch ein anderes Ereignis ausgelöst wird. 
 
Fall 1: 
if [info] past(1) and never then 
    consol("AW2_Lost in Desert") 
    consol("Map made by Sleepless") 
    consol("wish you much fun and good luck") 
endif 
if elapse(600) then 
    reset(info) 
endif 
 
Eigentlich würde dieses Ereignis nur einmal ausgelöst (Never then) und dann nie wieder. Ich vergebe diesem Ereignis hier den Namen "info" (muss in eckigen Klammern stehen!). Das Ereignis läuft einmal durch. Nach 600 Sekunden geben ich den Befehl dass das Ereignis "info" zurückgesetzt wird. Für das Programm wurde es also noch nicht ausgelöst und es startet erneut. dies wiederholt sich bis zum Ende der Map. 
 
Fall 2: 
if [info] past(1) and never then 
    consol("AW2_Lost in Desert") 
    consol("Map made by Sleepless") 
    consol("wish you much fun and good luck") 
endif 
if V1 == 1 then 
    reset(info) 
    V1 = 0 
endif 
 
Gleiches Spiel wie oben, nur dass ich das Zurücksetzen der Ereignisses "info" abhängig mach von der Variable V1 - die durch irgendein anderes Ereignis in der Wac ausgelöst wird. Direkt nach dem Zurücksetzen, ändere ich die Variable V1 wieder auf 0. Ansonsten würde das Zurücksetzen jede Sekunde(jeden Durchlauf der Wac) ausgeführt und somit ständig erscheinen. 
 
Um ein anderes Beispiel zur Verwendung zu zeigen, hier ein Script aus meiner "AW2 Rabbit Punch 2" bei der ein Hund immer das Bellen anfängt wenn ein Spieler in die Nähe einer Haustür kommt. Kleiner Wachhund eben.   
 
//////////////////////////////////////////// dog 
PLOOP 
    if ssnnearssn(player,132570,10) enter 
        v20 = 0 
        if [dog] !v14 and never then 
        ssnwave(132570,"rp2_dogattack.wav",700) 
        endif 
        if chain(10) then 
            reset(dog) 
            v20 = 1 
        endif 
    endif 
END 
 
 
Braucht man einen bellenden Hund in der Map? Nein, der ist nicht spielentscheidend, aber ich steh einfach auf solche Details   
 
Letztendlich sollen diese Scripts nur zeigen wieviele Möglichkeiten man wirklich hat... und das sind wahnsinnig viele - nur begrenzt durch die eigene Fatasie. 
	 
 
 
 
    | 
  
 
  Mittlerweile kann ich schon ein bissl was   | 
  
 
	 
 
Dieser Beitrag wurde 1 mal editiert, zuletzt von sleepless am 09.01.2019 - 09:32.
   | 
 
 
  | Beitrag vom 09.01.2019 - 09:20 | 
  
	
   | 
 
 
  | 
	
   | 
  
	
   | 
 
 
  
	
	 
	  |  116 Beiträge  - Gelegenheitsposter
	   | 
	  
	 
	    | 
	  
	 
   | 
  
	Da ich es ja nicht so habe mit Variablen und ich mich da erst immer durchkämpfen muss, habe ich gleich mal eine Frage. Was bedeutet !v14 ? Wieso muss da ein ! davor stehen.  
  
	 
 
 
 
    | 
  
 
  | Laechle, denn du kannst sie nicht alle toeten. | 
  
 
	
   | 
 
 
  | Beitrag vom 09.01.2019 - 21:25 | 
  
	
   | 
 
 
  | 
	
   | 
  
	
   | 
 
 
  | 
	
   | 
  
	Zitat Original geschrieben von Raven 
 
Da ich es ja nicht so habe mit Variablen und ich mich da erst immer durchkämpfen muss, habe ich gleich mal eine Frage. Was bedeutet !v14 ? Wieso muss da ein ! davor stehen.  
 
 |  
 
  
 
Es gibt bei Variablen immer unterschiedliche Schreibweisen, eine mit Kürzel oder eben mit Zeichen. Welche dieser Arten man wählt, bleibt einem selbst überlassen - in Funktion unterscheiden sie sie nicht.  
In dem Fall von "!"(Ausrufezeichen) heißt das nichts anderes als not(nicht). Diese not (!) kann vor allem möglichen stehen (z.B. auch vor einem "=", also "!=" - was auch als "ne" schreibbar wäre (not equal/ ungleich) Stellt man also eine Abfrage nach !v14 (not v14), fragt man ab ob die Variable v14 einen Wert hat. Also alles andere als 0. Eine Variable hat bei Mapstart immer erst mal den Wert 0. 
Ich verwende diese Abfrage (z.B. beim bellenden Hund) um das Event des Hundes ein und ausschalten zu können. Wie im anderen Post nachlesbar, verwende ich ja sehr oft Hintergrundmusik, die im Intervall abgespielt wird. Würde nun ein Hintergrundmusikevent laufen und ein Spieler würde zur Haustüre gehen, bricht das Bellen des Hundes die Hintergrundmusik ab. Zwar nur für dieses eine mal, aber das könnte theoretisch jedesmal passieren wenn ein Spieler an der Haustüre vorbei geht. Ich setze also V14 in dem anderen Event kurzzeitig auf 1, für das Hundeevent bedeutet das V14 ist nicht mehr ohne Wert und der Hund bellt nicht. Nach dem Musikevent schalte ich v14 wieder auf 0 und der Hund darf wieder bellen. 
 
Es gibt viele dieser Schreibweisemöglichkeiten. Hier ein paar davon: 
equal (eq) ( == ) 
not equal (ne) (!=) 
genauso gibt es für "<", ">", ">=", und "<=" die Abkürzungen "lt"(lower than", "gt"(greater than), "ge"(greater equal), und "le"(lower equal) 
 
Setze Variable auf Wert # (set(var,#) ) =# (wobei # für einen beliebigen Wert steht) 
erhöhe Variable  um Wert # (add(var,#) ) (+# wobei # für einen beliebigen Wert steht) 
reduziere Variable um Wert # (sub(var,#) ) (-# wobei # für einen belibigen Wert steht) 
erhöhe variable um (1 inc(var) ) (+1) 
reduziere Variable um 1 (dec(var) ) (-1) 
 
Das liesst sich jetzt gerade vllt etwas verwirrend, doch im Endeffekt ist es sehr einfach: 
 
Leg dich auf eine Schreibweise fest und du hast es in einer Stunde drauf. 
 
Ich könnte also das gleiche Script auf 2 Weisen schreiben. 
Schreibweise 1: 
If V14 eq 0 and never then 
add(v10,5) 
endif 
 
Schreibweise 2: 
if v14 == 0 and never then 
v10 = V10 + 5 
endif 
 
Halt, ich berichtige mich - es geht noch eine weitere Schreibweise da wir ja abfragen ob v14 den Wert "0" hat (also keinen Wert), ginge hier sogar noch das Ausrufezeichen: 
if !v14 and never then 
v10 = V10 + 5 
endif 
  
	 
 
 
 
    | 
  
 
  Mittlerweile kann ich schon ein bissl was   | 
  
 
	 
 
Dieser Beitrag wurde 2 mal editiert, zuletzt von sleepless am 10.01.2019 - 11:08.
   | 
 
 
  | Beitrag vom 10.01.2019 - 08:11 | 
  
	
   |