[Modding] Moderstellung - Fragen

De Lorean

Junior Member
Registriert
21.09.2012
Beiträge
20
Ah!

Jetzt verstehe ich auch was das mit "xy xyP xyJ [usw.]" soll.
Wobei ich denzent von "Idiot01" belustigt bin.^^

Schreibt man "CLUAConsole:CreateCreature("idiot01")", taucht Jaheira auf und sagt: "My local is 1."
 

White Agnus

Senior Member
Registriert
05.09.2008
Beiträge
5.088
Ups, die interdia.2da hab ich vergessen... :shine:

Sorry, war vorher gerade aufm Sprung, deswegen gabs keine genauere Erklärung ;)
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.946
De Lorean: Wenn das Verhalten sich nicht ändert, kann es daran liegen, dass Du als Deine cre einen Mehrspieler-NPC erschaffen hast (?), der noch entsprechend getaggt ist. Ich erinnere mich dunkel daran, dass man in NI da etwas ändern musste.

[Und immer daran denken, ein neues Spiel (alternativ einen ungemoddeten Save) für das Testen zu starten, weil Du sonst den "alten" NPC noch in Deiner Area findest. <- Hier spricht die Weisheit vieler sinnloser Debugging-Sessions. :rolleyes: ]
 

De Lorean

Junior Member
Registriert
21.09.2012
Beiträge
20
Nein, daran hatte ich auch erst gedacht aber da stimmt alles.

Es funktioniert auch mittlerweile - der Tipp von Wedge hats gebracht, ich hatte einfach einen Eintrag in der tp2 vergessen...

Und ich hab halt stundenlang in meiner Dialog-Datei rumgewühlt ;)

Danke für die Hilfe!
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Als kleine Ergänzung, um das ganze vielleicht mal vom Standpunkt des Grundverständnisses aufzuziehen:

Jeder Kreatur (und das können Party-NPCs, NonParty-NPCs, Tiere, Monster oder sonstwas sein) besitzt neben anderen Scripten vor allem das Override-Script und die Dialog-Datei. Wenn man mit einer Kreatur mehr machen will, als einen automatischen Kampf abzuspulen, dann muss man an diese beiden Dateien ran.

Bei Party-NPCs ist das allerdings etwas umfangreicher, denn diese haben mehrere Dialog-Dateien, die vom Spiel automatisch in die CRE-Dateien eingetragen oder im laufenden Spiel angesprochen werden können.

Meinem Beispiel von oben folgend haben wir da die PWeli.dlg, die PWeliP.dlg, die PWeliJ.dlg, die PWeliD.dlg und die PWeliB.dlg. Plus alle Dateien nochmal mit der 25 hinten dran für ToB (25 = BG 2,5).

Die PWeli wäre die normale Dialogdatei, die der NPC hat, wenn er einfach nur dumm in der Gegend rumsteht. Wird er in die Gruppe aufgenommen, stellt BG die in der Cre eingetragene Dialogdatei automatisch auf die PWeliJ(oined) um. Schmeißt du den NPC aus der Gruppe raus, stellt BG die in der Cre eingetragene Dialogdatei auf die PWeliP(arted) um. Die PWeliB(anter) kommt in Partygesprächen zum Einsatz, die PWeliD(ream) in Träumen.

Geregelt wird das über die Tabellendateien "pdialog.2da" (partydialog) und "interdia.2d" (interjection dialog).

Erstellt werden die Dialogdateien aber nicht mit den Zeilen in der TP2, sondern mit einem BEGIN x in einer d-Datei. In irgendeiner. Wenn du willst, kannst du das so wie ich machen und eine d-Datei mit dem Inhalt

BEGIN PWeli
BEGIN PWwed
BEGIN PWeliB
BEGIN PWwedB
BEGIN PWeliJ
BEGIN PWwedJ
BEGIN PWeliP
BEGIN PWwedP
etc.

anlegen, in der nichts anderes vorhanden ist und die eigentlichen Dialoge dann in anderen d-Dateien unterbringen. Nach Thema sortiert. Oder nach Genre. Oder nach Kapitel. Oder nach Gebiet. Oder nach Quest. Wie du lustig bist. Du kannst aber natürlich auch dein BEGIN XXX in die d-Datei schreiben und dann hintereinander weg alle Dialoge, die in diese DLG gehören. Wichtig ist, dass du den Unterschied zwischen d-Datei und DLG-Datei verinnerlichst. Die DLG-Datei ist der fertig kompilierte Programmcode den BG ausführt, die d-Dateien sind nur der Quellcode der Dialoge und können in beliebiger Varianz über wer weiß wieviele Dateien verteilt werden, solange du als Programmierer den Quellcode richtig zuordnest.

Außerdem zu beachten: Diese Namenskonvention ist kein Zwang. Wenn du ALLE Dialoge in nur einer einzigen DLG haben willst, faulerweise nehmen wir da wieder die PWeli, damit ich weiter copy & pasten kann, dann erstellst du nur die PWeli, schreibst da alle Dialoge rein und lässt den Teil in deiner tp2-Installationsroutine so aussehen:

Code:
APPEND ~pdialog.2da~
~PWeli PWeli PWeli PWeli PWeli25 PWeli25 PWeli25 PWeli25~
UNLESS ~PWeli~

APPEND ~interdia.2da~
~PWeli PWeli PWeli25~
UNLESS ~PWeli~
// (Und wenn du willst, kannst du sogar die 25 weglassen. Wobei es dann wirklich verwirrend werden kann.)

