Autor Thema: NPC scripting  (Gelesen 3756 mal)

Offline Nidhacker

  • Geckojäger
  • Beiträge: 40
    • N.I.D. - acoustic (punk?) rock songs!!!
NPC scripting
« am: 09. Juli 2007, 10:56:41 Uhr »
hi hab dein kommentar zu mir in nma gelesen
finds gut das fallout now immer noch dran bleibt an dem modden
deine toturials sind echt klasse also ich mein man weiß sowas wahrscheinlich gar nicht zu schätzen sind echt gut
jeden falls hab halt auch bissl probiert nen script zu editieren um selber n neuen npc zu adden
auf jedenfall is mir noch nicht klar welche werte noch gespeichert werden müssen neben dem script um einen neuen npc zu adden
z.bsp. ai.txt oder party.txt dann stand was drin von party.h wo find ich das file? naja auf jeden fall bin ich wieder beim fallaut modden hängen geblieben obwohl dieses spiel uralt ist aber ich hab n bissl angst vor dem fallout 3 ich glaub das wird ne große entäuschung

naja grüße von nidhacker

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: NPC scripting
« Antwort #1 am: 09. Juli 2007, 11:05:24 Uhr »
Die Frage ist jetzt, was willst du machen? Einen einfachen NPC mit Dialog erstellen oder einen richtigen Party-Mitstreiter? Wenn letzteres.. dann ist es schon etwas schwerer, wenn du ihn genauso kontrollieren willst, wie die anderen Leute in deiner Party. (Sprich, Verhalten festlegen, etc.) Man kann aber auch die Fallout 1 Methode nehmen und alles über Text regeln.. ist auf jeden Fall einfacher.

Wie dem auch sei. Wenn du nur einen neuen NPC erstellen willst, musst du das Script lediglich in der script.h Datei ganz am Ende der Liste mit anfügen, danach kannst du das Script für den NPC kompilieren. In der script.lst Datei im Ordner /data/script/ musst du das Script ganz am Ende dann auch noch erwähnen und schon kannst du per Fallout 2 Mapper einem Critter dieses Script geben.

Du kannst ja erstmal das Script von irgend einem Stadtbewohner nehmen (also Hauptsache etwas einfaches.. vielleicht auch eine Ratte oder einen Hund), den Scriptnamen ändern (z.B. in Hund2), die script.h Datei öffnen, ganz am Ende das neue Script erwähnen. Danach die schon oben erwähnte script.lst im Ordner /data/script/ öffnen, ganz am Ende noch mal das Script erwähnen (dafür einfach nach deinem Vorlagescript suchen, die Zeile kopieren, nach ganz unten an das Ende der Liste scrollen, dort den Eintrag einfügen und den Name ändern) und dann im Mapper einem Critter dieses Script zuweisen.

Klingt vielleicht etwas verwirrend... aber ist im Grunde wirklich nicht schwer.

Vielleicht kann ich dazu bei zeiten ja auch noch ein kleines Tutorial schreiben und dann alles genauer erklären. Im Moment ist es aber etwas schlecht...
« Letzte Änderung: 09. Juli 2007, 11:06:55 Uhr von Lexx »
only when you no-life you can exist forever, because what does not live cannot die

Offline Nidhacker

  • Geckojäger
  • Beiträge: 40
    • N.I.D. - acoustic (punk?) rock songs!!!
Re: NPC scripting
« Antwort #2 am: 09. Juli 2007, 13:45:41 Uhr »
genau das war die antwort die ich gesucht hatte
mir gings um das hinzufügen von partymembers und wo man die überall registrieren muss oder auch normale npc's
ich hatte mir da als vorlage den friendly klint mod 2 genommen
man kann ja da auch in der dat sehen welche files editiert worden nur war das problem da eben da einfach ein script editiert wurde also überschrieben und der musste ja dann nicht mehr registriert werden
und da bin ich irgendwie durcheinander gekommen aber dennoch fehlen mir da noch par einzelheiten ich will eigentlich kein großes toturial aber mir würde schon reichen wenn du mir sagen könntest welche registrierungen und eben files bearbeitet werden müssen um ein party npc neu hinzufügen zu können die einzelheiten nehm ich mir aus anderen scripts und probier mich durch

