Hello, I tweaked my initialize aristocracy script in order to have set family relationships (I've got some factions with 10 lords/ladies and some others with standard 20 lord/ladies).
Everything works fine except that when I enter a town / castle where ladies are present I get the following error code and cannot see ladies (incl. married ladies):
This is my code for initialize_aristocracy (npc_decision_checklist_male_guardian_assess_suitor hasn't been touched). I use Diplomacy as a base.
I've had a look around the forum but could not find a solution; I've seen that a few people encountered this error in the past so maybe you can point me in the right direction! thanks!
Everything works fine except that when I enter a town / castle where ladies are present I get the following error code and cannot see ladies (incl. married ladies):
Code:
SCRIPT ERROR ON OPCODE 520: Invalid Troop ID: -1; LINE NO: 2:
At script: npc_decision_checklist_male_guardian_assess_suitor. At script: npc_decision_checklist_male_guardian_assess_suitor. SCRIPT ERROR ON OPCODE 2173: Invalid Troop ID: -1; LINE NO: 3:
At script: npc_decision_checklist_male_guardian_assess_suitor. At script: npc_decision_checklist_male_guardian_assess_suitor. At script: npc_decision_checklist_male_guardian_assess_suitor. SCRIPT ERROR ON OPCODE 2190: Invalid Faction ID: -1; LINE NO: 10:
At script: npc_decision_checklist_male_guardian_assess_suitor. At script: npc_decision_checklist_male_guardian_assess_suitor. SCRIPT ERROR ON OPCODE 1073742364: Invalid Troop ID: -1; LINE NO: 34:
At script: npc_decision_checklist_male_guardian_assess_suitor. At script: npc_decision_checklist_male_guardian_assess_suitor. SCRIPT ERROR ON OPCODE 1073742364: Invalid Troop ID: -1; LINE NO: 35:
At script: npc_decision_checklist_male_guardian_assess_suitor. At script: npc_decision_checklist_male_guardian_assess_suitor. SCRIPT ERROR ON OPCODE 540: Invalid Troop ID: -1; LINE NO: 36:
At script: npc_decision_checklist_male_guardian_assess_suitor. At script: npc_decision_checklist_male_guardian_assess_suitor. At script: npc_decision_checklist_male_guardian_assess_suitor. SCRIPT ERROR ON OPCODE 540: Invalid Troop ID: -1; LINE NO: 41:
At script: npc_decision_checklist_male_guardian_assess_suitor. At script: npc_decision_checklist_male_guardian_assess_suitor. At script: npc_decision_checklist_male_guardian_assess_suitor.
This is my code for initialize_aristocracy (npc_decision_checklist_male_guardian_assess_suitor hasn't been touched). I use Diplomacy as a base.
Code:
("initialize_aristocracy",
[
#LORD OCCUPATIONS, BLOOD RELATIONSHIPS, RENOWN AND REPUTATIONS
#King ages
(try_for_range, ":cur_troop", kings_begin, kings_end),
(troop_set_slot, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
(store_random_in_range, ":age", 50, 60),
(troop_set_slot, ":cur_troop", slot_troop_age, ":age"),
##diplomacy start+
#(eq, ":cur_troop", "trp_kingdom_5_lord"),#<-- There was no reason for this to be in the loop, so moved it out.
#(troop_set_slot, ":cur_troop", slot_troop_age, 47),
(try_end),
(troop_set_slot, "trp_kingdom_5_lord", slot_troop_age, 47),#<-- Moved from above
##diplomacy end+
# Lord's Ages + Family Tree
# Kingdom 1
(troop_set_slot, "trp_knight_1_1", slot_troop_age, 50),
(troop_set_slot, "trp_knight_1_1", slot_troop_spouse, "trp_kingdom_1_lady_1"),
(troop_set_slot, "trp_knight_1_13", slot_troop_father, "trp_knight_1_1"),
(troop_set_slot, "trp_knight_1_13", slot_troop_mother, "trp_kingdom_1_lady_1"),
(troop_set_slot, "trp_kingdom_1_lady_13", slot_troop_father, "trp_knight_1_1"),
(troop_set_slot, "trp_kingdom_1_lady_13", slot_troop_mother, "trp_kingdom_1_lady_1"),
(troop_set_slot, "trp_knight_1_2", slot_troop_age,50),
(troop_set_slot, "trp_knight_1_2", slot_troop_spouse, "trp_kingdom_1_lady_2"),
(troop_set_slot, "trp_knight_1_14", slot_troop_father, "trp_knight_1_2"),
(troop_set_slot, "trp_knight_1_14", slot_troop_mother, "trp_kingdom_1_lady_2"),
(troop_set_slot, "trp_kingdom_1_lady_14", slot_troop_father, "trp_knight_1_2"),
(troop_set_slot, "trp_kingdom_1_lady_14", slot_troop_mother, "trp_kingdom_1_lady_2"),
(troop_set_slot, "trp_knight_1_3", slot_troop_age,50),
(troop_set_slot, "trp_knight_1_3", slot_troop_spouse, "trp_kingdom_1_lady_3"),
(troop_set_slot, "trp_knight_1_15", slot_troop_father, "trp_knight_1_3"),
(troop_set_slot, "trp_knight_1_15", slot_troop_mother, "trp_kingdom_1_lady_3"),
(troop_set_slot, "trp_kingdom_1_lady_15", slot_troop_father, "trp_knight_1_3"),
(troop_set_slot, "trp_kingdom_1_lady_15", slot_troop_mother, "trp_kingdom_1_lady_3"),
(troop_set_slot, "trp_knight_1_4", slot_troop_age, 50),
(troop_set_slot, "trp_knight_1_4", slot_troop_spouse, "trp_kingdom_1_lady_4"),
(troop_set_slot, "trp_knight_1_16", slot_troop_father, "trp_knight_1_4"),
(troop_set_slot, "trp_knight_1_16", slot_troop_mother, "trp_kingdom_1_lady_4"),
(troop_set_slot, "trp_kingdom_1_lady_16", slot_troop_father, "trp_knight_1_4"),
(troop_set_slot, "trp_kingdom_1_lady_16", slot_troop_mother, "trp_kingdom_1_lady_4"),
(troop_set_slot, "trp_knight_1_5", slot_troop_age,50),
(troop_set_slot, "trp_knight_1_5", slot_troop_spouse, "trp_kingdom_1_lady_5"),
(troop_set_slot, "trp_knight_1_17", slot_troop_father, "trp_knight_1_5"),
(troop_set_slot, "trp_knight_1_17", slot_troop_mother, "trp_kingdom_1_lady_5"),
(troop_set_slot, "trp_kingdom_1_lady_17", slot_troop_father, "trp_knight_1_5"),
(troop_set_slot, "trp_kingdom_1_lady_17", slot_troop_mother, "trp_kingdom_1_lady_5"),
(troop_set_slot, "trp_knight_1_6", slot_troop_age,50),
(troop_set_slot, "trp_knight_1_6", slot_troop_spouse, "trp_kingdom_1_lady_6"),
(troop_set_slot, "trp_knight_1_18", slot_troop_father, "trp_knight_1_6"),
(troop_set_slot, "trp_knight_1_18", slot_troop_mother, "trp_kingdom_1_lady_6"),
(troop_set_slot, "trp_kingdom_1_lady_18", slot_troop_father, "trp_knight_1_6"),
(troop_set_slot, "trp_kingdom_1_lady_18", slot_troop_mother, "trp_kingdom_1_lady_6"),
(troop_set_slot, "trp_knight_1_7", slot_troop_age,50),
(troop_set_slot, "trp_knight_1_7", slot_troop_spouse, "trp_kingdom_1_lady_7"),
(troop_set_slot, "trp_knight_1_19", slot_troop_father, "trp_knight_1_7"),
(troop_set_slot, "trp_knight_1_19", slot_troop_mother, "trp_kingdom_1_lady_7"),
(troop_set_slot, "trp_kingdom_1_lady_19", slot_troop_father, "trp_knight_1_7"),
(troop_set_slot, "trp_kingdom_1_lady_19", slot_troop_mother, "trp_kingdom_1_lady_7"),
(troop_set_slot, "trp_knight_1_8", slot_troop_age,50),
(troop_set_slot, "trp_knight_1_8", slot_troop_spouse, "trp_kingdom_1_lady_8"),
(troop_set_slot, "trp_knight_1_20", slot_troop_father, "trp_knight_1_8"),
(troop_set_slot, "trp_knight_1_20", slot_troop_mother, "trp_kingdom_1_lady_8"),
(troop_set_slot, "trp_kingdom_1_lady_20", slot_troop_father, "trp_knight_1_8"),
(troop_set_slot, "trp_kingdom_1_lady_20", slot_troop_mother, "trp_kingdom_1_lady_8"),
(troop_set_slot, "trp_knight_1_9", slot_troop_age,30),
(troop_set_slot, "trp_kingdom_1_lady_9", slot_troop_guardian, "trp_knight_1_9"),
(troop_set_slot, "trp_knight_1_10", slot_troop_age,30),
(troop_set_slot, "trp_kingdom_1_lady_10", slot_troop_guardian, "trp_knight_1_10"),
(troop_set_slot, "trp_knight_1_11", slot_troop_age,30),
(troop_set_slot, "trp_kingdom_1_lady_11", slot_troop_guardian, "trp_knight_1_11"),
(troop_set_slot, "trp_knight_1_12", slot_troop_age,30),
(troop_set_slot, "trp_kingdom_1_lady_12", slot_troop_guardian, "trp_knight_1_12"),
(troop_set_slot, "trp_knight_1_13", slot_troop_age,20),
(troop_set_slot, "trp_knight_1_14", slot_troop_age,20),
(troop_set_slot, "trp_knight_1_15", slot_troop_age,20),
(troop_set_slot, "trp_knight_1_16", slot_troop_age,20),
(troop_set_slot, "trp_knight_1_17", slot_troop_age,20),
(troop_set_slot, "trp_knight_1_18", slot_troop_age,20),
(troop_set_slot, "trp_knight_1_19", slot_troop_age,20),
(troop_set_slot, "trp_knight_1_20", slot_troop_age,20),
(troop_set_slot, "trp_kingdom_1_lady_1", slot_troop_age,50),
(troop_set_slot, "trp_kingdom_1_lady_2", slot_troop_age,50),
(troop_set_slot, "trp_kingdom_1_lady_3", slot_troop_age,50),
(troop_set_slot, "trp_kingdom_1_lady_4", slot_troop_age,50),
(troop_set_slot, "trp_kingdom_1_lady_5", slot_troop_age,50),
(troop_set_slot, "trp_kingdom_1_lady_6", slot_troop_age,50),
(troop_set_slot, "trp_kingdom_1_lady_7", slot_troop_age,50),
(troop_set_slot, "trp_kingdom_1_lady_8", slot_troop_age,50),
(troop_set_slot, "trp_kingdom_1_lady_9", slot_troop_age,25),
(troop_set_slot, "trp_kingdom_1_lady_10", slot_troop_age,25),
(troop_set_slot, "trp_kingdom_1_lady_11", slot_troop_age,25),
(troop_set_slot, "trp_kingdom_1_lady_12", slot_troop_age,25),
(troop_set_slot, "trp_kingdom_1_lady_13", slot_troop_age,20),
(troop_set_slot, "trp_kingdom_1_lady_14", slot_troop_age,20),
(troop_set_slot, "trp_kingdom_1_lady_15", slot_troop_age,20),
(troop_set_slot, "trp_kingdom_1_lady_16", slot_troop_age,20),
(troop_set_slot, "trp_kingdom_1_lady_17", slot_troop_age,20),
(troop_set_slot, "trp_kingdom_1_lady_18", slot_troop_age,20),
(troop_set_slot, "trp_kingdom_1_lady_19", slot_troop_age,20),
(troop_set_slot, "trp_kingdom_1_lady_20", slot_troop_age,20),
##more kingdoms like the above
#The first thing - family structure
#lords 1 to 8 are patriarchs with one live-at-home son and one daughter. They come from one of six possible ancestors, thus making it likely that there will be two sets of siblings
#lords 9 to 12 are unmarried landowners with sisters
#lords 13 to 20 are sons who still live in their fathers' houses
#For the sake of simplicity, we can assume that all male aristocrats in prior generations either married commoners or procured their brides from the Old Country, thus discounting intermarriage
(try_for_range, ":cur_troop", kingdom_ladies_begin, kingdom_ladies_end),
(troop_set_slot, ":cur_troop", slot_troop_occupation, slto_kingdom_lady),
(try_end),
(assign, ":cur_lady", "trp_kingdom_1_lady_1"),
(try_for_range, ":cur_troop", lords_begin, lords_end),
(troop_set_slot, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),
# (store_random_in_range, ":father_age_at_birth", 23, 26),
# (store_random_in_range, ":mother_age_at_birth", 19, 22),
(try_begin),
# (lt, ":npc_seed", 8), #NPC seed is the order in the faction
##diplomacy start+ do not overwrite reputation if it was already set explicitly
# (troop_get_slot, ":reputation", ":cur_troop", slot_lord_reputation_type),
# (try_begin),
# (lt, ":reputation", 1),
#Original behavior:
# (assign, ":reputation", ":npc_seed"),
# (try_end),
##diplomacy end+
# (store_random_in_range, ":age", 45, 64),
##diplomacy start+ only set father if not already set
# (try_begin),#<- dplmc+ added
# (troop_slot_eq, ":cur_troop", slot_troop_father, -1),#<- dplmc+ added
# (store_random_in_range, ":father", 0, 6), #six possible fathers
# (val_add, ":father", ":ancestor_seed"),
# (troop_set_slot, ":cur_troop", slot_troop_father, ":father"),
# (try_end),#<- dplmc+ added
##diplomacy end+
#wife
##diplomacy start+ do not rebind an already-set wife
# (try_begin),
# (troop_slot_eq, ":cur_troop", slot_troop_spouse, -1),
#There may be a better solution, but to avoid oddities disable automatic spouses if there is a gender mismatch.
#Mods that add additional races may want to tweak this (for example if some races shouldn't intermarry).
# (call_script, "script_dplmc_store_is_female_troop_1_troop_2", ":cur_troop", ":cur_lady"),
#Types are stored to reg0 and reg1.
# (neq, reg0, reg1),#lord and lady aren't both female or both non-female
# (val_mul, reg0, reg1),
# (eq, reg0, 0),#at least one of lord or lady is non-female
##diplomacy end+
# (troop_set_slot, ":cur_troop", slot_troop_spouse, ":cur_lady"),
# (troop_set_slot, ":cur_lady", slot_troop_spouse, ":cur_troop"),
# (store_faction_of_troop, ":cur_troop_faction", ":cur_troop"),
# (call_script, "script_troop_set_title_according_to_faction", ":cur_lady", ":cur_troop_faction"),
(store_random_in_range, ":wife_reputation", 20, 26),
(try_begin),
(eq, ":wife_reputation", 20),
(assign, ":wife_reputation", lrep_conventional),
(try_end),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, ":wife_reputation"),
# (call_script, "script_init_troop_age", ":cur_lady", 49),
(call_script, "script_add_lady_items", ":cur_lady"),
(val_add, ":cur_lady", 1),
##diplomacy start+
## (try_end),
##diplomacy end+
#daughter
##diplomacy start+
## (try_begin),
##diplomacy end+
# (troop_set_slot, ":cur_lady", slot_troop_father, ":cur_troop"),
(store_sub, ":mother", ":cur_lady", 1),
# (call_script, "script_init_troop_age", ":cur_lady", 19),
##diplomacy start+
#fix native bug (daughters are their own mothers)
# Note: this bug was fixed in native version 1.158
## (troop_set_slot, ":cur_lady", slot_troop_mother, ":cur_lady"),
# (troop_set_slot, ":cur_lady", slot_troop_mother, ":mother"),
## (try_begin),
#swap father and mother slots if the lord was female (do nothing if both were female)
## (call_script, "script_dplmc_store_is_female_troop_1_troop_2", ":cur_troop", ":mother"),
## (neq, reg0, 0),#:cur_troop is female
## (eq, reg1, 0),#:mother is not female
## (troop_set_slot, ":cur_lady", slot_troop_mother, ":cur_troop"),
## (troop_set_slot, ":cur_lady", slot_troop_father, ":mother"),
## (try_end),
##diplomacy end+
(store_random_in_range, ":lady_reputation", lrep_conventional, 34), #33% chance of father-derived
(try_begin),
(le, ":lady_reputation", 25),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, ":lady_reputation"),
(else_try),
(eq, ":lady_reputation", 26),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_conventional),
(else_try),
(eq, ":lady_reputation", 27),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_moralist),
(else_try), #Idibil
(assign, ":reputation", 1), #Idibl
(else_try),
(assign, ":guardian_reputation", ":reputation"),
(try_begin),
(this_or_next|eq, ":guardian_reputation", lrep_martial),
(eq, ":guardian_reputation", 0),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_conventional),
(else_try),
(eq, ":guardian_reputation", lrep_quarrelsome),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_otherworldly),
(else_try),
(eq, ":guardian_reputation", lrep_selfrighteous),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_ambitious),
(else_try),
(eq, ":guardian_reputation", lrep_cunning),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_adventurous),
(else_try),
(eq, ":guardian_reputation", lrep_goodnatured),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_adventurous),
(else_try),
(eq, ":guardian_reputation", lrep_debauched),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_ambitious),
(else_try),
(eq, ":guardian_reputation", lrep_upstanding),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, lrep_moralist),
(try_end),
(try_end),
(call_script, "script_add_lady_items", ":cur_lady"),
(val_add, ":cur_lady", 1),
##diplomacy start+
## (try_end),
##diplomacy end+
#high renown
(else_try), #Older unmarried lords
# (is_between, ":npc_seed", 8, 12),
# (store_random_in_range, ":age", 25, 36),
##diplomacy start+ do not overwrite reputation if it was already set explicitly
(troop_get_slot, ":reputation", ":cur_troop", slot_lord_reputation_type),
(try_begin),
(lt, ":reputation", 1),
#Original behavior:
(store_random_in_range, ":reputation", 0, 8),
(try_end),
##diplomacy end+
(store_random_in_range, ":sister_reputation", 20, 26),
(try_begin),
(eq, ":sister_reputation", 20),
(assign, ":sister_reputation", lrep_conventional),
(try_end),
(troop_set_slot, ":cur_lady", slot_lord_reputation_type, ":sister_reputation"),
(troop_set_slot, ":cur_lady", slot_troop_guardian, ":cur_troop"),
##diplomacy start+
#Initialize parents
# (try_begin),
# (troop_slot_eq, ":cur_troop", slot_troop_father, -1),
# (store_mul, ":new_index", ":cur_troop", DPLMC_VIRTUAL_RELATIVE_MULTIPLIER),#defined in module_constants.py
# (val_add, ":new_index", DPLMC_VIRTUAL_RELATIVE_FATHER_OFFSET),#defined in module_constants.py
# (troop_set_slot, ":cur_troop", slot_troop_father, ":new_index"),
# (troop_slot_eq, ":cur_lady", slot_troop_father, -1),
# (troop_set_slot, ":cur_lady", slot_troop_father, ":new_index"),
# (try_end),
# (try_begin),
# (troop_slot_eq, ":cur_troop", slot_troop_mother, -1),
# (store_mul, ":new_index", ":cur_troop", DPLMC_VIRTUAL_RELATIVE_MULTIPLIER),#defined in module_constants.py
# (val_add, ":new_index", DPLMC_VIRTUAL_RELATIVE_MOTHER_OFFSET),#defined in module_constants.py
# (troop_set_slot, ":cur_troop", slot_troop_mother, ":new_index"),
# (troop_slot_eq, ":cur_lady", slot_troop_mother, -1),
# (troop_set_slot, ":cur_lady", slot_troop_mother, ":new_index"),
# (try_end),
##diplomacy end+
(call_script, "script_init_troop_age", ":cur_lady", 21),
(call_script, "script_add_lady_items", ":cur_lady"),
(val_add, ":cur_lady", 1),
(else_try), #Younger unmarried lords
#age is father's minus 20 to 25
(store_sub, ":father", ":cur_troop", 12),
##diplomacy start+
#Some submods don't pay attention to this aspect of the troop list, and
#so initialization produces absurd or impossible results. Prevent such
#things from appearing in the game.
# (try_begin),
#"father" can be father or mother
#(troop_get_type, ":parent_type", ":father"),
## (try_begin),
#(eq, ":parent_type", tf_female),
# (call_script, "script_cf_dplmc_troop_is_female", ":father"),
# (assign, ":parent_slot", slot_troop_mother),
# (assign, ":other_parent_slot", slot_troop_father),
# (else_try),
# (assign, ":parent_slot", slot_troop_father),
# (assign, ":other_parent_slot", slot_troop_mother),
# (try_end),
# (troop_slot_eq, ":cur_troop", ":parent_slot", -1),
# (store_add, ":logical_minimum_age", ":father_age_at_birth", 16),
# (troop_slot_ge, ":father", slot_troop_age, ":logical_minimum_age"),
#Passed test
# (troop_set_slot, ":cur_troop", ":parent_slot", ":father"),
#Set mother if not already specified
# (try_begin),
# (troop_slot_eq, ":cur_troop", ":other_parent_slot", -1),
# (troop_get_slot, ":mother", ":father", slot_troop_spouse),
# (troop_set_slot, ":cur_troop", ":other_parent_slot", ":mother"),
# (try_end),
# (troop_get_slot, ":father_age", ":father", slot_troop_age),
# (store_sub, ":age", ":father_age", ":father_age_at_birth"),
### (troop_get_slot, ":reputation", ":cur_troop", slot_lord_reputation_type),
(try_begin),
#Don't change reputation if it already has been set
### (lt, ":reputation", 1),
#50% chance of having father's rep
(store_random_in_range, ":reputation", 0, 16),
(gt, ":reputation", 7),
(troop_get_slot, ":reputation", ":father", slot_lord_reputation_type),
(try_end),
# (else_try),
#Average age is [45,63] minus [23,25], so [22, 38]
# (store_random_in_range, ":age", 22, 39),
# (troop_get_slot, ":reputation", ":cur_troop", slot_lord_reputation_type),
#Don't change reputation if it already has been set
# (lt, ":reputation", 1),
# (store_random_in_range, ":reputation", 0, 8),
# (try_end),
#diplomacy end+
(try_end),
(try_begin),
(eq, ":reputation", 0),
(assign, ":reputation", 1),
(try_end),
(troop_set_slot, ":cur_troop", slot_lord_reputation_type, ":reputation"),
# (call_script, "script_init_troop_age", ":cur_troop", ":age"),
(try_end),
(try_begin),
(eq, "$cheat_mode", 1),
(assign, reg3, "$cheat_mode"),
(display_message, "@{!}DEBUG -- Assigned lord reputation and relations"),
# (display_message, "str_assigned_lord_reputation_and_relations_cheat_mode_reg3"), #This string can be removed
(try_end),
(try_for_range, ":cur_troop", pretenders_begin, pretenders_end),
(troop_set_slot, ":cur_troop", slot_troop_occupation, slto_inactive_pretender),
(store_random_in_range, ":age", 25, 30),
(troop_set_slot, ":cur_troop", slot_troop_age, ":age"),
(eq, ":cur_troop", "trp_kingdom_5_pretender"),
(troop_set_slot, ":cur_troop", slot_troop_age, 45),
(try_end),
]),
I've had a look around the forum but could not find a solution; I've seen that a few people encountered this error in the past so maybe you can point me in the right direction! thanks!