World of Gothic Archiv > NWN-Hilfe
NPC sollen sich unterhalten und PC ignorieren
Seite 1 von 1  1 
21.08.2002, 18:20 #1
Ta'idan
Beiträge: 152
NPC sollen sich unterhalten und PC ignorieren
Also 2 NPC sollen sich unterhalten
Problem 1 : Die unterhaltung soll in einer schleife laufen. Mach ich das dann bei OnHeartbeat rein und am Ende ClearAllActions ? Das Gespräch dauert ca 15sec und fängt dann von vorne an

Problem 2 : Wie bekomme ich es hin das die NPCs den PC garnicht beachten wenn er sie anklickt?

Problem 3 : beziehts sich auf 1, das gespräch hab ich schon gescriptet aber es geht irgendwie nicht... die sagen einfach nix, muss ich was bestimmtes beachten? (es is in OnHeartbeat)

So das wars erstmal
21.08.2002, 18:55 #2
Rhaegar
Beiträge: 296
Re: NPC sollen sich unterhalten und PC ignorieren
quote:
Zitat von Ta'idan
Also 2 NPC sollen sich unterhalten
Problem 1 : Die unterhaltung soll in einer schleife laufen. Mach ich das dann bei OnHeartbeat rein und am Ende ClearAllActions ? Das Gespräch dauert ca 15sec und fängt dann von vorne an



Okay, um ein Problem, mit dem ich mich bevor ich das Ganze durchschaut habe ewig rumgeschlagen habe gleich mal aus dem Weg zu räumen:

Es gibt zwei Arten von Befehlen:
Actionbefehle und normale Befehle.

normale:Werden sofort ausgeführt sobald die Zeile in der sie stehen verarbeitet wird.
Actionbefehle: Werden auch sofort ausgeführt und legen eine Aktion auf die Actionqueue.Die Aktion an sich wird aber erst ausgeführt, wenn sie an der Reihe ist(stell' dir die Actionqueue wie eine To-Do-Liste vor).Der erste Befehl der ActionQueue wird (so vermute ich) erst ausgeführt wenn sämtliche Befehle des Skriptes durch sind.

ClearAllActions() löscht alle Aktionen von der ActionQueue ist aber selbst ein normaler Befehl.

Wenn du jetzt also z.B. folgendes Skript hast:
code\:

void main()
{ActionSpeakString("blabla");
ActionSpeakString("bla bla bla");
ActionSpeakString("papperlapapp");
ActionSpeakString("bla");
ClearAllActions();
}


macht der NPC was?

Genau ! Absolut gar nichts! Die ersten 4 Befehle legen zwar ihre Aktionen auf die Queue, aber sofort danach wird ClearAllActions() ausgeführt und die Queue ist blitzblank!

Deshalb muss ClearAllActions() auch in die Queue, damit es erst wenn alle Aktionen des aktuellen Skripts fertig sind loslegt.
Das erreichst du mit ActionDoCommand(ClearAllActions());

Obiges Beispiel würde korrigiert und funktionierend so aussehen:
code\:

[code]
void main()
{ActionSpeakString("blabla");
ActionSpeakString("bla bla bla");
ActionSpeakString("papperlapapp");
ActionSpeakString("bla");
ActionDoCommand(ClearAllActions());
}



Wenn du bei dir das Clear auch so umänderst solltest du einen Schritt weiter sein :) !


___________________________

Verliebt in den UserDefined Event ^^
Überzeugter Episode 2 Hasser[/font]
21.08.2002, 19:13 #3
Ta'idan
Beiträge: 152

Ah so läuft das ab :)
Dann ist es ja kein wunder das einige meiner Scripte nicht so funktionieren wie sie sollen :)

Danke für eine hilfe!
Seite 1 von 1  1