chadvandy / cbfm_wh3

Community Bug-Fix Mod for Warhammer III. Please feel free to make pull requests, issues, etc!
40 stars 32 forks source link

Warriors of Chaos/Chorf AI RoR weirdness #1082

Open allenhu0912 opened 1 year ago

allenhu0912 commented 1 year ago

1222

Mod Edit:

Reports:

Harmandodelavega commented 1 year ago

so true #833

mfvreeland commented 1 year ago

Is this a real bug, though? Or is it just poor design?

Harmandodelavega commented 1 year ago

RoR should have a 10 turn cooldown no matter what, WoC not an exception

mfvreeland commented 1 year ago

Yes, but they do, don't they? Is WoC a weird exception to this rule? I agree that it feels like WoC get them more frequently, but I always assumed this was because the various WoC factions have overlapping RoR pools without shared cooldowns. I have not tested this thoroughly, though.

allenhu0912 commented 1 year ago

Anecdotally I'm pretty sure I've fought the same RoR under the same faction twice in less than 10 turns. It's not just multiple factions spamming the same RoR.

floskan commented 1 year ago

We did fix that new rors could be recruited multiple times, maybe that's why it felt like they always had ror

allenhu0912 commented 1 year ago

Wasn't that an issue with the 3.1 RoRs? I'm pretty sure WoC AI spamming RoRs predates this, even in 3.0 you would have Festus recruiting Uncle Furuncle over and over and over etc. every time you defeated him. Not necessarily instant recruit, but maybe after 3 or 4 turns, still well short of the 10 turns I would expect.

Harmandodelavega commented 1 year ago

PRE 4.1

units to exclusive faction permissions and mercenary pool to groups junctions should lock/allow rors as for Belakor missing RoR tbd

wh_campaign_ror_recruitment.lua, most obvious thing is it doesn't have WoC listed

