@Lew - dzięki, zawsze mogę poczekać na odpowiedź, nie trzeba aż z fona... Jakkolwiek bardzo zawsze liczę na Twoją pomoc, bo trafia w sedno problemu. (no, chyba że najpierw Mat Berseker rozpisze wszystkie kwestie w formie wykładu, co też sobie bardzo cenię ;) )
Chcę stworzyć takie "improvements" dla zamków, które automatycznie co tydzień będą dodawały pt_reinforcements_d (lepsze) i pt_reinforcements_e (elitarne) dla załóg zamków p_castle_XX - oczywiście i dla gracza i dla npc-ta.
[edit] Podszedłem inaczej do problemu - mój budynek, baraki, (Barracks) wyzwala simple_trigger, który wyzwala z kolei skrypt - zduplikowane i zmienione script_cf_reinforce_party.
[EDIT2] - PROBLEM ROZWIĄZANY, info na samym dole
PROBLEM: oryginalny script_cf_reinforce_party działa - przesyła uzupełnienia do zamku w którym wybudowane są baraki. Niestety jego forma sprawia, że do zamku trafiają jedynie reinforcements_a, _b, _c i to nie kultury gracza, ale oryginalnej nacji, poprzedniego właściciela zamku.
Próbowałem wielokrotnie modyfikować script_cf_reinforce_party - usunąć element losowy (czy reinforcements są a, b, c) i dodać _d i _e (party_templates które też dorobiłem). Niestety ani razu nie poskutkowało, wystarczyło zmienić delikatnie 2,3 linijki i nagle skrypt przestaje działać.
Mój zmodyfikowany skrypt, zmiany zaznaczone na czerwono.
# script_cf_reinforce_barracks
# Input: arg1 = party_no,
# Output: none
# Adds reinforcement to party according to its type and faction
# Called from several places, simple_triggers for centers, script_hire_men_to_kingdom_hero_party for hero parties
("cf_reinforce_party_barracks",
[
(store_script_param_1, ":party_no"),
(store_faction_of_party, ":party_faction", ":party_no"),
(party_get_slot, ":party_type",":party_no", slot_party_type),
#Rebellion changes begin:
(try_begin),
(eq, ":party_type", spt_kingdom_hero_party),
(party_stack_get_troop_id, ":leader", ":party_no"),
(troop_get_slot, ":party_faction", ":leader", slot_troop_original_faction),
(try_end),
#Rebellion changes end
(try_begin),
(eq, ":party_faction", "fac_player_supporters_faction"),
(party_get_slot, ":town_lord", ":party_no", slot_town_lord),
(try_begin),
(gt, ":town_lord", 0),
(troop_get_slot, ":party_faction", ":town_lord", slot_troop_original_faction),
(else_try),
(party_get_slot, ":party_faction", ":party_no", slot_center_original_faction),
(try_end),
(try_end),
(faction_get_slot, ":party_template_a", ":party_faction", slot_faction_reinforcements_a),
(faction_get_slot, ":party_template_b", ":party_faction", slot_faction_reinforcements_b),
(faction_get_slot, ":party_template_c", ":party_faction", slot_faction_reinforcements_c),
(faction_get_slot, ":party_template_d", ":party_faction", slot_faction_reinforcements_d),
(faction_get_slot, ":party_template_e", ":party_faction", slot_faction_reinforcements_e),
(assign, ":party_template", 0),
(store_random_in_range, ":rand", 75, 77), #forced random to get party_template_d
(try_begin),
(this_or_next|eq, ":party_type", spt_town),
(eq, ":party_type", spt_castle), #CASTLE OR TOWN
(try_begin),
(lt, ":rand", 25),
(assign, ":party_template", ":party_template_a"),
(else_try),
(lt, ":rand", 45),
(assign, ":party_template", ":party_template_b"),
(else_try),
(lt, ":rand", 65),
(assign, ":party_template", ":party_template_c"),
(else_try),
(lt, ":rand", 80),
(assign, ":party_template", ":party_template_d"),
(else_try),
(assign, ":party_template", ":party_template_e"),
(try_end),
(else_try),
(eq, ":party_type", spt_kingdom_hero_party),
(try_begin),
(lt, ":rand", 25),
(assign, ":party_template", ":party_template_a"),
(else_try),
(lt, ":rand", 45),
(assign, ":party_template", ":party_template_b"),
(else_try),
(lt, ":rand", 65),
(assign, ":party_template", ":party_template_c"),
(else_try),
(lt, ":rand", 80),
(assign, ":party_template", ":party_template_d"),
(else_try),
(assign, ":party_template", ":party_template_e"),
(try_end),
(else_try),
(try_end),
(assign, reg9, ":party_template"),
(display_message, "@party_template {reg9}", 0xFFFF00),
(try_begin),
(gt, ":party_template", 0),
(party_add_template, ":party_no", ":party_template"),
(try_end),
]),
Co zrobić, żeby zadziałało, gdzie mój błąd?
EDIT: Działa, ale wciąż tylko rekrutują się jednostki poprzedniego własciciela zamku, tzn frakcji z której pochodził poprzedni właściciel. A to musi być zależne od kultury gracza!
EDIT2: Jakby ktoś planował podobne baraki, stworzyć standardowy improvement wg wzoru z
a potem simple_trigger wkleić gdziekolwiek, np obok innych usprawnien (Wiatrak itd.) :
2 * 1,
[(try_for_range, ":party_no", castles_begin, castles_end),
(party_slot_eq, ":party_no", slot_center_has_barracks, 1),
(call_script, "script_cf_reinforce_party_barracks", ":party_no", 4),
(display_message, "@debug Barracks", 0xFFFF00),
(try_end),
]),
ewentualnie wykasować debugowe wiadomości. Potem powyżej albo gdziebądź w module_script wkleić poniższy skrypt
# script_cf_reinforce_barracks
# Input: arg1 = party_no,
# Output: none
# Adds reinforcement to party according to its type and faction
# Called from several places, simple_triggers for centers, script_hire_men_to_kingdom_hero_party for hero parties
("cf_reinforce_party_barracks",
[
(store_script_param_1, ":party_no"),
(store_script_param_2, ":rand"),
(store_faction_of_party, ":party_faction", ":party_no"),
(faction_get_slot, ":party_template_a", ":party_faction", slot_faction_reinforcements_a),
(faction_get_slot, ":party_template_b", ":party_faction", slot_faction_reinforcements_b),
(faction_get_slot, ":party_template_c", ":party_faction", slot_faction_reinforcements_c),
(faction_get_slot, ":party_template_d", ":party_faction", slot_faction_reinforcements_d),
(faction_get_slot, ":party_template_e", ":party_faction", slot_faction_reinforcements_e),
(assign, ":party_template", 0),
(try_begin),
(ge, ":rand", 0),
(try_begin),
(eq, ":rand", 1),
(assign, ":party_template", ":party_template_a"),
(else_try),
(eq, ":rand", 2),
(assign, ":party_template", ":party_template_b"),
(else_try),
(eq, ":rand", 3),
(assign, ":party_template", ":party_template_c"),
(else_try),
(eq, ":rand", 4),
(assign, ":party_template", ":party_template_d"),
(else_try),
(assign, ":party_template", ":party_template_e"),
(try_end),
(else_try),
(try_end),
(assign, reg9, ":party_template"),
(display_message, "@party_template {reg9}", 0xFFFF00),
(try_begin),
(gt, ":party_template", 0),
(party_add_template, ":party_no", ":party_template"),
(try_end),
]),