1. Im Laufe des Spiels ist eine Sammlernatur mehr mit Itemmanagement beschäftigt, als mit Spielen. Trotz aller Kofferräume der 5 Autos fing man an auch noch irendwelche kleinen Sammelecken anzulegen Smiley. Inventar vergrößern ?
2. Die Werte der Items, wie z.B. die 2 kg schwere Glühbirne oder die angefertigten Halsketten, welche meist billiger waren als die Ausgangsmaterialien. Das selbe Spiel bei den Waffen. Werte verändern?
3. Die versiegenden Wasserquellen hätten ruhig etwas mehr Wasserportionen haben können. Auch ein paar mehr Quellen hinzufügen, z. B. in ausgetrockneten Seen, Flüssen ?
6. Ein wenig mehr Benzin im Spiel wäre nett und Bienenwachs in den Stöcken.
# which zone to load on campaign start
ENTRY_ZONE = "zones\\zone_1\\zone_1"
# which zone to load on campaign start
ENTRY_ZONE = "zones\\zone_8\\zone_8
1. Im Laufe des Spiels ist eine Sammlernatur mehr mit Itemmanagement beschäftigt, als mit Spielen. Trotz aller Kofferräume der 5 Autos fing man an auch noch irgendwelche kleinen Sammelecken anzulegen :). Inventar vergrößern ?
create_vehicle_type(typeid='SET_BUGGY')
objects.set_attribute(object='SET_BUGGY', attribute="name", value=globaltext.SET_BUGGY_NAME)
.
.
.
objects.set_attribute(object='SET_BUGGY', attribute="inventory_slots", value=24)
create_item_type(typeid='SET_NORMAL_CLOTHES_1')
objects.set_attribute(object='SET_NORMAL_CLOTHES_1', attribute="name", value=globaltext.SET_NORMAL_CLOTHES_1_NAME)
objects.set_attribute(object='SET_NORMAL_CLOTHES_1', attribute="hint", value=globaltext.SET_NORMAL_CLOTHES_1_HINT)
objects.set_attribute(object='SET_NORMAL_CLOTHES_1', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_NORMAL_CLOTHES_1')
objects.set_attribute(object='SET_NORMAL_CLOTHES_1', attribute="resource3d", value='RES3D_NORMAL_CLOTHES_1')
objects.set_attribute(object='SET_NORMAL_CLOTHES_1', attribute="value", value=5.00)
objects.set_attribute(object='SET_NORMAL_CLOTHES_1', attribute="weight", value=2.50)
objects.set_attribute(object='SET_NORMAL_CLOTHES_1', attribute="stacking", value=1)
objects.set_attribute(object='SET_NORMAL_CLOTHES_1', attribute="armor", value=1)
objects.set_attribute(object='SET_NORMAL_CLOTHES_1', attribute="occupied_slots", value=["clothes"])
2. Die Werte der Items, wie z.B. die 2 kg schwere Glühbirne oder die angefertigten Halsketten, welche meist billiger waren als die Ausgangsmaterialien. Das selbe Spiel bei den Waffen. Werte verändern?
create_item_type(typeid='SET_VERY_NICE_BRACELET')
objects.set_attribute(object='SET_VERY_NICE_BRACELET', attribute="name", value=globaltext.SET_VERY_NICE_BRACELET_NAME)
objects.set_attribute(object='SET_VERY_NICE_BRACELET', attribute="hint", value=globaltext.SET_VERY_NICE_BRACELET_HINT)
objects.set_attribute(object='SET_VERY_NICE_BRACELET', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_VERY_NICE_BRACELET')
objects.set_attribute(object='SET_VERY_NICE_BRACELET', attribute="resource3d", value='RES3D_VERY_NICE_BRACELET')
objects.set_attribute(object='SET_VERY_NICE_BRACELET', attribute="value", value=8.0)
objects.set_attribute(object='SET_VERY_NICE_BRACELET', attribute="weight", value=0.4)
objects.set_attribute(object='SET_VERY_NICE_BRACELET', attribute="stacking", value=1)
objects.set_attribute(object='SET_VERY_NICE_BRACELET', attribute="combine_xp", value=75)
objects.set_attribute(object='SET_VERY_NICE_BRACELET', attribute="item_combination", value={
"difficulty_assemble" : 75,
"combination_list" : [['SET_SHORT_LEATHER_STRING', 'SET_BEAR_CLAW', 'SET_BEAR_TEETH'],
['SET_SHORT_LEATHER_STRING', 'SET_TIGER_CLAW', 'SET_TIGER_TEETH'],
['SET_SHORT_LEATHER_STRING', 'SET_WOLF_CLAW', 'SET_WOLF_TEETH'],
['SET_SHORT_LEATHER_STRING', 'SET_HYENA_CLAW', 'SET_HYENA_TEETH'],
['SET_SHORT_LEATHER_STRING', 'SET_WILD_DOG_CLAW', 'SET_WILD_DOG_TEETH']]})
3. Die versiegenden Wasserquellen hätten ruhig etwas mehr Wasserportionen haben können. Auch ein paar mehr Quellen hinzufügen, z. B. in ausgetrockneten Seen, Flüssen?
def initWaterResources():
water.set_water_source(345.3,476.7,4)
#water.set_water_source(258.3,264.6,2)
water.set_water_source(419.5,349.8,3)
import debug; debug.cheat("pickinfo")
4. Den gesamten Tierbestand etwas mehr aufpeppen, in New Safford kann man sich der Kühe als Nahrungsquelle noch bedienen, bei fast allen anderen funktioniert das nicht mehr, abgesehen von den Kamikazeminenkühen in Bowie Village
system.create_animal(id="KUH_1", type=ANIMAL_COW, party="ANIMALS", x = 256.33, y = 445.68)
objects.set_immortal_state("KUH_1", True)
system.create_animal(id="KUH_2", type=ANIMAL_COW, party="ANIMALS", x = 256.03, y = 432.96)
#objects.set_immortal_state("KUH_2", True)
objects.set_direction('KUH_2', 160)
system.create_animal(id="KUH_3", type=ANIMAL_COW, party="ANIMALS", x = 253.17, y = 439.44)
objects.set_immortal_state("KUH_3", True)
objects.set_direction('KUH_3', 90)
system.create_animal(id="KUH_4", type=ANIMAL_COW, party="ANIMALS", x = 256.69, y = 441.15)
objects.set_immortal_state("KUH_4", True)
system.create_animal(id="KUH_5", type=ANIMAL_COW, party="ANIMALS", x = 264.58, y = 437.24)
objects.set_immortal_state("KUH_5", True)
objects.set_direction('KUH_3', 180)
SPAWN_ANIMAL_ZONES = ['zone_1.zone_1'
,'zone_2.zone_2'
,'zone_3.zone_3'
,'zone_4.zone_4'
,'zone_5.zone_5'
,'zone_6.zone_6'
,'zone_7.zone_7'
#,'zone_8.zone_8' #Kein Tier
#,'zone_9.zone_9' #Kein Tier, data().SpawnAnimals anders benutzt!
#,'zone_10.zone_10' #Kein Tier
,'zzone_1.zzone_1'
,'zzone_2.zzone_2'
#,'zzone_3.zzone_3'
,'zzone_4.zzone_4'
#,'zzone_5.zzone_5'
#,'zzone_6.zzone_6'
#,'zzone_7.zzone_7'
#,'zzone_8.zzone_8'
,'zzone_9.zzone_9'
#,'zzone_10.zzone_10' # Bunker
#,'sqzone_1.sqzone_1' # kein Tier
,'sqzone_2.sqzone_2'
#,'sqzone_3.sqzone_3'
#,'sqzone_4.sqzone_4'
#,'sqzone_5.sqzone_5'
]
TIME_TO_RETURN_FROM_GRAVE = time("72:00:00")
def init_data():
.
.
.
### Fuer Spawn-Animals ###
data().Timer_SpawnTimeChecker = 666
data().Timervalue_SpawnTimeChecker = 10 * 60 * 1000.0 * hour_real_to_game
data().SpawnAnimalsSpawned = False
data().SpawnAnimals = ["WOLF_S_LEAD","WOLF_S_1","WOLF_S_2","WOLF_S_3"]
## Initialisiert die Tiere der Zone
def initAnimals():
system.create_animal(id="WOLF_S_LEAD", type=ANIMAL_WOLF, party="ANIMALS", x=291.5, y=572.5, direction=90)
system.create_animal(id="WOLF_S_1", type=ANIMAL_WOLF, party="ANIMALS", x=292.0, y=576.0, direction=60)
system.create_animal(id="WOLF_S_2", type=ANIMAL_WOLF, party="ANIMALS", x=288.5, y=573.0, direction=120)
system.create_animal(id="WOLF_S_3", type=ANIMAL_WOLF, party="ANIMALS", x=287.5, y=576.0, direction=120)
objects.set_attribute('WOLF_S_LEAD', 'level', 1)
objects.set_attribute('WOLF_S_1', 'level', 1)
objects.set_attribute('WOLF_S_2', 'level', 1)
objects.set_attribute('WOLF_S_3', 'level', 1)
## Spawnanimals sind feindlich und erstmal inactiv
for animal in data().SpawnAnimals:
objects.set_attribute(animal,"foes", ["UISPIELER"])
objects.set_active_state(animal,INACTIVE)
def on_timer(id):
.
.
.
if (id == data().Timer_SpawnTimeChecker):
clock = system.get_mission_time().get_day_time()
if (clock >= time("06:00:00") and clock < time("22:00:00")):
spawnanimals.spawnAnimals(INACTIVE)
else:
spawnanimals.spawnAnimals(ACTIVE)
system.notify_timer(data().Timer_SpawnTimeChecker,data().Timervalue_SpawnTimeChecker)
Diese 4 Wölfe erscheinen von 22 bis 6 Uhr westlich des Eingangs zum GNO-HQ. def on_timer(id):
if (id == data().Timer_SpawnTimeChecker):
clock = system.get_mission_time().get_day_time()
if (clock < time("16:00:00") or clock > time("23:00:00")):
spawnanimals.spawnAnimals(INACTIVE)
else:
spawnanimals.spawnAnimals(ACTIVE)
system.notify_timer(data().Timer_SpawnTimeChecker,data().Timervalue_SpawnTimeChecker)
Andere Schreibweise, Tiere sind von 16.00 bis 23.00 Uhr auf der Karte zu finden.
5. Die Bonuspunkte für das Erlegen von Gegnern war mir auch schleierhaft, für einen "Bergtiger", der ja eigentlich ein Puma (Berglöwe) ist gibt`s 3 Punkte für einen Bären 0,5.
# kill_types for id card stats & weapon accustomisation
kill_type_list = ["DESERT_MONKS", "RAT_SKULLS", "SEEKER","INDIANS","NOMADS", "SHADOWS", "GNO_SOLDIERS", "MISC_NPCS", "UNKNOWN_NPCS",
"WOLF", "BEAR", "WARG", "TIGER", "WILDDOG", "PEACEFUL_ANIMALS", "UNKNOWN_ANIMALS"]
kill_points = {
"DESERT_MONKS": 3,
"RAT_SKULLS": 3,
"SEEKER": 2,
"INDIANS": 2,
"NOMADS": 2,
"SHADOWS": 4,
"GNO_SOLDIERS": 5,
"MISC_NPCS": 1,
"UNKNOWN_NPCS": 3,
"WOLF": 0.2,
"BEAR": 0.5,
"WARG": 4,
"TIGER": 3,
"WILDDOG": 0.1,
"PEACEFUL_ANIMALS": 0,
"UNKNOWN_ANIMALS": 0.2,
}
def get_reputation_bonus_per_killpoints(killpoints):
"""Returns the reputation skill point bonus for the given amount of killpoints.
"""
if killpoints < 25: return 0
elif killpoints < 50: return 1
elif killpoints < 100: return 1
elif killpoints < 150: return 2
elif killpoints < 250: return 2
elif killpoints < 500: return 3
elif killpoints < 1000: return 4
else: return 5
def get_reputation_description(killpoints):
"""Returns the reputation description for the given amount of killpoints.
"""
if killpoints < 25: return globaltext.MISSION_IDCARD_REPUTATION_DESC_0
elif killpoints < 50: return globaltext.MISSION_IDCARD_REPUTATION_DESC_1
elif killpoints < 100: return globaltext.MISSION_IDCARD_REPUTATION_DESC_2
elif killpoints < 150: return globaltext.MISSION_IDCARD_REPUTATION_DESC_3
elif killpoints < 250: return globaltext.MISSION_IDCARD_REPUTATION_DESC_4
elif killpoints < 500: return globaltext.MISSION_IDCARD_REPUTATION_DESC_5
elif killpoints < 1000: return globaltext.MISSION_IDCARD_REPUTATION_DESC_6
else: return globaltext.MISSION_IDCARD_REPUTATION_DESC_7
"""Returns skill bonus for being accustomed to this weapon/weapon type.
Parameters:
id_kills - Number of kills with this weapon.
type_kills - Number of kills with this weapon_type.
"""
if id_kills <= 9: id_bonus = 0 # Sehr ungewohnte Waffe
elif id_kills <= 29: id_bonus = 5 # Ungewohnte Waffe
elif id_kills <= 59: id_bonus = 10 # Vertraute Waffe
elif id_kills <= 99: id_bonus = 15 # Sehr vertraute Waffe
else: id_bonus = 20 # Lieblingswaffe
if type_kills <= 9: type_bonus = 0
elif type_kills <= 29: type_bonus = 0
elif type_kills <= 59: type_bonus = 5
elif type_kills <= 99: type_bonus = 10
else: type_bonus = 15
return max(id_bonus, type_bonus)
10. Das Hinzufügen von neuen NPC mit Tagesabläufen eventuell, an Missionen will ich mal noch gar nicht denken, da das für mich noch weit hinter dem Horizont liegt.
"DRILL_INSTRUCTOR" : ( # der Ausbilder
##################
{ #TA1: Tutorial nicht genommen:
S_CONDITION : lambda: data().training_activated and not data().training_done,
"00:00:00" : { #
S_START : [],
S_LOOP : [turn_to_object("ALTER_EGO")]}, .
},{ #TA2: nach dem Tutorial:
"00:30:00" : { # Schlafen
S_START : [goto(460.25, 346.90),
enter_building('BUILDING_1883'),
lay_down_to_sleep('THE FALL_BUILDING_3965')],
S_LOOP : [sleep()]},
"04:30:00" : { # Warten
S_START : [leave_building('BUILDING_1883'),
goto(320.8,326.6),
turn_to_direction(global_defines.DIR_EAST)],
S_LOOP : []},
"21:00:00" : { # Trainigsparcours laufen
S_START : [],
S_LOOP : [patrol(((297.0,353.0),(309.0,343.0),(309.0,293.0),(292.0,293.0)))]},
"00:00:00" : { # Warten
S_START : [goto(320.8,326.6),
turn_to_direction(global_defines.DIR_EAST)],
S_LOOP : []}
}),
"DRILL_INSTRUCTOR" : ( # der Ausbilder
##################
{ #TA1: Tutorial nicht genommen:
S_CONDITION : lambda: data().training_activated and not data().training_done,
"00:00:00" : { #
S_START : [],
S_LOOP : [turn_to_object("ALTER_EGO")]},
},{ #TA2: nach dem Tutorial:
"00:30:00" : { # Schlafen
S_START : [goto(460.25, 346.90),
enter_building('BUILDING_1883'),
lay_down_to_sleep('THE FALL_BUILDING_3965')],
S_LOOP : [sleep()]},
"04:30:00" : { # Essen und Trinken
S_START : [leave_building('BUILDING_1883'),
goto_dummy("BUILDING_867","dmyp_001"), sit_down_on_bench()],
S_LOOP : sit_eat_drink_on_bench},
"06:30:00" : { # Warten
S_START : [goto(320.8,326.6),
turn_to_direction(global_defines.DIR_EAST)],
S_LOOP : []},
"21:00:00" : { # Trainigsparcours laufen
S_START : [],
S_LOOP : [patrol(((297.0,353.0),(309.0,343.0),(309.0,293.0),(292.0,293.0)))]},
"00:00:00" : { # Warten
S_START : [goto(320.8,326.6),
turn_to_direction(global_defines.DIR_EAST)],
S_LOOP : []}
}),
6. Ein wenig mehr Benzin im Spiel wäre nett und Bienenwachs in den Stöcken.
7. Da und dort könnte man auch noch ein wenig Items in die Kisten stopfen oder die Arztpraxis mit Medikamenten ausstatten, wie z. B. die verlassene medizinische Station in Copper Hill.
def initItems():
if not hasattr(data(),"patch_patrick"):
data().patch_patrick = 1
# Fass am Eingang des Dorfes
objects.create_item_in_inventory( object="BUILDING_1716",equipment=["SET_WALTER_PPK"])
# Kieshaufen
objects.create_item_in_inventory( object="BUILDING_1739",equipment=["SET_SMALL_SAND_SHOVEL"])
# Auf dem Sandspielplatz
system.create_object(equipmenttype="SET_AMMOPACK_7_65_MM",x=518,y=381,direction=47)
.
.
.
## TA-NPC Items (Items für NPCs die auch sterben können)
objects.create_item_in_inventory("KATHARINE",["SET_WIRE_WHISK","SET_RAT_MEAT"])
.
.
.
# Händler
objects.create_item_in_inventory("SEBASTIAN",
[
"SET_UZI",#Uzi
"SET_COLT_ANACONDA",#Colt Anaconda
"SET_SPECIAL_38",#38er Special
"SET_BERETTA_92F",#Beretta
# "SET_LANDMINE",#Landmine
"SET_HEGRENADE",#HE granate
"SET_MOLOTOV_COCKTAIL",#Molotov
.
.
.
"SET_PAN",
"SET_SPIT"]
)
# Bienenstöcke Z1
objects.create_item_in_inventory( 'BUILDING_10467', equipment=[ 'SET_BEESWAX', 'SET_BEESWAX' ] )
objects.create_item_in_inventory( 'BUILDING_10464', equipment=[ 'SET_BEESWAX', 'SET_BEESWAX' ] )
objects.create_item_in_inventory( 'BUILDING_10463', equipment=[ 'SET_BEESWAX' ] )
# Items in Kisten
objects.create_item_in_inventory( 'BUILDING_10251', equipment=[ 'SET_DUCT_TAPE', 'SET_GLOCK_21', 'SET_AMMOPACK_44' ] )
objects.create_item_in_inventory( 'BUILDING_10252', equipment=[ 'SET_LEATHER_CLOTHES', 'SET_WATER_SKIN', 'SET_DRUGS_PILLS_01','SET_STEEL_PLATES' ] )
objects.create_item_in_inventory( 'BUILDING_10281', equipment=[ 'SET_THROWING_KNIFE', 'SET_AMMOPACK_44', 'SET_LEATHER_GLOVES' ] )
objects.create_item_in_inventory( 'BUILDING_102
.
.
.
objects.set_attribute(object='SET_BUGGY', attribute="current_fuelquantity", value=100.0)
objects.set_attribute(object='SET_BUGGY', attribute="max_fuelquantity", value=100.0)
objects.set_attribute(object='SET_BUGGY', attribute="fuel_consumption_factor", value=0.00125)
if objects.has_attribute( driver, "driving"):
skill = objects.get_attribute( driver, "driving")
if skill > 54:
can_drive = True
fuel_consumption_factor_obj = fuel_consumption_factor_type
if skill > 69:
speedfactor = 0.8
fuel_consumption_factor_obj = fuel_consumption_factor_type * 0.9
if skill > 84:
speedfactor = 0.9
fuel_consumption_factor_obj = fuel_consumption_factor_type * 0.8
if skill > 94:
speedfactor = 1.0
fuel_consumption_factor_obj = fuel_consumption_factor_type * 0.7
if skill > 104:
speedfactor = 1.0
fuel_consumption_factor_obj = fuel_consumption_factor_type * 0.6
if skill > 114:
speedfactor = 1.0
fuel_consumption_factor_obj = fuel_consumption_factor_type * 0.55
if skill > 124:
speedfactor = 1.0
fuel_consumption_factor_obj = fuel_consumption_factor_type * 0.5
if skill > 134:
speedfactor = 1.0
fuel_consumption_factor_obj = fuel_consumption_factor_type * 0.47
if skill > 149:
speedfactor = 1.0
fuel_consumption_factor_obj = fuel_consumption_factor_type * 0.45
if has_talent( driver, "driving", "economic_driving"):
fuel_consumption_factor_obj = fuel_consumption_factor_obj * 0.8
objects.set_attribute( vehicle_id, "speed_factor", speedfactor)
objects.set_attribute( vehicle_id, "fuel_consumption_factor", fuel_consumption_factor_obj)
Test
8. Das Platzieren eines Autos an eine bestimmte Stelle wäre auch nicht schlecht oder ein Seekercamp. Warum sollen die Typen nur immer die Rastenden angreifen, einfach mal den Spieß umdrehen.
def on_map_loaded():
init_data()
initParties()
npc.initNPCS()
initItems()
initHerbs()
initExitZones()
initFX()
initMinimapMarkers()
## Tiere initialisieren
npc.initAnimals()
## Timer für die Tierspawns
on_timer(data().Timer_SpawnTimeChecker)
#system.notify_timer(data().Timer_SpawnTimeChecker,data().Timervalue_SpawnTimeChecker)
system.create_object('SET_HUMVEE', 375.58, 580.64, id = 'HUMVEE_Z3', direction = 45)
objects.set_attribute('HUMVEE_Z3', 'accepted_drivers', ['UISPIELER'])
objects.set_position(object = "LUCAS",x = 474.0,y = 368.04, grid = "BUILDING_2141_INTERIOR_GRID")
objects.turn_to_direction(object = "LUCAS",direction = DIR_SOUTH)
## Questbook (eingefügt von Roger)
initQuestbook()
init_character_states()
9. Die Bereicherung der Karten mit einzelnen Objekten wäre sicher auch ganz nett.
def initHerbs():
# Grab des Vaters
system.create_object(equipmenttype="SET_ALOE_VERA", x=565.07, y=356.50)
# Berg im SW
system.create_object(equipmenttype="SET_WOOD_GARLIC", x=210.75, y=554.40)
# Berg bei Grab
system.create_object(equipmenttype="SET_ALOE_VERA", x=567.03, y=263.60)
# Kuhle im NO (in Basis)
system.create_object(equipmenttype="SET_ALOE_VERA", x=516.84, y=310.27)
# Kuhle im NW (in Basis)
system.create_object(equipmenttype="SET_ALOE_VERA", x=339.73, y=256.12)
# neben Gaestehaus (bei Baeumen)
system.create_object(equipmenttype="SET_ALOE_VERA", x=295.00, y=507.44)
def initFX():
.
.
.
# brennende Tonne in New Stafford
fxBrennendeTonne("BUILDING_338")
# brennende Tonne Dustville
fxBrennendeTonne('BUILDING_245')
# Lagerfeuer in New Stafford
fxLagerFeuer("BUILDING_3867")
# Lagerfeuer im Ratskull Camp
fxLagerFeuer("BUILDING_3379")
.
.
add_global_text(id='SET_MOLOTOV_COCKTAIL_NAME', text='Benzinbombe mit Lunte')
add_global_text(id='SET_MOLOTOV_COCKTAIL_HINT', text='Benzinbombe mit Lunte')
add_global_text(id='SET_MOLOTOV_COCKTAIL_NAME', text='Molotov Cocktail')
add_global_text(id='SET_MOLOTOV_COCKTAIL_HINT', text='Molotov Cocktail')
if id=="poisoning":
system.notify_global_timer("poisoning", 1000*120)
if not( hasattr(data("rest"), "resting") and data("rest").resting) :
for character_id in system.get_pcs(include_unconscious = True):
if(objects.has_attribute(character_id,"poison_ticks")):
if objects.get_attribute(character_id,"poison_ticks") > 0: #pc is poisoned
objects.set_attribute(character_id,"poison_ticks",objects.get_attribute(character_id,"poison_ticks")-2)
objects.damage( character_id, 2 )
exp_table = [
0, #1
200, #2
500, #3
800, #4
1400, #5
2200, #6
3500, #7
6000, #8
7700, #9
10000, #10
13000, #11
17000, #12
21000, #13
25000, #14
30000, #15
35000, #16
40000, #17
45000, #18
50000, #19
55000, #20
61000, #21
68000, #22
70000, #23
79000, #24
89000, #25
99000, #26
112000, #27
128000, #28
148000, #29
172000, #30
200000, #31
232000, #32
268000, #33
308000, #34
352000, #35
400000, #36
452000, #37
508000, #38
568000, #39
632000, #40
]
# base exp exp per level
kill_exp = {
"WOLF": (30, 15),
"ANTELOPE": (10, 5),
"BEAR": (40, 20),
"COW": ( 5, 3),
"DEER": (20, 10),
"HORSE": (15, 8),
"TIGER": (50, 25),
"WILDDOG": (30, 15),
"BISON": (15, 8),
"PIG": ( 5, 3),
"DONKEY": ( 5, 3),
"WARG": (60, 30),
"LIZARD_SOMA": (40, 20),
"RAT_SKULLS": (20, 10),
"DESERT_MONKS": (30, 15),
"SHADOWS": (30, 20),
"INDIANS": (20, 10),
"NOMADS": (20, 10),
"GNO_SOLDIERS": (40, 15),
"VILLAGE_PEOPLE": (20, 10),
"SEEKER": (20, 10),
}
def get_hint_text( ids ):
"""Generates the hint text (i.e., mouse over text/tooltip) for this object.
Parameters:
id - Id of the object.
"""
drugs= {
'SET_DRUGS_PILLS_01': [[globaltext.MISSION_ATTRIBUTE_NAME_STRENGTH,'+2']],
'SET_DRUGS_PILLS_02': [[globaltext.MISSION_ATTRIBUTE_NAME_STRENGTH,'+2'],
[globaltext.MISSION_CREATECHARACTER_HEALTH,'+20%']],
'SET_DRUGS_PILLS_03': [[globaltext.MISSION_CREATECHARACTER_HEALTH,'+25%']],
'SET_DRUGS_PILLS_04': [[globaltext.MISSION_ATTRIBUTE_NAME_CHARISMA,'+2']],
'SET_DRUGS_PILLS_05': [[globaltext.MISSION_ATTRIBUTE_NAME_CHARISMA,'+3']],
'SET_DRUGS_PILLS_06': [[globaltext.MISSION_ATTRIBUTE_NAME_STRENGTH,'+2'],
[globaltext.MISSION_ATTRIBUTE_NAME_AGILITY,'+2'],
[globaltext.MISSION_ATTRIBUTE_NAME_DEXTERITY,'+2'],
[globaltext.MISSION_ATTRIBUTE_NAME_CONSTITUTION,'-4']],
'SET_DRUGS_VIALS_01': [[globaltext.MISSION_ATTRIBUTE_NAME_AGILITY,'+2'],
[globaltext.MISSION_ATTRIBUTE_NAME_DEXTERITY,'+2']],
'SET_DRUGS_VIALS_02': [[globaltext.MISSION_ATTRIBUTE_NAME_STRENGTH,'+3']],
'SET_DRUGS_VIALS_03': [[globaltext.MISSION_ATTRIBUTE_NAME_AGILITY,'+3']],
'SET_DRUGS_SYRINGE': [[globaltext.MISSION_CREATECHARACTER_HEALTH,'+30%']]
}
create_item_type(typeid='SET_DRUGS_PILLS_02')
objects.set_attribute(object='SET_DRUGS_PILLS_02', attribute="name", value=globaltext.SET_DRUGS_PILLS_02_NAME)
objects.set_attribute(object='SET_DRUGS_PILLS_02', attribute="hint", value=globaltext.SET_DRUGS_PILLS_02_HINT)
objects.set_attribute(object='SET_DRUGS_PILLS_02', attribute="resourceui", value='RES_ITEM65X32_MISCITEM_DRUGS_PILLS_02')
objects.set_attribute(object='SET_DRUGS_PILLS_02', attribute="resource3d", value='RES3D_DRUGS_PILLS_02')
objects.set_attribute(object='SET_DRUGS_PILLS_02', attribute="value", value=32.0)
objects.set_attribute(object='SET_DRUGS_PILLS_02', attribute="weight", value=0.1)
objects.set_attribute(object='SET_DRUGS_PILLS_02', attribute="stacking", value=10)
objects.set_attribute(object='SET_DRUGS_PILLS_02', attribute="drug_effects", value={
"strength": 2,
"hitpoints": 1.20,
"effect_time": "24:00:00",
})
# Fine, die Testhändler
system.create_character(
id="FINE",
gender="female",
party="DORFBEWOHNER",
x=370,
y=575,
name=globaltext.NAME_FINE,
direction=300,
resourceui="sue_z7.png")
objects.set_attribute("FINE", "faction", "VILLAGE_PEOPLE")
objects.set_attribute("FINE", "level", 1 )
objects.set_attributes("FINE",
model="low",
gender="female",
skin="black",
clothes="sl_003",
face="edeltraud")
character.update_appearance("FINE")
character.scale("FINE",1.70)
objects.set_attribute("FINE", "trader", True)
objects.set_attribute("FINE", "trader_type", "all")
objects.set_attribute("FINE", "voice_id", "trader_03")
objects.create_item_in_inventory("FINE",
[ "SET_M_16",# M4A1
"SET_AMMOPACK_44"]# 1 Packen .44er Munition
+12*["SET_AMMOPACK_7_62NATO_MM"]# 12 Packen 7,62x51 nato Munition
+8*["SET_AMMOPACK_7_62NATO_MM_DUPLEX"]# 8 Packen 7,62x51 nato Duplex
+9*["SET_AMMOPACK_5_45_MM"]# 9 Packen 5,45mm
+7*["SET_AMMOPACK_5_7_MM"]# 7 Packen 5,7mm
+8*["SET_AMMOPACK_5_7_MM_SUBSONIC"]# 8 Packen 5,7mm Subsonicmunition
)
if not hasattr(data(), "patch_patrick"):
data().patch_patrick = 1
# Zone 1 - Neue TA NPCs
add_global_text(id="NAME_SEAMUS", text="Seamus")
.
.
.
add_global_text(id="NAME_NICK", text="Nick")
add_global_text(id="NAME_FINE", text="Fine")
# game_init
system.notify_global_timer("my_system_event_id", my_timer_value_in_milliseconds)
# system_event.py
if id == 'my_system_event_id':
# new system.notify_global_timer() call to loop event
re_equip_all_traders()
do_something_else()
...
def on_update_trader( character_id ):
"""Called when the trading panel opens.
Parameters:
character_id - Id of the trader.
"""
if objects.has_attribute( character_id, "last_trade" ):
last_trade_time = objects.get_attribute(character_id, "last_trade")
act_time = system.get_mission_time()
elapsed_time = act_time - last_trade_time
if elapsed_time >= timerepr.time("60:00:00"):
if objects.has_attribute( character_id, "backup_inventory" ):
act_inventory = objects.get_inventory_list( character_id )
backup_inventory = objects.get_attribute( character_id, "backup_inventory")
missing_objects = backup_inventory[:]
for _id in act_inventory:
if _id in missing_objects:
missing_objects.remove(_id)
if len(missing_objects):
all_items_list = system.get_item_list()
all_items_list = filter(lambda act_item:
(objects.has_attribute(act_item, "item_type") or
objects.has_attribute(act_item, "le_recovery") or
objects.has_attribute(act_item, "armor")), all_items_list)
all_items_list = filter(lambda act_item:
((objects.has_attribute(act_item, "not_tradable") and
not objects.get_attribute(act_item, "not_tradable")) or
not objects.has_attribute(act_item, "not_tradable")), all_items_list)
for item in missing_objects:
_list = helper_get_equivalent_items_list( all_items_list, item )
if len(_list):
new_item = random.choice(_list)
objects.create_item_in_inventory(object=character_id,
equipment=new_item)
backup_inventory.remove(item)
backup_inventory.append(new_item)
else:
inventory_list = objects.get_inventory_list( character_id )
objects.set_attribute( character_id, "backup_inventory", inventory_list)
for item in missing_objects:
_list = all_items_list[:]
if _list:
new_item = random.choice(_list)
objects.create_item_in_inventory(object=character_id,
equipment=new_item)
backup_inventory.remove(item)
backup_inventory.append(new_item)
if len(missing_objects):
all_items_list = system.get_item_list()
all_items_list = filter(lambda act_item:
(objects.has_attribute(act_item, "item_type") or
objects.has_attribute(act_item, "le_recovery") or
objects.has_attribute(act_item, "armor") or objects.has_attribute(act_item, "fuel")), all_items_list)
for item in missing_objects:
_list = backup_inventory[:]
if _list:
new_item = random.choice(_list)
objects.create_item_in_inventory(object=character_id,
equipment=new_item)
backup_inventory.remove(item)
backup_inventory.append(new_item)
In dem Zusammenhang wäre interessant ob die Händler ein "unendlich großes" Inventory haben (eigentlich ist ja alles in einer Scrollarea drin) oder ob es ein hartes Limit gibt. Wenn es so eines gibt, dann sollte das System "eins geht raus, ein anderes kommt rein" unbedingt beibehalten, egal woher die neuen Items kommen.
all_items_list = system.get_item_list() - wird hier nicht definiert, das all_items_list der system.get_item_list() gleichgesetzt ist?
Habe es gerade mit all_items_list[:] getestet - es funktioniert, es werden sämtlich verfügbaren Items dem Inventar zugefügt, auch die Pseudomunition (z.B. des Messers). Ist ja so nicht gewollt.
all_items_list = filter(lambda act_item:
(objects.has_attribute(act_item, "item_type") or
objects.has_attribute(act_item, "le_recovery") or
objects.has_attribute(act_item, "armor") or objects.has_attribute(act_item, "fuel")), all_items_list)
all_items_list = filter(lambda act_item: objects.has_attribute(act_item, "not_tradable"), all_items_list)
Wie kann ich die Liste, aus der zufällig ein fehlendes Item generiert wird, der backup_inventory gleichsetzten? Dann werden nur Items aus dem schon von Anfang an vorhandenen Inventar generiert.
[..]
# (remove und append sind Listenoperation)
# lege neues item im inventory an
objects.create_item_in_inventory(object=character_id, equipment=new_item)
# schmeiß altes item aus backup_inventory raus
backup_inventory.remove(item)
# hänge neues item hinten ans backup_inventory ran
backup_inventory.append(new_item)
_list = helper_get_equivalent_items_list( backup_inventory, item)
Ich weiß nicht wie sinnvoll das ist - wofür das backup_inventory genau da ist hab ich noch nicht verstanden. Weil: Wenn dem Händlermenü neue Items hinzugefügt werden, dann wird das auch dem Backupmenü hinzugefügt:
Wegen GUI hab ich den Thread von Lexx wiedergefunden wo wir das schon mal durchgequatscht haben Ist evtl. auch für dich interessant -> http://www.falloutnow.de/forum/index.php?topic=3274.0
(was wir evtl. mal archivieren sollten - ich würde mich nicht wundern wenn die Seite irgendwann vom Netz geht).
- na, wenn das dann mal nicht so auch war, schade das die Silver Style Leute da kein Bock mehr auf Forum habenOder man fügt einen NPC bei der GNO ein der einem das Crafting "beibringt" (= Die Rezept-Quest gibt) ;-)
Ich teste mal die Version _list = helper_get_equivalent_items_list( backup_inventory, item)
def helper_get_equivalent_items_list(all_items_list, item ):
"""Helper function for on_update_trader.
"""
value = objects.get_attribute( item, "value" )
items_list = all_items_list[:]
item_type = None
if objects.has_attribute(item, "item_type"):
item_type = objects.get_attribute( item, "item_type" )
if item_type!=None:
result = filter(lambda act_item:
(objects.has_attribute(act_item, "item_type") and
objects.get_attribute(act_item, "item_type")==item_type), items_list)
if objects.has_attribute(item, "le_recovery"):
result = filter(lambda act_item:
objects.has_attribute(act_item, "le_recovery"), items_list)
if objects.has_attribute(item, "fuel"):
result = filter(lambda act_item:
objects.has_attribute(act_item, "fuel"), items_list)
if objects.has_attribute(item, "armor"):
armor = objects.get_attribute(item, "armor")
result = filter(lambda act_item:
(objects.has_attribute(act_item, "armor") and
objects.get_attribute(act_item, "armor")>(armor*0.8) and
objects.get_attribute(act_item, "armor")<(armor*1.2)), items_list)
result = filter(lambda act_item:
(objects.has_attribute(act_item, "value") and
(objects.get_attribute(act_item, "value")>(value*0.8) and
objects.get_attribute(act_item, "value")<(value*1.2))), items_list)
return result
Da dieses Script ja für alle Händler gilt, kann man ja auch nicht extra einen Tankwart, welcher nur Benzin generiert, erschaffen.
Ich hatte ja bei Miles (versteckter Waffenhändler in Casa Verde) die Hoffnung eine Spezialisierung nur auf Waffen im Skript zu entdecken - dies war sicher auch mal der Gedanke. Die Spezialisierung hat sich im Spiel nicht feststellen lassen und in den Skripten habe ich auch nichts gefunden. Irgendwann kann man alles bei ihm tauschen (bei Morrowind waren die Items auch gut gefiltert und so konnte man nicht überall alles kaufen und verkaufen).
def on_update_trader( character_id ):
""" Called when the trading panel opens.
Parameters:
character_id - Id of the trader.
"""
Eine sehr unflexible Idee wäre es, das sich einfach jedes Item aus dem Inventar des Händlers nach einer gewissen Zeit wieder generiert ohne Zufall halt - alles wäre sehr vorhersehbar und man bekäme mit Sicherheit Benzin, nicht erst nach Tauschmarathons und Lotterie.
Eine weitere Idee ist, die Auswahl der zufälligen Objekte nicht nach dem Vergleich der fehlenden Items zu generieren, sondern die Inventarliste des Händlers nach einem Tag z.B. komplett neu zufällig zusammen zu setzten. Nachteile wären, das der Händler nicht mehr als Zwischenspeicher dienen kann, denn man kann nicht darauf vertrauen, das er einen Tag später immer noch das verkaufte Objekt hat.
Eine andere Idee wäre die Items zu wichten, damit sie gegenüber anderen einfach häufiger ausgewählt werden. Dazu müsste auch zu jedem Item ein neues Merkmal hinzugefügt werden und dieses im Skript verarbeitet werden. Derzeit sehe ich mich aber nicht im Stande, dies mit meiner Skripterfahrung umzusetzten.
def refill_generic_trader():
# ... code für den generic trader ...
def refill_weapon_trader():
# .... code für den weapon traider ...
if character_id == 'ngo-händler':
helpermethod = refill_generic_trader
elif character_id == 'Miles':
helpermethod = refill_weapon_trader
helpermethod()
Phu, :wtf habe gerade das Handelsskript "zerschossen", GsD ein Backup gemacht. Erstmal danke für die Tipps und Korrekturen #thumbsup. Das hilft für das Verständnis schon ungemein, aber ich merke auch, dass die Umarbeitung des Handelskripts etwas anderes ist als nur Werte zu verändern oder schon geschriebene Skripte einzufügen. Mache erstmal eine Skriptpause und wende mich der Biosphäre zu (bin ja nun schon auf den Showdown gespannt ;))
Ganz schön heftige Auseinandersetzung in der Sphäre *motherfucker. War jemand schon mal in dem Präsidentenhaus im GNO-HQ? Ich dachte da könnte man dann irgendwann mal rein, da ja auch ein Safe darin steht.
Jep, da gibts an der nord-östlichen Ecke eine "unsichtbare" Lücke im Zaun - da kannst du unten drunter durchrobben (!). Dürfte das 3te Zaunsegment sein wenn ich mich richtig erinnere.
Sodele, ich hab die on_update_trader()-Funktion mal etwas durchdokumentiert und hier und da etwas geändert.
if objects.has_attribute( character_id, "backup_inventory" ):
act_inventory = objects.get_inventory_list( character_id )
backup_inventory = objects.get_attribute( character_id, "backup_inventory")
missing_objects = backup_inventory[:]
for _id in act_inventory:
if _id in missing_objects:
missing_objects.remove(_id)
def helper_get_equivalent_items_list(all_items_list, item ):
"""Helper function for on_update_trader.
"""
value = objects.get_attribute( item, "value" )
items_list = all_items_list[:]
item_type = None
if objects.has_attribute(item, "item_type"):
item_type = objects.get_attribute( item, "item_type" )
if item_type!=None:
result = filter(lambda act_item:
(objects.has_attribute(act_item, "item_type") and
objects.get_attribute(act_item, "item_type")==item_type), items_list)
if objects.has_attribute(item, "le_recovery"):
result = filter(lambda act_item:
objects.has_attribute(act_item, "le_recovery"), items_list)
if objects.has_attribute(item, "armor"):
armor = objects.get_attribute(item, "armor")
result = filter(lambda act_item:
(objects.has_attribute(act_item, "armor") and
objects.get_attribute(act_item, "armor")>(armor*0.8) and
objects.get_attribute(act_item, "armor")<(armor*1.2)), items_list)
result = filter(lambda act_item:
(objects.has_attribute(act_item, "value") and
(objects.get_attribute(act_item, "value")>(value*0.8) and
objects.get_attribute(act_item, "value")<(value*1.2))), items_list)
return result
Vom Orginalskript werde ich aus diesem Teil nicht schlau :Code: [Auswählen]if objects.has_attribute( character_id, "backup_inventory" ):
act_inventory = objects.get_inventory_list( character_id )
backup_inventory = objects.get_attribute( character_id, "backup_inventory")
missing_objects = backup_inventory[:]
for _id in act_inventory:
if _id in missing_objects:
missing_objects.remove(_id)
Grundidee war einen Tankwart zu erschaffen, dieser sollte einfach nur Benzin haben und verkaufen.
Nach einer gewissen Zeit hat er dann halt wieder welches, also es wird einfach ersetzt.
Die Händler_ID wäre der Name, z. B. "Fritz" und das bevorzugte Item einfach nur GAS_CANISTER.
Den Zufallsgenerator brauch man dann nicht, einfach nur das Respawnen des Benzins.
Klar hat er dann irgendwann im Inventar auch andere Items, da man ja das Benzin eintauschen muss. Aber nur das Benzin und die Flasche Benzin (BOTTLE_OF_GAS) haben das Attribut "fuel".
Einen kleinen Verdacht habe ich aber jetzt - und zwar warum Handelsreisen irgendwann keine neuen Items mehr generieren.
Das müsste man zwar nochmal in Ruhe durchchecken, aber irgendwann ist das backup_inventory leer - und ab dem Zeitpunkt wird nichts mehr nachgefüllt.
Das sollte passieren wenn der Check (Originalscript) if len(missing_objects) False ergibt - nämlich missing_objects nur noch eine leere Liste ist.
# Fine, die Testhändler
system.create_character(
id="FINE",
gender="female",
party="DORFBEWOHNER",
x=370,
y=585,
name=globaltext.NAME_FINE,
direction=180,
resourceui="sue_z7.png")
objects.set_attribute("FINE", "faction", "VILLAGE_PEOPLE")
objects.set_attribute("FINE", "level", 1 )
objects.set_attributes("FINE",
model="low",
gender="female",
skin="black",
clothes="sl_003",
face="edeltraud")
character.update_appearance("FINE")
character.scale("FINE",1.70)
objects.set_attribute("FINE", "trader", True)
objects.set_attribute("FINE", "trader_type", "all")
objects.set_attribute("FINE", "voice_id", "trader_02")
objects.create_item_in_inventory("FINE",
7*["SET_GAS_CANISTER"]
+6*["SET_BOTTLE_OF_GAS"]
)
if not hasattr(data(), "patch_patrick"):
data().patch_patrick = 1
def restock_fuel_traders(character_id):
""" check if the given trader is a fuel trader
and restock his inventory (if necessary)
FIXME:
- move _FUEL_TRADERS constant to global scope
@type character_id: string
@param character_id: Id of the trader.
"""
_FUEL_TRADERS = ["FINE",]
_MIN_FUEL = 13
result = False
if character_id in _FUEL_TRADERS:
result = True
act_inventory = objects.get_inventory_list( character_id )
# get all fuel items
fuel_list = filter(lambda item: objects.has_attribute(item, "fuel"), act_inventory)
# restock amount of fuel if necessary
ifuel = len(fuel_list)
if ifuel < _MIN_FUEL:
amount = _MIN_FUEL - ifuel
objects.create_item_in_inventory(
character_id,
amount*["SET_GAS_CANISTER"]
)
objects.create_item_in_inventory(
character_id,
amount*["SET_BOTTLE_OF_GAS"]
)
return result
Nach längeren Bedenken habe ich gestern doch einmal einen Brief an Silver Style geschrieben. Darin habe ich gefragt, ob es vielleicht möglich wäre, das schon vorhandene Material des leider eingestellten Addons "Mutant City" auf der offiziellen Seite zum Download frei zu stellen. Auf eine Antwort bin ich sehr gespannt und warte es einfach mal ab :).
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.
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"])
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']]})
"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."assemble_function" : "assemble_explosives",
Die Herstellung gelingt nur, wenn man über das Talent "Sprengstoffe herstellen" verfügt.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"])
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=[])
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']]})
add_global_text(id='SET_SHORT_IRON_ROD_NAME', text='kurze Eisenstange')
add_global_text(id='SET_SHORT_IRON_ROD_HINT', text='kurze Eisenstange')
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']]})
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']]})
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']]})
add_global_text(id='SET_HYENA_PELT_NAME', text='Gegerbtes Leder')
add_global_text(id='SET_HYENA_PELT_HINT', text='Gegerbtes Leder')
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']]})
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']]})
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')
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']]})
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']]})
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']]})
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']]})
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']]})
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']]})
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
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
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']]})
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']]})
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)
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.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'])
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)
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
"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 : []
}
}),
Die Pilze sehen gut aus, aber ich wage zu bezweifeln, dass in dem Teil der Welt Champignons wachsen. :p
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.