Im Grunde kannst du da machen was du willst, du kannst die DLGs bennenen wie du willst, du kannst die Identifikationsbuchstaben an den Anfang stellen. Oder in die Mitte. Oder weglassen. Oder mit was anderem ersetzen. Letztendlich dient das alles nur der Übersicht, für dich, vor allem aber auch für andere Programmierer, denn daher kommt diese Konvention. Von Bioware, wo x Leute mit den Dateien gearbeitet haben.
 

De Lorean

Junior Member
Registriert
21.09.2012
Beiträge
20
Wow, danke für die ausführliche Erklärung!

Das hab ich gleich mal umgesetzt :)
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Und 25% von meinem Gebrabbel sind auch noch kompletter Mist, was wohl davon kommt, wenn man zwischen Tür und Angel schnell nen Post zusammenschmeißt, während man im Kopf mit ganz anderem beschäftigt ist... :rolleyes:


Die ersten Einträge in die zwei 2DAs sind natürlich nicht Dialogdateien, sondern die death variable/der script name, die du auch in den Scripten benutzt, um Dinge mit den NPCs anzustellen. Was ja auch logisch ist, weil ein neuer Eintrag in einer Tabelle muss eindeutig identifzierbar sein. Und die letzte Spalte in der pdialog.2da ist das Override-Script für ToB. (8 Spalten -> 1 dv, 6 dlgs, 1 script). Die normale Dialogdatei ist da nicht dabei, weil die ja schon in der cre drinne steht und nach dem Joinen nie mehr benutzt werden sollte (also traditionell, nicht dass man sich daran halten muss ^^).


Der Rest stimmt aber. :D Wenn du deine ganzen DLGs gesammelt anlegst, musst du halt sehr genau darauf achten, die Dialoge ordentlich zu den DLGs zuzuordnen, ergo du musst mit APPENDs arbeiten oder einfach gleich von vorne rein alles in den supertollen CHAINs of awesome coden.
 

De Lorean

Junior Member
Registriert
21.09.2012
Beiträge
20
Ich hab jetzt mal begonnen mir CHAINs und Bannters anzugucken und hab eine zu meinem derzeitigen Test-NPC passende RCRinceB.d geschrieben.

Leider lässt sich die Mod jetzt nicht mehr installieren, da er meckert:

[StateCheck] argument [CD_STATE_NOTVALID] not found in [State.IDS]
Hier die komplette Fehlerausgabe:
http://imageshack.us/photo/my-images/820/rcrince.jpg/

Ich habe aber eigendlich alles genauso geschrieben, wie man es auch in anderen Beispielen und Tutorials findet...
Nur halt dass es bei mir nicht funktioniert.

Der Inhalt der RCRinceB.d lautet:
Code:
BEGIN RCRinceB

CHAIN
IF ~InParty("RCRince")
InParty(Player1)
!StateCheck("RCRince",CD_STATE_NOTVALID)
!StateCheck(Player1,CD_STATE_NOTVALID)
Global("RCBanter","GLOBAL",0)~

THEN RCRinceB Banter1
~Ich fasel wiklich gerne unsinniges Zeug!~
DO ~SetGlobal("RCBanter", "GLOBAL", 1)~
END

IF ~~ THEN REPLY ~Ja, das merke ich. Schwachmat!~ GOTO Banter1-1
IF ~~ THEN REPLY ~Wow, das interessiert mich, erzähl mir mehr darüber!~

CHAIN
IF ~~ THEN RCRinceB Banter1-1
~Garstige kleine Hobbits!~
EXIT

CHAIN
IF ~~ THEN RCRinceB Banter1-2
~Bla, Bla, Bla, Fasel, Fasel, Fasel...)~
EXIT

Und in der tp2 habe ich die Zeilen
Code:
COMPILE ~Rincewind/RCRinceB.d~
und
Code:
APPEND ~STATE.IDS~ ~0x80101FEF CD_STATE_NOTVALID~
UNLESS ~CD_STATE_NOTVALID~
eingefügt. Ich weiß, dass die "CD_STATE_NOTVALID"-Abfrage nicht Teil des eigendlichen Codesystems ist, sondern von einem Modder namens CamDawg stammt. Also quasie eine Erweiterung ist. Ich nehme an dass es daran liegt. Muss ich da noch irgendwelche Eintragungen machen, irgendwas installieren oder hinzufügen oder habe ich schlicht und ergreifend irgendwo einen verdammten Schreibfehler gemacht?
 

De Lorean

Junior Member
Registriert
21.09.2012
Beiträge
20
Verdammt!^^

Ihr habt den Nagel auf den Kopf getroffen! Danke Jungs!

(Und ich soooo lange davor gesessen...*Ngrl~!!*)

Edit: Aber ist ja auch irgendwie logisch, dass es an den Anfang muss...
Den Grund hab ich ja selber schon herausgefunden...
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Dem entgegen werden transitions in den DLGs von unten nach oben abgearbeitet. Ich weiß nicht, ob man das als Profitipp klassifzieren kann. :D
 

De Lorean

Junior Member
Registriert
21.09.2012
Beiträge
20
Entweder das, oder meine Fragen landen demnächst in einer Mod für Noober ;)
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.946
Dem entgegen werden transitions in den DLGs von unten nach oben abgearbeitet.
Wobei sie aber von oben nach untern durchnummeriert sind, beginnend mit "0" (falls man ATT oder sowas verwenden möchte). :hae:
 
Oben