regiments_of_renown = {

---- EMPIRE ----
----------------
["wh_main_sc_emp_empire"] = {
    "wh_dlc04_emp_art_hammer_of_the_witches_0",
    "wh_dlc04_emp_art_sunmaker_0",
    "wh_dlc04_emp_cav_royal_altdorf_gryphites_0",
    "wh_dlc04_emp_cav_zintlers_reiksguard_0",
    "wh_dlc04_emp_inf_sigmars_sons_0",
    "wh_dlc04_emp_inf_silver_bullets_0",
    "wh_dlc04_emp_inf_stirlands_revenge_0",
    "wh_dlc04_emp_inf_tattersouls_0",
    "wh_dlc04_emp_veh_templehof_luminark_0",
    "wh2_dlc13_emp_inf_halberdiers_ror_0",
    "wh2_dlc13_emp_inf_swordsmen_ror_0",
    "wh2_dlc13_emp_cav_outriders_ror_0",
    "wh2_dlc13_emp_art_mortar_ror_0",
    "wh2_dlc13_emp_inf_greatswords_ror_0",
    "wh2_dlc13_emp_inf_crossbowmen_ror_0",
    "wh2_dlc13_emp_cav_empire_knights_ror_0",
    "wh2_dlc13_emp_inf_spearmen_ror_0",
    "wh2_dlc13_emp_veh_steam_tank_ror_0",
    "wh2_dlc13_emp_cav_empire_knights_ror_1",
    "wh2_dlc13_emp_cav_pistoliers_ror_0",
    "wh2_dlc13_emp_inf_handgunners_ror_0",
    "wh2_dlc13_emp_cav_empire_knights_ror_2",
    "wh2_dlc13_emp_inf_archers_ror_0",
    "wh2_dlc13_emp_inf_huntsmen_ror_0",
    "wh2_dlc13_emp_veh_war_wagon_ror_0",
},
------------------
---- VAMPIRES ----
------------------
["wh_main_sc_vmp_vampire_counts"] = {
    "wh_dlc04_vmp_cav_chillgheists_0",
    "wh_dlc04_vmp_cav_vereks_reavers_0",
    "wh_dlc04_vmp_inf_feasters_in_the_dusk_0",
    "wh_dlc04_vmp_inf_konigstein_stalkers_0",
    "wh_dlc04_vmp_inf_sternsmen_0",
    "wh_dlc04_vmp_inf_tithe_0",
    "wh_dlc04_vmp_mon_devils_swartzhafen_0",
    "wh_dlc04_vmp_mon_direpack_0",
    "wh_dlc04_vmp_veh_claw_of_nagash_0"
},
----------------
---- DWARFS ----
----------------
["wh_main_sc_dwf_dwarfs"] = {
    "wh_dlc06_dwf_art_gob_lobber_0",
    "wh_dlc06_dwf_inf_dragonback_slayers_0",
    "wh_dlc06_dwf_inf_ekrund_miners_0",
    "wh_dlc06_dwf_inf_norgrimlings_ironbreakers_0",
    "wh_dlc06_dwf_inf_norgrimlings_irondrakes_0",
    "wh_dlc06_dwf_inf_old_grumblers_0",
    "wh_dlc06_dwf_inf_peak_gate_guard_0",
    "wh_dlc06_dwf_inf_ulthars_raiders_0",
    "wh_dlc06_dwf_inf_warriors_dragonfire_pass_0",
    "wh_dlc06_dwf_veh_skyhammer_0"
},
--------------------
---- GREENSKINS ----
--------------------
["wh_main_sc_grn_greenskins"] = {
    "wh_dlc06_grn_art_hammer_of_gork_0",
    "wh_dlc06_grn_cav_broken_tusks_mob_0",
    "wh_dlc06_grn_cav_deff_creepers_0",
    "wh_dlc06_grn_cav_durkits_squigs_0",
    "wh_dlc06_grn_cav_mogrubbs_marauders_0",
    "wh_dlc06_grn_cav_moon_howlers_0",
    "wh_dlc06_grn_cav_teef_robbers_0",
    "wh_dlc06_grn_inf_da_eight_peaks_loonies_0",
    "wh_dlc06_grn_inf_da_rusty_arrers_0",
    "wh_dlc06_grn_inf_da_warlords_boyz_0",
    "wh_dlc06_grn_inf_krimson_killerz_0",
    "wh_dlc06_grn_mon_venom_queen_0",
    "wh2_dlc15_grn_mon_river_trolls_ror_0",
    "wh2_dlc15_grn_mon_rogue_idol_ror_0",
    "wh2_dlc15_grn_veh_snotling_pump_wagon_ror_0"
},
-------------------
---- BRETONNIA ----
-------------------
["wh_main_sc_brt_bretonnia"] = {
    "wh_pro04_brt_cav_knights_errant_ror_0",
    "wh_pro04_brt_cav_knights_of_the_realm_ror_0",
    "wh_pro04_brt_cav_mounted_yeomen_ror_0",
    "wh_pro04_brt_cav_questing_knights_ror_0",
    "wh_pro04_brt_inf_battle_pilgrims_ror_0",
    "wh_pro04_brt_inf_foot_squires_ror_0"
},
--------------------
---- TOMB KINGS ----
--------------------
["wh2_dlc09_sc_tmb_tomb_kings"] = {
    "wh2_dlc09_tmb_inf_skeleton_archers_ror",
    "wh2_dlc09_tmb_inf_skeleton_spearmen_ror",
    "wh2_dlc09_tmb_inf_tomb_guard_ror",
    "wh2_dlc09_tmb_mon_necrosphinx_ror",
    "wh2_dlc09_tmb_mon_sepulchral_stalkers_ror",
    "wh2_dlc09_tmb_mon_ushabti_ror"
},
--------------------
---- HIGH ELVES ----
--------------------
["wh2_main_sc_hef_high_elves"] = {
    "wh2_dlc10_hef_cav_the_fireborn_ror_0",
    "wh2_dlc10_hef_cav_the_heralds_of_the_wind_ror_0",
    "wh2_dlc10_hef_inf_everqueens_court_guards_ror_0",
    "wh2_dlc10_hef_inf_keepers_of_the_flame_ror_0",
    "wh2_dlc10_hef_inf_the_grey_ror_0",
    "wh2_dlc10_hef_inf_the_scions_of_mathlann_ror_0",
    "wh2_dlc10_hef_inf_the_silverpelts_ror_0",
    "wh2_dlc10_hef_inf_the_storm_riders_ror_0",
    "wh2_dlc15_hef_inf_archers_ror_0",
    "wh2_dlc15_hef_mon_arcane_phoenix_ror_0",
    "wh2_dlc15_hef_mon_war_lions_of_chrace_ror_0"
},
--------------------
---- DARK ELVES ----
--------------------
["wh2_main_sc_def_dark_elves"] = {
    "wh2_dlc10_def_cav_knights_of_the_ebon_claw_ror_0",
    "wh2_dlc10_def_cav_raven_heralds_ror_0",
    "wh2_dlc10_def_cav_slaanesh_harvesters_ror_0",
    "wh2_dlc10_def_inf_blades_of_the_blood_queen_ror_0",
    "wh2_dlc10_def_inf_sisters_of_the_singing_doom_ror_0",
    "wh2_dlc10_def_inf_the_bolt_fiends_ror_0",
    "wh2_dlc10_def_inf_the_hellebronai_ror_0",
    "wh2_dlc10_def_mon_chill_of_sontar_ror_0",
    "wh2_dlc14_def_cav_scourgerunner_chariot_ror_0",
    "wh2_dlc14_def_inf_harpies_ror_0",
    "wh2_dlc14_def_mon_bloodwrack_medusa_ror_0"
},
-----------------------
---- VAMPIRE COAST ----
-----------------------
["wh2_dlc11_sc_cst_vampire_coast"] = {
    "wh2_dlc11_cst_inf_zombie_deckhands_mob_ror_0",
    "wh2_dlc11_cst_inf_zombie_gunnery_mob_ror_0",
    "wh2_dlc11_cst_cav_deck_droppers_ror_0",
    "wh2_dlc11_cst_mon_mournguls_ror_0",
    "wh2_dlc11_cst_mon_rotting_prometheans_gunnery_mob_ror",
    "wh2_dlc11_cst_inf_deck_gunners_ror_0",
    "wh2_dlc11_cst_inf_depth_guard_ror_0",
    "wh2_dlc11_cst_mon_necrofex_colossus_ror_0"
},
-------------------
---- LIZARDMEN ----
-------------------
["wh2_main_sc_lzd_lizardmen"] = {
    "wh2_dlc12_lzd_cav_cold_one_spearriders_ror_0",
    "wh2_dlc12_lzd_cav_ripperdactyl_riders_ror_0",
    "wh2_dlc12_lzd_cav_terradon_riders_ror_0",
    "wh2_dlc12_lzd_inf_saurus_warriors_ror_0",
    "wh2_dlc12_lzd_inf_skink_red_crested_ror_0",
    "wh2_dlc12_lzd_inf_temple_guards_ror_0",
    "wh2_dlc12_lzd_mon_ancient_stegadon_ror_0",
    "wh2_dlc12_lzd_mon_salamander_pack_ror_0",
    "wh2_dlc13_lzd_mon_razordon_pack_ror_0",
    "wh2_dlc13_lzd_mon_sacred_kroxigors_ror_0",
    "wh2_dlc13_lzd_mon_dread_saurian_ror_0",
    "wh2_dlc17_lzd_mon_carnosaur_ror_0",
    "wh2_dlc17_lzd_mon_coatl_ror_0",
    "wh2_dlc17_lzd_mon_troglodon_ror_0"
},
----------------
---- SKAVEN ----
----------------
["wh2_main_sc_skv_skaven"] = {
    "wh2_dlc12_skv_art_warp_lightning_cannon_ror_0",
    "wh2_dlc12_skv_inf_clanrats_ror_0",
    "wh2_dlc12_skv_inf_plague_monk_censer_bearer_ror_0",
    "wh2_dlc12_skv_inf_ratling_gun_ror_0",
    "wh2_dlc12_skv_inf_stormvermin_ror_0",
    "wh2_dlc12_skv_inf_warplock_jezzails_ror_0",
    "wh2_dlc12_skv_veh_doom_flayer_ror_0",
    "wh2_dlc12_skv_veh_doomwheel_ror_0",
    "wh2_dlc14_skv_inf_death_runners_ror_0",
    "wh2_dlc14_skv_inf_eshin_triads_ror_0",
    "wh2_dlc14_skv_inf_poison_wind_mortar_ror_0",
    "wh2_dlc16_skv_mon_rat_ogres_ror_0",
    "wh2_dlc16_skv_mon_rat_ogre_mutant_ror_0",
    "wh2_dlc16_skv_mon_hell_pit_abomination_ror_0"
},
------------------
--- WOOD ELVES ---
------------------
["wh_dlc05_sc_wef_wood_elves"] = {
    "wh_pro04_wef_inf_eternal_guard_ror_0",
    "wh_pro04_wef_inf_wardancers_ror_0",
    "wh_pro04_wef_inf_waywatchers_ror_0",
    "wh_pro04_wef_cav_wild_riders_ror_0",
    "wh_pro04_wef_inf_wildwood_rangers_ror_0",
    "wh_pro04_wef_mon_treekin_ror_0",
    "wh2_dlc16_wef_inf_dryads_ror_0",
    "wh2_dlc16_wef_mon_zoats_ror_0",
    "wh2_dlc16_wef_cav_great_stag_knights_ror_0"
},
------------------
---- BEASTMEN ----
------------------
["wh_dlc03_sc_bst_beastmen"] = {
    "wh_pro04_bst_inf_bestigor_herd_ror_0",
    "wh_pro04_bst_inf_centigors_ror_0",
    "wh_pro04_bst_inf_gor_herd_ror_0",
    "wh_pro04_bst_inf_minotaurs_ror_0",
    "wh_pro04_bst_inf_ungor_spearmen_ror_0",
    "wh_pro04_bst_inf_cygor_ror_0",
    "wh2_dlc17_bst_inf_centigors_ror_1",
    "wh2_dlc17_bst_mon_ghorgon_ror_0",
    "wh2_dlc17_bst_mon_jabberslythe_ror_0"
},
----------------
---- NURGLE ----
----------------
["wh3_main_sc_nur_nurgle"] = {      
    "wh_pro04_chs_inf_forsaken_ror_0",
    "wh3_dlc20_chs_mon_giant_mnur_ror",
    "wh3_twa06_nur_inf_plaguebearers_ror_0",
    "wh3_twa07_nur_cav_pox_riders_of_nurgle_ror_0",
    "wh3_twa08_nur_mon_great_unclean_one_0_ror",
    "wh3_twa10_nur_inf_nurglings_ror"
},
-----------------------
---- OGRE KINGDOMS ----
-----------------------
["wh3_main_sc_ogr_ogre_kingdoms"] = {
    "wh3_twa06_ogr_inf_maneaters_ror_0",
    "wh3_twa07_ogr_cav_crushers_ror_0",
    "wh3_twa08_ogr_mon_stonehorn_0_ror",
    "wh3_twa10_ogr_inf_gnoblars_ror"
},
------------------
---- SLAANESH ----
------------------
["wh3_main_sc_sla_slaanesh"] = {
    "wh3_twa06_sla_inf_daemonette_ror_0",
    "wh3_twa07_sla_cav_heartseekers_of_slaanesh_ror_0",
    "wh3_twa08_sla_mon_keeper_of_secrets_0_ror",
    "wh_pro04_chs_inf_chaos_warriors_ror_0",
    "wh3_dlc20_chs_cav_chaos_chariot_msla_ror",
    "wh3_twa10_sla_inf_marauders_spears_ror"
},
------------------
---- TZEENTCH ----
------------------
["wh3_main_sc_tze_tzeentch"] = {
    "wh3_twa06_tze_inf_pink_horrors_ror_0",
    "wh3_dlc20_chs_inf_aspiring_champions_mtze_ror",
    "wh_pro04_chs_mon_chaos_spawn_ror_0",
    "wh3_twa07_tze_cav_doom_knights_ror_0",
    "wh3_twa08_tze_mon_lord_of_change_0_ror",
    "wh3_twa10_tze_inf_blue_horrors_ror"
},  
------------------
----  KHORNE  ----
------------------
["wh3_main_sc_kho_khorne"] = {
    "wh_pro04_nor_inf_marauder_berserkers_ror_0",
    "wh3_twa06_kho_inf_bloodletters_ror_0",
    "wh3_twa07_kho_cav_bloodcrushers_ror_0",
    "wh3_dlc20_kho_cav_skullcrushers_mkho_ror",
    "wh3_twa08_kho_mon_bloodthirster_0_ror",
    "wh3_twa10_kho_inf_flesh_hounds_of_khorne_ror"
},  
------------------
----  KISLEV  ----
------------------
["wh3_main_sc_ksl_kislev"] = { 
    "wh3_twa06_ksl_inf_tzar_guard_ror_0",
    "wh3_twa07_ksl_cav_war_bear_riders_ror_0",
    "wh3_twa08_ksl_mon_elemental_bear_0_ror",
    "wh3_twa10_ksl_inf_armoured_kossars_ror"
},
------------------
----  CATHAY  ----
------------------
["wh3_main_sc_cth_cathay"] = { 
    "wh3_twa06_cth_inf_dragon_guard_ror_0",
    "wh3_twa07_cth_cav_jade_longma_riders_ror_0",
    "wh3_twa08_cth_mon_terracotta_sentinel_0_ror",
    "wh3_twa10_cth_inf_peasant_archers_ror"
},
------------------
----  CHD  ----
------------------
["wh3_dlc23_sc_chd_chaos_dwarfs"] = {
    "wh3_dlc23_chd_cav_bull_centaurs_dual_axe_ror",
    "wh3_dlc23_chd_cav_hobgoblin_wolf_raiders_ror",
    "wh3_dlc23_chd_inf_chaos_dwarf_blunderbusses_ror",
    "wh3_dlc23_chd_inf_chaos_dwarf_warriors_ror",
    "wh3_dlc23_chd_inf_infernal_ironsworn_ror",
    "wh3_dlc23_chd_veh_iron_daemon_ror",
    "wh_pro04_chs_art_hellcannon_ror_0" 
}

};

