Warten auf ein bestimmtes Ereignis?

Hier ist der ideale Ort um über Scripts und Mods für X²: Die Bedrohung zu diskutieren.

Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum

User avatar
lenny5000
Posts: 892
Joined: Mon, 29. Sep 03, 19:06
x3

Warten auf ein bestimmtes Ereignis?

Post by lenny5000 »

Hi, ich habe eine kleine Frage zu den Scripten.
Und zwar kriege ich es einfach nicht gebacken, auf ein bestimmtes Ereignis zu warten und bis dahin das Script zu pausieren. :(

Also ich will erst eine Nachricht schicken (klappt :wink: ), dass man zu Kristallfabrik alpha in Roter Schein fliegen soll und dann dafür 100cr kriegt.

Ich weiß, das macht jetzt keinen richtigen Sinn, aber das ist jetzt mein Beispiel. So, und jetzt weiß ich nicht, wie man das macht, dass das Script pausiert, bis man in der Kristallfabrik ist. Ich hab' schon auf einen Hinweis hin ein "if" probiert und auf meinen eigenen Instinkt hin eine "while not"-Prozedur; Das erste hat nicht geklappt und beim zweiten ist das Spiel abgestürzt, weil anscheinend die while-prozedur nicht im Hintergrund weiterläuft.
Außerdem weiß ich auch lider nicht, wie man abfragt, ob das Schiff an einer bestimmten Station angedockt ist, sondern nur, ob es an irgendeiner Station angedockt ist.

Ich hoffe ihr könnt und wollt mit helfen
Greets
lenny5000
User avatar
o1ofco2
Posts: 1035
Joined: Mon, 2. Feb 04, 20:30
x4

Post by o1ofco2 »

Hi lenny5k :)

das ist ganz einfach (ist mir ausversehen passiert... das script hat gestoppt und ich hab mich gewundert warum es nicht so funzt wie es vorher gefunzt hat :wink: )

also:
alle befehle die mit einem "@" anfangen machen sowas...

bsp.
auszug aus GothicKs SDS-Script (Danke @ GothicK :mrgreen: )

Code: Select all

066 @ =[THIS] ->fly to station$ziel1 *wartet bis es angekommen ist*
067   if[THIS] ->is docked *jetzt gehts weiter (wenns angekommen ist)*
068   $aktVerlang =$ziel1 ->get free amount of ware$Warein cargo bay
069   $lieferbar =[THIS] ->get amount of ware$Warein cargo bay
070   skip if$lieferbar>$aktVerlang
071   $aktVerlang =$lieferbar
072   =[THIS] ->unload$aktVerlangunits of$Ware
073 @ =wait10000ms
074   $lieferbar =[THIS] ->get amount of ware$Warein cargo bay
075   if not$lieferbar>1
076   set script command:COMMAND_RETURN_HOME
077 @ =[THIS] ->fly to home base
078   goto labeldeliver2
079   
ich hoffe das hilft dir weiter...

viel spass :x2:
User avatar
lenny5000
Posts: 892
Joined: Mon, 29. Sep 03, 19:06
x3

Post by lenny5000 »

Naja, es soll ja nicht automatisch dahin fliegen, sondern der Spieler soll dahin fliegen, Und so wie ich das bei deinem Script sehe, fliegt da das Schiff automatisch hin und das Warten ist in der Hinfliegprozedur drin. Bloß bei mir gibt's ja keine Hinfliegprozedur, weil man das Schiff selber steuert.
Aber mein Problem ist damit immer noch nicht gelöst :(
Trotzdem Danke!
Greets
lenny5000
User avatar
o1ofco2
Posts: 1035
Joined: Mon, 2. Feb 04, 20:30
x4

Post by o1ofco2 »

ahso... :oops:

dann probierst doch mal nur mit:

Loop:
if not [PLAYERSHIP] ->is docked
@ =wait10000ms
goto Loop
end

damit müsste es klappen :wink:
allerdings weis ich nicht was passiert wenn der spieler an einer anderen station andockt (musst warscheinlich noch eine bedingung reinbasteln die nur deine zielstation erfüllen kann (beim andocken dann)

oder mit dem skip-befehl (aber damit kenne ich mich noch net so aus)
User avatar
GothicK
Posts: 248
Joined: Fri, 6. Feb 04, 14:47
x3tc

Post by GothicK »

Du darfst das Script aber nicht von einem Schiff ausführen lassen.
In globalen Scripts kannst du solche wait-Befehle geben.
Lässt du das Script aber von einem Schiff o.ä. ausführen pausiert dieses..

IMO müsste die, von o1ofco2 genannte, ->is docked Variante klappen, wenn sie in einem globalen Script abläuft.
Solong, GothicK
User avatar
lenny5000
Posts: 892
Joined: Mon, 29. Sep 03, 19:06
x3

Post by lenny5000 »

Also ich hab' jetzt gemacht:

Code: Select all

001 send incoming message 'flieg mal zu ner station': show it [TRUE]
002 while not (is landed [PLAYERSHIP])
003     @ wait 10000
004 end
005 send incoming message 'du hast es geschafft!' show it: [TRUE]
Ich hab' die Zeilen jetzt nicht 1:1 übertragen, weil ich nirgendwo abschreiben konnte, aber ich denke mal, dass man's verstehen kann. Es ist praktisch das selbe was o1ofco2 gesagt hat, nur dass das

Loop:
if not...
goto Loop

durch eine while not Schleife ersetzt ist.
Du darfst das Script aber nicht von einem Schiff ausführen lassen.
In globalen Scripts kannst du solche wait-Befehle geben.
Lässt du das Script aber von einem Schiff o.ä. ausführen pausiert dieses..
Ich weiß bloß leider nicht, was ein globales Script ist :oops:
Naja, auf jeden Fall hat meine Variante funktioniert, jetzt muss ich bloß noch wissen, wie man das macht, dass man nur an einer bestimmten Station die Nachricht kriegt.

Danke euch beiden :)
Greets
lenny5000
User avatar
o1ofco2
Posts: 1035
Joined: Mon, 2. Feb 04, 20:30
x4

Post by o1ofco2 »

einer bestimmten station eine variable zuweisen müsste damit funzen:

Code: Select all

$Home.Of.Light = get sector from universe index: x=1, y=4 
$TCHQ = find station in galaxy: startsector=$Home.Of.Light class or type=Argon Ausrüstungsdock race=Argon flags=null refobj=null serial=null Max.Jumps=0 
if $TCHQ -> exists 
if [Player] -> is docked
...
end
end
hab mir das mal von -bla- ausgeborgt... musst es nur noch für dich passent basteln
damit kannst du eine bestimmte station suchen und finden und diese ist das die variable $TCHQ
musst halt nur die x-y coordinaten bei "= get sector from universe index"
für das system welches du brauchst ändern und mit "= find station in galaxy: startsector=$Home.Of.Light class or type=Argon Ausrüstungsdock race=Argon flags=null refobj=null serial=null Max.Jumps=0" mal nen bissl rumprobieren :o :mrgreen:

viel erfolg :x2:
User avatar
lenny5000
Posts: 892
Joined: Mon, 29. Sep 03, 19:06
x3

Post by lenny5000 »

Und wie frage ich dann ab, dass der Spieler an genau dieser Station gelandet ist? Weil in deinem Script steht - soweit ich das sehe - wieder nur der "is docked" für jede beliebige Station drin.
Und es gibt einfach kein
"is docked at" und "is landed at" :cry:
Greets
lenny5000
User avatar
o1ofco2
Posts: 1035
Joined: Mon, 2. Feb 04, 20:30
x4

Post by o1ofco2 »

ich hab mal ein "DOCKEDAT" gesehen...
müsste da stehen wo du deine variable raussuchen kannst (über null,Number,Variable) gleiche kategorie wie [PLAYERSHIP] und [SECTOR] und so... aber ob das, dass ist was du suchst weis ich net...
User avatar
lenny5000
Posts: 892
Joined: Mon, 29. Sep 03, 19:06
x3

Post by lenny5000 »

Nnein, das war's leider nicht :wink:
Aber als ich's probiert habe, bin ich auf "get distance between ... and ..." gestoßen und das könnte was sein. Leider brauche ich dafür eine while-Schleife und weiß nicht, wie man die so einfach definiert.
Kann man irgendwie
while(getdistance between playership and kristallfab < 800) machen?
Greets
lenny5000

Return to “X²: Die Bedrohung - Scripts und Modding”