[Modding] Modding Tutorials

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
Code:
SAY ~Alles klar.~ Do ~SetGlobal("AscJoinedParty","GLOBAL",1)JoinParty()~ EXIT

Das 'o' bei DO ist klein geschrieben :-P

Wie genau entferne ich eigentlich Journal Entries?
Ich dachte ursprünglich, dass das über die Eintragsüberschrift funktioniert und habs mit "EraseJournalEntry(%Aliennes Entfühung%)" versucht, wenn der entsprechende Eintrag eben "UNSOLVED_JOURNAL %Aliennes Entfühung" war.

Das scheint jedoch nicht zu funktionieren.

Und: Ich versuche gerade den NPC anhand des aktuellen Queststandes andere Sachen sagen zu lassen.
Bisher habe ich das geregelt wie folgt:

Code:
// Erstes Treffen in Nashkell
IF ~NumTimesTalkedTo(0)~ THEN BEGIN InitialTalk
SAY ~Ihr dort! Bitte wartet!~
IF ~~ GOTO Talk2
END

IF ~~ THEN BEGIN Talk2
SAY ~Bitte bleibt einen Moment stehen, ich benötige Eure Hilfe!~
IF ~~ THEN REPLY ~Beruhigt Euch, wie kann ich Euch helfen?~ GOTO Help
IF ~~ THEN REPLY ~Nun gut, aber lasst Euch gesagt sein, dass meine Dienste nicht umsonst sind.~ GOTO Pay
IF ~~ THEN REPLY ~Es tut mir Leid, aber ich habe keine Zeit um mich Euren Problemem zu widmen.~ GOTO NoTime
IF ~~ THEN REPLY ~Zur Seite, Dirne! Eure Probleme interessieren mich nicht!~ GOTO Decline
END

IF WEIGHT #100 ~NumTimesTalkedToGT(0)~ THEN BEGIN InitialTalk2
SAY ~Wollt Ihr mir nun helfen? Ich flehe euch an!~
IF ~~ THEN REPLY ~Beruhigt Euch, wie kann ich Euch helfen?~ GOTO Help
IF ~~ THEN REPLY ~Nun gut, aber lasst Euch gesagt sein, dass meine Dienste nicht umsonst sind.~ GOTO Pay
IF ~~ THEN REPLY ~Es tut mir Leid, aber ich habe immer noch keine Zeit.~ GOTO NoTime
IF ~~ THEN REPLY ~Ich sagte doch bereits, verschwindet!~ GOTO Decline
END

[...]

// Quest angenommen
IF ~~ THEN BEGIN Accept
SAY ~Ich weiß garnicht wie ich Euch danken kann! Ihr solltet Eure Suche in Beregost beginnen, die Entführer haben sicherlich in einem der Wirthshäuser übernachtet.~
= ~Wir haben keine Zeit zu verlieren, Ihr solltet gleich aufbrechen! Ich werde mich ebenfalls dorthin begeben und mich umhören.~
= ~Möge Mystra Euch beistehen.~ 
IF ~~ THEN DO ~EraseJournalEntry(%Aliennes Entfühung%)SetGlobal("EntryAccept","GLOBAL",1)EscapeAreaMove("AR6704",503,809,3)~ UNSOLVED_JOURNAL %Aliennes Entfühung

Blub Eintrag% EXIT
END

[...]

// Quest angenommen, Begegnung Beregost Windiger Schwindler -> Part2
IF WEIGHT #99 ~Global("EntryAccept","GLOBAL",1)~ THEN BEGIN InitialTalkP2
SAY ~Da seid Ihr ja endlich! Ich habe mich hier bereits ein wenig umgehört, konnte jedoch keine Informationen über Aliennes Entführer erhalten.~
= ~Ihr solltet Euch in den anderen Wirtshäusern und auf der Straße ein wenig umhören. Für gewöhnlich fallen Reisende schnell auf, irgendjemand sollte sie also gesehen haben. Ich bete darum, dass es noch nicht zu spät ist.~
= ~Wir dürfen ihren Vorsprung nicht noch größer werden lassen! Beeilt Euch!~
IF ~~ THEN DO ~SetGlobal("EntryAccept","GLOBAL",1)~ UNSOLVED_JOURNAL %Aliennes Entfühung

Plop Entry% EXIT
END

Das ganze ist also über Weights und eine Variable geregelt. Das erscheint mir allerdings nicht sonderlich effektiv - wie löse ich das besser?
Sollte ich eventuell lieber am Anfang eine extra Variable für die nicht angenommene Quest setzen?



// Edith sagt: ok, das Entry löschen habe ich hinbekommen, allerdings wird das relativ unübersichtlich wenn man immer den GESAMTEN Journalentry angeben muss, geht das irgendwie kompakter?
 
Zuletzt bearbeitet:

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Dein Weight macht da keinen Sinn. InitialTalk ist das einzige was anlaufen kann. Sobald das passiert ist, ist InitialTalk2 das einzige was anlaufen kann (wegen deiner Variablenexklusivität). Egal was da bei dem Weight steht.