core:add_listener( "ROR_ScriptEventGlobalCampaignManagerCreated", "ScriptEventGlobalCampaignManagerCreated", true, function(context) Add_ROR_Locks(); end, false );

function Add_ROR_Locks() output_ror("########## ADDING R.O.R LOCKS ##########");

local human_factions = cm:get_human_factions();
local faction_list = cm:model():world():faction_list();

for subculture, units in pairs(regiments_of_renown) do
    output_ror("Checking for subculture: "..subculture);
    local human_player = false;

    for i = 1, #human_factions do
        local faction_key = human_factions[i]
        if cm:get_faction(faction_key):subculture() == subculture then
            human_player = faction_key;
            output_ror("\tFound human player: "..human_player);
            break;
        end
    end

    if human_player then
        Lock_Units_In_Subculture_For_Everyone_But(subculture, human_player);
    else
        output_ror("Didn't find human in this subculture, finding another faction...");
        local subculture_faction_not_dead = "";
        local subculture_faction = "";

        for i = 0, faction_list:num_items() - 1 do
            local current_faction = faction_list:item_at(i);

            if current_faction:is_null_interface() == false and current_faction:subculture() == subculture and current_faction:is_quest_battle_faction() == false then
                if subculture_faction == "" then
                    subculture_faction = current_faction:name();
                end

                if current_faction:is_dead() == false then
                    if subculture_faction_not_dead == "" then
                        subculture_faction_not_dead = current_faction:name();
                    end
                end
            end
        end

        output_ror("\tBest Matches -");
        output_ror("\t\tFirst Alive Faction: "..subculture_faction_not_dead);
        output_ror("\t\tFirst Existing Faction: "..subculture_faction);

        if subculture_faction_not_dead ~= "" then
            Lock_Units_In_Subculture_For_Everyone_But(subculture, subculture_faction_not_dead);
        elseif subculture_faction ~= "" then
            Lock_Units_In_Subculture_For_Everyone_But(subculture, subculture_faction);
        else
            output_ror("ERROR: Didn't lock ROR for subculture [" .. subculture .. "] with ROR. Is this an old save game where the subculture does not exist?");
        end
    end
