[Modding] Moderstellung - Fragen

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
Kann man eigentlich auch einzelne .DLG Files wieder decompilen?
Mir fallen immer 100 Beispiele für Dinge ein die ich basteln möchte, aber irgendwann lande ich dann doch immer hier, weil ich nicht weis wies geht :-/

Wäre stark, wenn man einfach mal in ein fertiges BG Script schauen könnte von dem man sicher weis was es tut :-P
Die Dateien mit NI zu exportieren ist nun auch kein Wunderwerk mehr, logischerweise komm ich mit einem Texteditor danach aber nicht mehr weiter.

Grüße!
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.380
Mit NearInfinity müsste es gehen. Mit WeiDU geht es auf jeden Fall.
 

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
Hmm wie genau würde das denn mit NI gehen?
Ich finde da nur die Export funktion und kann mir die "Einzelteile" mit NI anschauen, aber das Script als solches sehe ich da nicht.
 

Ascalon

Senior Member
Registriert
08.04.2008
Beiträge
2.730
mit weidu gehts. einfac "weidu X.dlg" eingeben sollte reichen.
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Jo. Und mit scripts isset dasselbe, nur halt .bcs am Ende. Gibt allerdings auch noch paar Optionen für das decompilieren (Dialogtreeabildung über mehrere DLGs und sowas).
 

Jarl

Senior Member
Registriert
28.04.2006
Beiträge
972
Bei DLGs gehts auch mit DLTCEP. Da musst du vorher nur unter "Setup" das Verzeichnis deiner Weidu.exe angeben ;)

Wär ja interessiert, was du da momentan in Arbeit hast :)

Gruß Jarl
 

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
Was mich direkt zum nächsten Problem führt: weidu will unter Windoof 7 nicht so recht installiert werden.
Ich lade mir die aktuellste Version runter, entpacke alles in meinen BG Modding Tools Ordner, starte die WeInstall.exe und dann poppt kurz das Command Fenster auf und schließt sich direkt wieder.

Wenn ich nun über cmd weidu blablub.dlg eingebe kommt:

"Der Befehl weidu ist entweder falsch geschrieben oder konnte nicht gefunden werden" :-/


(Und wie war nochmal das Kommando um in der Ordnerstruktur nach oben zu gehen? ^^ cd klappt nicht :-P)

@ Jarl: Eine Mod :D Aber wir sind noch im Planungsstadium (und ich lerne noch ;-) )

// Über DLTCEP hats geklappt, danke das sollte erstmal für meine Zwecke reichen :)
 
Zuletzt bearbeitet:

Ascalon

Senior Member
Registriert
08.04.2008
Beiträge
2.730
du musst Weidu doch gar nicht installieren. Es reicht, die weidu.exe ins BG-Verzeichnis zu packen udn dann mit dem Dos-Fenster zu arbeiten.
 

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
Dann geht der weidu Befehl aber nur in dem Ordner, oder?
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Logo. Aber so gut wie alles mit Weidu geht nur in nem BG(2)-Ordner, weil die WeiDu da halt Kram braucht. Als ich damals n paar dutzend ds trayfien wollte, ging das auch nur im BG2-Ordner.

Leg dir halt nen Dev-BGT an, in dem du rumspielen tust. Ansonsten: cd.. (ordner runter), cd xxx (in ordner rein), x: (auf entsprechende festplatte wechseln) ^^
 

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
Dev BGT hab ich schon ;-)
Dachte Weidu holt sich den benötigten Kram über die Registry Einträge, hatte sowas in der Readme gelesen.
Aber ist ja auch Jacke wie Hose, mach ichs halt sorum :D
 

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
Hallo zusammen ;-)

Ich habe mal wieder ein paar Fragen, es geht um folgenden Dialog:

Code:
IF WEIGHT #1
~Global("CPMelvinHQArrival","GLOBAL",1)~ 
THEN BEGIN HQArrival
SAY ~Ah, da seid Ihr ja endlich. Wartet einen Augenblick, ich werde Euch gleich vorstellen.~
IF ~~ THEN EXTERN CPKalen 2
END

