Remove spawn in favour of timers (#50562)

* Remove spawn in favour of timers

* aaaaaa

* Qdels

Co-Authored-By: Rohesie <rohesie@gmail.com>

Co-authored-by: Rohesie <rohesie@gmail.com>
This commit is contained in:
spookydonut
2020-04-27 02:15:36 -03:00
committed by GitHub
co-authored by Rohesie
parent eb90d1e20b
commit d18dbc8226
11 changed files with 197 additions and 158 deletions
+10 -8
View File
@@ -90,16 +90,18 @@
say("Processing hub calibration to target...")
calibrating = TRUE
power_station.update_icon()
spawn(50 * (3 - power_station.teleporter_hub.accuracy)) //Better parts mean faster calibration
calibrating = FALSE
if(check_hub_connection())
power_station.teleporter_hub.calibrated = TRUE
say("Calibration complete.")
else
say("Error: Unable to detect hub.")
power_station.update_icon()
addtimer(CALLBACK(src, .proc/finish_calibration), 50 * (3 - power_station.teleporter_hub.accuracy)) //Better parts mean faster calibration
. = TRUE
/obj/machinery/computer/teleporter/proc/finish_calibration()
calibrating = FALSE
if(check_hub_connection())
power_station.teleporter_hub.calibrated = TRUE
say("Calibration complete.")
else
say("Error: Unable to detect hub.")
power_station.update_icon()
/obj/machinery/computer/teleporter/proc/check_hub_connection()
if(!power_station)
return FALSE
@@ -348,9 +348,8 @@
hacking = TRUE
screen = MSG_MON_SCREEN_HACKED
//Time it takes to bruteforce is dependant on the password length.
spawn(100*length(linkedServer.decryptkey))
if(src && linkedServer && usr)
BruteForce(usr)
addtimer(CALLBACK(src, .proc/finish_bruteforce, usr), 100*length(linkedServer.decryptkey))
//Delete the log.
if (href_list["delete_logs"])
//Are they on the view logs screen?
@@ -444,6 +443,13 @@
return attack_hand(usr)
/obj/machinery/computer/message_monitor/proc/finish_bruteforce(mob/user)
if(!QDELETED(user))
BruteForce(user)
return
hacking = FALSE
screen = MSG_MON_SCREEN_MAIN
#undef MSG_MON_SCREEN_MAIN
#undef MSG_MON_SCREEN_LOGS
#undef MSG_MON_SCREEN_HACKED
+31 -27
View File
@@ -148,6 +148,36 @@
else
..()
/obj/structure/spider/spiderling/proc/cancel_vent_move()
forceMove(entry_vent)
entry_vent = null
/obj/structure/spider/spiderling/proc/vent_move(obj/machinery/atmospherics/components/unary/vent_pump/exit_vent)
if(QDELETED(exit_vent) || exit_vent.welded)
cancel_vent_move()
return
forceMove(exit_vent)
var/travel_time = round(get_dist(loc, exit_vent.loc) / 2)
addtimer(CALLBACK(src, .proc/do_vent_move, exit_vent, travel_time), travel_time)
/obj/structure/spider/spiderling/proc/do_vent_move(obj/machinery/atmospherics/components/unary/vent_pump/exit_vent, travel_time)
if(QDELETED(exit_vent) || exit_vent.welded)
cancel_vent_move()
return
if(prob(50))
audible_message("<span class='hear'>You hear something scampering through the ventilation ducts.</span>")
addtimer(CALLBACK(src, .proc/finish_vent_move, exit_vent), travel_time)
/obj/structure/spider/spiderling/proc/finish_vent_move(obj/machinery/atmospherics/components/unary/vent_pump/exit_vent)
if(QDELETED(exit_vent) || exit_vent.welded)
cancel_vent_move()
return
forceMove(exit_vent.loc)
entry_vent = null
/obj/structure/spider/spiderling/process()
if(travelling_in_vent)
if(isturf(loc))
@@ -167,34 +197,8 @@
visible_message("<B>[src] scrambles into the ventilation ducts!</B>", \
"<span class='hear'>You hear something scampering through the ventilation ducts.</span>")
spawn(rand(20,60))
if(!exit_vent || exit_vent.welded)
forceMove(entry_vent)
entry_vent = null
return
addtimer(CALLBACK(src, .proc/vent_move, exit_vent), rand(20,60))
forceMove(exit_vent)
var/travel_time = round(get_dist(loc, exit_vent.loc) / 2)
spawn(travel_time)
if(!exit_vent || exit_vent.welded)
forceMove(entry_vent)
entry_vent = null
return
if(prob(50))
audible_message("<span class='hear'>You hear something scampering through the ventilation ducts.</span>")
sleep(travel_time)
if(!exit_vent || exit_vent.welded)
forceMove(entry_vent)
entry_vent = null
return
forceMove(exit_vent.loc)
entry_vent = null
var/area/new_area = get_area(loc)
if(new_area)
new_area.Entered(src)
//=================
else if(prob(33))
+5 -3
View File
@@ -1081,9 +1081,11 @@ GLOBAL_LIST_EMPTY(PDAs)
for(var/atom/A in src)
A.emp_act(severity)
if (!(. & EMP_PROTECT_SELF))
emped += 1
spawn(200 * severity)
emped -= 1
emped++
addtimer(CALLBACK(src, .proc/emp_end), 200 * severity)
/obj/item/pda/proc/emp_end()
emped--
/proc/get_viewable_pdas(sort_by_job = FALSE)
. = list()
@@ -88,20 +88,19 @@ effective or pretty fucking useless.
var/cooldown = get_cooldown()
used = TRUE
icon_state = "health1"
handle_cooldown(cooldown) // splits off to handle the cooldown while handling wavelength
addtimer(VARSET_CALLBACK(src, used, FALSE), cooldown)
addtimer(VARSET_CALLBACK(src, icon_state, "health"), cooldown)
to_chat(user, "<span class='warning'>Successfully irradiated [M].</span>")
spawn((wavelength+(intensity*4))*5)
if(M)
if(intensity >= 5)
M.apply_effect(round(intensity/0.075), EFFECT_UNCONSCIOUS)
M.rad_act(intensity*10)
addtimer(CALLBACK(src, .proc/radiation_aftereffect, M), (wavelength+(intensity*4))*5)
else
to_chat(user, "<span class='warning'>The radioactive microlaser is still recharging.</span>")
/obj/item/healthanalyzer/rad_laser/proc/handle_cooldown(cooldown)
spawn(cooldown)
used = FALSE
icon_state = "health"
/obj/item/healthanalyzer/rad_laser/proc/radiation_aftereffect(mob/living/M)
if(QDELETED(M))
return
if(intensity >= 5)
M.apply_effect(round(intensity/0.075), EFFECT_UNCONSCIOUS)
M.rad_act(intensity*10)
/obj/item/healthanalyzer/rad_laser/proc/get_cooldown()
return round(max(10, (stealth*30 + intensity*5 - wavelength/4)))
@@ -109,21 +109,22 @@
if(open_status == STATION_TUBE_CLOSED)
icon_state = "opening_[base_icon]"
open_status = STATION_TUBE_OPENING
spawn(OPEN_DURATION)
if(open_status == STATION_TUBE_OPENING)
icon_state = "open_[base_icon]"
open_status = STATION_TUBE_OPEN
addtimer(CALLBACK(src, .proc/finish_animation), OPEN_DURATION)
/obj/structure/transit_tube/station/proc/finish_animation()
switch(open_status)
if(STATION_TUBE_OPENING)
icon_state = "open_[base_icon]"
open_status = STATION_TUBE_OPEN
if(STATION_TUBE_CLOSING)
icon_state = "closed_[base_icon]"
open_status = STATION_TUBE_CLOSED
/obj/structure/transit_tube/station/proc/close_animation()
if(open_status == STATION_TUBE_OPEN)
icon_state = "closing_[base_icon]"
open_status = STATION_TUBE_CLOSING
spawn(CLOSE_DURATION)
if(open_status == STATION_TUBE_CLOSING)
icon_state = "closed_[base_icon]"
open_status = STATION_TUBE_CLOSED
addtimer(CALLBACK(src, .proc/finish_animation), CLOSE_DURATION)
/obj/structure/transit_tube/station/proc/launch_pod()
if(launch_cooldown >= world.time)
@@ -145,19 +146,25 @@
/obj/structure/transit_tube/station/pod_stopped(obj/structure/transit_tube_pod/pod, from_dir)
pod_moving = TRUE
spawn(5)
if(reverse_launch)
pod.setDir(tube_dirs[1]) //turning the pod around for next launch.
launch_cooldown = world.time + cooldown_delay
open_animation()
sleep(OPEN_DURATION + 2)
pod_moving = FALSE
if(!QDELETED(pod))
var/datum/gas_mixture/floor_mixture = loc.return_air()
floor_mixture.archive()
pod.air_contents.archive()
pod.air_contents.share(floor_mixture, 1) //mix the pod's gas mixture with the tile it's on
air_update_turf()
addtimer(CALLBACK(src, .proc/start_stopped, pod), 5)
/obj/structure/transit_tube/station/proc/start_stopped(obj/structure/transit_tube_pod/pod)
if(QDELETED(pod))
return
if(reverse_launch)
pod.setDir(tube_dirs[1]) //turning the pod around for next launch.
launch_cooldown = world.time + cooldown_delay
open_animation()
addtimer(CALLBACK(src, .proc/finish_stopped, pod), OPEN_DURATION + 2)
/obj/structure/transit_tube/station/proc/finish_stopped(obj/structure/transit_tube_pod/pod)
pod_moving = FALSE
if(!QDELETED(pod))
var/datum/gas_mixture/floor_mixture = loc.return_air()
floor_mixture.archive()
pod.air_contents.archive()
pod.air_contents.share(floor_mixture, 1) //mix the pod's gas mixture with the tile it's on
air_update_turf()
/obj/structure/transit_tube/station/init_tube_dirs()
switch(dir)
@@ -340,9 +340,7 @@
if(BODY_ZONE_PRECISE_EYES)
user.set_machine(src)
user.reset_perspective(target)
spawn(100)
user.reset_perspective(null)
user.unset_machine()
addtimer(CALLBACK(src, .proc/reset, user), 10 SECONDS)
if(BODY_ZONE_R_LEG,BODY_ZONE_L_LEG)
to_chat(user, "<span class='notice'>You move the doll's legs around.</span>")
var/turf/T = get_step(target,pick(GLOB.cardinals))
@@ -357,6 +355,12 @@
GiveHint(target,user)
cooldown = world.time + cooldown_time
/obj/item/voodoo/proc/reset(mob/user)
if(QDELETED(user))
return
user.reset_perspective(null)
user.unset_machine()
/obj/item/voodoo/proc/update_targets()
possible = list()
if(!voodoo_link)
@@ -128,7 +128,7 @@
on = !on
if("inject" in signal.data)
spawn inject()
INVOKE_ASYNC(src, .proc/inject)
return
if("set_volume_rate" in signal.data)
+47 -44
View File
@@ -90,69 +90,72 @@
alarms_to_clear += message
alarm_types_clear[type] += 1
if(!in_cooldown)
spawn(3 * 10) // 3 seconds
if(in_cooldown)
return
if(alarms_to_show.len < 5)
for(var/msg in alarms_to_show)
to_chat(src, msg)
else if(alarms_to_show.len)
addtimer(CALLBACK(src, .proc/show_alarms), 3 SECONDS)
var/msg = "--- "
/mob/living/silicon/proc/show_alarms()
if(alarms_to_show.len < 5)
for(var/msg in alarms_to_show)
to_chat(src, msg)
else if(alarms_to_show.len)
if(alarm_types_show["Burglar"])
msg += "BURGLAR: [alarm_types_show["Burglar"]] alarms detected. - "
var/msg = "--- "
if(alarm_types_show["Motion"])
msg += "MOTION: [alarm_types_show["Motion"]] alarms detected. - "
if(alarm_types_show["Burglar"])
msg += "BURGLAR: [alarm_types_show["Burglar"]] alarms detected. - "
if(alarm_types_show["Fire"])
msg += "FIRE: [alarm_types_show["Fire"]] alarms detected. - "
if(alarm_types_show["Motion"])
msg += "MOTION: [alarm_types_show["Motion"]] alarms detected. - "
if(alarm_types_show["Atmosphere"])
msg += "ATMOSPHERE: [alarm_types_show["Atmosphere"]] alarms detected. - "
if(alarm_types_show["Fire"])
msg += "FIRE: [alarm_types_show["Fire"]] alarms detected. - "
if(alarm_types_show["Power"])
msg += "POWER: [alarm_types_show["Power"]] alarms detected. - "
if(alarm_types_show["Atmosphere"])
msg += "ATMOSPHERE: [alarm_types_show["Atmosphere"]] alarms detected. - "
if(alarm_types_show["Camera"])
msg += "CAMERA: [alarm_types_show["Camera"]] alarms detected. - "
if(alarm_types_show["Power"])
msg += "POWER: [alarm_types_show["Power"]] alarms detected. - "
msg += "<A href=?src=[REF(src)];showalerts=1'>\[Show Alerts\]</a>"
to_chat(src, msg)
if(alarm_types_show["Camera"])
msg += "CAMERA: [alarm_types_show["Camera"]] alarms detected. - "
if(alarms_to_clear.len < 3)
for(var/msg in alarms_to_clear)
to_chat(src, msg)
msg += "<A href=?src=[REF(src)];showalerts=1'>\[Show Alerts\]</a>"
to_chat(src, msg)
else if(alarms_to_clear.len)
var/msg = "--- "
if(alarms_to_clear.len < 3)
for(var/msg in alarms_to_clear)
to_chat(src, msg)
if(alarm_types_clear["Motion"])
msg += "MOTION: [alarm_types_clear["Motion"]] alarms cleared. - "
else if(alarms_to_clear.len)
var/msg = "--- "
if(alarm_types_clear["Fire"])
msg += "FIRE: [alarm_types_clear["Fire"]] alarms cleared. - "
if(alarm_types_clear["Motion"])
msg += "MOTION: [alarm_types_clear["Motion"]] alarms cleared. - "
if(alarm_types_clear["Atmosphere"])
msg += "ATMOSPHERE: [alarm_types_clear["Atmosphere"]] alarms cleared. - "
if(alarm_types_clear["Fire"])
msg += "FIRE: [alarm_types_clear["Fire"]] alarms cleared. - "
if(alarm_types_clear["Power"])
msg += "POWER: [alarm_types_clear["Power"]] alarms cleared. - "
if(alarm_types_clear["Atmosphere"])
msg += "ATMOSPHERE: [alarm_types_clear["Atmosphere"]] alarms cleared. - "
if(alarm_types_show["Camera"])
msg += "CAMERA: [alarm_types_clear["Camera"]] alarms cleared. - "
if(alarm_types_clear["Power"])
msg += "POWER: [alarm_types_clear["Power"]] alarms cleared. - "
msg += "<A href=?src=[REF(src)];showalerts=1'>\[Show Alerts\]</a>"
to_chat(src, msg)
if(alarm_types_show["Camera"])
msg += "CAMERA: [alarm_types_clear["Camera"]] alarms cleared. - "
msg += "<A href=?src=[REF(src)];showalerts=1'>\[Show Alerts\]</a>"
to_chat(src, msg)
alarms_to_show = list()
alarms_to_clear = list()
for(var/key in alarm_types_show)
alarm_types_show[key] = 0
for(var/key in alarm_types_clear)
alarm_types_clear[key] = 0
alarms_to_show.Cut()
alarms_to_clear.Cut()
for(var/key in alarm_types_show)
alarm_types_show[key] = 0
for(var/key in alarm_types_clear)
alarm_types_clear[key] = 0
/mob/living/silicon/can_inject(mob/user, error_msg)
if(error_msg)
@@ -357,10 +357,12 @@
ejectpai(0)
if(on)
turn_off()
spawn(severity*300)
stat &= ~EMPED
if(was_on)
turn_on()
addtimer(CALLBACK(src, .proc/emp_reset, was_on), severity*30 SECONDS)
/mob/living/simple_animal/bot/proc/emp_reset(was_on)
stat &= ~EMPED
if(was_on)
turn_on()
/mob/living/simple_animal/bot/proc/set_custom_texts() //Superclass for setting hack texts. Appears only if a set is not given to a bot locally.
text_hack = "You hack [name]."
@@ -595,10 +597,11 @@ Pass a positive integer as an argument to override a bot's default speed.
/mob/living/simple_animal/bot/proc/bot_patrol()
patrol_step()
spawn(5)
if(mode == BOT_PATROL)
patrol_step()
return
addtimer(CALLBACK(src, .proc/do_patrol), 5)
/mob/living/simple_animal/bot/proc/do_patrol()
if(mode == BOT_PATROL)
patrol_step()
/mob/living/simple_animal/bot/proc/start_patrol()
@@ -648,15 +651,17 @@ Pass a positive integer as an argument to override a bot's default speed.
var/moved = bot_move(patrol_target)//step_towards(src, next) // attempt to move
if(!moved) //Couldn't proceed the next step of the path BOT_STEP_MAX_RETRIES times
spawn(2)
calc_path()
if(path.len == 0)
find_patrol_target()
tries = 0
addtimer(CALLBACK(src, .proc/patrol_step_not_moved), 2)
else // no path, so calculate new one
mode = BOT_START_PATROL
/mob/living/simple_animal/bot/proc/patrol_step_not_moved()
calc_path()
if(!length(path))
find_patrol_target()
tries = 0
// finds the nearest beacon to self
/mob/living/simple_animal/bot/proc/find_patrol_target()
nearest_beacon = null
@@ -757,11 +762,13 @@ Pass a positive integer as an argument to override a bot's default speed.
/mob/living/simple_animal/bot/proc/calc_summon_path(turf/avoid)
check_bot_access()
spawn()
set_path(get_path_to(src, summon_target, /turf/proc/Distance_cardinal, 0, 150, id=access_card, exclude=avoid))
if(!path.len) //Cannot reach target. Give up and announce the issue.
speak("Summon command failed, destination unreachable.",radio_channel)
bot_reset()
INVOKE_ASYNC(src, .proc/do_calc_summon_path, avoid)
/mob/living/simple_animal/bot/proc/do_calc_summon_path(turf/avoid)
set_path(get_path_to(src, summon_target, /turf/proc/Distance_cardinal, 0, 150, id=access_card, exclude=avoid))
if(!length(path)) //Cannot reach target. Give up and announce the issue.
speak("Summon command failed, destination unreachable.",radio_channel)
bot_reset()
/mob/living/simple_animal/bot/proc/summon_step()
@@ -779,13 +786,15 @@ Pass a positive integer as an argument to override a bot's default speed.
var/moved = bot_move(summon_target, 3) // Move attempt
if(!moved)
spawn(2)
calc_summon_path()
tries = 0
addtimer(CALLBACK(src, .proc/summon_step_not_moved), 2)
else // no path, so calculate new one
calc_summon_path()
/mob/living/simple_animal/bot/proc/summon_step_not_moved()
calc_summon_path()
tries = 0
/mob/living/simple_animal/bot/Bump(atom/A) //Leave no door unopened!
. = ..()
if((istype(A, /obj/machinery/door/airlock) || istype(A, /obj/machinery/door/window)) && (!isnull(access_card)))
@@ -184,25 +184,28 @@
to_chat(src, "<span class='userdanger'>You are tipped over by [M]!</span>")
Paralyze(60, ignore_canstun = TRUE)
icon_state = icon_dead
spawn(rand(20,50))
if(!stat && M)
icon_state = icon_living
var/external
var/internal
switch(pick(1,2,3,4))
if(1,2,3)
var/text = pick("imploringly.", "pleadingly.",
"with a resigned expression.")
external = "[src] looks at [M] [text]"
internal = "You look at [M] [text]"
if(4)
external = "[src] seems resigned to its fate."
internal = "You resign yourself to your fate."
visible_message("<span class='notice'>[external]</span>",
"<span class='revennotice'>[internal]</span>")
addtimer(CALLBACK(src, .proc/cow_tipped, M), rand(20,50))
else
..()
/mob/living/simple_animal/cow/proc/cow_tipped(mob/living/carbon/M)
if(QDELETED(M) || stat)
return
icon_state = icon_living
var/external
var/internal
if(prob(75))
var/text = pick("imploringly.", "pleadingly.",
"with a resigned expression.")
external = "[src] looks at [M] [text]"
internal = "You look at [M] [text]"
else
external = "[src] seems resigned to its fate."
internal = "You resign yourself to your fate."
visible_message("<span class='notice'>[external]</span>",
"<span class='revennotice'>[internal]</span>")
///Wisdom cow, gives XP to a random skill and speaks wisdoms
/mob/living/simple_animal/cow/wisdom
name = "wisdom cow"