Ich versuch mal zusammenzufassen wie DLGs funktionieren:
1. Die Engine geht alle States in der DLG in der Reihenfolge der ansteigenden Weights durch (= zuerst die mit Weights, dann die ohne Weights).
2. Der erste gefundene State mit einer vorhandenen und wahren Bedingung wird angeleiert.
3. Der NPC sagt den Text im SAY.
4. Die Transitions werden von unten nach oben aufgelöst und ausgeführt/zu Auswahl präsentiert. Wenn du also Antwortmöglichkeiten proggst und ne automatische Transition danach, dann wirst du die Antwortmöglichkeiten im Spiel niemals sehen.


Weights dienen also dazu, bestimmten States mit gleichen Conditions Vorrang zu geben. Ich persönlich würde immer mit Variablen arbeiten, wenn es um meine eigenen NPCs geht. Weights sind dann sinnvoll, wenn du Content zu vorhandenen NPCs hinzufügst, die States haben wie immer wahr sind (Händler z.B.)

Beispiel der Bartender im Jovial Juggler in Beregost:
Code:
APPEND Bart4
IF WEIGHT #0 ~Global("PWjugglerbill","LOCALS",1) Global("PWjugglerchalk","LOCALS",0)~ THEN BEGIN Bart41
SAY ~Na dann mal raus mit Eurem Geld. Eure Freunde haben 25 Goldstücke versoffen.~
+ ~PartyGoldGT(24)~ + ~25 Goldstücke? Na schön, aber wenn ich diese Schluckspechte in die Finger bekomme...~ DO ~SetGlobal("PWjugglerbill","LOCALS",2) TakePartyGold(25)~ + Bart41.1
++ ~25 Goldstücke? Äh, soviel habe ich grade nicht. Könntet Ihr das anschreiben und ich bezahle später?~ DO ~SetGlobal("PWjugglerchalk","LOCALS",1)~ + Bart41.2
++ ~Wovon redet Ihr bitte?~ + Bart41.3
++ ~Das waren nicht meine Freunde. Ich habe diese Lumpenhunde noch nie vorher gesehen und ich denke nicht mal im Traum daran, deren Bier zu bezahlen!~ + Bart41.4
END

Ohne den Weight würde das niemals kommen, weil das, was der Wirt da sagt, immer vor meinem neuen State käme.
 
Zuletzt bearbeitet:

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
Ich habe jetzt einfach alles über Variablen geregelt, hat den Vorteil, dass ich auch immer weis wo ich mich gerade befinde :)

Das kann für einen Startdialog z.B. so aussehen:

Code:
IF ~NumTimesTalkedTo(0)~ THEN BEGIN InitialTalk
SAY ~Verschwindet, ich habe keine Lust mich mit Gesindel wie Euch abzugeben!~
IF ~~ THEN EXIT
END

IF ~!Global("QuestPart","GLOBAL",4)NumTimesTalkedToGT(0)~ THEN BEGIN Talk2
SAY ~Ihr schon wieder? Verschwindet, <RACE>, bevor ihr meine Stiefel zu spüren bekommt!~
IF ~~ THEN EXIT
END

IF ~Global("QuestPart","GLOBAL",4)NumTimesTalkedTo(0)~ THEN BEGIN InitialTalk2
SAY ~Verschwindet, ich habe keine Lust mich mit Gesindel wie Euch abzugeben!~
IF ~Class(LastTalkedToBy,MAGE_ALL)~ THEN REPLY ~Ich bin auf der Suche nach einem vermissten Mädchen, vielleicht könntet ihr mir helfen MAGE.~ GOTO Mage
IF ~!Class(LastTalkedToBy,MAGE_ALL)~ THEN REPLY ~Ich bin auf der Suche nach einem vermissten Mädchen, vielleicht könntet Ihr mir helfen NO MAGE.~ GOTO Girl
IF ~~ THEN REPLY ~Hütet Eure Zunge, oder ich schneide sie Euch heraus!~ GOTO Fight
IF ~~ THEN REPLY ~Verzeiht die Störung, ich werde Euch in Ruhe lassen.~ GOTO EndTalk
END 

IF ~Global("QuestPart","GLOBAL",4)NumTimesTalkedToGT(0)~ THEN BEGIN Talk3
SAY ~Ihr schon wieder? Verschwindet, bevor ihr meine Stiefel zu spüren bekommt!~
IF ~Class(LastTalkedToBy,MAGE_ALL)~ THEN REPLY ~Ich bin auf der Suche nach einem vermissten Mädchen, vielleicht könntet ihr mir helfen MAGE.~ GOTO Mage
IF ~!Class(LastTalkedToBy,MAGE_ALL)~ THEN REPLY ~Ich bin auf der Suche nach einem vermissten Mädchen, vielleicht könntet Ihr mir helfen NO MAGE.~ GOTO Girl
IF ~~ THEN REPLY ~Hütet Eure Zunge, oder ich schneide sie Euch heraus!~ GOTO Fight
IF ~~ THEN REPLY ~Verzeiht die Störung, ich werde Euch in Ruhe lassen.~ GOTO EndTalk
END

