Page 3 of 4

Re: Mod-Tagebuch

Posted: Fri Aug 27, 2010 2:55 am
by Torka
Und wenn sie das nicht mehr finden sollten wäre evtl. ein temporäres Auferstehen des alten silverstyle-Forums nice - so das wir die Modding-relevanten Themen hierher migrieren können.
Das wäre natürlich echt spitze, wenn man an die Moddingthreads herankommt und sie wieder online stellen würde. Kenne ja das Forum nur vom Hörensagen. Die Infos wären sicher hilfreich um die Welt von "The Fall" zu erweitern. Finde es immer sehr schade, das nach der Handlung so eine virtuelle Welt brach liegt. Das Addon "Mutant City" hätte sicher eine gute Chance gehabt weitere witzige Handlunsstränge zu verflechten und neue Abenteuer in den Wastelands zu eröffnen.
Ich hoffe aber überhaupt erst einmal auf eine Antwort vom Team.  

Re: Mod-Tagebuch

Posted: Fri Aug 27, 2010 12:00 pm
by Lexx
Naja, so viele Informationen gab es im Forum auch nicht. Lediglich drei oder vier Threads wären noch interessant, wenn ich mich richtig erinnere. Unter anderem der, in dem beschrieben wurde, wie die Minimap generiert wird, etc. Der Rest ist (zumindest mir) mehr oder weniger bekannt. Abgesehen von den Problemen mit dem Hinzufügen eines neuen Ortes und dem korrekten Anzeigen dessen Name im Quest Log natürlich.....

Re: Mod-Tagebuch

Posted: Sat Aug 28, 2010 1:09 pm
by Tyler
Wolna muss wieder ran. Der kann dann das ganze russische Communityzeug übersetzen.^^

Re: Mod-Tagebuch

Posted: Sat Aug 28, 2010 1:18 pm
by Lexx
lol. Der Witz war gut. :>

Re: Mod-Tagebuch

Posted: Sat Aug 28, 2010 1:32 pm
by Torka
Erst müsste Silver Style auf die Mail antworten. Mal schauen ob sie Interesse zeigen? Zur Not gibt`s ja unter Kontakt ja auch noch `ne Telefonnummer oder Lexx klingelt mal an der Ladentür  ;).
Bisher haben sie sich noch nicht gemeldet, sind vielleicht auch grad im Urlaub  ;D

Für Wolna hätte ich da schon mal ne russische Seite http://fall.pro-d.ru/?map - aber sie verstehen auch englisch dort  #thumbsup.

Re: Mod-Tagebuch

Posted: Sat Aug 28, 2010 1:34 pm
by Lexx
Ich wohne am anderen Ende von Berlin. Da hinzufahren wäre ein Tagesausflug.

Neue kombinierte Items - abgebrochene Flasche

Posted: Mon Sep 06, 2010 12:48 am
by Torka
Die Mitarbeiter von Silver Style haben leider noch nicht geantwortet, werde es erneut versuchen. In der Zwischenzeit habe ich etwas mit den kombierbaren Items experimentiert und poste mal den ersten Erfolg.

Im Spiel existiert als Nahkampfwaffe auch eine abgebrochene Glasflasche. Diese habe ich nur bei der Ärztin der Schatten gesehen, welche sie aber als Trichter verwendet hat. Die Idee ist aus einer leeren Flasche eine abgebrochene zu basteln - klingt einfach, war es auch.

Die leere Flasche befindet sich in scripts / itemdata / items.py Nebenbei habe ich den Stapplungswert (stacking) bei allen Items, der Munition und vielen Nahkampfwaffen einfach mal um Faktor 10 bis 100 erhöht :).

Code: Select all

create_item_type(typeid='SET_EMPTY_BOTTLE')
objects.set_attribute(object='SET_EMPTY_BOTTLE', attribute="name", value=globaltext.SET_EMPTY_BOTTLE_NAME)
objects.set_attribute(object='SET_EMPTY_BOTTLE', attribute="hint", value=globaltext.SET_EMPTY_BOTTLE_HINT)
objects.set_attribute(object='SET_EMPTY_BOTTLE', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_EMPTY_BOTTLE')
objects.set_attribute(object='SET_EMPTY_BOTTLE', attribute="resource3d", value='RES3D_EMPTY_BOTTLE')
objects.set_attribute(object='SET_EMPTY_BOTTLE', attribute="value", value=1.0)
objects.set_attribute(object='SET_EMPTY_BOTTLE', attribute="weight", value=0.3)
objects.set_attribute(object='SET_EMPTY_BOTTLE', attribute="stacking", value=100)
objects.set_attribute(object='SET_EMPTY_BOTTLE', attribute="occupied_slots", value=["left_hand","right_hand"])
Die abgebrochene Flasche als Waffe befindet sich in scripts / itemdata / weapons.py

Code: Select all

create_weapon_type(typeid='SET_BROKEN_OFF_BOTTLE')
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="name", value=globaltext.SET_BROKEN_OFF_BOTTLE_NAME)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="hint", value=globaltext.SET_BROKEN_OFF_BOTTLE_HINT)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_BROKEN_OFF_BOTTLE')
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="resource3d", value='RES3D_BROKEN_OFF_BOTTLE')
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="value", value=0.00)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="weight", value=0.10)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="stacking", value=100)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="weapon_type", value="nahkampf")
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="hoerweite", value=2.0)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="schusspausenzeit", value=1.6)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="genauigkeit_bewegte_ziele",	value=0.6)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="genauigkeit", value=0.2)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="minimale_feuerreichweite", value=0)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="maximale_feuerreichweite", value=2)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="salvenlaenge", value=1)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="feuergeschwindigkeit", value=0.0)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="occupied_slots", value=["right_hand"])
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="fire_animation", value=FPA_CLOSE_COMBAT_BATON)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="munitionsarten", value=['SET_BROKEN_OFF_BOTTLE_PSEUDOAMMO'])
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="magazingroesse",	value=1.0)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="effects", value={"sound_shot"	: "attack_knife"})
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="illegal_bodymodes", value=["LIE","KNEEL"])
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="combine_xp", value=25)
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
	"combination_list"		:	[
								['SET_EMPTY_BOTTLE']]})
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="combine_xp", value=25)                          Man erhält 25 XP für das erste Zerschlagen der Flasche.
objects.set_attribute(object='SET_BROKEN_OFF_BOTTLE', attribute="item_combination", value={
"difficulty_assemble" :                              COMBO_EVERYBODY,                                                           Die Herstellung gelingt unabhängig vom Technikskill.
"combination_list" :  [  
                                                                                                ['SET_EMPTY_BOTTLE']]})
     In der Liste ist nur die leere Flasche.
Weitere Beispiele:

Code: Select all

"difficulty_assemble"	:	65,
Durch diese Zeile wäre die Herstellung nicht für jedermann durchführbar, sondern erst ab einem Technikskill von 65 möglich.

Code: Select all

"assemble_function"	:	"assemble_explosives",
Die Herstellung gelingt nur, wenn man über das Talent "Sprengstoffe herstellen" verfügt.



Nun stellt man sich spontan die Frage, wozu bei den ganzen Ballermännern braucht man eine abgebrochene Flasche - also in der Arena könnte ja zufällig von der Tribüne mal eine leere Flasche fallen  ;D

Neue Wurfwaffe - der Stein

Posted: Mon Sep 06, 2010 2:35 am
by Torka
Was wäre wohl aus der Menschheit ohne die älteste aller Fernwaffen geworden....  ??? warum den Helden von TF der einfache Stein als Wurfwaffe vorenthalten wurde und dafür solche praktischen Dartpfeile existieren, blieb mir immer ein Rätsel. Nun im Raten bin ich eher schlecht und habe den Stein einfach mal dem Inventar hinzugefügt ... zumindest in der Theorie, denn wer will schon Steine vom Händler kaufen, jener kauft dann später auch Steine im Baumarkt   :redfingr:.
Also werden auf den Karten dann halt Steine zum Auflesen zu finden sein, denn man kann sie ja nach dem Werfen wieder verwenden.