danke im vorraus

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: NPC scripting
« Antwort #3 am: 09. Juli 2007, 14:09:22 Uhr »
Ich hab mich mit den Party-Mitgliedern ehrlich gesagt, noch nie beschäftigt. Nur mal ein "folge mir" und die Zugehörigkeit auf Freund gesetzt, aber das war es dann auch. In Fallout 2 ist das mit den Leuten nämlich ziemlich verwurstet. Ich würde dir vorschlagen, einen der vorhandenen Party-Mitglieder zu nehmen, die Hauptscript-Datei zu kopieren und dann die entsprechenden Werte und Variablen jeweils mit z.B. einer 2 am Ende oso zu erweitern. Dann nimmst du die File-Suche von FSE zur Hilfe und lässt alle *.h Dateien nach dem Namen der Figur durchsuchen. (Also z.B. "Vic" für Vic usw.) und gehst alle Treffer der Reihe nach durch. Findest du einen Eintrag, der interessant aussieht, machst du damit copy&paste und änderst wieder alle Werte mit z.B. einer 2 am Ende ab. So das du um Schluss quasi ein 1:1 Duplikat besitzt. Damit würde sich dann weiter rum experimentieren lassen.
« Letzte Änderung: 09. Juli 2007, 14:22:37 Uhr von Lexx »
only when you no-life you can exist forever, because what does not live cannot die

Offline Nidhacker

  • Geckojäger
  • Beiträge: 40
    • N.I.D. - acoustic (punk?) rock songs!!!
Re: NPC scripting
« Antwort #4 am: 14. Juli 2007, 09:19:52 Uhr »
wo findet man die script.h datei wo muss ich da suchen

danke nochmal

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: NPC scripting
« Antwort #5 am: 14. Juli 2007, 10:54:20 Uhr »
Fallout 2 Mapper -> Ordner "Scripts" -> Ordner "Header". Die *.h Dateien sind Header Dateien und finden sich dementsprechend in dem Ordner "Header" wieder. Alternativ kannst du auch die Windows interne Suche benutzen und nach der entsprechenden Datei im Scripts Ordner suchen lassen. Wird man so oder so recht häufig brauchen, wenn man nach einer Variable oder einem Wert sucht, der in vielen Dateien vorkommt. Das alles per Hand zu durchsuchen wäre Wahnsinn.
only when you no-life you can exist forever, because what does not live cannot die

Offline Nidhacker

  • Geckojäger
  • Beiträge: 40
    • N.I.D. - acoustic (punk?) rock songs!!!
Re: NPC scripting
« Antwort #6 am: 16. Juli 2007, 10:09:51 Uhr »
hätte da mal noch ne frage zum verständnis, die header dateien bzw. script.h befindet sich im mapper ordner ---> heißt das man soll hier einen richtig neuen script nur deshalb erwähnen damit man ihn über den mapper zuweisen kann, denn ich persönlich mache im nachhinein mods also packe alles in ne dat und lass das über modrunner laufen um den überblick zu behalten, aber die header dateien gibts im normalen f2 folder ja gar nicht heißt das, dass f2 die nicht erkennt wenn nur die veränderten dateien später inner dat sind

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: NPC scripting
« Antwort #7 am: 16. Juli 2007, 11:37:25 Uhr »
Die Header Dateien sind für die uncompilierten Scripte zuständig und mehr nicht. Du brauchst die Header Dateien, um die Scripte überhaupt compilieren zu können. Wenn du die einfach in dein Fallout Verzeichnis schiebst, passiert gar nichts.
only when you no-life you can exist forever, because what does not live cannot die

Offline Nidhacker

  • Geckojäger
  • Beiträge: 40
    • N.I.D. - acoustic (punk?) rock songs!!!
Re: NPC scripting
« Antwort #8 am: 25. Juli 2007, 20:51:10 Uhr »
yo, bins nochmal
also ich möchte per script einen caravan von aroyo nach san fran erstellen wie stell ichn das am besten an
hast du sowas schon ausprobiert oda irgendwelche erfahrungen mit den scripts und registrierungen? ---> @lexx

