World of Gothic Archiv
Alle Beiträge von therealjoker
Seite 1 von 2  1  2 
03.08.2002, 21:42 #1
therealjoker
Beiträge: 48
kleine Scriptfrage... - kleine Scriptfrage...
Hi,
wie schaff ich es, in einer SpeakString Funktion ne Variable auf dem Bildschirm ausgeben zu lassen.
MfG
Joker
04.08.2002, 15:02 #2
therealjoker
Beiträge: 48
BlackJack-Scriptproblem - 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 #3
therealjoker
Beiträge: 48
BlackJack-Scriptproblem - 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!
05.08.2002, 10:29 #4
therealjoker
Beiträge: 48
BlackJack-Scriptproblem - 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...
05.08.2002, 10:36 #5
therealjoker
Beiträge: 48
brauche Hilfe beim Scripten - jupjupjo
manche Verwandlungen funktionieren auch nicht immer (ich hatte so n änliches problem mal mit einer Verwandlung in ein elder water elemental), ich glaub es kommt auch auf das Gebiet an in dem er sich verwandelt
05.08.2002, 11:02 #6
therealjoker
Beiträge: 48
brauche Hilfe beim Scripten -
OK, ich hab mir die Sache nochmal angeguckt:
Probiers mal hiermit:
code\:

void main()
{
object oNPC=GetObjectByTag("NPC");
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectPolymorph(POLYMORPH_TYPE_RED_DRAGON), oNPC, 0.0f);
}


funktioniert bei mir, wenn man es bei nem trigger auf onEnter setzt.
Allerdings wird dabei natürlich kein Zauberspruch gesprochen, sa müsste sich aber auch noch einrichten lassen.
06.08.2002, 10:07 #7
therealjoker
Beiträge: 48
Tagebucheintrag zu Beginn des Spiels... -
Das hier funktioniert:
code\:

void main()
{
//fuer "test" den Tag des Tagebucheintrags angeben
//fuer "1" die ID
AddJournalQuestEntry("test", 1, GetFirstPC(), FALSE, FALSE, FALSE);
}