Das ursprüngliche Steinskript in scripts / itemdata / items.py mit # deaktivieren oder löschen (Backup gemacht?).

Und dazu das eingefügte Skript in scripts / itemdata / weapons.py Habe es direkt unter dem Wurfmesser plaziert.

Code: Select all

create_throw_object_type(typeid='SET_STONE')
objects.set_attribute(object='SET_STONE', attribute="name", value=globaltext.SET_STONE_NAME)
objects.set_attribute(object='SET_STONE', attribute="hint", value=globaltext.SET_STONE_HINT)
objects.set_attribute(object='SET_STONE', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_STONE')
objects.set_attribute(object='SET_STONE', attribute="resource3d", value='RES3D_STONE')
objects.set_attribute(object='SET_STONE', attribute="value", value=1.0)
objects.set_attribute(object='SET_STONE', attribute="weight", value=1.2)
objects.set_attribute(object='SET_STONE', attribute="stacking", value=500)
objects.set_attribute(object='SET_STONE', attribute="minimale_feuerreichweite", value=0)
objects.set_attribute(object='SET_STONE', attribute="maximale_feuerreichweite", value=23)
objects.set_attribute(object='SET_STONE', attribute="salvenlaenge", value=1)
objects.set_attribute(object='SET_STONE', attribute="feuergeschwindigkeit", value=0)
objects.set_attribute(object='SET_STONE', attribute="genauigkeit", value=0.6)
objects.set_attribute(object='SET_STONE', attribute="kampfwert_air", value=15.00)
objects.set_attribute(object='SET_STONE', attribute="kampfwert_armoured", value=100.00)
objects.set_attribute(object='SET_STONE', attribute="kampfwert_infantry", value=100.00)
objects.set_attribute(object='SET_STONE', attribute="munitionsarten", value=['SET_STONE_PSEUDOAMMO'])
objects.set_attribute(object='SET_STONE', attribute="fire_animation", value=FPA_THROW_KNIFE)
objects.set_attribute(object='SET_STONE', attribute="weapon_type", value="wurf")
objects.set_attribute(object='SET_STONE', attribute="magazingroesse", value=1.0)
objects.set_attribute(object='SET_STONE', attribute="hoerweite", value=0.0)
objects.set_attribute(object='SET_STONE', attribute="schusspausenzeit", value=1.5)
objects.set_attribute(object='SET_STONE', attribute="genauigkeit_bewegte_ziele", value=0.5)
objects.set_attribute(object='SET_STONE', attribute="occupied_slots", value=["throw"])

Alle Wurfwaffen haben eine Pseudomunition, welche in scripts / itemdata / ammo.py und den Schaden verursacht, sie ist Ingame nicht sichtbar, aber für den erzeugten Schaden notwendig.

Code: Select all

create_ammo_type(typeid='SET_STONE_PSEUDOAMMO')
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="name", value='None')
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="hint", value='None')
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="resourceui", value='None')
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="resource3d", value='None')
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="value", value=0.00)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="weight", value=3)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="stacking", value=1)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="wirkungsbereich", value=0.0)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="schaden_organisch_min", value=100)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="schaden_organisch_max", value=150)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="schaden_struktur_min", value=0)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="schaden_struktur_max", value=1)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="schuss", value=1)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="schussbahn", value=BALLISTIC)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="muendungsgeschwindigkeit_min",value=7)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="muendungsgeschwindigkeit_max",value=7)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="durchschlag", 				 value=20)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="hit_chance_factor", value=1.0)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="fire_range_factor", value=1.0)
objects.set_attribute(object='SET_STONE_PSEUDOAMMO', attribute="weapon_types", value=[])
Einzigstes Manko, der Stein ist leider nicht in der Hand sichtbar, aber in der Wurfbahn schon  - Willkommen in der Steinzeit :D.

Bolzen und Armbrust selbst herstellen

Posted: Mon Sep 06, 2010 10:20 pm
by Torka
Das es im Spiel eine Armbrust gibt ist eine feine Sache, noch besser wäre es, wenn es auch mehr Bolzen dafür geben würde. Die Ödnis ist ja voll von Zivilisationsschrott, warum also aus den alten Eisenstangen nicht selbst Bolzen feilen  ;).

In der Datei scripts / itemdata / ammo.py einfach folgende Zeilen einfügen:

Code: Select all

create_ammo_type(typeid='SET_SHORT_IRON_ROD')
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="name", value=globaltext.SET_SHORT_IRON_ROD_NAME)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="hint", value=globaltext.SET_SHORT_IRON_ROD_HINT)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_RUSTY_IRON_ROD')
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="resource3d", value='RES3D_RUSTY_IRON_ROD')
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="value", value=1.00)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="weight", value=0.50)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="stacking", value=100)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="wirkungsbereich", value=0.00)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="schaden_organisch_min", value=22)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="schaden_organisch_max", value=25)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="schaden_struktur_min", value=0)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="schaden_struktur_max", value=4)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="schuss", value=5)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="schussbahn", value=LINEAR)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="muendungsgeschwindigkeit_min",value=200)## !! >>
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="muendungsgeschwindigkeit_max",value=200)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="kaliber", 					 value=globaltext.CALIBER_BOLT)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="durchschlag", 				 value=20)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="hit_chance_factor", value=1.0)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="fire_range_factor", value=1.0)
objects.set_attribute(object='SET_SHORT_IRON_ROD', attribute="weapon_types", value=[])

create_ammo_type(typeid='SET_AMMOPACK_BOLT')
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="name", value=globaltext.SET_AMMOPACK_BOLT_NAME)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="hint", value=globaltext.SET_AMMOPACK_BOLT_HINT)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="resourceui", value='RES_ITEM65X32_AMMOPACK_BOLT')
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="resource3d", value='RES3D_AMMOPACK_BOLT')
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="value", value=2.00)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="weight", value=0.20)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="stacking", value=100)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="wirkungsbereich", value=0.00)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="schaden_organisch_min", value=22)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="schaden_organisch_max", value=25)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="schaden_struktur_min", value=0)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="schaden_struktur_max", value=4)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="schuss", value=5)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="schussbahn", value=LINEAR)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="muendungsgeschwindigkeit_min",value=200)## !! >>
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="muendungsgeschwindigkeit_max",value=200)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="kaliber", 					 value=globaltext.CALIBER_BOLT)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="durchschlag", 				 value=20)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="hit_chance_factor", value=1.0)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="fire_range_factor", value=1.0)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="weapon_types", value=[])
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="combine_xp", value=75)
objects.set_attribute(object='SET_AMMOPACK_BOLT', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
	"assemble_function"		:	"assemble_dumdum_munition",
	"combination_list"		:	[['SET_RASP','SET_SHORT_IRON_ROD']]})
Die kurze Eisenstange sollte dann noch als Name und Hint in scripts / globaltext / german / german.py wie folgend definiert werden:

Code: Select all

add_global_text(id='SET_SHORT_IRON_ROD_NAME', text='kurze Eisenstange')
add_global_text(id='SET_SHORT_IRON_ROD_HINT', text='kurze Eisenstange')

Nun kann man mit dem Talent "Munition  manipulieren" und einer Feile aus kurzen Eisenstangen selbst Bolzen herstellen. Die Eistenstangen müssten dann an alten Wehrzäunen oder Ruinen, Schrottplätzen zu finden sein.
Ein paar Erfahrungspunkte bekommt man bei der ersten Bolzenanfertigung.

Bei den vielen Ersatzteilen könnte man sich ja dann auch eine Armbrust selber basteln und so in der scripts / itemdata / weapons.py das Armbrustskript verlängern:

Code: Select all