update ------>
kann schon par erfolge verzeichnen also hab den script vom caravan zw. redding und new reno genommen
und habs geschafft das dieser zw. 2 städten meiner wahl läuft z.bsp. aroyo und san fran mein hauptproblem ist zur zeit die defintion des start tages da kann ich zur zeit nur einen festlegen - wie kann ich den für jeden tag definieren?
mir würde es auch reichen die abfrage ob es dieser tag ist einfach zu entfernen

thx for any help

......> habs problem gelöst, scripting is doch net so schwer wie es scheint  ;D
« Letzte Änderung: 30. Juli 2007, 15:39:04 Uhr von Nidhacker »

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: NPC scripting
« Antwort #9 am: 27. Juli 2007, 14:00:21 Uhr »
Lexx nur mit 2 x bitte. Alles andere sieht nach 1337-Schwuchtelei und scheiße aus.

Natürlich ist scripten nicht schwer. Darum ist es ja auch scripten und nicht programmieren. :> (ich sehe da einen Unterschied. Nur weil man bei X scripten kann, bedeutet das nicht, dass man Y programmieren kann.)
only when you no-life you can exist forever, because what does not live cannot die

Offline Nidhacker

  • Geckojäger
  • Beiträge: 40
    • N.I.D. - acoustic (punk?) rock songs!!!
Re: NPC scripting
« Antwort #10 am: 29. Juli 2007, 19:21:05 Uhr »
hi, samma die gvar_ werte die in der global.h definiert sind was haben die für ne bedeutung, ich hab folgendes problem bei meiner modifikation mit dem caravan mod, ich kann den script verändern auch den neuen namen registrieren und ihn im mapper auch zuweisen aber bei der zwischenmap bei den encountern ist der alte critter wieder da, also der alte caravan leader obwohl ich den script nem anderen critter zugewiesen habe, hängt das mit den werten zusammen?
« Letzte Änderung: 29. Juli 2007, 19:24:22 Uhr von Nidhacker »

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: NPC scripting
« Antwort #11 am: 29. Juli 2007, 19:39:19 Uhr »
GVAR bedeutet Globale Variable. Das sind die Variablen, die über das ganze Spiel funktionieren. Es gibt insgesamt 3 Variable-Typen. Die locale Variable (LVAR) für die eine Map, in der das Script benutzt wird, die Map Variable (MVAR) für die entsprechende Ortschaft (zum Beispiel ganz Arroyo) und die globale Variable (GVAR), die überall funktioniert und überall übernommen wird.

Wenn du Variablen nicht über das Map-Script importierst- und exportierst, kommst du um den Gebrauch von globale Variablen nicht herum. Desweiteren kann jedes Script auch mehrmals verwendet werden. Wenn du also zwei Critter mit jeweils dem selben Script hast, dann funktionieren die beiden Identisch. Das kann man sehr gut an den meisten Stadtbewohnern sehen, die alle das selbe Script benutzten (zum Beispiel DCADDICT).

Desweiteren musst du, wenn du mit den localen Variablen arbeitest, auch noch die Variablen Anzahl in der scripts.lst erhöhen.

EXAMPLE_SCRIPT.int ; Beispiel Script                       # local_vars=10
only when you no-life you can exist forever, because what does not live cannot die

Offline Nidhacker

  • Geckojäger
  • Beiträge: 40
    • N.I.D. - acoustic (punk?) rock songs!!!
Re: NPC scripting
« Antwort #12 am: 30. Juli 2007, 10:17:02 Uhr »
ja was das heißt versteh ich auch aber was es bedeutet für meinen script versteh ich nicht diese variable wird in der global.h jemanden zugewiesen und dann wird dieser wert im script verwendet aber was tut diese variable ich versteh das net so richtig?

ps.:-------> hast du ne ahnung warum der alte critter von meinem caravan script wieder auftaucht in der encounter map obwohl ich nen anderen scriptnamen habe und diesen einen anderen critter zugewiesen hatte
« Letzte Änderung: 30. Juli 2007, 10:20:37 Uhr von Nidhacker »

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: NPC scripting
« Antwort #13 am: 30. Juli 2007, 11:25:36 Uhr »
Wenn die Person das andere Script noch aktiv hat, wird das Script auch ausgeführt. Lösch' mal die Person komplett, dann sollte sie wirklich verschwinden.

