[Tutorial] Moddingerfahrungen - Tricks und Kniffe

Dieses Thema im Forum "Modding Forum" wurde erstellt von Ascalon, 8. September 2009.

  1. Lich

    Lich Senior Member

    Registriert seit:
    Sep. 2007
    Beiträge:
    1.557
    Zustimmungen:
    0
    Ja das würde alle Preise dieses Ladens verändern. Wenn du den Preis einzelner items verändern willst, musst du schon das entsprechende item editieren.

    Lich
     
  2. Kyros

    Kyros Senior Member

    Registriert seit:
    März 2006
    Beiträge:
    104
    Zustimmungen:
    0
    @Lich

    Ja das hatte ich ja versucht, aber wenn ich die Itemdatei da öffne sehe ich nirgends einen Wert, der für den Preis stehen könnte. Kannste mir da bisschen was erklären? Danke.

    EDIT:Ok erledigt bin draufgekommen.:)
     
    Zuletzt bearbeitet: 13. August 2010
  3. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.492
    Zustimmungen:
    30
    In Guter Tradition führe ich das mal fort. Es gibt so viele kleine Dinge, die man einfach wissen muss, da man sonst ewig am debuggen ist. So, wie ich gerade über sie stolpere, so werde ich sie hier posten.

    CreateItem(S:ResRef*,I:Usage1*,I:Usage2*,I:Usage3*) nicht für das Bestücken von NPCs mit Gegenständen verwenden, da diese sonst im "magische Waffenslot" abgelegt werden und der NPC daraufhin nicht mehr seine Waffen ausrüsten kann (Meldung "Magical Weapon in use").
    Für NPC immer das GiveItemCreate(S:ResRef*,O:Object*,I:Usage1*,I:Usage2*,I:Usage3*) verwenden.

    CreateItem() funktioniert wunderbar, wenn Gegenstände z.B. in einer Truhe/Container erzeugt werden sollen.
     
  4. Maus

    Maus Senior Member

    Registriert seit:
    Aug. 2002
    Beiträge:
    5.547
    Zustimmungen:
    1
    Was ist in dem Zusammenhang mit den Belohnungsitems für die Gruppe (HC)? Ich meine, da müsste CreateItem() funktionieren, oder? Liegt dann glaube ich im Rucksack... und konnte man bei CreateItem() nicht auch den Slot angeben?
     
  5. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.492
    Zustimmungen:
    30
    Ich kenne mich mit den Belohnungsitems nicht so aus. Du meinst die in den EE-Spielen (SoD?)?. In der "explore.bcs" von SoD habe ich z.B. das gefunden:
    Das scheint ja dann zu funktionieren, sollte man meinen.

    Ich habe aber genau diese Aktion(en) für meinen mod NPC verwendet, und das führte zu dem "Magical Weapon in use"-Bug.

    Den Slot kann man im eigentlichen "CreateItem"-Befehl nicht auswählen.

    In der EE und klassischem BGII wird dieses "Feature" glaube ich gerne ausgenutzt, um Gegenstände so bei NPCs zu platzieren, dass sie nicht stehlbar sind. Zumindest vermute ich das, da hier z.B. in der AR0115.bcs Marek sein Gegengift auf diese Weise erzeugt bekommt. Im original BG1 wurde CreateItem nicht einmal verwendet (funktioniert für Truhen ja auch nicht richtig im klassichen original BG1:TotSC).
     
    Zuletzt bearbeitet: 23. Juli 2018
  6. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.492
    Zustimmungen:
    30
    Unterschied zwischen der klassischen BGII-Engine und der EE:
    Verlässt ein NPC die Gruppe über ein gescriptetes LeaveParty(), dann wird bei der EE automatisch auf den "Kickout"-Dialog geändert (xxxP.dlg).
    In der klassischen BGII muss der Wechsel zur xxxP.dlg ebenfalls gescriptet werden über SetLeavePartyDialogFile(), oder die xxxJ.dlg ist weiterhin aktiv.
     
  7. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.492
    Zustimmungen:
    30
    Wenn NPCs tot in der Gruppe sind und man rasten möchte, dann kann das "Dreamskript" des NPC (= Skript, das Dialogue etc. beim Rasten auslöst) zu einem CTD führen, wenn die Trigger in ungünstiger Reihenfolge angeordnet sind.
    Dieser Skriptblock löst einen CTD aus:
    Dieser nicht. Der AreaType() check ist nun so weit unten, dass vorher überprüft wird, ob der NPC überhaupt sprechen kann:
    Als dieser Zusammenhang beim Testen des BG1NPC Projekts vor Jahren festgestellt wurde, wurde damals der AreaType() check als Ursache identifiziert. Ich hatte aber auch für eine andere Mod erst vor "kurzem" einen ähnlichen Bericht über einen Absturz beim Rasten mit totem NPC, ohne dass sich im Dreamscript ein AreaType() befand. Es ist also ratsam, Skriptblöcke im Dreamskript immer mit dem !StateCheck(Myself,CD_STATE_NOTVALID) zu beginnen.
    (Festgestellt für die klassische Engine, aber eventuell auch noch für EE relevant.)
     
  8. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.492
    Zustimmungen:
    30
    Geben Charaktere - vor allem in der EE - plötzlich völlig willkürliche Textzeilen als Kommentare im Textfenster von sich, dann ist höchstwahrscheinlich der .cre-Datei ein willkürlicher String als Soundreferenz zugeordnet.
    In der klassischen Engine fiel das nicht (so) auf, da die ganzen Engine-gefeuerten (nicht gescripteten) Situationskommentare nicht wirklich getriggert wurden (außer den bekannten, wie "im Wald", "in der Stadt", "müde", "im Dungeon", "zu viel Gepäck" etc.).
    Um die Stringreferenzen los zu kriegen, die cre-Datei in NI öffnen, und die falschen Nummern in den Soundreferenzen mit "-1" (No such index) ersetzen.
     
  9. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.492
    Zustimmungen:
    30
    Wenn eine Area / das Spiel plötzlich abstürzt, dann sind die Gründe meistens:

    -eine Kreatur hat eine nicht-existente/fehlerhafte Animation zugewiesen
    -eine Kreatur hat eine falsche Farbe zugewiesen (für die verschiedenen Bereiche Haare/Rüstung/Haut/etc.) gibt es bestimmte Farbdefinitionen, die eingehalten werden müssen
    -die Waffe einer Kreatur hat eine nicht-existente/fehlerhafte Animation zugewiesen
    -eine Hintergrundanimation ist nicht im selben Biff/Overide wie die Area (Kaminfeuer, Wasserfall, etc.)
    -die Area schmiert randommäßig ab: die Engine wollte einen Ambientsound triggern, der sich nicht im selben Biff/Override befindet
    -oder: ein Spawnpunkt hat fehlerhafte Kreaturen spawnen wollen
     
  10. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.492
    Zustimmungen:
    30
    Wenn in der EE das Spiel plötzlich abschmiert / einfriert, dann wurden mit hoher Wahrscheinlichkeit Texte verwendet, die nicht im benötigten utf-8 (ohne BOM)-Format waren und Symbole enthielten (also andere Buchstaben als die lateinischen, u.a. ä,ö,ü,ß)*. Sobald ein solcher Text erscheinen würde, friert das Spiel ein und ist abgestürzt. Z.B.: beim Betreten einer Area, die ein Symbol in einem Mappoint hat. Beim Öffnen des Inventars bei einem Item, das ein Symbol im Namen hat. Beim Öffnen der Itembeschreibung, wenn hier ein Symbol verwendet wurde. Beim Erscheinen einer Dialogzeile während eines Dialogs, in der eins verwendet wurde.
    Zum Debuggen überprüfen, ob HANDLE_CHARSETS richtig angewendet wurde.

    *Die klassische Engine möchte die Texte in ANSI.
     
  11. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    4.492
    Zustimmungen:
    30
    Bei der Kompilierung der tra-Dateien gibt es folgende Hirarchie:
    TRA werden in der Reihenfolge LANGUAGE, WITH_TRA, USING und AUTO_TRA geladen. Das heißt: AUTO_TRA hat die höchste Priorität, und überschreibt die Zeilen der tra-Datei, die z.B. mit USING spezifiziert wurde.

    Das ist zum Beispiel wichtig bei Dialogdateien und Skriptdateien eines Mod-NPC. Häufig heißen zwei gleich, nur eben die Endungen unterscheiden sich (d und baf). Wenn jetzt aber zu der d-Datei eine tra-Datei existiert, und das "gleichnamige" Skript hat ebenfalls Textzeilen (z.B. in DisplayStringHead oder über Soundreferenzen für ein Soundset), dann werden bei der Kompilierung immer erst die Textzeilen aus der tra-Datei der Dialogdatei verwendet, wenn ein AUTO_TRA-Pfad definiert wurde, auch wenn bei der Kompilierung eine andere tra-Datei über USING spezifiziert wurde. (Um das zu umgehen entweder alle Dateien unterschiedlich benennen, oder die Zeilennummern in den Skripten nicht bei @0 sondern z.B. @10000 beginnen lassen. Oder komplett ohne AUTO_TRA-Pfadangabe arbeiten, aber dann muss überall USING angegeben werden.).

    Ich überarbeite gerade eine Mod, die sogar zwei gleichnamige d-Dateien nacheinander kompiliert (die Dialoge des "erweiterten" Freundschaftspfad werden mit anderen Triggern einfach an die kürzere Version drangehängt, also die j.dlg mit nicht-verwendeten Dialogen aufgebläht - kann man so machen, solange die Skripte sich einig sind...). Leider stimmen die Textzeilen nicht überein. Bei der Kompilierung der zweiten d-Datei wurde über USING eine andere tra-Datei spezifiziert, aber eben aufgrund des oben beschriebenen Umstands wurden erstmal die (nicht passenden) Textzeilen des "kürzeren" Freundschaftspfades verwendet. Die Dialoge, die da rauskamen, waren... interessant. :rolleyes:
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden