mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-24 21:40:55 +01:00
Merge branch 'Aurorastation/development' into Map-Development
This commit is contained in:
@@ -22,7 +22,7 @@ var/datum/controller/process/alarm/alarm_manager
|
||||
for(last_object in all_handlers)
|
||||
var/datum/alarm_handler/AH = last_object
|
||||
AH.process()
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
/datum/controller/process/alarm/proc/active_alarms()
|
||||
var/list/all_alarms = new
|
||||
|
||||
@@ -22,7 +22,7 @@ var/datum/controller/process/chemistry/chemistryProcess
|
||||
var/datum/reagents/holder = last_object
|
||||
if(!holder.process_reactions())
|
||||
active_holders -= holder
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
/datum/controller/process/chemistry/proc/mark_for_update(var/datum/reagents/holder)
|
||||
if(holder in active_holders)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
for(last_object in active_diseases)
|
||||
var/datum/disease/D = last_object
|
||||
D.process()
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
/datum/controller/process/disease/statProcess()
|
||||
..()
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
for(last_object in event_manager.active_events)
|
||||
var/datum/event/E = last_object
|
||||
E.process()
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
for(var/i = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR)
|
||||
last_object = event_manager.event_containers[i]
|
||||
var/list/datum/event_container/EC = last_object
|
||||
EC.process()
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
@@ -46,7 +46,7 @@ var/datum/controller/process/explosives/bomb_processor
|
||||
else
|
||||
explosion(data)
|
||||
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
work_queue -= data
|
||||
lighting_process.enable()
|
||||
@@ -110,7 +110,7 @@ var/datum/controller/process/explosives/bomb_processor
|
||||
|
||||
if (vibration)
|
||||
for(var/mob/M in player_list)
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
// Double check for client
|
||||
var/reception = 2//Whether the person can be shaken or hear sound
|
||||
//2 = BOTH
|
||||
@@ -176,12 +176,12 @@ var/datum/controller/process/explosives/bomb_processor
|
||||
else continue
|
||||
|
||||
T.ex_act(dist)
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
if(T)
|
||||
for(var/atom_movable in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway
|
||||
var/atom/movable/AM = atom_movable
|
||||
if(AM && AM.simulated) AM.ex_act(dist)
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
var/took = (world.timeofday-start)/10
|
||||
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
|
||||
@@ -214,7 +214,7 @@ var/datum/controller/process/explosives/bomb_processor
|
||||
for(var/direction in cardinal)
|
||||
var/turf/T = get_step(epicenter, direction)
|
||||
explosion_spread(T, power - epicenter.explosion_resistance, direction)
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
//This step applies the ex_act effects for the explosion, as planned in the previous step.
|
||||
for(var/turf/T in explosion_turfs)
|
||||
@@ -233,13 +233,13 @@ var/datum/controller/process/explosives/bomb_processor
|
||||
T = locate(x,y,z)
|
||||
for(var/atom/A in T)
|
||||
A.ex_act(severity)
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
explosion_in_progress = 0
|
||||
|
||||
// A proc used by recursive explosions. (The actually recursive bit.)
|
||||
/datum/controller/process/explosives/proc/explosion_spread(turf/s, power, direction)
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
if (istype(s, /turf/unsimulated))
|
||||
return
|
||||
if(power <= 0)
|
||||
|
||||
@@ -80,7 +80,7 @@ world/loop_checks = 0
|
||||
tick_dels++
|
||||
total_dels++
|
||||
destroyed.Cut(1, 2)
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
#undef GC_FORCE_DEL_PER_TICK
|
||||
#undef GC_COLLECTION_TIMEOUT
|
||||
@@ -151,13 +151,13 @@ world/loop_checks = 0
|
||||
|
||||
/datum/proc/finalize_qdel()
|
||||
if(IsPooled(src))
|
||||
PlaceInPool(src)
|
||||
returnToPool(src)
|
||||
else
|
||||
del(src)
|
||||
|
||||
/atom/finalize_qdel()
|
||||
if(IsPooled(src))
|
||||
PlaceInPool(src)
|
||||
if (IsPooled(src))
|
||||
returnToPool(src)
|
||||
else
|
||||
if(garbage_collector)
|
||||
garbage_collector.AddTrash(src)
|
||||
|
||||
@@ -11,4 +11,4 @@
|
||||
log_access("AFK: [key_name(C)]")
|
||||
C << "<SPAN CLASS='warning'>You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.</SPAN>"
|
||||
del(C) // Don't qdel, cannot override finalize_qdel behaviour for clients.
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
var/list/med_severity = list()
|
||||
var/list/high_severity = list()
|
||||
|
||||
disabled = 1
|
||||
|
||||
/datum/controller/process/law/New()
|
||||
corp_regs = src
|
||||
|
||||
@@ -25,4 +27,4 @@
|
||||
for( var/L in subtypesof( /datum/law/high_severity ))
|
||||
high_severity += new L
|
||||
|
||||
laws = low_severity + med_severity + high_severity
|
||||
laws = low_severity + med_severity + high_severity
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
#define STAGE_NONE 0
|
||||
#define STAGE_SOURCE 1
|
||||
#define STAGE_CORNER 2
|
||||
#define STAGE_OVERLAY 3
|
||||
|
||||
/var/list/lighting_update_lights = list() // List of lighting sources queued for update.
|
||||
/var/list/lighting_update_corners = list() // List of lighting corners queued for update.
|
||||
/var/list/lighting_update_overlays = list() // List of lighting overlays queued for update.
|
||||
|
||||
// Probably slow.
|
||||
/var/lighting_profiling = FALSE
|
||||
|
||||
/var/datum/controller/process/lighting/lighting_process
|
||||
|
||||
/datum/controller/process/lighting
|
||||
schedule_interval = LIGHTING_INTERVAL
|
||||
var/list/curr_lights = list()
|
||||
var/list/curr_corners = list()
|
||||
var/list/curr_overlays = list()
|
||||
var/list/resume_pos = 0
|
||||
|
||||
/datum/controller/process/lighting/setup()
|
||||
name = "lighting"
|
||||
|
||||
lighting_process = src
|
||||
|
||||
/datum/controller/process/lighting/statProcess()
|
||||
..()
|
||||
stat(null, "[all_lighting_overlays.len] overlays ([all_lighting_corners.len] corners)")
|
||||
stat(null, "Lights: [lighting_update_lights.len] queued, [curr_lights.len] processing")
|
||||
stat(null, "Corners: [lighting_update_corners.len] queued, [curr_corners.len] processing")
|
||||
stat(null, "Overlays: [lighting_update_overlays.len] queued, [curr_overlays.len] processing")
|
||||
|
||||
/datum/controller/process/lighting/doWork()
|
||||
// -- SOURCES --
|
||||
if (resume_pos == STAGE_NONE)
|
||||
curr_lights = lighting_update_lights
|
||||
lighting_update_lights = list()
|
||||
|
||||
resume_pos = STAGE_SOURCE
|
||||
|
||||
while (curr_lights.len)
|
||||
var/datum/light_source/L = curr_lights[curr_lights.len]
|
||||
curr_lights.len--
|
||||
|
||||
if(L.check() || L.destroyed || L.force_update)
|
||||
L.remove_lum()
|
||||
if(!L.destroyed)
|
||||
L.apply_lum()
|
||||
|
||||
else if(L.vis_update) //We smartly update only tiles that became (in) visible to use.
|
||||
L.smart_vis_update()
|
||||
|
||||
L.vis_update = FALSE
|
||||
L.force_update = FALSE
|
||||
L.needs_update = FALSE
|
||||
|
||||
F_SCHECK
|
||||
|
||||
// -- CORNERS --
|
||||
if (resume_pos == STAGE_SOURCE)
|
||||
curr_corners = lighting_update_corners
|
||||
lighting_update_corners = list()
|
||||
|
||||
resume_pos = STAGE_CORNER
|
||||
|
||||
while (curr_corners.len)
|
||||
var/datum/lighting_corner/C = curr_corners[curr_corners.len]
|
||||
curr_corners.len--
|
||||
|
||||
C.update_overlays()
|
||||
|
||||
C.needs_update = FALSE
|
||||
|
||||
F_SCHECK
|
||||
|
||||
if (resume_pos == STAGE_CORNER)
|
||||
curr_overlays = lighting_update_overlays
|
||||
lighting_update_overlays = list()
|
||||
|
||||
resume_pos = STAGE_OVERLAY
|
||||
|
||||
while (curr_overlays.len)
|
||||
var/atom/movable/lighting_overlay/O = curr_overlays[curr_overlays.len]
|
||||
curr_overlays.len--
|
||||
|
||||
O.update_overlay()
|
||||
O.needs_update = FALSE
|
||||
|
||||
F_SCHECK
|
||||
|
||||
resume_pos = 0
|
||||
|
||||
#undef STAGE_NONE
|
||||
#undef STAGE_SOURCE
|
||||
#undef STAGE_CORNER
|
||||
#undef STAGE_OVERLAY
|
||||
@@ -1,67 +1,105 @@
|
||||
/var/global/machinery_sort_required = 0
|
||||
|
||||
#define STAGE_NONE 0
|
||||
#define STAGE_MACHINERY 1
|
||||
#define STAGE_POWERNET 2
|
||||
#define STAGE_POWERSINK 3
|
||||
#define STAGE_PIPENET 4
|
||||
|
||||
/datum/controller/process/machinery
|
||||
var/tmp/list/processing_machinery = list()
|
||||
var/tmp/list/processing_powernets = list()
|
||||
var/tmp/list/processing_powersinks = list()
|
||||
var/tmp/list/processing_pipenets = list()
|
||||
var/stage = STAGE_NONE
|
||||
|
||||
/datum/controller/process/machinery/setup()
|
||||
name = "machinery"
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
schedule_interval = 2 SECONDS
|
||||
start_delay = 12
|
||||
|
||||
/datum/controller/process/machinery/doWork()
|
||||
internal_sort()
|
||||
internal_process_pipenets()
|
||||
internal_process_machinery()
|
||||
internal_process_power()
|
||||
internal_process_power_drain()
|
||||
// If we're starting a new tick, setup.
|
||||
if (stage == STAGE_NONE)
|
||||
processing_machinery = machines.Copy()
|
||||
stage = STAGE_MACHINERY
|
||||
|
||||
// Process machinery.
|
||||
while (processing_machinery.len)
|
||||
var/obj/machinery/M = processing_machinery[processing_machinery.len]
|
||||
processing_machinery.len--
|
||||
|
||||
if (!M || M.gcDestroyed)
|
||||
machines -= M
|
||||
continue
|
||||
|
||||
if (M.process() == PROCESS_KILL)
|
||||
machines -= M
|
||||
continue
|
||||
|
||||
if (M.use_power)
|
||||
M.auto_use_power()
|
||||
|
||||
F_SCHECK
|
||||
|
||||
if (stage == STAGE_MACHINERY)
|
||||
processing_powernets = powernets.Copy()
|
||||
stage = STAGE_POWERNET
|
||||
|
||||
while (processing_powernets.len)
|
||||
var/datum/powernet/PN = processing_powernets[processing_powernets.len]
|
||||
processing_powernets.len--
|
||||
|
||||
if (!PN || PN.gcDestroyed)
|
||||
powernets -= PN
|
||||
continue
|
||||
|
||||
PN.reset()
|
||||
F_SCHECK
|
||||
|
||||
if (stage == STAGE_POWERNET)
|
||||
processing_powersinks = processing_power_items.Copy()
|
||||
stage = STAGE_POWERSINK
|
||||
|
||||
while (processing_powersinks.len)
|
||||
var/obj/item/I = processing_powersinks[processing_powersinks.len]
|
||||
processing_powersinks.len--
|
||||
|
||||
if (!I || !I.pwr_drain())
|
||||
processing_power_items -= I
|
||||
|
||||
F_SCHECK
|
||||
|
||||
if (stage == STAGE_POWERSINK)
|
||||
processing_pipenets = pipe_networks.Copy()
|
||||
stage = STAGE_PIPENET
|
||||
|
||||
while (processing_pipenets.len)
|
||||
var/datum/pipe_network/PN = processing_pipenets[processing_pipenets.len]
|
||||
processing_pipenets.len--
|
||||
|
||||
if (!PN || PN.gcDestroyed)
|
||||
continue
|
||||
|
||||
PN.process()
|
||||
F_SCHECK
|
||||
|
||||
stage = STAGE_NONE
|
||||
|
||||
/datum/controller/process/machinery/proc/internal_sort()
|
||||
if(machinery_sort_required)
|
||||
machinery_sort_required = 0
|
||||
machines = dd_sortedObjectList(machines)
|
||||
|
||||
/datum/controller/process/machinery/proc/internal_process_machinery()
|
||||
for(last_object in machines)
|
||||
var/obj/machinery/M = last_object
|
||||
if(M && !M.gcDestroyed)
|
||||
if(M.process() == PROCESS_KILL)
|
||||
//M.inMachineList = 0 We don't use this debugging function
|
||||
machines.Remove(M)
|
||||
continue
|
||||
|
||||
if(M && M.use_power)
|
||||
M.auto_use_power()
|
||||
|
||||
SCHECK
|
||||
|
||||
/datum/controller/process/machinery/proc/internal_process_power()
|
||||
for(last_object in powernets)
|
||||
var/datum/powernet/powerNetwork = last_object
|
||||
if(istype(powerNetwork) && isnull(powerNetwork.gcDestroyed))
|
||||
powerNetwork.reset()
|
||||
SCHECK
|
||||
continue
|
||||
|
||||
powernets.Remove(powerNetwork)
|
||||
|
||||
/datum/controller/process/machinery/proc/internal_process_power_drain()
|
||||
// Currently only used by powersinks. These items get priority processed before machinery
|
||||
for(last_object in processing_power_items)
|
||||
var/obj/item/I = last_object
|
||||
if(!I.pwr_drain()) // 0 = Process Kill, remove from processing list.
|
||||
processing_power_items.Remove(I)
|
||||
SCHECK
|
||||
|
||||
/datum/controller/process/machinery/proc/internal_process_pipenets()
|
||||
for(last_object in pipe_networks)
|
||||
var/datum/pipe_network/pipeNetwork = last_object
|
||||
if(istype(pipeNetwork) && isnull(pipeNetwork.gcDestroyed))
|
||||
pipeNetwork.process()
|
||||
SCHECK
|
||||
continue
|
||||
|
||||
pipe_networks.Remove(pipeNetwork)
|
||||
|
||||
/datum/controller/process/machinery/statProcess()
|
||||
..()
|
||||
stat(null, "[machines.len] machines")
|
||||
stat(null, "[powernets.len] powernets")
|
||||
stat(null, "[pipe_networks.len] pipenets")
|
||||
stat(null, "[processing_power_items.len] power item\s")
|
||||
stat(null, "[machines.len] machines, [processing_machinery.len] queued")
|
||||
stat(null, "[powernets.len] powernets, [processing_powernets.len] queued")
|
||||
stat(null, "[processing_power_items.len] power items, [processing_powersinks.len] queued")
|
||||
stat(null, "[pipe_networks.len] pipenets, [processing_pipenets.len] queued")
|
||||
|
||||
#undef STAGE_NONE
|
||||
#undef STAGE_MACHINERY
|
||||
#undef STAGE_POWERNET
|
||||
#undef STAGE_POWERSINK
|
||||
#undef STAGE_PIPENET
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
/datum/controller/process/mob
|
||||
var/tmp/datum/updateQueue/updateQueueInstance
|
||||
var/tmp/list/queue = list()
|
||||
var/normal_exit = TRUE
|
||||
|
||||
/datum/controller/process/mob/setup()
|
||||
name = "mob"
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
schedule_interval = 2 SECONDS // every 2 seconds
|
||||
start_delay = 16
|
||||
|
||||
/datum/controller/process/mob/started()
|
||||
@@ -12,18 +14,24 @@
|
||||
mob_list = list()
|
||||
|
||||
/datum/controller/process/mob/doWork()
|
||||
for(last_object in mob_list)
|
||||
var/mob/M = last_object
|
||||
if(M && isnull(M.gcDestroyed))
|
||||
try
|
||||
M.Life()
|
||||
catch(var/exception/e)
|
||||
catchException(e, M)
|
||||
SCHECK
|
||||
else
|
||||
catchBadType(M)
|
||||
if (normal_exit)
|
||||
queue = mob_list.Copy()
|
||||
|
||||
normal_exit = FALSE
|
||||
|
||||
while (queue.len)
|
||||
var/mob/M = queue[queue.len]
|
||||
queue.len--
|
||||
|
||||
if (!M || M.gcDestroyed)
|
||||
mob_list -= M
|
||||
continue
|
||||
|
||||
M.Life()
|
||||
F_SCHECK
|
||||
|
||||
normal_exit = TRUE
|
||||
|
||||
/datum/controller/process/mob/statProcess()
|
||||
..()
|
||||
stat(null, "[mob_list.len] mobs")
|
||||
stat(null, "[mob_list.len] mobs, [queue.len] queued")
|
||||
|
||||
@@ -1,12 +1,35 @@
|
||||
/datum/controller/process/nanoui
|
||||
var/is_idle = TRUE
|
||||
var/list/queued_uis = list()
|
||||
|
||||
/datum/controller/process/nanoui/setup()
|
||||
name = "nanoui"
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
schedule_interval = 2 SECONDS
|
||||
|
||||
/datum/controller/process/nanoui/statProcess()
|
||||
..()
|
||||
stat(null, "[nanomanager.processing_uis.len] UIs")
|
||||
stat(null, "[nanomanager.processing_uis.len] UIs, [queued_uis.len] processing")
|
||||
|
||||
/datum/controller/process/nanoui/doWork()
|
||||
if (is_idle)
|
||||
queued_uis = nanomanager.processing_uis.Copy()
|
||||
is_idle = FALSE
|
||||
|
||||
while (queued_uis.len)
|
||||
var/datum/nanoui/UI = queued_uis[queued_uis.len]
|
||||
queued_uis.len--
|
||||
|
||||
if (!UI || UI.gcDestroyed)
|
||||
catchBadType(UI)
|
||||
nanomanager.processing_uis -= UI
|
||||
continue
|
||||
|
||||
UI.process()
|
||||
F_SCHECK
|
||||
|
||||
is_idle = TRUE
|
||||
|
||||
/*datum/controller/process/nanoui/doWork()
|
||||
for(last_object in nanomanager.processing_uis)
|
||||
var/datum/nanoui/NUI = last_object
|
||||
if(istype(NUI) && isnull(NUI.gcDestroyed))
|
||||
@@ -17,3 +40,4 @@
|
||||
else
|
||||
catchBadType(NUI)
|
||||
nanomanager.processing_uis -= NUI
|
||||
*/
|
||||
|
||||
@@ -54,14 +54,14 @@ var/datum/controller/process/night_lighting/nl_ctrl
|
||||
for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only))
|
||||
APC.toggle_nightlight("on")
|
||||
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
/datum/controller/process/night_lighting/proc/deactivate(var/whitelisted_only = 1)
|
||||
isactive = 0
|
||||
for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only))
|
||||
APC.toggle_nightlight("off")
|
||||
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
/datum/controller/process/night_lighting/proc/get_apc_list(var/whitelisted_only = 1)
|
||||
var/list/obj/machinery/power/apc/lighting_apcs = list()
|
||||
@@ -73,6 +73,6 @@ var/datum/controller/process/night_lighting/nl_ctrl
|
||||
if (B.apc && !B.apc.aidisabled)
|
||||
lighting_apcs += B.apc
|
||||
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
return lighting_apcs
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
/datum/controller/process/obj
|
||||
var/normal_exit = TRUE
|
||||
var/list/queue = list()
|
||||
|
||||
/datum/controller/process/obj/setup()
|
||||
name = "obj"
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
schedule_interval = 2 SECONDS
|
||||
start_delay = 8
|
||||
|
||||
/datum/controller/process/obj/started()
|
||||
@@ -9,18 +13,23 @@
|
||||
processing_objects = list()
|
||||
|
||||
/datum/controller/process/obj/doWork()
|
||||
for(last_object in processing_objects)
|
||||
var/datum/O = last_object
|
||||
if(isnull(O.gcDestroyed))
|
||||
try
|
||||
O:process()
|
||||
catch(var/exception/e)
|
||||
catchException(e, O)
|
||||
SCHECK
|
||||
else
|
||||
catchBadType(O)
|
||||
if (normal_exit)
|
||||
queue = processing_objects.Copy()
|
||||
normal_exit = FALSE
|
||||
|
||||
while (queue.len)
|
||||
var/datum/O = queue[queue.len]
|
||||
queue.len--
|
||||
|
||||
if (!O || O.gcDestroyed)
|
||||
processing_objects -= O
|
||||
continue
|
||||
|
||||
O:process()
|
||||
F_SCHECK
|
||||
|
||||
normal_exit = TRUE
|
||||
|
||||
/datum/controller/process/obj/statProcess()
|
||||
..()
|
||||
stat(null, "[processing_objects.len] objects")
|
||||
stat(null, "[processing_objects.len] objects, [queue.len] queued")
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
************/
|
||||
/datum/controller/process/scheduler
|
||||
var/list/scheduled_tasks
|
||||
var/tick_completed = TRUE
|
||||
var/list/queued_tasks
|
||||
|
||||
/datum/controller/process/scheduler/setup()
|
||||
name = "scheduler"
|
||||
@@ -13,21 +15,29 @@
|
||||
scheduler = src
|
||||
|
||||
/datum/controller/process/scheduler/doWork()
|
||||
for(last_object in scheduled_tasks)
|
||||
var/datum/scheduled_task/scheduled_task = last_object
|
||||
try
|
||||
if(world.time > scheduled_task.trigger_time)
|
||||
unschedule(scheduled_task)
|
||||
scheduled_task.pre_process()
|
||||
scheduled_task.process()
|
||||
scheduled_task.post_process()
|
||||
catch(var/exception/e)
|
||||
catchException(e, last_object)
|
||||
SCHECK
|
||||
if (tick_completed)
|
||||
queued_tasks = scheduled_tasks.Copy()
|
||||
tick_completed = FALSE
|
||||
|
||||
while (queued_tasks.len)
|
||||
var/datum/scheduled_task/task = queued_tasks[queued_tasks.len]
|
||||
queued_tasks.len--
|
||||
|
||||
if (world.time > task.trigger_time)
|
||||
unschedule(task)
|
||||
// why are these separated.
|
||||
task.pre_process()
|
||||
F_SCHECK // fuck it, it's a cheap call.
|
||||
task.process()
|
||||
F_SCHECK
|
||||
task.post_process()
|
||||
F_SCHECK
|
||||
|
||||
tick_completed = TRUE
|
||||
|
||||
/datum/controller/process/scheduler/statProcess()
|
||||
..()
|
||||
stat(null, "[scheduled_tasks.len] task\s")
|
||||
stat(null, "[scheduled_tasks.len] tasks, [queued_tasks.len] queued")
|
||||
|
||||
/datum/controller/process/scheduler/proc/schedule(var/datum/scheduled_task/st)
|
||||
scheduled_tasks += st
|
||||
|
||||
@@ -9,7 +9,7 @@ var/global/list/turf/processing_turfs = list()
|
||||
var/turf/T = last_object
|
||||
if(T.process() == PROCESS_KILL)
|
||||
processing_turfs.Remove(T)
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
/datum/controller/process/turf/statProcess()
|
||||
..()
|
||||
|
||||
@@ -69,4 +69,4 @@ var/datum/controller/process/wireless/wirelessProcess
|
||||
process_conections -= C
|
||||
if(!target_found)
|
||||
unsuccesful_connections += C
|
||||
SCHECK
|
||||
F_SCHECK
|
||||
|
||||
@@ -76,6 +76,14 @@ datum/controller/game_controller/proc/setup_objects()
|
||||
T.broadcast_status()
|
||||
|
||||
|
||||
admin_notice(span("danger", "Caching space parallax."))
|
||||
create_global_parallax_icons()
|
||||
admin_notice(span("danger", "Done."))
|
||||
|
||||
admin_notice(span("danger", "Setting up lighting."))
|
||||
initialize_lighting()
|
||||
admin_notice(span("danger", "Lighting Setup Completed."))
|
||||
|
||||
//Spawn the contents of the cargo warehouse
|
||||
sleep(-1)
|
||||
spawn_cargo_stock()
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
var/global/datum/news_controller/news_controller
|
||||
|
||||
/datum/news_controller
|
||||
var/count = 0 //Count of articles pulled and published
|
||||
var/publish_time //Ingame time for when the stored article is to be published
|
||||
var/article_id //Stored article's primary-key
|
||||
var/running = 1 //Boolean value, self-explanitory
|
||||
var/fails = 0 //Counter for failed queries
|
||||
var/max_fails = 5 //Maximum amount of failures before the controller is killed
|
||||
|
||||
/datum/news_controller/proc/process()
|
||||
if(!running) //Not running, return.
|
||||
return
|
||||
|
||||
if(fails >= max_fails) //Too many failures, killing.
|
||||
kill()
|
||||
return
|
||||
|
||||
if(!article_id && !publish_time) //No entry stored. Update and get one.
|
||||
update()
|
||||
return
|
||||
|
||||
if(publish_time < world.time) //Time to publish the article.
|
||||
publish()
|
||||
if(fails)
|
||||
fails = 0
|
||||
|
||||
//Stores a new article for publishing.
|
||||
/datum/news_controller/proc/update()
|
||||
establish_db_connection(dbcon)
|
||||
if(!dbcon.IsConnected())
|
||||
error("SQL database connection failed. News_controller failed to retreive information.")
|
||||
fails++
|
||||
return
|
||||
|
||||
var/DBQuery/update_query = dbcon.NewQuery("SELECT id, publishtime FROM ss13_news WHERE status = 2 ORDER BY publishtime ASC LIMIT :count, 1")
|
||||
update_query.Execute(list(":count" = count))
|
||||
|
||||
if(update_query.ErrorMsg())
|
||||
fails++
|
||||
return
|
||||
|
||||
if(!update_query.RowCount())
|
||||
kill()
|
||||
return
|
||||
|
||||
while(update_query.NextRow())
|
||||
article_id = text2num(update_query.item[1])
|
||||
publish_time = text2num(update_query.item[2]) * 600
|
||||
|
||||
count++
|
||||
|
||||
//Publish the stored article.
|
||||
/datum/news_controller/proc/publish()
|
||||
establish_db_connection(dbcon)
|
||||
if(!dbcon.IsConnected())
|
||||
error("SQL database connection failed. News_controller failed to retreive information.")
|
||||
fails++
|
||||
return
|
||||
|
||||
var/DBQuery/publish_query = dbcon.NewQuery("SELECT channel, author, body FROM ss13_news WHERE id = :article_id")
|
||||
publish_query.Execute(list(":article_id" = article_id))
|
||||
|
||||
if(publish_query.ErrorMsg())
|
||||
fails++
|
||||
return
|
||||
|
||||
var/article_channel
|
||||
var/article_author
|
||||
var/article_content
|
||||
while(publish_query.NextRow())
|
||||
article_channel = publish_query.item[1]
|
||||
article_author = publish_query.item[2]
|
||||
article_content = publish_query.item[3]
|
||||
|
||||
var/channel_found
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
if(FC.channel_name == article_channel)
|
||||
channel_found = 1
|
||||
break
|
||||
|
||||
if(!channel_found)
|
||||
news_network.CreateFeedChannel(article_channel, article_author, 0)
|
||||
|
||||
news_network.SubmitArticle(article_content, article_author, article_channel)
|
||||
|
||||
article_id = null
|
||||
publish_time = null
|
||||
update()
|
||||
|
||||
//Kills the controller.
|
||||
/datum/news_controller/proc/kill()
|
||||
running = 0
|
||||
return
|
||||
@@ -25,7 +25,7 @@
|
||||
usr.client.debug_variables(antag)
|
||||
message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.")
|
||||
|
||||
/client/proc/debug_controller(controller in list("Master","Ticker","Ticker Process","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano","Chemistry","Wireless","Observation"))
|
||||
/client/proc/debug_controller(controller in list("Master","Ticker","Ticker Process","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano","Chemistry","Wireless","Observation","Lighting","Explosives"))
|
||||
set category = "Debug"
|
||||
set name = "Debug Controller"
|
||||
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
|
||||
@@ -98,5 +98,11 @@
|
||||
if("Observation")
|
||||
debug_variables(all_observable_events)
|
||||
feedback_add_details("admin_verb", "DObservation")
|
||||
if("Lighting")
|
||||
debug_variables(lighting_process)
|
||||
feedback_add_details("admin_verb", "DLightingP")
|
||||
if("Explosives")
|
||||
debug_variables(bomb_processor)
|
||||
feedback_add_details("admin_verb", "DExplosives")
|
||||
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user