PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dialog (zw. NPC und Spieler)


Cyborg11
07.10.2008, 19:44
Ich hab vor eine kleine Mission zu machen in der man sich mit anderen Söldnern unterhalten kann und dabei mehrer Auswahlmöglichkeiten hat.

So schaut mein Skript aus:
; ************************************************** **************
; Script file for Armed Assault
; Created by: Cyborg11
; ************************************************** **************

~4

#Start
? (weiter==0) : goto "dialog";
? (weiter==1) : goto "dialog1";

;Startdialog
#dialog
titletext ["Was willst du?! Ich gebe dir 10 Sekunden um zu antworten!", "plain"];
~2
auf = player addaction ["Ich bin wegen einem Auftrag hier.", "dialog.sqs"];
~3
goto "weiter";

#weiter
goto "dialog1";

#dialog1
player removeaction auf;
titletext ["Wir haben keinen Auftrag für dich und jetzt verzieh dich!","plain"];
Nur es funktioniert nicht so wie ich will =( Ich will nicht mehrere Skripte benutzen nur um einen Dialog zwischen einem NPC und dem Spieler zu erstellen, deshalb wird bei der addaction auch nochmal das Dialog.sqs Skript aufgerufen.

Problem: Wenn ich meine Aktion anklicke, dann kommt wieder der Anfangstext mit "Was willst du?!" und nicht der Text beim Abschnitt #dialog1. Obwohl ich ja mit den goto's und den Stoppzeiten das eigentlich ausgleichen müsste ..

Wüsste jemand wie ich so einen Dialog mit Auswahlantwortmöglichkeiten des Spielers erstellen kann ohne dass ich mehrere Skripte brauche? Wenn es doch nicht mit einem Skript geht, dann muss ich mir etwas einfallen lassen, weil bei mir werden es dann wieder nur übelst viele Skripte ^^

Ich hoffe, ihr wisst was ich meine und ich hoffe auch, dass ihr mir helfen könnt :)

Bedanke mich schonmal im Voraus :cool:

Xeno
07.10.2008, 20:06
Ersetze


auf = player addaction ["Ich bin wegen einem Auftrag hier.", "dialog.sqs"];
mit


auf = player addaction ["Ich bin wegen einem Auftrag hier.", "dialog.sqs", 1];
(Beachte die zusätzliche 1 hinter "dialog.sqs".)

Und am Anfang des Scripts:

weiter = _this select 3;

Aufruf des Scripts beim ersten mal z.B. mit:

auf = player addaction ["Ich bin wegen einem Auftrag hier.", "dialog.sqs", 0];
Es ist bei addAction möglich, mehrere Parameter zu übergeben, also nicht nur den Action Menü Eintrag und das Script.

Siehe auch hier:

Category:Scripting Commands - Bohemia Interactive Community (http://community.bistudio.com/wiki/Category:Scripting_Commands)

Xeno

Cyborg11
07.10.2008, 20:50
Ich will aber das der Spieler die Action erst nach dem "Was willst du?!"-Text kommt ^^ Muss dann 0 oder 1 hin? Und was bringen die Argumente? Müsste dort nicht eigentlich weiter = 1 oder sowas stehen? Der erste Skriptstart wird durch einen Auslöser ausgelöst, dann kommt der Text, den der Söldneranführer plappert (z.Z. "Was willst du?! ...") und dann soll der Spiel die Auswahlmöglichkeit haben (z.Z. nur eine Möglichkeit).

Warum eigentlich weiter = _this select 3 ? Skript wird ja per Auslöser gestartet und in der init ist die Variabel weiter mit 0 definiert ;)


Ah! Jetzt verstehe ich! Wenn ich also weiter = _this select 3 nehme, dann nimmt weiter den Wert an, den man als Argument dort gesetzt hat. Das Problem ist halt nur, dass es per Auslöser ausgelöst wird ;)

Hab mal was neues probiert:
~4

#Start
? (weiter==0) : goto "dialog";
? (weiter==1) : goto "dialog1";

#dialog
titletext ["Was willst du?! Ich gebe dir 10 Sekunden um zu antworten!", "plain"];
~2
auf = player addaction ["Ich bin wegen einem Auftrag hier.", "dialog.sqs"];
~3
goto "weiter";

#weiter
weiter = 1;
goto "Start";

#dialog1
player removeaction auf;
titletext ["Wir haben keinen Auftrag fuer dich und jetzt verzieh dich!","plain"];

Problem: Nun wird der Abschnitt dialog1 2x ausgeführt, also ich kriege 2x die Meldung, dass die keinen Auftrag für mich haben. Was ist denn jetzt wieder falsch? =(

Cyborg11
08.10.2008, 14:02
Neues probiert:

Auslöseraktivierung:
auf2 = player addaction ["Hey!", "dialog.sqs",0,0];

dialog.sqs
#Start
~2
weiter = _this select 3;
varexit = _this select 4;
hint format ["weiter: %1\nvarexit: %2", weiter, varexit];
player removeaction auf2;
? (weiter==0) : goto "dialog";
? (weiter==1) : goto "dialog1";

#dialog
titletext ["Was willst du?! Ich gebe dir 10 Sekunden um zu antworten!", "plain"];
~2
auf = player addaction ["Ich bin wegen einem Auftrag hier.", "dialog.sqs",1,1];
hint format ["weiter: %1\nvarexit: %2", weiter, varexit];
? (varexit == 1) then {exit};
goto "Start";

#dialog1
player removeaction auf;
titletext ["Wir haben keinen Auftrag für dich und jetzt verzieh dich!","plain"];

Funzt auch nicht = (
1. Wird kein Wert bei varexit angezeigt (<null> wird angezeigt)
2. Das Skript fängt immer wieder von ganz vorne an, anstatt den wert von weiter auf 1 zu setzen um zum 2. Dialog zu kommen <.<

Xeno
08.10.2008, 15:10
Du denkst falsch :)

Number (http://community.bistudio.com/wiki/Number) = Unit (http://community.bistudio.com/wiki/Object) addAction ["title", "filename", arguments, priority, showWindow, hideOnUse, "shortcut"]

arguments kann entweder ein Wert sein oder wenn Du mehrere Werte übergeben möchtest, dann als Array. Sprich, die arguments sind immer nur _this select 3. Wenn Du zwei Werte übergeben möchtest, dann [0,1] und das _this select 3 ist in diesem Fall ein Array welches auch wieder mit select x ausgelesen werden muss.

Der vierte Parameter den Du übergibst, ist bereits die priority mit der die action im Menü eingefügt wird.

Lange Rede, kurzer Sinn... So sollte es gehen...

In den Auslöser folgendes rein:

auf = player addaction ["Hey!", "dialog.sqs",0];
dialog.sqs:

~2
_weiter = _this select 3;
player removeaction auf;
? (_weiter==0) : goto "dialog";
? (_weiter==1) : goto "dialog1";

#dialog
titletext ["Was willst du?! Ich gebe dir 10 Sekunden um zu antworten!", "plain"];
~2
auf = player addaction ["Ich bin wegen einem Auftrag hier.", "dialog.sqs",1];
exit

#dialog1
titletext ["Wir haben keinen Auftrag für dich und jetzt verzieh dich!","plain"];


Xeno