[Modding] Anfängerfragen Modding

Arren

Senior Member
Registriert
28.04.2009
Beiträge
421
Wenn die beiden ds zum selben Charakter gehören, würde es funktionieren, soweit ich informiert bin.

Dazu aber dann doch lieber die Meinung der fortschrittlichen Code hier:shine:
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Lokale Variablen werden Kreaturenlokal gespeichert. In BG2 jedenfalls (in BG1 werden die gar nicht gespeichert, soweit ich weiß). Was heißt, sie müssen Kreaturenlokal gesetzt und abgefragt werden, können aber natürlich von allem benutzt werden, was diese Kreatur hat. Also DLGs und BCSs und ITMs und SPLs und so weiter und so fort. Das setzen kann über ein ActionOverride() selbstverständlich auch von jeder anderen Kreatur aus erfolgen, das Abfragen aber natürlich nicht.

Da lokale Variablen kreaturenlokal im Savegame gespeichert werden, können mehrere Kreaturen die gleiche Variable besitzen (NumTimesTalkedTo() fragt zum Beispiel eine Variable ab, die immer gleich heißt und bei jeder Kreatur, mit der man labert gesetzt wird) oder verschiedene Inkarnationen der selben Kreatur können die Variable in unterschiedlichen Werten besitzen.

Du kannst also eine lokale Variable per ActionOverride() in einem Area-Script setzen, sie in der Banter.dlg zuerst benutzen und sie danach für einen PID in der Joined.dlg abfragen.


Die Vorteile sind, dass der Scope kleiner ist und du damit wesentlich weniger Variablen zum Abfragen hast auf lange Sicht. Wenn du ein IF ~Global("muhkuh","GLOBAL",42)~ THEN hast, geht er alle globalen Variablen durch. Wenn du da 10k stück im Save hast, ackert er. Bei nem IF ~Global("muhkuh","LOCALS",42)~ würde er halt nur die Variablen der Kreatur durchgehen und keine anderen.

Bei den hunderten Mods, die wir inzwischne haben, ist es sehr vorteilhaft, wenn man anfängt, LOCALS clever zu benutzen, da son Savegame sowieso schon mit tausenden Variablen total zugemüllt wird .

Der große Nachteil ist, dass du bei einem Verlust der Kreatur auch die ganzen Variablen verlierst. Denke ich jedenfalls, das hab ich noch nicht getestet gehabt.
 
Zuletzt bearbeitet:

Toran

Schattenritter
Registriert
09.03.2008
Beiträge
2.377
Danke, das meiste leuchtet mir jetzt ein. Aber was meinst du mit Verlust? Wenn der NPC die Gruppe verlässt?
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Jain. Die Kreaturen mit ihren Variablen bleiben ja im Save vorhanden, egal ob sie in der Gruppe sind oder nicht. Aber wenn du wegen nem Bug zum Beipspiel den NPC verlierst (weil er zum Beispiel abhaut) und du holst dir den dann mit CreateCreature neu, dann sollte er meinem Verständnis nach bei 0 anfangen. Sprich keine Variablen mehr haben.

Ich denke, dass es so ist, habe es aber wie gesagt noch nicht mit Tests validiert.
 

Toran

Schattenritter
Registriert
09.03.2008
Beiträge
2.377
Soweit so gut. Im Shadowkeeper sehe ich nur die globalen Variablen. Wo und wie kann ich denn sehen, welchen Wert eine lokale Variable hat?
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Bei NearInfinity sind das die Effects auf den Cres in der GAM-File. Wo/Ob man das mit dem Shadowkeeper auch sehen kann, weiß ich nicht.
 

Toran

Schattenritter
Registriert
09.03.2008
Beiträge
2.377
Gibt es vielleicht die Möglichkeit sich die lokalen Variablen mit CLUA anzeigen zu lassen?
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Klar. GetGlobal("muhkuhtheox","LOCALS") während der NPC markiert und der Mauszeiger auf ihm drauf ist. Wie beim setzen der lokalen Variablen halt.
 

Toran

Schattenritter
Registriert
09.03.2008
Beiträge
2.377
Super, vielleicht kommen wir dem Breagarproblem jetzt auf die Spur. :)
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Ick sitz aufm Trockenen... :D

Ich gehe mit diesem State in die Cutscene KBChri02

Code:
IF ~~ THEN BEGIN FirstBerDia8
SAY ~Ja, Minsc, Heiliger..!! Urgroßvater Boo ist seehr mächtig und Tobi wird bald auch sehr mächtig sein..~
+ ~OR(3) !InParty("Minsc") !InMyArea("Minsc") StateCheck("Minsc",CD_STATE_NOTVALID)~ + ~Wow, wie hätten die Wetten *darauf* gestanden..? Wartet, gute Frau, wir werden das uns mögliche tun, Euren Tobi für euch zu finden.. Leute! Wir schwärmen mal eben *vorsichtig* aus, und suchen nach Hinweisen, wo ein *Hamster* sich versteckt haben könnte.. das ist *kein* Scherz..~ DO ~SetGlobal("KBChristaQuest","GLOBAL",2) ClearAllActions() StartCutSceneMode() StartCutScene("KBChri02")~ EXIT


Die Cutscene sieht dann so aus

Code:
IF
True()
THEN
RESPONSE #100
CutSceneId(Player1)
MoveViewPoint([2171.3499],VERY_FAST)
MoveToPoint([2171.3499])
Wait(3)
DisplayStringHead(Myself,~Vor Euch auf dem Boden seht Ihr ein paar Kadaver von Minispinnen, Fellbüchel und schleimige Spuren, die sehr wohl einem Hamster gehören könnten. Die Spuren führen gen Westen.~)
EndCutSceneMode()
END