CPKalen.d:
Code:
IF ~NumTimesTalkedTo(1)Global("CPMelvinHQArrival","GLOBAL",0)Class(LastTalkedToBy,MAGE_ALL)Global("CPKalenVSTravin","GLOBAL",1)~ THEN BEGIN InitialTalkMage
SAY ~Was bei den neun Höllen... Ihr dort! Wer seid Ihr? Was habt ihr hier zu suchen?~
= ~Moment, Ihr... Ihr seid ein MAGIER? Wie könnt Ihr es wagen hier einzudringen?! WACHEN, ZUM ANGRIFF, Tötet <PRO_HIMHER>, ehe <PRO_HESHE> einen Zauber sprechen kann!~
IF ~~ THEN DO ~Enemy()~ EXIT
END

IF ~NumTimesTalkedTo(1)Global("CPMelvinHQArrival","GLOBAL",0)Global("CPKalenVSTravin","GLOBAL",1)~ THEN BEGIN InitialTalk
SAY ~Was bei den neun Höllen... Ihr dort! Wer seid Ihr? Was habt ihr hier zu suchen?~
= ~ Wie könnt Ihr es wagen hier einzudringen?! WACHEN, ZUM ANGRIFF! Lasst keinen entkommen, sonst haben wir bald die Flammende Faust am Hals!~
IF ~~THEN DO ~Enemy()~ EXIT
END

CHAIN 
IF ~NumTimesTalkedTo(0)~ THEN CPKalen Kalen.Travin
~Und ich erwarte, dass das Balg tot ist, wenn ich zurück komme, Travin!~
== CPTravin ~Ihr vergesst, dass ICH hier die Leitung habe! Cyric ist es ein Wohlgefallen, wenn seine Opfer sich in Agonie winden, ehe sie in den Abyss geschickt werden.~
== CPKalen ~Und ich habe den Auftrag dafür zu sorgen, dass alles ohne größeres Aufsehen abläuft. Ich erhalte meine Order direkt aus dem Hauptquartier! Dort ist man ohnehin der Ansicht, dass Eure "Eskapaden" langsam gefährlich werden könnten!~
== CPTravin ~Was Ihr nicht sagt! Immerhin waren es MEINE Leute, die das Mistgör eingefangen und hierher gebracht haben ...~
== CPKalen ~... Und darüber hinaus vergessen, ihre Spuren zu beseitigen. Habt Ihr eine Ahnung, was "keine Zeugen" bedeutet, Ihr Narr!?~
== CPTravin ~Hütet Eure Zunge, wenn Ihr  mit mir sprecht! Ich dulde keine weiteren Ausbrüche dieser Art, oder Euch wird es bald nicht anderes ergehen als dieser Göre! (arroganter Wichtigtuer!)~ 
== CPTravin ~Und nun kümmert Euch um diese Quälgeister die nach uns suchen! Cyric wartet nicht gerne, ich werde mich wieder unserem "Gast" widmen.~ DO ~ClearAllActions()StartCutSceneMode()StartCutScene("CPCUT_2")~ //Travin geht in den Folterkeller
EXIT

CHAIN
IF ~NumTimesTalkedTo(0)Global("CPMelvinHQArrival","GLOBAL",1)~ THEN CPKalen Kalen.Melvin
~Was bei den neun Höllen... Ihr dort! Wer seid Ihr? Was habt Ihr hier zu suchen? Sprecht oder sterbt!~
== CPMelvin ~Immer mit der Ruhe Kalen! Das ist die Verstärkung aus Amn, ich habe alles überprüft.~
== CPKalen ~Einfältiger Tölpel! Das ist die Gruppe die sich nach dem Mädchen umgehört hat, die Beschreibung passt genau! Kann man Euch denn keine Sekunde aus den Augen lassen?~
== CPKalen ~Worauf wartet Ihr noch? Tötet sie, bevor sie fliehen!~ DO ~Enemy()~ 
EXIT