Trotzdem Danke für die Erklärung!

Momentan habe ich ein ganz anderes Problem und ich bin mir nicht sicher wie ich da rangehen soll.
Ich möchte für meinen NPC ein Item erstellen (eine einfache Schriftrolle mit ein paar Informationen) und halte mich dabei an http://forums.pocketplane.net/index.php?topic=59.0

Allerdings scheint das Programm das ich dazu benötige unter Windows 7 nicht so recht zu wollen.
Nach dem Installieren von IEEP erhalte ich nur diverse Fehlermeldungen und dann schließt sich das Programm wieder.
Download kam von hier: http://www.sorcerers.net/Games/IEmodding/index.php , da der Link aus dem Tutorial nichtmehr funktioniert.

Fehlermeldungen sind:

1)
There has been an error reading the GAME DIR section of the IEEP initialization file. Therefore the rest of the Official Game Directory section will be skipped and the initialization file will continue to be read.

2)
There has been an error in the program. The specific information is:

Component 'COMDLG32.OCX' or one of its dependencies not correctly registered: a file is missing or invalid at IEEP_ini_Read.02.01.

3) (Nachdem man IEEP die registry durchsuchen lässt)
Run-time error '339':

Component 'COMDLG32.OCX' or one of its dependencies not correctly registered: a file is missing or invalid

Und dann schließt sichs wieder :-/
Ich habe keine Ahnung, was COMDLG32.OCX ist.

Ich habe das Programm bereits als Administrator ausgeführt, hat auch nichts gebracht.
Ich würde ja drauf verzichten, wenn ich das Item nicht für meine Quest bräuchte :-/

Edit:
IE modding 101 (off-site) by Seifer
Created as a simple introduction to IE Modding, this tutorial demonstrates the creation of a simple sword using DLTCEP and WeiDU to add it to a store.
(http://teambg.eu/index.php?page=tutorials&tutorial=27)

ist leider auch nichtmehr verfügbar.
Hatte mir fast schon gedacht, dass man über DLTCEP auch Items erstellen kann, nur wäre halt ein Guide dazu nice gewesen :-/
 
Zuletzt bearbeitet:

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
DLTCEP ist tierisch einfach und mein Progg der Wahl für Items, Spells, Stores und Effects. Das es dazu ein Tut gibt, wusste ich gar nicht. Schau dir da einfach mal ein Item wie zum Beispiel misc4t an, dann siehste ja, was da gemacht wurde.

Das IEEP hab ich noch nie benutzt...
 

Aeri

Senior Member
Registriert
03.10.2010
Beiträge
201
Auf DLTCEP bin ich eigentlich nur gekommen weil ich die Funktion durch Zufall im Programm gesehen habe :P

In den ganzen Item creation Tutorials wird immer IEEP empfohlen weils einfach sei.

Im übrigen habe ich ein Tutorial bei Google gefunden:
http://forums.rpgdungeon.net/index.php?topic=1847.0;wap2

Da wirds schön erklärt wie man mit DLTCEP umgeht :)
Ist wirklich fast selbsterklärend :D

// Edit: Hat auch alles wunderbar geklappt :D
 
Zuletzt bearbeitet:

De Lorean

Junior Member
Registriert
21.09.2012
Beiträge
20
Moin!

Ich bin gerade dabei mich ins IE-Modding einzuarbeiten und ich hab mich gefragt, ob es möglicherweise irgendwo eine Liste oder ähnliches gibt, wo man sich als Modder mit seinem gewählten Präfix, bzw. seiner Signatur (also z.B. AC, K#, J# und dergleichen) eintragen kann und wo andere sehen können, welche Präfixe bereits von Moddern verwendet werden.

Im Moment verwende ich das Präfix "DeL", was ja auch noch kein Problem ist, da ich nur auf meinem eigenen Rechner modde. Aber es währe dann doch etwas blöd wenn ich dann irgendwann mit meiner gigantischen Mega-Mod an den Start gehe und erstmal tausende Files ändern darf...

Außerdem habe ich dieses Präfix eigendlich nur gewählt, weil es unwahrscheinlich ist, dass jemand anderes das Selbe verwendet. Aber es ist halt auch umständlich. Und wenn ich stat desses z.B. auch einfach "D#" schreiben könnte, währe das natürlich einfacher für mich.
 

Dabus

Senior Member
Registriert
18.11.2007
Beiträge
5.086
Eintragen kann man sich hier und eine Liste gibt es hier.

Weiß aber gerade nicht, wie aktuell die ist, da BWL wohl nicht so wirklich die tollste Community ist, wenn es um Offenheit/Modsupport geht.
 
Oben