diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 0ba0a831276..c504e7035ed 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -52,7 +52,7 @@ datum/controller/game_controller/New() if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase() if(!syndicate_code_response) syndicate_code_response = generate_code_phrase() if(!emergency_shuttle) emergency_shuttle = new /datum/shuttle_controller/emergency_shuttle() - if(!supply_shuttle) supply_shuttle = new /datum/controller/supply_shuttle() +// if(!supply_shuttle) supply_shuttle = new /datum/controller/supply_shuttle() datum/controller/game_controller/proc/setup() world.tick_lag = config.Ticklag diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 374739f542d..9460ff35428 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -1,7 +1,7 @@ //TODO: rewrite and standardise all controller datums to the datum/controller type //TODO: allow all controllers to be deleted for clean restarts (see WIP master controller stuff) - MC done - lighting done -/client/proc/restart_controller(controller in list("Master","Failsafe","Lighting","Supply Shuttle")) +/client/proc/restart_controller(controller in list("Master","Failsafe","Lighting","Supply")) set category = "Debug" set name = "Restart Controller" set desc = "Restart one of the various periodic loop controllers for the game (be careful!)" @@ -21,14 +21,14 @@ new /datum/controller/lighting() lighting_controller.process() feedback_add_details("admin_verb","RLighting") - if("Supply Shuttle") - supply_shuttle.process() + if("Supply") + supply_controller.process() feedback_add_details("admin_verb","RSupply") message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") return -/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply Shuttle","Emergency Shuttle","Configuration","pAI", "Cameras","Garbage", "Crafting")) +/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Emergency Shuttle","Configuration","pAI", "Cameras","Garbage", "Crafting")) set category = "Debug" set name = "Debug Controller" set desc = "Debug the various periodic loop controllers for the game (be careful!)" @@ -62,8 +62,8 @@ if("Radio") debug_variables(radio_controller) feedback_add_details("admin_verb","DRadio") - if("Supply Shuttle") - debug_variables(supply_shuttle) + if("Supply") + debug_variables(supply_controller) feedback_add_details("admin_verb","DSupply") if("Emergency Shuttle") debug_variables(emergency_shuttle) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index cb68423a579..f99b4cc795f 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -193,6 +193,8 @@ Implants; return 1 return 0 +/datum/game_mode/proc/cleanup() //This is called when the round has ended but not the game, if any cleanup would be necessary in that case. + return /datum/game_mode/proc/declare_completion() var/clients = 0 diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index a59a8c67215..f7490501f0b 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -12,6 +12,7 @@ var/global/datum/controller/gameticker/ticker var/hide_mode = 0 // leave here at 0 ! setup() will take care of it when needed for Secret mode -walter0o var/datum/game_mode/mode = null + var/post_game = 0 var/event_time = null var/event = 0 @@ -133,7 +134,7 @@ var/global/datum/controller/gameticker/ticker //here to initialize the random events nicely at round start setup_economy() - + setup_shuttle_docks() spawn(0)//Forking here so we dont have to wait for this to finish @@ -215,7 +216,7 @@ var/global/datum/controller/gameticker/ticker if(admins_number == 0) send2adminirc("Round has started with no admins online.") - supply_shuttle.process() //Start the supply shuttle regenerating points -- TLE + supply_controller.process() //Start the supply shuttle regenerating points -- TLE master_controller.process() //Start master_controller.process() lighting_controller.process() //Start processing DynamicAreaLighting updates @@ -375,8 +376,16 @@ var/global/datum/controller/gameticker/ticker emergency_shuttle.process() - var/mode_finished = mode.check_finished() || (emergency_shuttle.location == 2 && emergency_shuttle.alert == 1) - if(!mode.explosion_in_progress && mode_finished) + var/game_finished = 0 + var/mode_finished = 0 + if (config.continous_rounds) + game_finished = (emergency_shuttle.location == 2 || mode.station_was_nuked) + mode_finished = (!post_game && mode.check_finished()) + else + game_finished = (mode.check_finished() || (emergency_shuttle.location == 2 && emergency_shuttle.alert == 1)) + mode_finished = game_finished + + if(!mode.explosion_in_progress && game_finished && (mode_finished || post_game)) current_state = GAME_STATE_FINISHED spawn @@ -407,6 +416,16 @@ var/global/datum/controller/gameticker/ticker else world << "\blue An admin has delayed the round end" + else if (mode_finished) + post_game = 1 + + mode.cleanup() + + //call a transfer shuttle vote + spawn(50) + world << "\red The round has ended!" + vote.autotransfer() + return 1 proc/getfactionbyname(var/name) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 254c4e465d3..2a212b5ba1a 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -117,7 +117,7 @@ var/line1 = "SUPPLY" var/line2 = "" - var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle() + var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle() if (!shuttle) line2 = "Error" else if(shuttle.has_eta()) @@ -176,7 +176,7 @@ return "" proc/get_supply_shuttle_timer() - var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle() + var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle() if (!shuttle) return "Error" diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index c23be68bbca..5b4e031aad7 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -412,14 +412,14 @@ if(mode==47) var/supplyData[0] - var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle() + var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle() if (shuttle) supplyData["shuttle_moving"] = shuttle.has_eta() supplyData["shuttle_eta"] = shuttle.eta_minutes() supplyData["shuttle_loc"] = shuttle.at_station() ? "Station" : "Dock" var/supplyOrderCount = 0 var/supplyOrderData[0] - for(var/S in supply_shuttle.shoppinglist) + for(var/S in supply_controller.shoppinglist) var/datum/supply_order/SO = S supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) @@ -431,7 +431,7 @@ var/requestCount = 0 var/requestData[0] - for(var/S in supply_shuttle.requestlist) + for(var/S in supply_controller.requestlist) var/datum/supply_order/SO = S requestCount++ requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index be919a87d9e..d0ae877e4db 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -4,8 +4,7 @@ #define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station #define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock -var/global/datum/controller/supply_shuttle/supply_shuttle -//var/datum/controller/supply_shuttle/supply_shuttle = new() +var/datum/controller/supply/supply_controller = new() var/list/mechtoys = list( /obj/item/toy/prize/ripley, @@ -126,7 +125,7 @@ var/list/mechtoys = list( var/orderedby = null var/comment = null -/datum/controller/supply_shuttle +/datum/controller/supply var/processing = 1 var/processing_interval = 300 var/iteration = 0 @@ -152,14 +151,14 @@ var/list/mechtoys = list( proc/get_shuttle() if (!shuttles || !(shuttle_tag in shuttles)) return null - + var/datum/shuttle/ferry/supply/shuttle = shuttles[shuttle_tag] - + if (!istype(shuttle)) return null - + return shuttle - + //Supply shuttle ticker - handles supply point regenertion and shuttle travelling between centcomm and the station proc/process() for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs)) @@ -172,7 +171,7 @@ var/list/mechtoys = list( if(processing) iteration++ points += points_per_process - + var/datum/shuttle/ferry/supply/shuttle = get_shuttle() if (shuttle) shuttle.process_shuttle() @@ -336,11 +335,11 @@ var/list/mechtoys = list( if(temp) dat = temp else - var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle() + var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle() if (shuttle) dat += {"
Supply shuttle
Location: [shuttle.has_eta() ? "Moving to station ([shuttle.eta_minutes()] Mins.)":shuttle.at_station() ? "Docked":"Away"]
-
Supply points: [supply_shuttle.points]
+
Supply points: [supply_controller.points]