;)
06.08.2002, 11:10 #8
therealjoker
Beiträge: 48
Tagebucheintrag zu Beginn des Spiels... -
Öffne dein Modul, dann
Werkzeuge->Tagebuch-Editor
Dort machst du dann einmal hinzufügen und gibst links unten dann den Namen der Quest und bei Kennzeichnung den Tag der Quest ein.
Füg dann ein paar Unterpunkte mit "hinzufügen" ein, je nachdem wie viele verschiedene Statusse die Quest haben soll. Wieder links unten kannst du dann die ID für den Status festlegen. Beim letzten Status markierst du zusätzlich noch das Feld "Kategorie fertigst", um zu zeigen, dass dieser Eintrag erscheinen soll, wenn die Quest beendet ist.
06.08.2002, 11:13 #9
therealjoker
Beiträge: 48
Tagebucheintrag zu Beginn des Spiels... -
Oh, der in Zeile 2 war nicht beabsichtigt, soll natürlich "Tagebuch-Editor" heißen.
06.08.2002, 14:01 #10
therealjoker
Beiträge: 48
Kampf-Vor NPC Tod -Ende -
Hmm...es gibt da ne Funktion EffectHitPointsChangeWhenDying, damit könntest du es versuchen (hab's noch nicht ausprobiert).
Ansonsten könntest du, falls der Gegner stark genug ist bei einem Schlag des Spielers nicht mehr als 1/4 seiner Hitpoints zu verlieren,
den Code z.B. so aussehen lassen:
code\:

int nLebenMax=GetMaxHitPoints(OBJECT_SELF);
int nLeben=GetCurrentHitPoints(OBJECT_SELF);
if(nLeben<nLebenMax/4)
...


Mittels AdjustReputation müsstest du nun die Fraktion verändern können. Danach wird dann das Gespräch begonnen.
06.08.2002, 14:02 #11
therealjoker
Beiträge: 48
Kampf-Vor NPC Tod -Ende -
Uuups, du warst wohl schneller als ich.
07.08.2002, 11:20 #12
therealjoker
Beiträge: 48
Habe Probleme mit Tür -
Das Problem hatte ich auch mal. Gib jeder Tür vorher eine eigene Kennzeichnung, dann hat's bei mir geklappt.
07.08.2002, 11:34 #13
therealjoker
Beiträge: 48
Tagebuch -
Du brauchst zu deinem einen Gesprächspunkt mit der Quest noch einen
wo er dann danke sagt.
Den Rest kannst du alles mit dem Scriptwizard machen (das kleine rote Zauberhütchen).
Bei "Danke" gehst du dort auf "Text erscheint ,wenn" und lässt irgendeinen Gegenstand abfragen, den man nur haben kann, wenn man die Goblins schon erledigt hat(natürlich kannst du aber auch scripten, dass wenn die Goblins sterben, der NPC "Danke" sagt).
An der selben Stelle gehst du dann noch auf "Erfolgte Aktionen" und gibst ihn dabei eine Belohnung.
07.08.2002, 12:20 #14
therealjoker
Beiträge: 48
Absturz beim eigenen modul -
Also bei mir gibts bei jedem Neustart andere Fehler, aber manchmal läufts auch mal ganz gut. Eine Neu-Installation hilft aber normalerweise kaum. :(
07.08.2002, 12:26 #15
therealjoker
Beiträge: 48
win2ksp2 und mein char warped nur noch rum -
Ich hab auch win2k und bei mir warpt er auch manchmal aber nur sehr selten. Ich spiele im Moment mit einem Pentium 3 600 und ner Geforce 2MX400 sowie 256 Mb SDRam und es lässt sich eigentlich sonst ganz gut spielen.
Anmerkung: win2k und winXP habeen nen ziemlich ähnlichen Systemkern, sodass ein Umstieg kaum was bringen dürfte
07.08.2002, 14:34 #16
therealjoker
Beiträge: 48
NwN hängt sich auf -
Ah, das Windows-Syndrom hat mal wieder zugeschlagen. Solche Fehler kann man nach meinen Erfahrungen kaum noch beheben ohne wieder andere Fehler zu verursachen. Daher greife ich dann immer zur letzten Lösung:
Fesplatte formatieren und alles wieder neu drauf.
PS: Probier mal win2k pro aus, das läuft echt stabil.
07.08.2002, 16:59 #17
therealjoker
Beiträge: 48
Kapitel - Kapitel
Habt ihr ne Ahnung wie man das wie im Originalspiel mit den Kapiteln hinkriegt, also mehrere Module aneinanderfügen kann?
07.08.2002, 21:27 #18
therealjoker
Beiträge: 48
Kapitel -
Damke für den Tipp, aber wenn ich das ausprobiere, schmierts immer an der Stelle ab wo der Befehl "StartNewModule()" kommt. Ist das bei euch auch so?
08.08.2002, 13:36 #19
therealjoker
Beiträge: 48
Benutzung von Objekt / Teleport / Bedingung -
Simpler Fehler: Einmal wurde oWP und einmal oWp verwendet.
Auf Groß-und Kleinschreibung muss geachtet werden, sonst erkennt er die Variablen nicht.
Mach es so:
code\:

void main()
{
object oWP=GetObjectByTag("Ebene101");
AssignCommand(GetPCSpeaker(),ActionJumpToObject(oWP));
}

09.08.2002, 10:41 #20
therealjoker
Beiträge: 48
Bitte hilfe bei Script -
Hast du nicht eingestellt, dass Blut im Spiel fließt(ist nämlich auch gar nicht so wenig)?
10.08.2002, 10:47 #21
therealjoker
Beiträge: 48
komplexes Problem: Video in der Spielengine -
Hmm, ich weiß nicht, ob das bei der NWN-Scriptsprache funktioniert aber du könntest die Funktion EffectParalyze() überladen und neudefinieren.
11.08.2002, 11:04 #22
therealjoker
Beiträge: 48
Dumme Frage -
1.)Öffne mal das Originalspiel im Editor und nimm die Quellcodes von der Stelle, wo ein NPC dein Gefährte wird.
2.)müsste klappen
11.08.2002, 11:16 #23
therealjoker
Beiträge: 48
leichte Probleme mit Spiel -
Eine neue Grafikkarte wäre auch nicht schlecht. Ich spiele nur mit 600Mhz und bei mir läufts absolut flüssig. Hab ne Geforce 2 MX400 Grafikkarte und 328MB SDRAM.
16.08.2002, 14:21 #24
therealjoker
Beiträge: 48
Umfrage: Auch nur interesseshalber... -
Ich höre nur Metallica, Offspring und Clawfinger. Linkin Park ist auch nicht schlecht.
16.08.2002, 14:24 #25
therealjoker
Beiträge: 48
Nur mal interessehalber: Kleine Umfrage... -
ich bin 16, gehe aufs Gymnasium in die 10. Klasse. Hobbies: NWN-Editor, joggen, Tischtennis
Seite 1 von 2  1  2