State 2 sollte eigentlich die erste Chain in der CpKalen.d sein, interessanterweise kommt der aber nicht.
Wenn ich im ersten Schnipsel "IF ~~ THEN EXTERN CPKalen" 0 oder 1 setze kommen auch die entsprechenden Dialoge, also der 0. oder 1. State.
Nur wenn ich State 2 ansteuern will gehts nicht o.O.

Was muss ich da beachten?

Und noch eine andere Sache:
In obigem Code kommen die Chains als letztes.
Wenn ich den code jedoch wie folgt aufbau wirft das Script beim installieren Fehler:
Code:
BEGIN CPKalen

CHAIN 
IF ~NumTimesTalkedTo(0)~ THEN CPKalen Kalen.Travin
~Und ich erwarte, dass das Balg tot ist, wenn ich zurück komme, Travin!~
== CPTravin ~Ihr vergesst, dass ICH hier die Leitung habe! Cyric ist es ein Wohlgefallen, wenn seine Opfer sich in Agonie winden, ehe sie in den Abyss geschickt werden.~
== CPKalen ~Und ich habe den Auftrag dafür zu sorgen, dass alles ohne größeres Aufsehen abläuft. Ich erhalte meine Order direkt aus dem Hauptquartier! Dort ist man ohnehin der Ansicht, dass Eure "Eskapaden" langsam gefährlich werden könnten!~
== CPTravin ~Was Ihr nicht sagt! Immerhin waren es MEINE Leute, die das Mistgör eingefangen und hierher gebracht haben ...~
== CPKalen ~... Und darüber hinaus vergessen, ihre Spuren zu beseitigen. Habt Ihr eine Ahnung, was "keine Zeugen" bedeutet, Ihr Narr!?~
== CPTravin ~Hütet Eure Zunge, wenn Ihr  mit mir sprecht! Ich dulde keine weiteren Ausbrüche dieser Art, oder Euch wird es bald nicht anderes ergehen als dieser Göre! (arroganter Wichtigtuer!)~ 
== CPTravin ~Und nun kümmert Euch um diese Quälgeister die nach uns suchen! Cyric wartet nicht gerne, ich werde mich wieder unserem "Gast" widmen.~ DO ~ClearAllActions()StartCutSceneMode()StartCutScene("CPCUT_2")~ //Travin geht in den Folterkeller
EXIT

CHAIN
IF ~NumTimesTalkedTo(0)Global("CPMelvinHQArrival","GLOBAL",1)~ THEN CPKalen Kalen.Melvin
~Was bei den neun Höllen... Ihr dort! Wer seid Ihr? Was habt Ihr hier zu suchen? Sprecht oder sterbt!~
== CPMelvin ~Immer mit der Ruhe Kalen! Das ist die Verstärkung aus Amn, ich habe alles überprüft.~
== CPKalen ~Einfältiger Tölpel! Das ist die Gruppe die sich nach dem Mädchen umgehört hat, die Beschreibung passt genau! Kann man Euch denn keine Sekunde aus den Augen lassen?~
== CPKalen ~Worauf wartet Ihr noch? Tötet sie, bevor sie fliehen!~ DO ~Enemy()~ 
EXIT

IF ~NumTimesTalkedTo(1)Global("CPMelvinHQArrival","GLOBAL",0)Class(LastTalkedToBy,MAGE_ALL)Global("CPKalenVSTravin","GLOBAL",1)~ THEN BEGIN InitialTalkMage
SAY ~Was bei den neun Höllen... Ihr dort! Wer seid Ihr? Was habt ihr hier zu suchen?~
= ~Moment, Ihr... Ihr seid ein MAGIER? Wie könnt Ihr es wagen hier einzudringen?! WACHEN, ZUM ANGRIFF, Tötet <PRO_HIMHER>, ehe <PRO_HESHE> einen Zauber sprechen kann!~
IF ~~ THEN DO ~Enemy()~ EXIT
END