create_weapon_type(typeid='SET_CROSSBOW')
objects.set_attribute(object='SET_CROSSBOW', attribute="name", value=globaltext.SET_CROSSBOW_NAME)
objects.set_attribute(object='SET_CROSSBOW', attribute="hint", value=globaltext.SET_CROSSBOW_HINT)
objects.set_attribute(object='SET_CROSSBOW', attribute="resourceui", value='RES_ITEM65X32_WEAPON_CROSSBOW')
objects.set_attribute(object='SET_CROSSBOW', attribute="resource3d", value='RES3D_CROSSBOW')
objects.set_attribute(object='SET_CROSSBOW', attribute="value", value=60.00)
objects.set_attribute(object='SET_CROSSBOW', attribute="weight", value=4.0)
objects.set_attribute(object='SET_CROSSBOW', attribute="stacking", value=1)
objects.set_attribute(object='SET_CROSSBOW', attribute="minimale_feuerreichweite", value=0)
objects.set_attribute(object='SET_CROSSBOW', attribute="maximale_feuerreichweite", value=33)
objects.set_attribute(object='SET_CROSSBOW', attribute="salvenlaenge", value=1)
objects.set_attribute(object='SET_CROSSBOW', attribute="feuergeschwindigkeit", value=0.00)
objects.set_attribute(object='SET_CROSSBOW', attribute="genauigkeit", value=1.00)
objects.set_attribute(object='SET_CROSSBOW', attribute="kampfwert_air", value=0.00)
objects.set_attribute(object='SET_CROSSBOW', attribute="kampfwert_armoured", value=150.00)
objects.set_attribute(object='SET_CROSSBOW', attribute="kampfwert_infantry", value=150.00)
objects.set_attribute(object='SET_CROSSBOW', attribute="munitionsarten", value=['SET_AMMOPACK_BOLT'])
objects.set_attribute(object='SET_CROSSBOW', attribute="fire_animation", value=FPA_SNIPER_SINGLE)
objects.set_attribute(object='SET_CROSSBOW', attribute="weapon_type", value="sniper")
objects.set_attribute(object='SET_CROSSBOW', attribute="magazingroesse", 				value=1.0)
objects.set_attribute(object='SET_CROSSBOW', attribute="hoerweite", 					value=1.0)
objects.set_attribute(object='SET_CROSSBOW', attribute="schusspausenzeit", 			value=5.2)
objects.set_attribute(object='SET_CROSSBOW', attribute="genauigkeit_bewegte_ziele",	value=0.6)
objects.set_attribute(object='SET_CROSSBOW', attribute="blockadewahrscheinlichkeit",	value=5.0)
objects.set_attribute(object='SET_CROSSBOW', attribute="occupied_slots", value=["left_hand","right_hand"])
objects.set_attribute(object='SET_CROSSBOW', attribute="effects", value={
		"sound_shot"	: "shot_crossbow",
		"sound_unload"	: "crossbow_discharge",
		"sound_reload"	: "crossbow_charge"})
objects.set_attribute(object='SET_CROSSBOW', attribute="combine_xp", value=125)
objects.set_attribute(object='SET_CROSSBOW', attribute="item_combination",	value={
	"difficulty_assemble"	:	65,
        "assemble_function"		:	"assemble_parlor_game",
	"combination_list"		:	[
								['SET_FLAT_SPRING', 'SET_CLUB', 'SET_LONG_LEATHER_STRING', 'SET_REEL_OF_STEEL_WIRE','SET_KNIFE']]})
Aus einer Blattfeder, einer Holzkeule, einer langen Lederschnur und Stahldraht entsteht mit Hilfe eines Messers nun ab einem Technikwert von 65 eine Armbrust, nebenbei gibt`s für`s erste Mal 125 XP.

Landminen

Posted: Tue Sep 07, 2010 4:51 pm
by Torka
Wie in den "Geschichten aus den Wastelands" schon angekündigt, kann man nun nicht nur die Landminen nutzen, sondern sie auch selbst bauen. Durch das Talent "Sprengstoffe bauen" kann man aus den Bestandteilen: Blechdose, Schwarzpulver, kurze Nägel und einem Zünder die Minen basteln. Dadurch ergeben sich neue taktische Möglichkeiten, wie z.B. eine Minensperre oder ein Hinterhalt.

In der Datei scripts / itemdata / weapons.py einfach folgende Zeilen einfügen:

Code: Select all

create_item_type(typeid='SET_LANDMINE')
objects.set_attribute(object='SET_LANDMINE', attribute="name", value=globaltext.SET_LANDMINE_NAME)
objects.set_attribute(object='SET_LANDMINE', attribute="hint", value=globaltext.SET_LANDMINE_HINT)
objects.set_attribute(object='SET_LANDMINE', attribute="resourceui", value='RES_ITEM65X32_EXPLOSIVE_LANDMINE')
objects.set_attribute(object='SET_LANDMINE', attribute="resource3d", value='RES3D_LANDMINE')
objects.set_attribute(object='SET_LANDMINE', attribute="value", value=10.00)
objects.set_attribute(object='SET_LANDMINE', attribute="weight", value=1.1)
objects.set_attribute(object='SET_LANDMINE', attribute="stacking", value=500)
objects.set_attribute(object='SET_LANDMINE', attribute="weapon_type", value="explosiv")
objects.set_attribute(object='SET_LANDMINE', attribute="magazingroesse",	value=1.0)
objects.set_attribute(object='SET_LANDMINE', attribute="hoerweite", 		value=40.0)
objects.set_attribute(object='SET_LANDMINE', attribute="minimale_feuerreichweite", value=0.0)
objects.set_attribute(object='SET_LANDMINE', attribute="maximale_feuerreichweite", value=0.0)
objects.set_attribute(object='SET_LANDMINE', attribute="salvenlaenge", 			 value=1)
objects.set_attribute(object='SET_LANDMINE', attribute="feuergeschwindigkeit",	 value=0.0)
objects.set_attribute(object='SET_LANDMINE', attribute="bomb_type",	 value="mine")
objects.set_attribute(object='SET_LANDMINE', attribute="wirkungsbereich", value=15)
objects.set_attribute(object='SET_LANDMINE', attribute="durchschlag", value=200)
objects.set_attribute(object='SET_LANDMINE', attribute="schaden_organisch_min", value=250)
objects.set_attribute(object='SET_LANDMINE', attribute="schaden_organisch_max", value=300)
objects.set_attribute(object='SET_LANDMINE', attribute="schaden_struktur_min", value=50)
objects.set_attribute(object='SET_LANDMINE', attribute="schaden_struktur_max", value=60)
objects.set_attribute(object='SET_LANDMINE', attribute="targets", value=["character", "animal"])
objects.set_attribute(object='SET_LANDMINE', attribute="detection_range", value=4.0)
#objects.set_attribute(object='SET_LANDMINE', attribute="not_tradable", value=True)
objects.set_attribute(object='SET_LANDMINE', attribute="combine_xp", value=100)
objects.set_attribute(object='SET_LANDMINE', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
	"assemble_function"		:	"assemble_explosives",
	"combination_list"		:	[
								['SET_TIN_CAN', 'SET_GUN_POWDER', 'SET_SHORT_NAILS', 'SET_FUSE']]})

Lederwaren

Posted: Wed Sep 08, 2010 12:27 am
by Torka
Falls die Helden in der Ödnis nicht gerade an Bolzen feilen oder mit Minen was in die Luft jagen, können sie sich auch fast friedlich nützlich machen. Mit zunehmenden Survivalskill steigt ja bekanntlich die Jagdausbeute - erst in der Fleischmenge, später kommen Felle, Krallen und Zähne hinzu. Warum sollen diese Rohmaterialien nur für das Kunsthandwerk (Ketten usw.) vorbehalten sein, viel näher liegt doch die Felle zu gerben und Leder für Kleidung und Schuhe herzustellen.

Die erste Stufe vom Fell zum gegerbten Leder schaut im Skript scripts / itemdata / items.py so aus:

Code: Select all

