("prsnt_culture_troop_tree",
[(store_script_param_1, ":culture"),
(store_sub, ":num", ":culture", fac_culture_1), (val_mod, ":num", 6),
(store_add, ":slot", ":num","mesh_pic_arms_swadian"),
(create_mesh_overlay, reg0, ":slot"),
(store_add, ":slot", ":num", "mesh_pic_swad"),
(create_mesh_overlay, reg1, ":slot"),
(position_set_x, pos1, 180),(position_set_y, pos1, 560),
(position_set_x, pos2, 500),(position_set_y, pos2, 25),
(position_set_x, pos3, 500),(position_set_y, pos3, 500),
(overlay_set_position, reg0, pos1), (overlay_set_size, reg0, pos3),
(overlay_set_position, reg1, pos2), (overlay_set_size, reg1, pos3),
(try_for_range, ":slot", 0, 61),
(troop_set_slot, "trp_temp_array_a", ":slot", 0),
(troop_set_slot, "trp_temp_array_b", ":slot", 0),
(troop_set_slot, "trp_temp_array_c", ":slot", 0),
(store_add, ":num", 100),
(troop_set_slot, "trp_temp_array_b", ":num", -1),
(troop_set_slot, "trp_temp_array_c", ":num", -1),
(try_end),
(faction_get_slot, ":troop_no", ":culture", slot_faction_tier_1_troop),
# lowest troop tiers initialization BEGIN
(troop_set_slot, "trp_temp_array_a", 0, 1), # Number of Lowest Tier Troop
(troop_set_slot, "trp_temp_array_a", 1, 1), # 1 for 1st troop
(troop_set_slot, "trp_temp_array_b", 1, ":troop_no"), # 1st troop id
# lowest troop tiers initialization END
(assign, ":max_tier", 0), (assign, ":no_tier", 0),
(try_for_range, ":tier", 1, 10), # Asuming that you wont make troop tree more than 10 tiers
(eq, ":no_tier", 0),
(assign, ":no_tier", 1),
(store_sub, ":prev_tier", ":tier", 1),
(store_mul, ":slot_for_prev_num", ":prev_tier", 10),
(store_mul, ":slot_for_num", ":tier", 10),
(assign, ":num", 0),
(troop_get_slot, ":prev_num", "trp_temp_array_a", ":slot_for_prev_num"),
(gt, ":prev_num", 0),
(val_add, ":prev_num", 1),
(try_for_range, ":tree_no", 1, ":prev_num"),
(store_add, ":prev_slot", ":tree_no", ":slot_for_prev_num"),
(troop_get_slot, ":troop_no", "trp_temp_array_b", ":prev_slot"),
(gt, ":troop_no", 0),
(troop_get_upgrade_troop, ":next_troop", ":troop_no", 0),
(gt, ":next_troop", 0),
(assign, ":no_tier", 0),
(val_add, ":num", 1),
(troop_set_slot, "trp_temp_array_a", ":slot_for_num", ":num"),
(store_add, ":slot", ":slot_for_num", ":num"),
(troop_set_slot, "trp_temp_array_a", ":slot", ":tree_no"),
(troop_set_slot, "trp_temp_array_b", ":slot", ":next_troop"),
(troop_get_upgrade_troop, ":next_troop", ":troop_no", 1),
(gt, ":next_troop", 0),
(val_add, ":num", 1),
(troop_set_slot, "trp_temp_array_a", ":slot_for_num", ":num"),
(store_add, ":slot", ":slot_for_num", ":num"),
(troop_set_slot, "trp_temp_array_a", ":slot", ":tree_no"),
(troop_set_slot, "trp_temp_array_b", ":slot", ":next_troop"),
(try_end),
(eq, ":no_tier", 0),
(val_add, ":max_tier", 1),
(try_end),
(store_mul, ":max_num_tier", ":max_tier", 10), (val_add, ":max_tier", 1),
(troop_get_slot, ":num", "trp_temp_array_a", ":max_num_tier"),
(val_add, ":num", 1),
(try_for_range, ":tree_no", 1, ":num"),
(store_add, ":slot", ":max_num_tier", ":tree_no"),
(store_mul, ":subs", ":tree_no", troop_tree_space_y),
(store_sub, ":pos", working_pos_y + 35, ":subs"),
(troop_set_slot, "trp_temp_array_c", ":slot", ":pos"),
(try_end),
(try_for_range_backwards, ":tier", 1, ":max_tier"),
(store_mul, ":slot_for_num", ":tier", 10),
(store_sub, ":prev_tier", ":tier", 1),
(store_mul, ":slot_for_prev_num", ":prev_tier", 10),
(troop_get_slot, ":prev_num", "trp_temp_array_a", ":slot_for_prev_num"),
(gt, ":prev_num", 0),
(val_add, ":prev_num", 1),
(try_for_range, ":tree_no", 1, ":prev_num"),
(store_add, ":prev_slot", ":tree_no", ":slot_for_prev_num"),
(assign, ":prev_pos", 0), (assign, ":num", 0),
(try_for_range, ":subs", 1, 10),
(store_add, ":slot", ":subs", ":slot_for_num"),
(troop_slot_eq, "trp_temp_array_a", ":slot", ":tree_no"),
(troop_get_slot, ":pos", "trp_temp_array_c", ":slot"),
(val_add, ":prev_pos", ":pos"),
(val_add, ":num", 1),
(try_end),
(gt, ":num", 0),
(val_div, ":prev_pos", ":num"),
(troop_set_slot, "trp_temp_array_c", ":prev_slot", ":prev_pos"),
(try_end),
(assign, ":pos", 999),
(try_for_range, ":tree_no", 1, ":prev_num"),
(store_add, ":prev_slot", ":tree_no", ":slot_for_prev_num"),
(troop_get_slot, ":prev_pos", "trp_temp_array_c", ":prev_slot"),
(gt, ":prev_pos", 0),
(lt, ":prev_pos", ":pos"),
(assign, ":pos", ":prev_pos"),
(try_end),
(try_for_range, ":tree_no", 1, ":prev_num"),
(store_add, ":prev_slot", ":tree_no", ":slot_for_prev_num"),
(troop_get_slot, ":prev_pos", "trp_temp_array_c", ":prev_slot"),
(eq, ":prev_pos", 0),
(store_sub, ":prev_pos", ":pos", troop_tree_space_y),
(assign, ":pos", ":prev_pos"),
(troop_set_slot, "trp_temp_array_c", ":prev_slot", ":prev_pos"),
(try_end),
(try_end),
(val_add, ":max_num_tier", 11), (troop_set_slot, "trp_temp_array_c", 100, 0), (assign, ":num",100),
(try_for_range, ":slot", 0, ":max_num_tier"),
(troop_get_slot, ":troop_no", "trp_temp_array_b", ":slot"),
(gt, ":troop_no", 0),
(store_div, ":posx", ":slot", 10),
(val_mul, ":posx", troop_tree_space_x),
(val_add, ":posx", troop_tree_left),
(troop_get_slot, ":posy", "trp_temp_array_c", ":slot"),
(val_add, ":num", 1),
(call_script, "script_prsnt_upgrade_tree_troop_and_name", ":troop_no", ":posx", ":posy"),
(troop_set_slot, "trp_temp_array_c", ":num", reg1),
(troop_set_slot, "trp_temp_array_b", ":num", ":troop_no"),
(store_mod, ":cur_slot", ":slot", 10),
(gt, ":cur_slot", 0),
(store_sub, ":cur_slot1", ":slot", ":cur_slot"),
(val_add, ":cur_slot1", 10),
(store_add, ":cur_slot2", ":cur_slot1", 10),
(try_for_range, ":slot2", ":cur_slot1", ":cur_slot2"),
(troop_slot_ge, "trp_temp_array_b", ":slot2", 1),
(troop_slot_eq, "trp_temp_array_a", ":slot2", ":cur_slot"),
(store_add, ":posx2", ":posx", troop_tree_space_x),
(store_add, ":posx1", ":posx", troop_tree_space_x/2),
(troop_get_slot, ":posy2", "trp_temp_array_c", ":slot2"),
(store_add, ":posy1", ":posy", troop_tree_space_y/2),
(val_add, ":posy2", troop_tree_space_y/2),
(call_script, "script_prsnt_lines_to", ":posx", ":posy1", ":posx2", ":posy2", title_black),
(val_sub, ":posy2", 3),
(call_script, "script_prsnt_upgrade_tree_troop_cost", ":troop_no", ":posx1", ":posy2"),
(try_end),
(try_end),
(troop_set_slot, "trp_temp_array_c", 100, ":num"), ]),
("prsnt_lines_to", # Drawing lines from (x1,y1) to (x2,y2), the line will be horizontal til half way, vertical and then horizontal again
[(store_script_param, ":pos_x1", 1),
(store_script_param, ":pos_y1", 2),
(store_script_param, ":pos_x2", 3),
(store_script_param, ":pos_y2", 4),
(store_script_param, ":color", 5),
(try_begin),
(eq, ":pos_x1", ":pos_x2"),
(store_sub, ":size", ":pos_y1", ":pos_y2"),
(val_abs, ":size"),
(val_min, ":pos_y1", ":pos_y2"),
(call_script, "script_prsnt_lines", 4, ":size", ":pos_x1", ":pos_y1", ":color"),
(else_try),
(eq, ":pos_y1", ":pos_y2"),
(store_sub, ":size", ":pos_x1", ":pos_x2"),
(val_abs, ":size"),
(val_min, ":pos_x1", ":pos_x2"),
(call_script, "script_prsnt_lines", ":size", 5, ":pos_x1", ":pos_y1", ":color"),
(else_try),
(store_add, ":pos_x", ":pos_x1", ":pos_x2"), (val_div, ":pos_x", 2), (val_sub, ":pos_x", 6),
(call_script, "script_prsnt_lines_to", ":pos_x1", ":pos_y1", ":pos_x", ":pos_y1", ":color"),
(call_script, "script_prsnt_lines_to", ":pos_x", ":pos_y1", ":pos_x", ":pos_y2", ":color"),
(call_script, "script_prsnt_lines_to", ":pos_x", ":pos_y2", ":pos_x2", ":pos_y2", ":color"),
(try_end), ]),
# rubik's CC scripts BEGIN
("prsnt_upgrade_tree_troop_and_name",
[(store_script_param, ":troop_no", 1),
(store_script_param, ":pos_x", 2),
(store_script_param, ":pos_y", 3),
(str_store_troop_name, s1, ":troop_no"),
(create_text_overlay, reg1, "@{s1}", tf_center_justify|tf_vertical_align_center),
(position_set_x, pos1, smaller_size),
(position_set_y, pos1, smaller_size),
(overlay_set_size, reg1, pos1),
(position_set_x, pos1, ":pos_x"),
(position_set_y, pos1, ":pos_y"),
(overlay_set_position, reg1, pos1),
(val_sub, ":pos_x", 52), # adjusted from 65
#(val_add, ":pos_y", 5), # adjusted from 10
(store_mul, ":cur_troop", ":troop_no", 2), #with weapons
(create_image_button_overlay_with_tableau_material, reg1, -1, "tableau_game_party_window", ":cur_troop"),
(position_set_x, pos1, troop_tree_size_x),
(position_set_y, pos1, troop_tree_size_y),
(overlay_set_size, reg1, pos1),
(position_set_x, pos1, ":pos_x"),
(position_set_y, pos1, ":pos_y"),
(overlay_set_position, reg1, pos1), ]),
("prsnt_upgrade_tree_troop_cost",
[(store_script_param, ":troop_no", 1),
(store_script_param, ":pos_x", 2),
(store_script_param, ":pos_y", 3),
(call_script, "script_game_get_upgrade_cost", ":troop_no"),
(create_text_overlay, reg1, "@{reg0}", tf_left_align|tf_vertical_align_center),
(position_set_x, pos1, ":pos_x"),
(position_set_y, pos1, ":pos_y"),
(overlay_set_position, reg1, pos1),
(position_set_x, pos1, smaller_size),
(position_set_y, pos1, smaller_size),
(overlay_set_size, reg1, pos1), ]),
("prsnt_lines",
[(store_script_param, ":size_x", 1),
(store_script_param, ":size_y", 2),
(store_script_param, ":pos_x", 3),
(store_script_param, ":pos_y", 4),
(store_script_param, ":color", 5),
(create_mesh_overlay, reg1, "mesh_white_plane"),
(val_mul, ":size_x", 50),
(val_mul, ":size_y", 50),
(position_set_x, pos0, ":size_x"),
(position_set_y, pos0, ":size_y"),
(overlay_set_size, reg1, pos0),
(position_set_x, pos0, ":pos_x"),
(position_set_y, pos0, ":pos_y"),
(overlay_set_position, reg1, pos0),
(overlay_set_color, reg1, ":color"), ]),
("get_troop_max_hp",
[(store_script_param_1, ":troop"),
(store_skill_level, ":skill", skl_ironflesh, ":troop"),
(store_attribute_level, ":attrib", ":troop", ca_strength),
(val_mul, ":skill", 2),
(val_add, ":skill", ":attrib"),
(val_add, ":skill", 35),
(assign, reg0, ":skill"), ]),
("copy_inventory",
[(store_script_param_1, ":source"),
(store_script_param_2, ":target"),
(troop_clear_inventory, ":target"),
(troop_get_inventory_capacity, ":inv_cap", ":source"),
(try_for_range, ":i_slot", 0, ":inv_cap"),
(troop_get_inventory_slot, ":item", ":source", ":i_slot"),
(troop_set_inventory_slot, ":target", ":i_slot", ":item"),
(troop_get_inventory_slot_modifier, ":imod", ":source", ":i_slot"),
(troop_set_inventory_slot_modifier, ":target", ":i_slot", ":imod"),
(troop_inventory_slot_get_item_amount, ":amount", ":source", ":i_slot"),
(gt, ":amount", 0),
(troop_inventory_slot_set_item_amount, ":target", ":i_slot", ":amount"),
(try_end), ]),
# rubik's CC scripts END
Ostatnim krokiem będzie dodanie opcji zobaczenia drzewka rozwoju. Otwórz module_game_menus i znajdź ten kod:
Przechodzimy do module_mission_templates. Standardowo po linijce af_castle_lord = af_override_horse | af_override_weapons| af_require_civilian dodajemy kod:
custom_commander_give_hero_extra_wp = (
ti_on_agent_killed_or_wounded, 0, 0, [],
[
(store_trigger_param_1, ":wounded_agent_no"),
(store_trigger_param_2, ":killer_agent_no"),
(get_player_agent_no, ":player_agent"),
(try_begin),
(agent_is_human, ":wounded_agent_no"),
(agent_is_human, ":killer_agent_no"),
(assign, ":continue", 1),
(try_begin),
(agent_is_ally, ":wounded_agent_no"),
(agent_is_ally, ":killer_agent_no"),
(assign, ":continue", 0),
(else_try),
(neg|agent_is_ally, ":wounded_agent_no"),
(neg|agent_is_ally, ":killer_agent_no"),
(assign, ":continue", 0),
(try_end),
(eq, ":continue", 1),
(agent_get_troop_id, ":killer_troop", ":killer_agent_no"),
(troop_is_hero, ":killer_troop"),
# xp_needed
(assign, ":xp_needed", 2000),
(val_mul, ":xp_needed", 10),
(store_skill_level, ":skill_bonus", "skl_weapon_master", ":killer_troop"),
(val_add, ":skill_bonus", 10),
(val_div, ":xp_needed", ":skill_bonus"),
(try_begin),
(neq, ":killer_agent_no", ":player_agent"),
(val_div, ":xp_needed", 2),
(try_end),
# xp_gained
(agent_get_troop_id, ":wounded_troop", ":wounded_agent_no"),
(store_character_level, ":wounded_troop_level", ":wounded_troop"),
(store_add, ":xp_gained", ":wounded_troop_level", 20),
(val_mul, ":xp_gained", ":xp_gained"),
(val_add, ":xp_gained", 400),
(val_div, ":xp_gained", 10),
# add xp
(agent_get_slot, ":cur_weapon_xp", ":killer_agent_no", slot_agent_weapon_xp),
(val_add, ":cur_weapon_xp", ":xp_gained"),
(agent_set_slot, ":killer_agent_no", slot_agent_weapon_xp, ":cur_weapon_xp"),
(gt, ":cur_weapon_xp", ":xp_needed"),
(troop_add_proficiency_points, ":killer_troop", 1),
(val_sub, ":cur_weapon_xp", ":xp_needed"),
(agent_set_slot, ":killer_agent_no", slot_agent_weapon_xp, ":cur_weapon_xp"),
(try_begin),
(eq, ":killer_agent_no", ":player_agent"),
(display_message, "@Zdobywasz 1 punkt do broni.", 0xEEEE00),
(try_end),
(try_end),
])
# Register 0: damage dealer item_id
custom_commander_special_strike =(
ti_on_agent_hit, 0, 0, [],
[
(store_trigger_param_1, ":inflicted_agent"),
(store_trigger_param_2, ":dealer_agent"),
(store_trigger_param_3, ":inflicted_damage"),
(get_player_agent_no, ":player_agent"),
(try_begin),
(agent_is_human, ":dealer_agent"),
(assign, ":dealer_item_id", reg0),
(gt, ":dealer_item_id", -1),
(try_begin),
#knock_back between humans with melee weapons
(agent_is_human, ":inflicted_agent"),
(agent_get_position, pos1, ":inflicted_agent"),
(agent_get_position, pos2, ":dealer_agent"),
(try_begin),
(position_is_behind_position, pos2, pos1),
(item_get_type, ":item_type", ":dealer_item_id"),
(this_or_next|eq, ":item_type", itp_type_one_handed_wpn),
(this_or_next|eq, ":item_type", itp_type_two_handed_wpn),
(eq, ":item_type", itp_type_polearm),
#dest damage ratio is 1/2
(assign, ":dest_damage", ":inflicted_damage"),
(val_div, ":dest_damage", 2),
(store_agent_hit_points, ":inflicted_agent_hp", ":inflicted_agent", 1),
(val_sub, ":inflicted_agent_hp", ":dest_damage"),
(val_max, ":inflicted_agent_hp", 0),
(agent_set_hit_points, ":inflicted_agent", ":inflicted_agent_hp", 1),
# messages for player
(assign, reg1, ":dest_damage"),
(try_begin),
(eq, ":dealer_agent", ":player_agent"),
(display_message, "@Zadajesz {reg1} dodatkowych obrażeń za atak od tyłu!", 0xFF0000),
(else_try),
(eq, ":inflicted_agent", ":player_agent"),
(display_message, "@Otrzymujesz {reg1} dodatkowych obrażeń za atak od tyłu!", 0xFF0000),
(try_end),
(try_end),
(else_try),
# inflicted_agent is horse, dealer_troop is on foot and uses polearm or thrust
(neg|agent_is_human, ":inflicted_agent"),
(agent_get_horse, ":dealer_agent_horse_id", ":dealer_agent"),
(eq, ":dealer_agent_horse_id", -1),
(agent_is_human, ":dealer_agent"),
(assign, ":dealer_item_id", reg0),
(gt, ":dealer_item_id", -1),
(agent_get_action_dir, ":action_dir", ":dealer_agent"),
(item_get_type, ":item_type", ":dealer_item_id"),
(assign, ":extra_damage_rate", 0),
(try_begin),
(eq, ":item_type", itp_type_polearm),
(try_begin),
(eq, ":action_dir", 0),
(assign, ":extra_damage_rate", 120),
(else_try),
(assign, ":extra_damage_rate", 80),
(try_end),
(else_try),
(this_or_next|eq, ":item_type", itp_type_one_handed_wpn),
(eq, ":item_type", itp_type_two_handed_wpn),
(eq, ":action_dir", 0),
(assign, ":extra_damage_rate", 75),
(try_end),
(gt, ":extra_damage_rate", 0),
(store_mul, ":extra_damage", ":inflicted_damage", ":extra_damage_rate"),
(val_div, ":extra_damage", 100),
(store_agent_hit_points, ":inflicted_agent_hp", ":inflicted_agent", 1),
(val_sub, ":inflicted_agent_hp", ":extra_damage"),
(val_max, ":inflicted_agent_hp", 0),
(agent_set_hit_points, ":inflicted_agent", ":inflicted_agent_hp", 1),
# messages for player
(assign, reg1, ":extra_damage"),
(try_begin),
(eq, ":dealer_agent", ":player_agent"),
(try_begin),
(agent_get_rider, ":rider_agent", ":inflicted_agent"),
(gt, ":rider_agent", -1),
(display_message, "@Zadajesz {reg1} dodatkowych obrażeń koniowi."),
(else_try),
(display_message, "@Zadajesz {reg1} dodatkowych obrażeń."),
(try_end),
(try_end),
(try_begin),
(agent_get_horse, ":player_horse_id", ":player_agent"),
(eq, ":player_horse_id", ":inflicted_agent"),
(display_message, "@Twój koń otrzymuje {reg1} dodatkowe uszkodzenia!"),
(try_end),
(try_end),
(try_end),
])
Teraz wystarczy wkleić ten pogrubiony kod do dowolnej misji w module_mission_templates według wzoru. Polecam wkleić na początku w lead_charge.
#CC
[anyone|plyr, "tavern_traveler_talk", [], "Szukam handlarzy książkami...", "tavern_traveler_bookseller_location", []],
[anyone, "tavern_traveler_bookseller_location",
[
(assign, ":num_towns", 0),
(try_for_range, ":town_no", towns_begin, towns_end),
(neg|party_slot_eq, ":town_no", slot_center_tavern_bookseller, 0),
(val_add, ":num_towns", 1),
(try_end),
(eq, ":num_towns", 0),
], "Przepraszam, ale nie wiem gdzie oni są.", "tavern_traveler_pretalk", []],
[anyone, "tavern_traveler_bookseller_location", [], "Wiem gdzie są. Powiem ci za 100 denarów.", "tavern_traveler_bookseller_location_ask_money", []],
[anyone|plyr, "tavern_traveler_bookseller_location_ask_money",
[
(store_troop_gold, ":cur_gold", "trp_player"),
(ge, ":cur_gold", 100),
], "Dobrze. Oto twoje 100 denarów.", "tavern_traveler_bookseller_location_tell",
[
(troop_remove_gold, "trp_player", 100),
]],
[anyone|plyr, "tavern_traveler_bookseller_location_ask_money", [], "Zapomnijmy o tym.", "tavern_traveler_pretalk", []],
[anyone, "tavern_traveler_bookseller_location_tell", [], "Możesz znaleźć ich w {s11}.", "tavern_traveler_pretalk",
[
(assign, ":num_towns", 0),
(try_for_range, ":town_no", towns_begin, towns_end),
(neg|party_slot_eq, ":town_no", slot_center_tavern_bookseller, 0),
(val_add, ":num_towns", 1),
(try_begin),
(eq, ":num_towns", 1),
(str_store_party_name, s11, ":town_no"),
(else_try),
(eq, ":num_towns", 2),
(str_store_party_name, s12, ":town_no"),
(str_store_string, s11, "@{s12} i {s11}"),
(try_end),
(try_end),
(display_message, "@Możesz znaleźć handlarzy książkami w {s11}."),
]],
[anyone|plyr, "tavern_traveler_talk", [], "Szukam pośredników okupu...", "tavern_traveler_ransom_broker_location", []],
[anyone, "tavern_traveler_ransom_broker_location",
[
(assign, ":num_towns", 0),
(try_for_range, ":town_no", towns_begin, towns_end),
(neq, ":town_no", "p_town_2"),
(neg|party_slot_eq, ":town_no", slot_center_ransom_broker, 0),
(val_add, ":num_towns", 1),
(try_end),
(eq, ":num_towns", 0),
], "Przepraszam, ale nie wiem gdzie oni są.", "tavern_traveler_pretalk", []],
[anyone, "tavern_traveler_ransom_broker_location", [], "Wiem gdzie są. Powiem ci za 50 denarów.", "tavern_traveler_ransom_broker_location_ask_money", []],
[anyone|plyr, "tavern_traveler_ransom_broker_location_ask_money",
[
(store_troop_gold, ":cur_gold", "trp_player"),
(ge, ":cur_gold", 50),
], "Dobrze. Oto twoje 50 denarów.", "tavern_traveler_ransom_broker_location_tell",
[
(troop_remove_gold, "trp_player", 50),
]],
[anyone|plyr, "tavern_traveler_ransom_broker_location_ask_money", [], "Zapomnijmy o tym.", "tavern_traveler_pretalk", []],
[anyone, "tavern_traveler_ransom_broker_location_tell", [], "Możesz znaleźć ich w {s11}.", "tavern_traveler_pretalk",
[
(assign, ":num_towns", 0),
(try_for_range, ":town_no", towns_begin, towns_end),
(neq, ":town_no", "p_town_2"),
(neg|party_slot_eq, ":town_no", slot_center_ransom_broker, 0),
(val_add, ":num_towns", 1),
(try_begin),
(eq, ":num_towns", 1),
(str_store_party_name, s11, ":town_no"),
(else_try),
(str_store_party_name, s12, ":town_no"),
(eq, ":num_towns", 2),
(str_store_string, s11, "@{s12} and {s11}"),
(else_try),
(str_store_string, s11, "@{s12}, {s11}"),
(try_end),
(try_end),
(display_message, "@Możesz znaleźć pośredników okupu w {s11}."),
]],
## CC