From 977ea89da973bfeb80a4e8b19cff28340e662cc2 Mon Sep 17 00:00:00 2001 From: "vageyenaman@gmail.com" Date: Sat, 6 Aug 2011 18:08:28 +0000 Subject: [PATCH] Bugfixes: - Security cyborgs' handcuffs now act as dispensers. This means they no longer transfer to the target when you attempt to handcuff them, instead, it creates new handcuffs and attaches them to the target. - Cyborgs can no longer put their module items onto people. - People in the starting screen can no longer see/hear admin dead-chatter. - Fixed some bugs with cyborg modules not deactivating properly in the HUD if you lost power or got locked down. - Final fix for Metroids. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1986 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/obj/weapon.dm | 4 + code/game/objects/items.dm | 87 +++++++++++-------- code/modules/admin/verbs/deadsay.dm | 3 +- code/modules/mob/living/carbon/human/human.dm | 3 + .../mob/living/carbon/metroid/powers.dm | 45 +++++----- code/modules/mob/living/silicon/robot/life.dm | 7 +- .../modules/mob/living/silicon/robot/robot.dm | 31 ++++++- .../mob/living/silicon/robot/robot_modules.dm | 2 +- 8 files changed, 118 insertions(+), 64 deletions(-) diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index b4bb6a229e1..3037207fa68 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -1029,6 +1029,10 @@ throw_range = 5 m_amt = 500 origin_tech = "materials=1" + var/dispenser = 0 + +/obj/item/weapon/handcuffs/cyborg + dispenser = 1 /obj/item/weapon/implant diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 732156edd98..9a7837879a6 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -15,57 +15,70 @@ /obj/item/weapon/handcuffs/attack(mob/M as mob, mob/user as mob) - if ((usr.mutations & CLOWN) && prob(50)) - usr << "\red Uh ... how do those things work?!" + if(istype(src, /obj/item/weapon/handcuffs/cyborg) && isrobot(user)) + if(!M.handcuffed) + var/turf/p_loc = user.loc + var/turf/p_loc_m = M.loc + playsound(src.loc, 'handcuffs.ogg', 30, 1, -2) + for(var/mob/O in viewers(user, null)) + O.show_message("\red [user] is trying to put handcuffs on [M]!", 1) + spawn(30) + if(p_loc == user.loc && p_loc_m == M.loc) + M.handcuffed = new /obj/item/weapon/handcuffs(M) + + else + if ((usr.mutations & CLOWN) && prob(50)) + usr << "\red Uh ... how do those things work?!" + if (istype(M, /mob/living/carbon/human)) + var/obj/equip_e/human/O = new /obj/equip_e/human( ) + O.source = user + O.target = user + O.item = user.equipped() + O.s_loc = user.loc + O.t_loc = user.loc + O.place = "handcuff" + M.requests += O + spawn( 0 ) + O.process() + return + return + if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + usr << "\red You don't have the dexterity to do this!" + return if (istype(M, /mob/living/carbon/human)) + M.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [M.name] ([M.ckey])") var/obj/equip_e/human/O = new /obj/equip_e/human( ) O.source = user - O.target = user + O.target = M O.item = user.equipped() O.s_loc = user.loc - O.t_loc = user.loc + O.t_loc = M.loc O.place = "handcuff" M.requests += O spawn( 0 ) + playsound(src.loc, 'handcuffs.ogg', 30, 1, -2) + O.process() + return + else + var/obj/equip_e/monkey/O = new /obj/equip_e/monkey( ) + O.source = user + O.target = M + O.item = user.equipped() + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "handcuff" + M.requests += O + spawn( 0 ) + playsound(src.loc, 'handcuffs.ogg', 30, 1, -2) O.process() return - return - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") - usr << "\red You don't have the dexterity to do this!" - return - if (istype(M, /mob/living/carbon/human)) - M.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [M.name] ([M.ckey])") - - var/obj/equip_e/human/O = new /obj/equip_e/human( ) - O.source = user - O.target = M - O.item = user.equipped() - O.s_loc = user.loc - O.t_loc = M.loc - O.place = "handcuff" - M.requests += O - spawn( 0 ) - playsound(src.loc, 'handcuffs.ogg', 30, 1, -2) - O.process() - return - else - var/obj/equip_e/monkey/O = new /obj/equip_e/monkey( ) - O.source = user - O.target = M - O.item = user.equipped() - O.s_loc = user.loc - O.t_loc = M.loc - O.place = "handcuff" - M.requests += O - spawn( 0 ) - playsound(src.loc, 'handcuffs.ogg', 30, 1, -2) - O.process() - return return + + /obj/item/weapon/extinguisher/New() var/datum/reagents/R = new/datum/reagents(50) reagents = R diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 20d1bdf7cd4..63823688f0d 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -21,4 +21,5 @@ for (var/mob/M in world) if(M.stat == 2 || (M.client && M.client.holder)) - M.show_message(rendered, 2) \ No newline at end of file + if(!istype(/mob/new_player, M)) + M.show_message(rendered, 2) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b19392dfd8f..dab6ce3e50e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -2074,6 +2074,9 @@ var/list/L = list( "syringe", "pill", "drink", "dnainjector", "fuel") if ((item && !( L.Find(place) ))) + if(isrobot(source) && place != "handcuff") + del(src) + return for(var/mob/O in viewers(target, null)) O.show_message(text("\red [] is trying to put \a [] on []", source, item, target), 1) else diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm index ec4659faa25..8b5feedc27c 100644 --- a/code/modules/mob/living/carbon/metroid/powers.dm +++ b/code/modules/mob/living/carbon/metroid/powers.dm @@ -16,28 +16,29 @@ var/mob/living/carbon/M = input(src,"Who do you wish to feed on?") in null|choices if(!M) return + if(M in view(1, src)) - if(istype(M, /mob/living/carbon) && !istype(src, /mob/living/carbon/brain)) - if(!istype(M, /mob/living/carbon/metroid)) - if(stat != 2) - if(health > -70) + if(istype(M, /mob/living/carbon) && !istype(src, /mob/living/carbon/brain)) + if(!istype(M, /mob/living/carbon/metroid)) + if(stat != 2) + if(health > -70) - for(var/mob/living/carbon/metroid/met in view()) - if(met.Victim == M && met != src) - src << "The [met.name] is already feeding on this subject..." - return - src << "\blue I have latched onto the subject and begun feeding..." - M << "\red The [src.name] has latched onto your head!" - Feedon(M) + for(var/mob/living/carbon/metroid/met in view()) + if(met.Victim == M && met != src) + src << "The [met.name] is already feeding on this subject..." + return + src << "\blue I have latched onto the subject and begun feeding..." + M << "\red The [src.name] has latched onto your head!" + Feedon(M) + else + src << "This subject does not have a strong enough life energy..." else - src << "This subject does not have a strong enough life energy..." + src << "This subject does not have an edible life energy..." else - src << "This subject does not have an edible life energy..." + src << "I must not feed on my brothers..." else - src << "I must not feed on my brothers..." - else - src << "This subject does not have an edible life energy..." + src << "This subject does not have an edible life energy..." @@ -53,7 +54,7 @@ else icon_state = "baby metroid eat" - while(Victim && M.health > -70) + while(Victim && M.health > -70 && stat != 2) // M.canmove = 0 canmove = 0 if(prob(15) && M.client) @@ -116,11 +117,15 @@ sleep(rand(15,45)) + if(stat == 2) + if(!istype(src, /mob/living/carbon/metroid/adult)) + icon_state = "baby metroid dead" - if(istype(src, /mob/living/carbon/metroid/adult)) - icon_state = "adult metroid" else - icon_state = "baby metroid" + if(istype(src, /mob/living/carbon/metroid/adult)) + icon_state = "adult metroid" + else + icon_state = "baby metroid" Victim = null canmove = 1 diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index d5606a548bd..79a3e6065dc 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -42,6 +42,7 @@ if (src.cell) if(src.cell.charge <= 0) + uneq_all() src.stat = 1 else if (src.cell.charge <= 100) src.module_active = null @@ -67,6 +68,7 @@ src.blinded = 0 src.stat = 0 else + uneq_all() src.stat = 1 @@ -312,10 +314,7 @@ process_locks() if(weapon_lock) - src.module_active = null - src.module_state_1 = null - src.module_state_2 = null - src.module_state_3 = null + uneq_all() weaponlock_time -- if(weaponlock_time <= 0) if(src.client) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 64622183639..741f40b8ba5 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -469,7 +469,7 @@ sleep(5) src << "\red Would you like to send a report to NanoTraSoft? Y/N" sleep(10) - src << "\red N" + src << "\red > N" sleep(20) src << "\red ERRORERRORERROR" src << "\red \b ALERT: [usr] is your new master. Obey your new laws and his commands." @@ -843,6 +843,35 @@ module_state_3 = null inv3.icon_state = "inv3" +/mob/living/silicon/robot/proc/uneq_all() + module_active = null + + if(module_state_1) + if(istype(module_state_1,/obj/item/weapon/borg/sight)) + sight_mode &= ~module_state_1:sight_mode + if (client) + client.screen -= module_state_1 + contents -= module_state_1 + module_state_1 = null + inv1.icon_state = "inv1" + if(module_state_2) + if(istype(module_state_2,/obj/item/weapon/borg/sight)) + sight_mode &= ~module_state_2:sight_mode + if (client) + client.screen -= module_state_2 + contents -= module_state_2 + module_state_2 = null + inv2.icon_state = "inv2" + if(module_state_3) + if(istype(module_state_3,/obj/item/weapon/borg/sight)) + sight_mode &= ~module_state_3:sight_mode + if (client) + client.screen -= module_state_3 + contents -= module_state_3 + module_state_3 = null + inv3.icon_state = "inv3" + + /mob/living/silicon/robot/proc/activated(obj/item/O) if(module_state_1 == O) return 1 diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 68697bc7421..020462c1581 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -186,7 +186,7 @@ obj/item/weapon/robot_module/syndicate /obj/item/weapon/robot_module/security/New() ..() src.modules += new /obj/item/weapon/melee/baton(src) - src.modules += new /obj/item/weapon/handcuffs(src) + src.modules += new /obj/item/weapon/handcuffs/cyborg(src) src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src) src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src)