\nRequest items

View approved orders

View requests

@@ -362,18 +361,18 @@ var/list/mechtoys = list( //all_supply_groups //Request what? last_viewed_group = "categories" - temp = "Supply points: [supply_shuttle.points]
" + temp = "Supply points: [supply_controller.points]
" temp += "Main Menu


" temp += "Select a category

" for(var/supply_group_name in all_supply_groups ) temp += "[supply_group_name]
" else last_viewed_group = href_list["order"] - temp = "Supply points: [supply_shuttle.points]
" + temp = "Supply points: [supply_controller.points]
" temp += "Back to all categories


" temp += "Request from: [last_viewed_group]

" - for(var/supply_name in supply_shuttle.supply_packs ) - var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name] + for(var/supply_name in supply_controller.supply_packs ) + var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] if(N.hidden || N.contraband || N.group != last_viewed_group) continue //Have to send the type instead of a reference to temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage @@ -384,7 +383,7 @@ var/list/mechtoys = list( return //Find the correct supply_pack datum - var/datum/supply_packs/P = supply_shuttle.supply_packs[href_list["doorder"]] + var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]] if(!istype(P)) return var/timeout = world.time + 600 @@ -401,11 +400,11 @@ var/list/mechtoys = list( else if(issilicon(usr)) idname = usr.real_name - supply_shuttle.ordernum++ + supply_controller.ordernum++ var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) reqform.name = "Requisition Form - [P.name]" reqform.info += "

[station_name] Supply Requisition Form


" - reqform.info += "INDEX: #[supply_shuttle.ordernum]
" + reqform.info += "INDEX: #[supply_controller.ordernum]
" reqform.info += "REQUESTED BY: [idname]
" reqform.info += "RANK: [idrank]
" reqform.info += "REASON: [reason]
" @@ -421,24 +420,24 @@ var/list/mechtoys = list( //make our supply_order datum var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_shuttle.ordernum + O.ordernum = supply_controller.ordernum O.object = P O.orderedby = idname - supply_shuttle.requestlist += O + supply_controller.requestlist += O temp = "Thanks for your request. The cargo team will process it as soon as possible.
" temp += "
Back Main Menu" else if (href_list["vieworders"]) temp = "Current approved orders:

" - for(var/S in supply_shuttle.shoppinglist) + for(var/S in supply_controller.shoppinglist) var/datum/supply_order/SO = S temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""]
" temp += "
OK" else if (href_list["viewrequests"]) temp = "Current requests:

" - for(var/S in supply_shuttle.requestlist) + for(var/S in supply_controller.requestlist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]
" temp += "
OK" @@ -463,7 +462,7 @@ var/list/mechtoys = list( if (temp) dat = temp else - var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle() + var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle() if (shuttle) dat += "
Supply shuttle
" dat += "\nLocation: " @@ -479,7 +478,7 @@ var/list/mechtoys = list( if ("undocking") dat += "Undocking from station [shuttle.can_force()? "OVERRIDE" : ""]
" else dat += "Station
" - + if (shuttle.can_launch()) dat += "Send away" else if (shuttle.can_cancel()) @@ -496,15 +495,15 @@ var/list/mechtoys = list( else dat += "*Shuttle is busy*" dat += "
\n
" - - - dat += {"
\nSupply points: [supply_shuttle.points]
\n
+ + + dat += {"
\nSupply points: [supply_controller.points]
\n
// [shuttle.at_station() ? "\n*Must be away to order items*
\n
":"\nOrder items
\n
"] \nOrder items
\n
\nView requests
\n
\nView orders
\n
\nClose"} - + user << browse(dat, "window=computer;size=575x450") onclose(user, "computer") @@ -520,10 +519,10 @@ var/list/mechtoys = list( return /obj/machinery/computer/supplycomp/Topic(href, href_list) - if(!supply_shuttle) - world.log << "## ERROR: Eek. The supply_shuttle controller datum is missing somehow." + if(!supply_controller) + world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow." return - var/datum/shuttle/ferry/supply/shuttle = supply_shuttle.get_shuttle() + var/datum/shuttle/ferry/supply/shuttle = supply_controller.get_shuttle() if (!shuttle) world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow." return @@ -543,40 +542,40 @@ var/list/mechtoys = list( temp = "Initiating launch sequence.

OK" else shuttle.launch(src) - temp = "The supply shuttle has been called and will arrive in approximately [round(supply_shuttle.movetime/600,1)] minutes.

OK" + temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.

OK" post_signal("supply") - + if (href_list["force_send"]) shuttle.force_launch(src) if (href_list["cancel_send"]) shuttle.cancel_launch(src) - + else if (href_list["order"]) //if(!shuttle.idle()) return //this shouldn't be necessary it seems if(href_list["order"] == "categories") //all_supply_groups //Request what? last_viewed_group = "categories" - temp = "Supply points: [supply_shuttle.points]
" + temp = "Supply points: [supply_controller.points]
" temp += "Main Menu


" temp += "Select a category

" for(var/supply_group_name in all_supply_groups ) temp += "[supply_group_name]
" else last_viewed_group = href_list["order"] - temp = "Supply points: [supply_shuttle.points]
" + temp = "Supply points: [supply_controller.points]
" temp += "Back to all categories


" temp += "Request from: [last_viewed_group]

" - for(var/supply_name in supply_shuttle.supply_packs ) - var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name] + for(var/supply_name in supply_controller.supply_packs ) + var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage - /*temp = "Supply points: [supply_shuttle.points]


Request what?

" + /*temp = "Supply points: [supply_controller.points]


Request what?

" - for(var/supply_name in supply_shuttle.supply_packs ) - var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name] + for(var/supply_name in supply_controller.supply_packs ) + var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] if(N.hidden && !hacked) continue if(N.contraband && !can_order_contraband) continue temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage @@ -589,7 +588,7 @@ var/list/mechtoys = list( return //Find the correct supply_pack datum - var/datum/supply_packs/P = supply_shuttle.supply_packs[href_list["doorder"]] + var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]] if(!istype(P)) return var/timeout = world.time + 600 @@ -606,11 +605,11 @@ var/list/mechtoys = list( else if(issilicon(usr)) idname = usr.real_name - supply_shuttle.ordernum++ + supply_controller.ordernum++ var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc) reqform.name = "Requisition Form - [P.name]" reqform.info += "

[station_name] Supply Requisition Form


" - reqform.info += "INDEX: #[supply_shuttle.ordernum]
" + reqform.info += "INDEX: #[supply_controller.ordernum]
" reqform.info += "REQUESTED BY: [idname]
" reqform.info += "RANK: [idrank]
" reqform.info += "REASON: [reason]
" @@ -626,10 +625,10 @@ var/list/mechtoys = list( //make our supply_order datum var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_shuttle.ordernum + O.ordernum = supply_controller.ordernum O.object = P O.orderedby = idname - supply_shuttle.requestlist += O + supply_controller.requestlist += O temp = "Order request placed.
" temp += "
Back | Main Menu | Authorize Order" @@ -640,15 +639,15 @@ var/list/mechtoys = list( var/datum/supply_order/O var/datum/supply_packs/P temp = "Invalid Request" - for(var/i=1, i<=supply_shuttle.requestlist.len, i++) - var/datum/supply_order/SO = supply_shuttle.requestlist[i] + for(var/i=1, i<=supply_controller.requestlist.len, i++) + var/datum/supply_order/SO = supply_controller.requestlist[i] if(SO.ordernum == ordernum) O = SO P = O.object - if(supply_shuttle.points >= P.cost) - supply_shuttle.requestlist.Cut(i,i+1) - supply_shuttle.points -= P.cost - supply_shuttle.shoppinglist += O + if(supply_controller.points >= P.cost) + supply_controller.requestlist.Cut(i,i+1) + supply_controller.points -= P.cost + supply_controller.shoppinglist += O temp = "Thanks for your order.
" temp += "
Back Main Menu" else @@ -658,7 +657,7 @@ var/list/mechtoys = list( else if (href_list["vieworders"]) temp = "Current approved orders:

" - for(var/S in supply_shuttle.shoppinglist) + for(var/S in supply_controller.shoppinglist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""]
"// (Cancel)
" temp += "
OK" @@ -676,7 +675,7 @@ var/list/mechtoys = list( */ else if (href_list["viewrequests"]) temp = "Current requests:

" - for(var/S in supply_shuttle.requestlist) + for(var/S in supply_controller.requestlist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] [shuttle.idle() ? "":shuttle.at_station() ? "":"Approve Remove"]
" @@ -686,16 +685,16 @@ var/list/mechtoys = list( else if (href_list["rreq"]) var/ordernum = text2num(href_list["rreq"]) temp = "Invalid Request.
" - for(var/i=1, i<=supply_shuttle.requestlist.len, i++) - var/datum/supply_order/SO = supply_shuttle.requestlist[i] + for(var/i=1, i<=supply_controller.requestlist.len, i++) + var/datum/supply_order/SO = supply_controller.requestlist[i] if(SO.ordernum == ordernum) - supply_shuttle.requestlist.Cut(i,i+1) + supply_controller.requestlist.Cut(i,i+1) temp = "Request removed.
" break temp += "
Back Main Menu" else if (href_list["clearreq"]) - supply_shuttle.requestlist.Cut() + supply_controller.requestlist.Cut() temp = "List cleared.
" temp += "
OK" diff --git a/code/modules/shuttles/shuttle_supply.dm b/code/modules/shuttles/shuttle_supply.dm index 5f1ff015dbe..fedcc9efa77 100644 --- a/code/modules/shuttles/shuttle_supply.dm +++ b/code/modules/shuttles/shuttle_supply.dm @@ -20,7 +20,7 @@ origin = get_location_area(location) if (!at_station()) //at centcom - supply_shuttle.buy() + supply_controller.buy() //it would be cool to play a sound here moving_status = SHUTTLE_WARMUP @@ -40,7 +40,7 @@ move(origin, away_area) //wait ETA here. - arrive_time = world.time + supply_shuttle.movetime + arrive_time = world.time + supply_controller.movetime while (world.time <= arrive_time) sleep(5) @@ -50,14 +50,14 @@ moving_status = SHUTTLE_IDLE if (!at_station()) //at centcom - supply_shuttle.sell() + supply_controller.sell() // returns 1 if the supply shuttle should be prevented from moving because it contains forbidden atoms /datum/shuttle/ferry/supply/proc/forbidden_atoms_check() if (!at_station()) return 0 //if badmins want to send mobs or a nuke on the supply shuttle from centcom we don't care - return supply_shuttle.forbidden_atoms_check(get_location_area()) + return supply_controller.forbidden_atoms_check(get_location_area()) /datum/shuttle/ferry/supply/proc/at_station() return (!location)