From 0fd3cdfb331936a8625b5d1054d782569b520299 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 5 Mar 2015 13:34:01 -0500 Subject: [PATCH] Fixing the SSD infinite sleep bug --- code/modules/mob/living/carbon/carbon.dm | 62 +++++++++++--------- code/modules/mob/living/carbon/human/life.dm | 9 ++- code/modules/mob/living/login.dm | 3 + code/modules/mob/living/logout.dm | 8 ++- code/modules/mob/living/silicon/silicon.dm | 1 - code/modules/mob/mob_defines.dm | 3 +- 6 files changed, 51 insertions(+), 35 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 279755cc813..86f500aa015 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -203,36 +203,40 @@ src << "You feel fatigued." if((SKELETON in H.mutations) && (!H.w_uniform) && (!H.wear_suit)) H.play_xylophone() - else if(lying) // /vg/: For hugs. This is how update_icon figgers it out, anyway. - N3X15 - var/t_him = "it" - if (src.gender == MALE) - t_him = "him" - else if (src.gender == FEMALE) - t_him = "her" - if (istype(src,/mob/living/carbon/human) && src:w_uniform) - var/mob/living/carbon/human/H = src - H.w_uniform.add_fingerprint(M) - src.sleeping = max(0,src.sleeping-5) - if(src.sleeping == 0) - src.resting = 0 - AdjustParalysis(-3) - AdjustStunned(-3) - AdjustWeakened(-3) - playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - M.visible_message( \ - "\blue [M] shakes [src] trying to wake [t_him] up!", \ - "\blue You shake [src] trying to wake [t_him] up!", \ - ) - // BEGIN HUGCODE - N3X else - if (istype(src,/mob/living/carbon/human) && src:w_uniform) - var/mob/living/carbon/human/H = src - H.w_uniform.add_fingerprint(M) - playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - M.visible_message( \ - "\blue [M] gives [src] a [pick("hug","warm embrace")].", \ - "\blue You hug [src].", \ - ) + if(player_logged) + M.visible_message("[M] shakes [src], but they do not respond. Probably suffering from SSD.", \ + "You shake [src], but they are unresponsive. Probably suffering from SSD.") + if(lying) // /vg/: For hugs. This is how update_icon figgers it out, anyway. - N3X15 + var/t_him = "it" + if (src.gender == MALE) + t_him = "him" + else if (src.gender == FEMALE) + t_him = "her" + if (istype(src,/mob/living/carbon/human) && src:w_uniform) + var/mob/living/carbon/human/H = src + H.w_uniform.add_fingerprint(M) + src.sleeping = max(0,src.sleeping-5) + if(src.sleeping == 0) + src.resting = 0 + AdjustParalysis(-3) + AdjustStunned(-3) + AdjustWeakened(-3) + playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + M.visible_message( \ + "\blue [M] shakes [src] trying to wake [t_him] up!", \ + "\blue You shake [src] trying to wake [t_him] up!", \ + ) + // BEGIN HUGCODE - N3X + else + if (istype(src,/mob/living/carbon/human) && src:w_uniform) + var/mob/living/carbon/human/H = src + H.w_uniform.add_fingerprint(M) + playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + M.visible_message( \ + "\blue [M] gives [src] a [pick("hug","warm embrace")].", \ + "\blue You hug [src].", \ + ) /mob/living/carbon/proc/eyecheck() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 4c03256ecb8..6a36b6ae3d7 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1017,6 +1017,10 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(status_flags & GODMODE) return 0 + //SSD check, if a logged player is awake put them back to sleep! + if(player_logged && sleeping < 2) + sleeping = 2 + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP blinded = 1 silent = 0 @@ -1093,7 +1097,10 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc adjustStaminaLoss(-10) adjustHalLoss(-3) if (mind) - if((mind.active && client != null) || immune_to_ssd) //This also checks whether a client is connected, if not, sleep is not reduced. + //Are they SSD? If so we'll keep them asleep but work off some of that sleep var in case of stoxin or similar. + if(player_logged) + sleeping = max(sleeping-1, 2) + else sleeping = max(sleeping-1, 0) blinded = 1 stat = UNCONSCIOUS diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index cf2f233e7c5..b349e3b15f7 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -4,6 +4,9 @@ //Mind updates sync_mind() + //If they're SSD, remove it so they can wake back up. + player_logged = 0 + //Round specific stuff like hud updates if(ticker && ticker.mode) var/ref = "\ref[mind]" diff --git a/code/modules/mob/living/logout.dm b/code/modules/mob/living/logout.dm index 8fdcdb0ec46..b79d822d80b 100644 --- a/code/modules/mob/living/logout.dm +++ b/code/modules/mob/living/logout.dm @@ -1,7 +1,9 @@ /mob/living/Logout() ..() if (mind) - if(!key) //key and mind have become seperated. + if(!key) //key and mind have become seperated. I believe this is for when a staff member aghosts. mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body. - if(!immune_to_ssd && sleeping < 2 && mind.active) - sleeping = 2 //This causes instant sleep, but does not prolong it. See life.dm for furthering SSD. + //This causes instant sleep and tags a player as SSD. See life.dm for furthering SSD. + if(sleeping < 2 && mind.active) + sleeping = 2 + player_logged = 1 \ No newline at end of file diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 1c8e7b71d65..e1dfc6907bb 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -6,7 +6,6 @@ var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS var/list/alarms_to_show = list() var/list/alarms_to_clear = list() - immune_to_ssd = 1 var/list/hud_list[10] var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer var/list/alarm_types_show = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index d508eb7fb92..e5e7f502194 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -219,7 +219,8 @@ var/has_limbs = 1 //Whether this mob have any limbs he can move with var/can_stand = 1 //Whether this mob have ability to stand - var/immune_to_ssd = 0 + //SSD var, changed it up some so people can have special things happen for different mobs when SSD. + var/player_logged = 0 var/turf/listed_turf = null //the current turf being examined in the stat panel var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes