- Это самый важный скрипт! Я очень горжусь этим.
- Вы должны поставить в самом низу файла.
- NB! Последние родной простой триггер в файле отсутствует запятая после него, так что вам придется добавить вручную. Вы получите ошибку при попытке построить иначе.
############################################################################################################################
## Recruiter kit begin
############################################################################################################################
## This trigger keeps the recruiters moving by assigning them targets.
(0.5,
[
(try_for_parties, ":party_no"),
(party_slot_eq,":party_no", slot_party_type, spt_recruiter),
(party_get_slot, ":needed", ":party_no", slot_party_recruiter_needed_recruits),
(party_get_num_companion_stacks, ":stacks", ":party_no"),
(assign, ":destruction", 1),
(assign, ":quit", 0),
(try_for_range, ":stack_no", 0, ":stacks"),
(party_stack_get_troop_id, ":troop_id", ":party_no", ":stack_no"),
(eq, ":troop_id", "trp_recruiter"),
(assign, ":destruction",0),
(try_end),
(try_begin),
(party_get_battle_opponent, ":opponent", ":party_no"),
(lt, ":opponent", 0),
(eq, ":destruction", 1),
(party_get_slot, ":party_origin", ":party_no", slot_party_recruiter_origin),
(str_store_party_name_link, s13, ":party_origin"),
(assign, reg10, ":needed"),
(display_log_message, "@Your recruiter who was commissioned to recruit {reg10} recruits to {s13} has been defeated!", 0xFF0000),
(remove_party, ":party_no"),
(assign, ":quit", 1),
(try_end),
(eq, ":quit", 0),
(party_get_num_companions, ":amount", ":party_no"),
(val_sub, ":amount", 1), #the recruiter himself doesn't count.
#daedalus begin
(party_get_slot, ":recruit_faction", ":party_no", slot_party_recruiter_needed_recruits_faction),
#daedalus end
(lt, ":amount", ":needed"), #If the recruiter has less troops than player ordered, new village will be set as target.
(try_begin),
#(get_party_ai_current_behavior, ":ai_bhvr", ":party_no"),
#(eq, ":ai_bhvr", ai_bhvr_hold),
(get_party_ai_object, ":previous_target", ":party_no"),
(get_party_ai_behavior, ":previous_behavior", ":party_no"),
(try_begin),
(neq, ":previous_behavior", ai_bhvr_hold),
(neq, ":previous_target", -1),
(party_set_slot, ":previous_target", slot_village_reserved_by_recruiter, 0),
(try_end),
(assign, ":min_distance", 999999),
(assign, ":closest_village", -1),
(try_for_range, ":village", villages_begin, villages_end),
(store_distance_to_party_from_party, ":distance", ":party_no", ":village"),
(lt, ":distance", ":min_distance"),
(try_begin),
(store_faction_of_party, ":village_current_faction", ":village"),
(assign, ":faction_relation", 100),
(try_begin),
(neq, ":village_current_faction", "$players_kingdom"), # faction relation will be checked only if the village doesn't belong to the player's current faction
(store_relation, ":faction_relation", "$players_kingdom", ":village_current_faction"),
(try_end),
(ge, ":faction_relation", 0),
(party_get_slot, ":village_relation", ":village", slot_center_player_relation),
(ge, ":village_relation", 0),
(party_get_slot, ":volunteers_in_village", ":village", slot_center_volunteer_troop_amount),
(gt, ":volunteers_in_village", 0),
#daedalus begin
(party_get_slot, ":village_faction", ":village", slot_center_original_faction),
(assign,":stop",1),
(try_begin),
(eq,":recruit_faction",-1),
(assign,":stop",0),
(else_try),
(eq, ":village_faction", ":recruit_faction"),
(assign,":stop",0),
(try_end),
(neq,":stop",1),
#daedalus end
(neg|party_slot_eq, ":village", slot_village_state, svs_looted),
(neg|party_slot_eq, ":village", slot_village_state, svs_being_raided),
(neg|party_slot_ge, ":village", slot_village_infested_by_bandits, 1),
(neg|party_slot_eq, ":village", slot_village_reserved_by_recruiter, 1),
(assign, ":min_distance", ":distance"),
(assign, ":closest_village", ":village"),
(try_end),
(try_end),
(gt, ":closest_village", -1),
(party_set_ai_behavior, ":party_no", ai_bhvr_travel_to_party),
(party_set_ai_object, ":party_no", ":closest_village"),
(party_set_slot, ":party_no", slot_party_ai_object, ":closest_village"),
(party_set_slot, ":closest_village", slot_village_reserved_by_recruiter, 1),
(try_end),
(party_get_slot, ":target", ":party_no", slot_party_ai_object),
(gt, ":target", -1),
(store_distance_to_party_from_party, ":distance_from_target", ":party_no", ":target"),
(try_begin),
(store_faction_of_party, ":target_current_faction", ":target"),
(assign, ":faction_relation", 100),
(try_begin),
(neq, ":target_current_faction", "$players_kingdom"), # faction relation will be checked only if the target doesn't belong to the player's current faction
(store_relation, ":faction_relation", "$players_kingdom", ":target_current_faction"),
(try_end),
(ge, ":faction_relation", 0),
(party_get_slot, ":target_relation", ":target", slot_center_player_relation),
(ge, ":target_relation", 0),
#daedalus begin
(party_get_slot, ":target_faction", ":target", slot_center_original_faction),
(assign,":stop",1),
(try_begin),
(eq,":recruit_faction",-1),
(assign,":stop",0),
(else_try),
(eq, ":target_faction", ":recruit_faction"),
(assign,":stop",0),
(try_end),
(neq,":stop",1),
#daedalus end
(neg|party_slot_eq, ":target", slot_village_state, svs_looted),
(neg|party_slot_eq, ":target", slot_village_state, svs_being_raided),
(neg|party_slot_ge, ":target", slot_village_infested_by_bandits, 1),
(le, ":distance_from_target", 0),
(party_get_slot, ":volunteers_in_target", ":target", slot_center_volunteer_troop_amount),
(party_get_slot, ":target_volunteer_type", ":target", slot_center_volunteer_troop_type),
(assign, ":still_needed", ":needed"),
(val_sub, ":still_needed", ":amount"),
(try_begin),
(gt, ":volunteers_in_target", ":still_needed"),
(assign, ":santas_little_helper", ":volunteers_in_target"),
(val_sub, ":santas_little_helper", ":still_needed"),
(assign, ":amount_to_recruit", ":volunteers_in_target"),
(val_sub, ":amount_to_recruit", ":santas_little_helper"),
(assign, ":new_target_volunteer_amount", ":volunteers_in_target"),
(val_sub, ":new_target_volunteer_amount", ":amount_to_recruit"),
(party_set_slot, ":target", slot_center_volunteer_troop_amount, ":new_target_volunteer_amount"),
(party_add_members, ":party_no", ":target_volunteer_type", ":amount_to_recruit"),
(party_set_ai_behavior, ":party_no", ai_bhvr_hold),
(party_set_slot, ":target", slot_village_reserved_by_recruiter, 0),
(else_try),
(le, ":volunteers_in_target", ":still_needed"),
(gt, ":volunteers_in_target", 0),
(party_set_slot, ":target", slot_center_volunteer_troop_amount, -1),
(party_add_members, ":party_no", ":target_volunteer_type", ":volunteers_in_target"),
(party_set_ai_behavior, ":party_no", ai_bhvr_hold),
(party_set_slot, ":target", slot_village_reserved_by_recruiter, 0),
(else_try),
(le, ":volunteers_in_target", 0),
(party_set_ai_behavior, ":party_no", ai_bhvr_hold),
(party_set_slot, ":target", slot_village_reserved_by_recruiter, 0),
(else_try),
(display_message, "@ERROR IN THE RECRUITER KIT SIMPLE TRIGGERS!",0xFF2222),
(party_set_slot, ":target", slot_village_reserved_by_recruiter, 0),
(try_end),
(try_end),
(try_end),
(try_for_parties, ":party_no"),
(party_slot_eq,":party_no", slot_party_type, spt_recruiter),
(party_get_num_companions, ":amount", ":party_no"),
(val_sub, ":amount", 1), #the recruiter himself doesn't count
(party_get_slot, ":needed", ":party_no", slot_party_recruiter_needed_recruits),
(eq, ":amount", ":needed"),
(party_get_slot, ":party_origin", ":party_no", slot_party_recruiter_origin),
(try_begin),
(neg|party_slot_eq, ":party_no", slot_party_ai_object, ":party_origin"),
(party_set_slot, ":party_no", slot_party_ai_object, ":party_origin"),
(party_set_ai_behavior, ":party_no", ai_bhvr_travel_to_party),
(party_set_ai_object, ":party_no", ":party_origin"),
(try_end),
(store_distance_to_party_from_party, ":distance_from_origin", ":party_no", ":party_origin"),
(try_begin),
(le, ":distance_from_origin", 0),
(party_get_num_companion_stacks, ":stacks", ":party_no"),
(try_for_range, ":stack_no", 1, ":stacks"),
(party_stack_get_size, ":size", ":party_no", ":stack_no"),
(party_stack_get_troop_id, ":troop_id", ":party_no", ":stack_no"),
(party_add_members, ":party_origin", ":troop_id", ":size"),
(try_end),
(str_store_party_name_link, s13, ":party_origin"),
(assign, reg10, ":amount"),
(display_log_message, "@A recruiter has brought {reg10} recruits to {s13}.", 0x00FF00),
(remove_party, ":party_no"),
(try_end),
(try_end),
]),
#This trigger makes sure that no village is left reserved forever.
(12,
[
(try_for_range, ":village", villages_begin, villages_end),
(party_set_slot, ":village", slot_village_reserved_by_recruiter, 0),
(try_end),
]),
############################################################################################################################
## Recruiter kit end
############################################################################################################################