Die globale Variable ist nichts anderes als alle anderen Variablen auch. Sie funktioniert nur überall. Die Variable ist nur ein Zahlenwert, den du per increase oder decrease (oder + und -) erhöhen oder verringern kannst. In den Scripten musst du dann abfragen, welchen Wert die Variable hat. Ich sage zum Beispiel, Persona A soll sich zu Tile 123456 bewegen, sobald die globale Variable GVAR_MOVE_ON auf 1 gesetzt wird. Wenn ich jetzt durch irgend eine Aktion (zum Beispiel in einer Aktion in einem Dialog) die globale Variable mit "set_global_var(GVAR_MOVE_ON,1)" auf 1 setze, wird sich Person A nach dem nächsten Map Update zu Tile Nummer 123456 bewegen.

Die globale Variable wird in der global.h niemandem zugewiesen. Es ist eine globale Zahlen-Variable und sie funktioniert für jeden und für jedes Script. Du kannst sie überall und für alles benutzen. Du kannst etwa sagen, ist die GVAR_XY auf 1, soll in Script A was passieren, in Script B wird auch etwas ausgelöst und in Script C genauso.
only when you no-life you can exist forever, because what does not live cannot die

Offline Nidhacker

  • Geckojäger
  • Beiträge: 40
    • N.I.D. - acoustic (punk?) rock songs!!!
Re: NPC scripting
« Antwort #14 am: 30. Juli 2007, 14:06:06 Uhr »
also ich hab den script von rcsavine in redding genommen...ist der caravan von redding nach new reno oder eben umgekehrt....
auf den maps in redding und in new reno befinden sich die beiden critter  die diesen script zugewiesen bekommen haben...
ich hab einfach damit sie immer den caravan fahren den start_day als get_day definiert und die zeitspanne der tage erhöht an denen dieser critter sichtbar wird also einfach editiert dann habe ich die mapstr_ ausgetauscht durch meine städte wo ich möchte das der caravan hin und her pendelt es funktioniert auch ich muss ja nur auf dern maps dem jeweiligen critter diesen script zuweisen ich habe den script umbenannt  von rcavine in was anderes und den anderen über mapper zugewiesen aber in der zwischen map mit den encountern taucht der alte critter als caravan leader auf

----> ich weiß halt net wie der caravan master auf die encountermap kommt  es gibt ja ne caravan.h aber da gehts ja nur um stats wie der critter nun mit auf die encountermap genommen wird weiß ich net es gibt da so ne procedur wo es um master carts encounter und deren anzahl geht aba wie die critter aussehen die zu diesem caravan gehören weiß ich nicht und wie die da hinein kommen
« Letzte Änderung: 30. Juli 2007, 14:13:55 Uhr von Nidhacker »

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: NPC scripting
« Antwort #15 am: 30. Juli 2007, 14:54:05 Uhr »
Nur ne kurze Frage, weil ich in Fallout 2 so gut wie nie mit der Caravane mitgefahren bin -> Der Typ, den du wegen der Caravane ansprichst... ist der auch wirklich auf der Encounter-Map? Kann mich daran erinnern, dass das bei Fallout 1 im Hub nicht so war. Da stand dann der Typ mit rotem Hemd, den man angequatscht hat, wenn man abgefahren und am Ziel angekommen ist und das war's auch.

Du musst doch nur eine gvar verändern, also z.B. immer auf 1 oder 0 setzen, wenn die Person gerade da ist oder nicht (So würde ich das jedenfalls machen). Dann unter map_enter_p_proc angeben, dass der Critter unsichtbar werden soll, wenn die gvar z.B. auf 1 ist.

set_obj_visibility(self_obj,0);
« Letzte Änderung: 30. Juli 2007, 14:56:08 Uhr von Lexx »
only when you no-life you can exist forever, because what does not live cannot die

Offline Nidhacker

  • Geckojäger
  • Beiträge: 40
    • N.I.D. - acoustic (punk?) rock songs!!!