IF ~NumTimesTalkedTo(1)Global("CPMelvinHQArrival","GLOBAL",0)Global("CPKalenVSTravin","GLOBAL",1)~ THEN BEGIN InitialTalk
SAY ~Was bei den neun Höllen... Ihr dort! Wer seid Ihr? Was habt ihr hier zu suchen?~
= ~ Wie könnt Ihr es wagen hier einzudringen?! WACHEN, ZUM ANGRIFF! Lasst keinen entkommen, sonst haben wir bald die Flammende Faust am Hals!~
IF ~~THEN DO ~Enemy()~ EXIT
END

Fehler:
Code:
PARSE ERROR at line 24 column 1-2
Near Text: IF
syntax error
Was hat denn die Reihenfolge damit zu tun o.O
 

Ascalon

Senior Member
Registriert
08.04.2008
Beiträge
2.730
warum machst du daraus eigentlich nicht eine einzige CHAIN?

Code:
CHAIN
IF WEIGHT #1 ~Global("CPMelvinHQArrival","GLOBAL",1)~ THEN xxx HQArrival
~Ah, da seid Ihr ja endlich. Wartet einen Augenblick, ich werde Euch gleich vorstellen.~
== CPKalen ~Blablähblubb~

etc...
 

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
Ich finde es übersichtlicher, wenn der Dialog der NPCs in ihren entsprechenden Dateien ist.
Und hier ists ne simple Sinnunterteilung: zuerst spricht M. Noch mit dem Spieler, dann beginnt ein NPC NPC Dialog, den Kalen startet :-P
Klingt verrückt, aber so behalte ich den Überblick
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Das mit dem Überblick ist auch meine Devise, zumindest in letzter Zeit (nicht von Anfang an). Meine .d sind unterteilt in states, dann Chains, dann fremde Quest-NPC-Dialoge, dann der NPC wieder, entsprechend der Chronologie im Spiel. Finde ich klasse.


Zu Deiner letzten Frage: Die Fehlermeldung ist deshalb, weil er nach den CHAINs nicht weiß, in welche dlg er den Dialogstate reinpacken soll. So sollte es funktionieren:


BEGIN CPKalen

CHAIN
IF ~NumTimesTalkedTo(0)~ THEN CPKalen Kalen.Travin
~Und ich erwarte, dass das Balg tot ist, wenn ich zurück komme, Travin!~
== CPTravin ~Ihr vergesst, dass ICH hier die Leitung habe! Cyric ist es ein Wohlgefallen, wenn seine Opfer sich in Agonie winden, ehe sie in den Abyss geschickt werden.~
== CPKalen ~Und ich habe den Auftrag dafür zu sorgen, dass alles ohne größeres Aufsehen abläuft. Ich erhalte meine Order direkt aus dem Hauptquartier! Dort ist man ohnehin der Ansicht, dass Eure "Eskapaden" langsam gefährlich werden könnten!~
== CPTravin ~Was Ihr nicht sagt! Immerhin waren es MEINE Leute, die das Mistgör eingefangen und hierher gebracht haben ...~
== CPKalen ~... Und darüber hinaus vergessen, ihre Spuren zu beseitigen. Habt Ihr eine Ahnung, was "keine Zeugen" bedeutet, Ihr Narr!?~
== CPTravin ~Hütet Eure Zunge, wenn Ihr mit mir sprecht! Ich dulde keine weiteren Ausbrüche dieser Art, oder Euch wird es bald nicht anderes ergehen als dieser Göre! (arroganter Wichtigtuer!)~
== CPTravin ~Und nun kümmert Euch um diese Quälgeister die nach uns suchen! Cyric wartet nicht gerne, ich werde mich wieder unserem "Gast" widmen.~ DO ~ClearAllActions()StartCutSceneMode()StartCutScene("CPCUT_2")~ //Travin geht in den Folterkeller
EXIT

