The inability for the player to access their inventory or party window during a siege has been a frequently voiced "beef" throughout the forum. Not having seen anyone look into this, I thought I'd do so and post what I worked out.
For whatever they are worth, the following minor bits of code/tweaks allow the player to have some added flexibility when besieging a town or castle: they player can exit from the auto-rest and access whichever menus they choose, without canceling the siege. Further, they can move within a certain radius of the besieged center with the siege continuing and if they move beyond this radius, the siege is terminated. At half the limited distance, a message scrolls on screen, notifying the player that their siege lines are stretched too thin and serving as a warning.
Since some Native code needs to be tweaked, I've marked the edited Native code with three comment hashes ###
This Native trigger needs to be tweaked: one else_try block needs to be commented out
#Auto-menu
(0,
[
(try_begin),
(gt, "$g_last_rest_center", 0),
(party_get_battle_opponent, ":besieger_party", "$g_last_rest_center"),
(gt, ":besieger_party", 0),
(store_faction_of_party, ":encountered_faction", "$g_last_rest_center"),
(store_relation, ":faction_relation", ":encountered_faction", "fac_player_supporters_faction"),
(store_faction_of_party, ":besieger_party_faction", ":besieger_party"),
(store_relation, ":besieger_party_relation", ":besieger_party_faction", "fac_player_supporters_faction"),
(ge, ":faction_relation", 0),
(lt, ":besieger_party_relation", 0),
(start_encounter, "$g_last_rest_center"),
(rest_for_hours, 0, 0, 0), #stop resting
(else_try),
(store_current_hours, ":cur_hours"),
(assign, ":check", 0),
(try_begin),
(neq, "$g_check_autos_at_hour", 0),
(ge, ":cur_hours", "$g_check_autos_at_hour"),
(assign, ":check", 1),
(assign, "$g_check_autos_at_hour", 0),
(try_end),
(this_or_next|eq, ":check", 1),
(map_free),
(try_begin),
(ge,"$auto_menu",1),
(jump_to_menu,"$auto_menu"),
(assign,"$auto_menu",-1),
(else_try),
(ge,"$auto_enter_town",1),
(start_encounter, "$auto_enter_town"),
#(else_try), ### Comment out this entire else_try
#(ge,"$auto_besiege_town",1), ### Here
#(start_encounter, "$auto_besiege_town"), ###And here, too
(else_try),
(ge,"$g_camp_mode", 1),
(assign, "$g_camp_mode", 0),
(assign, "$g_infinite_camping", 0),
(assign, "$g_player_icon_state", pis_normal),
(rest_for_hours, 0, 0, 0), #stop camping
(display_message, "@Breaking camp..."),
(try_end),
(try_end),
]),
Add this trigger immediately following the above.
(0.25,
[
(gt,"$auto_besiege_town",0),
(gt,"$g_player_besiege_town", 0),
(ge, "$g_siege_method", 1),
(store_distance_to_party_from_party, ":distance", "$g_player_besiege_town", "p_main_party"),
(try_begin),
(gt, ":distance", raid_distance / 2),
(str_store_party_name_link, s1, "$g_player_besiege_town"),
(display_message, "@You have broken off your siege of {s1}."),
(call_script, "script_lift_siege", "$g_player_besiege_town", 0),
(assign, "$g_player_besiege_town", -1),
(rest_for_hours, 0, 0, 0), #stop resting - abort
(else_try),
(ge, ":distance", raid_distance / 3),
(map_free),
(str_store_party_name_link, s1, "$g_player_besiege_town"),
(display_message, "@You cannot maintain your siege of {s1} from this distance. You risk your lines breaking."),
(else_try),
(store_current_hours, ":cur_hours"),
(ge, ":cur_hours", "$g_siege_method_finish_hours"),
(neg|is_currently_night),
(rest_for_hours, 0, 0, 0), #stop resting, if resting
(start_encounter, "$auto_besiege_town"),
(try_end),
]),