PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Multiple-Choice Problem



Tar-Meneldur
23-01-05, 06:07
Hi,
also: ich erstelle im Dialog-Editor eine neue Topic, nennen wir sie einfach mal "Traum". Ich mache jetzt den ersten Text dazu, zb: "Ihr hattet also einen Traum, na und?" Bei Results gebe ich: Choice "Den Traum genau erzählen" 1
ein. Beim nächsten Text (zb. "Ach so, das ist etwas anderes.") gebe ich bei den Variablen "Function Choice = 1" ein. So weit so gut.

Wenn ich den Dialog jetzt einem NPC zuordne (mit dem Script AddTopic "Traum") und auf "Traum" klicke, kommt der erste Text. Jetzt drücke ich auf "Den Traum genau erzählen". Und was kommt? Wieder der erste Text, bei dem ich ihm wieder den "Traum erzählen" darf. Das wird also ne Endlosschleife. Was mache da falsch??? http://www.ubisoft.de/smileys/5.gif


Noch zwei Fragen, um nicht gleich einen neuen Thread aufmachen zu müssen:
1)Wie muss ein Script lauten, der, wenn der Player das erste mal nach der Aktivierung des PIs rastet, einen Traum auslöst (also eine MessageBox, bei der man auf "OK" klickt http://forums.ubi.com/infopop/emoticons/icon_wink.gif)?

2) Wie öffne ich globale Scripts??? http://www.ubisoft.de/smileys/snow.gif

Tar-Meneldur
23-01-05, 06:07
Hi,
also: ich erstelle im Dialog-Editor eine neue Topic, nennen wir sie einfach mal "Traum". Ich mache jetzt den ersten Text dazu, zb: "Ihr hattet also einen Traum, na und?" Bei Results gebe ich: Choice "Den Traum genau erzählen" 1
ein. Beim nächsten Text (zb. "Ach so, das ist etwas anderes.") gebe ich bei den Variablen "Function Choice = 1" ein. So weit so gut.

Wenn ich den Dialog jetzt einem NPC zuordne (mit dem Script AddTopic "Traum") und auf "Traum" klicke, kommt der erste Text. Jetzt drücke ich auf "Den Traum genau erzählen". Und was kommt? Wieder der erste Text, bei dem ich ihm wieder den "Traum erzählen" darf. Das wird also ne Endlosschleife. Was mache da falsch??? http://www.ubisoft.de/smileys/5.gif


Noch zwei Fragen, um nicht gleich einen neuen Thread aufmachen zu müssen:
1)Wie muss ein Script lauten, der, wenn der Player das erste mal nach der Aktivierung des PIs rastet, einen Traum auslöst (also eine MessageBox, bei der man auf "OK" klickt http://forums.ubi.com/infopop/emoticons/icon_wink.gif)?

2) Wie öffne ich globale Scripts??? http://www.ubisoft.de/smileys/snow.gif

chris_tm
23-01-05, 07:00
Die Dialogtexte bzw. ihre Bedingungen (Speaker Conditions) werden von Oben nach Unten gecheckt, d.h., dass der oberste Text, dessen Bedingungen zutreffen im Spiel erscheint.

In Deinem Fall hat die Frage keine Bedingung. Deswegen wird sie immer erscheinen. Alle anderen Texte, die darunter stehen werden ignoriert.

Deswegen müssen die Antworten immer über der Frage stehen.
Man kann die Texte mit der rechten und linken Pfeiltaste auf der Tastatur nach oben bzw. unten verschieben.

Zu 1:
Dazu muss man erstmal sagen, dass sowas ein globales Script sein muss, wenn der Traum unabhängig vom Ort, an dem sich der Player aufhält erscheinen soll.

Dann stellt sich die Frage wie man das globale Script starten soll.
Mit installiertem Tribunal oder Bloodmoon hat man die Möglichkeit unter "GamePlay" sogenannte "Start Scripts" einzutragen, wobei die Scripts bei jedem Spielstart gestartet werden.

