diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm index 502060933ee..128ef87060b 100644 --- a/code/modules/admin/verbs/freeze.dm +++ b/code/modules/admin/verbs/freeze.dm @@ -5,88 +5,83 @@ //////Allows admin's to right click on any mob/mech and freeze them in place./// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -/client/proc/freeze(mob/living/M as mob in mob_list) +var/global/list/frozen_mob_list = list() +/client/proc/freeze(var/mob/living/M as mob in mob_list) set category = "Special Verbs" set name = "Freeze" if(!holder) - src << "Only administrators may use this command." + src << "Error: Freeze: Only administrators may use this command." return - if(!mob) - return - if(!istype(M)) - alert("Cannot freeze a ghost") - return - if(usr) - if (usr.client) - if(usr.client.holder) - if (istype(M, /mob/living/carbon/slime)) - if(!M.paralysis) - M.adjustToxLoss(2147483647) - M.AdjustParalysis(2147483647) - var/adminomaly = new/obj/effect/overlay/adminoverlay - spawn(50) - M.overlays += adminomaly - M << "You have been frozen by [key]" - message_admins("\blue [key_name_admin(usr)] froze [key_name(M)]") - log_admin("[key_name(usr)] froze [key_name(M)]") - else if (M.paralysis) - M.AdjustParalysis(-2147483647) - M.blinded = 0 - M.lying = 0 - M.stat = 0 - M << " You have been unfrozen by [key]" - message_admins("\blue [key_name_admin(usr)] unfroze [key_name(M)]") - log_admin("[key_name(usr)] unfroze [key_name(M)]") - M.revive() - else if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/FM = M + if(!istype(M)) return + if(!check_rights(R_ADMIN)) return + if(M in frozen_mob_list) + M.admin_unFreeze(src) + else + M.admin_Freeze(src) - if(!FM.paralysis) - FM.anchored = 1 - FM.frozen = 1 - FM.AdjustParalysis(2147483647) - var/adminomaly = new/obj/effect/overlay/adminoverlay - spawn(50) - FM.overlays += adminomaly - FM << "You have been frozen by [key]" - message_admins("\blue [key_name_admin(usr)] froze [key_name(FM)]") - log_admin("[key_name(usr)] froze [key_name(FM)]") - else if (M.paralysis) - FM.anchored = 0 - FM.frozen = 0 - FM.AdjustParalysis(-2147483647) - FM.blinded = 0 - FM.lying = 0 - FM.stat = 0 +///mob freeze procs - FM << " You have been unfrozen by [key]" - message_admins("\blue [key_name_admin(usr)] unfroze [key_name(FM)]") - log_admin("[key_name(usr)] unfroze [key_name(FM)]") +/mob/living/var/frozen = 0 //used for preventing attacks on admin-frozen mobs +/mob/living/var/admin_prev_sleeping = 0 //used for keeping track of previous sleeping value with admin freeze - else +/mob/living/proc/admin_Freeze(var/client/admin) + if(istype(admin)) + src << "You have been frozen by [admin.key]" + message_admins("\blue [key_name_admin(admin)] froze [key_name(src)]") + log_admin("[key_name(admin)] froze [key_name(src)]") - if(!M.paralysis) - M.anchored = 1 - M.AdjustParalysis(2147483647) - var/adminomaly = new/obj/effect/overlay/adminoverlay - spawn(50) - M.overlays += adminomaly - M << "You have been frozen by [key]" - message_admins("\blue [key_name_admin(usr)] froze [key_name(M)]") - log_admin("[key_name(usr)] froze [key_name(M)]") - else if (M.paralysis) - M.anchored = 0 - M.AdjustParalysis(-2147483647) - M.blinded = 0 - M.lying = 0 - M.stat = 0 + var/obj/effect/overlay/adminoverlay/AO = new + src.overlays += AO - M << " You have been unfrozen by [key]" - message_admins("\blue [key_name_admin(usr)] unfroze [key_name(M)]") - log_admin("[key_name(usr)] unfroze [key_name(M)]") + anchored = 1 + frozen = 1 + admin_prev_sleeping = sleeping + sleeping += 20000 + if(!(src in frozen_mob_list)) + frozen_mob_list += src + +/mob/living/proc/admin_unFreeze(var/client/admin) + if(istype(admin)) + src << "You have been unfrozen by [key]" + message_admins("\blue [key_name_admin(admin)] unfroze [key_name(src)]") + log_admin("[key_name(admin)] unfroze [key_name(src)]") + + update_icons() + + anchored = 0 + frozen = 0 + sleeping = admin_prev_sleeping + admin_prev_sleeping = null + if(src in frozen_mob_list) + frozen_mob_list -= src -/client/proc/freezemecha(obj/mecha/O as obj in mechas_list) +/mob/living/carbon/slime/admin_Freeze(admin) + ..(admin) + adjustToxLoss(1010101010) //arbitrary large value + +/mob/living/carbon/slime/admin_unFreeze(admin) + ..(admin) + adjustToxLoss(-1010101010) + stat = 0 + revive() + + +/mob/living/simple_animal/var/admin_prev_health = null + +/mob/living/simple_animal/admin_Freeze(admin) + ..(admin) + admin_prev_health = health + health = 0 + +/mob/living/simple_animal/admin_unFreeze(admin) + ..(admin) + revive() + overlays.Cut() + +//////////////////////////Freeze Mech + +/client/proc/freezemecha(var/obj/mecha/O as obj in mechas_list) set category = "Special Verbs" set name = "Freeze Mech" if(!holder) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index f8aa4a64ac9..39e0f052f2b 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -80,7 +80,5 @@ var/lastFart = 0 // Toxic fart cooldown. - var/frozen = 0 //used for preventing attacks on admin-frozen people - var/fire_dmi = 'icons/mob/OnFire.dmi' var/fire_sprite = "Standing" \ No newline at end of file