Re: NPC scripting
« Antwort #16 am: 30. Juli 2007, 15:34:47 Uhr »
der typ den du fragst um mitzufahren ist in den beiden orten wo der caravan pendelt, auf der zwischenmap mit den encountern ist im mapper kein critter vorhanden deswegen müssen die critters ja irgendwie draufkommen aba wie das geht weißsch net  :wall1cf: in f2 ist der auch mit bei der encountermap imma drauf und wenn der stirbt wars das mit dem caravan
« Letzte Änderung: 30. Juli 2007, 15:38:06 Uhr von Nidhacker »

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: NPC scripting
« Antwort #17 am: 30. Juli 2007, 19:37:37 Uhr »
Hmm.. keine Ahnung, müsste mir das mit den Caravanen mal ingame genauer anschauen.. hab ich nie so wirklich drauf geachtet.

Ich denke, so per einfaches Script bekommt man die Figuren nicht einfach auf die Encounter-Map. Das läuft über die worldmap-Datei (kA wie die jetzt genau heißt), in der stehen auch alle anderen Encounter drin.

Mir würde jetzt aber eine Alternative einfallen... du erstellst ein paar Maps, die die Encounter darstellen. Also alles schon fertig machen, mit Caravan Critter, etc. die Gegner kannst du später per Map-Script einfügen.

Wenn du jetzt mit dem Typen für die Caravane redest, lässt du eine Zufallsvariable erstellen, die auch vom Glück des Spielers, etc. beeinflusst wird. Jetzt wird je nach Variablen Wurf eine der erstellten Encounter-Maps geladen und das Map-Script sorgt dafür, dass per Zufall eine bestimmte Gegnergruppe erscheint (wird sehr fummelig das umzusetzen, ist aber nicht unmöglich). Verlässt man die Map, bevor alle Gegner getötet sind (hier muss man eine Variable zählen lassen), ist die Caravane verloren. Hat man alle Gegner getötet und verlässt die Map, wird der Zielort geladen.

Diese Methode wäre natürlich ein ganzes Stück komplizierter zu erstellen, aber wäre für mich jetzt die nächst beste Lösung.
only when you no-life you can exist forever, because what does not live cannot die

Offline Nidhacker

  • Geckojäger
  • Beiträge: 40
    • N.I.D. - acoustic (punk?) rock songs!!!
Re: NPC scripting
« Antwort #18 am: 09. August 2007, 07:44:28 Uhr »
das mit der map ist ne gute idee auch net sonderlich kompliziert da kann man ja vorhandene caravan maps nehemen obwohl die ja auch mit gvars arbeiten und irgendwie auf die map gesetzt werden, die  wagen ---> carts und guards usw. ja auch

ich bräuchte mal ne info wie der partymember mod funktioniert ----> pm1002.dat da sind sämtliche scripts drin von den pm npc's und ich weiß nicht was sie da verändert haben in den scripts ich find es auf anhieb nicht  :-\ ich würde das gern in nen anderen mod einbauen bzw. korrigieren damit die sich nicht gegenseitig blockieren....

mod dient dazu ,dass es keine beschränkung für die anzahl von partymembern mehr gibt
(aba alle anderen sachen sind aktiv - ich persönlich hätte einfach die procedur umbenannt, die ablehnt, dass der partymember beitritt und zwar in die die ihn lässt) aba naja irgend ne abfrage scheinen sie entfernt zu haben aba ich komm nicht drauf

thx for ya help
« Letzte Änderung: 09. August 2007, 07:54:53 Uhr von Nidhacker »

Offline Lexx

  • Administrator
  • Auserwähltes Wesen
  • Beiträge: 17.726
Re: NPC scripting
« Antwort #19 am: 09. August 2007, 10:04:00 Uhr »
Irgendwo in den Scripten gibt es den Charma-Check. Den müsstest du auskommentieren, dann sollte es funktionieren. Schau dir erstmal die Scripte der anheuerbaren NPCs an und such in den Prozeduren, bei denen der NPC entweder zum Team hinzugefügt wird oder nicht. Wenn das nicht hilft, schau in den entsprechenden header Dateien für die NPCs nach. Ansonsten.. ich habe die Mod nie ausprobiert und werde es auch nicht tun... eine Begrenzung bei den (zum teil) unfähigen NPCs finde ich schon okay.
only when you no-life you can exist forever, because what does not live cannot die