SP Tutorial Module System Make your own Companions

kalarhan

Python Saint
Count
WBNWVCWF&S
Best answers
31
Arios said:
guys do the companions realy need a personality clash or can it be removed
That is your design decision. On the tech/code side you will need to handle it by disabling the feature of course.
 

Arios

Recruit
Best answers
0
kalarhan said:
Arios said:
guys do the companions realy need a personality clash or can it be removed
That is your design decision. On the tech/code side you will need to handle it by disabling the feature of course.
wish i knew how
i know that the FYSG mod has a option to stop all companions complains
 

Arios

Recruit
Best answers
0
i need a lil help with module troops.py
mine its empty
can i add the module troops.py from  native
 

Arios

Recruit
Best answers
0
didnt work
after i hit build module i get this errors
File "process_init.py", line 5
    print "Initializing..."
                          ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Initializing...")?
  File "process_global_variables.py", line 23
    add_variable(varb, variable_list, variable_uses)
                                                  ^
TabError: inconsistent use of tabs and spaces in indentation
  File "process_strings.py", line 24
    print "Exporting strings..."
                              ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting strings...")?
  File "process_skills.py", line 30
    print "Exporting skills..."
                              ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting skills...")?
  File "process_music.py", line 21
    print "Exporting tracks..."
                              ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting tracks...")?
  File "process_animations.py", line 58
    print "Exporting animations..."
                                  ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting animations...")?
  File "process_meshes.py", line 23
    print "Exporting meshes..."
                              ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting meshes...")?
  File "process_sounds.py", line 49
    print "Exporting sounds..."
                              ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting sounds...")?
  File "process_skins.py", line 104
    print "Exporting skins..."
                            ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting skins...")?
  File "process_map_icons.py", line 32
    print "Exporting map icons..."
                                ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting map icons...")?
  File "process_factions.py", line 27
    print "ERROR faction not found: "+ rel_name
                                    ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("ERROR faction not found: "+ rel_name)?
  File "process_items.py", line 60
    print "Exporting item data..."
                                ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting item data...")?
  File "process_scenes.py", line 12
    print "Exporting scene data..."
                                  ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting scene data...")?
  File "process_troops.py", line 104
    print "Exporting troops data"
                                ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting troops data")?
  File "process_particle_sys.py", line 60
    print "Exporting particle data..."
                                    ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting particle data...")?
  File "process_scene_props.py", line 26
    print "Exporting scene props..."
                                  ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting scene props...")?
  File "process_tableau_materials.py", line 25
    print "Exporting tableau materials data..."
                                              ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting tableau materials data...")?
  File "process_presentations.py", line 27
    print "Exporting presentations..."
                                    ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting presentations...")?
  File "process_party_tmps.py", line 28
    print "Error! NUMBER OF TEMPLATE MEMBERS EXCEEDS 6 " + party_template[0]
                                                      ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Error! NUMBER OF TEMPLATE MEMBERS EXCEEDS 6 " + party_template[0])?
  File "process_parties.py", line 28
    print "Error: Unable to find menu-id :" + menu_param
                                          ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Error: Unable to find menu-id :" + menu_param)?
  File "process_quests.py", line 29
    print "Exporting quest data..."
                                  ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting quest data...")?
  File "process_info_pages.py", line 25
    print "Exporting info_page data..."
                                      ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting info_page data...")?
  File "process_scripts.py", line 34
    print "Exporting scripts..."
                              ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting scripts...")?
  File "process_mission_tmps.py", line 29
    print "ERROR: Too many item_overrides!"
                                          ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("ERROR: Too many item_overrides!")?
  File "process_game_menus.py", line 41
    print "Exporting game menus data..."
                                      ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting game menus data...")?
  File "process_simple_triggers.py", line 19
    print "exporting simple triggers..."
                                      ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("exporting simple triggers...")?
  File "process_dialogs.py", line 95
    print sentence[ipt_token_pos]
                ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(sentence[ipt_token_pos])?
  File "process_global_variables_unused.py", line 6
    print "Checking global variable usages..."
                                            ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Checking global variable usages...")?
  File "process_postfx.py", line 26
    print "Exporting postfx_params..."
                                    ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Exporting postfx_params...")?
Could Not Find C:\Program Files\TaleWorlds Entertainment\Mount and Blade Warband - Viking Conquest Reforged Edition\Modules\FYSG_2.76\Module_system 1.153\*.pyc
 

Arios

Recruit
Best answers
0
this is what i used
python version 3.6.5
sublime text 3
module system version 1.153
those Q & A didnt help much
 

NPC99

Baron
M&BWBWF&SVC
Best answers
8
Arios said:
this is what i used
python version 3.6.5
sublime text 3
module system version 1.153
those Q & A didnt help much
Wrong version of python - read this guide:
https://forums.taleworlds.com/index.php/topic,240255.0.html

Old version of the module system - download the latest version from Taleworlds:
https://www.taleworlds.com/en/Games/Warband/Download
 

Arios

Recruit
Best answers
0
thanks npc99  for the info
the module system version 1.153
came with the mod  that i want to add the  companions  thats why i used it

 

Arios

Recruit
Best answers
0
thanks guys for the help and info but no mater what i do it wont work
so il just add new troops  and new items useing  morgh to the mod i play
 

SirKeeper

Recruit
Best answers
0
Hello. I am having an issue that I see has been reported here before. In the home description and home recap, my new companion is using Klethi's lines, the NPC before him in the module system. There don't seem to be duplicate lines, and I have revised the steps.
Any help is appreciated

SirKeeper

EDIT:
There actually was a duplicate line, my bad:
'("npc13_home_description")' was present twice.

I'm not sure if it was my mistake or if it was like that since the beginning. I am using the latest diplomacy source code.
 

Eleazar16

Recruit
Best answers
0
I've used this tutorial to successfully create 24 companions so far, but I'm curious if anyone has figured out how to make custom companions available in Multiplayer Invasion mode.  I'm using version 1.171 as the base for my mod, but I have yet to find the source of a bug I'm encountering in doing this.  I'll post in the related code I have found so far, marking my changes in red.

module_troops.py just before the upgrade path declarations:
...
  ["coop_faction_troop_templates_end","{!}multiplayer_end","{!}multiplayer_end", 0, 0, 0, fac_kingdom_5, [], 0, 0, 0, 0, 0],
  #tier 1
  ["npc1_1","Borcha","Borcha",tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_khergit_armor,itm_nomad_boots,itm_knife, itm_courser],
  str_16|agi_17|int_6|cha_30|level(25),wpex(250,80,140,160,90,250),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_ironflesh_1|knows_power_strike_7|knows_pathfinding_3|knows_athletics_5|knows_tracking_1|knows_riding_6|knows_power_throw_7|knows_power_draw_5, #skills 2/3 player at that level
  0x00000004bf086143259d061a9046e23500000000001db52c0000000000000000],
  ["npc2_1","Marnid","Marnid", tf_hero|tf_unmoveable_in_party_window, 0,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],
  ["npc3_1","Ymira","Ymira",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_dress,itm_woolen_hose,itm_knife, itm_hunter],
  str_24|agi_13|int_6|cha_30|level(25),wpex(190,80,240,180,180,80),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_wound_treatment_1|knows_trade_1|knows_first_aid_3|knows_surgery_1|knows_athletics_6|knows_riding_8|knows_power_strike_5|knows_power_draw_3|knows_power_throw_3,
  0x0000000083040001583b6db8dec5925b00000000001d80980000000000000000],
  ["npc4_1","Rolf","Rolf",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_leather_jerkin,itm_nomad_boots, itm_sword_medieval_a, itm_hunter],
  str_20|agi_13|int_6|cha_30|level(25),wpex(210,230,200,90,100,95),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_weapon_master_2|knows_power_strike_9|knows_riding_8|knows_athletics_7|knows_power_throw_3|knows_first_aid_1|knows_surgery_1|knows_tactics_2|knows_leadership_2|knows_power_draw_2,
  0x000000057f1074002c75c6a8a58ad72e00000000001e1a890000000000000000],
  ["npc5_1","Baheshtur","Baheshtur",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_nomad_vest,itm_nomad_boots, itm_sword_khergit_1, itm_steppe_horse],
  str_18|agi_13|int_6|cha_30|level(25),wpex(160,80,130,250,50,230),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_riding_7|knows_horse_archery_9|knows_power_draw_8|knows_leadership_2|knows_weapon_master_1|knows_power_strike_5|knows_power_throw_8|knows_athletics_5,
  0x000000088910318b5c6f972328324a6200000000001cd3310000000000000000],
  ["npc6_1","Firentis","Firentis",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_tabard,itm_nomad_boots, itm_sword_medieval_a, itm_sumpter_horse],
  str_20|agi_19|int_6|cha_30|level(25),wpex(240,210,180,90,100,80),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_riding_7|knows_weapon_master_2|knows_athletics_8|knows_trainer_1|knows_leadership_1|knows_power_strike_7|knows_power_draw_2|knows_power_throw_3,
  0x00000002050052036a1895d0748f3ca30000000000000f0b0000000000000000],
  ["npc7_1","Deshavi","Deshavi",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_ragged_outfit,itm_wrapping_boots, itm_hunting_bow, itm_arrows, itm_quarter_staff, itm_arabian_horse_b],
  str_16|agi_13|int_6|cha_30|level(25),wpex(90,80,230,280,110,130),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_tracking_2|knows_athletics_8|knows_spotting_1|knows_pathfinding_1|knows_power_draw_10|knows_riding_4|knows_power_strike_6|knows_power_throw_5,
  0x00000001fc08400533a15297634d44f400000000001e02db0000000000000000],
  ["npc8_1","Matheld","Matheld",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_tribal_warrior_outfit,itm_nomad_boots, itm_sword_viking_1, itm_courser],
  str_18|agi_15|int_6|cha_30|level(25),wpex(190,250,80,120,80,250),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_weapon_master_3|knows_athletics_10|knows_leadership_3|knows_tactics_1|knows_riding_4|knows_power_strike_10|knows_power_draw_2|knows_power_throw_8,
  0x00000005800c000637db8314e331e76e00000000001c46db0000000000000000],
  ["npc9_1","Alayen","Alayen",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_tabard,itm_nomad_boots, itm_sword_medieval_b_small, itm_courser],
  str_22|agi_19|int_6|cha_30|level(25),wpex(80,230,130,220,70,160),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_weapon_master_1|knows_riding_4|knows_athletics_6|knows_leadership_1|knows_tactics_1|knows_power_strike_4|knows_power_draw_7|knows_power_throw_5,
  0x000000030100300f499d5b391b6db8d300000000001dc2e10000000000000000],
  ["npc10_1","Bunduk","Bunduk",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_padded_leather,itm_nomad_boots, itm_crossbow, itm_bolts, itm_pickaxe, itm_saddle_horse],
  str_24|agi_19|int_6|cha_30|level(25),wpex(170,80,80,160,290,150),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_weapon_master_3|knows_tactics_1|knows_leadership_1|knows_ironflesh_3|knows_trainer_2|knows_first_aid_2|knows_riding_4|knows_power_strike_5|knows_power_draw_5|knows_power_throw_5|knows_athletics_7,
  0x0000000a3f081006572c91c71c8d46cb00000000001e468a0000000000000000],
  ["npc11_1","Katrin","Katrin",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_leather_apron, itm_falchion, itm_wrapping_boots, itm_sumpter_horse],
  str_16|agi_17|int_6|cha_30|level(25),wpex(140,230,130,80,210,170),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_weapon_master_1|knows_first_aid_1|knows_wound_treatment_2|knows_ironflesh_3|knows_inventory_management_5|knows_riding_4|knows_power_strike_5|knows_power_draw_2|knows_power_throw_7|knows_athletics_5,
  0x0000000d7f0400035915aa226b4d975200000000001ea49e0000000000000000],
  ["npc12_1","Jeremus","Jeremus",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_pilgrim_disguise,itm_nomad_boots, itm_staff, itm_sumpter_horse],
  str_16|agi_17|int_6|cha_30|level(25),wpex(120,110,290,80,110,120),  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_ironflesh_1|knows_power_strike_7|knows_surgery_4|knows_wound_treatment_3|knows_first_aid_3|knows_riding_4|knows_power_draw_2|knows_power_throw_3|knows_athletics_7,
  0x000000078000500e4f8ba62a9cd5d36d00000000001e36250000000000000000],
  ["npc13_1","Nizar","Nizar",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_nomad_robe,itm_nomad_boots, itm_scimitar, itm_courser],
  str_14|agi_17|int_6|cha_30|level(25),wpex(250,80,140,210,110,140),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_riding_9|knows_leadership_2|knows_athletics_5|knows_ironflesh_2|knows_power_strike_6|knows_weapon_master_1|knows_power_draw_7|knows_power_throw_4,
  0x00000004bf0475c85f4e9592de4e574c00000000001e369c0000000000000000],
  ["npc14_1","Lezalit","Lezalit",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_nobleman_outfit,itm_nomad_boots, itm_sword_medieval_b_small, itm_courser],
  str_18|agi_19|int_6|cha_30|level(25),wpex(280,170,170,170,170,180),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_trainer_4|knows_weapon_master_3|knows_leadership_2|knows_power_strike_1|knows_riding_7|knows_power_strike_7|knows_power_draw_6|knows_power_throw_6|knows_athletics_8,
  0x00000001a410259144d5d1d6eb55e96a00000000001db0db0000000000000000],
  ["npc15_1","Artimenner","Artimenner",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_rich_outfit,itm_nomad_boots, itm_sword_medieval_b_small, itm_hunter],
  str_18|agi_13|int_6|cha_30|level(25),wpex(190,290,130,210,90,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_tactics_2|knows_engineer_4|knows_trade_3|knows_tracking_1|knows_spotting_1|knows_riding_6|knows_power_strike_7|knows_power_draw_7|knows_power_throw_3|knows_athletics_5,
  0x0000000f2e1021862b4b9123594eab5300000000001d55360000000000000000],
  ["npc16_1","Klethi","Klethi",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_peasant_dress,itm_nomad_boots, itm_dagger, itm_throwing_knives, itm_saddle_horse],
  str_14|agi_17|int_6|cha_30|level(25),wpex(260,10,100,160,30,300),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_power_throw_10|knows_athletics_10|knows_power_strike_8|knows_riding_4|knows_power_draw_5,
  0x00000000000c100739ce9c805d2f381300000000001cc7ad0000000000000000],
  ["npc17_1","Excalibur","Excalibur",tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_leather_armor,itm_hunting_bow, itm_arrows, itm_spear],
  str_15|agi_16|int_9|cha_30|level(25),wpex(275,250,300,300,125,60),
  knows_ironflesh_10|knows_power_strike_8|knows_power_throw_3|knows_power_draw_8|knows_looting_10|knows_weapon_master_10|knows_shield_3|knows_athletics_10|knows_riding_4|knows_horse_archery_4|knows_trainer_10|knows_tracking_10|knows_tactics_10|knows_pathfinding_10|knows_wound_treatment_10|knows_surgery_10|knows_first_aid_10|knows_engineer_10|knows_leadership_3,
  0x00000000f708134136ec6dd865a9ab1b00000000001d6f1b0000000000000000],

 
    #tier 2
  ["npc1_2","Borcha","Borcha",tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_leather_steppe_cap_c,itm_leather_gloves,itm_nomad_robe,itm_hide_boots,itm_sword_medieval_b_small, itm_courser],
  str_16|agi_17|int_12|cha_7|level(14),wp(60),knows_tracker_npc|
  knows_ironflesh_1|knows_power_strike_1|knows_pathfinding_3|knows_athletics_2|knows_tracking_1|knows_riding_2, #skills 2/3 player at that level
  0x00000004bf086143259d061a9046e23500000000001db52c0000000000000000],
  ["npc2_2","Marnid","Marnid", tf_hero|tf_unmoveable_in_party_window, 0,reserved, fac_commoners,[itm_nasal_helmet,itm_padded_leather,itm_leather_boots,itm_mace_2,itm_tab_shield_small_round_a, itm_saddle_horse],
  str_14|agi_17|int_11|cha_6|level(14),wp(40),knows_merchant_npc|
  knows_trade_2|knows_weapon_master_1|knows_ironflesh_1|knows_wound_treatment_1|knows_athletics_2|knows_first_aid_1|knows_leadership_1,
  0x000000019d004001570b893712c8d28d00000000001dc8990000000000000000],
  ["npc3_2","Ymira","Ymira",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_head_wrappings,itm_leather_jerkin,itm_wrapping_boots,itm_sword_medieval_b_small, itm_hunter],
  str_24|agi_13|int_11|cha_6|level(14),wp(20),knows_merchant_npc|
  knows_wound_treatment_1|knows_trade_1|knows_first_aid_3|knows_surgery_1|knows_athletics_1|knows_riding_1,
  0x0000000083040001583b6db8dec5925b00000000001d80980000000000000000],
  ["npc4_2","Rolf","Rolf",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_kettle_hat,itm_leather_gloves,itm_studded_leather_coat,itm_leather_boots,itm_sword_medieval_c,itm_tab_shield_heater_c, itm_hunter],
  str_20|agi_13|int_13|cha_10|level(27),wp(110),knows_warrior_npc|
  knows_weapon_master_2|knows_power_strike_2|knows_riding_2|knows_athletics_2|knows_power_throw_2|knows_first_aid_1|knows_surgery_1|knows_tactics_2|knows_leadership_2,
  0x000000057f1074002c75c6a8a58ad72e00000000001e1a890000000000000000],
  ["npc5_2","Baheshtur","Baheshtur",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sword_khergit_2, itm_tab_shield_small_round_b, itm_leather_steppe_cap_b, itm_tribal_warrior_outfit, itm_khergit_leather_boots, itm_steppe_horse],
  str_18|agi_13|int_12|cha_7|level(23),wp(90),knows_warrior_npc|
  knows_riding_2|knows_horse_archery_3|knows_power_draw_3|knows_leadership_2|knows_weapon_master_1,
  0x000000088910318b5c6f972328324a6200000000001cd3310000000000000000],
  ["npc6_2","Firentis","Firentis",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_bastard_sword_a, itm_mail_coif, itm_mail_with_tunic_red, itm_ankle_boots, itm_sumpter_horse],
  str_20|agi_19|int_10|cha_5|level(25),wp(105),knows_warrior_npc|
  knows_riding_2|knows_weapon_master_2|knows_power_strike_2|knows_athletics_3|knows_trainer_1|knows_leadership_1,
  0x00000002050052036a1895d0748f3ca30000000000000f0b0000000000000000],
  ["npc7_2","Deshavi","Deshavi",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_voulge, itm_short_bow, itm_barbed_arrows, itm_nordic_fighter_helmet, itm_leather_gloves, itm_studded_leather_coat, itm_leather_boots, itm_arabian_horse_b],
  str_16|agi_13|int_10|cha_6|level(17),wp(80),knows_tracker_npc|
  knows_tracking_2|knows_athletics_2|knows_spotting_1|knows_pathfinding_1|knows_power_draw_2,
  0x00000001fc08400533a15297634d44f400000000001e02db0000000000000000],
  ["npc8_2","Matheld","Matheld",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sword_viking_2, itm_nordic_helmet, itm_byrnie, itm_leather_boots, itm_courser],
  str_18|agi_15|int_9|cha_10|level(26),wp(90),knows_warrior_npc|
  knows_weapon_master_3|knows_power_strike_2|knows_athletics_2|knows_leadership_3|knows_tactics_1,
  0x00000005800c000637db8314e331e76e00000000001c46db0000000000000000],
  ["npc9_2","Alayen","Alayen",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sword_medieval_c, itm_vaegir_fur_cap, itm_leather_vest, itm_nomad_boots, itm_courser],
  str_22|agi_19|int_7|cha_8|level(17),wp(100),knows_warrior_npc|
  knows_weapon_master_1|knows_riding_1|knows_athletics_1|knows_leadership_1|knows_tactics_1|knows_power_strike_1,
  0x000000030100300f499d5b391b6db8d300000000001dc2e10000000000000000],
  ["npc10_2","Bunduk","Bunduk",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_military_sickle_a, itm_heavy_crossbow, itm_bolts, itm_mail_coif, itm_leather_gloves, itm_aketon_green, itm_leather_boots, itm_saddle_horse],
  str_24|agi_19|int_9|cha_11|level(27),wp(105),knows_warrior_npc|
  knows_weapon_master_3|knows_tactics_1|knows_leadership_1|knows_ironflesh_3|knows_trainer_2|knows_first_aid_2,
  0x0000000a3f081006572c91c71c8d46cb00000000001e468a0000000000000000],
  ["npc11_2","Katrin","Katrin",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sarranid_axe_a, itm_arming_cap, itm_leather_gloves, itm_padded_cloth, itm_ankle_boots, itm_sumpter_horse],
  str_16|agi_17|int_10|cha_10|level(26),wp(70),knows_merchant_npc|
  knows_weapon_master_1|knows_first_aid_1|knows_wound_treatment_2|knows_ironflesh_3|knows_inventory_management_5,
  0x0000000d7f0400035915aa226b4d975200000000001ea49e0000000000000000],
  ["npc12_2","Jeremus","Jeremus",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_iron_staff, itm_padded_coif, itm_leather_gloves, itm_pilgrim_disguise, itm_leather_boots, itm_sumpter_horse],
  str_16|agi_17|int_13|cha_7|level(20),wp(30),  knows_merchant_npc|
  knows_ironflesh_1|knows_power_strike_1|knows_surgery_4|knows_wound_treatment_3|knows_first_aid_3,
  0x000000078000500e4f8ba62a9cd5d36d00000000001e36250000000000000000],
  ["npc13_2","Nizar","Nizar",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_scimitar, itm_tab_shield_small_round_b, itm_sarranid_warrior_cap, itm_sarranid_leather_armor, itm_sarranid_boots_b, itm_courser],
  str_14|agi_17|int_12|cha_8|level(19),wp(80),knows_warrior_npc|
  knows_riding_2|knows_leadership_2|knows_athletics_2|knows_ironflesh_2|knows_power_strike_1|knows_weapon_master_1,
  0x00000004bf0475c85f4e9592de4e574c00000000001e369c0000000000000000],
  ["npc14_2","Lezalit","Lezalit",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sword_medieval_b, itm_tab_shield_heater_c, itm_mail_coif, itm_studded_leather_coat, itm_leather_boots, itm_courser],
  str_18|agi_19|int_11|cha_8|level(23),wp(100),knows_warrior_npc|
  knows_trainer_4|knows_weapon_master_3|knows_leadership_2|knows_power_strike_1,
  0x00000001a410259144d5d1d6eb55e96a00000000001db0db0000000000000000],
  ["npc15_2","Artimenner","Artimenner",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_long_axe, itm_helmet_with_neckguard, itm_leather_gloves, itm_red_gambeson, itm_leather_boots, itm_hunter],
  str_18|agi_13|int_12|cha_8|level(25),wp(80),knows_warrior_npc|
  knows_tactics_2|knows_engineer_4|knows_trade_3|knows_tracking_1|knows_spotting_1,
  0x0000000f2e1021862b4b9123594eab5300000000001d55360000000000000000],
  ["npc16_2","Klethi","Klethi",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sword_viking_2_small, itm_light_throwing_axes, itm_helmet_with_neckguard, itm_leather_gloves, itm_leather_jerkin, itm_ankle_boots, itm_saddle_horse],
  str_14|agi_17|int_8|cha_7|level(17),wp(80),knows_tracker_npc|
  knows_power_throw_3|knows_athletics_2|knows_power_strike_1,
  0x00000000000c100739ce9c805d2f381300000000001cc7ad0000000000000000],
  ["npc17_2","Excalibur","Excalibur",tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_padded_leather,itm_hide_boots,itm_padded_coif,itm_leather_gloves,itm_short_bow, itm_arrows, itm_spear, itm_arrows],
  str_15|agi_16|int_21|cha_12|level(27),wpex(100,75,125,125,60,10),
  knows_ironflesh_2|knows_power_strike_1|knows_power_draw_1|knows_weapon_master_2|knows_shield_1|knows_athletics_2|knows_trainer_1|knows_pathfinding_3|knows_wound_treatment_1|knows_first_aid_1|knows_engineer_1|knows_tactics_3,
  0x00000000f708134136ec6dd865a9ab1b00000000001d6f1b0000000000000000],


  #tier 3
  ["npc1_3","Borcha","Borcha",tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_khergit_war_helmet,itm_lamellar_gauntlets,itm_lamellar_vest_khergit,itm_khergit_leather_boots,itm_sword_medieval_c_small, itm_courser],
  str_16|agi_17|int_12|cha_7|level(14),wp(60),knows_tracker_npc|
  knows_ironflesh_1|knows_power_strike_1|knows_pathfinding_3|knows_athletics_2|knows_tracking_1|knows_riding_2, #skills 2/3 player at that level
  0x00000004bf086143259d061a9046e23500000000001db52c0000000000000000],
  ["npc2_3","Marnid","Marnid", tf_hero|tf_unmoveable_in_party_window, 0,reserved, fac_commoners,[itm_nordic_veteran_archer_helmet,itm_leather_gloves,itm_byrnie,itm_leather_boots,itm_mace_3,itm_tab_shield_small_round_b, itm_saddle_horse],
  str_14|agi_17|int_11|cha_6|level(14),wp(40),knows_merchant_npc|
  knows_trade_2|knows_weapon_master_1|knows_ironflesh_1|knows_wound_treatment_1|knows_athletics_2|knows_first_aid_1|knows_leadership_1,
  0x000000019d004001570b893712c8d28d00000000001dc8990000000000000000],
  ["npc3_3","Ymira","Ymira",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_skullcap,itm_leather_gloves,itm_mail_shirt,itm_wrapping_boots,itm_sword_medieval_c_small, itm_hunter],
  str_24|agi_13|int_11|cha_6|level(14),wp(20),knows_merchant_npc|
  knows_wound_treatment_1|knows_trade_1|knows_first_aid_3|knows_surgery_1|knows_athletics_1|knows_riding_1,
  0x0000000083040001583b6db8dec5925b00000000001d80980000000000000000],
  ["npc4_3","Rolf","Rolf",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_bascinet_2,itm_leather_gloves,itm_surcoat_over_mail,itm_mail_chausses,itm_sword_medieval_c_long,itm_tab_shield_heater_c, itm_hunter],
  str_20|agi_13|int_13|cha_10|level(27),wp(110),knows_warrior_npc|
  knows_weapon_master_2|knows_power_strike_2|knows_riding_2|knows_athletics_2|knows_power_throw_2|knows_first_aid_1|knows_surgery_1|knows_tactics_2|knows_leadership_2,
  0x000000057f1074002c75c6a8a58ad72e00000000001e1a890000000000000000],
  ["npc5_3","Baheshtur","Baheshtur",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_scimitar, itm_tab_shield_small_round_c, itm_khergit_cavalry_helmet, itm_leather_gloves, itm_lamellar_vest, itm_khergit_leather_boots, itm_steppe_horse],
  str_18|agi_13|int_12|cha_7|level(23),wp(90),knows_warrior_npc|
  knows_riding_2|knows_horse_archery_3|knows_power_draw_3|knows_leadership_2|knows_weapon_master_1,
  0x000000088910318b5c6f972328324a6200000000001cd3310000000000000000],
  ["npc6_3","Firentis","Firentis",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_bastard_sword_b, itm_flat_topped_helmet, itm_mail_mittens, itm_haubergeon, itm_mail_chausses, itm_sumpter_horse],
  str_20|agi_19|int_10|cha_5|level(25),wp(105),knows_warrior_npc|
  knows_riding_2|knows_weapon_master_2|knows_power_strike_2|knows_athletics_3|knows_trainer_1|knows_leadership_1,
  0x00000002050052036a1895d0748f3ca30000000000000f0b0000000000000000],
  ["npc7_3","Deshavi","Deshavi",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_long_bardiche, itm_strong_bow, itm_barbed_arrows, itm_nordic_helmet, itm_leather_gloves, itm_mail_hauberk, itm_splinted_leather_greaves, itm_arabian_horse_b],
  str_16|agi_13|int_10|cha_6|level(17),wp(80),knows_tracker_npc|
  knows_tracking_2|knows_athletics_2|knows_spotting_1|knows_pathfinding_1|knows_power_draw_2,
  0x00000001fc08400533a15297634d44f400000000001e02db0000000000000000],
  ["npc8_3","Matheld","Matheld",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_battle_axe, itm_nordic_huscarl_helmet, itm_leather_gloves, itm_mail_hauberk, itm_mail_chausses, itm_courser],
  str_18|agi_15|int_9|cha_10|level(26),wp(90),knows_warrior_npc|
  knows_weapon_master_3|knows_power_strike_2|knows_athletics_2|knows_leadership_3|knows_tactics_1,
  0x00000005800c000637db8314e331e76e00000000001c46db0000000000000000],
  ["npc9_3","Alayen","Alayen",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sword_medieval_c_long, itm_vaegir_lamellar_helmet, itm_leather_gloves, itm_lamellar_vest, itm_leather_boots, itm_courser],
  str_22|agi_19|int_7|cha_8|level(17),wp(100),knows_warrior_npc|
  knows_weapon_master_1|knows_riding_1|knows_athletics_1|knows_leadership_1|knows_tactics_1|knows_power_strike_1,
  0x000000030100300f499d5b391b6db8d300000000001dc2e10000000000000000],
  ["npc10_3","Bunduk","Bunduk",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_military_pick, itm_heavy_crossbow, itm_steel_bolts, itm_kettle_hat, itm_leather_gloves, itm_mail_with_tunic_green, itm_leather_boots, itm_saddle_horse],
  str_24|agi_19|int_9|cha_11|level(27),wp(105),knows_warrior_npc|
  knows_weapon_master_3|knows_tactics_1|knows_leadership_1|knows_ironflesh_3|knows_trainer_2|knows_first_aid_2,
  0x0000000a3f081006572c91c71c8d46cb00000000001e468a0000000000000000],
  ["npc11_3","Katrin","Katrin",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sarranid_axe_b, itm_arming_cap, itm_leather_gloves, itm_mail_with_surcoat, itm_mail_chausses, itm_sumpter_horse],
  str_16|agi_17|int_10|cha_10|level(26),wp(70),knows_merchant_npc|
  knows_weapon_master_1|knows_first_aid_1|knows_wound_treatment_2|knows_ironflesh_3|knows_inventory_management_5,
  0x0000000d7f0400035915aa226b4d975200000000001ea49e0000000000000000],
  ["npc12_3","Jeremus","Jeremus",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_iron_staff, itm_mail_coif, itm_mail_mittens, itm_pilgrim_disguise, itm_mail_chausses, itm_sumpter_horse],
  str_16|agi_17|int_13|cha_7|level(20),wp(30),  knows_merchant_npc|
  knows_ironflesh_1|knows_power_strike_1|knows_surgery_4|knows_wound_treatment_3|knows_first_aid_3,
  0x000000078000500e4f8ba62a9cd5d36d00000000001e36250000000000000000],
  ["npc13_3","Nizar","Nizar",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_scimitar, itm_tab_shield_small_round_c, itm_sarranid_mail_coif, itm_arabian_armor_b, itm_sarranid_boots_c, itm_courser],
  str_14|agi_17|int_12|cha_8|level(19),wp(80),knows_warrior_npc|
  knows_riding_2|knows_leadership_2|knows_athletics_2|knows_ironflesh_2|knows_power_strike_1|knows_weapon_master_1,
  0x00000004bf0475c85f4e9592de4e574c00000000001e369c0000000000000000],
  ["npc14_3","Lezalit","Lezalit",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sword_medieval_c, itm_tab_shield_heater_c, itm_bascinet_2, itm_leather_gloves, itm_surcoat_over_mail, itm_mail_chausses, itm_courser],
  str_18|agi_19|int_11|cha_8|level(23),wp(100),knows_warrior_npc|
  knows_trainer_4|knows_weapon_master_3|knows_leadership_2|knows_power_strike_1,
  0x00000001a410259144d5d1d6eb55e96a00000000001db0db0000000000000000],
  ["npc15_3","Artimenner","Artimenner",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_long_axe_b, itm_guard_helmet, itm_mail_mittens, itm_haubergeon, itm_mail_chausses, itm_hunter],
  str_18|agi_13|int_12|cha_8|level(25),wp(80),knows_warrior_npc|
  knows_tactics_2|knows_engineer_4|knows_trade_3|knows_tracking_1|knows_spotting_1,
  0x0000000f2e1021862b4b9123594eab5300000000001d55360000000000000000],
  ["npc16_3","Klethi","Klethi",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sword_viking_2_small, itm_throwing_axes, itm_vaegir_fur_helmet, itm_leather_gloves, itm_lamellar_vest, itm_leather_boots, itm_saddle_horse],
  str_14|agi_17|int_8|cha_7|level(17),wp(80),knows_tracker_npc|
  knows_power_throw_3|knows_athletics_2|knows_power_strike_1,
  0x00000000000c100739ce9c805d2f381300000000001cc7ad0000000000000000],
  ["npc17_3","Excalibur","Excalibur",tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_lamellar_vest,itm_leather_boots,itm_leather_cap,itm_mail_mittens,itm_khergit_bow, itm_barbed_arrows, itm_boar_spear, itm_barbed_arrows, itm_saddle_horse],
  str_15|agi_16|int_21|cha_12|level(27),wpex(175,150,180,180,125,60),
  knows_ironflesh_2|knows_power_strike_1|knows_power_draw_1|knows_weapon_master_2|knows_shield_1|knows_athletics_2|knows_trainer_1|knows_pathfinding_3|knows_wound_treatment_1|knows_first_aid_1|knows_engineer_1|knows_tactics_3,
  0x00000000f708134136ec6dd865a9ab1b00000000001d6f1b0000000000000000],


  #tier 4
  ["npc1_4","Borcha","Borcha",tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_khergit_guard_helmet,itm_lamellar_gauntlets,itm_khergit_guard_armor,itm_khergit_guard_boots,itm_sword_viking_3_small, itm_courser],
  str_16|agi_17|int_12|cha_7|level(14),wp(60),knows_tracker_npc|
  knows_ironflesh_1|knows_power_strike_1|knows_pathfinding_3|knows_athletics_2|knows_tracking_1|knows_riding_2, #skills 2/3 player at that level
  0x00000004bf086143259d061a9046e23500000000001db52c0000000000000000],
  ["npc2_4","Marnid","Marnid", tf_hero|tf_unmoveable_in_party_window, 0,reserved, fac_commoners,[itm_nordic_helmet,itm_mail_mittens,itm_mail_hauberk,itm_mail_chausses,itm_mace_4,itm_tab_shield_small_round_c, itm_saddle_horse],
  str_14|agi_17|int_11|cha_6|level(14),wp(40),knows_merchant_npc|
  knows_trade_2|knows_weapon_master_1|knows_ironflesh_1|knows_wound_treatment_1|knows_athletics_2|knows_first_aid_1|knows_leadership_1,
  0x000000019d004001570b893712c8d28d00000000001dc8990000000000000000],
  ["npc3_4","Ymira","Ymira",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_guard_helmet,itm_gauntlets,itm_plate_armor,itm_plate_boots,itm_sword_viking_3_small, itm_hunter],
  str_24|agi_13|int_11|cha_6|level(14),wp(20),knows_merchant_npc|
  knows_wound_treatment_1|knows_trade_1|knows_first_aid_3|knows_surgery_1|knows_athletics_1|knows_riding_1,
  0x0000000083040001583b6db8dec5925b00000000001d80980000000000000000],
  ["npc4_4","Rolf","Rolf",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_full_helm,itm_scale_gauntlets,itm_heraldic_mail_with_tabard,itm_iron_greaves,itm_sword_medieval_d_long,itm_tab_shield_heater_d, itm_hunter],
  str_20|agi_13|int_13|cha_10|level(27),wp(110),knows_warrior_npc|
  knows_weapon_master_2|knows_power_strike_2|knows_riding_2|knows_athletics_2|knows_power_throw_2|knows_first_aid_1|knows_surgery_1|knows_tactics_2|knows_leadership_2,
  0x000000057f1074002c75c6a8a58ad72e00000000001e1a890000000000000000],
  ["npc5_4","Baheshtur","Baheshtur",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_scimitar_b, itm_tab_shield_small_round_c, itm_khergit_guard_helmet, itm_scale_gauntlets, itm_lamellar_armor, itm_iron_greaves, itm_steppe_horse],
  str_18|agi_13|int_12|cha_7|level(23),wp(90),knows_warrior_npc|
  knows_riding_2|knows_horse_archery_3|knows_power_draw_3|knows_leadership_2|knows_weapon_master_1,
  0x000000088910318b5c6f972328324a6200000000001cd3310000000000000000],
  ["npc6_4","Firentis","Firentis",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sword_two_handed_b, itm_bascinet, itm_gauntlets, itm_cuir_bouilli, itm_plate_boots, itm_sumpter_horse],
  str_20|agi_19|int_10|cha_5|level(25),wp(105),knows_warrior_npc|
  knows_riding_2|knows_weapon_master_2|knows_power_strike_2|knows_athletics_3|knows_trainer_1|knows_leadership_1,
  0x00000002050052036a1895d0748f3ca30000000000000f0b0000000000000000],
  ["npc7_4","Deshavi","Deshavi",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_great_long_bardiche, itm_war_bow, itm_khergit_arrows, itm_nordic_huscarl_helmet, itm_scale_gauntlets, itm_heraldic_mail_with_tabard, itm_iron_greaves, itm_arabian_horse_b],
  str_16|agi_13|int_10|cha_6|level(17),wp(80),knows_tracker_npc|
  knows_tracking_2|knows_athletics_2|knows_spotting_1|knows_pathfinding_1|knows_power_draw_2,
  0x00000001fc08400533a15297634d44f400000000001e02db0000000000000000],
  ["npc8_4","Matheld","Matheld",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_great_axe, itm_nordic_warlord_helmet, itm_mail_mittens, itm_banded_armor, itm_mail_chausses, itm_courser],
  str_18|agi_15|int_9|cha_10|level(26),wp(90),knows_warrior_npc|
  knows_weapon_master_3|knows_power_strike_2|knows_athletics_2|knows_leadership_3|knows_tactics_1,
  0x00000005800c000637db8314e331e76e00000000001c46db0000000000000000],
  ["npc9_4","Alayen","Alayen",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_bastard_sword_b, itm_vaegir_war_helmet, itm_lamellar_gauntlets, itm_banded_armor, itm_iron_greaves, itm_courser],
  str_22|agi_19|int_7|cha_8|level(17),wp(100),knows_warrior_npc|
  knows_weapon_master_1|knows_riding_1|knows_athletics_1|knows_leadership_1|knows_tactics_1|knows_power_strike_1,
  0x000000030100300f499d5b391b6db8d300000000001dc2e10000000000000000],
  ["npc10_4","Bunduk","Bunduk",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_military_pick, itm_sniper_crossbow, itm_steel_bolts, itm_full_helm, itm_mail_mittens, itm_surcoat_over_mail, itm_splinted_leather_greaves, itm_saddle_horse],
  str_24|agi_19|int_9|cha_11|level(27),wp(105),knows_warrior_npc|
  knows_weapon_master_3|knows_tactics_1|knows_leadership_1|knows_ironflesh_3|knows_trainer_2|knows_first_aid_2,
  0x0000000a3f081006572c91c71c8d46cb00000000001e468a0000000000000000],
  ["npc11_4","Katrin","Katrin",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sarranid_two_handed_axe_a, itm_great_helmet, itm_gauntlets, itm_brigandine_red, itm_plate_boots, itm_sumpter_horse],
  str_16|agi_17|int_10|cha_10|level(26),wp(70),knows_merchant_npc|
  knows_weapon_master_1|knows_first_aid_1|knows_wound_treatment_2|knows_ironflesh_3|knows_inventory_management_5,
  0x0000000d7f0400035915aa226b4d975200000000001ea49e0000000000000000],
  ["npc12_4","Jeremus","Jeremus",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_iron_staff, itm_kettle_hat, itm_gauntlets, itm_surcoat_over_mail, itm_plate_boots, itm_sumpter_horse],
  str_16|agi_17|int_13|cha_7|level(20),wp(30),  knows_merchant_npc|
  knows_ironflesh_1|knows_power_strike_1|knows_surgery_4|knows_wound_treatment_3|knows_first_aid_3,
  0x000000078000500e4f8ba62a9cd5d36d00000000001e36250000000000000000],
  ["npc13_4","Nizar","Nizar",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_scimitar_b, itm_tab_shield_small_round_c, itm_sarranid_veiled_helmet, itm_scale_gauntlets, itm_mamluke_mail, itm_sarranid_boots_d, itm_courser],
  str_14|agi_17|int_12|cha_8|level(19),wp(80),knows_warrior_npc|
  knows_riding_2|knows_leadership_2|knows_athletics_2|knows_ironflesh_2|knows_power_strike_1|knows_weapon_master_1,
  0x00000004bf0475c85f4e9592de4e574c00000000001e369c0000000000000000],
  ["npc14_4","Lezalit","Lezalit",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sword_medieval_d_long, itm_tab_shield_heater_d, itm_great_helmet, itm_gauntlets, itm_heraldic_mail_with_surcoat, itm_plate_boots, itm_courser],
  str_18|agi_19|int_11|cha_8|level(23),wp(100),knows_warrior_npc|
  knows_trainer_4|knows_weapon_master_3|knows_leadership_2|knows_power_strike_1,
  0x00000001a410259144d5d1d6eb55e96a00000000001db0db0000000000000000],
  ["npc15_4","Artimenner","Artimenner",tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_long_axe_c, itm_full_helm, itm_scale_gauntlets, itm_heraldic_mail_with_surcoat, itm_iron_greaves, itm_hunter],
  str_18|agi_13|int_12|cha_8|level(25),wp(80),knows_warrior_npc|
  knows_tactics_2|knows_engineer_4|knows_trade_3|knows_tracking_1|knows_spotting_1,
  0x0000000f2e1021862b4b9123594eab5300000000001d55360000000000000000],
  ["npc16_4","Klethi","Klethi",tf_female|tf_hero|tf_unmoveable_in_party_window, 0, reserved,  fac_commoners,[itm_sword_viking_3_small, itm_heavy_throwing_axes, itm_vaegir_lamellar_helmet, itm_lamellar_gauntlets, itm_lamellar_armor, itm_khergit_guard_boots, itm_saddle_horse],
  str_14|agi_17|int_8|cha_7|level(17),wp(80),knows_tracker_npc|
  knows_power_throw_3|knows_athletics_2|knows_power_strike_1,
  0x00000000000c100739ce9c805d2f381300000000001cc7ad0000000000000000],
  ["npc17_4","Excalibur","Excalibur",tf_hero|tf_unmoveable_in_party_window, 0, reserved, fac_commoners,[itm_lamellar_armor,itm_splinted_greaves,itm_skullcap,itm_lamellar_gauntlets,itm_strong_bow, itm_bodkin_arrows, itm_war_spear, itm_bodkin_arrows, itm_courser],
  str_15|agi_16|int_21|cha_12|level(27),wpex(175,150,180,180,125,60),
  knows_ironflesh_2|knows_power_strike_1|knows_power_draw_1|knows_weapon_master_2|knows_shield_1|knows_athletics_2|knows_trainer_1|knows_pathfinding_3|knows_wound_treatment_1|knows_first_aid_1|knows_engineer_1|knows_tactics_3,
  0x00000000f708134136ec6dd865a9ab1b00000000001d6f1b0000000000000000],

