[Modding] Projekt: Nuroe

Tifa Nazah

Member
Registriert
09.02.2004
Beiträge
49
Hi, also ich habe wie versprochen mein erstes Projekt angefangen, habe nach der Anleitung chr. datein erstellt und angefangen einen Eintritt und austritt in ConText zu schreiben, denn er mir brav als .txt abschpeichert - Und nun??

EDIT:
" Altes Script gelöscht neues findet man unten!! "


Was dies heißt weiß ich aber nicht genau: ("Tif#NuroeJoinedParty","GLOBAL",1)


see u
Tifa Nazah
 
Zuletzt bearbeitet:

Caswallon

Chronist
Registriert
13.08.2001
Beiträge
11.460
Abspeichern solltest du es mit der Erweiterung *.d (anstatt *.txt), damit WeiDU den Dialog erkennt und kompilieren kann.
Wie das geht, sagt dir am besten jemand anders... ich kann mit WeiDU nur bruchstückhaft umgehen. :)

IF ~Global("Tif#NuroeJoinedParty","GLOBAL",1)~ THEN...

bedeutet:
WENN
die Variable "Tif#NuroeJoinedParty" (eine globale Variable) gleich 1 ist
DANN...

Variablenoperationen enthalten im allgemeinen ein "Global", egal ob es sich um eine globale oder lokale Variable handelt; das wird dann im zweiten Argument festgelegt (GLOBAL, LOCALS).
Solche Befehle sind v.a.
  • Global("variablenname","typ",wert): ist wahr, wenn variablenname==wert ist.
  • GlobalGT("variablenname","typ",wert): GT steht für "greater than", ist also wahr, wenn variablenname>wert ist.
  • GlobalLT("variablenname","typ",wert): LT steht für "lower than".
  • SetGlobal("variablenname","typ",wert): setzt variablenname auf den Wert wert.
  • GetGlobal("variablenname","typ"): liest den Wert von variablenname.
typ ist entweder GLOBAL (eine globale Variable), LOCALS (eine lokale Variable der CRE, die das Script ausführt) oder ARxxxx (eine lokale Variable der Area, die das Script ausführt; xxxx steht für die Nummer der Area).

Öhm. Ich hoffe, das war verständlich... :D

Cas
 

Tifa Nazah

Member
Registriert
09.02.2004
Beiträge
49
Danke!!

Ich hab noch ein Problem mit dem erschaffen des Charas:

Code:
IF 
Global("ThorvidExists","AR0700",0)
THEN 
RESPONSE #100
CreateCreature("Thorvid",[2135.1835],12)
SetGlobal("ThorvidExists","AR0700",1)
END


1) Ich weiß nicht an welche Stelle ich dies im Script packen soll und ich möchte meine Drow gerne am Friedhof erschaffen, woher bekomme ich die passenden Kordinaten?? Anstelle von: AR0700 und Thorvid",[2135.1835],12

2) und warum ist das auf Respone #100 angestellt, muss das so sein??

3) Bei Blöcken wie:

Code:
IF ~~ THEN BEGIN 5
SAY ~Überlegt es Euch gut, es wird sicher Probleme geben, wenn Ihr mit einer Drow reist.~
IF ~~ THEN REPLY ~Macht euch keine Sorgen, willkommen.~ THEN DO ~SetGlobal("Tif#NuroeJoinedParty","GLOBAL",1) JoinParty()~ EXIT
IF ~~ THEN REPLY ~Besser nicht, lebt wohl.~ GOTO 3
END

IF ~NumTimesTalkedToGT(0) Global("Tif#NuroeJoinedParty","GLOBAL",0)~ THEN BEGIN 5
SAY ~Ach, habt Ihr es euch anders überlegt?~
IF ~~ THEN REPLY ~Ja, hättet Ihr Lust mit uns zu reisen?~ GOTO 7
IF ~~ THEN REPLY ~Nein. Wir wollten nur mal nach Euch sehen.~ EXIT
END