create_item_type(typeid='SET_HYENA_PELT')
objects.set_attribute(object='SET_HYENA_PELT', attribute="name", value=globaltext.SET_HYENA_PELT_NAME)
objects.set_attribute(object='SET_HYENA_PELT', attribute="hint", value=globaltext.SET_HYENA_PELT_HINT)
objects.set_attribute(object='SET_HYENA_PELT', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_HYENA_PELT')
objects.set_attribute(object='SET_HYENA_PELT', attribute="resource3d", value='RES3D_HYENA_PELT')
objects.set_attribute(object='SET_HYENA_PELT', attribute="value", value=35.00)
objects.set_attribute(object='SET_HYENA_PELT', attribute="weight", value=4.00)
objects.set_attribute(object='SET_HYENA_PELT', attribute="stacking", value=15)
objects.set_attribute(object='SET_HYENA_PELT', attribute="combine_xp", value=500)
objects.set_attribute(object='SET_HYENA_PELT', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
        "assemble_function"		:	"assemble_parlor_game",
	"combination_list"		:	[['SET_KNIFE', 'SET_BEAR_SKIN'],
							['SET_KNIFE', 'SET_AMMONIUM_NITRATE', 'SET_SOAP','SET_TIGER_FUR'],
							['SET_KNIFE', 'SET_AMMONIUM_NITRATE', 'SET_SOAP','SET_WOLF_PELT'],
							['SET_KNIFE', 'SET_AMMONIUM_NITRATE', 'SET_SOAP','SET_HORSE_SKIN'],
                                                        ['SET_KNIFE', 'SET_AMMONIUM_NITRATE', 'SET_SOAP','SET_DEER_SKIN'],
                                                        ['SET_KNIFE', 'SET_AMMONIUM_NITRATE', 'SET_SOAP','SET_ANTELOPE_PELT'],
                                                        ['SET_KNIFE', 'SET_AMMONIUM_NITRATE', 'SET_SOAP','SET_WILD_DOG_PELT'],
                                                        ['SET_KNIFE', 'SET_AMMONIUM_NITRATE', 'SET_SOAP','SET_BISON_SKIN'],
                                                        ['SET_KNIFE', 'SET_AMMONIUM_NITRATE', 'SET_SOAP','SET_PIG_SKIN'],
							['SET_KNIFE', 'SET_AMMONIUM_NITRATE', 'SET_SOAP','SET_COW_SKIN']]})
Im Spiel gibt es ein Hyänenfell, da es aber ingame nie Hyänen gab, habe ich mir die Textur für das gegerbte Leder gekrallt und in der  scripts / globaltext / german / german.py den Namen und Hint umgenannt:

Code: Select all

add_global_text(id='SET_HYENA_PELT_NAME', text='Gegerbtes Leder')
add_global_text(id='SET_HYENA_PELT_HINT', text='Gegerbtes Leder')
Zum Gerben werden dann noch folgende Zutaten und Werkzeuge gebraucht:
- ein Messer zum Abschaben des Fettes, der Fleischreste und Haare
- das Ammoniumnitrat als Beizmittel
- die Seife zum Säubern
- ein Fell (egal ob Hirsch, Wolf, Bär, Bison, Pferd, Schwein, Wildhund, Puma oder Antilope)

Das nun gegerbte Leder kann nun weiter zu Lederkleidung und Schuhen verarbeitet werden. Doch für die Herstellung wären auch Lederschnüre ganz hilfreich.

Aus den Pfoten oder bekrallten Vorderläufen der Raubtiere könnte man die Sehnen oder die Haut zu kurzen und langen Lederschnüren verarbeiten.
Die beiden Skripte in scripts / itemdata / items.py wie beschrieben verlängern.

Lange Schnüre aus den Pfoten von Bären, Berglöwen oder Wölfen:

Code: Select all

create_item_type(typeid='SET_LONG_LEATHER_STRING')
objects.set_attribute(object='SET_LONG_LEATHER_STRING', attribute="name", value=globaltext.SET_LONG_LEATHER_STRING_NAME)
objects.set_attribute(object='SET_LONG_LEATHER_STRING', attribute="hint", value=globaltext.SET_LONG_LEATHER_STRING_HINT)
objects.set_attribute(object='SET_LONG_LEATHER_STRING', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_LONG_LEATHER_STRING')
objects.set_attribute(object='SET_LONG_LEATHER_STRING', attribute="resource3d", value='RES3D_LONG_LEATHER_STRING')
objects.set_attribute(object='SET_LONG_LEATHER_STRING', attribute="value", value=1.0)
objects.set_attribute(object='SET_LONG_LEATHER_STRING', attribute="weight", value=0.3)
objects.set_attribute(object='SET_LONG_LEATHER_STRING', attribute="stacking", value=100)
objects.set_attribute(object='SET_LONG_LEATHER_STRING', attribute="combine_xp", value=50)
objects.set_attribute(object='SET_LONG_LEATHER_STRING', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
        "assemble_function"		:	"assemble_parlor_game",
	"combination_list"		:	[['SET_KNIFE', 'SET_BEAR_CLAW'],
							['SET_KNIFE', 'SET_TIGER_CLAW'],
							['SET_KNIFE', 'SET_WOLF_CLAW']]})
Kurze Schnüre aus den Pfoten von Wildhunden:

Code: Select all

create_item_type(typeid='SET_SHORT_LEATHER_STRING')
objects.set_attribute(object='SET_SHORT_LEATHER_STRING', attribute="name", value=globaltext.SET_SHORT_LEATHER_STRING_NAME)
objects.set_attribute(object='SET_SHORT_LEATHER_STRING', attribute="hint", value=globaltext.SET_SHORT_LEATHER_STRING_HINT)
objects.set_attribute(object='SET_SHORT_LEATHER_STRING', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_SHORT_LEATHER_STRING')
objects.set_attribute(object='SET_SHORT_LEATHER_STRING', attribute="resource3d", value='RES3D_SHORT_LEATHER_STRING')
objects.set_attribute(object='SET_SHORT_LEATHER_STRING', attribute="value", value=1.0)
objects.set_attribute(object='SET_SHORT_LEATHER_STRING', attribute="weight", value=0.01)
objects.set_attribute(object='SET_SHORT_LEATHER_STRING', attribute="stacking", value=100)
objects.set_attribute(object='SET_SHORT_LEATHER_STRING', attribute="combine_xp", value=50)
objects.set_attribute(object='SET_SHORT_LEATHER_STRING', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
        "assemble_function"		:	"assemble_parlor_game",
	"combination_list"		:	[['SET_KNIFE', 'SET_WILD_DOG_CLAW']]})
Die Namen und Hints werden in scripts / globaltext / german / german.py wie folgend verändert:

Code: Select all

add_global_text(id='SET_BEAR_CLAW_NAME', text='Bärenpfoten mit Krallen')
add_global_text(id='SET_BEAR_CLAW_HINT', text='Bärenpfoten mit Krallen')
add_global_text(id='SET_TIGER_CLAW_NAME', text='Berglöwenpfoten mit Krallen')
add_global_text(id='SET_TIGER_CLAW_HINT', text='Berglöwenpfoten mit Krallen')
add_global_text(id='SET_WOLF_CLAW_NAME', text='Wolfspfoten mit Krallen')
add_global_text(id='SET_WOLF_CLAW_HINT', text='Wolfspfoten mit Krallen')
add_global_text(id='SET_WILD_DOG_CLAW_NAME', text='Wildhundpfoten mit Krallen')
add_global_text(id='SET_WILD_DOG_CLAW_HINT', text='Wildhundpfoten mit Krallen')

Lederkleidung

Posted: Thu Sep 09, 2010 4:37 pm
by Torka
Gegerbtes Leder + Lange Lederschnur + Messer  =  Dünne Lederkleidung
Das Skript kann in scripts / itemdata / items.py wie folgt verändert werden:
[spoiler]

Code: Select all