end

tomb_king_ror_locks();
vampire_coast_ror_locks();
output_ror("######################################");

end

function Lock_Units_In_Subculture_For_Everyone_But(subculture, faction) output_ror("---- Locking ROR ----"); output_ror("Selecting '"..faction.."' as the main faction of the '"..subculture.."' subculture!");

local faction_list = cm:model():world():faction_list();

for i = 0, faction_list:num_items() - 1 do
    local current_faction = faction_list:item_at(i);
    local fac_name = current_faction:name();
    local fac_subculture = current_faction:subculture();

    if not current_faction:is_human() and not current_faction:is_quest_battle_faction() and fac_name ~= faction and fac_subculture == subculture and regiments_of_renown[subculture] ~= nil then
        output_ror("Locking "..#regiments_of_renown[subculture].." ROR units for "..fac_name);

        for j = 1, #regiments_of_renown[subculture] do
            output_ror("\tLocking Unit: "..regiments_of_renown[subculture][j]);
            cm:add_event_restricted_unit_record_for_faction(regiments_of_renown[subculture][j], fac_name);
        end
    end
end
output_ror("");

end

-- TOMB KINGS function tomb_king_ror_locks() output_ror("tomb_king_ror_locks()"); if cm:is_new_game() then local tk_factions = {"wh2_dlc09_tmb_khemri", "wh2_dlc09_tmb_followers_of_nagash", "wh2_dlc09_tmb_lybaras", "wh2_dlc09_tmb_exiles_of_nehek"};

    for i = 1, #tk_factions do
        local faction_exists = cm:get_faction(tk_factions[i])
        if faction_exists ~= false then                 
            -- Unlocked via Rite
            cm:add_event_restricted_unit_record_for_faction("wh2_dlc09_tmb_art_casket_of_souls_0", tk_factions[i], "wh2_dlc09_lock_casket_of_souls");
            -- Unlocked via Crafting
            cm:add_event_restricted_unit_record_for_faction("wh2_dlc09_tmb_mon_carrion_ror", tk_factions[i], "wh2_dlc09_lock_ror_crafting");
            cm:add_event_restricted_unit_record_for_faction("wh2_dlc09_tmb_inf_nehekhara_warriors_ror", tk_factions[i], "wh2_dlc09_lock_ror_crafting");
            cm:add_event_restricted_unit_record_for_faction("wh2_dlc09_tmb_cav_nehekhara_horsemen_ror", tk_factions[i], "wh2_dlc09_lock_ror_crafting");
            cm:add_event_restricted_unit_record_for_faction("wh2_dlc09_tmb_cav_necropolis_knights_ror", tk_factions[i], "wh2_dlc09_lock_ror_crafting");
        end
    end
end

core:add_listener(
    "tomb_king_ror_unlock",
    "RitualCompletedEvent",
    function(context)
        return context:performing_faction():is_human();
    end,
    function(context)
        local faction_key = context:performing_faction():name();
        local ritual_key = context:ritual():ritual_key();

        if ritual_key == "wh2_dlc09_ritual_tmb_tahoth" then
            cm:remove_event_restricted_unit_record_for_faction("wh2_dlc09_tmb_art_casket_of_souls_0", faction_key);
        elseif ritual_key == "wh2_dlc09_ritual_crafting_tmb_carrion" then
            cm:remove_event_restricted_unit_record_for_faction("wh2_dlc09_tmb_mon_carrion_ror", faction_key);
        elseif ritual_key == "wh2_dlc09_ritual_crafting_tmb_nehekhara_warriors" then
            cm:remove_event_restricted_unit_record_for_faction("wh2_dlc09_tmb_inf_nehekhara_warriors_ror", faction_key);
        elseif ritual_key == "wh2_dlc09_ritual_crafting_tmb_nehekhara_horsemen" then
            cm:remove_event_restricted_unit_record_for_faction("wh2_dlc09_tmb_cav_nehekhara_horsemen_ror", faction_key);
        elseif ritual_key == "wh2_dlc09_ritual_crafting_tmb_necropolis_knights" then
            cm:remove_event_restricted_unit_record_for_faction("wh2_dlc09_tmb_cav_necropolis_knights_ror", faction_key);
        end
    end,
    true
);

end

-- VAMPIRE COAST function vampire_coast_ror_locks() output_ror("vampire_coast_ror_locks()"); if cm:is_new_game() then local vc_factions = {"wh2_dlc11_cst_the_drowned", "wh2_dlc11_cst_pirates_of_sartosa", "wh2_dlc11_cst_vampire_coast", "wh2_dlc11_cst_noctilus"};

    for i = 1, #vc_factions do
        local faction_exists = cm:get_faction(vc_factions[i])
        if faction_exists ~= false then
            -- Unlocked via Rite
            cm:add_event_restricted_unit_record_for_faction("wh2_dlc11_cst_art_queen_bess", vc_factions[i], "wh2_dlc11_lock_queen_bess");
        end
    end
end

core:add_listener(
    "vampire_coast_ror_unlock",
    "RitualCompletedEvent",
    function(context)
        return context:performing_faction():is_human() and context:ritual():ritual_key() == "wh2_dlc11_ritual_cst_queens_cannon";
    end,
    function(context)
        cm:remove_event_restricted_unit_record_for_faction("wh2_dlc11_cst_art_queen_bess", context:performing_faction():name());
    end,
    true
);

end

local show_debug_output_ror = false; function output_ror(text) if show_debug_output_ror then out(text); end end

Harmandodelavega commented 9 months ago

They added Norsca and WoC to the list and changed a couple lines in 4.1, not sure if that'll do anything though