PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : important-Dialog in Verbindung mit BS_MOBINTERACT_INTERRUPT



Der Ahnungslose
01.10.2012, 18:48
Hallo Zusammen, ich hatte mit etwas Interessantem zu kämpfen:

Ein NPC-sollte mich ansprechen, während ich in BS_MOBINTERACT_INTERRUPT bin.

Das Interessante ist, dass sowohl ich als auch der NPC in ZS-Talk versetzt wurden (Information Manager startet normal), aber der entsprechende Dialog nicht ausgeführt wurde.

Der Grund ist aller Wahrscheinlichkeit die Abfrage des Bodystates in der Condition:



{
if ( (Wld_IsTime(14,00,20,00)) && (C_BodystateContains(hero, BS_MOBINTERACT_INTERRUPT)) )


{
return 1;
};
};



Klar, dass ich sobald ich in der ZS-Talk bin, nicht mehr im Bodystate BS_MOBINTERACT_INTERRUPT bin. Eigenartig finde ich jedoch, dass hier die Bearbeitung, nochmals unterbrochen wird, also einerseits wird der important-Dialog ausgeführt, derselbige aber dennoch nochmals abgebrochen. Es war mir bisher nicht bewusst, dass Gothic an dieser Stelle nochmals abprüft. Ich dachte sobald die Condition positiv ausgewertet wird und der NPC in ZS-Talk ist, der Dialog auf jeden Fall ausgeführt wird. Ich habe mir inzwischen helfen können, aber bewusst war mir das wirklich nicht. Mache ich meinem Nickname mal wieder Ehre, oder war euch das so auch nicht bewusst?

Sektenspinner
02.10.2012, 00:59
Deine Ausführungen sind völlig richtig. Die Bedingungen der Dialoge werden tatsächlich mehrfach überprüft, einmal in B_AssessPlayer getarnt als Npc_CheckInfo (prüft ob ein Dialog eine erfüllte Bedingung hat) um den InfoManager bei Bedarf zu starten, und dann, nachdem der InfoManager gestartet wurde (egal von wem), nochmal. Das ist auch der Grund für manche arg blöden Situation, sagen wir mal wir haben zwei Dialoge mit folgenden Eigenschaften (Syntax nicht ernst nehmen):

Dialog1.nr = 1;
Dialog1.important = true;
Dialog1.permanent = true;
Dialog1.condition: Npc_IsInState(self, ZS_TALK) && beleidigt
Dialog1.info: "Ich bin beleidigt, hau ab!"; AI_StopProcessInfos(self);

Dialog2.nr = 2;
Dialog2.important = true;
Dialog2.permanent = false;
Dialog2.condition: tollesStoryEvent
Dialog2.info: "Hast du schon gehört was tolles passiert ist?"

Das kann dazu führen, dass Aufgrund von Dialog2 der Info Manager gestartet wird, aber dann Dialog1 abgespielt wird. Beide Dialoge sind für sich allein sinnvoll, aber in dieser Konstellation führt es dazu, dass der Spieler gefangen und ständig mit Dialog1 zugequatscht wird mit wenig Chancen wegzulaufen. (Daher: Dialoge die permanent und important sind sollten geringe Priorität (nr) haben.

Wo wir grade am plaudern sind:
Npc_CheckInfo ist glaube ich ziemlich unbekannt. Dabei könnte man damit ein paar nette Sachen machen, zum Beispiel dafür sorgen, dass, wenn sich Npc und Spieler grade nichts zu sagen haben ein Standarddialog oder Kommentar zu einer laufenden Quest abgespielt wird ("Was stehst du hier noch rum? Du hast deine Befehle, also führ sie aus!", "Ich habe gerade keine Zeit zum plaudern.") und dann der Dialog automatisch beendet wird. Das ist besser als den Spieler mit einem Dialogmenü zu konfrontieren indem es nur "ENDE" gibt. Anstatt Ambientinformationen in explizit vom Spieler aufrufbaren Nebendialogen unterzubringen, könnte man sie in solchen Kommentaren unterbringen. Ohne Npc_CheckInfo ist das schwer zu bauen, weil man dann sehr aufpassen muss den Spieler nur dann abzuwürgen, wenn er wirklich nichts zu sagen hat.
Man könnte auch zum Beispiel Npc Namen in verschiedenen Farben anzeigen je nachdem ob es neue Infos bei ihnen gibt oder nicht, aber da reicht Npc_CheckInfo schon nicht mehr aus. Und naja, außerdem soll das Spieler auch selbst mitdenken.

Der Ahnungslose
02.10.2012, 22:22
[...]

Wo wir grade am plaudern sind:
Npc_CheckInfo ist glaube ich ziemlich unbekannt. Dabei könnte man damit ein paar nette Sachen machen, zum Beispiel dafür sorgen, dass, wenn sich Npc und Spieler grade nichts zu sagen haben ein Standarddialog oder Kommentar zu einer laufenden Quest abgespielt wird ("Was stehst du hier noch rum? Du hast deine Befehle, also führ sie aus!", "Ich habe gerade keine Zeit zum plaudern.") und dann der Dialog automatisch beendet wird. Das ist besser als den Spieler mit einem Dialogmenü zu konfrontieren indem es nur "ENDE" gibt. Anstatt Ambientinformationen in explizit vom Spieler aufrufbaren Nebendialogen unterzubringen, könnte man sie in solchen Kommentaren unterbringen. Ohne Npc_CheckInfo ist das schwer zu bauen, weil man dann sehr aufpassen muss den Spieler nur dann abzuwürgen, wenn er wirklich nichts zu sagen hat.

[...]


So etwas wird es in DZdP geben, allerdings habe ich das bisher immer recht umständlich in der svm.d und mit einer statischen Abfrage der NPC-ID implementiert. Aber ein schönes Feature, wie ich finde. Etwas ähnliches gab es ja schon bei den Babes. Ich fand es in Gothic oftmals etwas störend ständig jemanden anzuklicken, nur um dann über den Ende-Dialog zu erfahren, dass dieser NPC mir gerade nichts mehr zu sagen hat.

3895338954