IF
True()
THEN
RESPONSE #100
CutSceneId(Player2)
MoveToPoint([3478.3690])
END


IF
True()
THEN
RESPONSE #100
CutSceneId(Player3)
MoveToPoint([3036.3800])
END


IF
True()
THEN
RESPONSE #100
CutSceneId(Player4)
MoveToPoint([2750.3202])
END


IF
True()
THEN
RESPONSE #100
CutSceneId(Player5)
MoveToPoint([2405.3212])
END


IF
True()
THEN
RESPONSE #100
CutSceneId(Player6)
MoveToPoint([3068.3807])
END

Das ist im Grunde ne Kopie von Garricks Cutscene in Beregost, wenn er einen zu Silke führt. Das Problem ist jetzt, dass das da oben nicht funzt. Die Kamera bewegt sich korrekt, der String wird auch abgespielt, aber die Leute bleiben alle stehen wo sie sind. Sie zittern kurz rum, und dann ist Ruhe. Ich habe das auch mal nur mit CHARNAME versucht und auch mal alle Bewegungsbefehle in denselben Block gehackt. Nüscht. Als ich beim ausbaldowern der Wartezeit war (die ich auch schon mal auskommentiert habe, falls es daran liegt) ist CHARNAME einmal losgelaufen. Die anderen aber nicht. Und einmal sind Player2 und Player4 losgewetzt, der Rest aber nicht.

Bin grad ein wenig ratlos, was da nun das Problem ist...

(Und das wo die Programmiersession so angenehm anfing heute. :rolleyes:)
 

Jarl

Senior Member
Registriert
28.04.2006
Beiträge
980
Hmm, vielleicht fügst du vor den "MoveToPoint"-Befehlen noch einen SmallWait(1) oder so ein... möglicherweise wird der Befehl sonst noch von der ClearAllActions() gefressen - ist aber nur ne vage Vermutung :c:
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Ich würde es auch mal mit ActionOverride() statt der einzelnen CutsceneIds probieren.
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
@ Jarl
Waits welcher Art auch immer haben nichts gebracht.


@ Taimon
Hatte ich zuerst gemacht. Wie schwer kann sone Cutscene schon sein, hab ich mich gefragt. Als das dann nicht funzte, hab ich mir Bio-Cutscenes angeschaut und da halt gesehen, dass die das so hier machen.
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Wenn du mir ein Archiv mit allen relevanten Dateien zukommen lässt, schau' ich's mir genauer (also im Debugger/Disassembler :D) an.
 

Ascalon

Senior Member
Registriert
08.04.2008
Beiträge
2.730
Probier's mal, nur für Laune, mit MoveToPointNoInterrupt(). Vielleicht funkt da irgendwas zischen.
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Mit nem MoveToPointNoInterrupt() passiert gar nichts mehr.

Hier ist n Link. Die Cutscene ist die KBChri02.baf, aufgerufen wird sie in Beregost vorm Spinnenhaus.
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Ich enttäusch' dich ja nur äußerst ungern, aber bei mir funktioniert das ganze ohne Probleme. Player1 folgt der Spur und der Rest geht außer Sichtweite.

Sollte vielleicht dazusagen, dass ich noch einen sehr alten Rechner (P4 2Ghz) nutze und auch nicht das aktuellste BGT drauf habe. (Ist noch 1.07 WIP.)
 

Wedge

Wedgetarian
Registriert
04.07.2007
Beiträge
9.373
Okay, davon angestachelt hab ich jetzt mal ein wenig rumgetestet.

Ich glaube, ich hab das mit dieser Version der CS immer mit nem Save gleich nach Kerzenburg getestet, wo ich nur Immy dabei hatte. Die Varianten, wo mal Player2 und Player 4 losrannte und dann mal niemand war noch von davor, als ich alles mit ActionOverride()s gemacht habe. War alles spät nachts, wie das halt so ist. :D Jedenfalls mit der zweier Gruppe geht die CS nicht richtig (Immy zappelt und bleibt dann stehen), ab ner Partygröße von dreien flutscht sie auch bei mir. Irgendwie seltsam... :hae:

Aber warum auch immer das so ist, ich denke, damit damit kann ich wohl leben. Oder der Spieler... :shine:

Thx für deine Mühe!
 

Toran

Schattenritter
Registriert
09.03.2008
Beiträge
2.377
Mal eine Frage betreffs einer Totalkonversation:
Wie kann man sämtliche Charaktere, inklusive NPC's sowie alle Kennzeichen und Dialoge entfernen um eine saubere Ausgangslage zu haben?

Es sollen nur die Karten inklusive Verknüpfung übrigbleiben.
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.946
Da bin ich mir gar nicht ganz sicher. Es ist jedenfalls leicht, die .are Dateien zu überschreiben, oder Du machst eigene, die die bestehenden tis (Graphikdateien) der Areas verwenden (in dem Fall müssten auch wed, und die hieght, light und search maps mit diesem Namen bereitgestellt werden). Aus den are löschst Du alle Einträge bis auf die Verknüpfungen (und Animationen, die Du verwenden möchtest)

Die Areaskripte müssen überschrieben werden (oder Du hast eigene Namen vergeben).
Wie machen das denn die bestehenden TCs? Welche Areas verwendet denn z.B. Classic Adventures, sind das ganz neue Gebietsgrapiken?
 
Oben