Bugün istediğimiz zaman askerlerimizi bırakabileceğimiz bir üs yapmayı göstereceğim. Basit bir kod, bugün sırf buna uğraştım. Modül sistemi de kavramaya başladım.
İlk önce module_parties'i açalım:
satırının altına
satırını ekleyelim. Bu üssümüzün kodudur. Koordinatlarını rastgele yazabilirsiniz.
Ardından module_game_menus'te
nın altına
bunu ekleyin. Böylece kamp mensündeki bir işe giriş bölümünden üssümüzü kurabileceğiz.
Sonra
bunun altına bir satır boşluk bırakarak
bunu ekleyin. Böylece bu menü çıktığı zaman haritada görünmeyen üssümüz oyuncunun yanında belirecek. trp_quartermaster ise parti yok olmasın diye konulacak.
Ardından bir satır boşluk bırakarak altına şunu ekleyin:
Bu üssümüze girdiğimizde çıkan kod. İlk seçenek içeri adam koyup almayı sağlıyor. İkinci seçenek üssü topluyor. Üçüncüsü de ayrıl.
Sonra module_scripts'te
satırının altına
Satırını ekleyin. Bu üssümüze girdiğimiz anda menüsünün çıkmasını sağlayacak.
Bir de
Bunun altına
Bunu ekleyin. Böylece Quartermaster'a para ödemeyeceğiz.
Ve üssümüzün yok olmaması için orada duracak bir npc lazım(önceki adımlarda söylemiştim). Bunun için module_troops'ta
Bunun altına
ekliyoruz. Face code, ekipman vs. yi kendi kafanıza göre yapabilirsiniz.
Sonra module_presentations'ta
Kısmının altına
Kısmını ekliyoruz.
Bunu da yaptıktan sonra kaydedip build module'ü çalıştırıyoruz ve oyuna girip tadını çıkarıyoruz
Bunu test ettim ve bir bug ile karşılaştım buraya koyduğumuz askerlere para ödemiyoruz. Şimdilik kullanmayın derim. Veya kendiniz ayarlayın ben çözüm bulana kadar. Hallettim.
Kodu tamamen gözden geçirip eksiklerini düzelttim. Gönül rahatlığıyla kullanabilirsiniz.
İlk önce module_parties'i açalım:
Code:
("zendar","Zendar",pf_disabled|icon_town|pf_is_static|pf_always_visible|pf_hide_defenders, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(18,60),[]),
Code:
("quarters","Troop Quarters",pf_disabled|icon_camp|pf_always_visible, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(20,60),[]),
Ardından module_game_menus'te
Code:
("action_retire",[],"Retire from adventuring.",
[(jump_to_menu, "mnu_retirement_verify"),
]
),
Code:
("camp_leave_troops",[(neg|party_is_active, "p_quarters"),],"Leave some of your troops here.",
[
(jump_to_menu, "mnu_quarters_built"),
]
),
Sonra
Code:
("camp_action_4",[],"Back to camp menu.",
[(jump_to_menu, "mnu_camp"),
]
),
]
),
Code:
("quarters_built",mnf_disable_all_keys,
"The quarters are ready.",
"none",
[(enable_party, "p_quarters"),
(party_get_position, pos50, "p_main_party"),
(party_set_position, "p_quarters", pos50),
],
[
("quarters_leave",[],"Leave.",
[(party_add_members, "p_quarters", "trp_quartermaster",1),
(change_screen_return),
]
),
]
),
Ardından bir satır boşluk bırakarak altına şunu ekleyin:
Code:
("quarters",mnf_disable_all_keys,
"You can leave troops in your quarters and take them later.",
"none",
[],
[
("quarters_manage_troops",[],"Manage your troops.",
[
(change_screen_exchange_members,0),
]
),
("quarters_destroy",[],"Disband the quarters.",
[
(party_get_num_companion_stacks, ":num_stacks", "p_quarters"),
(party_get_num_companions, ":num_companions", "p_quarters"),
(party_get_free_companions_capacity, ":party_room", "p_main_party"),
(try_begin),
(le, ":num_companions", ":party_room"),
(try_for_range, ":i_stack", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop", "p_quarters", ":i_stack"),
(try_begin),
(neq, ":stack_troop", "trp_quartermaster"),
(party_stack_get_size, ":stack_size", "p_quarters", ":i_stack"),
(party_remove_members, "p_quarters", ":stack_troop", ":stack_size"),
(party_add_members, "p_main_party", ":stack_troop", ":stack_size"),
(disable_party, "p_quarters"),
(change_screen_return),
(else_try),
(jump_to_menu, "mnu_quarters_are_you_sure"),
(try_end),
(try_end),
(try_end),
]
),
("quarters_leave_2",[],"Leave.",
[(change_screen_return),]
),
]
),
("quarters_are_you_sure",mnf_disable_all_keys,
"Your party doesn't have room for {reg1} of your soldiers. These troops will be destroyed. Do you still want to continue?",
"none",
[],
[
("quarters_yes",[],"Yes.",
[
(party_get_num_companion_stacks, ":num_stacks", "p_quarters"),
(party_get_free_companions_capacity, ":party_room", "p_main_party"),
(try_for_range_backwards, ":selected_stack", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop", "p_quarters", ":selected_stack"),
(party_stack_get_size, ":stack_size", "p_quarters", ":selected_stack"),
(try_begin),
(neq, ":stack_troop", "trp_quartermaster"),
(try_begin),
(le, ":stack_size", ":party_room"),
(party_remove_members, "p_quarters", ":selected_stack", ":stack_size"),
(party_add_members, "p_main_party", ":stack_troop", ":stack_size"),
(else_try),
(gt, ":stack_size", ":party_room"),
(val_sub, ":stack_size", ":party_room"),
(party_remove_members, "p_quarters", ":stack_troop", ":stack_size"),
(party_add_members, "p_main_party", ":stack_troop", ":stack_size"),
(try_end),
(else_try),
(eq, ":party_room", 0),
(change_screen_return),
(try_end),
(try_end),
(change_screen_return),
]
),
("quarters_no",[],"No.",
[(jump_to_menu, "mnu_quarters"),]
),
]
),
Sonra module_scripts'te
Code:
(eq, "$g_encountered_party", "p_zendar"),
(jump_to_menu, "mnu_zendar"),
Code:
(else_try),
(eq, "$g_encountered_party", "p_quarters"),
(jump_to_menu, "mnu_quarters"),
Bir de
Code:
(try_begin),
(is_between, ":troop_id", companions_begin, companions_end),
(val_mul, ":wage", 2),
(try_end),
Code:
(try_begin),
(eq, ":troop_id", "trp_quartermaster"),
(assign, ":wage", 0),
(try_end),
Ve üssümüzün yok olmaması için orada duracak bir npc lazım(önceki adımlarda söylemiştim). Bunun için module_troops'ta
Code:
["fugitive","Nervous Man","Nervous Men",tf_guarantee_boots|tf_guarantee_armor,0,0,fac_commoners,
[itm_short_tunic,itm_linen_tunic,itm_coarse_tunic, itm_tabard, itm_leather_vest, itm_woolen_hose, itm_nomad_boots, itm_blue_hose, itm_wrapping_boots, itm_fur_hat, itm_leather_cap, itm_sword_medieval_b, itm_throwing_daggers],
def_attrib|str_24|agi_25|level(26),wp(180),knows_common|knows_power_throw_6|knows_power_strike_6|knows_ironflesh_9,man_face_middle_1, man_face_old_2],
Code:
["quartermaster","Quartermaster","Quartermaster",tf_guarantee_boots|tf_guarantee_armor|tf_hero|tf_unmoveable_in_party_window,0,0,fac_commoners,
[itm_rich_outfit,itm_hide_boots],
str_6|agi_6|int_4|cha_5|level(5),wp(10),knows_common,0x0000000ab000318136db6db6db6db6db6db00000000001db6db0000000000000000],
Sonra module_presentations'ta
Code:
(this_or_next|eq, ":party_no", "p_main_party"),
(eq, ":garrison_troop", 1),
(assign, ":total_wage", 0),
(party_get_num_companion_stacks, ":num_stacks", ":party_no"),
(try_for_range, ":i_stack", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop", ":party_no", ":i_stack"),
(party_stack_get_size, ":stack_size", ":party_no", ":i_stack"),
(call_script, "script_game_get_troop_wage", ":stack_troop", ":party_no"),
(assign, ":cur_wage", reg0),
(val_mul, ":cur_wage", ":stack_size"),
(val_add, ":total_wage", ":cur_wage"),
(try_end),
(try_begin),
(eq, ":garrison_troop", 1),
(val_div, ":total_wage", 2), #Half payment for garrisons
(else_try),
(eq, ":party_no", "p_main_party"),
(store_sub, ":total_payment_ratio", 14, "$g_cur_week_half_daily_wage_payments"), #between 0 and 7
(val_mul, ":total_wage", ":total_payment_ratio"),
(val_div, ":total_wage", 14),
(try_end),
## (gt, ":total_wage", 0),
(val_mul, ":total_wage", -1),
(val_add, ":net_change", ":total_wage"),
(str_store_party_name, s0, ":party_no"),
(try_begin),
(eq, ":party_no", "p_main_party"),
(str_store_string, s0, "str_s0s_party"),
(try_end),
(create_text_overlay, reg1, "str_wages_for_s0", 0),
(position_set_x, pos1, 900),
(position_set_y, pos1, 900),
(overlay_set_size, reg1, pos1),
(position_set_x, pos1, 25),
(position_set_y, pos1, ":cur_y"),
(overlay_set_position, reg1, pos1),
(try_begin),
(lt, ":total_wage", 0),
(assign, reg0, ":total_wage"),
(create_text_overlay, reg1, "@{!}{reg0}", tf_right_align|tf_single_line),
(overlay_set_color, reg1, 0xFF0000),
(else_try),
(create_text_overlay, reg1, "@None", tf_right_align|tf_single_line),
(try_end),
(position_set_x, pos1, 900),
(position_set_y, pos1, 900),
(overlay_set_size, reg1, pos1),
(position_set_x, pos1, 500),
(position_set_y, pos1, ":cur_y"),
(overlay_set_position, reg1, pos1),
(val_sub, ":cur_y", 27),
(try_end),
Code:
(try_begin),
(party_is_active, "p_quarters"),
(assign, ":total_wage", 0),
(party_get_num_companion_stacks, ":num_stacks", "p_quarters"),
(try_for_range, ":i_stack", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop", "p_quarters", ":i_stack"),
(party_stack_get_size, ":stack_size", "p_quarters", ":i_stack"),
(call_script, "script_game_get_troop_wage", ":stack_troop", "p_quarters"),
(assign, ":cur_wage", reg0),
(val_mul, ":cur_wage", ":stack_size"),
(val_add, ":total_wage", ":cur_wage"),
(try_end),
(val_mul, ":total_wage", -1),
(val_add, ":net_change", ":total_wage"),
(str_store_party_name, s0, "p_quarters"),
(create_text_overlay, reg1, "str_wages_for_s0", 0),
(position_set_x, pos1, 900),
(position_set_y, pos1, 900),
(overlay_set_size, reg1, pos1),
(position_set_x, pos1, 25),
(position_set_y, pos1, ":cur_y"),
(overlay_set_position, reg1, pos1),
(try_begin),
(lt, ":total_wage", 0),
(assign, reg0, ":total_wage"),
(create_text_overlay, reg1, "@{!}{reg0}", tf_right_align|tf_single_line),
(overlay_set_color, reg1, 0xFF0000),
(else_try),
(create_text_overlay, reg1, "@None", tf_right_align|tf_single_line),
(try_end),
(position_set_x, pos1, 900),
(position_set_y, pos1, 900),
(overlay_set_size, reg1, pos1),
(position_set_x, pos1, 500),
(position_set_y, pos1, ":cur_y"),
(overlay_set_position, reg1, pos1),
(val_sub, ":cur_y", 27),
(try_end),
Bunu da yaptıktan sonra kaydedip build module'ü çalıştırıyoruz ve oyuna girip tadını çıkarıyoruz











Kodu tamamen gözden geçirip eksiklerini düzelttim. Gönül rahatlığıyla kullanabilirsiniz.