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?
|