OSP Kit SP Mercenary Camps (of Calradia)

Seek n Destroy

Marquis
WBWF&S
Best answers
0
I've started working on this a good while ago and decided it would be nice to have at least a released version that could be of use for some mods.

- What does it add/do?
Current version is mainly a template for modders to add parties on the map where players can recruit troops/mercenaries. Current template for native adds 4 mercenary camps:
  • Geroian Camp - Soldiers from Geroia set up a camp as their base of operations and to oversee their trade caravans in Calradia (kit doesn't actually add Geroian caravans)
  • Balion Keep - A Keep built by the King of Balion for his planned invasion of Calradia, however things went sideways and it was abandoned until some mercenaries from Balion decided to reclaim it.
  • Jumne Bay - Some Warlord from Jumne installed himself in this cozy bay and abandoned himself to a wide range of activities, trading, raiding, pillaging and mercenary work. Whatever he feels like.
  • Ruins of Zendar - A notable Zendarian (not Hareck) makes his return in the hopes of rebuilding the city, in the meantime he leads the Manhunter bands of Calradia and gives boring history lessons.
Also adds horribly written backstory and some new mercenaries based on the M&B lore and my own imagination. Optional 4 downloadable scenes.

Screenshots:

Optional scenes: Clicky

Code:
Only add the parts between # Merc Camp Begin/End, the rest is suggestion of places/references where to put the code
Code:
vaegir_merc_parties_begin  = "p_town_8_mercs"
vaegir_merc_parties_end    = "p_zendar"

# Merc Camp Begin
mercenary_camp_begin  = "p_merc_camp_geroia"
mercenary_camp_end    = "p_merc_camp_end"
# Merc Camp End

This part can be placed nearly anywhere as long as it's before this line:  [anyone,"start", [], "Surrender or die. Make your choice", "battle_reason_stated",[]],
Code:
   # Merc Camp Begin
# Balion	
  [anyone ,"start", [(eq,"$g_talk_troop","trp_konrad"),], "Good day, {sir/madam}. Here to take a look at Balion's finest?", "mercenary_recruit",[]],
# Geroia
  [anyone ,"start", [(eq,"$g_talk_troop","trp_vernid"),], "Courage and discipline makes Geroia's strenght, perhaps you would like a demonstration?", "mercenary_recruit",[]],
# Jumne
  [anyone ,"start", [(eq,"$g_talk_troop","trp_sverre"),], "Speak Southerner, what brings you to our camp?", "mercenary_recruit",[]],
# Zendar
  [anyone ,"start", [(eq,"$g_talk_troop","trp_stavros"),], "What brings you to this cold and desolate place?", "mercenary_recruit",[]],
  
# Generic
  [anyone|plyr,"mercenary_recruit", [], "I wish to recruit some of your men.", "mercenary_buy_troops",[]],

  [anyone,"mercenary_buy_troops", [], "I'll gather the men available, they'll do anything you say as long as you pay them for it.", "mercenary_buy_troops_2",
  [
  (set_mercenary_source_party,"$g_talk_troop_party"),
  (change_screen_buy_mercenaries)  
  ]],
  
  # Backstory
# Balion  
   [anyone|plyr,"mercenary_recruit", [(eq,"$g_talk_troop","trp_konrad"),], "Tell me about the land of Balion and how you arrived in Calradia.", "balion_backstory",[]],
   [anyone,"balion_backstory", [], "The lands of Balion lay beyond the Calradian sea, a great island with vast grasslands separated by mountain ranges, lush forests pepper the land with fair game for our hunters...", "balion_backstory_2",[]], 
   [anyone,"balion_backstory_2", [], "... The Kings of Balion united the tribes under a single banner after fending off several invasions of the Calradian Empire and the Northmen of Jumne. After decades of peace and prosperity they looked for new lands to conquer and Calradia seemed a good place to start.", "balion_backstory_3",[]], 
   [anyone,"balion_backstory_3", [], "This castle here was built as a staging area for the main invasion force but soon after it was built, the King received news of rebelling Earls trying to seize power in his absence. Prompting him to return home and fight a civil war that is still unresolved to this day.", "balion_backstory_4",[]], 
   [anyone,"balion_backstory_4", [], "Myself? I left Balion with a company of men to serve as a mercenary here in Calradia, I enjoyed my time for the most part but I earned myself some nasty wounds that hampered my ability to fight. I had to look for other ways to make money so I claimed this abandoned fortress and through my contacts in Balion I keep a steady flow of Knights and mercenaries that wish to have no part in the civil war but still wish to earn their fame in battle.", "mercenary_recruit",[]], 
# Geroia  
   [anyone|plyr,"mercenary_recruit", [(eq,"$g_talk_troop","trp_vernid"),], "What brings you to Calradia?", "geroia_backstory",[]],
   [anyone,"geroia_backstory", [], "Trade. The Counts of Geroia try to maintain trade posts everywhere possible and Calradia is no exception, even though our first expeditions were a disaster.", "geroia_backstory_2",[]], 
   [anyone,"geroia_backstory_2", [], "Calradia has a serious banditry problem and even though we always escort our caravans with a handful of guards they still managed to overpower them and seize our trade goods.", "geroia_backstory_3",[]], 
   [anyone,"geroia_backstory_3", [], "Our own reputation at stake, the Counts commissioned me to lead a Geroian company to guard our caravans and wage war against bandits. We managed to dissolve the larger groups but many still remain, in the process we managed to earn ourselves a name here in Calradia, Kings seek our services and bandits fear us.", "geroia_backstory_4",[]], 
   [anyone,"geroia_backstory_4", [], "Since most bandits now wouldn't dare attacking our caravans, most of our forces are sought after for other purposes. Be it military trainers, advisors or mercenaries.", "mercenary_recruit",[]], 
# Geroia  
   [anyone|plyr,"mercenary_recruit", [(eq,"$g_talk_troop","trp_sverre"),], "What can you tell me about Jumne and its warriors?", "jumne_backstory",[]],
   [anyone,"jumne_backstory", [], "Hah, here for a tale Southerner? Very well I will oblige. The icy lands of Jumne lay very far to the north-west of Calradia, your Vaegirs complain of their cold winters but theirs is nothing compared to the one in Jumne.", "jumne_backstory_2",[]], 
   [anyone,"jumne_backstory_2", [], "There is no place our explorers haven't reached and no place our warriors haven't fought. Calradia, Balion, Geroia and many other lands suffered the wrath of the Northmen and our name brought fear on all of them.", "jumne_backstory_3",[]], 
   [anyone,"jumne_backstory_3", [], "The Nords may be our descendants from the times we invaded Calradia but they bear little resemblance to the peoples of Jumne, they have forsaken most of their heritage and gods and adopted many customs of the Calradians. Pathetic.", "jumne_backstory_4",[]], 
   [anyone,"jumne_backstory_4", [], "Now the tribes are scattered and there is no great King to unite them towards a common goal so many turn to trading, raiding or mercenary work. I do all three depending on my mood, today you caught me in a good mood so better not waste it.", "mercenary_recruit",[]], 
# Geroia  
   [anyone|plyr,"mercenary_recruit", [(eq,"$g_talk_troop","trp_stavros"),], "What happened here?", "zendar_backstory",[]],
   [anyone,"zendar_backstory", [], "Are you so young that you have never heard of the fall of Zendar? Well then allow me to tell you the tale, not one with a happy ending as you can see...", "zendar_backstory_2",[]], 
   [anyone,"zendar_backstory_2", [], "A few decades ago stood here the city-state of Zendar. A merchant hub where all the peoples of Calradia did trade and it was neutral ground to all, many treaties were signed here and all respected Zendar's neutrality.", "zendar_backstory_3",[]], 
   [anyone,"zendar_backstory_3", [], "The city had no enemies except some nuisible river pirates that attacked the merchant caravans that left the city, since trade was the livelihood of the city this treat had to be contained. I used to lead the guard of Zendar so Constable Hareck, which was the leader of the city at the time, ordered me to lure the main force of river pirates into an ambush to finish them once and for all.", "zendar_backstory_4",[]], 
   [anyone,"zendar_backstory_4", [], "We infiltrated some men in their ranks and left a tip that a lightly guarded caravan of goods would leave the city in the early morning with exquisite goods. The trap was set, they sent in their main force and instead of finding caravans loaded with goods, they were loaded with guards. The battle was fierce, we lost many men but the pirates were ultimately defeated and their leader dead.", "zendar_backstory_5",[]], 
   [anyone,"zendar_backstory_5", [], "One deception led to another however, somehow the Sea Raiders knew we set a trap to the river pirates and allowed us to proceed with it whilst they attacked a Zendar depleted of its defenders. They killed Hareck, slaughtered the populace and burned everything they couldn't carry. We saw the smoke on the horizon but still arrived too late, Zendar was ablaze and would never recover.", "zendar_backstory_6",[]], 
   [anyone,"zendar_backstory_6", [], "The survivors scattered around Calradia and some such as myself vowed that no bandit in Calradia shall know rest whilst the men of Zendar still draw breath. They banded together to form groups of manhunters that would seek to destroy bandits roaming Calradia but what started as a noble goal soon turned into the very thing they sought to destroy, bands of slavers that cared only for gold.", "zendar_backstory_7",[]], 
   [anyone,"zendar_backstory_7", [], "I grew old and tired of that life and now I seek to rebuild, I know I won't see Zendar stand again in my lifetime but perhaps through my efforts I will set its reconstruction in motion. I'm gathering here refugees and the old guard of Zendar so they may make use of their services for a nobler goal.", "mercenary_recruit",[]], 
				
   [anyone,"mercenary_buy_troops_2", [], "Anything else?", "mercenary_recruit",[]], 
   [anyone|plyr ,"mercenary_recruit", [],  "I'll be on my way.", "close_window", []],		
  # Merc Camp End

Code:
      (call_script, "script_update_tavern_minstrels"),
      (call_script, "script_update_booksellers"),
# Merc Camp Begin  
      (try_for_range, ":camp_no", mercenary_camp_begin, mercenary_camp_end),
		(call_script, "script_refresh_mercenary_camp_troops",":camp_no"),
      (try_end),	

# Merc Camp End
Code:
...
         (else_try),
           (eq, "$g_encountered_party", "p_camp_bandits"),           
           (jump_to_menu, "mnu_camp"),
# Merc Camp Begin  			  
         (else_try),
           (is_between, "$g_encountered_party", mercenary_camp_begin, mercenary_camp_end),       
           (jump_to_menu, "mnu_mercenary_camp"),		
# Merc Camp End  			  
         (else_try),
           (jump_to_menu, "mnu_simple_encounter"),
...
Code:
# Merc Camp Begin 	
  # script_refresh_mercenary_camp_troops
  # Input: arg1 = camp_no
  # Output: none
  ("refresh_mercenary_camp_troops",
    [
      (store_script_param_1, ":camp_no"),
      (assign, ":ideal_size", 50), # Past this value the troop pool of the camp will be reset

      (try_begin),
        (eq, ":camp_no", "p_merc_camp_geroia"),	
        (assign, ":party_template", "pt_merc_camp_geroia_troops"), 	
      (else_try),
        (eq, ":camp_no", "p_merc_camp_balion"),	
        (assign, ":party_template", "pt_merc_camp_balion_troops"), 	
      (else_try),
        (eq, ":camp_no", "p_merc_camp_jumne"),	
        (assign, ":party_template", "pt_merc_camp_jumne_troops"), 	      
      (else_try),
        (eq, ":camp_no", "p_merc_camp_zendar"),	
        (assign, ":party_template", "pt_merc_camp_zendar_troops"), 			  
      (try_end),
		
        (party_get_num_companions, ":party_size", ":camp_no"),	
      (try_begin),
        (gt, ":party_size", ":ideal_size"), # We're past the ideal number of troops in the camp
        (party_clear,":camp_no"), # Reset the troop pool
        (party_add_template, ":camp_no", ":party_template"),	  
      (else_try),
        (party_add_template, ":camp_no", ":party_template"),		  
      (try_end), 
  ]),
 # Merc Camp End

Place it at the bottom of the file before the closing "]" in order to avoid the added parties to be caught in an existing party loop.
Code:
# Merc Camp Begin  
    ("merc_camp_geroia", "Geroian Camp",  icon_camp|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(-45.27, 49.45),[], 100),
    ("merc_camp_balion", "Balion Keep",  icon_castle_a|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(-132.4, -53.3),[], 100),
    ("merc_camp_jumne", "Jumne Bay",  icon_ship_on_land|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(-41.16, 117),[], 100),
    ("merc_camp_zendar", "Ruins of Zendar",  icon_village_burnt_a|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(18,60),[], 100),
    ("merc_camp_end"                 ,"{!}last_spawn_point",    pf_disabled|pf_is_static, no_menu, pt_none, fac_commoners,0,ai_bhvr_hold,0,(0., 0),[(trp_looter,15,0)]),
# Merc Camp End 

If you don't want to make use of scenes you can use the default encounter one and instead of using change_screen_mission use change_screen_map_conversation set up to the correct troop, Diplomacy has a good example of this with the "Meet the Village Elder" menu.
Code:
# Merc Camp Begin   
  (
    "mercenary_camp",0,
    "You approach the mercenary camp...",
    "none",
    [],
    [
      ("enter_geroian_camp",[(eq, "$g_encountered_party", "p_merc_camp_geroia"),],"Visit the Geroian Camp.",[
		(modify_visitors_at_site,"scn_geroian_camp"),
		(reset_visitors),    
		(assign, "$g_mt_mode", tcm_default),   		
		(set_jump_entry, 1),
		(set_visitor, 2, "trp_vernid"),
		(set_visitor, 5, "trp_geroia_sergeant"),
		(set_visitor, 6, "trp_geroia_swordsman"),
		(set_visitor, 7, "trp_geroia_swordsman"),
		(set_visitor, 8, "trp_geroia_pavisier"),
		(set_visitor, 9, "trp_geroia_pavisier"),
		(set_jump_mission,"mt_visit_town_castle"),
		(jump_to_scene,"scn_geroian_camp"),
		(change_screen_mission),		
	]),	
      ("enter_balion_camp",[(eq, "$g_encountered_party", "p_merc_camp_balion"),],"Enter the castle of the Knights of Balion.",[
		(modify_visitors_at_site,"scn_balion_camp"),
		(reset_visitors),    
		(assign, "$g_mt_mode", tcm_default),   		
		(set_jump_entry, 1),
		(set_visitor, 2, "trp_konrad"),

		(set_visitor, 5, "trp_balion_knight"),
		(set_visitor, 6, "trp_balion_infantry"),
		(set_visitor, 7, "trp_balion_infantry"),
		(set_visitor, 8, "trp_balion_longbowman"),
		(set_visitor, 9, "trp_balion_longbowman"),
		(set_jump_mission,"mt_visit_town_castle"),
		(jump_to_scene,"scn_balion_camp"),
		(change_screen_mission),		
	]),	
      ("enter_jumne_camp",[(eq, "$g_encountered_party", "p_merc_camp_jumne"),],"Enter the Northmen camp.",[
		(modify_visitors_at_site,"scn_jumne_camp"),
		(reset_visitors),    
		(assign, "$g_mt_mode", tcm_default),   		
		(set_jump_entry, 1),
		(set_visitor, 2, "trp_sverre"),

		(set_visitor, 5, "trp_jumne_huscarl"),
		(set_visitor, 6, "trp_jumne_raider"),
		(set_visitor, 7, "trp_jumne_raider"),
		(set_visitor, 8, "trp_jumne_raider"),
		(set_visitor, 9, "trp_jumne_skirmisher"),
		(set_jump_mission,"mt_visit_town_castle"),
		(jump_to_scene,"scn_jumne_camp"),
		(change_screen_mission),		
	]),	
      ("enter_zendar_camp",[(eq, "$g_encountered_party", "p_merc_camp_zendar"),],"Enter the ruins of Zendar.",[
		(modify_visitors_at_site,"scn_zendar_camp"),
		(reset_visitors),    
		(assign, "$g_mt_mode", tcm_default),   		
		(set_jump_entry, 1),
		(set_visitor, 2, "trp_stavros"),

		(set_visitor, 5, "trp_slaver_chief"),
		(set_visitor, 6, "trp_manhunter"),
		(set_visitor, 7, "trp_manhunter"),
		(set_visitor, 8, "trp_manhunter"),
		(set_visitor, 9, "trp_manhunter"),
		(set_jump_mission,"mt_visit_town_castle"),
		(jump_to_scene,"scn_zendar_camp"),
		(change_screen_mission),		
	]),	
      ("leave",[],"Leave.",[(leave_encounter),(change_screen_return)]),
    ]
  ),  
# Merc Camp End 

You can hijack an existing trigger instead of adding a new one
Code:
# Merc Camp Begin	
# Replenish camps every 3 days
   (24 * 3,
   [
      (try_for_range, ":camp_no", mercenary_camp_begin, mercenary_camp_end),
	(call_script, "script_refresh_mercenary_camp_troops", ":camp_no"),
      (try_end),
    ]),
# Merc Camp End

Code:
  # Merc Camp Begin
    ("merc_camp_geroia_troops", "{!}Geroian Mercs", 0, 0, fac_commoners, 0, [(trp_geroia_swordsman,5,10),(trp_geroia_pikeman,4,8),(trp_geroia_pavisier,4,8),(trp_geroia_sergeant,1,2)]),
    ("merc_camp_balion_troops", "{!}Balion Mercs", 0, 0, fac_commoners, 0, [(trp_balion_infantry,5,12),(trp_balion_longbowman,4,10),(trp_balion_knight,1,6)]),
    ("merc_camp_jumne_troops", "{!}Jumne Mercs", 0, 0, fac_commoners, 0, [(trp_jumne_raider,5,12),(trp_jumne_skirmisher,4,10),(trp_jumne_huscarl,1,6)]),
    ("merc_camp_zendar_troops", "{!}Zendar Mercs", 0, 0, fac_commoners, 0, [(trp_manhunter,5,12),(trp_slave_hunter,4,10),(trp_slave_crusher,1,6)]),
# Merc Camp End

Code:
# Merc Camp Begin	 
  ("geroian_camp",sf_generate,"none", "none", (0,0),(100,100),-100,"0x000000003000050000064592000063c100001bee00006f14",
    [],[],"outer_terrain_plain"),	
  ("balion_camp",sf_generate,"none", "none", (0,0),(100,100),-100,"0x000000003000050000064592000063c100001bee00006f14",
    [],[],"outer_terrain_beach"),	 	
  ("jumne_camp",sf_generate,"none", "none", (0,0),(100,100),-100,"0x00000000b00562e200040900000063f40000679f00006cda",
    [],[],"sea_outer_terrain_1"),	
  ("zendar_camp",sf_generate,"none", "none", (0,0),(100,100),-100,"0x000000003000050000064592000063c100001bee00006f14",
    [],[],"outer_terrain_snow"),		 
# Merc Camp End

Code:
# Merc Camp Begin	
# Balion
   ["konrad","Konrad","Konrad", tf_hero,scn_balion_camp|entry(2), reserved,fac_commoners,
   [itm_sword_two_handed_a, itm_mace_4, itm_tab_shield_kite_d,
    itm_bascinet_3, itm_scale_armor, itm_mail_mittens, itm_mail_boots],
   str_18|agi_15|int_12|cha_12|level(24),wpex(130,150,130,30,50,90),knows_riding_2|knows_athletics_5|knows_shield_4|knows_weapon_master_5|knows_power_throw_3|knows_power_strike_6|knows_ironflesh_6,0x000000081700205434db6df4636db8e400000000001db6e30000000000000000, swadian_face_old_2],
  ["balion_longbowman","Balion Longbowman","Balion Longbowmen",tf_guarantee_ranged|tf_guarantee_boots|tf_guarantee_armor,0,0,fac_commoners,
   [itm_arena_helmet_red,itm_arena_helmet_green,itm_norman_helmet,itm_arming_cap,itm_hood_a,itm_hood_b,itm_hood_c,itm_balion_leather_gloves,itm_aketon_green,itm_padded_cloth,itm_red_gambeson,itm_ankle_boots,itm_woolen_hose,itm_long_bow,itm_balion_arrows,itm_balion_sword,itm_mace_2,itm_hammer,itm_hand_axe],
   str_13 | agi_8 | int_4 | cha_4|level(20),wp_one_handed (115) | wp_two_handed (115) | wp_polearm (115) | wp_archery (130) | wp_crossbow (115) | wp_throwing (115),knows_power_strike_3|knows_ironflesh_4|knows_power_draw_5|knows_athletics_7,nord_face_middle_1, nord_face_older_2],
  ["balion_infantry","Balion Infantry","Balion Infantry",tf_guarantee_shield|tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_helmet,0,0,fac_commoners,
   [itm_mail_coif,itm_norman_helmet,itm_helmet_with_neckguard,itm_arena_helmet_red,itm_arena_helmet_green,itm_arena_helmet_red,itm_arena_helmet_yellow,itm_mail_hauberk,itm_mail_shirt,itm_mail_mittens,itm_mail_chausses,itm_norman_shield_1,itm_norman_shield_2,itm_norman_shield_3,itm_norman_shield_4,itm_norman_shield_5,itm_norman_shield_6,itm_norman_shield_7,itm_norman_shield_8,itm_balion_sword,itm_balion_sword_b,itm_one_handed_battle_axe_a,itm_war_spear],
   def_attrib|level(24),wp_melee(125),knows_common|knows_ironflesh_2|knows_power_strike_3|knows_shield_3|knows_athletics_4,swadian_face_middle_1, swadian_face_old_2],
  ["balion_knight","Balion Knight","Balion Knights",tf_mounted|tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_helmet|tf_guarantee_horse|tf_guarantee_shield,0,0,fac_kingdom_1,
   [itm_mail_coif,itm_norman_helmet,itm_guard_helmet,itm_arena_helmet_red,itm_arena_helmet_green,itm_arena_helmet_red,itm_arena_helmet_yellow,itm_mail_hauberk,itm_haubergeon,itm_mail_mittens,itm_mail_chausses,itm_lance,itm_balion_longsword,itm_one_handed_battle_axe_a,itm_norman_shield_8,itm_norman_shield_7,itm_norman_shield_6,itm_norman_shield_5,itm_norman_shield_4,itm_norman_shield_3,itm_norman_shield_2,itm_norman_shield_1,itm_hunter,itm_balion_horse],
   def_attrib|level(23),wp_melee(115),knows_common|knows_riding_4|knows_ironflesh_2|knows_shield_2|knows_power_strike_3,swadian_face_young_1, swadian_face_old_2],	
# Geroia
 ["vernid","Vernid","Vernid", tf_hero, scn_geroian_camp|entry(2),reserved, fac_commoners,[itm_linen_tunic,itm_hide_boots,itm_club, itm_saddle_horse],
   str_14|agi_17|int_6|cha_30|level(25),wpex(240,130,170,150,170,90),knows_tracking_10|knows_engineer_10|knows_first_aid_10|knows_surgery_10|knows_wound_treatment_10|knows_tactics_10|knows_trainer_10|knows_looting_10|
   knows_trade_2|knows_weapon_master_1|knows_ironflesh_1|knows_wound_treatment_1|knows_athletics_5|knows_first_aid_1|knows_leadership_1|knows_riding_4|knows_power_strike_7|knows_power_draw_3|knows_power_throw_3,
   0x000000019d004001570b893712c8d28d00000000001dc8990000000000000000],
  ["geroia_swordsman","Geroian Swordsman","Geroian Swordsmen",tf_guarantee_shield|tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_helmet,0,0,fac_commoners,
   [itm_byzantion_helmet_a,itm_geroia_bascinet,itm_geroia_bascinet_b,itm_mail_coif,itm_byzantion_helmet_a,itm_light_mail_and_plate,itm_mail_boots,itm_mail_chausses,itm_mail_mittens,itm_geroia_broadsword,itm_geroia_broadsword,itm_geroia_arming_sword,itm_tab_shield_pavise_d],
   def_attrib|level(20),wp_melee(105),knows_common|knows_ironflesh_3|knows_power_strike_2|knows_shield_3|knows_athletics_3,swadian_face_middle_1, swadian_face_old_2],	
  ["geroia_pikeman","Geroian Pikeman","Geroian Pikemen",tf_guarantee_shield|tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_helmet,0,0,fac_commoners,
   [itm_byzantion_helmet_a,itm_geroia_bascinet,itm_geroia_bascinet_b,itm_mail_coif,itm_byzantion_helmet_a,itm_mail_hauberk,itm_mail_and_plate,itm_mail_mittens,itm_mail_chausses,itm_mail_boots,itm_pike,itm_ashwood_pike,itm_awlpike_long],
   def_attrib|level(20),wp_melee(105),knows_common|knows_ironflesh_3|knows_power_strike_2|knows_shield_3|knows_athletics_3,swadian_face_middle_1, swadian_face_old_2],	
  ["geroia_sergeant","Geroian Sergeant","Geroian Sergeant",tf_guarantee_shield|tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_helmet,0,0,fac_commoners,
   [itm_bascinet_2,itm_bascinet_3,itm_full_helm,itm_brigandine_red,itm_brigandine_red,itm_geroia_surcoat_over_mail,itm_mail_mittens,itm_gauntlets,itm_iron_greaves,itm_sword_two_handed_a,itm_bastard_sword_b,itm_bec_de_corbin_a],
   def_attrib|level(25),wp_melee(135),knows_common|knows_ironflesh_4|knows_power_strike_4|knows_athletics_3,swadian_face_middle_1, swadian_face_old_2],		
  ["geroia_pavisier","Geroian Pavisier","Geroian Pavisiers",tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_helmet|tf_guarantee_ranged|tf_guarantee_shield,0,0,fac_kingdom_5,
   [itm_byzantion_helmet_a,itm_mail_coif,itm_geroia_bascinet,itm_geroia_bascinet_b,itm_padded_leather,itm_leather_jerkin,itm_leather_gloves,itm_leather_boots,itm_ankle_boots,itm_geroia_arming_sword,itm_bolts,itm_hammer,itm_hatchet,itm_geroia_crossbow,itm_geroia_heavy_crossbow,itm_tab_shield_pavise_c],
   def_attrib|level(20),wp_one_handed (100) | wp_two_handed (100) | wp_polearm (100) | wp_archery (100) | wp_crossbow (130) | wp_throwing (100),knows_common|knows_ironflesh_2|knows_shield_3|knows_power_strike_3|knows_athletics_4,rhodok_face_middle_1, rhodok_face_older_2],
# Jumne	
  ["sverre","Sverre","Sverre", tf_hero,scn_jumne_camp|entry(2),reserved, fac_commoners,
   [itm_long_axe, itm_sword_viking_1, itm_light_throwing_axes, itm_tab_shield_round_d,
    itm_nordic_fighter_helmet, itm_byrnie, itm_leather_gloves, itm_leather_boots],
   str_15|agi_15|int_12|cha_12|level(21),wpex(110,130,110,80,15,110),knows_riding_1|knows_athletics_5|knows_shield_4|knows_weapon_master_5|knows_power_draw_2|knows_power_throw_4|knows_power_strike_5|knows_ironflesh_5,0x000000048a00024723134e24cb51c91b00000000001dc6aa0000000000000000, swadian_face_old_2],
  ["jumne_huscarl","Jumne Huskarl","Jumne Huskarls",tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_shield|tf_guarantee_helmet,0,0,fac_commoners,
   [itm_nordic_huscarl_helmet,itm_nordic_fighter_helmet,itm_byrnie,itm_scale_armor,itm_mail_boots,itm_leather_boots,itm_mail_mittens,itm_long_axe_c,itm_tab_shield_round_d,itm_jumne_noble_sword,itm_one_handed_battle_axe_a],
   def_attrib|level(28),wp(175),knows_ironflesh_7|knows_power_strike_8|knows_riding_2|knows_athletics_6|knows_shield_6,nord_face_middle_1, nord_face_older_2],
  ["jumne_raider","Jumne Raider","Jumne Raiders",tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_shield|tf_guarantee_helmet,0,0,fac_kingdom_4,
   [itm_nordic_archer_helmet,itm_nordic_veteran_archer_helmet,itm_nordic_footman_helmet,itm_nordic_fighter_helmet,itm_leather_jerkin,itm_leather_armor,itm_leather_boots,itm_wooden_shield,itm_nordic_shield,itm_jumne_shield_a,itm_jumne_shield_b,itm_one_handed_war_axe_a,itm_one_handed_war_axe_b,itm_jumne_longsword_a,itm_jumne_longsword_b],
   def_attrib|level(15),wp(110),knows_ironflesh_3|knows_power_strike_4|knows_athletics_3|knows_shield_2,nord_face_young_1, nord_face_old_2],
  ["jumne_skirmisher","Jumne Skirmisher","Jumne Skirmishers",tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_shield|tf_guarantee_helmet|tf_guarantee_ranged,0,0,fac_kingdom_4,
   [itm_nordic_archer_helmet,itm_nordic_veteran_archer_helmet,itm_rawhide_coat,itm_pelt_coat,itm_ankle_boots,itm_leather_covered_round_shield,itm_javelin,itm_javelin,itm_throwing_axes,itm_hand_axe,itm_hatchet,itm_sword_viking_2_small],
   def_attrib|level(12),wp_one_handed (100) | wp_two_handed (100) | wp_polearm (100) | wp_archery (100) | wp_crossbow (100) | wp_throwing (130),knows_ironflesh_3|knows_power_strike_3|knows_power_throw_4|knows_athletics_3|knows_shield_2,nord_face_young_1, nord_face_old_2],
# Zendar
  ["stavros","Stavros","Stavros", tf_hero,scn_zendar_camp|entry(2),reserved,fac_commoners,
   [itm_heavy_crossbow, itm_bolts, itm_sword_medieval_b_small, itm_tab_shield_pavise_c,
    itm_nasal_helmet, itm_padded_leather, itm_leather_gloves, itm_leather_boots],
   str_12|agi_15|int_15|cha_12|level(21),wpex(100,70,70,30,140,80),knows_horse_archery_2|knows_riding_2|knows_athletics_5|knows_shield_3|knows_weapon_master_5|knows_power_throw_2|knows_power_strike_4|knows_ironflesh_4,0x0000000e1400659226e34dcaa46e36db00000000001e391b0000000000000000, swadian_face_old_2],
# Merc Camp End

The items added are unused Native resources, just to add some diversity to the added troops if one decides to use them of course.
Code:
# Merc Camp Begin
# Balion Items
["hood_a", "Hood", [("hood_a",0)],itp_type_head_armor|itp_civilian,0,9, weight(1)|abundance(100)|head_armor(10)|body_armor(0)|leg_armor(0)|difficulty(0),imodbits_cloth],
["balion_leather_gloves","Leather Gloves", [("lthr_glove_L",0)], itp_type_hand_armor,0, 90, weight(0.25)|abundance(120)|body_armor(2)|difficulty(0),imodbits_cloth],

["balion_arrows","Arrows", [("arrow",0),("flying_missile",ixmesh_flying_ammo),("arena_quiver", ixmesh_carry)], itp_type_arrows|itp_default_ammo, itcf_carry_quiver_back, 172,weight(3)|abundance(160)|weapon_length(95)|thrust_damage(3,pierce)|max_ammo(30),imodbits_missile],
["balion_sword", "Balion Sword",[("sword_norman",0),("sword_norman_scabbard", ixmesh_carry),("sword_norman_rusty",imodbit_rusty),("sword_norman_rusty_scabbard", ixmesh_carry|imodbit_rusty)],itp_type_one_handed_wpn|itp_primary, itc_longsword|itcf_carry_sword_left_hip|itcf_show_holster_when_drawn, 183 , weight(1.25)|difficulty(0)|spd_rtng(103) | weapon_length(91)|swing_damage(27 , cut) | thrust_damage(23 ,  pierce),imodbits_sword ],
["balion_sword_b", "Balion Sword", [("sword_medieval_d",0),("sword_medieval_d_scabbard", ixmesh_carry)], itp_type_one_handed_wpn|itp_primary, itc_longsword|itcf_carry_sword_left_hip|itcf_show_holster_when_drawn,264 , weight(1.5)|difficulty(0)|spd_rtng(99) | weapon_length(95)|swing_damage(29 , cut) | thrust_damage(22 ,  pierce),imodbits_sword ],
["balion_longsword", "Balion Longsword", [("sword_medieval_a_long",0),("sword_medieval_a_long_scabbard", ixmesh_carry)], itp_type_one_handed_wpn|itp_primary, itc_longsword|itcf_carry_sword_left_hip|itcf_show_holster_when_drawn, 292 , weight(1.5)|difficulty(0)|spd_rtng(97) | weapon_length(105)|swing_damage(30 , cut) | thrust_damage(27 ,  pierce),imodbits_sword ],
 
 ["balion_horse","Horse", [("horse_c",0),("horse_c",imodbits_horse_good)], itp_type_horse, 0, 810,abundance(60)|hit_points(160)|body_armor(18)|difficulty(3)|horse_speed(43)|horse_maneuver(44)|horse_charge(24)|horse_scale(108),imodbits_horse_basic|imodbit_champion],
# Geroian Items
["geroia_bascinet", "Bascinet", [("bascinet_avt_new1",0)], itp_type_head_armor   ,0, 479 , weight(2.25)|abundance(100)|head_armor(45)|body_armor(0)|leg_armor(0)|difficulty(8) ,imodbits_plate ],
["geroia_bascinet_b", "Bascinet", [("bascinet_avt_new2",0)], itp_type_head_armor   ,0, 479 , weight(2.25)|abundance(100)|head_armor(45)|body_armor(0)|leg_armor(0)|difficulty(8) ,imodbits_plate ],
["geroia_surcoat_over_mail", "Surcoat over Mail", [("surcoat_over_mail",0)],  itp_type_body_armor  |itp_covers_legs ,0,1720 , weight(22)|abundance(100)|head_armor(0)|body_armor(43)|leg_armor(14)|difficulty(7) ,imodbits_armor ],
["geroia_broadsword",  "Broadsword", [("broadsword",0),("scab_broadsword", ixmesh_carry)], itp_type_one_handed_wpn|itp_primary, itc_scimitar|itcf_carry_sword_left_hip|itcf_show_holster_when_drawn, 122 , weight(2.5)|difficulty(8)|spd_rtng(98) | weapon_length(100)|swing_damage(27 , cut) | thrust_damage(0 ,  pierce),imodbits_sword ],
["geroia_arming_sword", "Arming Sword", [("b_long_sword",0),("scab_longsw_b", ixmesh_carry)], itp_type_one_handed_wpn|itp_primary, itc_longsword|itcf_carry_sword_left_hip|itcf_show_holster_when_drawn, 156 , weight(1.5)|difficulty(0)|spd_rtng(101) | weapon_length(100)|swing_damage(25 , cut) | thrust_damage(22 ,  pierce),imodbits_sword ],
["geroia_crossbow",         "Crossbow",         [("light_crossbow",0)], itp_type_crossbow |itp_primary|itp_two_handed|itp_cant_reload_on_horseback ,itcf_shoot_crossbow|itcf_carry_crossbow_back, 182 , weight(3)|difficulty(8)|spd_rtng(43) | shoot_speed(66) | thrust_damage(49,pierce)|max_ammo(1),imodbits_crossbow ],
["geroia_heavy_crossbow", "Heavy Crossbow", [("heavy_crossbow",0)], itp_type_crossbow |itp_primary|itp_two_handed|itp_cant_reload_on_horseback ,itcf_shoot_crossbow|itcf_carry_crossbow_back, 349 , weight(3.5)|difficulty(9)|spd_rtng(41) | shoot_speed(68) | thrust_damage(58 ,pierce)|max_ammo(1),imodbits_crossbow ],
# Jumne Items
["jumne_noble_sword", "Nordic Noble Sword", [("viking_sword",0),("scab_vikingsw", ixmesh_carry)], itp_type_one_handed_wpn|itp_primary, itc_longsword|itcf_carry_sword_left_hip|itcf_show_holster_when_drawn, 224 , weight(1.5)|difficulty(0)|spd_rtng(99) | weapon_length(98)|swing_damage(30 , cut) | thrust_damage(18 ,  pierce),imodbits_sword ],
["jumne_longsword_a", "Nordic Sword", [("sword_viking_c_long",0),("sword_viking_c_long_scabbard ", ixmesh_carry)], itp_type_one_handed_wpn|itp_primary, itc_longsword|itcf_carry_sword_left_hip|itcf_show_holster_when_drawn,198 , weight(1.5)|difficulty(0)|spd_rtng(95) | weapon_length(101)|swing_damage(28 , cut) | thrust_damage(23 ,  pierce),imodbits_sword ] ,
["jumne_longsword_b", "Nordic Sword", [("sword_viking_a_long",0),("sword_viking_a_long_scabbard", ixmesh_carry)], itp_type_one_handed_wpn|itp_primary, itc_longsword|itcf_carry_sword_left_hip|itcf_show_holster_when_drawn,183 , weight(1.5)|difficulty(0)|spd_rtng(97) | weapon_length(101)|swing_damage(29 , cut) | thrust_damage(19 ,  pierce),imodbits_sword ],
 ["jumne_shield_a", "Round Shield", [("shield_round_c",0)], itp_type_shield|itp_wooden_parry, itcf_carry_round_shield,  64 , weight(2)|hit_points(400)|body_armor(1)|spd_rtng(100)|shield_width(50),imodbits_shield ],
["jumne_shield_b", "Round Shield", [("shield_wood_b",0)], itp_type_shield|itp_wooden_parry, itcf_carry_round_shield,  64 , weight(2)|hit_points(400)|body_armor(1)|spd_rtng(100)|shield_width(50),imodbits_shield ],
 # Merc Camp End

You are free to use and modify the code posted, credits are always nice but not mandatory.
I used Sword of Damocles for the old M&B as inspiration, I really liked going to the mercenary camps in that mod there is also a submod for Floris with mercenary camps but I haven't tried it.
I'm not sure if it's worth it to expand the Native template provided, I had plans to have pretty much all the Quick Battle Characters have their own camp/outpost but Native resources are limited and I prefer to let it to modders to make things the way they like it.

Speaking of which, Totenkopf900/Crossbow Pig made some additions that you might want to check out: Post
 

Duh

Duke
M&BWB
Best answers
0
Cheers for sharing this SnD! We will give it a bit of time in the main forge area for exposure before moving it (unless you prefer otherwise).

Do note the new guidelines for OSP/LSP in the Realm: https://forums.taleworlds.com/index.php/topic,374313.0.html

OSP provides your permission for ALL purposes inside and outside this game.
 

Seek n Destroy

Marquis
WBWF&S
Best answers
0
Thanks, I've previously read the guidelines and I stand with the OSP tag. I'm not in a hurry to get it moved, I just hope it can be of use to someone  :smile:
 

Redleg

Sergeant Knight at Arms
Best answers
0
Thank you for posting this.  I might use it in the next full version of my mod, with your permission.
 

Crossbow Pig

Master Knight
Best answers
0
Okay, here is some code I added to add more flavor to this, the code will make some parties appear on the map close to their respective camps, it will also spawn one major company, at the start they are neutral to the player but you can attack them.

module_factions
Code:
  ("geroia","Geroian", 0, 0.5,[("outlaws",-0.6)], [], 0x0000FF),
  ("jumne","Jumne", 0, 0.5,[("manhunters",-0.6)], [], 0x0E470E),
  ("balion","Balion", 0, 0.5,[("outlaws",-0.6)], [], 0x6FA8DC),
  ("adventurers","Adventurers", 0, 0.5,[("outlaws",-0.6),("jumne",-0.6),("geroia",-0.6),("balion",-0.6)], [], 0x4B4B4B),

module_parties
Code:
  ("geroian_company_spawn_point"   ,"the area ",pf_disabled|pf_is_static, no_menu, pt_none, fac_geroia,0,ai_bhvr_hold,0,(-45.27,49.45),[(trp_looter,15,0)]),
  
  ("jumne_company_spawn_point"   ,"the coast ",pf_disabled|pf_is_static, no_menu, pt_none, fac_jumne,0,ai_bhvr_hold,0,(-41.16, 117),[(trp_looter,15,0)]),

  ("balion_company_spawn_point"   ,"the highlands ",pf_disabled|pf_is_static, no_menu, pt_none, fac_balion,0,ai_bhvr_hold,0,(-132.4,-53.3),[(trp_looter,15,0)]),
    
  ("adventurer_company_spawn_point"   ,"the area ",pf_disabled|pf_is_static, no_menu, pt_none, fac_adventurers,0,ai_bhvr_hold,0,(18,60),[(trp_looter,15,0)]),
 

module_party_templates
Code:
 ("geroian_company","Geroian Patrol",icon_axeman|carries_goods(2),0,fac_geroia,soldier_personality,[(trp_geroia_sergeant,1,1),(trp_geroia_swordsman,7,21),(trp_geroia_pavisier,7,15)]),
 ("geroian_army","Geroian Company",icon_gray_knight|carries_goods(5),0,fac_geroia,soldier_personality,[(trp_geroia_sergeant,15,28),(trp_geroia_swordsman,50,100),(trp_geroia_pavisier,25,50)]),


 ("balion_company","Balion Patrol",icon_axeman|carries_goods(2),0,fac_balion,soldier_personality,[(trp_balion_knight,1,2),(trp_balion_infantry,7,21),(trp_balion_longbowman,7,15)]),
 ("balion_army","Balion Company",icon_gray_knight|carries_goods(5),0,fac_balion,soldier_personality,[(trp_balion_knight,15,25),(trp_balion_infantry,50,100),(trp_balion_longbowman,25,50)]),


 ("jumne_company","Jumne Raiders",icon_axeman|carries_goods(2),0,fac_jumne,soldier_personality,[(trp_jumne_huscarl,1,1),(trp_jumne_raider,9,25),(trp_jumne_skirmisher,5,12)]),
 ("jumne_army","Jumne Army",icon_axeman|carries_goods(5),0,fac_jumne,soldier_personality,[(trp_jumne_huscarl,15,35),(trp_jumne_raider,50,120),(trp_jumne_skirmisher,25,50)]),

 ("adventurer_company","Adventurers",icon_gray_knight|carries_goods(2),0,fac_adventurers,soldier_personality,[(trp_mercenary_cavalry,1,5),(trp_hired_blade,7,21),(trp_mercenary_crossbowman,5,15)]),
 ("adventurer_army","Steel Company",icon_gray_knight|carries_goods(5),0,fac_adventurers,soldier_personality,[(trp_mercenary_cavalry,15,28),(trp_hired_blade,50,100),(trp_mercenary_crossbowman,25,50)]),

module_constants search for num_sea_raider_spawn_points and place bellow
Code:
num_geroian_company_spawn_points = 1
num_balion_company_spawn_points = 1
num_jumne_company_spawn_points = 1
num_adventurer_company_spawn_points = 1

module_scripts at the bottom
Code:
  #script_spawn_merc_patrols
  # INPUT: none
  # OUTPUT: none
  ("spawn_merc_patrols",
    [
     (try_begin),
       (store_num_parties_of_template, ":num_parties", "pt_geroian_company"),
       (lt,":num_parties",4),
       (store_random,":spawn_point",num_geroian_company_spawn_points),
       (val_add,":spawn_point","p_geroian_company_spawn_point"),
       (set_spawn_radius, 10),
       (spawn_around_party,":spawn_point","pt_geroian_company"),
     (assign,"$geroian_company",reg(0)),
     (party_set_banner_icon, "$geroian_company", "icon_banner_94"),
     (try_end),
    
    (try_begin),
       (store_num_parties_of_template, ":num_parties", "pt_balion_company"),
       (lt,":num_parties",4),
       (store_random,":spawn_point",num_balion_company_spawn_points),
       (val_add,":spawn_point","p_balion_company_spawn_point"),
       (set_spawn_radius, 10),
       (spawn_around_party,":spawn_point","pt_balion_company"),
     (assign,"$balion_company",reg(0)),
     (party_set_banner_icon, "$balion_company", "icon_banner_121"),
     (try_end),
 
    (try_begin),
       (store_num_parties_of_template, ":num_parties", "pt_jumne_company"),
       (lt,":num_parties",5),
       (store_random,":spawn_point",num_jumne_company_spawn_points),
       (val_add,":spawn_point","p_jumne_company_spawn_point"),
       (set_spawn_radius, 10),
       (spawn_around_party,":spawn_point","pt_jumne_company"),
     (assign,"$jumne_company",reg(0)),
     (party_set_banner_icon, "$jumne_company", "icon_banner_106"),
     (try_end),

    (try_begin),
       (store_num_parties_of_template, ":num_parties", "pt_adventurer_company"),
       (lt,":num_parties",4),
       (store_random,":spawn_point",num_adventurer_company_spawn_points),
       (val_add,":spawn_point","p_adventurer_company_spawn_point"),
       (set_spawn_radius, 10),
       (spawn_around_party,":spawn_point","pt_adventurer_company"),
     (assign,"$adventurer_company",reg(0)),
     (party_set_banner_icon, "$adventurer_company", "icon_banner_124"),
     (try_end),

]),


  #script_spawn_merc_company
  # INPUT: none
  # OUTPUT: none
  ("spawn_merc_company",
    [
    
    #geroia
    (try_begin),
       (store_num_parties_of_template, ":num_parties", "pt_geroian_army"),
       (lt,":num_parties",1),
       (store_random,":spawn_point",num_geroian_company_spawn_points),
       (val_add,":spawn_point","p_geroian_company_spawn_point"),
       (spawn_around_party,":spawn_point","pt_geroian_army"),
     (assign,"$geroian_army",reg(0)),
     (party_set_banner_icon, "$geroian_army", "icon_banner_94"),
     (try_end),
  
#balion
    (try_begin),
       (store_num_parties_of_template, ":num_parties", "pt_balion_army"),
       (lt,":num_parties",1),
       (store_random,":spawn_point",num_balion_company_spawn_points),
       (val_add,":spawn_point","p_balion_company_spawn_point"),
       (spawn_around_party,":spawn_point","pt_balion_army"),
     (assign,"$balion_army",reg(0)),
     (party_set_banner_icon, "$balion_army", "icon_banner_121"),
     (try_end),

#jumne
    (try_begin),
       (store_num_parties_of_template, ":num_parties", "pt_jumne_army"),
       (lt,":num_parties",1),
       (store_random,":spawn_point",num_jumne_company_spawn_points),
       (val_add,":spawn_point","p_jumne_company_spawn_point"),
       (spawn_around_party,":spawn_point","pt_jumne_army"),
     (assign,"$jumne_army",reg(0)),
     (party_set_banner_icon, "$jumne_army", "icon_banner_106"),
     (try_end),

#adventurers
    (try_begin),
       (store_num_parties_of_template, ":num_parties", "pt_adventurer_army"),
       (lt,":num_parties",1),
       (store_random,":spawn_point",num_adventurer_company_spawn_points),
       (val_add,":spawn_point","p_adventurer_company_spawn_point"),
       (spawn_around_party,":spawn_point","pt_adventurer_army"),
     (assign,"$adventurer_army",reg(0)),
     (party_set_banner_icon, "$adventurer_army", "icon_banner_124"),
     (try_end),

]),

module_simple_triggers at the bottom
Code:
  # Spawn some mercs patrols.
  (48,
   [
       (call_script, "script_spawn_merc_patrols"),
    ]),

  # Spawn some mercs company.
  (48,
   [
       (call_script, "script_spawn_merc_company"),
    ]),

module_dialogs
Code:
##merc groups dialogs begin
  

  [party_tpl|pt_geroian_company|auto_proceed,"start", [(eq,"$talk_context",tc_party_encounter),(encountered_party_is_attacker)],
   "{!}Warning: This line should never display.", "mercs_attack_1",[]],
  [party_tpl|pt_geroian_army|auto_proceed,"start", [(eq,"$talk_context",tc_party_encounter),(encountered_party_is_attacker)],
   "{!}Warning: This line should never display.", "mercs_attack_1",[]],
  [party_tpl|pt_balion_company|auto_proceed,"start", [(eq,"$talk_context",tc_party_encounter),(encountered_party_is_attacker)],
   "{!}Warning: This line should never display.", "mercs_attack_1",[]],
  [party_tpl|pt_balion_army|auto_proceed,"start", [(eq,"$talk_context",tc_party_encounter),(encountered_party_is_attacker)],
   "{!}Warning: This line should never display.", "mercs_attack_1",[]],
  [party_tpl|pt_jumne_company|auto_proceed,"start", [(eq,"$talk_context",tc_party_encounter),(encountered_party_is_attacker)],
   "{!}Warning: This line should never display.", "mercs_attack_1",[]],
  [party_tpl|pt_jumne_army|auto_proceed,"start", [(eq,"$talk_context",tc_party_encounter),(encountered_party_is_attacker)],
   "{!}Warning: This line should never display.", "mercs_attack_1",[]],
 [party_tpl|pt_adventurer_company|auto_proceed,"start", [(eq,"$talk_context",tc_party_encounter),(encountered_party_is_attacker)],
   "{!}Warning: This line should never display.", "mercs_attack_1",[]],
  [party_tpl|pt_adventurer_army|auto_proceed,"start", [(eq,"$talk_context",tc_party_encounter),(encountered_party_is_attacker)],
   "{!}Warning: This line should never display.", "mercs_attack_1",[]],

[anyone,"mercs_attack_1", [
      (store_random_in_range, ":rand", 11, 15),
        (str_store_string, s11, "@This is the man that have killed our mates, now we will get our revenge."),
        (str_store_string, s12, "@If you think you can kill our brother in arms and walk free you better think again, to arms."),
        (str_store_string, s13, "@Halt! We finally got our hands in you {playername}, now you will pay for what you have done."),
    (str_store_string, s14, "@You will pay for what you have done with your own blood."),
        (str_store_string_reg, s5, ":rand"),
    ], "{s5}", "mercs_attack_2",[(play_sound,"snd_encounter_bandits")]],

  [anyone|plyr,"mercs_attack_2", [], "To arms!!!", "close_window",[[encounter_attack]]],

[anyone,"start", 
[
#(store_faction_of_party, ":faction_of_party", "$g_encountered_party"),
        (this_or_next|eq,"$g_encountered_party_template", "pt_geroian_company"),
        (this_or_next|eq,"$g_encountered_party_template", "pt_balion_company"),
        (this_or_next|eq,"$g_encountered_party_template", "pt_jumne_company"),
        (this_or_next|eq,"$g_encountered_party_template", "pt_adventurer_company"),
        (this_or_next|eq,"$g_encountered_party_template", "pt_geroian_army"),
        (this_or_next|eq,"$g_encountered_party_template", "pt_balion_army"),
        (this_or_next|eq,"$g_encountered_party_template", "pt_jumne_army"),
                     (eq,"$g_encountered_party_template", "pt_adventurer_army"),
        ],
                 

  "Do you have any business with us?", "mercs_talk_b",[]],
   [anyone|plyr,"mercs_talk_b", [], "My men need to practice a bit, to arms!", "close_window",
   
   [(call_script, "script_change_player_relation_with_faction", "$g_encountered_party_faction",-99),(encounter_attack),]],

   
[anyone|plyr,"mercs_talk_b", [], "Never mind, I have no business with you.", "close_window",[(assign, "$g_leave_encounter", 1)]],

##merc groups dialogs end


Edit- you can also place the code that spawn the parties in the "script_spawn_bandits" and call them using a existing trigger, I recommend using the same trigger that spawn bandits.
################################################################################################################
Edit- Okay, I modified the terrain in the geroian camp scene so it fits in a desert and steppe terrain dowload http://www.mediafire.com/file/bk9d9l89wj74b4j/scenes.rar/file
also made the new code for those camps, one for desert bandits ( just a placeholder troop) and for black khergits, note that the black khergit guard is disabled in module_troops so you have to find it and uncomment the code.

troops
Code:
 ["ahmad","Ahmad","Ahmad", tf_hero, scn_arab_camp|entry(2),reserved, fac_commoners,[itm_sarranid_elite_armor,itm_sarranid_boots_c,itm_sarranid_veiled_helmet, itm_lamellar_gauntlets,itm_arabian_sword_a],
   str_14|agi_17|int_6|cha_30|level(25),wpex(240,130,170,150,170,90),knows_tracking_10|knows_engineer_10|knows_first_aid_10|knows_surgery_10|knows_wound_treatment_10|knows_tactics_10|knows_trainer_10|knows_looting_10|
   knows_trade_2|knows_weapon_master_1|knows_ironflesh_1|knows_wound_treatment_1|knows_athletics_5|knows_first_aid_1|knows_leadership_1|knows_riding_4|knows_power_strike_7|knows_power_draw_3|knows_power_throw_3,
   0x0000000cbf10434020504bbbda9135d500000000001f62380000000000000000,],

 ["batzorig","Batzorig","Batzorig", tf_hero, scn_horde_camp|entry(2),reserved, fac_commoners,[itm_khergit_elite_armor,itm_mail_boots,itm_khergit_guard_helmet, itm_lamellar_gauntlets,itm_khergit_sword_two_handed_b],
   str_14|agi_17|int_6|cha_30|level(25),wpex(240,130,170,150,170,90),knows_tracking_10|knows_engineer_10|knows_first_aid_10|knows_surgery_10|knows_wound_treatment_10|knows_tactics_10|knows_trainer_10|knows_looting_10|
   knows_trade_2|knows_weapon_master_1|knows_ironflesh_1|knows_wound_treatment_1|knows_athletics_5|knows_first_aid_1|knows_leadership_1|knows_riding_4|knows_power_strike_7|knows_power_draw_3|knows_power_throw_3,
   0x0000000f7800620d66b76edd5cd5eb6e00000000001f691e0000000000000000],

scenes
Code:
  ("arab_camp",sf_generate,"none", "none", (0,0),(100,100),-100,"0x000000003000050000064592000063c100001bee00006f14",
    [],[],"outer_terrain_desert_b"), 
  ("horde_camp",sf_generate,"none", "none", (0,0),(100,100),-100,"0x000000003000050000064592000063c100001bee00006f14",
    [],[],"outer_terrain_steppe"),

party templates
Code:
    ("merc_camp_arab_troops", "{!}Sandstorm Mercs", 0, 0, fac_commoners, 0, [(trp_desert_bandit,15,40)]),
    ("merc_camp_horde_troops", "{!}Horde Mercs", 0, 0, fac_commoners, 0, [(trp_black_khergit_horseman,12,30),(trp_black_khergit_guard,5,15)]),

parties before "merc_camp_end"

Code:
    ("merc_camp_arab", "Sandstorm Camp",  icon_camp|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(69,-58),[], 100),
    ("merc_camp_horde", "Black Khergit Camp",  icon_camp|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(166,-9),[], 100),
   

game menu in "mercenary camp"
Code:
    ("enter_arab_camp",[(eq, "$g_encountered_party", "p_merc_camp_arab"),],"Enter the Sandstorm Camp.",[
    (modify_visitors_at_site,"scn_arab_camp"),
    (reset_visitors),    
    (assign, "$g_mt_mode", tcm_default),      
    (set_jump_entry, 1),
    (set_visitor, 2, "trp_ahmad"),
    (set_visitor, 5, "trp_desert_bandit"),
    (set_visitor, 6, "trp_desert_bandit"),
    (set_visitor, 7, "trp_desert_bandit"),
    (set_visitor, 8, "trp_desert_bandit"),
    (set_visitor, 9, "trp_desert_bandit"),
    (set_jump_mission,"mt_visit_town_castle"),
    (jump_to_scene,"scn_arab_camp"),
    (change_screen_mission), 
  ]),
    ("enter_horde_camp",[(eq, "$g_encountered_party", "p_merc_camp_horde"),],"Enter  the Black Khergit Camp.",[
    (modify_visitors_at_site,"scn_horde_camp"),
    (reset_visitors),    
    (assign, "$g_mt_mode", tcm_default),      
    (set_jump_entry, 1),
    (set_visitor, 2, "trp_ahmad"),
    (set_visitor, 5, "trp_black_khergit_guard"),
    (set_visitor, 6, "trp_black_khergit_horseman"),
    (set_visitor, 7, "trp_black_khergit_horseman"),
    (set_visitor, 8, "trp_black_khergit_guard"),
    (set_visitor, 9, "trp_black_khergit_horseman"),
    (set_jump_mission,"mt_visit_town_castle"),
    (jump_to_scene,"scn_horde_camp"),
    (change_screen_mission),

dialog below the zendar dialog
Code:
#Sandstorm
  [anyone ,"start", [(eq,"$g_talk_troop","trp_ahmad"),], "Do you have business here?", "mercenary_recruit",[]],
#Black Khergit
 [anyone ,"start", [(eq,"$g_talk_troop","trp_batzorig"),], "A outsider eh? What brings you here?", "mercenary_recruit",[]],

scripts in "script_refresh_mercenary_camp_troops

Code:
        (eq, ":camp_no", "p_merc_camp_zendar"), 
        (assign, ":party_template", "pt_merc_camp_zendar_troops"),        
      ###################add this#####################
      (else_try),
        (eq, ":camp_no", "p_merc_camp_arab"), 
        (assign, ":party_template", "pt_merc_camp_arab_troops"), 
      (else_try),
        (eq, ":camp_no", "p_merc_camp_horde"), 
        (assign, ":party_template", "pt_merc_camp_horde_troops"), 
      ###################add this#####################
      (try_end),
      (try_begin),
        (party_get_num_companions, ":party_size", ":camp_no"),
        (lt, ":party_size", ":ideal_size"),
        (party_add_template, ":camp_no", ":party_template"),    
      (try_end),




 

capri_sun

Recruit
Best answers
0
im getting a error from module_scripts.py, with the three sections of code do i have to put them all together?
 

Crossbow Pig

Master Knight
Best answers
0
You only need to add stuff that is are between merc camps begin and merc camp end, use the stuff that is before them to know where to place the code.
 

capri_sun

Recruit
Best answers
0
Totenkopf900 said:
You only need to add stuff that is are between merc camps begin and merc camp end, use the stuff that is before them to know where to place the code.
sorry i figured it out i placed the second line of scripts code in the wrong place
 

capri_sun

Recruit
Best answers
0
Ok for some reason every time i visit any of the mercenary camps its bringing up the training ground menu.
 

Seek n Destroy

Marquis
WBWF&S
Best answers
0
I forgot to thank Totenkopf900 for his additions, I have plans to revisit and expand the functionalities of this kit but haven't had the time yet.

capri_sun said:
Ok for some reason every time i visit any of the mercenary camps its bringing up the training ground menu.
Make sure you didn't forget to add this bit to script_game_event_party_encounter so the right menu shows up when visiting a camp:
Code:
...
         (else_try),
           (eq, "$g_encountered_party", "p_camp_bandits"),           
           (jump_to_menu, "mnu_camp"),
# Merc Camp Begin  			 
         (else_try),
           (is_between, "$g_encountered_party", mercenary_camp_begin, mercenary_camp_end),       
           (jump_to_menu, "mnu_mercenary_camp"),		
# Merc Camp End  			 
         (else_try),
           (jump_to_menu, "mnu_simple_encounter"),
...
 

capri_sun

Recruit
Best answers
0
Seek n Destroy said:
I forgot to thank Totenkopf900 for his additions, I have plans to revisit and expand the functionalities of this kit but haven't had the time yet.

capri_sun said:
Ok for some reason every time i visit any of the mercenary camps its bringing up the training ground menu.
Make sure you didn't forget to add this bit to script_game_event_party_encounter so the right menu shows up when visiting a camp:
Code:
...
         (else_try),
           (eq, "$g_encountered_party", "p_camp_bandits"),           
           (jump_to_menu, "mnu_camp"),
# Merc Camp Begin  			 
         (else_try),
           (is_between, "$g_encountered_party", mercenary_camp_begin, mercenary_camp_end),       
           (jump_to_menu, "mnu_mercenary_camp"),		
# Merc Camp End  			 
         (else_try),
           (jump_to_menu, "mnu_simple_encounter"),
...
i tried that still no luck
 

capri_sun

Recruit
Best answers
0
Code:
Initializing...
Compiling all global variables...
Exporting strings...
Exporting skills...
Exporting tracks...
Exporting animations...
Exporting meshes...
Exporting sounds...
Exporting skins...
Exporting map icons...
Creating new tag_uses.txt file...
Creating new quick_strings.txt file...
Exporting faction data...
Exporting item data...
Exporting scene data...
Exporting troops data
Exporting particle data...
Exporting scene props...
Exporting tableau materials data...
Exporting presentations...
Exporting party_template data...
Exporting parties
Exporting quest data...
Exporting info_page data...
Exporting scripts...
Exporting mission_template data...
Exporting game menus data...
exporting simple triggers...
exporting triggers...
exporting dialogs...
Checking global variable usages...
WARNING: Global variable never used: faction_display
WARNING: Global variable never used: kaos_disabled
Imported 21 global variables for saved-game compatability that are not used.
Exporting postfx_params...

______________________________

Script processing has ended.
Press any key to exit. . .

Code:
      (call_script, "script_update_mercenary_units_of_towns"),
      (call_script, "script_update_companion_candidates_in_taverns"),
      (call_script, "script_update_ransom_brokers"),
      (call_script, "script_update_tavern_travellers"),
      (call_script, "script_update_tavern_minstrels"),
      (call_script, "script_update_booksellers"),
	  (try_for_range, ":village_no", villages_begin, villages_end),
      (call_script, "script_update_volunteer_troops_in_village", ":village_no"),
      (try_end),
	  
	  
	  # Merc Camp Begin  
      (try_for_range, ":camp_no", mercenary_camp_begin, mercenary_camp_end),
	  (call_script, "script_refresh_mercenary_camp_troops",":camp_no"),
      (try_end),	

     # Merc Camp End
Code:
   (try_begin),
           (party_slot_eq, "$g_encountered_party", slot_party_type, spt_town),
           (jump_to_menu, "mnu_castle_outside"),
         (else_try),
           (party_slot_eq, "$g_encountered_party", slot_party_type, spt_castle),
           (jump_to_menu, "mnu_castle_outside"),
         (else_try),
           (party_slot_eq, "$g_encountered_party", slot_party_type, spt_ship),
           (jump_to_menu, "mnu_ship_reembark"),
         (else_try),
           (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
           (jump_to_menu, "mnu_village"),
         (else_try),
           (party_slot_eq, "$g_encountered_party", slot_party_type, spt_cattle_herd),
           (jump_to_menu, "mnu_cattle_herd"),
         (else_try),
           (is_between, "$g_encountered_party", training_grounds_begin, training_grounds_end),
           (jump_to_menu, "mnu_training_ground"),
		 (else_try),
		   (party_get_template_id, ":template", "$g_encountered_party"),
		   (ge, ":template", "pt_steppe_bandit_lair"),
		   (lt, ":template", "pt_bandit_lair_templates_end"),
		   (assign, "$loot_screen_shown", 0),
#		   (call_script, "script_encounter_init_variables"),
		   (jump_to_menu, "mnu_bandit_lair"),
         (else_try),
           (eq, "$g_encountered_party", "p_zendar"),
           (jump_to_menu, "mnu_zendar"),
         (else_try),
           (eq, "$g_encountered_party", "p_salt_mine"),
           (jump_to_menu, "mnu_salt_mine"),
         (else_try),
           (eq, "$g_encountered_party", "p_four_ways_inn"),
           (jump_to_menu, "mnu_four_ways_inn"),
         (else_try),
           (eq, "$g_encountered_party", "p_test_scene"),
           (jump_to_menu, "mnu_test_scene"),
         (else_try),
           (eq, "$g_encountered_party", "p_battlefields"),
           (jump_to_menu, "mnu_battlefields"),
         (else_try),
           (eq, "$g_encountered_party", "p_training_ground"),
           (jump_to_menu, "mnu_tutorial"),
         (else_try),
           (eq, "$g_encountered_party", "p_camp_bandits"),
           (jump_to_menu, "mnu_camp"),		  
         # Merc Camp Begin  			  
         (else_try),
           (is_between, "$g_encountered_party", mercenary_camp_begin, mercenary_camp_end),       
           (jump_to_menu, "mnu_mercenary_camp"),		
         # Merc Camp End 
Code:
# Merc Camp Begin 	
  # script_refresh_mercenary_camp_troops
  # Input: arg1 = camp_no
  # Output: none
  ("refresh_mercenary_camp_troops",
    [
      (store_script_param_1, ":camp_no"),
      (assign, ":ideal_size", 50), # Limit of Mercenary troops available in one camp

      (try_begin),
        (eq, ":camp_no", "p_merc_camp_geroia"),	
        (assign, ":party_template", "pt_merc_camp_geroia_troops"), 	
      (else_try),
        (eq, ":camp_no", "p_merc_camp_balion"),	
        (assign, ":party_template", "pt_merc_camp_balion_troops"), 	
      (else_try),
        (eq, ":camp_no", "p_merc_camp_jumne"),	
        (assign, ":party_template", "pt_merc_camp_jumne_troops"), 	      
      (else_try),
        (eq, ":camp_no", "p_merc_camp_zendar"),	
        (assign, ":party_template", "pt_merc_camp_zendar_troops"), 			  
      (try_end),
		
      (try_begin),
        (party_get_num_companions, ":party_size", ":camp_no"),
        (lt, ":party_size", ":ideal_size"),
        (party_add_template, ":camp_no", ":party_template"),	  
      (try_end), 
	  
  ]),
# Merc Camp End 
 

capri_sun

Recruit
Best answers
0
Code:
castles_begin = "p_castle_1"
villages_begin = "p_village_1"

towns_end = castles_begin
castles_end = villages_begin
villages_end   = "p_salt_mine"

walled_centers_begin = towns_begin
walled_centers_end   = castles_end

centers_begin = towns_begin
centers_end   = villages_end

training_grounds_begin   = "p_training_ground_1"
training_grounds_end     = "p_Bridge_1"

scenes_begin = "scn_town_1_center"
scenes_end = "scn_castle_1_exterior"

spawn_points_begin = "p_zendar"
spawn_points_end = "p_spawn_points_end"

regular_troops_begin       = "trp_novice_fighter"
regular_troops_end         = "trp_tournament_master"

swadian_merc_parties_begin = "p_town_1_mercs"
swadian_merc_parties_end   = "p_town_8_mercs"

vaegir_merc_parties_begin  = "p_town_8_mercs"
vaegir_merc_parties_end    = "p_zendar"

# Merc Camp Begin
mercenary_camp_begin  = "p_merc_camp_geroia"
mercenary_camp_end    = "p_merc_camp_end"
# Merc Camp End

arena_masters_begin    = "trp_town_1_arena_master"
arena_masters_end      = "trp_town_1_armorer"
Code:
  # Merc Camp Begin   
  ( "mercenary_camp",0,
    "You approach the mercenary camp...",
    "none",
    [],
    [
      ("enter_geroian_camp",[(eq, "$g_encountered_party", "p_merc_camp_geroia"),],"Visit the Geroian Camp.",[
		(modify_visitors_at_site,"scn_geroian_camp"),
		(reset_visitors),    
		(assign, "$g_mt_mode", tcm_default),   		
		(set_jump_entry, 1),
		(set_visitor, 2, "trp_vernid"),
		(set_visitor, 5, "trp_geroia_sergeant"),
		(set_visitor, 6, "trp_geroia_swordsman"),
		(set_visitor, 7, "trp_geroia_swordsman"),
		(set_visitor, 8, "trp_geroia_pavisier"),
		(set_visitor, 9, "trp_geroia_pavisier"),
		(set_jump_mission,"mt_visit_town_castle"),
		(jump_to_scene,"scn_geroian_camp"),
		(change_screen_mission),		
	]),	
      ("enter_balion_camp",[(eq, "$g_encountered_party", "p_merc_camp_balion"),],"Enter the castle of the Knights of Balion.",[
		(modify_visitors_at_site,"scn_balion_camp"),
		(reset_visitors),    
		(assign, "$g_mt_mode", tcm_default),   		
		(set_jump_entry, 1),
		(set_visitor, 2, "trp_kornwall"),

		(set_visitor, 5, "trp_balion_knight"),
		(set_visitor, 6, "trp_balion_infantry"),
		(set_visitor, 7, "trp_balion_infantry"),
		(set_visitor, 8, "trp_balion_longbowman"),
		(set_visitor, 9, "trp_balion_longbowman"),
		(set_jump_mission,"mt_visit_town_castle"),
		(jump_to_scene,"scn_balion_camp"),
		(change_screen_mission),		
	]),	
      ("enter_jumne_camp",[(eq, "$g_encountered_party", "p_merc_camp_jumne"),],"Enter the Northmen camp.",[
		(modify_visitors_at_site,"scn_jumne_camp"),
		(reset_visitors),    
		(assign, "$g_mt_mode", tcm_default),   		
		(set_jump_entry, 1),
		(set_visitor, 2, "trp_sverre"),

		(set_visitor, 5, "trp_jumne_huscarl"),
		(set_visitor, 6, "trp_jumne_raider"),
		(set_visitor, 7, "trp_jumne_raider"),
		(set_visitor, 8, "trp_jumne_raider"),
		(set_visitor, 9, "trp_jumne_skirmisher"),
		(set_jump_mission,"mt_visit_town_castle"),
		(jump_to_scene,"scn_jumne_camp"),
		(change_screen_mission),		
	]),	
      ("enter_zendar_camp",[(eq, "$g_encountered_party", "p_merc_camp_zendar"),],"Enter the ruins of Zendar.",[
		(modify_visitors_at_site,"scn_zendar_camp"),
		(reset_visitors),    
		(assign, "$g_mt_mode", tcm_default),   		
		(set_jump_entry, 1),
		(set_visitor, 2, "trp_stavros"),

		(set_visitor, 5, "trp_slaver_chief"),
		(set_visitor, 6, "trp_manhunter"),
		(set_visitor, 7, "trp_manhunter"),
		(set_visitor, 8, "trp_manhunter"),
		(set_visitor, 9, "trp_manhunter"),
		(set_jump_mission,"mt_visit_town_castle"),
		(jump_to_scene,"scn_zendar_camp"),
		(change_screen_mission),		
	]),	
      ("leave",[],"Leave.",[(leave_encounter),(change_screen_return)]),
    ]
  ),  
# Merc Camp End   

 
   
 ( "recruit_nobles",0,
    "{s18}",
    "none",
    [(store_faction_of_party, ":cur_faction", "$current_town"),
     (faction_get_slot, ":volunteer_troop", ":cur_faction", slot_faction_tier_5_troop), 
     (party_get_slot, ":volunteer_amount", "$current_town", slot_center_volunteer_troop_amount),
     (party_get_free_companions_capacity, ":free_capacity", "p_main_party"),
     (store_troop_gold, ":gold", "trp_player"),
     (store_div, ":gold_capacity", ":gold", 40),#40 denars per man
     (assign, ":party_capacity", ":free_capacity"),
     (val_min, ":party_capacity", ":gold_capacity"),
     (try_begin),
       (gt, ":party_capacity", 0),
       (val_min, ":volunteer_amount", ":party_capacity"),
     (try_end),
     (assign, reg5, ":volunteer_amount"),
     (assign, reg7, 0),
     (try_begin),
       (gt, ":volunteer_amount", ":gold_capacity"),
       (assign, reg7, 1), #not enough money
     (try_end),
     (try_begin),
       (eq, ":volunteer_amount", 0),
       (str_store_string, s18, "@No one here seems to be willing to join your party."),
     (else_try),
       (store_mul, reg6, ":volunteer_amount", 40),#40 denars per man
       (str_store_troop_name_by_count, s3, ":volunteer_troop", ":volunteer_amount"),
       (try_begin),
         (eq, reg5, 1),
         (str_store_string, s18, "@One {s3} volunteers to follow you."),
       (else_try),
         (str_store_string, s18, "@{reg5} {s3} volunteer to follow you."),
       (try_end),
       (set_background_mesh, "mesh_pic_recruits"),
     (try_end),
    ],
    [
      ("continue_not_enough_gold",
      [
        (eq, reg7, 1),
      ],
      "I don't have enough money...",
      [
  (jump_to_menu, "mnu_town"),
      ]),
       
      ("continue",
      [
        (eq, reg7, 0),
        (eq, reg5, 0),
      ], #noone willing to join                   
      "Continue...",
      [
        (party_set_slot, "$current_town", slot_center_volunteer_troop_amount, -1),
  (jump_to_menu, "mnu_town"),
      ]),
       
      ("recruit_them",
      [
        (eq, reg7, 0),
        (gt, reg5, 0),
      ],
      "Recruit them ({reg6} denars).",
      [
        (call_script, "script_town_castle_recruit_nobles_recruit"),
                        
  (jump_to_menu, "mnu_town"),
      ]),
      
      ("forget_it",
      [
        (eq, reg7, 0),
        (gt, reg5, 0),
      ],
      "Forget it.",
      [
  (jump_to_menu, "mnu_town"),
      ]),
    ],
  ),
 

Seek n Destroy

Marquis
WBWF&S
Best answers
0
Just a small notice that I have updated one of the scripts following one of Barabashenko's suggestions. Well, sort of. He pointed out that if you don't hire out some of the mercenaries troop they will just stack until the limit is reached and thus you have to hire potentially undesirable mercenaries so the troop pool gets refreshed with the ones you want to hire. He suggested to track the stack limit with different values for infantry, cavalry and archers and while I don't dismiss the idea entirely as an optional setting, I've resolved to wipe the mercenary camps troop pools once they go over the set limit.

Tl;dr: Updated script_refresh_mercenary_camp_troops to reset the mercenary camps available troops once they go over the limit.

I've updated the first post and added a link to Totenkopf900/Crossbow Pig changes. If you're already using the code and you don't feel like checking everything, all I changed is:

# Merc Camp Begin
  # script_refresh_mercenary_camp_troops
  # Input: arg1 = camp_no
  # Output: none
  ("refresh_mercenary_camp_troops",
    [
      (store_script_param_1, ":camp_no"),
      (assign, ":ideal_size", 50), # Past this value the troop pool of the camp will be reset

      (try_begin),
        (eq, ":camp_no", "p_merc_camp_geroia"),
        (assign, ":party_template", "pt_merc_camp_geroia_troops"),
      (else_try),
        (eq, ":camp_no", "p_merc_camp_balion"),
        (assign, ":party_template", "pt_merc_camp_balion_troops"),
      (else_try),
        (eq, ":camp_no", "p_merc_camp_jumne"),
        (assign, ":party_template", "pt_merc_camp_jumne_troops"),      
      (else_try),
        (eq, ":camp_no", "p_merc_camp_zendar"),
        (assign, ":party_template", "pt_merc_camp_zendar_troops"),  
      (try_end),

        (party_get_num_companions, ":party_size", ":camp_no"),
      (try_begin),
        (gt, ":party_size", ":ideal_size"), # We're past the ideal number of troops in the camp
        (party_clear,":camp_no"), # Reset the troop pool
        (party_add_template, ":camp_no", ":party_template"),  
      (else_try),
        (party_add_template, ":camp_no", ":party_template"),  
      (try_end),
  ]),
# Merc Camp End
 

TheCaitularity

Sergeant at Arms
Best answers
0
I wonder if you could do something like spawn roving mercenary parties once the limit is reached; to represent the accumulated mercs banding together and striking out on their own as opposed to waiting around in the camp forever.