CHAIN
IF ~NumTimesTalkedTo(0)Global("CPMelvinHQArrival","GLOBAL",1)~ THEN CPKalen Kalen.Melvin
~Was bei den neun Höllen... Ihr dort! Wer seid Ihr? Was habt Ihr hier zu suchen? Sprecht oder sterbt!~
== CPMelvin ~Immer mit der Ruhe Kalen! Das ist die Verstärkung aus Amn, ich habe alles überprüft.~
== CPKalen ~Einfältiger Tölpel! Das ist die Gruppe die sich nach dem Mädchen umgehört hat, die Beschreibung passt genau! Kann man Euch denn keine Sekunde aus den Augen lassen?~
== CPKalen ~Worauf wartet Ihr noch? Tötet sie, bevor sie fliehen!~ DO ~Enemy()~
EXIT

APPEND CPKalen

IF ~NumTimesTalkedTo(1)Global("CPMelvinHQArrival","GLOBAL",0)Class(LastTalkedToBy,MAGE_ALL)Global("CPKalenVSTravin","GLOBAL",1)~ THEN BEGIN InitialTalkMage
SAY ~Was bei den neun Höllen... Ihr dort! Wer seid Ihr? Was habt ihr hier zu suchen?~
= ~Moment, Ihr... Ihr seid ein MAGIER? Wie könnt Ihr es wagen hier einzudringen?! WACHEN, ZUM ANGRIFF, Tötet , ehe einen Zauber sprechen kann!~
IF ~~ THEN DO ~Enemy()~ EXIT
END

IF ~NumTimesTalkedTo(1)Global("CPMelvinHQArrival","GLOBAL",0)Global("CPKalenVSTravin","GLOBAL",1)~ THEN BEGIN InitialTalk
SAY ~Was bei den neun Höllen... Ihr dort! Wer seid Ihr? Was habt ihr hier zu suchen?~
= ~ Wie könnt Ihr es wagen hier einzudringen?! WACHEN, ZUM ANGRIFF! Lasst keinen entkommen, sonst haben wir bald die Flammende Faust am Hals!~
IF ~~THEN DO ~Enemy()~ EXIT
END

END //APPEND CPKalen


Deine erste(n) Frage(n) habe ich nicht verstanden. States ansteuern? Hä?
 

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
Die erste Frage hat sich wausi mit Beantwortung der zweiten ergeben :-D
Ging um den EXTERN- Befehl, der wollte nicht wie ich will. Nun lass ich einfach auf 0 und stell die chain an den Anfang
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Nur um sicherzugehen: Du kannst in derselben d. mit Deinen State-Fantasienamen arbeiten, also EXTERN ~npcdlg~ state1.1xyz funktioniert, solange es einen state1.1xyz in der dlg des npcs ~npcdlg~ gibt (in dieser d.). Beim Kompilieren macht WeiDU dann Statenummern draus. So müsste es immer funktionieren, und Du kannst sicher sein, dass der richtige State verwendet wird.
Geht aber eben nur, wenn alle dlgs in derselben .d stehen. (Über Kreuz coden würde ich aber eh nicht - Knoten im Hirn zu warscheinlich!)
 

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
In meinem Beispiel ists aber ne andere .d :)
(Und gerade dadurch vermeide ich meinen Hirnknoten, weil in die entsprechende Datei ausgelagert wird :D )

// Nun klappt alles wie es soll, danke für eure Hilfe :)
 
Zuletzt bearbeitet:

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Ne, es müssen nicht alle States in der Selben d-Datei stehen. Es muss nur darauf geachtet werden, dass alle States in den spezifischen DLGs(!!) enthalten sind, auf die man von sonstwo verweisen will.

Ich schreib nebenbei einfach komplett alles in CHAINs rein. Dann brauch ich mich niemals mit APPENDs und sonem Kinderkram abgeben und habe die Dialoge trotzdem wie Lesetext untereinander weg.
 

Ascalon

Senior Member
Registriert
08.04.2008
Beiträge
2.730
so sollte es ja auch sein. Append oder Extern ider I_C_T1-4 benutzt man nur dann, wenn man in einen bereits existierenden Mod oder ins Grundspiel eingreifen will und einen bereits funktionierenden Dialog erweitern möchte.
 
Oben