1
OSP ресурсы: модели, текстуры, скрипты / Re: Делимся скриптами для МС
« : 20 Ноября, 2011, 20:40 »
В каком смысле - пугало? Есть решение принципиально короче?
Добавлено: 20 Ноября, 2011, 22:41
Рад, что кому-то пригодилось.
В глубокой задумчивости.
То, что достигнуто в борьбе с "бескончными патронами" в сундуке. Одна стрела или болт всё равно болтается (иначе сам колчан норовит сгинуть).
PS: испытывалось, опять-же, не на нативской модульке, а на основе "Дипломатии", включавшей в себя "автолут". Если её нет - то правок больше.
Добавлено: 20 Ноября, 2011, 22:41
Рад, что кому-то пригодилось.
В глубокой задумчивости.
То, что достигнуто в борьбе с "бескончными патронами" в сундуке. Одна стрела или болт всё равно болтается (иначе сам колчан норовит сгинуть).
Файл scripts.py.
ДО СКРИПТОВ.
Ну, и сами скрипты
(call_script, "script_restore_ammo"),
У меня данная строка включена в скрипт "count_mission_casualties_from_agents", но это непринципиально.
mission_temlates.py,
внутрь "lead_charge" - триггер.
Триггер. module_simple_triggers.py
Константы. module_constants.py
ДО СКРИПТОВ.
Цитата
def set_item_max_ammo():
item_max_ammo = []
for i_item in xrange(len(items)):
item_max_ammo.append((item_set_slot, i_item, slot_item_max_ammo, get_max_ammo(items[i_item][6])))
return item_max_ammo[:]
Ну, и сами скрипты
Цитата
## script_consume_ammo
("cf_consume_ammo",
[
(agent_get_ammo, ":cur_ammo","$fplayer_agent_no",1),
(agent_get_wielded_item,":wielded_item","$fplayer_agent_no"),
(gt, ":wielded_item", itm_no_item),
(item_get_type, ":type", ":wielded_item"),
(try_begin),
(eq, ":type", itp_type_bow),
(assign,":arrows",0),
(try_for_range, ":troop_item_slot", ek_item_0, ek_head), # heroes have only 4 possible weapons (equipped)
(troop_get_inventory_slot, ":item", "trp_player", ":troop_item_slot"),
(gt, ":item", itm_no_item),
(item_get_type, ":weapon_type", ":item"),
(eq, ":weapon_type", itp_type_arrows),
(troop_inventory_slot_get_item_amount, ":cur_arrows","trp_player",":troop_item_slot"),
(val_add,":arrows",":cur_arrows"),
(try_end),
(gt,":arrows",":cur_ammo"),
(store_sub,":used_ammo", ":arrows",":cur_ammo"),
(try_for_range, ":troop_item_slot", ek_item_0, ek_head), # heroes have only 4 possible weapons (equipped)
(troop_get_inventory_slot, ":item", "trp_player", ":troop_item_slot"),
(gt, ":item", itm_no_item),
(item_get_type, ":weapon_type", ":item"),
(eq, ":weapon_type", itp_type_arrows),
(troop_inventory_slot_get_item_amount, ":cur_arrows","trp_player",":troop_item_slot"),
(try_begin),
(gt,":cur_arrows",":used_ammo"),
(store_sub,":new_arrows",":cur_arrows",":used_ammo"),
(assign,":used_ammo",0),
(troop_inventory_slot_set_item_amount, "trp_player", ":troop_item_slot", ":new_arrows"),
(else_try),
(val_sub,":used_ammo",":cur_arrows"),
(troop_inventory_slot_set_item_amount, "trp_player", ":troop_item_slot", 1),
(try_end),
(try_end),
(try_end),
(try_begin),
(eq, ":type", itp_type_crossbow),
(assign,":arrows",0),
(try_for_range, ":troop_item_slot", ek_item_0, ek_head), # heroes have only 4 possible weapons (equipped)
(troop_get_inventory_slot, ":item", "trp_player", ":troop_item_slot"),
(gt, ":item", itm_no_item),
(item_get_type, ":weapon_type", ":item"),
(eq, ":weapon_type", itp_type_bolts),
(troop_inventory_slot_get_item_amount, ":cur_arrows","trp_player",":troop_item_slot"),
(val_add,":arrows",":cur_arrows"),
(try_end),
(gt,":arrows",":cur_ammo"),
(store_sub,":used_ammo", ":arrows",":cur_ammo"),
(try_for_range, ":troop_item_slot", ek_item_0, ek_head), # heroes have only 4 possible weapons (equipped)
(troop_get_inventory_slot, ":item", "trp_player", ":troop_item_slot"),
(gt, ":item", itm_no_item),
(item_get_type, ":weapon_type", ":item"),
(eq, ":weapon_type", itp_type_bolts),
(troop_inventory_slot_get_item_amount, ":cur_arrows","trp_player",":troop_item_slot"),
(try_begin),
(gt,":cur_arrows",":used_ammo"),
(store_sub,":new_arrows",":cur_arrows",":used_ammo"),
(assign,":used_ammo",0),
(troop_inventory_slot_set_item_amount, "trp_player", ":troop_item_slot", ":new_arrows"),
(else_try),
(val_sub,":used_ammo",":cur_arrows"),
(troop_inventory_slot_set_item_amount, "trp_player", ":troop_item_slot", 1),
(try_end),
(try_end),
(try_end),
]
),
("restore_ammo",
[
(troop_get_inventory_capacity, ":end_cond", "trp_player"),
(try_for_range, ":troop_item_slot", 0, ":end_cond"),
(troop_get_inventory_slot, ":item", "trp_player", ":troop_item_slot"),
(gt, ":item", itm_no_item),
(item_get_type, ":weapon_type", ":item"),
(this_or_next|eq, ":weapon_type", itp_type_arrows),
(eq, ":weapon_type", itp_type_bolts),
(item_get_slot, ":max_amount", ":item", slot_item_max_ammo),
(troop_inventory_slot_set_item_amount, "trp_player", ":troop_item_slot", ":max_amount"),
(try_end),
]),
("init_item_max_ammo", set_item_max_ammo()),
В любой из скриптов\меню, отображающих окончание битвы, вызов скрипта
(call_script, "script_restore_ammo"),
У меня данная строка включена в скрипт "count_mission_casualties_from_agents", но это непринципиально.
mission_temlates.py,
внутрь "lead_charge" - триггер.
Цитата
(1,0,0,[],
[
(call_script, "script_cf_consume_ammo"),
]
),
Триггер. module_simple_triggers.py
Цитата
(1,
[
(call_script, "script_init_item_max_ammo"),
]),
Константы. module_constants.py
Цитата
slot_item_max_ammo = 9
PS: испытывалось, опять-же, не на нативской модульке, а на основе "Дипломатии", включавшей в себя "автолут". Если её нет - то правок больше.