diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index 02afd5ac6274..7a56e1587919 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -12,7 +12,7 @@ name = "Corporate Mining Module" description = "An old and rusty mining facility, with big ore potential." ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER) - dynamic_mission_types = list(/datum/mission/dynamic/drill) + dynamic_mission_types = list(/datum/mission/dynamic/signaled/drill) /datum/map_template/ruin/space/bigderelict1 id = "bigderelict1" diff --git a/code/modules/dynamic_missions/mission.dm b/code/modules/dynamic_missions/mission.dm index b38acb55b1d3..84cec4025ec8 100644 --- a/code/modules/dynamic_missions/mission.dm +++ b/code/modules/dynamic_missions/mission.dm @@ -4,6 +4,7 @@ var/desc = "Do something for me." var/faction = /datum/faction/independent var/value = 1000 /// The mission's payout. + var/atom/movable/mission_reward var/duration /// The amount of time in which to complete the mission. Setting it to 0 will result in no time limit var/weight = 0 /// The relative probability of this mission being selected. 0-weight missions are never selected. @@ -113,6 +114,8 @@ /datum/mission/proc/spawn_reward(loc) new /obj/item/spacecash/bundle(loc, value * 1.2) + if(ispath(mission_reward)) + new mission_reward(loc) /datum/mission/proc/can_complete() return !failed diff --git a/code/modules/dynamic_missions/missions/drill.dm b/code/modules/dynamic_missions/missions/drill.dm deleted file mode 100644 index debf539fa09a..000000000000 --- a/code/modules/dynamic_missions/missions/drill.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/effect/landmark/mission_poi/drill - -/datum/mission/dynamic/drill - name = "drill mission" - desc = "get this drill back up and running and send us proof" - setpiece_item = /obj/item/drill_readout - var/drill_type = /obj/machinery/drill/mission/ruin - /// What signal will spawn the required item - var/mission_main_signal = COMSIG_DRILL_SAMPLES_DONE - -/datum/mission/dynamic/drill/spawn_main_piece(obj/effect/landmark/mission_poi/mission_poi) - var/drill_obj = set_bound(mission_poi.use_poi(drill_type), null, FALSE, TRUE) - RegisterSignal(drill_obj, mission_main_signal, PROC_REF(on_drill_done)) - -/datum/mission/dynamic/drill/proc/on_drill_done(obj/machinery/drill/drill_obj) - SIGNAL_HANDLER - - required_item = new setpiece_item(drill_obj.loc) - set_bound(required_item, null, FALSE, TRUE) - UnregisterSignal(drill_obj, mission_main_signal) - remove_bound(drill_obj) - -/* - Core sampling drill -*/ - -/obj/machinery/drill/mission - name = "core sampling research drill" - desc = "A specialized laser drill designed to extract geological samples." - - var/num_current = 0 - var/mission_class - var/num_wanted - -/obj/machinery/drill/mission/examine() - . = ..() - . += "The drill contains [num_current] of the [num_wanted] samples needed." - -/obj/machinery/drill/mission/start_mining() - if(mining.vein_class < mission_class && mining) - say("Error: A vein class of [mission_class] or greater is required for operation.") - return - . = ..() - -/obj/machinery/drill/mission/mine_success() - num_current++ - if(num_current == num_wanted) - SEND_SIGNAL(src, COMSIG_DRILL_SAMPLES_DONE) - -/obj/machinery/drill/mission/ruin - name = "industrial grade mining drill" - desc = "A large scale laser drill. It's able to mine vast amounts of minerals from near-surface ore pockets, this one is designed for mining outposts." - mission_class = 4 - num_wanted = 15 - -/obj/item/drill_readout - name = "drill debug information" - desc = "Created by a mining outpost drill." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "paper" - item_state = "paper" - w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/dynamic_missions/missions/guarded.dm b/code/modules/dynamic_missions/missions/guarded.dm index 6baabeaf0ca2..1c2e770131f6 100644 --- a/code/modules/dynamic_missions/missions/guarded.dm +++ b/code/modules/dynamic_missions/missions/guarded.dm @@ -8,17 +8,13 @@ var/guard_type var/list/mob/guard_list -/datum/mission/dynamic/guarded/spawn_mission_setpiece(datum/overmap/dynamic/planet) +/datum/mission/dynamic/guarded/spawn_custom_pois(datum/overmap/dynamic/planet) + . = ..() for(var/obj/effect/landmark/mission_poi/mission_poi in planet.spawned_mission_pois) if(!isnull(mission_poi.mission_index) && (mission_index != mission_poi.mission_index)) continue - if((!required_item) && mission_poi.type == setpiece_poi) - //Spawns the item or gets it via use_poi then sets it as bound so the mission fails if its deleted - required_item = set_bound(mission_poi.use_poi(setpiece_item), mission_poi.loc, null, TRUE, TRUE) if(mission_poi.type == guard_poi) guard_list += list(spawn_guard(mission_poi)) - if(!required_item) - CRASH("[src] was unable to find its required landmark") /datum/mission/dynamic/guarded/proc/spawn_guard(obj/effect/landmark/mission_poi/guard_poi) var/guard = guard_poi.use_poi(guard_type) diff --git a/code/modules/dynamic_missions/missions/signaled.dm b/code/modules/dynamic_missions/missions/signaled.dm index a41f5018164e..17fda4bc99d1 100644 --- a/code/modules/dynamic_missions/missions/signaled.dm +++ b/code/modules/dynamic_missions/missions/signaled.dm @@ -15,3 +15,52 @@ set_bound(required_item, null, FALSE, TRUE) UnregisterSignal(registered_item, mission_main_signal) remove_bound(registered_item) + +/obj/effect/landmark/mission_poi/drill + +/datum/mission/dynamic/signaled/drill + name = "drill mission" + desc = "get this drill back up and running and send us proof" + registered_type = /obj/machinery/drill/mission/ruin + setpiece_item = /obj/item/drill_readout + mission_main_signal = COMSIG_DRILL_SAMPLES_DONE + +/* + * Core sampling drill +*/ +/obj/machinery/drill/mission + name = "core sampling research drill" + desc = "A specialized laser drill designed to extract geological samples." + + var/num_current = 0 + var/mission_class + var/num_wanted + +/obj/machinery/drill/mission/examine() + . = ..() + . += "The drill contains [num_current] of the [num_wanted] samples needed." + +/obj/machinery/drill/mission/start_mining() + if(mining.vein_class < mission_class && mining) + say("Error: A vein class of [mission_class] or greater is required for operation.") + return + . = ..() + +/obj/machinery/drill/mission/mine_success() + num_current++ + if(num_current == num_wanted) + SEND_SIGNAL(src, COMSIG_DRILL_SAMPLES_DONE) + +/obj/machinery/drill/mission/ruin + name = "industrial grade mining drill" + desc = "A large scale laser drill. It's able to mine vast amounts of minerals from near-surface ore pockets, this one is designed for mining outposts." + mission_class = 4 + num_wanted = 15 + +/obj/item/drill_readout + name = "drill debug information" + desc = "Created by a mining outpost drill." + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "paper" + item_state = "paper" + w_class = WEIGHT_CLASS_SMALL diff --git a/shiptest.dme b/shiptest.dme index f048fca934d8..fa1df3ff63d3 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -2056,7 +2056,6 @@ #include "code\modules\dynamic_missions\mission.dm" #include "code\modules\dynamic_missions\mission_board.dm" #include "code\modules\dynamic_missions\spawner.dm" -#include "code\modules\dynamic_missions\missions\drill.dm" #include "code\modules\dynamic_missions\missions\dynamic.dm" #include "code\modules\dynamic_missions\missions\guarded.dm" #include "code\modules\dynamic_missions\missions\kill.dm"