[Modding] Scripts für NPC-Mod und NPC Design

Ascalon

Senior Member
Registriert
08.04.2008
Beiträge
2.730
Warum man zwei Scriptblöcke braucht ist eigentlich ganz simpel: Um sicher zu gehen, dass die Dialoge auch wirklich alle ausgeführt werden. Es kann z.B. vorkommen dass der Timer gerade ausläuft, die Figur aber stumm oder bewusstlos ist oder dass genau in der Sekunde ein Kampf beginnt oder der Spieler etwas macht was die Aktion unterbricht. Beispiel:

Code:
IF
   Global("LOVETALK","GLOBAL",1)
   GolbalTimerExperienced("LOVETALKTIMER","GLOBAL")
THEN
   RESPONSE #100
      IncrementGlobal("LOVETALK","GLOBAL",1)
      StartDialogNoSet(player1)
END

Es kann passieren, dass dieses Script gerade dann anläuft wenn gleichzeitig z.B. Orks auftauchen, die den NPC angreifen. Dann wird die Variable hochgestuft, allerdings beginnt das Gespräch nicht, da der Charakter gerade beschäftigt ist. Der Scriptblock wird unterbrochen.

Um das zu vermeiden wird in EINEM Block die Variable gesetzt und im nächsten Block immer wieder gecheckt ob die Variable ein Gespräch triggert. So kann z.B. der Timer mitten in einem Kampf auslaufen, die Variable wird auf 2 gesetzt und ein anderen Block checkt ob gerade a) Die Variable auf 2 ist und b) kein Kampf ist, damit das Gespräch triggern kann.
 

Romin

Member
Registriert
24.10.2011
Beiträge
43
Okay, das verstehe ich :-)

Nur das (sowohl in dem verlinkten Tutorial als auch so wie ich probiert habe - mit einem Block eben), die Variable ohnehin im Dialog erhöht wird; das scheint mir dahingehend sicher, dass Var++ <=> Dialog hat tatsächlich stattgefunden. Derart konzipiert dürfte das doch das von Dir geschilderte Problem ebenso umgehen. (Zusätzlich sollte man wohl, entgegen dem was ich im obigen Post geschrieben habe, auch den Timer im entsprechenden Dialog neu setzen, dann muss man nicht 2 oder mehr Timer-Zeiten warten bis das bislang unterbrochene Gespräch kommt).

Gruß, Romin

Sehe gerade: Ascalon und Jarl haben (fast) gleichzeitig geschrieben (und ich habe Jarls zu spät gesehen) - Danke euch beiden.
 
Zuletzt bearbeitet:

Romin

Member
Registriert
24.10.2011
Beiträge
43
Hallo schon wieder...

Langsam kriege ich nen Vogel; irgendwie scheint die Banterei bei mir nicht zu funktionieren. Die folgenden beiden Banter habe ich ins B-File meines NPCs gepackt:

Code:
CHAIN /* Seamus-Imoen Banter 01: She plays him.*/
IF ~InParty("Imoen2")
    See("Imoen2")
    !StateCheck("Imoen2",STATE_SLEEPING)
    Global("R2SeamImiB1","LOCALS",0)~
THEN R2SeamuB ImiSoldier ~Imoen?~ DO ~SetGlobal("R2SeamImiB1","LOCALS",1)~
    == BIMOEN2  ~SIR, yes, SIRRRR!~
    == R2SeamuB ~... Erm, I ... I just wanted to ask you a question, if you don't mind?~
//es geht noch ein bisschen so weiter wie in den beiden Zeilen drüber
EXIT

CHAIN /* Seamus-Garrick Banter 01: About A Poem.*/
IF ~InParty("Garrick")
    See("Garrick")
    !StateCheck("Garrick",STATE_SLEEPING)
    Global("R2SeamGarrickB1","LOCALS",0)~ THEN R2SeamuB WriteAPoem
    ~Garrick, may I ask you a favor?~ DO ~SetGlobal("R2SeamGarrickB1","LOCALS",1)~
    == BGARRI   ~Hmm? Well, you can ask, of course. But remember, you cannot bribe me into composing a ballad about yourself!~
    == R2SeamuB ~What? Ah, no, of course not, I am not interessted in fame, only in doing what is good and right. (cough)~
