Shak-otay
28.07.2010, 16:00
Nach all' meinem Gejammere über die Automatisierungstendenzen
bei G3/Risen speziell auf Script-Ebene will ich hier mal eine Lanze brechen
für den/die Script-Verantwortlichen bei den PBs, die sich tapfer dagegen wehren.
In Risen-Infos kann man nämlich per Command "gCInfoCommandRunScript"
das Script "OnTradeInfo_RefillTradeItems" ausführen.
<Command
ClassName="gCInfoCommandRunScript"
Other="It_Po_Health_01"
OtherType="gEOtherType_TemplateEntity"
Script="OnTradeInfo_RefillTradeItems"
Self="Cormac"
Param="20"
>
</Command>
Das Folgende hat jetzt nur noch akademischen Wert (wenn überhaupt), weil
es eine neue revolutionär einfache Methode zum Erstellen von Risen-Infos (http://forum.worldofplayers.de/forum/showpost.php?p=13518646&postcount=1) gibt.
Ich habe die Info "FILLERX2_00978.xinf" (Cormac) aufgebohrt, d.h. um 18
RunScript-Commands erweitert, so dass ein Händler jetzt 25 verschiedene
Item-Sorten anbieten kann (sollte reichen; bisher waren es max. 7).
Name des zu bearbeitenden binären Files: "FILLERX2_00978 TradeInv.bini".
Zu beachten ist die unterschiedliche Reihenfolge von Other/Self in Script und bini.
Wer sich überwinden kann, mal einen Hexeditor zu benutzen, sollte nach Lesen
dieser Anleitung in der Lage sein, Händlern beliebige Items in das Tradeinventory zu legen.
Wenn die Theorie nicht interessiert, kann man auch gleich mit dem praktischen Beispiel
(s.u.) loslegen. Ohne Hexeditor geht's allerdings nicht.
Wer Probleme mit der Dezimal-Hex-Wandlung hat, kann den Windows-Rechner
(calc.exe, wissensch. Modus) benutzen.
------------------- Theo rie ---------------------------------------
Das RunScript-Command von oben sieht in Hex (Adresse 15A-1B9) so aus:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00150 00 00 C9 00 00 00 00 00 01 00<01 00 01 01 00 01 ..É.............
00160 EE 11 01 00 00 01 00 C9 00 4D 00 00 00 C9 00 05 î......É.M...É..
00170 00 00 00 EF 11 F0 11 1E 00 05 00 00 00 01 00 01 ...ï.ð..........
00180 68 20 F2 11 BD 11 1E 00 02 00 00 00 30 16 F3 11 h ò.½.......0.ó.
00190 BD 11 1E 00 02 00 00 00 BD 25 F5 11 F6 11 1E 00 ½.......½%õ.ö...
001A0 06 00 00 00 C9 00 01 00 00 00 F7 11 D5 11 1E 00 ....É.....÷.Õ...
001B0 04 00 00 00 14 00 00 00 01 00>01 00 01 01 00 01 ................
FILLERX2_00978_TradeInv.bini.JPG (http://upload.worldofplayers.de/files5/FILLERX2_00978_TradeInv.bini.JPG)
Geändert werden müssen 2 Words an den Adressen 0x18C (self: Händlername),
0x198 (other: Itemname) und das DWORD an 0x1B4 (Param: Itemanzahl).
Anstelle der Namen sind hier natürlich die TableEntry-Nummern (TE-No) 0x1630
und 0x25BD eingetragen. Nach Intel-Hex-Datenkonvention sind die Werte gedreht,
also erst das Low- und dann das Highbyte. Etwas gewöhnungsbedürftig, aber nicht
wirklich schwierig.)
Die zu einem bestimmten Händler- bzw. Itemnamen gehörige TE-No findet man
in der infos-header.txt, die im Lrenter-zip enthalten ist.
Ein RunScript-Block ist 96 Bytes (0x60) groß. Wenn man mehr als 1 Item ändern will,
findet man die 3 Änderungsstellen im Block durch Additon von 0x60 x (Itemnr.-1)
zu den oben angegebenen Adressen des 1. Blocks (0x18C, 0x198, 0x1B4).
Also Block 2 (Item 2): 1EC, 1F8 und 0x214
Block 25 (Item 25): A8C, A98 und AB4
Von den Blöcken 3..24 gebe ich nur die erste Adresse an:
(Anmerkung: Adr. des Händlernamens; nicht Blockstart!)
Block 3: 24C, 2Ac,
Block 5: 30C, 36C, 3CC, 42C, 48C, 4EC, 54C, 5Ac,
Block 13: 60C, 66C, 6CC, 72C, 78C, 7EC, 84C, 8AC,
Block 21: 90C, 96C, 9CC, A2C
(Wenn man nur 1 Item braucht, kann man den Param-Wert an der 3. Adresse
unverändert lassen.)
Die 25-Hex-Blocks stehen alle im binären File FILLERX2_00978 TradeInv.bini.
Hier steht an Adresse 0x23 die TE-No des Infonamens und an 0x4B die des Ownernamens.
Den Infonamen müssen wir uns selbst ausdenken, d.h. er existiert noch nicht in der
compiled_infos.bin. Er muss daher in die Info_TEntries.ini eingetragen werden.
Das gilt auch für Items, die nicht in der infos-header.txt stehen (also die meisten).
Praktisches Beispiel: Tristan die It_Armor_Don_Hunter und 10x It_Lockpick
-------------------- ins Händlerinventar legen.
Vorbereitungen: (XP; andere OS: NicoDEs cmd-File benutzen.)
in den Ordner C:\Dokumente und Einstellungen\[user account]\
Lokale Einstellungen\Anwendungsdaten\Risen\data\compiled\library
eine compiled_infos.bin entpacken (es kann auch eine bin meiner mods benutzt werden)
und in compiled_infos.lrent umbenennen.
Eine LEERE Info_TEntries.ini im gleichen Verzeichnis erzeugen (umbenanntes Textdokument).
1. "FILLERX2_00978 TradeInv.bini" im Hexeditor öffnen. ÜBERSCHREIB-Modus
einstellen, nicht den Einfügemodus!
Das erste Item (It_Po_Health_01) lassen wir unverändert.
2. Händlername= Tristan in der infos-header.txt suchen (Notepad-Suche)
TE-No (steht vor dem Namen) ist 16E0. An Adresse 0x4B in der *.bini
E0 16 eintragen. (Ja, des ist gedreht!)
3. Da wir 2 Items ändern wollen, muss in die Itemblocks 2 und 3 an die 2.
Änderungsadresse (s. Theorie) auch diese TE-No eingetragen werden.
Die Adressen der Händlernamen-TEs in den Blocks sind 1EC bzw. 24C;
dort muss jeweils E0 16 eingetragen werden.
4. Die TE-No (TE) von It_Lockpick ist 0x26b5 (s. infos-header.txt).
Die Adresse des Itemnamen-TEs ist 12 Bytes (0x0C) hinter 0x1EC;
d.h. B5 26 eintragen an 1EC+0C= 0x1F8.
Die Itemanzahl (Param) steht 40 Bytes (0x28) hinter 0x1EC.
Also 0x0A (=10) eintragen an 0x214.
5. Wir wählen einen Namen für die neue Info: SHAKX2_Trist_Inv.
Dieser Name muss in die Info_TEntries.ini eingetragen werden.
Die Rüstung steht nicht in der infos-header.txt. Namen auch in die
*.ini eintragen. (Zeilen immer mit Return (ENTER-Taste) abschließen!)
6. Die beiden Einträge haben noch keine TE-No.
Mit dem Lrenter die compiled_infos-lrent öffnen.
In der Combobox unten eine Info anklicken; im "Risen-Info Properties"-
Fenster den "next new TabeleEntry"-Wert merken. Bei der compiled_info
der Risen-Demo ist das 0x6835.
Den Wert ordnen wir SHAKX2_Trist_Inv zu; entsprechend 0x6836 der
Rüstung.
( Achtung: jetzt wieder im Hexeditor arbeiten; Lrenter offen lassen)
An Adresse 0x23 der bini tragen wir 35 68 (für den Infonamen) ein.
An Adresse 24C + 0C= 0x258 tragen wir 36 68 für den Itemnamen ein (vergl. Theorie).
7. Geänderte bini speichern.
8. Im Lrenter (binary copy)- append-Button drücken und bini laden (anhängen).
Dann Ok-Button drücken und mit "File save" die lrent speichern.
9. _compiled_infos.lrent umbenennen in compiled_infos.bin (d.h. ohne Underscore!).
10. Risen starten, Tristan anquatschen. Er sollte jetzt (die Startklamotten des Heros;
Mist, unsichtbar) die Jägerrüstung und 10 Dietriche im Handelsinventar haben.
(Leider macht die It_Armor_Intro_Old den Body des Heros unsichtbar, daher musste
ich auf die Jägerrüstung ausweichen, obwohl die natürlich nicht zu Tristans
Händler-Inventar "passt".)
edit: ich habe von Item-Blocks geredet, obwohl es eigentlich RunScript-Command-Blocks sind; sollte aber klar sein, was gemeint ist.
Zu beachten: Item1 und Item4 bis Item25 haben noch den Cormac-TableEntry
(0x1630) eingetragen. Da beim Handeln mit Cormac sein Fill-Script aufgerufen wird,
sollte das egal sein; besser wär's, die TEs durch Tristans zu ersetzen (bzw.
des Händlers, den ihr ändern wollt).
Außerdem hätte ich erwartet, dass Tristan 2 "Lass uns handeln"-Dialogoptionen hätte,
da ich die ursprüngliche nicht ausgeschaltet habe.
Wenn's bei Eurem Händler nicht funktioniert, die SortID an Adresse 0x3D erhöhen,
z.B. 70 17 eintragen (sollte immer Priorität haben, weil groß genug).
shak-otay, Juli 2010
Tristan_TradeInv.JPG (http://upload.worldofplayers.de/files5/Tristan_TradeInv.JPG)
Tristan_TradeInv.zip (http://upload.worldofplayers.de/files5/Tristan_TradeInv.zip)
Den nötigen Lrenter gibt's hier (http://forum.worldofplayers.de/forum/showpost.php?p=13343078&postcount=1).
bei G3/Risen speziell auf Script-Ebene will ich hier mal eine Lanze brechen
für den/die Script-Verantwortlichen bei den PBs, die sich tapfer dagegen wehren.
In Risen-Infos kann man nämlich per Command "gCInfoCommandRunScript"
das Script "OnTradeInfo_RefillTradeItems" ausführen.
<Command
ClassName="gCInfoCommandRunScript"
Other="It_Po_Health_01"
OtherType="gEOtherType_TemplateEntity"
Script="OnTradeInfo_RefillTradeItems"
Self="Cormac"
Param="20"
>
</Command>
Das Folgende hat jetzt nur noch akademischen Wert (wenn überhaupt), weil
es eine neue revolutionär einfache Methode zum Erstellen von Risen-Infos (http://forum.worldofplayers.de/forum/showpost.php?p=13518646&postcount=1) gibt.
Ich habe die Info "FILLERX2_00978.xinf" (Cormac) aufgebohrt, d.h. um 18
RunScript-Commands erweitert, so dass ein Händler jetzt 25 verschiedene
Item-Sorten anbieten kann (sollte reichen; bisher waren es max. 7).
Name des zu bearbeitenden binären Files: "FILLERX2_00978 TradeInv.bini".
Zu beachten ist die unterschiedliche Reihenfolge von Other/Self in Script und bini.
Wer sich überwinden kann, mal einen Hexeditor zu benutzen, sollte nach Lesen
dieser Anleitung in der Lage sein, Händlern beliebige Items in das Tradeinventory zu legen.
Wenn die Theorie nicht interessiert, kann man auch gleich mit dem praktischen Beispiel
(s.u.) loslegen. Ohne Hexeditor geht's allerdings nicht.
Wer Probleme mit der Dezimal-Hex-Wandlung hat, kann den Windows-Rechner
(calc.exe, wissensch. Modus) benutzen.
------------------- Theo rie ---------------------------------------
Das RunScript-Command von oben sieht in Hex (Adresse 15A-1B9) so aus:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00150 00 00 C9 00 00 00 00 00 01 00<01 00 01 01 00 01 ..É.............
00160 EE 11 01 00 00 01 00 C9 00 4D 00 00 00 C9 00 05 î......É.M...É..
00170 00 00 00 EF 11 F0 11 1E 00 05 00 00 00 01 00 01 ...ï.ð..........
00180 68 20 F2 11 BD 11 1E 00 02 00 00 00 30 16 F3 11 h ò.½.......0.ó.
00190 BD 11 1E 00 02 00 00 00 BD 25 F5 11 F6 11 1E 00 ½.......½%õ.ö...
001A0 06 00 00 00 C9 00 01 00 00 00 F7 11 D5 11 1E 00 ....É.....÷.Õ...
001B0 04 00 00 00 14 00 00 00 01 00>01 00 01 01 00 01 ................
FILLERX2_00978_TradeInv.bini.JPG (http://upload.worldofplayers.de/files5/FILLERX2_00978_TradeInv.bini.JPG)
Geändert werden müssen 2 Words an den Adressen 0x18C (self: Händlername),
0x198 (other: Itemname) und das DWORD an 0x1B4 (Param: Itemanzahl).
Anstelle der Namen sind hier natürlich die TableEntry-Nummern (TE-No) 0x1630
und 0x25BD eingetragen. Nach Intel-Hex-Datenkonvention sind die Werte gedreht,
also erst das Low- und dann das Highbyte. Etwas gewöhnungsbedürftig, aber nicht
wirklich schwierig.)
Die zu einem bestimmten Händler- bzw. Itemnamen gehörige TE-No findet man
in der infos-header.txt, die im Lrenter-zip enthalten ist.
Ein RunScript-Block ist 96 Bytes (0x60) groß. Wenn man mehr als 1 Item ändern will,
findet man die 3 Änderungsstellen im Block durch Additon von 0x60 x (Itemnr.-1)
zu den oben angegebenen Adressen des 1. Blocks (0x18C, 0x198, 0x1B4).
Also Block 2 (Item 2): 1EC, 1F8 und 0x214
Block 25 (Item 25): A8C, A98 und AB4
Von den Blöcken 3..24 gebe ich nur die erste Adresse an:
(Anmerkung: Adr. des Händlernamens; nicht Blockstart!)
Block 3: 24C, 2Ac,
Block 5: 30C, 36C, 3CC, 42C, 48C, 4EC, 54C, 5Ac,
Block 13: 60C, 66C, 6CC, 72C, 78C, 7EC, 84C, 8AC,
Block 21: 90C, 96C, 9CC, A2C
(Wenn man nur 1 Item braucht, kann man den Param-Wert an der 3. Adresse
unverändert lassen.)
Die 25-Hex-Blocks stehen alle im binären File FILLERX2_00978 TradeInv.bini.
Hier steht an Adresse 0x23 die TE-No des Infonamens und an 0x4B die des Ownernamens.
Den Infonamen müssen wir uns selbst ausdenken, d.h. er existiert noch nicht in der
compiled_infos.bin. Er muss daher in die Info_TEntries.ini eingetragen werden.
Das gilt auch für Items, die nicht in der infos-header.txt stehen (also die meisten).
Praktisches Beispiel: Tristan die It_Armor_Don_Hunter und 10x It_Lockpick
-------------------- ins Händlerinventar legen.
Vorbereitungen: (XP; andere OS: NicoDEs cmd-File benutzen.)
in den Ordner C:\Dokumente und Einstellungen\[user account]\
Lokale Einstellungen\Anwendungsdaten\Risen\data\compiled\library
eine compiled_infos.bin entpacken (es kann auch eine bin meiner mods benutzt werden)
und in compiled_infos.lrent umbenennen.
Eine LEERE Info_TEntries.ini im gleichen Verzeichnis erzeugen (umbenanntes Textdokument).
1. "FILLERX2_00978 TradeInv.bini" im Hexeditor öffnen. ÜBERSCHREIB-Modus
einstellen, nicht den Einfügemodus!
Das erste Item (It_Po_Health_01) lassen wir unverändert.
2. Händlername= Tristan in der infos-header.txt suchen (Notepad-Suche)
TE-No (steht vor dem Namen) ist 16E0. An Adresse 0x4B in der *.bini
E0 16 eintragen. (Ja, des ist gedreht!)
3. Da wir 2 Items ändern wollen, muss in die Itemblocks 2 und 3 an die 2.
Änderungsadresse (s. Theorie) auch diese TE-No eingetragen werden.
Die Adressen der Händlernamen-TEs in den Blocks sind 1EC bzw. 24C;
dort muss jeweils E0 16 eingetragen werden.
4. Die TE-No (TE) von It_Lockpick ist 0x26b5 (s. infos-header.txt).
Die Adresse des Itemnamen-TEs ist 12 Bytes (0x0C) hinter 0x1EC;
d.h. B5 26 eintragen an 1EC+0C= 0x1F8.
Die Itemanzahl (Param) steht 40 Bytes (0x28) hinter 0x1EC.
Also 0x0A (=10) eintragen an 0x214.
5. Wir wählen einen Namen für die neue Info: SHAKX2_Trist_Inv.
Dieser Name muss in die Info_TEntries.ini eingetragen werden.
Die Rüstung steht nicht in der infos-header.txt. Namen auch in die
*.ini eintragen. (Zeilen immer mit Return (ENTER-Taste) abschließen!)
6. Die beiden Einträge haben noch keine TE-No.
Mit dem Lrenter die compiled_infos-lrent öffnen.
In der Combobox unten eine Info anklicken; im "Risen-Info Properties"-
Fenster den "next new TabeleEntry"-Wert merken. Bei der compiled_info
der Risen-Demo ist das 0x6835.
Den Wert ordnen wir SHAKX2_Trist_Inv zu; entsprechend 0x6836 der
Rüstung.
( Achtung: jetzt wieder im Hexeditor arbeiten; Lrenter offen lassen)
An Adresse 0x23 der bini tragen wir 35 68 (für den Infonamen) ein.
An Adresse 24C + 0C= 0x258 tragen wir 36 68 für den Itemnamen ein (vergl. Theorie).
7. Geänderte bini speichern.
8. Im Lrenter (binary copy)- append-Button drücken und bini laden (anhängen).
Dann Ok-Button drücken und mit "File save" die lrent speichern.
9. _compiled_infos.lrent umbenennen in compiled_infos.bin (d.h. ohne Underscore!).
10. Risen starten, Tristan anquatschen. Er sollte jetzt (die Startklamotten des Heros;
Mist, unsichtbar) die Jägerrüstung und 10 Dietriche im Handelsinventar haben.
(Leider macht die It_Armor_Intro_Old den Body des Heros unsichtbar, daher musste
ich auf die Jägerrüstung ausweichen, obwohl die natürlich nicht zu Tristans
Händler-Inventar "passt".)
edit: ich habe von Item-Blocks geredet, obwohl es eigentlich RunScript-Command-Blocks sind; sollte aber klar sein, was gemeint ist.
Zu beachten: Item1 und Item4 bis Item25 haben noch den Cormac-TableEntry
(0x1630) eingetragen. Da beim Handeln mit Cormac sein Fill-Script aufgerufen wird,
sollte das egal sein; besser wär's, die TEs durch Tristans zu ersetzen (bzw.
des Händlers, den ihr ändern wollt).
Außerdem hätte ich erwartet, dass Tristan 2 "Lass uns handeln"-Dialogoptionen hätte,
da ich die ursprüngliche nicht ausgeschaltet habe.
Wenn's bei Eurem Händler nicht funktioniert, die SortID an Adresse 0x3D erhöhen,
z.B. 70 17 eintragen (sollte immer Priorität haben, weil groß genug).
shak-otay, Juli 2010
Tristan_TradeInv.JPG (http://upload.worldofplayers.de/files5/Tristan_TradeInv.JPG)
Tristan_TradeInv.zip (http://upload.worldofplayers.de/files5/Tristan_TradeInv.zip)
Den nötigen Lrenter gibt's hier (http://forum.worldofplayers.de/forum/showpost.php?p=13343078&postcount=1).