Das Script könnte dann so aussehen:
<pre class="ip-ubbcode-code-pre">Begin fq_sleep_global

short doOnce

if ( doOnce == 1 )
StopScript fq_sleep_global
Return
endif

if ( GetPCSleep == 0 )
Return
else
WakeUpPC
MessageBox "blablablabla" "Ok"
set doOnce to 1
endif

End</pre>

Ohne eines der AddOns muss man das globale Script entweder von einem Dialog oder von einem lokalen Script aus starten.

Man könnte an einem Ort an dem der Player garantiert ab und zu vorbeischaut wie z.B. Balmora einen unsichtbaren Activator mit einem Script hängen, das das globale script startet:

<pre class="ip-ubbcode-code-pre">Begin fq_scriptstarter

short doOnce

if ( doOnce == 1 )
Return
endif

StartScript fq_sleep_global02
set doOnce to 1


End</pre>

Da so das globale Script nur ein einziges mal (statt bei jedem Spielstart) gestartet wird kann das globale Script gekürzt werden:

<pre class="ip-ubbcode-code-pre">Begin fq_sleep_global02

if ( GetPCSleep == 0 )
Return
else
WakeUpPC
MessageBox "blablablabla" "Ok"
StopScript fq_sleep_global02
endif

End</pre>

Zu 2:
Man öffnet globale Scripts genauso wie lokale Scripts http://forums.ubi.com/infopop/emoticons/icon_wink.gif
GamePlay-&gt; Edit Scripts-&gt; und dann auf den gelben Ordner klicken um die Scriptliste zu öffnen.
Da es sehr viele Scripts gibt ist es sehr hilfreich den Namen des Scripts zu kennen.

Tar-Meneldur
25-01-05, 10:58
Vielen Dank , das hat alles wunderbar funktioniert http://forums.ubi.com/infopop/emoticons/icon_biggrin.gifhttp://forums.ubi.com/infopop/emoticons/icon_biggrin.gifhttp://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

Ich hätte da noch ein Problem mit einem Script:
<pre class="ip-ubbcode-code-pre">begin xxx
Short nolore
Short doOnce
Short state

if ( MenuMode == 1 )
return
endif

if ( doOnce == 0 )
disable PlayerControls
MessageBox "Wer ist das denn?"
AITravel 1447, 1697, 694
set doOnce to 1
endif

if ( GetAIPackageDone == 1 )
set state to 10
endif

if ( state == 10 )
ForceGreeting
endif

End xxx</pre>

Wenn der Spieler jetzt in die Zelle kommt, erscheint zwar die MessageBox, der NPC verschwindet aber. Wenn ich oben noch <pre class="ip-ubbcode-code-pre">
if ( CellChanged == 1 )</pre> oder <pre class="ip-ubbcode-code-pre">
if (GetDistance Player =&lt;200 )</pre>
eingebe, funktioniert der Script überhaut nicht (es kommt auch keine Fehlermeldung oder so was).

chris_tm
25-01-05, 13:08
Seltsam, dass da keine Fehlermeldung kommt.
Das Programm scheint einfach das "disable" auszuführen und "PlayerControls" zu ignorieren.

Die Funktion heisst nicht
<span class="ev_code_RED">disable PlayerControls</span>
sondern
<span class="ev_code_GREEN">DisablePlayerControls</span> http://forums.ubi.com/infopop/emoticons/icon_wink.gif

Enablest Du die PlayerControls dann im Dialog wieder?

Edit:
übrigens wird das ForceGreeeting so wie es jetzt ist jedesmal ausgeführt sobald der Dialog beendet wird weil ja "state" den Wert 10 behält.
Also müsste man entweder set state to 0 dazuschreiben oder aber besser die Variable gleich ganz weglassen.
Da GetAIPackageDone nur für einen frame 1 returned braucht man keine extra Variable:
<pre class="ip-ubbcode-code-pre">if ( GetAIPackageDone == 1 )
ForceGreeting
endif </pre>