create_item_type(typeid='SET_INTRO_CLOTHES')
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="name", value=globaltext.SET_INTRO_CLOTHES_NAME)
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="hint", value=globaltext.SET_INTRO_CLOTHES_HINT)
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_INTRO_CLOTHES')
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="resource3d", value='RES3D_INTRO_CLOTHES')
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="value", value=25.00)
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="weight", value=2.50)
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="stacking", value=6)
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="armor", value=1)
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="occupied_slots", value=["clothes"])
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="not_tradable", value=True)
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="combine_xp", value=50)
objects.set_attribute(object='SET_INTRO_CLOTHES', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
        "assemble_function"		:	"assemble_parlor_game",
	"combination_list"		:	[['SET_KNIFE', 'SET_HYENA_PELT', 'SET_LONG_LEATHER_STRING']]})
[/spoiler]


Gegerbtes Leder + Lange Lederschnur + Nieten + Messer  = Lederkleidung
Das Skript kann in scripts / itemdata / items.py wie folgt verändert werden:
[spoiler]

Code: Select all

create_item_type(typeid='SET_LEATHER_CLOTHES')
objects.set_attribute(object='SET_LEATHER_CLOTHES', attribute="name", value=globaltext.SET_LEATHER_CLOTHES_NAME)
objects.set_attribute(object='SET_LEATHER_CLOTHES', attribute="hint", value=globaltext.SET_LEATHER_CLOTHES_HINT)
objects.set_attribute(object='SET_LEATHER_CLOTHES', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_LEATHER_CLOTHES')
objects.set_attribute(object='SET_LEATHER_CLOTHES', attribute="resource3d", value='RES3D_LEATHER_CLOTHES')
objects.set_attribute(object='SET_LEATHER_CLOTHES', attribute="value", value=15.00)
objects.set_attribute(object='SET_LEATHER_CLOTHES', attribute="weight", value=2.0)
objects.set_attribute(object='SET_LEATHER_CLOTHES', attribute="stacking", value=6)
objects.set_attribute(object='SET_LEATHER_CLOTHES', attribute="armor", value=4)
objects.set_attribute(object='SET_LEATHER_CLOTHES', attribute="occupied_slots", value=["clothes"])
objects.set_attribute(object='SET_LEATHER_CLOTHES', attribute="combine_xp", value=50)
objects.set_attribute(object='SET_LEATHER_CLOTHES', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
        "assemble_function"		:	"assemble_parlor_game",
	"combination_list"		:	[['SET_KNIFE', 'SET_HYENA_PELT', 'SET_LONG_LEATHER_STRING', 'SET_RIVETS']]})
[/spoiler]


Gegerbtes Leder + Kurze Lederschnur + Messer  =  Lederhandschuhe
Das Skript kann in scripts / itemdata / items.py wie folgt verändert werden:
[spoiler]

Code: Select all

create_item_type(typeid='SET_LEATHER_GLOVES')
objects.set_attribute(object='SET_LEATHER_GLOVES', attribute="name", value=globaltext.SET_LEATHER_GLOVES_NAME)
objects.set_attribute(object='SET_LEATHER_GLOVES', attribute="hint", value=globaltext.SET_LEATHER_GLOVES_HINT)
objects.set_attribute(object='SET_LEATHER_GLOVES', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_LEATHER_GLOVES')
objects.set_attribute(object='SET_LEATHER_GLOVES', attribute="resource3d", value='RES3D_LEATHER_GLOVES')
objects.set_attribute(object='SET_LEATHER_GLOVES', attribute="value", value=15.00)
objects.set_attribute(object='SET_LEATHER_GLOVES', attribute="weight", value=0.20)
objects.set_attribute(object='SET_LEATHER_GLOVES', attribute="stacking", value=6)
objects.set_attribute(object='SET_LEATHER_GLOVES', attribute="armor", value=1)
objects.set_attribute(object='SET_LEATHER_GLOVES', attribute="occupied_slots", value=["gloves"])
objects.set_attribute(object='SET_LEATHER_GLOVES', attribute="combine_xp", value=25)
objects.set_attribute(object='SET_LEATHER_GLOVES', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
        "assemble_function"		:	"assemble_parlor_game",
	"combination_list"		:	[['SET_KNIFE', 'SET_HYENA_PELT', 'SET_SHORT_LEATHER_STRING']]})
[/spoiler]


Gegerbtes Leder + Kurze Lederschnur + Nieten + Messer  =  Lederschutzkappe
Das Skript kann in scripts / itemdata / items.py wie folgt verändert werden:
[spoiler]

Code: Select all

create_item_type(typeid='SET_LEATHER_CAP')
objects.set_attribute(object='SET_LEATHER_CAP', attribute="name", value=globaltext.SET_LEATHER_CAP_NAME)
objects.set_attribute(object='SET_LEATHER_CAP', attribute="hint", value=globaltext.SET_LEATHER_CAP_HINT)
objects.set_attribute(object='SET_LEATHER_CAP', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_LEATHER_CAP')
objects.set_attribute(object='SET_LEATHER_CAP', attribute="resource3d", value='RES3D_LEATHER_CAP')
objects.set_attribute(object='SET_LEATHER_CAP', attribute="value", value=7.00)
objects.set_attribute(object='SET_LEATHER_CAP', attribute="weight", value=0.40)
objects.set_attribute(object='SET_LEATHER_CAP', attribute="stacking", value=6)
objects.set_attribute(object='SET_LEATHER_CAP', attribute="armor", value=2)
objects.set_attribute(object='SET_LEATHER_CAP', attribute="occupied_slots", value=["helm"])
objects.set_attribute(object='SET_LEATHER_CAP', attribute="combine_xp", value=30)
objects.set_attribute(object='SET_LEATHER_CAP', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
        "assemble_function"		:	"assemble_parlor_game",
	"combination_list"		:	[['SET_KNIFE', 'SET_HYENA_PELT', 'SET_SHORT_LEATHER_STRING', 'SET_RIVETS']]})
[/spoiler]


Gegerbtes Leder + Kurze Lederschnur + Nieten + Hammer  =  Lederstiefel
Das Skript kann in scripts / itemdata / items.py wie folgt verändert werden:
[spoiler]

Code: Select all

create_item_type(typeid='SET_LEATHER_BOOTS')
objects.set_attribute(object='SET_LEATHER_BOOTS', attribute="name", value=globaltext.SET_LEATHER_BOOTS_NAME)
objects.set_attribute(object='SET_LEATHER_BOOTS', attribute="hint", value=globaltext.SET_LEATHER_BOOTS_HINT)
objects.set_attribute(object='SET_LEATHER_BOOTS', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_LEATHER_BOOTS')
objects.set_attribute(object='SET_LEATHER_BOOTS', attribute="resource3d", value='RES3D_LEATHER_BOOTS')
objects.set_attribute(object='SET_LEATHER_BOOTS', attribute="value", value=25.00)
objects.set_attribute(object='SET_LEATHER_BOOTS', attribute="weight", value=1.5)
objects.set_attribute(object='SET_LEATHER_BOOTS', attribute="stacking", value=6)
objects.set_attribute(object='SET_LEATHER_BOOTS', attribute="armor", value=2)
objects.set_attribute(object='SET_LEATHER_BOOTS', attribute="occupied_slots", value=["boots"])
objects.set_attribute(object='SET_LEATHER_BOOTS', attribute="combine_xp", value=60)
objects.set_attribute(object='SET_LEATHER_BOOTS', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
        "assemble_function"		:	"assemble_plate_armor",
	"combination_list"		:	[['SET_SLEDGE_HAMMER', 'SET_HYENA_PELT', 'SET_SHORT_LEATHER_STRING', 'SET_RIVETS']]})
[/spoiler]


Gegerbtes Leder + Kurze Lederschnur + Nieten + Stahlplatten + Hammer  =  Stahlkappenstiefel
Das Skript kann in scripts / itemdata / items.py wie folgt verändert werden:
[spoiler]

Code: Select all

create_item_type(typeid='SET_STEEL_CLAD_BOOTS')
objects.set_attribute(object='SET_STEEL_CLAD_BOOTS', attribute="name", value=globaltext.SET_STEEL_CLAD_BOOTS_NAME)
objects.set_attribute(object='SET_STEEL_CLAD_BOOTS', attribute="hint", value=globaltext.SET_STEEL_CLAD_BOOTS_HINT)
objects.set_attribute(object='SET_STEEL_CLAD_BOOTS', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_STEEL_CLAD_BOOTS')
objects.set_attribute(object='SET_STEEL_CLAD_BOOTS', attribute="resource3d", value='RES3D_STEEL_CLAD_BOOTS')
objects.set_attribute(object='SET_STEEL_CLAD_BOOTS', attribute="value", value=50.00)
objects.set_attribute(object='SET_STEEL_CLAD_BOOTS', attribute="weight", value=2.00)
objects.set_attribute(object='SET_STEEL_CLAD_BOOTS', attribute="stacking", value=6)
objects.set_attribute(object='SET_STEEL_CLAD_BOOTS', attribute="armor", value=4)
objects.set_attribute(object='SET_STEEL_CLAD_BOOTS', attribute="occupied_slots", value=["boots"])
objects.set_attribute(object='SET_STEEL_CLAD_BOOTS', attribute="combine_xp", value=75)
objects.set_attribute(object='SET_STEEL_CLAD_BOOTS', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
        "assemble_function"		:	"assemble_plate_armor",
	"combination_list"		:	[['SET_SLEDGE_HAMMER', 'SET_HYENA_PELT', 'SET_SHORT_LEATHER_STRING', 'SET_RIVETS', 'SET_STEEL_PLATES']]})
[/spoiler]


Auf diesen Skripten aufbauend kann man dann folgende Ideen umsetzten:

Eisenplatten + Hammer  =  einfacher Helm
Stahlplatten + Hammer  =  Stahlhelm

Re: Mod-Tagebuch

Posted: Thu Sep 09, 2010 8:15 pm
by le Chew
Hehe, er wütet wieder  :D

Da sind schicke Sachen dabei - ich überlege gerade ob 2 Dinge sinnvoll wären:

1. Ein "Übersichtsthread" mit Linklisten a la "Dünne Lederrüstung" -> Link zum Codeschnippsel
2. Ein (privates) SVN-Repository der Original-"The Fall"-Pythonscripte mit dem wir dann diffs anfertigen - so könnte jeder seine lokalen Scripte ganz einfach patchen und hätte deine Änderungen :)

(Privates SVN deswegen weil ich denke ein Öffentliches würde evtl. Probleme machen wegen Lizenzen etc...)

Weiter so, du aktivstes deutsches The-Fall-Modding-"Team" du  :s000:

cheers,
chewie

Re: Mod-Tagebuch

Posted: Thu Sep 09, 2010 8:37 pm
by Torka
Danke chewie  :D
1. Ein "Übersichtsthread" mit Linklisten a la "Dünne Lederrüstung" -> Link zum Codeschnippsel
2. Ein (privates) SVN-Repository der Original-"The Fall"-Pythonscripte mit dem wir dann diffs anfertigen - so könnte jeder seine lokalen Scripte ganz einfach patchen und hätte deine Änderungen
Die Itemliste hat hat sich gerade ein wenig verselbständigt und die Übersicht leidet - sollten eigentlich nur Beispiele werden *g* - aber der Ideenfluß war zu schnell  ;D.
Wie könnte so ein SVN ausschauen, habe da leider gar keinen Plan von, außer das die Skriptteile miteinander verglichen werden.
Wenn die Zeit und Motivation reichen, soll ja aus der Iddensammlung des Modtagebuches eine kleine Mod entstehen - sowas wie "TF-Extended" - mal schauen.   

Über Urheberrechte habe ich mir auch schon Gedanken gemacht, deswegen stehen als Quellen immer die Skriptpfade da. Da es ja auch Modtool und den Editor + die Anleitungen zum Modden gibt hoffe ich mal nicht Probleme zu bekommen. Anderenfalls werden sie Skriptteile halt wieder entfernt. Ich habe auch schon zwei Emails an Silver Style geschrieben, leider haben sie noch nicht geantwortet.

Werkzeug selbst definieren

Posted: Tue Sep 14, 2010 12:11 am
by Torka
Wie man selbst Werkzeuge definiert, zeigt folgendes Skript (z.B.: Zange oder Hammer, welche nach dem Benutzen wieder im Inventar zur Verfügung stehen). Im Beispiel wird unter scripts / combos.py eine Backform für das spätere Brotbacken  :D beschrieben:

Code: Select all

def assemble_cake_tin(character_id, items, item):
	"""Creates cake tin.

Parameters:
        character_id - Id of owner of items.
        items        - List of id of items to combine.
        item         - The item_type of new item.
"""
	for act_item in items:
		if (objects.get_attribute(act_item, "typeid")!="SET_CAKE_TIN"):
			objects.remove_item_from_inventory(character_id, act_item)
	
	
	objects.create_item_in_inventory(object=character_id, equipment=item)
	return True
In scripts / itemdata / items.py ist dann unter dem Brot diese Funktion wieder zu finden:

Code: Select all

create_item_type(typeid='SET_BREAD')
objects.set_attribute(object='SET_BREAD', attribute="name", value=globaltext.SET_BREAD_NAME)
objects.set_attribute(object='SET_BREAD', attribute="hint", value=globaltext.SET_BREAD_HINT)
objects.set_attribute(object='SET_BREAD', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_BREAD')
objects.set_attribute(object='SET_BREAD', attribute="resource3d", value='RES3D_BREAD')
objects.set_attribute(object='SET_BREAD', attribute="value", value=4.0)
objects.set_attribute(object='SET_BREAD', attribute="weight", value=0.5)
objects.set_attribute(object='SET_BREAD', attribute="stacking", value=500)
objects.set_attribute(object='SET_BREAD', attribute="le_recovery", value=8)
objects.set_attribute(object='SET_BREAD', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
        "assemble_function"		:	"assemble_cake_tin",
	"combination_list"		:	[['SET_CAKE_TIN', 'SET_SUGAR','SET_WATER_SKIN']]})
Nun ist es möglich aus Wasser, Mehl (ursprünglich die orginale Zuckertüte) und der Backform (eigentlich die Kuchenform) das erste eigene Brot zu backen.  ;)

Alles gut und schön, an Wasser im Ödland zu kommen ist ja schon gut möglich, doch wo findet man Mehl?

Option A: Wo eine Windmühle steht, könnte der Müller nicht weit sein und wo Säcke liegen, könnte auch Mehl drin sein  ;D. Es wird also auf einigen Karten hinterlegt.

Option B:Selbst ist der Wasteländer, naja, fast. Da wo es Kornfelder gibt (manchmal schon abgeerntet mit Stroh) werden Roggenbündel zu finden sein, aus denen Mehl zu gewinnen ist.

Das Skript für die Verarbeitung von Rogenbündeln zu Mehl. Es ist zwar etwas mühselig mit einem Hammer die Körner zu zerstampfen, aber Not macht erfinderisch:
[spoiler]

Code: Select all

