World of Gothic Archiv > NWN-Hilfe
BlackJack-Scriptproblem
Seite 1 von 1  1 
04.08.2002, 15:02 #1
therealjoker
Beiträge: 48
BlackJack-Scriptproblem
Ich habe ein BlackJack-Sript geschrieben. Leider funktioniert es nicht richtig. Der NPC soll nämlich immer hintereinander alle Ereignisse ansagen; ich habe versucht, dass durch ActionWait() und DelayCommand()-Befehle zu schaffen, die eine Verzügerung bewirken. Es klappt aber trotzdem nicht.
Voraussetzung für das Spiel ist, dass man ein Gespräch hat, in dem man wählen kann das Spiel zu beginnen und eine Karte zu ziehen. Dabei muss die Variable "spiel" auf 1 gestellt werden.
Also hier ist erstmal der Code:

code\:

//Das eigentlich BlackJack Spiel
void blackjackPC();

void main()
{
//NPC beginnt ein Gespraech
object oPC=GetLastPerceived();
object oNPC=GetObjectByTag("Spieler");
int spiel=0;
ActionStartConversation(oPC, "", FALSE);
int Spiel=GetLocalInt(oPC, "spiel");
if(Spiel==1)
{
ClearAllActions();
blackjackPC();
}
}

//------------------------------------------------------------------------------

