PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dialog mit NPC erst am nächsten Tag



Golden Age
21.08.2006, 17:06
Hi
Ich möchte mal wissen, ob es geht, dass wenn ich zum Beispiel an Tag1 einen Dialog mit einem Magier habe, dass dann am nächsten Tag ein Mann, der auch schon am 1. Tag da war, nun an einer anderen Stelle steht und auch jetzt erst einen neuen Dialog hat.

Sumpfkrautjunkie
21.08.2006, 17:22
Also im Magierdialog, musst du in einer Variable den Tag des Gesprächszwischenspeichern:

Heute = Wld_GetDay();

Dann baust du eine entsprechende Bedingung beim Mann:

if (Npc_KnowsInfo (other, DIALOGINSTANZWOHEUTEZWISCHENGESPEICHERTWIRD))
&& (heute != Wld_GetDay())

Zirror
21.08.2006, 17:27
klar, du musst einfach nur in den Dialog des 1. NPC (ich nenn den ersten einfach mal Heinz und den zweiten Kunz) bei der jeweiligen Dialogfunktion einfügen.

Kunz_Talk_Day = (Wld_GetDay() + 1);

vorher natürlich die Variable irgendwo aktivieren mit Var int Kunz_Talk_Day.

Dann bei Kunz als Condition einfügen.

If (wld_getday() = Kunz_Talk_Day)


die funktion wld_getday sagt dem Script welcher Tag heute ist, wenn du dann sagst "Der soll mit mir reden, wenn der Tag 'Heute + 1' (also morgen) ist" , redet er auch erst mit dir wenn eben morgen ist, denn am nächsten tag ist Wld_getday eine einheit höher.

EDIT:
Was sumpfkrautjunkie gesagt hat geht auch, nur musst du dann darauf achten das es wirklich nur ein Tag sein soll, bis der andere mit ihm spricht. Denn 'nicht heute' ist jeder Tag außer heute (!= = ungleich).

Golden Age
21.08.2006, 19:55
Ok, dass mit dem 1. NPC funktioniert, aber bei dem 2. kommt immer eine Fehlermeldung.
Mein 1. NPC heißt Gustav und mein 2. Fritz und bei Fritz hab ich bei Contition
If (wld_getday() = Fritz_Talk_Day) eingegeben.
Dann kam aber die Fehlermeldung Assignment: Left operand is not a value.

Sumpfkrautjunkie
21.08.2006, 20:05
Versuch mal:
If (wld_getday() == Fritz_Talk_Day)
Oder (obwohls eigentlich egal sein sollte):
If ( Fritz_Talk_Day== wld_getday())

Golden Age
21.08.2006, 21:19
Gut, das mit dem doppelten Istgleich-Zeichen war auf jeden Fall richtig, aber jetzt die nächste Meldung:
DIA_NONE_591_FRITZ.D:Unknown identifier: FRITZ_TALK_DAY
Kann mir mal jemand erklären, wie ich einen Teil meines Scripts hier zeigen kann, denn dann wäre es bestiimt besser.

Zirror
21.08.2006, 22:11
du musst irgendwo die Variable festlegen var int Fritz_Talk_Day, da gibt es irgendwo ne Datei in der die alle eingetragen sind, frag mich aber nicht wo.

Heinz
21.08.2006, 22:46
Scripts / Story_Globals.d

da musst du die eintragen, geht aber (afaik) auch direkt in die datei selber also zb einfach
var int Fritz_Talk_Day;
eintragen

; nicht vergessen ^^

edit: nen script posten eght einfach über strg+c /strg+v (copy/paste)
und damits übersichtlicher wird, nen "code" setzetn also auf # das symbol in der "format etc" leiste im editor beim posten.

Golden Age
22.08.2006, 00:01
Es funktioniert nun fast alles. Ich möchte aber, dass der NPC nicht nur an dem nächsten Tag, sondern auf allen folgenden Tagen antworten kann.
Und wie kann ich es denn machen, dass der NPC auch ab dann an einer anderen Stelle in der Welt steht?

Heinz
22.08.2006, 00:08
alle angaben wie immer ohne gewär :

&& (heute != Wld_GetDay())

zu

&& (heute > Wld_GetDay())

dann sollte des klappen und um den heini wo anders hinzustellen musst du den ta ändern.

Npc_ExchangeRoutine (self,"Rtn_Jäger_819");
ändert den ta eines npcs du musst dann den TA : in diesem falle

Rtn_Jäger_819
als neuen TA eintragen, also unter Rtn_DEINNPC_IDDEINESNPCs
und dann den neuen TA reinschreiben zb Rtn_Neu()

FUNC VOID Rtn_Neu()
{
TA_PickRice (07,00,19,00,"PATH_TAKE_HERB_06");
TA_PickRice (19,00,07,00,"PATH_TAKE_HERB_06");
};

und dann in ne dialog funktion
Npc_ExchangeRoutine (self,"Rtn_Neu");

der Taname muss allerdings eine eingeutige Id sein (afaik) also empfiehlt sich durchnummerieren oder nach npc id.

Golden Age
22.08.2006, 15:18
Jetzt funktioniert endlich alles. Kann man eigentlich wie bei Exodus bei dem Steinkreis machen, dass nur in der Nacht z.B. ein Dämon da ist und am Tag nicht?

Sumpfkrautjunkie
22.08.2006, 17:19
Eine Zeitabfrage könntest du über eine Schleife realisieren oder aber auch die mit
FUNC INT Wld_IsTime (VAR INT hour1, VAR INT min1, VAR INT hour2, VAR INT min2) { return 0; };
// Liefert "1" wenn aktuelle Weltzeit zwischen den beiden angegebenen Zeiten liegt (von - bis)
arbeitet(zum Thema Schleifenerstellung siehe Wiki:http://wiki.worldofgothic.de/Daedalus/Scripting+Tipps).
Eintrigger eignet sich meiner Meinung nach eher schlchtdafür , da der Held auch direkt am Erscheinungsplatz (bzw im Trigger selbst ) warten könnte.

Über
func void AI_Teleport (var C_NPC self, var string waypoint);
// teleportiert den NSC zur angegebenene Location

Kannst du den NPC/Gegner dann zu passenden Zeit hin und her teleportieren.