IF ~~ THEN BEGIN 7
SAY ~Ich würde gerne, aber Ihr werdet es nicht leicht haben mit einer Drow im Team.~
IF ~~ THEN REPLY ~Nennt mir doch bitte noch mal Euren Namen, Drow.~ GOTO 4
END

Ist da der Block inm der Mitte auch mit einer Zahl markier (Nr 6 ??)




see u
Tifa Nazah
 
Zuletzt bearbeitet von einem Moderator:

Klingauf

Senior Member
Registriert
21.05.2003
Beiträge
185
Moin, Moin!

Die "RESPONSE #100" ist eine prozentuale Angabe, die besagt, dass immer die Aktion ausgeführt werden soll, wenn die Bedingung erfüllt ist. Irgendjemand hat übrigens mal festgestellt, dass diese Angabe nicht immer den vollen Prozent entspricht, aber dies nur am Rande.

Die Koordinaten bekommst du, indem du die CLUAConsole aktivierst und in einem laufenden BG2-Spiel in dem gewünschten Gebiet die Taste "X" drückst. Dann bekommst du den Area-Kode und die Positionsdaten.

Zur Aktivierung der Konsole, musst du ins Baldurs-Gate-II-Verzeichnis und dort die Baldur.ini öffnen. Dort musst du unter dem Punkt "Game Options" die Zeile "Cheats=1" einfügen.

Das Skript zur Erschaffung deines NPCs musst du dann einfach an das gewünschte Area-Skript hängen.

Gruß

DK
 

Caswallon

Chronist
Registriert
13.08.2001
Beiträge
11.460
X für die Position geht auch ohne Konsole, das ist eine ganz normale Spielfunktion. ;)

Area-Skript: Ein Gebiet (Area) kann (muß nicht) ein Skript haben, das ausgeführt wird, solange sich die Party dort aufhält.
Die Area-Skripte heißen immer wie die Area selber - das Skript der AR1000 (Regierungsviertel) hat z.B. den Namen AR1000.bcs.

Zu den Blocknamen:
Ob Zahl (1, 2...) oder Name (KickOut, Rejoin) ist egal.
In deinem Script gibt es zweimal Block Nr. 5 und zweimal Block Nr. 7 (jeweils BEGIN 5 bzw. BEGIN 7).
Dein Beispiel ist das mit den zwei 5ern:
IF ~~ THEN BEGIN 5
...
IF ~NumTimesTalkedToGT(0)
Global("Tif#NuroeJoinedParty","GLOBAL",0)~ THEN BEGIN 5
...
Der Block hat also einen Namen, das Problem ist möglicherweise eher, daß der Name doppelt vergben ist.
Ob das so sein darf oder nicht, weiß ich nicht... WeiDU, anyone? :)

Cas
 
Zuletzt bearbeitet:

Seradin

Kleine Drow
Registriert
20.09.2002
Beiträge
1.386
Ich galube bei mir hatte das mal zu einer Fehlermeldung beim Installieren geführt, als ich einen Dialognamen zweimal vergeben hatte. Nummeriere deswegen am besten einfach alle Dialoge durch.

Noch was zu den beiden fünfer Dialogen, du hast einmal den Dialog mit der Bedingung, dass er nur aufgerufen wird, wenn dein NPC zum x-ten mal angesprochen wird. Das ist auch OK so, nur dein zweiter Dialog fünf, der ohne Bedingung, wird nie aufgerufen, da es keinen Verweiss auf ihn gibt. Er ist allso sinnlos.
Dyara hatte das konzept der Dialoge hier im Bastler-Forum mal sehr schön erklärt, wenn ich es finden sollte, stell ich es noch hier rein.

[edit] Hier die Erklärung von Dyara:
Ja, die Engine startet nur Dialoge, die einen nicht-leeren Trigger haben und den Wert 'wahr' ergeben. Die einfachste Möglichkeit ist der Trigger 'True()', der liefert nämlich immer 'wahr' .