void blackjackPC()
{
//Das Spiel Black Jack
object oPC=GetLastPerceived();
int spiel=1;
int Spiel=GetLocalInt(oPC, "spiel");
int Ziehen=Random(8);
int nGes=0;
int bube=0;
int dame=0;
int koenig=0;
string Ges=IntToString(nGes);
while(1)
{
DelayCommand(4.0, SpeakString("Du willst also eine Karte ziehen. Mutig...mutig..."));
switch(Ziehen)
{
//Fallbehandlung
case 1:
//Verhindern, dass man mehr als 4 Buben hintereinander ziehen kann
bube++;
if(bube<=4)
{
nGes=nGes+2;
DelayCommand(4.0, SpeakString("Es ist ein Bube. Damit hast du nun: Ges. Das wird spannend!"));
//Testen, ob der Spieler bereits verloren hat
if(nGes<=21)
{
SetLocalInt(oPC, "spiel", 3);
ActionWait(4.0);
//Gespraech aufrufen, in dem man waehlen kann, noch eine Karte zu ziehen oder nicht
ActionStartConversation(oPC,"", FALSE);
if(Spiel==3)
{
break;
}
else
continue;
}
else
{
SetLocalInt(oPC, "spiel", 2);
DelayCommand(4.0, SpeakString("Hahaha, du hast verloren. Nun bin ich dran!"));
break;
}
}
else
continue;

case 2:
dame++;
if(dame<=4)
{
nGes=nGes+3;
DelayCommand(4.0, SpeakString("Es ist eine Dame. Deine Punktzahl betraegt nun: Ges. Mmmm..."));
if(nGes<=21)
{
SetLocalInt(oPC, "spiel", 3);
ActionWait(4.0);
ActionStartConversation(oPC, "", FALSE);
if(Spiel==3)
{
break;
}
else
continue;
}
else
{
SetLocalInt(oPC, "spiel", 2);
DelayCommand(4.0, SpeakString("Hahaha, du hast verloren. Nun bin ich dran!"));
break;
}
}
else
continue;

case 3:
koenig++;
if(koenig<=4)
{
nGes=nGes+4;
DelayCommand(4.0, SpeakString("Es ist ein Koenig. Jetzt hast du: Ges Punkte. Ha...ich weiss jetzt schon, dass du verlierst!"));
if(nGes<=21)
{
SetLocalInt(oPC, "spiel", 3);
ActionWait(4.0);
ActionStartConversation(oPC, "", FALSE);
if(Spiel==3)
{
break;
}
else
continue;
}
else
{
SetLocalInt(oPC, "spiel", 2);
DelayCommand(4.0, SpeakString("Hahaha, du hast verloren. Nun bin ich dran!"));
break;
}
}

case 4:
nGes=nGes+7;
DelayCommand(4.0, SpeakString("Es ist eine Sieben. Und damit hast du: Ges Punkte. Interessant..."));
if(nGes<=21)
{
SetLocalInt(oPC, "spiel", 3);
ActionWait(4.0);
ActionStartConversation(oPC, "", FALSE);
if(Spiel==3)
{
break;
}
else
continue;
}
else
{
SetLocalInt(oPC, "spiel", 2);
DelayCommand(4.0, SpeakString("Hahaha, du hast verloren. Nun bin ich dran!"));
break;
}

case 5:
nGes=nGes+8;
DelayCommand(4.0, SpeakString("Es ist eine Acht. Nun ist dein Wert: Ges. Eine laeppische Punktzahl!"));
if(nGes<=21)
{
SetLocalInt(oPC, "spiel", 3);
ActionWait(4.0);
ActionStartConversation(oPC, "", FALSE);
if(Spiel==3)
{
break;
}
else
continue;
}
else
{
SetLocalInt(oPC, "spiel", 2);
DelayCommand(4.0, SpeakString("Hahaha, du hast verloren. Nun bin ich dran!"));
break;
}

case 6:
nGes=nGes+9;
DelayCommand(4.0, SpeakString("Es ist eine Neun. Du hast jetzt: Ges. Damit wirst du mich nie besiegen!"));
if(nGes<=21)
{
SetLocalInt(oPC, "spiel", 3);
ActionWait(4.0);
ActionStartConversation(oPC, "", FALSE);
if(Spiel==3)
{
break;
}
else
continue;
}
else
{
SetLocalInt(oPC, "spiel", 2);
DelayCommand(4.0, SpeakString("Hahaha, du hast verloren. Nun bin ich dran!"));
break;
}

case 7:
nGes=nGes+10;
DelayCommand(4.0, SpeakString("Es ist eine Zehn. Dein Punktestand betrgt damit: Ges. Nicht schlecht...nicht schlecht!"));
if(nGes<=21)
{
SetLocalInt(oPC, "spiel", 3);
ActionWait(4.0);
ActionStartConversation(oPC, "", FALSE);
if(Spiel==3)
{
break;
}
else
continue;
}
else
{
SetLocalInt(oPC, "spiel", 2);
DelayCommand(4.0, SpeakString("Hahaha, du hast verloren. Nun bin ich dran!"));
break;
}

case 8:
nGes=nGes+11;
DelayCommand(4.0, SpeakString("Uuuhhh...Es ist ein Ass. Du hast damit: Ges Punkte. Das ist gefaehrlich fuer dich und fuer mich!"));
if(nGes<=21)
{
SetLocalInt(oPC, "spiel", 3);
ActionWait(4.0);
ActionStartConversation(oPC, "", FALSE);
if(Spiel==3)
{
break;
}
else
continue;
}
else
{
SetLocalInt(oPC, "spiel", 2);
DelayCommand(4.0, SpeakString("Hahaha, du hast verloren. Nun bin ich dran!"));
break;
}

}
}

//Zufaellige Belohnung errechnen
int nGeld=GetGold(oPC);
int Divisor=Random(5);
int Einsatz=nGeld/Divisor;

//NPC spielt
if((Spiel!=2) && (nGes!=0))
{
SpeakString("Moment bitte...");
int nGesNPC=Random(3);
//Ausgang des Spiels bestimmen und die Wahrscheinlichkeit erhoehen mit einer guten Punktzahl zu gewinnen
if(nGes<=20)
{
if(nGes<=15)
{
switch(nGesNPC)
{
case 1:
DelayCommand(4.0, SpeakString("Mist ich habe verloren! Ach, naja...Wettschulden sind Ehrenschulden. Na dann, hier bitte!"));
GiveGoldToCreature(oPC, Einsatz);
SetLocalInt(oPC, "spiel", 0);
nGes=0;

case 2:
DelayCommand(4.0, SpeakString("Tja, Unentschieden...hmmm...wenn du willst koennen wir ja nochmal spielen!"));
SetLocalInt(oPC, "spiel", 0);
nGes=0;

case 3:
DelayCommand(4.0, SpeakString("Hahaha...ich habe gewonnen. Pech gehabt, dann gib' mir mal das Geld!"));
TakeGoldFromCreature(Einsatz, oPC, FALSE);
SetLocalInt(oPC, "spiel", 0);
nGes=0;
}
}
else
{
switch(nGesNPC)
{
case 1:
DelayCommand(4.0, SpeakString("Mist ich habe verloren! Ach, naja...Wettschulden sind Ehrenschulden. Na dann, hier bitte!"));
GiveGoldToCreature(oPC, Einsatz);
SetLocalInt(oPC, "spiel", 0);
nGes=0;

case 2:
DelayCommand(4.0, SpeakString("Mist ich habe verloren! Ach, naja...Wettschulden sind Ehrenschulden. Na dann, hier bitte!"));
GiveGoldToCreature(oPC, Einsatz);
SetLocalInt(oPC, "spiel", 0);
nGes=0;

case 3:
DelayCommand(4.0, SpeakString("Hahaha...ich habe gewonnen. Pech gehabt, dann gib' mir mal das Geld!"));
TakeGoldFromCreature(Einsatz, oPC, FALSE);
SetLocalInt(oPC, "spiel", 0);
nGes=0;
}
}
}
if(nGes==21)
{
switch(nGesNPC)
{
case 1:
DelayCommand(4.0, SpeakString("Mist ich habe verloren! Ach, naja...Wettschulden sind Ehrenschulden. Na dann, hier bitte!"));
GiveGoldToCreature(oPC, Einsatz);
SetLocalInt(oPC, "spiel", 0);
nGes=0;

case 2:
DelayCommand(4.0, SpeakString("Mist ich habe verloren! Ach, naja...Wettschulden sind Ehrenschulden. Na dann, hier bitte!"));
GiveGoldToCreature(oPC, Einsatz);
SetLocalInt(oPC, "spiel", 0);
nGes=0;

case 3:
DelayCommand(4.0, SpeakString("Tja, Unentschieden...hmmm...wenn du willst koennen wir ja nochmal spielen!"));
SetLocalInt(oPC, "spiel", 0);
nGes=0;
}
}
}
//Man hat beim Spielen verloren und der NPC muss spielen
else
{
SpeakString("Moment bitte...");
int nGesNPC=Random(2);
switch(nGesNPC)
{
case 1:
DelayCommand(4.0, SpeakString("Tja, Unentschieden...hmmm...wenn du willst koennen wir ja nochmal spielen!"));
SetLocalInt(oPC, "spiel", 0);
nGes=0;

case 2:
DelayCommand(4.0, SpeakString("Hahaha...ich habe gewonnen. Pech gehabt, dann gib' mir mal das Geld!"));
TakeGoldFromCreature(Einsatz, oPC, FALSE);
SetLocalInt(oPC, "spiel", 0);
nGes=0;
}
}
}


Wer kann mir sagen, wie das mit den Verzögerungen klappt?
04.08.2002, 19:08 #2
therealjoker
Beiträge: 48
nochmal
was ist los?
also nochmal in kurzform (ich gebe zu der quelltext war ein bisschen unübersichtlich )
wie kann man z.B.
code\:

void main()
{
SpeakString("Hallo");
SpeakString(Wie geht's?");
}


so machen, dass es mit Zeitverzögerung gesagt wird, also langsam hintereinander.
Funktioniert bei mir allerdings mit den DelayCommands nicht!
04.08.2002, 22:03 #3
GuradonHellsing
Beiträge: 232

schonmal mit ActionSpeakString und ActionWait versucht?
05.08.2002, 10:29 #4
therealjoker
Beiträge: 48
ja, aber...
...bei ActionSpeakString und ActionWait gibt's immer Fehlermeldungen, im Spiel wegen zuvielen Befehlen gleichzeitig. Vielleicht ist ja auch einfach der Quelltext zu lang...
Seite 1 von 1  1