mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-11 10:22:13 +00:00
wew
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
#define MC_TICK_CHECK ( ( world.tick_usage > Master.current_ticklimit || src.state != SS_RUNNING ) ? pause() : 0 )
|
#define MC_TICK_CHECK ( ( TICK_USAGE > Master.current_ticklimit || src.state != SS_RUNNING ) ? pause() : 0 )
|
||||||
|
|
||||||
#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = Master.current_ticklimit; var/split_tick_phases = ##phase_count
|
#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = Master.current_ticklimit; var/split_tick_phases = ##phase_count
|
||||||
#define MC_SPLIT_TICK \
|
#define MC_SPLIT_TICK \
|
||||||
if(split_tick_phases > 1){\
|
if(split_tick_phases > 1){\
|
||||||
Master.current_ticklimit = ((original_tick_limit - world.tick_usage) / split_tick_phases) + world.tick_usage;\
|
Master.current_ticklimit = ((original_tick_limit - TICK_USAGE) / split_tick_phases) + TICK_USAGE;\
|
||||||
--split_tick_phases;\
|
--split_tick_phases;\
|
||||||
} else {\
|
} else {\
|
||||||
Master.current_ticklimit = original_tick_limit;\
|
Master.current_ticklimit = original_tick_limit;\
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
#define START_PROCESSING(Processor, Datum) if (!Datum.isprocessing) {Datum.isprocessing = TRUE;Processor.processing += Datum}
|
#define START_PROCESSING(Processor, Datum) if (!Datum.isprocessing) {Datum.isprocessing = TRUE;Processor.processing += Datum}
|
||||||
#define STOP_PROCESSING(Processor, Datum) Datum.isprocessing = FALSE;Processor.processing -= Datum
|
#define STOP_PROCESSING(Processor, Datum) Datum.isprocessing = FALSE;Processor.processing -= Datum
|
||||||
|
|
||||||
//SubSystem flags_1 (Please design any new flags_1 so that the default is off, to make adding flags_1 to subsystems easier)
|
//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier)
|
||||||
|
|
||||||
//subsystem does not initialize.
|
//subsystem does not initialize.
|
||||||
#define SS_NO_INIT 1
|
#define SS_NO_INIT 1
|
||||||
|
|||||||
10
code/__DEFINES/_tick.dm
Normal file
10
code/__DEFINES/_tick.dm
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#define TICK_LIMIT_RUNNING 80
|
||||||
|
#define TICK_LIMIT_TO_RUN 78
|
||||||
|
#define TICK_LIMIT_MC 70
|
||||||
|
#define TICK_LIMIT_MC_INIT_DEFAULT 98
|
||||||
|
|
||||||
|
#define TICK_USAGE world.tick_usage //for general usage
|
||||||
|
#define TICK_USAGE_REAL world.tick_usage //to be used where the result isn't checked
|
||||||
|
|
||||||
|
#define TICK_CHECK ( TICK_USAGE > Master.current_ticklimit )
|
||||||
|
#define CHECK_TICK if TICK_CHECK stoplag()
|
||||||
@@ -1,25 +1,25 @@
|
|||||||
#define PI 3.1415
|
#define PI 3.1415
|
||||||
#define SPEED_OF_LIGHT 3e8 //not exact but hey!
|
#define SPEED_OF_LIGHT 3e8 //not exact but hey!
|
||||||
#define SPEED_OF_LIGHT_SQ 9e+16
|
#define SPEED_OF_LIGHT_SQ 9e+16
|
||||||
#define INFINITY 1e31 //closer then enough
|
#define INFINITY 1e31 //closer then enough
|
||||||
|
|
||||||
//atmos
|
//atmos
|
||||||
#define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol)
|
#define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol)
|
||||||
#define ONE_ATMOSPHERE 101.325 //kPa
|
#define ONE_ATMOSPHERE 101.325 //kPa
|
||||||
#define T0C 273.15 // 0degC
|
#define T0C 273.15 // 0degC
|
||||||
#define T20C 293.15 // 20degC
|
#define T20C 293.15 // 20degC
|
||||||
#define TCMB 2.7 // -270.3degC
|
#define TCMB 2.7 // -270.3degC
|
||||||
|
|
||||||
//"fancy" math for calculating time in ms from tick_usage percentage and the length of ticks
|
//"fancy" math for calculating time in ms from tick_usage percentage and the length of ticks
|
||||||
//percent_of_tick_used * (ticklag * 100(to convert to ms)) / 100(percent ratio)
|
//percent_of_tick_used * (ticklag * 100(to convert to ms)) / 100(percent ratio)
|
||||||
//collapsed to percent_of_tick_used * tick_lag
|
//collapsed to percent_of_tick_used * tick_lag
|
||||||
#define TICK_DELTA_TO_MS(percent_of_tick_used) ((percent_of_tick_used) * world.tick_lag)
|
#define TICK_DELTA_TO_MS(percent_of_tick_used) ((percent_of_tick_used) * world.tick_lag)
|
||||||
#define TICK_USAGE_TO_MS(starting_tickusage) (TICK_DELTA_TO_MS(world.tick_usage-starting_tickusage))
|
#define TICK_USAGE_TO_MS(starting_tickusage) (TICK_DELTA_TO_MS(TICK_USAGE_REAL - starting_tickusage))
|
||||||
|
|
||||||
#define PERCENT(val) (round(val*100, 0.1))
|
#define PERCENT(val) (round(val*100, 0.1))
|
||||||
#define CLAMP01(x) (Clamp(x, 0, 1))
|
#define CLAMP01(x) (Clamp(x, 0, 1))
|
||||||
|
|
||||||
//time of day but automatically adjusts to the server going into the next day within the same round.
|
//time of day but automatically adjusts to the server going into the next day within the same round.
|
||||||
//for when you need a reliable time number that doesn't depend on byond time.
|
//for when you need a reliable time number that doesn't depend on byond time.
|
||||||
#define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK))
|
#define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK))
|
||||||
#define MIDNIGHT_ROLLOVER_CHECK ( GLOB.rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : GLOB.midnight_rollovers )
|
#define MIDNIGHT_ROLLOVER_CHECK ( GLOB.rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : GLOB.midnight_rollovers )
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
#define TICK_LIMIT_RUNNING 80
|
|
||||||
#define TICK_LIMIT_TO_RUN 78
|
|
||||||
#define TICK_LIMIT_MC 70
|
|
||||||
#define TICK_LIMIT_MC_INIT_DEFAULT 98
|
|
||||||
|
|
||||||
#define TICK_CHECK ( world.tick_usage > Master.current_ticklimit )
|
|
||||||
#define CHECK_TICK if TICK_CHECK stoplag()
|
|
||||||
@@ -357,6 +357,17 @@ Turf and target are separate in case you want to teleport some distance from a t
|
|||||||
var/M = E/(SPEED_OF_LIGHT_SQ)
|
var/M = E/(SPEED_OF_LIGHT_SQ)
|
||||||
return M
|
return M
|
||||||
|
|
||||||
|
//Takes the value of energy used/produced/ect.
|
||||||
|
//Returns a text value of that number in W, kW, MW, or GW.
|
||||||
|
/proc/DisplayPower(var/powerused)
|
||||||
|
if(powerused < 1000) //Less than a kW
|
||||||
|
return "[powerused] W"
|
||||||
|
else if(powerused < 1000000) //Less than a MW
|
||||||
|
return "[round((powerused * 0.001),0.01)] kW"
|
||||||
|
else if(powerused < 1000000000) //Less than a GW
|
||||||
|
return "[round((powerused * 0.000001),0.001)] MW"
|
||||||
|
return "[round((powerused * 0.000000001),0.0001)] GW"
|
||||||
|
|
||||||
/proc/key_name(whom, include_link = null, include_name = 1)
|
/proc/key_name(whom, include_link = null, include_name = 1)
|
||||||
var/mob/M
|
var/mob/M
|
||||||
var/client/C
|
var/client/C
|
||||||
@@ -1230,7 +1241,7 @@ proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
|
|||||||
|
|
||||||
//Increases delay as the server gets more overloaded,
|
//Increases delay as the server gets more overloaded,
|
||||||
//as sleeps aren't cheap and sleeping only to wake up and sleep again is wasteful
|
//as sleeps aren't cheap and sleeping only to wake up and sleep again is wasteful
|
||||||
#define DELTA_CALC max(((max(world.tick_usage, world.cpu) / 100) * max(Master.sleep_delta,1)), 1)
|
#define DELTA_CALC max(((max(TICK_USAGE, world.cpu) / 100) * max(Master.sleep_delta,1)), 1)
|
||||||
|
|
||||||
/proc/stoplag()
|
/proc/stoplag()
|
||||||
if (!Master || !(Master.current_runlevel & RUNLEVELS_DEFAULT))
|
if (!Master || !(Master.current_runlevel & RUNLEVELS_DEFAULT))
|
||||||
@@ -1242,7 +1253,7 @@ proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
|
|||||||
. += round(i*DELTA_CALC)
|
. += round(i*DELTA_CALC)
|
||||||
sleep(i*world.tick_lag*DELTA_CALC)
|
sleep(i*world.tick_lag*DELTA_CALC)
|
||||||
i *= 2
|
i *= 2
|
||||||
while (world.tick_usage > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit))
|
while (TICK_USAGE > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit))
|
||||||
|
|
||||||
#undef DELTA_CALC
|
#undef DELTA_CALC
|
||||||
|
|
||||||
@@ -1266,6 +1277,7 @@ proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
|
|||||||
#define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255)))
|
#define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255)))
|
||||||
|
|
||||||
#define QDEL_IN(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE)
|
#define QDEL_IN(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE)
|
||||||
|
#define QDEL_IN_CLIENT_TIME(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE | TIMER_CLIENT_TIME)
|
||||||
#define QDEL_NULL(item) qdel(item); item = null
|
#define QDEL_NULL(item) qdel(item); item = null
|
||||||
#define QDEL_LIST(L) if(L) { for(var/I in L) qdel(I); L.Cut(); }
|
#define QDEL_LIST(L) if(L) { for(var/I in L) qdel(I); L.Cut(); }
|
||||||
#define QDEL_LIST_IN(L, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/______qdel_list_wrapper, L), time, TIMER_STOPPABLE)
|
#define QDEL_LIST_IN(L, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/______qdel_list_wrapper, L), time, TIMER_STOPPABLE)
|
||||||
@@ -1453,3 +1465,7 @@ GLOBAL_PROTECT(valid_HTTPSGet)
|
|||||||
var/temp = bitfield - ((bitfield>>1)&46811) - ((bitfield>>2)&37449) //0133333 and 0111111 respectively
|
var/temp = bitfield - ((bitfield>>1)&46811) - ((bitfield>>2)&37449) //0133333 and 0111111 respectively
|
||||||
temp = ((temp + (temp>>3))&29127) % 63 //070707
|
temp = ((temp + (temp>>3))&29127) % 63 //070707
|
||||||
return temp
|
return temp
|
||||||
|
|
||||||
|
//checks if a turf is in the planet z list.
|
||||||
|
/proc/turf_z_is_planet(turf/T)
|
||||||
|
return GLOB.z_is_planet["[T.z]"]
|
||||||
|
|||||||
@@ -53,20 +53,24 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
var/static/restart_clear = 0
|
var/static/restart_clear = 0
|
||||||
var/static/restart_timeout = 0
|
var/static/restart_timeout = 0
|
||||||
var/static/restart_count = 0
|
var/static/restart_count = 0
|
||||||
|
|
||||||
//current tick limit, assigned before running a subsystem.
|
//current tick limit, assigned before running a subsystem.
|
||||||
//used by CHECK_TICK as well so that the procs subsystems call can obey that SS's tick limits
|
//used by CHECK_TICK as well so that the procs subsystems call can obey that SS's tick limits
|
||||||
var/static/current_ticklimit = TICK_LIMIT_RUNNING
|
var/static/current_ticklimit = TICK_LIMIT_RUNNING
|
||||||
|
|
||||||
/datum/controller/master/New()
|
/datum/controller/master/New()
|
||||||
// Highlander-style: there can only be one! Kill off the old and replace it with the new.
|
// Highlander-style: there can only be one! Kill off the old and replace it with the new.
|
||||||
subsystems = list()
|
var/list/_subsystems = list()
|
||||||
|
subsystems = _subsystems
|
||||||
if (Master != src)
|
if (Master != src)
|
||||||
if (istype(Master))
|
if (istype(Master))
|
||||||
Recover()
|
Recover()
|
||||||
qdel(Master)
|
qdel(Master)
|
||||||
else
|
else
|
||||||
init_subtypes(/datum/controller/subsystem, subsystems)
|
var/list/subsytem_types = subtypesof(/datum/controller/subsystem)
|
||||||
|
sortTim(subsytem_types, /proc/cmp_subsystem_init)
|
||||||
|
for(var/I in subsytem_types)
|
||||||
|
_subsystems += new I
|
||||||
Master = src
|
Master = src
|
||||||
|
|
||||||
if(!GLOB)
|
if(!GLOB)
|
||||||
@@ -131,7 +135,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
FireHim = TRUE
|
FireHim = TRUE
|
||||||
if(3)
|
if(3)
|
||||||
msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined."
|
msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined."
|
||||||
BadBoy.flags_1 |= SS_NO_FIRE
|
BadBoy.flags |= SS_NO_FIRE
|
||||||
if(msg)
|
if(msg)
|
||||||
to_chat(GLOB.admins, "<span class='boldannounce'>[msg]</span>")
|
to_chat(GLOB.admins, "<span class='boldannounce'>[msg]</span>")
|
||||||
log_world(msg)
|
log_world(msg)
|
||||||
@@ -167,7 +171,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
// Initialize subsystems.
|
// Initialize subsystems.
|
||||||
current_ticklimit = config.tick_limit_mc_init
|
current_ticklimit = config.tick_limit_mc_init
|
||||||
for (var/datum/controller/subsystem/SS in subsystems)
|
for (var/datum/controller/subsystem/SS in subsystems)
|
||||||
if (SS.flags_1 & SS_NO_INIT)
|
if (SS.flags & SS_NO_INIT)
|
||||||
continue
|
continue
|
||||||
SS.Initialize(REALTIMEOFDAY)
|
SS.Initialize(REALTIMEOFDAY)
|
||||||
CHECK_TICK
|
CHECK_TICK
|
||||||
@@ -232,13 +236,13 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
var/timer = world.time
|
var/timer = world.time
|
||||||
for (var/thing in subsystems)
|
for (var/thing in subsystems)
|
||||||
var/datum/controller/subsystem/SS = thing
|
var/datum/controller/subsystem/SS = thing
|
||||||
if (SS.flags_1 & SS_NO_FIRE)
|
if (SS.flags & SS_NO_FIRE)
|
||||||
continue
|
continue
|
||||||
SS.queued_time = 0
|
SS.queued_time = 0
|
||||||
SS.queue_next = null
|
SS.queue_next = null
|
||||||
SS.queue_prev = null
|
SS.queue_prev = null
|
||||||
SS.state = SS_IDLE
|
SS.state = SS_IDLE
|
||||||
if (SS.flags_1 & SS_TICKER)
|
if (SS.flags & SS_TICKER)
|
||||||
tickersubsystems += SS
|
tickersubsystems += SS
|
||||||
timer += world.tick_lag * rand(1, 5)
|
timer += world.tick_lag * rand(1, 5)
|
||||||
SS.next_fire = timer
|
SS.next_fire = timer
|
||||||
@@ -284,7 +288,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
|
|
||||||
//if there are mutiple sleeping procs running before us hogging the cpu, we have to run later
|
//if there are mutiple sleeping procs running before us hogging the cpu, we have to run later
|
||||||
// because sleeps are processed in the order received, so longer sleeps are more likely to run first
|
// because sleeps are processed in the order received, so longer sleeps are more likely to run first
|
||||||
if (world.tick_usage > TICK_LIMIT_MC)
|
if (TICK_USAGE > TICK_LIMIT_MC)
|
||||||
sleep_delta += 2
|
sleep_delta += 2
|
||||||
current_ticklimit = TICK_LIMIT_RUNNING * 0.5
|
current_ticklimit = TICK_LIMIT_RUNNING * 0.5
|
||||||
sleep(world.tick_lag * (processing + sleep_delta))
|
sleep(world.tick_lag * (processing + sleep_delta))
|
||||||
@@ -293,7 +297,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
sleep_delta = MC_AVERAGE_FAST(sleep_delta, 0)
|
sleep_delta = MC_AVERAGE_FAST(sleep_delta, 0)
|
||||||
if (last_run + (world.tick_lag * processing) > world.time)
|
if (last_run + (world.tick_lag * processing) > world.time)
|
||||||
sleep_delta += 1
|
sleep_delta += 1
|
||||||
if (world.tick_usage > (TICK_LIMIT_MC*0.5))
|
if (TICK_USAGE > (TICK_LIMIT_MC*0.5))
|
||||||
sleep_delta += 1
|
sleep_delta += 1
|
||||||
|
|
||||||
if (make_runtime)
|
if (make_runtime)
|
||||||
@@ -371,7 +375,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
continue
|
continue
|
||||||
if (SS.next_fire > world.time)
|
if (SS.next_fire > world.time)
|
||||||
continue
|
continue
|
||||||
SS_flags = SS.flags_1
|
SS_flags = SS.flags
|
||||||
if (SS_flags & SS_NO_FIRE)
|
if (SS_flags & SS_NO_FIRE)
|
||||||
subsystemstocheck -= SS
|
subsystemstocheck -= SS
|
||||||
continue
|
continue
|
||||||
@@ -399,16 +403,16 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
|
|
||||||
//keep running while we have stuff to run and we haven't gone over a tick
|
//keep running while we have stuff to run and we haven't gone over a tick
|
||||||
// this is so subsystems paused eariler can use tick time that later subsystems never used
|
// this is so subsystems paused eariler can use tick time that later subsystems never used
|
||||||
while (ran && queue_head && world.tick_usage < TICK_LIMIT_MC)
|
while (ran && queue_head && TICK_USAGE < TICK_LIMIT_MC)
|
||||||
ran = FALSE
|
ran = FALSE
|
||||||
bg_calc = FALSE
|
bg_calc = FALSE
|
||||||
current_tick_budget = queue_priority_count
|
current_tick_budget = queue_priority_count
|
||||||
queue_node = queue_head
|
queue_node = queue_head
|
||||||
while (queue_node)
|
while (queue_node)
|
||||||
if (ran && world.tick_usage > TICK_LIMIT_RUNNING)
|
if (ran && TICK_USAGE > TICK_LIMIT_RUNNING)
|
||||||
break
|
break
|
||||||
|
|
||||||
queue_node_flags = queue_node.flags_1
|
queue_node_flags = queue_node.flags
|
||||||
queue_node_priority = queue_node.queued_priority
|
queue_node_priority = queue_node.queued_priority
|
||||||
|
|
||||||
//super special case, subsystems where we can't make them pause mid way through
|
//super special case, subsystems where we can't make them pause mid way through
|
||||||
@@ -417,7 +421,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
//(unless we haven't even ran anything this tick, since its unlikely they will ever be able run
|
//(unless we haven't even ran anything this tick, since its unlikely they will ever be able run
|
||||||
// in those cases, so we just let them run)
|
// in those cases, so we just let them run)
|
||||||
if (queue_node_flags & SS_NO_TICK_CHECK)
|
if (queue_node_flags & SS_NO_TICK_CHECK)
|
||||||
if (queue_node.tick_usage > TICK_LIMIT_RUNNING - world.tick_usage && ran_non_ticker)
|
if (queue_node.tick_usage > TICK_LIMIT_RUNNING - TICK_USAGE && ran_non_ticker)
|
||||||
queue_node.queued_priority += queue_priority_count * 0.10
|
queue_node.queued_priority += queue_priority_count * 0.10
|
||||||
queue_priority_count -= queue_node_priority
|
queue_priority_count -= queue_node_priority
|
||||||
queue_priority_count += queue_node.queued_priority
|
queue_priority_count += queue_node.queued_priority
|
||||||
@@ -429,7 +433,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
current_tick_budget = queue_priority_count_bg
|
current_tick_budget = queue_priority_count_bg
|
||||||
bg_calc = TRUE
|
bg_calc = TRUE
|
||||||
|
|
||||||
tick_remaining = TICK_LIMIT_RUNNING - world.tick_usage
|
tick_remaining = TICK_LIMIT_RUNNING - TICK_USAGE
|
||||||
|
|
||||||
if (current_tick_budget > 0 && queue_node_priority > 0)
|
if (current_tick_budget > 0 && queue_node_priority > 0)
|
||||||
tick_precentage = tick_remaining / (current_tick_budget / queue_node_priority)
|
tick_precentage = tick_remaining / (current_tick_budget / queue_node_priority)
|
||||||
@@ -438,7 +442,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
|
|
||||||
tick_precentage = max(tick_precentage*0.5, tick_precentage-queue_node.tick_overrun)
|
tick_precentage = max(tick_precentage*0.5, tick_precentage-queue_node.tick_overrun)
|
||||||
|
|
||||||
current_ticklimit = round(world.tick_usage + tick_precentage)
|
current_ticklimit = round(TICK_USAGE + tick_precentage)
|
||||||
|
|
||||||
if (!(queue_node_flags & SS_TICKER))
|
if (!(queue_node_flags & SS_TICKER))
|
||||||
ran_non_ticker = TRUE
|
ran_non_ticker = TRUE
|
||||||
@@ -449,9 +453,9 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
|||||||
|
|
||||||
queue_node.state = SS_RUNNING
|
queue_node.state = SS_RUNNING
|
||||||
|
|
||||||
tick_usage = world.tick_usage
|
tick_usage = TICK_USAGE
|
||||||
var/state = queue_node.ignite(queue_node_paused)
|
var/state = queue_node.ignite(queue_node_paused)
|
||||||
tick_usage = world.tick_usage - tick_usage
|
tick_usage = TICK_USAGE - tick_usage
|
||||||
|
|
||||||
if (state == SS_RUNNING)
|
if (state == SS_RUNNING)
|
||||||
state = SS_IDLE
|
state = SS_IDLE
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ SUBSYSTEM_DEF(air)
|
|||||||
init_order = INIT_ORDER_AIR
|
init_order = INIT_ORDER_AIR
|
||||||
priority = 20
|
priority = 20
|
||||||
wait = 5
|
wait = 5
|
||||||
flags_1 = SS_BACKGROUND
|
flags = SS_BACKGROUND
|
||||||
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
|
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
|
||||||
|
|
||||||
var/cost_turfs = 0
|
var/cost_turfs = 0
|
||||||
@@ -71,65 +71,65 @@ SUBSYSTEM_DEF(air)
|
|||||||
|
|
||||||
|
|
||||||
/datum/controller/subsystem/air/fire(resumed = 0)
|
/datum/controller/subsystem/air/fire(resumed = 0)
|
||||||
var/timer = world.tick_usage
|
var/timer = TICK_USAGE_REAL
|
||||||
|
|
||||||
if(currentpart == SSAIR_PIPENETS || !resumed)
|
if(currentpart == SSAIR_PIPENETS || !resumed)
|
||||||
process_pipenets(resumed)
|
process_pipenets(resumed)
|
||||||
cost_pipenets = MC_AVERAGE(cost_pipenets, TICK_DELTA_TO_MS(world.tick_usage - timer))
|
cost_pipenets = MC_AVERAGE(cost_pipenets, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||||
if(state != SS_RUNNING)
|
if(state != SS_RUNNING)
|
||||||
return
|
return
|
||||||
resumed = 0
|
resumed = 0
|
||||||
currentpart = SSAIR_ATMOSMACHINERY
|
currentpart = SSAIR_ATMOSMACHINERY
|
||||||
|
|
||||||
if(currentpart == SSAIR_ATMOSMACHINERY)
|
if(currentpart == SSAIR_ATMOSMACHINERY)
|
||||||
timer = world.tick_usage
|
timer = TICK_USAGE_REAL
|
||||||
process_atmos_machinery(resumed)
|
process_atmos_machinery(resumed)
|
||||||
cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(world.tick_usage - timer))
|
cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||||
if(state != SS_RUNNING)
|
if(state != SS_RUNNING)
|
||||||
return
|
return
|
||||||
resumed = 0
|
resumed = 0
|
||||||
currentpart = SSAIR_ACTIVETURFS
|
currentpart = SSAIR_ACTIVETURFS
|
||||||
|
|
||||||
if(currentpart == SSAIR_ACTIVETURFS)
|
if(currentpart == SSAIR_ACTIVETURFS)
|
||||||
timer = world.tick_usage
|
timer = TICK_USAGE_REAL
|
||||||
process_active_turfs(resumed)
|
process_active_turfs(resumed)
|
||||||
cost_turfs = MC_AVERAGE(cost_turfs, TICK_DELTA_TO_MS(world.tick_usage - timer))
|
cost_turfs = MC_AVERAGE(cost_turfs, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||||
if(state != SS_RUNNING)
|
if(state != SS_RUNNING)
|
||||||
return
|
return
|
||||||
resumed = 0
|
resumed = 0
|
||||||
currentpart = SSAIR_EXCITEDGROUPS
|
currentpart = SSAIR_EXCITEDGROUPS
|
||||||
|
|
||||||
if(currentpart == SSAIR_EXCITEDGROUPS)
|
if(currentpart == SSAIR_EXCITEDGROUPS)
|
||||||
timer = world.tick_usage
|
timer = TICK_USAGE_REAL
|
||||||
process_excited_groups(resumed)
|
process_excited_groups(resumed)
|
||||||
cost_groups = MC_AVERAGE(cost_groups, TICK_DELTA_TO_MS(world.tick_usage - timer))
|
cost_groups = MC_AVERAGE(cost_groups, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||||
if(state != SS_RUNNING)
|
if(state != SS_RUNNING)
|
||||||
return
|
return
|
||||||
resumed = 0
|
resumed = 0
|
||||||
currentpart = SSAIR_HIGHPRESSURE
|
currentpart = SSAIR_HIGHPRESSURE
|
||||||
|
|
||||||
if(currentpart == SSAIR_HIGHPRESSURE)
|
if(currentpart == SSAIR_HIGHPRESSURE)
|
||||||
timer = world.tick_usage
|
timer = TICK_USAGE_REAL
|
||||||
process_high_pressure_delta(resumed)
|
process_high_pressure_delta(resumed)
|
||||||
cost_highpressure = MC_AVERAGE(cost_highpressure, TICK_DELTA_TO_MS(world.tick_usage - timer))
|
cost_highpressure = MC_AVERAGE(cost_highpressure, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||||
if(state != SS_RUNNING)
|
if(state != SS_RUNNING)
|
||||||
return
|
return
|
||||||
resumed = 0
|
resumed = 0
|
||||||
currentpart = SSAIR_HOTSPOTS
|
currentpart = SSAIR_HOTSPOTS
|
||||||
|
|
||||||
if(currentpart == SSAIR_HOTSPOTS)
|
if(currentpart == SSAIR_HOTSPOTS)
|
||||||
timer = world.tick_usage
|
timer = TICK_USAGE_REAL
|
||||||
process_hotspots(resumed)
|
process_hotspots(resumed)
|
||||||
cost_hotspots = MC_AVERAGE(cost_hotspots, TICK_DELTA_TO_MS(world.tick_usage - timer))
|
cost_hotspots = MC_AVERAGE(cost_hotspots, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||||
if(state != SS_RUNNING)
|
if(state != SS_RUNNING)
|
||||||
return
|
return
|
||||||
resumed = 0
|
resumed = 0
|
||||||
currentpart = SSAIR_SUPERCONDUCTIVITY
|
currentpart = SSAIR_SUPERCONDUCTIVITY
|
||||||
|
|
||||||
if(currentpart == SSAIR_SUPERCONDUCTIVITY)
|
if(currentpart == SSAIR_SUPERCONDUCTIVITY)
|
||||||
timer = world.tick_usage
|
timer = TICK_USAGE_REAL
|
||||||
process_super_conductivity(resumed)
|
process_super_conductivity(resumed)
|
||||||
cost_superconductivity = MC_AVERAGE(cost_superconductivity, TICK_DELTA_TO_MS(world.tick_usage - timer))
|
cost_superconductivity = MC_AVERAGE(cost_superconductivity, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||||
if(state != SS_RUNNING)
|
if(state != SS_RUNNING)
|
||||||
return
|
return
|
||||||
resumed = 0
|
resumed = 0
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ SUBSYSTEM_DEF(garbage)
|
|||||||
name = "Garbage"
|
name = "Garbage"
|
||||||
priority = 15
|
priority = 15
|
||||||
wait = 20
|
wait = 20
|
||||||
flags_1 = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT
|
flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT
|
||||||
runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
|
runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
|
||||||
|
|
||||||
var/collection_timeout = 3000// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object
|
var/collection_timeout = 3000// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object
|
||||||
@@ -67,9 +67,9 @@ SUBSYSTEM_DEF(garbage)
|
|||||||
HandleToBeQueued()
|
HandleToBeQueued()
|
||||||
if(state == SS_RUNNING)
|
if(state == SS_RUNNING)
|
||||||
HandleQueue()
|
HandleQueue()
|
||||||
|
|
||||||
if (state == SS_PAUSED) //make us wait again before the next run.
|
if (state == SS_PAUSED) //make us wait again before the next run.
|
||||||
state = SS_RUNNING
|
state = SS_RUNNING
|
||||||
|
|
||||||
//If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond.
|
//If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond.
|
||||||
//Don't attempt to optimize, not worth the effort.
|
//Don't attempt to optimize, not worth the effort.
|
||||||
@@ -114,7 +114,7 @@ SUBSYSTEM_DEF(garbage)
|
|||||||
var/type = A.type
|
var/type = A.type
|
||||||
testing("GC: -- \ref[A] | [type] was unable to be GC'd and was deleted --")
|
testing("GC: -- \ref[A] | [type] was unable to be GC'd and was deleted --")
|
||||||
didntgc["[type]"]++
|
didntgc["[type]"]++
|
||||||
|
|
||||||
HardDelete(A)
|
HardDelete(A)
|
||||||
|
|
||||||
++delslasttick
|
++delslasttick
|
||||||
@@ -147,15 +147,15 @@ SUBSYSTEM_DEF(garbage)
|
|||||||
//this is purely to separate things profile wise.
|
//this is purely to separate things profile wise.
|
||||||
/datum/controller/subsystem/garbage/proc/HardDelete(datum/A)
|
/datum/controller/subsystem/garbage/proc/HardDelete(datum/A)
|
||||||
var/time = world.timeofday
|
var/time = world.timeofday
|
||||||
var/tick = world.tick_usage
|
var/tick = TICK_USAGE
|
||||||
var/ticktime = world.time
|
var/ticktime = world.time
|
||||||
|
|
||||||
var/type = A.type
|
var/type = A.type
|
||||||
var/refID = "\ref[A]"
|
var/refID = "\ref[A]"
|
||||||
|
|
||||||
del(A)
|
del(A)
|
||||||
|
|
||||||
tick = (world.tick_usage-tick+((world.time-ticktime)/world.tick_lag*100))
|
tick = (TICK_USAGE-tick+((world.time-ticktime)/world.tick_lag*100))
|
||||||
if (tick > highest_del_tickusage)
|
if (tick > highest_del_tickusage)
|
||||||
highest_del_tickusage = tick
|
highest_del_tickusage = tick
|
||||||
time = world.timeofday - time
|
time = world.timeofday - time
|
||||||
@@ -167,7 +167,7 @@ SUBSYSTEM_DEF(garbage)
|
|||||||
log_game("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete)")
|
log_game("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete)")
|
||||||
message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete).")
|
message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete).")
|
||||||
postpone(time/5)
|
postpone(time/5)
|
||||||
|
|
||||||
/datum/controller/subsystem/garbage/proc/HardQueue(datum/A)
|
/datum/controller/subsystem/garbage/proc/HardQueue(datum/A)
|
||||||
if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
|
if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
|
||||||
tobequeued += A
|
tobequeued += A
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
SUBSYSTEM_DEF(server_maint)
|
SUBSYSTEM_DEF(server_maint)
|
||||||
name = "Server Tasks"
|
name = "Server Tasks"
|
||||||
wait = 6
|
wait = 6
|
||||||
flags_1 = SS_POST_FIRE_TIMING
|
flags = SS_POST_FIRE_TIMING
|
||||||
priority = 10
|
priority = 10
|
||||||
init_order = INIT_ORDER_SERVER_MAINT
|
init_order = INIT_ORDER_SERVER_MAINT
|
||||||
runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
|
runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
|
||||||
@@ -33,7 +33,7 @@ SUBSYSTEM_DEF(server_maint)
|
|||||||
qdel(C)
|
qdel(C)
|
||||||
|
|
||||||
if (!(!C || world.time - C.connection_time < PING_BUFFER_TIME || C.inactivity >= (wait-1)))
|
if (!(!C || world.time - C.connection_time < PING_BUFFER_TIME || C.inactivity >= (wait-1)))
|
||||||
winset(C, null, "command=.update_ping+[world.time+world.tick_lag*world.tick_usage/100]")
|
winset(C, null, "command=.update_ping+[world.time+world.tick_lag*TICK_USAGE_REAL/100]")
|
||||||
|
|
||||||
if (MC_TICK_CHECK) //one day, when ss13 has 1000 people per server, you guys are gonna be glad I added this tick check
|
if (MC_TICK_CHECK) //one day, when ss13 has 1000 people per server, you guys are gonna be glad I added this tick check
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
avgping = MC_AVERAGE_SLOW(avgping, ping)
|
avgping = MC_AVERAGE_SLOW(avgping, ping)
|
||||||
|
|
||||||
/client/proc/pingfromtime(time)
|
/client/proc/pingfromtime(time)
|
||||||
return ((world.time+world.tick_lag*world.tick_usage/100)-time)*100
|
return ((world.time+world.tick_lag*TICK_USAGE_REAL/100)-time)*100
|
||||||
|
|
||||||
/client/verb/display_ping(time as num)
|
/client/verb/display_ping(time as num)
|
||||||
set instant = TRUE
|
set instant = TRUE
|
||||||
@@ -19,4 +19,4 @@
|
|||||||
/client/verb/ping()
|
/client/verb/ping()
|
||||||
set name = "Ping"
|
set name = "Ping"
|
||||||
set category = "OOC"
|
set category = "OOC"
|
||||||
winset(src, null, "command=.display_ping+[world.time+world.tick_lag*world.tick_usage/100]")
|
winset(src, null, "command=.display_ping+[world.time+world.tick_lag*TICK_USAGE_REAL/100]")
|
||||||
Reference in New Issue
Block a user