create_item_type(typeid='SET_SUGAR')
objects.set_attribute(object='SET_SUGAR', attribute="name", value=globaltext.SET_SUGAR_NAME)
objects.set_attribute(object='SET_SUGAR', attribute="hint", value=globaltext.SET_SUGAR_HINT)
objects.set_attribute(object='SET_SUGAR', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_SUGAR')
objects.set_attribute(object='SET_SUGAR', attribute="resource3d", value='RES3D_SUGAR')
objects.set_attribute(object='SET_SUGAR', attribute="value", value=2.0)
objects.set_attribute(object='SET_SUGAR', attribute="weight", value=0.5)
objects.set_attribute(object='SET_SUGAR', attribute="stacking", value=100)
objects.set_attribute(object='SET_SUGAR', attribute="combine_xp", value=100)
objects.set_attribute(object='SET_SUGAR', attribute="item_combination",	value={
	"difficulty_assemble"	:	COMBO_EVERYBODY,
	 "assemble_function"	:	"assemble_plate_armor",
	"combination_list"		:	[
								['SET_BUNCH_OF_RYE_PLANTS','SET_SLEDGE_HAMMER']]})
[/spoiler]

Objekte des Editors als Inventaritems im Spiel definieren

Posted: Tue Oct 12, 2010 11:09 am
by Torka
Seit einiger Zeit habe ich damit experimentiert Gegenstände des Editors in nutzbare Spielobjekte um zu wandeln. Als Beispiel möchte ich das an Pilzen dokumentieren:

1. Der Name des neuen Items lautet MUSHROOMS_1 und wird wie bisher gewohnt als Objekt in scripts / itemdata / items.py definiert:
                 

Code: Select all

create_item_type(typeid='SET_MUSHROOMS_1')
objects.set_attribute(object='SET_MUSHROOMS_1', attribute="name", value=globaltext.SET_MUSHROOMS_1_NAME)
objects.set_attribute(object='SET_MUSHROOMS_1', attribute="hint", value=globaltext.SET_MUSHROOMS_1_HINT)
objects.set_attribute(object='SET_MUSHROOMS_1', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_MUSHROOMS_1')
objects.set_attribute(object='SET_MUSHROOMS_1', attribute="resource3d", value='RES3D_TRES_OBJECTS_BUILDING_MUSHROOMS_1')
objects.set_attribute(object='SET_MUSHROOMS_1', attribute="value", value=2.0)
objects.set_attribute(object='SET_MUSHROOMS_1', attribute="weight", value=0.2)
objects.set_attribute(object='SET_MUSHROOMS_1', attribute="stacking", value=10)


2. Der Namen und Hint der Pilze im Spiel werden in scripts / globaltext / german / german.py definiert:
               

Code: Select all

add_global_text(id='SET_MUSHROOMS_1_NAME', text='Champignons')
add_global_text(id='SET_MUSHROOMS_1_HINT', text='Champignons')
Dem geübten Leser wird jetzt auffallen, das es sich um Champignons handeln wird.



3. Das Inventarbild wird in der Zeile  objects.set_attribute(object='SET_MUSHROOMS_1', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_MUSHROOMS_1' ) abgefragt.

Dieses gibt es in den GUI-Daten noch nicht und muss verankert werden. Dem Spiel sind im Modordner Tools beigefügt, eines davon ist das Tool guiresourcedata.exe. Dieses öffnen.
Es hat Vorteile schon vorher zu wissen, wo sich denn die GUI-Daten der Items verstecken. Häufig halten sie sich in The Fall / data / guidata / fall_items.gui auf  ;).
Die Datei öffnen und unter "Ressourcen" auf der linken Seite erscheint eine lange Liste der definierten Inventarbilder der Objekte - Pilze sind da noch nicht zu finden, müssen noch "wachsen".
In der Datenbank einfach einen neuen Eintrag erstellen (am oberen linken Rand erstes Quadratsymbol "Neue Ressource" anklicken- schau auch in die Infozeile unten)
Die Infostruktur kann man eigentlich recht analog zu den anderen Objekten erstellen. Zu jedem Eintrag auf der linken Seite in der Datenbank stehen verschiedene Informationen auf der rechten Seite.
                           
     a. die Id: von 400000 bis 400545  - ich habe einfach die 1 genommen, da es mein erstes Objekt ist

     b. Bezeichner: RES_ITEM65X32_MISCITEM_MUSHROOMS_1  - wichtig, das ist der Name auf den sich weiter oben hier in der Objektdefinition bezogen wird

     c. Es wird ein "Neuer Bereich" definiert und es öffnet sich ein Fenster, in welchem man folgende Werte einträgt:

                   Nummer: 0
                   Koordinaten des Inventarbildes auf einem PNG-Bild:  TX1:0 TY1:0 und TX2:65 TX2: 32
                   Breite: 32
                   Höhe:  65  
                   Offset XY: 0
                   Streckung XY: 1
                   Pfad: gui\gui_mission\items\b_mushrooms1.png Dieser Pfad muss auch im Eintrag der Texturbibliothek stehen.

          Am Ende des Pfades gui \ gui-mission\items\ verstecken sich insgesamt 26 Bilder im DDS Format. Jedes Bild enthält mehrere Inventarbilder,
          welches man sich mit dem Programm dxtbmpx.EXE angesehen kann und so auch eine Vorstellung bekommt, was sich  z.B. hinter den Koordinaten verbirgt.
          Im Fall der Pilze ist das aber eh rein theoretisch, da ein Inventarbild noch gar nicht existiert. 
          Es gibt im TF-Editor Pilzbilder, welche man im Ordner The Fall / gui / preview / buildings / b_mushrooms1.png.dds finden kann.
          Entweder man legt den Pfad dahin oder man kopiert das Bild nach gui \ gui-mission\items, habe der Übersicht halber letzteres getan.

      d. Nun muss das Bild nur noch in der Texturdatenbank der GUIResourceData eingebunden werden. Dazu klickt man in der Symbolleiste den Button Texturdatenbank an und es öffnet sich das Fenster der Texturbibliothek.
          Ein ähnliches Spiel wie zuvor. Ein neuer Eintrag wird erstellt und folgende Werte definiert:

                    Id: 1
                    Pfad: gui\gui_mission\items\b_mushrooms1.png (wichtig, das Bild ist im Ordner als .dds abgelegt, es wird aber auf das .png verwiesen!), Pfad aus c muss identisch sein!
                    Format: PNG
                    Höhe: 64
                    Breite: 32 (wichtig, die anderen Bilder sind ja 256x256, da sie mehrere Inventarbilder enthalten, dieses ist nur ein einzelnes deswegen 64x32)
                    Typ: Transparent
         
        Jetzt sollte das Bild verankert sein und im Spielerinventar sichtbar sichtbar sein.


4. Als nächstes wird das 3d-Modell in der Zeile objects.set_attribute(object='SET_MUSHROOMS_1', attribute="resource3d", value='RES3D_TRES_OBJECTS_BUILDING_MUSHROOMS_1') abgefragt.

In der Datei scripts / objectdata / items.py werden die 3d-Modelle der Items geladen. Da es die Pilze aber nur im Editor gibt, müssen sie unter 'RES3D_TRES_OBJECTS_BUILDING_MUSHROOMS_1' durch folgende Zeilen analog zu den anderen hinzugefügt werden:

Code: Select all

add_3d_item_data(typeid='RES3D_TRES_OBJECTS_BUILDING_MUSHROOMS_1')
objects.set_attribute(object='RES3D_TRES_OBJECTS_BUILDING_MUSHROOMS_1', attribute="diff3d_file", value="objects\\additionals\\thefall\\misc\\mushrooms1.diff3d")
objects.set_attribute(object='RES3D_TRES_OBJECTS_BUILDING_MUSHROOMS_1', attribute="states", value=['TRES_OBJECTS_BUILDING_MUSHROOMS_1'])
                       
Die 3d-Datei der Pilze im Editor findet sich ursprünglich unter The Fall / objects / buildings / mushrooms / mushrooms1.diff3d . Entweder man verlinkt direkt oder man verschiebt eine
Kopie nach The Fall / objects / additionals / thefall / misc / mushrooms1.diff3d zu den 3d-Modellen der anderen Items.


Wenn soweit alles richtig ausgeführt und alles gespeichert (Backup gemacht ?) wurde, kann man nun Pilze sammeln.  #yay (diese müßten natürlich noch in den Zonenskripten analog zu den Kräutern plaziert werden)
Image

Baustelle

Posted: Wed Oct 13, 2010 4:56 am
by Torka
#radi2 Baustelle #radi2
     :coffee  :para
objects.set_attribute("GANGER_1","foes",["UISPIELER"])

zone_2 / npc.py
[spoiler]

Code: Select all

def initNPCS():
	#RATSKULL_SQUAD_LEADER
	system.create_character(
		id="RATSKULL_SQUAD_LEADER",
		gender="male",
		party="RATSKULLS",
		x=432.83,
		y=668.85,
		direction=0,
		name=globaltext.NAME_RATSKULL,
		resourceui="")

 	objects.set_attribute("RATSKULL_SQUAD_LEADER", "faction", "RAT_SKULLS")
	objects.set_attribute("RATSKULL_SQUAD_LEADER", "level", 3 )
	objects.set_attributes("RATSKULL_SQUAD_LEADER",
		model="low",
		gender="male", # "female"
		skin="white", # "black"
		clothes="ratskull_bulletproof", # "ratskull",
		face="ratskull_member_0012")
	character.update_appearance("RATSKULL_SQUAD_LEADER")
	character.scale("RATSKULL_SQUAD_LEADER",1.82)
[/spoiler]

zone_2 / const.py

Code: Select all

data().ratskulls_david = 	["RATSKULL_SQUAD_LEADER", "RATSKULL_002", "RATSKULL_017"]
data().ratskulls_camp = 	["RATSKULL_006", "RATSKULL_007"]
data().ratskulls_village =	["RATSKULL_003","RATSKULL_004","RATSKULL_010", "RATSKULL_005","RATSKULL_011","RATSKULL_012", "RATSKULL_013","RATSKULL_014","RATSKULL_015", "RATSKULL_016"]
data().ratskulls = data().ratskulls_david + data().ratskulls_camp + data().ratskulls_village
zone_2 / shedules.py
[spoiler]

Code: Select all

"RATSKULL_011": ({
	S_CONDITION:lambda:data().RatskullsKonversationAktiv,
	# Konversation
	"01:30:00":{
		S_LOCATION : 1,
		S_START  :(goto(638.6,560.3)),
		S_LOOP	 :(conversate(["RATSKULL_012","RATSKULL_013","RATSKULL_014"])),
	},
	# Sitzen, warten
	"11:25:00":{
		S_LOCATION : 2,
		S_START  :(sit_down_on_ground()),
		S_LOOP	 :(sit_on_ground()),
	},
},{
	S_CONDITION: lambda: data().ratskulls_emergency_schedule, 
	"00:00:00" : {
		S_START : [goto(638.6,560.5)],
		S_LOOP  : []
	}
}),

"RATSKULL_012": ({
	S_CONDITION:lambda:data().RatskullsKonversationAktiv,
	# Konversation
	"00:15:00":{
		S_LOCATION : 1,
		S_START  :(goto(637.1,560.5)),
		S_LOOP	 :(conversate(["RATSKULL_011","RATSKULL_013","RATSKULL_014"])),
	},
	# Sitzen, warten
	"10:04:00":{
		S_LOCATION : 2,
		S_START  :(sit_down_on_ground()),
		S_LOOP	 :(sit_on_ground()),
	},
},{
	S_CONDITION: lambda: data().ratskulls_emergency_schedule, 
	"00:00:00" : {
		S_START : [goto(637.1,560.5)],
		S_LOOP  : []
	}
}),

"RATSKULL_013": ({
	S_CONDITION:lambda:data().RatskullsKonversationAktiv,
	# Konversation
	"02:01:00":{
		S_LOCATION : 1,
		S_START  :(goto(638.11,559.37)),
		S_LOOP	 :(conversate(["RATSKULL_012","RATSKULL_011","RATSKULL_014"])),
	},
	# Sitzen, warten
	"13:45:00":{
		S_LOCATION : 2,
		S_START  :(sit_down_on_ground()),
		S_LOOP	 :(sit_on_ground()),
	},
},{
	S_CONDITION: lambda: data().ratskulls_emergency_schedule, 
	"00:00:00" : {
		S_START : [goto(638.1,559.4)],
		S_LOOP  : []
	}
}),

"RATSKULL_014": ({
	S_CONDITION:lambda:data().RatskullsKonversationAktiv,
	# Konversation
	"01:20:00":{
		S_LOCATION : 1,
		S_START  :(goto(636.0,559.8)),
		S_LOOP	 :(conversate(["RATSKULL_012","RATSKULL_013","RATSKULL_011"])),
	},
	# Sitzen, warten
	"15:10:00":{
		S_LOCATION : 2,
		S_START  :(sit_down_on_ground()),
		S_LOOP	 :(sit_on_ground()),
	},
},{
	S_CONDITION: lambda: data().ratskulls_emergency_schedule, 
	"00:00:00" : {
		S_START : [goto(636,559.8)],
		S_LOOP  : []
	}
}),
[/spoiler]

Na lol,  #batsch da habe ich aus Versehen auf den roten Knopf gedrückt  :atomrofl7ep5rb:

:smug: Dekontamination fast abgeschlossen, allgemeine Aufräumarbeiten...  #knirsch  ...  >:D ....  ich könnt  #kotzen# ... Kaffeepause  :coffee

Re: Mod-Tagebuch

Posted: Sun Oct 17, 2010 12:51 pm
by Lexx
Die Pilze sehen gut aus, aber ich wage zu bezweifeln, dass in dem Teil der Welt Champignons wachsen. :p

Re: Mod-Tagebuch

Posted: Mon Oct 18, 2010 1:28 pm
by Torka
Lexx wrote: Die Pilze sehen gut aus, aber ich wage zu bezweifeln, dass in dem Teil der Welt Champignons wachsen. :p
Die Pilze sind eigentlich die Modelle aus den Pilzfarmen der Höhle. Die GNO-Karte ist nur der Teststandort für die erstellten Objekte  ;). Wenn es denn mal zur Modifikation kommen sollte, werden sie sicher in den Pilzfarmen der Schatten zu finden sein oder vereinzelt in tiefen, schattigen Tälern in der Nähe einer Quelle.
Ob Champignon- oder Egerlingsartige (Agaricaceae) auch im Südwesten der USA vorkommen habe ich mich auch gefragt und war recht erstaunt über die Antworten.
Podaxis pistillaris ist z.B. eine Pilzart aus der Familie der Champignonartigen, welche auch in der Sonorawüste wächst. Der Pilz ist in den Halbwüsten Afrikas, Asiens, Australiens und Amerikas zwischen 40 Grad nördlicher und 40 Grad südlicher Breite zu finden. Die meisten Entdeckungen wurden in Regionen mit langen Trockenzeiten gemacht. Der Pilz wächst am schnellsten bei Temperaturen um 40 Grad Celsius. Bis etwa 20 und ab 50 Grad Celsius kann er nicht wachsen.
Den dramatischen Klimaveränderungen im Szenario des Spiels geschuldet werden die Pilze aber sehr untergeordnet und eher seltener auf den Karten zu finden sein. Vielleicht wird man Handel in den Pilzfarmen betreiben können oder durch aktive Mitarbeit (Bewäsern, Düngen) könnte es möglich sein selbst Pilze zu züchten.

Quellen:
http://www.forestryimages.org/browse/de ... um=1570702
http://de.wikipedia.org/wiki/Podaxis_pistillaris
http://www.arizonensis.org/sonoran/fiel ... laris.html

Re: Mod-Tagebuch

Posted: Fri Apr 15, 2011 12:26 pm
by Torka
Leider komme ich nur noch unregelmäßig zum modifizieren. Der neue Job im RL ist doch arg zeitfressend  >:(. Mein Rechner hat nach 6 Jahren auch leider den Geist aufgegeben und es bleibt nur noch eine Datensicherung übrig - aber Ostern wird auch eine neue Rechnergeneration auferstehen.  :D

Wenn es machbar ist, wird es auch hier wieder weiter gehen....