diff --git a/code/modules/missions/dynamic/_dynamic.dm b/code/modules/missions/dynamic/_dynamic.dm index 4daf3c112e..55db9c2da3 100644 --- a/code/modules/missions/dynamic/_dynamic.dm +++ b/code/modules/missions/dynamic/_dynamic.dm @@ -105,13 +105,9 @@ can_turn_in = TRUE break - var/location_x - var/location_y - var/location_name + var/datum/overmap/mission_location = mission_local_weakref.resolve() if(mission_location) - location_x = mission_location.x - location_y = mission_location.y - location_name = mission_location.name + update_mission_info(mission_location) . += list( "ref" = REF(src), @@ -120,9 +116,9 @@ "desc" = src.desc, "reward" = src.reward_flavortext(), "faction" = SSfactions.faction_name(src.faction), - "location" = "X[location_x]/Y[location_y]: [location_name]", - "x" = location_x, - "y" = location_y, + "location" = "X[local_x]/Y[local_y]: [local_name]", + "x" = local_x, + "y" = local_y, "timeIssued" = time2text(station_time() - time_issued, "mm"), "duration" = src.duration, "remaining" = time_remaining, diff --git a/code/modules/missions/dynamic/signaled.dm b/code/modules/missions/dynamic/signaled.dm index a9583c7bb5..518d99b5bb 100644 --- a/code/modules/missions/dynamic/signaled.dm +++ b/code/modules/missions/dynamic/signaled.dm @@ -1,13 +1,12 @@ /datum/mission/ruin/signaled var/registered_type - var/atom/movable/registered_item /// What signal will spawn the required item var/mission_main_signal /datum/mission/ruin/signaled/spawn_main_piece(obj/effect/landmark/mission_poi/mission_poi) - registered_item = mission_poi.use_poi(registered_type, src) + var/atom/movable/registered_item = mission_poi.use_poi(registered_type, src) if(isatom(registered_item)) - registered_item = set_bound(registered_item, null, FALSE, TRUE) + set_bound(registered_item, null, FALSE, TRUE) RegisterSignal(registered_item, mission_main_signal, PROC_REF(on_signaled)) else stack_trace("[src] did not generate a required item.") @@ -21,11 +20,6 @@ UnregisterSignal(registered_item, mission_main_signal) remove_bound(registered_item) -/datum/mission/ruin/signaled/remove_bound(atom/movable/bound) - if(bound == setpiece_item) - setpiece_item = null - return ..() - /obj/effect/landmark/mission_poi/main/drill /datum/mission/ruin/signaled/drill diff --git a/code/modules/missions/mission.dm b/code/modules/missions/mission.dm index 63c0b4a618..57ac94f90f 100644 --- a/code/modules/missions/mission.dm +++ b/code/modules/missions/mission.dm @@ -17,7 +17,10 @@ var/location_specific = FALSE /// The location the mission is relient on, often pulling varibles from it or will delete itself if the mission_location is deleted. Passed in New(). - var/datum/overmap/mission_location + var/datum/weakref/mission_local_weakref + var/local_name + var/local_x + var/local_y /// If location specific, if it run times when the planet has no pois var/requires_poi = TRUE @@ -59,7 +62,9 @@ mission_index = _mission_index if(location_specific) - mission_location = _location + var/datum/overmap/mission_location = _location + mission_local_weakref = WEAKREF(mission_location) + update_mission_info(mission_location) RegisterSignal(mission_location, COMSIG_PARENT_QDELETING, PROC_REF(on_vital_delete)) RegisterSignal(mission_location, COMSIG_OVERMAP_LOADED, PROC_REF(on_planet_load)) if(active) @@ -74,7 +79,9 @@ /datum/mission/Destroy() //UnregisterSignal(source_outpost, COMSIG_PARENT_QDELETING) if(location_specific) - UnregisterSignal(mission_location, COMSIG_PARENT_QDELETING, COMSIG_OVERMAP_LOADED) + var/datum/overmap/mission_location = mission_local_weakref.resolve() + if(mission_location) + UnregisterSignal(mission_location, COMSIG_PARENT_QDELETING, COMSIG_OVERMAP_LOADED) if(active) SSmissions.active_ruin_missions -= src else @@ -107,6 +114,16 @@ mission_reward = pick(mission_reward) return +/datum/mission/proc/update_mission_info(datum/overmap/mission_location) + if(!istype(mission_location)) + local_name = "missing location" + local_x = "???" + local_y = "???" + return + local_name = mission_location.name + local_x = mission_location.x + local_y = mission_location.y + /datum/mission/proc/regex_mission_text() name = mission_regexs(name) desc = mission_regexs(desc) @@ -139,7 +156,7 @@ SIGNAL_HANDLER // Status of mission is handled by items spawned in mission after this - UnregisterSignal(mission_location, list(COMSIG_PARENT_QDELETING, COMSIG_OVERMAP_LOADED)) + UnregisterSignal(planet, list(COMSIG_PARENT_QDELETING, COMSIG_OVERMAP_LOADED)) if(!active) qdel(src) return @@ -172,6 +189,7 @@ do_sparks(3, FALSE, get_turf(item_to_turn_in)) SSmissions.active_ruin_missions -= src active = FALSE + var/datum/overmap/mission_location = mission_local_weakref.resolve() if(istype(mission_location, /datum/overmap/dynamic)) var/datum/overmap/dynamic/dynamic_location = mission_location dynamic_location.start_countdown(30 SECONDS) @@ -252,6 +270,7 @@ /datum/mission/proc/bound_z_change(atom/movable/bound, new_virtual_z, previous_virtual_z) SIGNAL_HANDLER + var/datum/overmap/mission_location = mission_local_weakref.resolve() if(istype(mission_location, /datum/overmap/dynamic)) var/datum/overmap/dynamic/dynamic_location = mission_location if(!dynamic_location.mapzone.is_in_bounds(bound)) diff --git a/code/modules/missions/outpost/_outpost.dm b/code/modules/missions/outpost/_outpost.dm index 82dbdb89e0..ec87574d9c 100644 --- a/code/modules/missions/outpost/_outpost.dm +++ b/code/modules/missions/outpost/_outpost.dm @@ -3,7 +3,7 @@ /datum/mission/outpost/New(_outpost) source_outpost = _outpost - RegisterSignal(mission_location, COMSIG_PARENT_QDELETING, PROC_REF(on_vital_delete)) + RegisterSignal(source_outpost, COMSIG_PARENT_QDELETING, PROC_REF(on_vital_delete)) return ..() /datum/mission/outpost/Destroy()