//es geht noch ein bisschen so weiter wie in den beiden Zeilen drüber
EXIT

Jetzt installiere ich das Ganze (compiliert auch anstandslos) und starte BG, lade Spielstand und drücke Strg-I bis endlich meine Banter starten. Das passiert auch noch, ABER jeweils nach der ersten Zeile Seamus' ist Schluß und es geht nicht weiter! (Hab auch schon versucht, ein neues Spiel anzufangen, damit Imoen und Garrick mal neu "created" werden, hat aber nichts genützt.)
BGARRI habe ich per NearInfinity überprüft und da sind die ganzen Banter drin, die der gute Garrick hat... Was mache ich denn falsch?

Gruß, Romin

EDIT: Der Vollständigkeit halber seit gesagt, dass ich BGARRI auch schon in ~ gestellt hatte, aber das ändert natürlich auch nichts.
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Tja, ich würd da einfach mal schauen, ob Imoen überhaupt die BIMOEN2 zugewiesen hat. ^^ Da gibt es nämlich einen Fehler BG2 UND ToB, der mit keinem Patch behoben wurde und erst in diversen Fixpacks von den Moddern behoben wurde. ^^

Darum packt man auch immer ein

Code:
//Giving Imoen a banter file if the Fixpack isn't installed
ACTION_IF NOT FILE_EXISTS_IN_GAME ~cdbehbla.pro~ //makes sure the fixpack isn't already installed
THEN BEGIN
ACTION_IF FILE_EXISTS_IN_GAME ~saradush.mve~ THEN BEGIN
  COPY_EXISTING ~interdia.2da~ ~override~
    SET_2DA_ENTRY 17 1 2 ~BIMOEN2~ // fixes ToB version
    BUT_ONLY_IF_IT_CHANGES
END ELSE BEGIN
  APPEND ~interdia.2da~ ~IMOEN       BIMOEN2~ // fixes SoA version
    UNLESS ~BIMOEN2~
END
END

in seine TP2 für die Leute, die aus irgendwelchen Gründen keins der Fixpacks installieren.



Edit:
Warum sind da soviele Leerzeichen beim ersten Wechsel in die anderen DLGs? :confused:

== BIMOEN2__~SIR, yes, SIRRRR!~
 
Zuletzt bearbeitet:

Romin

Member
Registriert
24.10.2011
Beiträge
43
Hey Wedge!

Fixpacks sind eigentlich drauf... habe aber Deinen Code mal ins TP2 rein kopiert. Muss der an eine bestimmte Stelle? Funktioniert nämlich nicht...

Langsam beschleichen mich Zweifel ob der der BWP Installation vielleicht was schief gelaufen ist...

Keine Ahnung warum da Leerzeichen sind :confused:, in meinem B-File ist da immer nur 1 LZ

Gruß, Romin
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Magst mir mal deine d-Datei hochladen? Oder die Mod selbst? Dann schau ich mal, ob ich das nachvollziehen kann.
 

Romin

Member
Registriert
24.10.2011
Beiträge
43
Hallo Wedge, Sorry das ich solange nicht geantwortet habe und Danke für das Angebot!

Die gute Nachricht ist: es funktioniert jetzt und zwar genau so, wie ich es oben abgedruckt habe (und Du mir vorher schonmal geschrieben hast - siehe ein paar Post weiter oben), also ganz normal mit CHAIN und BIMOEN2 (als Banter-File), ganz wie es sich gehört.
=> Lösung: Neuinstallation der Big World - das habe ich die vergangenen paar Stunden gemacht :) (habe die Gelegenheit genutzt noch einige zusätzliche Mods drauf zu ziehen, die ich so gerne mag, dass Seamus da gerne interagieren soll, wenn die vorhanden sind ;) )

Bei der letzten Installation ist wirklich irgendwas schiefgelaufen - ist mir erst heute aufgefallen, dass zum Beispiel gar kein Generalized Biffing stattgefunden hatte. Ich hatte die letzte Installation in halber Abwesenheit und in aller Schnelle auf mein altes Notebook gezogen, weil ich mit dem modden anfangen wollte, daher war ich wohl ein wenig nachlässig :)
Jedenfalls freut es mich, dass es sich jetzt erledigt hat und nochmals Danke für Dein Hilfsangebot! Gute Nacht :)

Gruß, Romin
 
Oben