diff --git a/baystation12.dme b/baystation12.dme index b309d6d0e42..5ecbbed4251 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -454,7 +454,9 @@ #include "code\game\gamemodes\nuclear\nuclear.dm" #include "code\game\gamemodes\nuclear\nuclearbomb.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm" +#include "code\game\gamemodes\revolution\anti_revolution.dm" #include "code\game\gamemodes\revolution\revolution.dm" +#include "code\game\gamemodes\revolution\rp_revolution.dm" #include "code\game\gamemodes\sandbox\h_sandbox.dm" #include "code\game\gamemodes\sandbox\sandbox.dm" #include "code\game\gamemodes\traitor\traitor.dm" @@ -479,6 +481,7 @@ #include "code\game\jobs\job\science.dm" #include "code\game\jobs\job\security.dm" #include "code\game\jobs\job\silicon.dm" +#include "code\game\machinery\adv_med.dm" #include "code\game\machinery\ai_slipper.dm" #include "code\game\machinery\airlock_control.dm" #include "code\game\machinery\alarm.dm" @@ -494,10 +497,12 @@ #include "code\game\machinery\door_control.dm" #include "code\game\machinery\doppler_array.dm" #include "code\game\machinery\flasher.dm" +#include "code\game\machinery\floodlight.dm" #include "code\game\machinery\Freezer.dm" #include "code\game\machinery\hologram.dm" #include "code\game\machinery\hydroponics.dm" #include "code\game\machinery\igniter.dm" +#include "code\game\machinery\iv_drip.dm" #include "code\game\machinery\lightswitch.dm" #include "code\game\machinery\machinery.dm" #include "code\game\machinery\magnet.dm" @@ -519,6 +524,7 @@ #include "code\game\machinery\suit_storage_unit.dm" #include "code\game\machinery\syndicatebeacon.dm" #include "code\game\machinery\teleporter.dm" +#include "code\game\machinery\transformer.dm" #include "code\game\machinery\turrets.dm" #include "code\game\machinery\vending.dm" #include "code\game\machinery\washing_machine.dm" @@ -647,6 +653,7 @@ #include "code\game\objects\effects\decals\misc.dm" #include "code\game\objects\effects\decals\remains.dm" #include "code\game\objects\effects\decals\Cleanable\aliens.dm" +#include "code\game\objects\effects\decals\Cleanable\fuel.dm" #include "code\game\objects\effects\decals\Cleanable\humans.dm" #include "code\game\objects\effects\decals\Cleanable\misc.dm" #include "code\game\objects\effects\decals\Cleanable\robots.dm" @@ -786,6 +793,7 @@ #include "code\game\objects\structures\noticeboard.dm" #include "code\game\objects\structures\shuttle_engines.dm" #include "code\game\objects\structures\tables_racks.dm" +#include "code\game\objects\structures\tank_dispenser.dm" #include "code\game\objects\structures\target_stake.dm" #include "code\game\objects\structures\watercloset.dm" #include "code\game\objects\structures\windoor_assembly.dm" @@ -1235,6 +1243,7 @@ #include "code\modules\reagents\reagent_containers.dm" #include "code\modules\reagents\reagent_dispenser.dm" #include "code\modules\reagents\syringe_gun.dm" +#include "code\modules\reagents\reagent_containers\blood_pack.dm" #include "code\modules\reagents\reagent_containers\borghydro.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" #include "code\modules\reagents\reagent_containers\food.dm" diff --git a/code/datums/disease.dm b/code/datums/disease.dm index 1f70c504e76..ad7fd93e45e 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -43,10 +43,12 @@ to null does not delete the object itself. Thank you. var/severity = null//severity descr var/longevity = 250//time in "ticks" the virus stays in inanimate object (blood stains, corpses, etc). In syringes, bottles and beakers it stays infinitely. var/list/hidden = list(0, 0) - var/can_carry = 1 // If the disease allows "carriers". var/age = 0 // age of the disease in the current mob var/stage_minimum_age = 0 // how old the disease must be to advance per stage // if hidden[1] is true, then virus is hidden from medical scanners + var/can_carry = 1 // If the disease allows "carriers". + var/age = 0 // age of the disease in the current mob + var/stage_minimum_age = 0 // how old the disease must be to advance per stage + // if hidden[1] is true, then virus is hidden from medical scanners // if hidden[2] is true, then virus is hidden from PANDEMIC machine - /datum/disease/proc/stage_act() age++ var/cure_present = has_cure() diff --git a/code/game/algorithm.dm b/code/game/algorithm.dm deleted file mode 100644 index b9f08159b0f..00000000000 --- a/code/game/algorithm.dm +++ /dev/null @@ -1,74 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -#define RECOMMENDED_VERSION 494 - -/world/New() - ..() - if(byond_version < RECOMMENDED_VERSION) - world.log << "Your server's byond version does not meet the recommended requirements for Baystation12. Please update BYOND" - - diary = file("data/logs/[time2text(world.realtime, "YYYY/MM-Month/DD-Day")].log") - diary << {" - -Starting up. [time2text(world.timeofday, "hh:mm.ss")] ---------------------- -"} - - diaryofmeanpeople = file("data/logs/[time2text(world.realtime, "YYYY/MM-Month/DD-Day")] Attack.log") - diaryofmeanpeople << {" - -Starting up. [time2text(world.timeofday, "hh:mm.ss")] ---------------------- -"} - - href_logfile = file("data/logs/[time2text(world.realtime, "YYYY/MM-Month/DD-Day")] hrefs.html") - - jobban_loadbanfile() - jobban_updatelegacybans() - LoadBans() - make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) - process_teleport_locs() //Sets up the wizard teleport locations - process_ghost_teleport_locs() //Sets up ghost teleport locations. - sleep_offline = 1 - - spawn(180) //so we aren't adding to the round-start lag - /*if(config.ToRban) - ToRban_autoupdate()*/ - if(config.kick_inactive) - KickInactiveClients() - -#undef RECOMMENDED_VERSION -#define INACTIVITY_KICK 6000 //10 minutes in ticks (approx.) -/world/proc/KickInactiveClients() - for(var/client/C) - if( !C.holder && (C.inactivity >= INACTIVITY_KICK) ) - if(C.mob) - if(!istype(C.mob, /mob/dead/)) - log_access("AFK: [key_name(C)]") - C << "\red You have been inactive for more than 10 minutes and have been disconnected." - del(C) - spawn(3000) KickInactiveClients()//more or less five minutes -#undef INACTIVITY_KICK - -/// EXPERIMENTAL STUFF - -// This function counts a passed job. -proc/countJob(rank) - var/jobCount = 0 - for(var/mob/H in player_list) - if(H.mind && H.mind.assigned_role == rank) - jobCount++ - return jobCount - -/proc/AutoUpdateAI(obj/subject) - if (subject!=null) - for(var/mob/living/silicon/ai/M in player_list) - if ((M.client && M.machine == subject)) - subject.attack_ai(M) - -/proc/AutoUpdateTK(obj/subject) - if (subject!=null) - for(var/obj/item/tk_grab/T in world) - if (T.host) - var/mob/M = T.host - if(M.client && M.machine == subject) - subject.attack_hand(M) diff --git a/code/game/cellautomata.dm b/code/game/cellautomata.dm deleted file mode 100644 index 86a002b51ca..00000000000 --- a/code/game/cellautomata.dm +++ /dev/null @@ -1,202 +0,0 @@ -/world/proc/load_mode() - var/text = file2text("data/mode.txt") - if (text) - var/list/lines = dd_text2list(text, "\n") - if (lines[1]) - master_mode = lines[1] - diary << "Saved mode is '[master_mode]'" - -/world/proc/save_mode(var/the_mode) - var/F = file("data/mode.txt") - fdel(F) - F << the_mode - -/world/proc/load_motd() - join_motd = file2text("config/motd.txt") - - -/world/proc/load_admins() - var/text = file2text("config/admins.txt") - if (!text) - diary << "Failed to load config/admins.txt\n" - else - var/list/lines = dd_text2list(text, "\n") - for(var/line in lines) - if (!line) - continue - - if (copytext(line, 1, 2) == ";") - continue - - var/pos = findtext(line, " - ", 1, null) - if (pos) - var/m_key = copytext(line, 1, pos) - var/a_lev = copytext(line, pos + 3, length(line) + 1) - admins[m_key] = a_lev - diary << ("ADMIN: [m_key] = [a_lev]") - - // look for moderators in a separate file - text = file2text("config/moderators.txt") - if (!text) - diary << "Failed to load config/moderators.txt\n" - else - var/list/lines = dd_text2list(text, "\n") - for(var/line in lines) - if (!line) - continue - - if (copytext(line, 1, 2) == ";") - continue - - var/m_key = copytext(line, 1, length(line)+1) - var/a_lev = "Moderator" - admins[m_key] = a_lev - -/world/proc/load_testers() - var/text = file2text("config/testers.txt") - if (!text) - diary << "Failed to load config/testers.txt\n" - else - var/list/lines = dd_text2list(text, "\n") - for(var/line in lines) - if (!line) - continue - - if (copytext(line, 1, 2) == ";") - continue - - var/pos = findtext(line, " - ", 1, null) - if (pos) - var/m_key = copytext(line, 1, pos) - var/a_lev = copytext(line, pos + 3, length(line) + 1) - admins[m_key] = a_lev - - -/world/proc/load_configuration() - config = new /datum/configuration() - config.load("config/config.txt") - config.load("config/game_options.txt","game_options") - //config.loadsql("config/dbconfig.txt") - //config.loadforumsql("config/forumdbconfig.txt") - // apply some settings from config.. - abandon_allowed = config.respawn - -/world/New() - src.load_configuration() - - if (config && config.server_name != null && config.server_suffix && world.port > 0) - // dumb and hardcoded but I don't care~ - config.server_name += " #[(world.port % 1000) / 100]" - - src.load_mode() - src.load_motd() - src.load_admins() - investigate_reset() - - if (config.usealienwhitelist) - load_alienwhitelist() - if (config.usewhitelist) - load_whitelist() - - LoadBansjob() - //Get_Holiday() //~Carn, needs to be here when the station is named so :P - src.update_status() - makepowernets() - - sun = new /datum/sun() - vote = new /datum/vote() - radio_controller = new /datum/controller/radio() - data_core = new /obj/effect/datacore() - paiController = new /datum/paiController() - - ..() - - sleep(50) - - plmaster = new /obj/effect/overlay( ) - plmaster.icon = 'icons/effects/tile_effects.dmi' - plmaster.icon_state = "plasma" - plmaster.layer = FLY_LAYER - plmaster.mouse_opacity = 0 - - slmaster = new /obj/effect/overlay( ) - slmaster.icon = 'icons/effects/tile_effects.dmi' - slmaster.icon_state = "sleeping_agent" - slmaster.layer = FLY_LAYER - slmaster.mouse_opacity = 0 - - src.update_status() - - socket_talk = new /datum/socket_talk() - master_controller = new /datum/controller/game_controller() - spawn(-1) - master_controller.setup() - lighting_controller.Initialize() - return - -//Crispy fullban -/world/Reboot(var/reason) - spawn(0) - send2irc(world.url,"Server Rebooting!") - socket_talk.send_raw("type=reboot") - //world << sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg')) // random end sounds!! - LastyBatsy - - for(var/client/C) - if (config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite - C << link("byond://[config.server]") - else - C << link("byond://[world.address]:[world.port]") - -// sleep(10) // wait for sound to play - ..(reason) - -/atom/proc/check_eye(user as mob) - if (istype(user, /mob/living/silicon/ai)) - return 1 - return - -/atom/proc/on_reagent_change() - return - -/atom/proc/Bumped(AM as mob|obj) - return - -/atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) - spawn( 0 ) - if ((A && yes)) - A.last_bumped = world.time - A.Bumped(src) - return - ..() - return - -// **** Note in 40.93.4, split into obj/mob/turf point verbs, no area - -/atom/verb/point() - set name = "Point To" - set category = "Object" - set src in oview() - var/atom/this = src//detach proc from src - src = null - - if(!usr || !isturf(usr.loc)) - return - if(usr.stat || usr.restrained()) - return - if(usr.status_flags & FAKEDEATH) - return - - var/tile = get_turf(this) - if (!tile) - return - - var/P = new /obj/effect/decal/point(tile) - spawn (20) - if(P) del(P) - - usr.visible_message("[usr] points to [this]") - -/obj/effect/decal/point/point() - set src in oview() - set hidden = 1 - return \ No newline at end of file diff --git a/code/game/machinery/camera_circuit.dm b/code/game/machinery/computer/camera_circuit.dm similarity index 100% rename from code/game/machinery/camera_circuit.dm rename to code/game/machinery/computer/camera_circuit.dm diff --git a/code/game/machinery/gateway.dm b/code/game/machinery/gateway.dm deleted file mode 100644 index f44b663acdc..00000000000 --- a/code/game/machinery/gateway.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/structure/gatewayplaceholder - density = 1 - anchored = 1 - icon = 'icons/obj/machines/gateway.dmi' - -/obj/structure/gatewayplaceholder/one - name = "Gateway" - desc = "A gateway" - icon_state = "off1" - -/obj/structure/gatewayplaceholder/two - name = "Gateway" - desc = "A gateway" - icon_state = "off2" - -/obj/structure/gatewayplaceholder/three - name = "Gateway" - desc = "A gateway" - icon_state = "off3" - -/obj/structure/gatewayplaceholder/four - name = "Gateway" - desc = "A gateway" - icon_state = "off4" - -/obj/structure/gatewayplaceholder/five - name = "Gateway" - desc = "A gateway" - icon_state = "off5" - -/obj/structure/gatewayplaceholder/six - name = "Gateway" - desc = "A gateway" - icon_state = "off6" - -/obj/structure/gatewayplaceholder/seven - name = "Gateway" - desc = "A gateway" - icon_state = "off7" - -/obj/structure/gatewayplaceholder/eight - name = "Gateway" - desc = "A gateway" - icon_state = "off8" - -/obj/structure/gatewayplaceholder/nine - name = "Gateway" - desc = "A gateway" - icon_state = "off9" \ No newline at end of file diff --git a/code/game/machinery/small_constructable_frame.dm b/code/game/machinery/small_constructable_frame.dm deleted file mode 100644 index a85973cf8c7..00000000000 --- a/code/game/machinery/small_constructable_frame.dm +++ /dev/null @@ -1,186 +0,0 @@ -//Copied from the constructable frame code to make this a hell of a lot easier. - -/obj/machinery/small_constructable_frame //Made into a seperate type to make future revisions easier. - name = "small machine frame" - icon = 'stock_parts.dmi' - icon_state = "sbox_0" - density = 1 - anchored = 1 - use_power = 0 - var/obj/item/weapon/circuitboard/circuit = null - var/list/components = null - var/list/req_components = null - var/list/req_component_names = null - var/state = 1 - - proc/update_desc() - var/D - if(req_components) - D = "Requires " - var/first = 1 - for(var/I in req_components) - if(req_components[I] > 0) - D += "[first?"":", "][num2text(req_components[I])] [req_component_names[I]]" - first = 0 - if(first) // nothing needs to be added, then - D += "nothing, use a screwdriver to finish it up." - D += "." - desc = D - -/obj/machinery/small_constructable_frame - attackby(obj/item/P as obj, mob/user as mob) - if(P.crit_fail) - user << "\red This part is faulty, you cannot add this to the machine!" - return - switch(state) - if(1) - if(istype(P, /obj/item/weapon/cable_coil)) - if(P:amount >= 5) - playsound(src.loc, 'Deconstruct.ogg', 50, 1) - user << "\blue You start to add cables to the frame." - if(do_after(user, 20)) - P:amount -= 5 - if(!P:amount) del(P) - user << "\blue You add cables to the frame." - state = 2 - icon_state = "sbox_1" - if(istype(P, /obj/item/weapon/wrench)) - playsound(src.loc, 'Ratchet.ogg', 75, 1) - user << "\blue You dismantle the frame" - new /obj/item/stack/sheet/metal(src.loc, 5) - del(src) - if(2) - if(istype(P, /obj/item/weapon/circuitboard)) - var/obj/item/weapon/circuitboard/B = P - if(B.board_type == "smachine") - playsound(src.loc, 'Deconstruct.ogg', 50, 1) - user << "\blue You add the circuit board to the frame." - circuit = P - user.drop_item() - P.loc = src - icon_state = "sbox_2" - state = 3 - components = list() - req_components = circuit.req_components.Copy() - for(var/A in circuit.req_components) - req_components[A] = circuit.req_components[A] - req_component_names = circuit.req_components.Copy() - for(var/A in req_components) - var/cp = text2path(A) - var/obj/ct = new cp() // have to quickly instantiate it get name - req_component_names[A] = ct.name - if(circuit.frame_desc) - desc = circuit.frame_desc - else - update_desc() - user << desc - else - user << "\red This frame does not accept circuit boards of this type!" - if(istype(P, /obj/item/weapon/wirecutters)) - playsound(src.loc, 'wirecutter.ogg', 50, 1) - user << "\blue You remove the cables." - state = 1 - icon_state = "sbox_0" - var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( src.loc ) - A.amount = 5 - - if(3) - if(istype(P, /obj/item/weapon/crowbar)) - playsound(src.loc, 'Crowbar.ogg', 50, 1) - state = 2 - circuit.loc = src.loc - circuit = null - if(components.len == 0) - user << "\blue You remove the circuit board." - else - user << "\blue You remove the circuit board and other components." - for(var/obj/item/weapon/W in components) - W.loc = src.loc - desc = initial(desc) - req_components = null - components = null - icon_state = "sbox_1" - - if(istype(P, /obj/item/weapon/screwdriver)) - var/component_check = 1 - for(var/R in req_components) - if(req_components[R] > 0) - component_check = 0 - break - if(component_check) - playsound(src.loc, 'Screwdriver.ogg', 50, 1) - var/obj/machinery/new_machine = new src.circuit.build_path(src.loc) - for(var/obj/O in new_machine.component_parts) - del(O) - new_machine.component_parts = list() - for(var/obj/O in src) - if(circuit.contain_parts) // things like disposal don't want their parts in them - O.loc = new_machine - else - O.loc = null - new_machine.component_parts += O - if(circuit.contain_parts) - circuit.loc = new_machine - else - circuit.loc = null - new_machine.RefreshParts() - del(src) - - if(istype(P, /obj/item/weapon)) - for(var/I in req_components) - if(istype(P, text2path(I)) && (req_components[I] > 0)) - playsound(src.loc, 'Deconstruct.ogg', 50, 1) - if(istype(P, /obj/item/weapon/cable_coil)) - var/obj/item/weapon/cable_coil/CP = P - if(CP.amount > 1) - var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided - var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src) - CC.amount = camt - CC.update_icon() - CP.use(camt) - components += CC - req_components[I] -= camt - update_desc() - break - user.drop_item() - P.loc = src - components += P - req_components[I]-- - update_desc() - break - user << desc - if(P.loc != src && !istype(P, /obj/item/weapon/cable_coil)) - user << "\red You cannot add that component to the machine!" - - -//Machine Frame Circuit Boards -/*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, -micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. -Note: Once everything is added to the public areas, will add m_amt and g_amt to circuit boards since autolathe won't be able -to destroy them and players will be able to make replacements. -*/ - -/obj/item/weapon/circuitboard/recharger - name = "Circuit board (recharger)" - build_path = "/obj/machinery/recharger" - board_type = "smachine" - origin_tech = "engineering=2;powerstorage=3" - frame_desc = "Requires 1 Manipulator, 2 capacitors, and 1 cable coil" - req_components = list( - "/obj/item/weapon/stock_parts/manipulator" = 1, - "/obj/item/weapon/cable_coil" = 1, - "/obj/item/weapon/stock_parts/capacitor" = 2) - -/obj/item/weapon/circuitboard/cellrecharger - name = "Circuit board (cell recharger)" - build_path = "/obj/machinery/cell_charger" - board_type = "smachine" - origin_tech = "engineering=2;powerstorage=2" - frame_desc = "Requires 1 Manipulator, 2 capacitors, and 1 cable coil" - req_components = list( - "/obj/item/weapon/stock_parts/manipulator" = 1, - "/obj/item/weapon/cable_coil" = 1, - "/obj/item/weapon/stock_parts/capacitor" = 2) - - - diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm deleted file mode 100644 index 3048e0fe9b3..00000000000 --- a/code/game/master_controller.dm +++ /dev/null @@ -1,240 +0,0 @@ -var/global/datum/controller/game_controller/master_controller //Set in world.New() -var/global/datum/failsafe/Failsafe -var/global/controllernum = "no" -var/global/controller_iteration = 0 - - -var/global/last_tick_timeofday = world.timeofday -var/global/last_tick_duration = 0 - -datum/controller/game_controller - var/processing = 1 - - var/global/air_master_ready = 0 - var/global/sun_ready = 0 - var/global/mobs_ready = 0 - var/global/diseases_ready = 0 - var/global/machines_ready = 0 - var/global/objects_ready = 0 - var/global/networks_ready = 0 - var/global/powernets_ready = 0 - var/global/ticker_ready = 0 - var/global/next_crew_shuttle_vote = 2 // the next automatic vote to call the crew shuttle - - //Used for MC 'proc break' debugging - var/global/obj/last_obj_processed - var/global/datum/disease/last_disease_processed - var/global/obj/machinery/last_machine_processed - var/global/mob/last_mob_processed - - - proc/setup() - if(master_controller && (master_controller != src)) - del(src) - return - //There can be only one master. - - if(!air_master) - air_master = new /datum/controller/air_system() - air_master.setup() - - if(!job_master) - job_master = new /datum/controller/occupations() - if(job_master.SetupOccupations()) - world << "\red \b Job setup complete" - job_master.LoadJobs("config/jobs.txt") - - world.tick_lag = config.Ticklag - - createRandomZlevel() - - setup_objects() - - setupgenetics() - - - /*for(var/i = 0, i < max_secret_rooms, i++) - make_mining_asteroid_secret()*/ - - syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round. - syndicate_code_response = generate_code_phrase() - - emergency_shuttle = new /datum/shuttle_controller/emergency_shuttle() - - if(!ticker) - ticker = new /datum/controller/gameticker() - - setupfactions() - - spawn - ticker.pregame() - - proc/setup_objects() - world << "\red \b Initializing objects" - sleep(-1) - - for(var/obj/object in world) - object.initialize() - - world << "\red \b Initializing pipe networks" - sleep(-1) - - for(var/obj/machinery/atmospherics/machine in world) - machine.build_network() - - world << "\red \b Initializing atmos machinery." - sleep(-1) - for(var/obj/machinery/atmospherics/unary/vent_pump/T in world) - T.broadcast_status() - for(var/obj/machinery/atmospherics/unary/vent_scrubber/T in world) - T.broadcast_status() - - world << "\red \b Initializations complete." - - proc/set_debug_state(txt) - // This should describe what is currently being done by the master controller - // Useful for crashlogs and similar, because that way it's easy to tell what - // was going on when the server crashed. - socket_talk.send_raw("type=ticker_state&message=[txt]") - return - - - proc/process() - - var/currenttime = world.timeofday - var/diff = (currenttime - last_tick_timeofday) / 10 - last_tick_timeofday = currenttime - last_tick_duration = diff - - if(!processing) - return 0 - controllernum = "yes" - spawn (100) - controllernum = "no" - - controller_iteration++ - - var/start_time = world.timeofday - - // Start an automatic crew shuttle vote every hour starting with the second hour - if(world.time > 10 * 60 * 60 * next_crew_shuttle_vote) - next_crew_shuttle_vote++ - automatic_crew_shuttle_vote() - - air_master_ready = 0 - sun_ready = 0 - mobs_ready = 0 - diseases_ready = 0 - machines_ready = 0 - objects_ready = 0 - networks_ready = 0 - powernets_ready = 0 - ticker_ready = 0 - - spawn(0) - src.set_debug_state("Air Master") - air_master.tick() - air_master_ready = 1 - - sleep(1) - - spawn(0) - src.set_debug_state("Sun Position Calculations") - sun.calc_position() - sun_ready = 1 - - sleep(-1) - - spawn(0) - src.set_debug_state("Mob Processing") - for(var/mob/M in world) - last_mob_processed = M - M.Life() - mobs_ready = 1 - - - - sleep(-1) - - - spawn(0) - src.set_debug_state("Disease Processing") - for(var/datum/disease/D in active_diseases) - last_disease_processed = D - D.process() - diseases_ready = 1 - - spawn(0) - src.set_debug_state("Machinery Processing") - for(var/obj/machinery/machine in machines) - if(machine) - last_machine_processed = machine - machine.process() - if(machine && machine.use_power) - machine.auto_use_power() - - machines_ready = 1 - - sleep(-1) - sleep(1) - - spawn(0) - src.set_debug_state("Object Processing") - for(var/obj/object in processing_objects) - last_obj_processed = object - object.process() - objects_ready = 1 - - spawn(0) - src.set_debug_state("Pipe Network Processing") - for(var/datum/pipe_network/network in pipe_networks) - network.process() - networks_ready = 1 - - spawn(0) - src.set_debug_state("Powernet Processing") - for(var/datum/powernet/P in powernets) - P.reset() - powernets_ready = 1 - - sleep(-1) - - spawn(0) - ticker.process() - ticker_ready = 1 - - sleep(world.timeofday+12-start_time) - - var/IL_check = 0 //Infinite loop check (To report when the master controller breaks.) - while(!air_master_ready || !sun_ready || !mobs_ready || !diseases_ready || !machines_ready || !objects_ready || !networks_ready || !powernets_ready || !ticker_ready) - IL_check++ - if(IL_check > 600) - var/MC_report = "air_master_ready = [air_master_ready]; sun_ready = [sun_ready]; mobs_ready = [mobs_ready]; diseases_ready = [diseases_ready]; machines_ready = [machines_ready]; objects_ready = [objects_ready]; networks_ready = [networks_ready]; powernets_ready = [powernets_ready]; ticker_ready = [ticker_ready];" - message_admins("PROC BREAKAGE WARNING: The game's master contorller appears to be stuck in one of it's cycles. It has looped through it's delaying loop [IL_check] times.") - message_admins("The master controller reports: [MC_report]") - if(!diseases_ready) - if(last_disease_processed) - message_admins("DISEASE PROCESSING stuck on [last_disease_processed]", 0, 1) - else - message_admins("DISEASE PROCESSING stuck on unknown") - if(!machines_ready) - if(last_machine_processed) - message_admins("MACHINE PROCESSING stuck on [last_machine_processed]", 0, 1) - else - message_admins("MACHINE PROCESSING stuck on unknown") - if(!objects_ready) - if(last_obj_processed) - message_admins("OBJ PROCESSING stuck on [last_obj_processed]", 0, 1) - else - message_admins("OBJ PROCESSING stuck on unknown") - log_admin("PROC BREAKAGE WARNING: infinite_loop_check = [IL_check]; [MC_report];") - message_admins("Master controller breaking out of delaying loop. Restarting the round is advised if problem persists. DO NOT manually restart the master controller.") - break; - sleep(1) - - - spawn - process() - - - return 1 \ No newline at end of file diff --git a/code/game/vote.dm b/code/game/vote.dm deleted file mode 100644 index f0e80082448..00000000000 --- a/code/game/vote.dm +++ /dev/null @@ -1,436 +0,0 @@ -/datum/vote/New() - - nextvotetime = world.timeofday // + 10*config.vote_delay - - -/datum/vote/proc/canvote()//marker1 - var/excess = world.timeofday - vote.nextvotetime - - if(excess < -10000) // handle clock-wrapping problems - very long delay (>20 hrs) if wrapped - vote.nextvotetime = world.timeofday - return 1 - return (excess >= 0) - -/datum/vote/proc/nextwait() - return timetext( round( (nextvotetime - world.timeofday)/10) ) - -/datum/vote/proc/endwait() - return timetext( round( (votetime - world.timeofday)/10) ) - -/datum/vote/proc/timetext(var/interval) - var/minutes = round(interval / 60) - var/seconds = round(interval % 60) - - var/tmin = "[minutes>0?num2text(minutes)+"min":null]" - var/tsec = "[seconds>0?num2text(seconds)+"sec":null]" - - if(tmin && tsec) // hack to skip inter-space if either field is blank - return "[tmin] [tsec]" - else - if(!tmin && !tsec) // return '0sec' if 0 time left - return "0sec" - return "[tmin][tsec]" - -/datum/vote/proc/getvotes() - var/list/L = list() - for(var/mob/M in player_list) - if(M.client && M.client.inactivity < 1200) // clients inactive for 2 minutes don't count - L[M.client.vote] += 1 - - return L - - -/datum/vote/proc/endvote() - - if(!voting) // means that voting was aborted by an admin - return - - world << "\red ***Voting has closed." - - log_vote("Voting closed, result was [winner]") - voting = 0 - nextvotetime = world.timeofday + 10*config.vote_delay - - for(var/mob/M in player_list) // clear vote window from all clients - if(M.client) - M << browse(null, "window=vote") - M.client.showvote = 0 - - calcwin() - - if(mode) - if(!ticker) - if(!going) - world << "The game will start soon." - going = 1 - var/wintext = capitalize(winner) - if(winner=="default") - world << "Result is \red No change." - return - - // otherwise change mode - - - world << "Result is change to \red [wintext]" - world.save_mode(winner) - - if(ticker && ticker.mode) - world <<"\red World will reboot in 10 seconds" - - feedback_set_details("end_error","mode vote - [winner]") - - if(blackbox) - blackbox.save_all_data_to_sql() - - sleep(100) - log_game("Rebooting due to mode vote") - world.Reboot() - else - master_mode = winner - - else - - if(winner=="default") - world << "Result is \red No restart." - return - - world << "Result is \red Restart round." - - world <<"\red World will reboot in 5 seconds" - - feedback_set_details("end_error","restart vote") - - if(blackbox) - blackbox.save_all_data_to_sql() - - sleep(50) - log_game("Rebooting due to restart vote") - world.Reboot() - return - - -/datum/vote/proc/calcwin() - - var/list/votes = getvotes() - - if(vote.mode) - var/best = -1 - - for(var/v in votes) - if(v=="none") - continue - if(best < votes[v]) - best = votes[v] - - - var/list/winners = list() - - for(var/v in votes) - if(votes[v] == best) - winners += v - - var/ret = "" - - - for(var/w in winners) - if(lentext(ret) > 0) - ret += "/" - if(w=="default") - winners = list("default") - ret = "No change" - break - else - ret += capitalize(w) - - - - if(winners.len != 1) - ret = "Tie: " + ret - - - if(winners.len == 0) - vote.winner = "default" - ret = "No change" - else - vote.winner = pick(winners) - - return ret - else - - if(votes["default"] < votes["restart"]) - - vote.winner = "restart" - return "Restart" - else - vote.winner = "default" - return "No restart" - - -/mob/verb/vote() - set category = "OOC" - set name = "Vote" - usr.client.showvote = 1 - - - var/text = "
Current winner: [vote.calcwin()]
"
-
- text += footer
-
- usr << browse(text, "window=vote")
-
- else // voting to restart
- text += "Vote to call crew transfer shuttle round in progress.
"
- text += "[vote.endwait()] until voting is closed.
"
-
- if(vote.instant_restart)
- text += "Restart the world? ONLY PRESS THIS IF THERE'S A ROUND-BREAKING GLITCH.
"
- else
- text += "Call the Crew Transfer Shuttle?
"
-
- text += "*** Please make sure to only vote 'no' if you yourself are currently enjoying the round. If you find the round to have gone stale, you should always vote 'yes', regardless of how others are feeling about the round.
Current winner: [vote.calcwin()]
"
-
- text += footer
-
- usr << browse(text, "window=vote")
-
-
- else //no vote in progress
-
- if(shuttlecoming == 1)
- usr << "\blue Cannot start Vote - Shuttle has been called."
- return
-
- if(!config.allow_vote_restart && !config.allow_vote_mode)
- text += "
Player voting is disabled.