...

module_scripts.py starting around line 51000 (give or take for my 24 new companions' code blocks):
    (try_begin),
      (eq, ":companion_alive", 0), #for dead companions, we check their class and level to get the right template
      (try_for_range, ":cur_slot", slot_player_companion_ids_begin, slot_player_companion_ids_end),
        (player_slot_eq, ":my_player_no", ":cur_slot", ":troop_no"), #check which companion we're using (since this isn't sent as a parameter...)
        (try_begin),
          (gt, ":cur_slot", slot_player_companion_ids_begin),
          (val_add, ":canvas_no", 2), #the second companion uses different troops
        (try_end),
        (val_add, ":cur_slot", 2),
        (player_get_slot, ":template_no", ":my_player_no", ":cur_slot"), #get their class
        (val_add, ":cur_slot", 2),
        (player_get_slot, ":level_no", ":my_player_no", ":cur_slot"), #and upgrade it for their level
        (try_begin),
          (ge, ":template_no", "trp_npc1_1"), #companion class troops come after faction class troops
          (val_mul, ":level_no", 17), #there are (companion mod)17 at each level tier (one for each companion) so multiply by (companion mod)17 to get to the right level
          (val_add, ":template_no", ":level_no"),
        (else_try),
          (val_mul, ":level_no", 21), #(companion mod)21 at each level tier for faction classes ((companion mod)7 factions * 3 troops, one ranged, one melee, one cav)
          (val_add, ":template_no", ":level_no"),
        (try_end),
        (try_for_range, ":cur_inv_slot", 0, 8 ),
          (troop_get_inventory_slot, ":cur_item", ":template_no", ":cur_inv_slot"),
          (ge, ":cur_item", 0),
          (cur_tableau_add_override_item, ":cur_item"),
        (try_end),
      (try_end),
    (try_end),
(Note: I highlighted a line that I changed for a different purpose in purple)

The bug I'm getting is that all the companions, not just my new one, are upgrading to the previous companion's next tier each time (except for borcha, marnid, and ymira, who end up down one tier from the others).

The second set of code should have been the problem and my change should have resolved it, but there seems to be a second set of code somewhere that overrides this change.  The original code was a 16 instead of a 17, just for reference.

EDIT:  I figured it out.  There is a second script managing the troop updates.  If anyone else is curious how it's done, the code is in the next post from me (with changes in red).
 

Eleazar16

Recruit
Best answers
0
module_scripts.py around 30 lines into the "cf_multiplayer_upgrade_companion_equipment" script:
(try_begin),
      (is_between, ":companion_template", multiplayer_coop_class_templates_begin, multiplayer_coop_class_templates_end),
      (assign, ":multiplier", 21), #formerly 18 (6*3 for vanilla factions)
    (else_try),
      (assign, ":multiplier", 18 ), #formerly 16 (klethi, npc16, max companion id)
    (try_end),
   
    (try_begin),
      (lt, ":companion_level", 3),
      (store_mul, ":template_leveler", ":companion_level", ":multiplier"),
      (val_add, ":companion_template", ":template_leveler"),
    (else_try),
      (store_mul, ":template_leveler", 3, ":multiplier"), #4 is max level
      (val_add, ":companion_template", ":template_leveler"),
    (try_end),