Die Engine durchläuft dabei die Dialogdatei von oben nach unten (komplett) und nimmt dann den Dialog, dessen Trigger den Wert 'wahr' liefert und der am weitesten oben steht. Ändern kann man die Reihenfolge durch sogenannte Gewichte (weight), was in komplizierten Dialogfiles manchmal ganz sinnvoll sein kann.

Soll ein Dialog von einem anderen Dialog aufgerufen werden (zwei NPCs unterhalten sich ohne dass der PC eingreift), so sollte man die Bedingung 'False()' verwenden.

Dialogteile, die nur innerhalb des selben Dialogs zu erreichen sind, sollten gar keine Bedingung haben.

So zumindest habe ich das irgendwann mal gelernt bzw. gelesen.
 

Tifa Nazah

Member
Registriert
09.02.2004
Beiträge
49
Ich schaff es einfach nicht mein .d Datei zu compeliren, mit WeiDu komm ich gar nicht klar...


Und muss ich den Rauswurf und Eintritt Dialog in einzelne Files tun??


see u
Tifa Nazah
 
Zuletzt bearbeitet:

Nalfein

Der Finstere
Registriert
10.10.2003
Beiträge
5.107
Probier es mal als 24bit Bitmap abzuspeichern.
 

Tifa Nazah

Member
Registriert
09.02.2004
Beiträge
49
Ich habs mit 24 Bipmap und mit 8 Bipmap probiert, hilf immer noch nichts...


see u
TifaNazah
 

Seradin

Kleine Drow
Registriert
20.09.2002
Beiträge
1.386
@Tifa Nazah: Erstmal ganz ruhig, bis jetzt ist noch nie ein Meister vom Himmel gefallen. Ich hab' erst mit dem Modul-Thread hier im Forum einigermaßen verstanden was ich da tue. :)

Rauswurf- und Aufnahme-Dialog kannst du in seperate Dialog-Dateien schreiben oder in ein und die selbe, wie mit allen anderen Dialog-Dateien auch. Du musst nur beachten, wenn du sie in eine Datei schreibst, dass du die BEGINs nicht vergisst, die geben dir nämlich an, wo eine neue Dialog-Datei sozusagen anfängt.

Mein Tip zum comalieren der *.d ist immer, mache erstmal alles für den Mod fertig und teste dann alles zusammen. WeiDu hat eine sehr schöne Fehleranalyse und man wird einfach nicht so schnell entmutigt. Ich hab' mir ja deinen Dialog am Anfang angeschaut und mir ist bis auf die doppelte Dialog-Nummern vergabe nichts aufgefallen.
Mach einfach mal weiter und wenn du Fragen hast, kannst du dich hier an jeden wenden. :)

[edit]
Schick mir mal das jep an Seradin@gmx.net ich probiers hier mal mit gimp, vielleicht wird die Umwandlung in ein bmp damit besser.
 

Tifa Nazah

Member
Registriert
09.02.2004
Beiträge
49
Alles klar, dann schreibe ich mal den Dialog weiter, so ist das Script bis jetzt aus:

Code:
BEGIN ~Tif#Nuroe~

//LANGUAGE ~Deutsch~ ~Tif#Nuroe~

IF 
Global("NuroeExists","AR0800",0)
THEN 
RESPONSE #100
CreateCreature("Nuroe",[1871.1472],12)
SetGlobal("NuroeExists","AR0800",1)
END

IF ~NumTimesTalkedTo(0)~ THEN BEGIN 1
SAY ~Hi, was sucht Ihr so spät noch hier. Dies ist kein Ort für Leute wie Euch.~
IF ~~ THEN REPLY ~Wer seid Ihr, Fremde?~ GOTO 2
END

IF ~~ THEN BEGIN 2
SAY ~Ich bin mir sicher, Ihr wollt gar nicht wissen, wer ich bin. Es würde Euch nur Probleme bereiten meinen Namen zu kennen...~
IF ~~ THEN REPLY ~Dann lebt wohl.~ GOTO 3
IF ~~ THEN REPLY ~Hm, sagt mir sofort wer Ihr seid!~ GOTO 4
END

