Replacing a Faction Leader

--[[
	Script by Aexrael Dex
	Replaces the starting general for a specific faction
]]

-- Rename replace_starting_general
local function replace_starting_general()
	if cm:is_new_game() then

		-- Creating replacement for Karl Franz with a regular Empire General
		local general_faction_str = "wh_main_emp_empire"; -- faction key from factions table
		local general_faction_obj = cm:get_faction(general_faction_str);
		local general_unit_list = "wh_main_emp_cav_reiksguard,wh_main_emp_cav_reiksguard,wh_main_emp_cav_reiksguard"; -- unit keys from main_units table
		local general_region_key = general_faction_obj:home_region():name(); -- the replacement general will spawn adjacent to the settlement in the home region for the faction
		local general_x_pos, general_y_pos = cm:find_valid_spawn_location_for_character_from_settlement(
			general_faction_str,
			general_region_key,
			false,
			true
		);
		local general_type = "general";						-- agent type
		local general_subtype = "emp_lord";					-- agent subtype
		local general_forename = "names_name_1904032251";	-- from local_en names table, Bernhoff the Butcher is now ruler of Reikland
		local general_clanname = "";						-- from local_en names table
		local general_surname = "";							-- from local_en names table
		local general_othername = "";						-- from local_en names table
		local general_is_faction_leader = true;				-- bool for whether the general being replaced is the new faction leader

		cm:create_force_with_general(
			general_faction_str,
			general_unit_list,
			general_region_key,
			general_x_pos,
			general_y_pos,
			general_type,
			general_subtype,
			general_forename,
			general_clanname,
			general_surname,
			general_othername,
			general_is_faction_leader,

			-- Generals created this way does not come with a trait and aren't immortal
			function(cqi)
				local char_str = cm:char_lookup_str(cqi);
				-- Adding a new trait to the above general
				cm:force_add_trait(char_str, "wh2_dlc09_trait_benevolence", true);
				out("Adding a trait to " .. general_forename);

				-- Making the new general immortal
				cm:set_character_immortality(char_str, true);
				out("Making general with forename " .. general_forename .. " immortal");
			end
		);
		out("Creating Neo_Karl Franz for Reikland");

		-- Killing original Karl Franz
		local char_list = general_faction_obj:character_list();
		local leader_subtype = "emp_karl_franz"; -- Karl Franz's agent subtype
		local leader_forename = "names_name_2147343849"; -- Karl Franz's forename

		for i = 0, char_list:num_items() - 1 do
			local current_char = char_list:item_at(i);

			if current_char:is_null_interface() == false and current_char:character_subtype_key() == leader_subtype and current_char:get_forename() == leader_forename and current_char:has_military_force() == true then
				cm:set_character_immortality("character_cqi:"..current_char:command_queue_index(), false); -- Removing Karl Franz's immortality
				cm:disable_event_feed_events(true, "wh_event_category_character", "", ""); -- Disabling event feed messages for character related events
				cm:kill_character(current_char:command_queue_index(), true, true); -- Killing Karl Franz
				cm:callback(function() cm:disable_event_feed_events(false, "wh_event_category_character", "", "") end, 1); -- Enabling event feed messages for character related events
				out("Killing original " .. leader_subtype .. " with forename " .. leader_forename .. " for " .. general_faction_str .. " permanently");
			end;
		end;
	end;
end;

-- Rename replace_starting_general to match the function name at the top
cm:add_first_tick_callback(function() replace_starting_general() end);