From 3f2506e8fc2f51658cc30510e62b7ff3f13cc552 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Wed, 24 Jun 2015 10:26:38 -0700 Subject: [PATCH] Admin-freeze refactor and fixes. Admin freezing is now based on mob procs, instead of a lengthy else-if change. Other changes: - No longer depends on paralysis, instead uses sleeping. - No more frozen mobs setting off bombs. - Simple animals and slimes override the default proc to make freezing affect them as one would expect. - Frozen var has been moved from human defines to living defines, no use yet. - Mobs frozen are added to a global 'admin_frozen_mobs' list. - List is used to determine if the freeze verb should freeze or unfreze. - Moved mob freeze-related vars to freeze file. --- code/modules/admin/verbs/freeze.dm | 137 +++++++++--------- .../mob/living/carbon/human/human_defines.dm | 2 - 2 files changed, 66 insertions(+), 73 deletions(-) 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