IF ~~ THEN BEGIN 3
SAY ~Lebt wohl. Und gehabt euch gut.~
IF ~~ THEN EXIT
END

IF ~~ THEN BEGIN 4
SAY ~Mein Name ist Nuroe, und ich bin eine Hexenmeisterin. Ich komme aus der legendären Drow Stadt.~
IF ~~ THEN REPLY ~Bitte, reist doch mit uns.~ GOTO 5
IF ~~ THEN REPLY ~Dann lebt wohl.~ GOTO 3
IF ~~ THEN REPLY ~Verschwindet Drow, oder ich werde euch töten.~ DO ~SetGlobal("Tif#NuroeAblehn","LOCALS",1)~ EXIT
END

IF ~~ THEN BEGIN 5
SAY ~Überlegt es Euch gut, es wird sicher Probleme geben, wenn Ihr mit einer Drow reist.~
IF ~~ THEN REPLY ~Macht euch keine Sorgen, willkommen.~ THEN DO ~SetGlobal("Tif#NuroeJoinedParty","GLOBAL",1) JoinParty()~ EXIT
IF ~~ THEN REPLY ~Besser nicht, lebt wohl.~ GOTO 3
END

IF ~NumTimesTalkedToGT(0) Global("Tif#NuroeJoinedParty","GLOBAL",0)~ THEN BEGIN 5
SAY ~Ach, habt Ihr es euch anders überlegt?~
IF ~~ THEN REPLY ~Ja, hättet Ihr Lust mit uns zu reisen?~ GOTO 7
IF ~~ THEN REPLY ~Nein. Wir wollten nur mal nach Euch sehen.~ EXIT
END

IF ~~ THEN BEGIN 7
SAY ~Ich würde gerne, aber Ihr werdet es nicht leicht haben mit einer Drow im Team.~
IF ~~ THEN REPLY ~Nennt mir doch bitte noch mal Euren Namen, Drow.~ GOTO 4
END

IF ~NumTimesTalkedToGT(0) Global("Tif#NuroeJoinedParty","GLOBAL",0) Global("Tif#NuroeAblehn","LOCALS",1)~ THEN BEGIN 7
SAY ~Habt Ihr es Euch anders überlegt? Aber ich will nicht mehr mit Euch reisen. Meine Aufgabe ist wichtiger als Euer negatives Gewäsch über die Drow.~
IF ~~ THEN EXIT
END

IF ~Global("Tif#NuroeJoinedParty","GLOBAL",1) Global("Tif#NuroeKickedOut","LOCALS",0)~ THEN BEGIN KickOut
SAY ~Ihr wollt auf eine Hexenmeisterin verzichten?~
IF ~~ THEN REPLY ~Tut mir Nuroe, aber hier trennen sich unsere Wege.~ DO ~SetGlobal("Tif#NuroeJoinedParty","GLOBAL",0) SetGlobal("Tif#NuroeKickedOut","LOCALS",1)~ EXIT
IF ~~ THEN REPLY ~Nein, auf Euch möchte ich nie verzichten.~ DO ~SetGlobal("Tif#NuroeKickedOut","LOCALS",0) JoinParty()~ EXIT
END

IF ~Global("Tif#NuroeJoinedParty","GLOBAL",0) Global("Tif#NuroeKickedOut","LOCALS",1)~ THEN BEGIN Rejoin
SAY ~Ach, Ihr kommt wieder zurück zu mir. Habt Ihr festgestellt, das keiner so gut mit Magie umgehen kann wie eine Drow?~
IF ~~ THEN REPLY ~Bitte Nuroe verzeih, aber es war nur zu Eurem besten gedacht.~ DO ~SetGlobal("Tif#NuroeKickedOut","LOCALS",0) SetGlobal("Tif#NuroeJoinedParty","GLOBAL",1) JoinParty()~ EXIT
IF ~~ THEN REPLY ~Ihr seit wahrlich eine fähige Hexenmeistrin, aber ich kann es nicht verantworten eien Drow bei mir zu haben.~ EXIT
END


