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 - 10:32.
|
Beitrag vom 09.01.2019 - 10: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 - 22: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 - 12:08.
|
Beitrag vom 10.01.2019 - 09:11 |
|