Nun sollte die Romanze kommen, an welche Stell häng ich das an?? ist das egal?? Wo finde ich denn eine Anleitung dazu wie man Romanzen schreibt??


see u
Tifa Nazah
 
Zuletzt bearbeitet von einem Moderator:

Seradin

Kleine Drow
Registriert
20.09.2002
Beiträge
1.386
Vor der Romanze noch etwas. Du hast hier zwei Dinge gemischt, dass eine ist die Ergänzung einer Area und das andere eine Dialog-Datei.

Du musst diese beiden von einander trennen. Die Erschaffung deines NPC schreibst du in ein bcs-file (oder auch in ein baf (nicht kompaliert) (danke Cas). Die Dialoge kommen in ein oder mehrere Dialog-Dateien (je nachdem wie es dir besser passt).

Das 'steuern' eines NPC machst du wiederum über ein sogenanntes Charakter-Skript, welches auch wieder ein bcs-file (oder halt baf) ist. Über dieses Charakter-file (und Variablen) steuerst du dann auch die Dialoge deiner Romanze. Über Befehle wie 'interact' weiss dann das Spiel in welcher Dialog-Datei es suchen muss und nimmt den Gesprächsabschnitt, der nach allen Bedingungen passt, also True ist.

Noch eine Frage, warum hast du das LANGUAGE immer drin, ist zwar auskommentiert (macht deshalb keine Probleme) aber was ist der Sinn der Sache?

[edit]
Schau dir auch mal das 'Wie bastle ich ein Modul?' Topic an, vielleicht hilf es dir weiter.

[edit2] Habs geänder, danke Cas. :)
 
Zuletzt bearbeitet:

Caswallon

Chronist
Registriert
13.08.2001
Beiträge
11.460
Es war auch in der Vorlage drin (und auskommentiert)? ;)

Kompilierte Scripte haben die Endung BCS, nicht-kompilierte BAF. :)

Cas
 

Seradin

Kleine Drow
Registriert
20.09.2002
Beiträge
1.386
Und was ist die Vorlage? Weil es macht keinen Sinn für mich, da ja mehrsprachige Mods mit tra-files gemacht werden, oder geht das auch anders?

[edit] Ich bin dann für heute weg, weitere Fragen, kann ich leider erst morgen beantworten, aber wir haben ja noch andere Mod-Bastler, die sich ruhig trauen dürfen ihr Wissen zu teieln. ;)
 
Zuletzt bearbeitet:

Tifa Nazah

Member
Registriert
09.02.2004
Beiträge
49
Das Language ist nur für mich gedacht, weil ich später das ganze in Englich übersetze, deshalb ist das für mich als Orientirung gedacht!!

Also trenne ich das Erschaffen erstmal von den Dialogen...


FRAGE: Wie kann ich es machen, dass der Dialog auf den Nemen des Hauptcharakters zugreift??


see u
Tifa Nazah
 
Zuletzt bearbeitet:

Caswallon

Chronist
Registriert
13.08.2001
Beiträge
11.460
Der Name des HC wird über den Tag (CHARNAME) angesprochen (die runden Klammern durch < und > ersetzen; das Forum zeigt das nicht an...)
Würde also gehen:
"Ich heiße Nuroe. Wie heißt Ihr?"
"Mein Name ist (CHARNAME)."

Cas
 

Tifa Nazah

Member
Registriert
09.02.2004
Beiträge
49
Thanx!! Wenn ich nun meien Dialoge unterteile, muss ich dann auch bei den Goto Nummern weiter zählen oder kann ich in beiden einzelnen FIles wieder mit Block eins beginnen??


see u
Tifa Nazah
 

Caswallon

Chronist
Registriert
13.08.2001
Beiträge
11.460
Du kannst neu beginnen, die Namen der Blöcke beziehen sich nur auf die Datei, in der sie stehen. :)

Cas
 
Oben