From 4f168d8caf2df6ab18319ff8ae99df13b3aa1467 Mon Sep 17 00:00:00 2001 From: d3athrow Date: Tue, 4 Mar 2014 20:31:53 -0600 Subject: [PATCH] qdel and Destroy() improvements, now done through objects/items/devices --- code/defines/obj.dm | 1 + code/game/objects/items.dm | 16 +++++++++++++--- code/game/objects/items/devices/PDA/PDA.dm | 2 ++ code/game/objects/items/devices/PDA/radio.dm | 9 ++++++++- code/game/objects/items/devices/aicard.dm | 12 ++++++++---- code/game/objects/items/devices/powersink.dm | 12 ++++++++++-- code/game/objects/items/devices/radio/radio.dm | 8 +++++++- code/game/objects/items/devices/scanners.dm | 5 +++++ .../game/objects/items/devices/transfer_valve.dm | 2 +- code/modules/power/cable.dm | 10 +++++++++- 10 files changed, 64 insertions(+), 13 deletions(-) diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 86bd500aefe..d5ad3439f74 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -321,6 +321,7 @@ var/global/list/PDA_Manifest = list() layer = 2.44 //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4 var/_color = "red" var/obj/structure/powerswitch/power_switch + var/obj/item/device/powersink/attached // holding this here for qdel /obj/structure/cable/yellow _color = "yellow" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index ebc25c93b9d..79aca9c6d67 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -41,14 +41,24 @@ var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers. /obj/item/Destroy() - if(istype(src.loc, /mob/living)) - var/mob/living/H = src.loc - H.u_equip(src) // items at the very least get unequipped from their mob before being deleted + if(istype(src.loc, /mob)) + var/mob/H = src.loc + H.drop_from_inventory(src) // items at the very least get unequipped from their mob before being deleted + if(istype(src.loc, /obj/item/assembly)) + var/obj/item/assembly/A = src.loc + if(A.part1 == src) + A.part1 = null + else if(A.part2 == src) + A.part2 = null + master = null if(reagents && istype(reagents)) reagents.my_atom = null reagents.delete() if(hasvar(src, "holder")) src:holder = null + if(hasvar(src, "my_atom")) + src:my_atom = null + ..() /obj/item/device diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index bcad486155b..f0064242fbf 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1144,6 +1144,8 @@ var/global/list/obj/item/device/pda/PDAs = list() PDAs -= src if (src.id) src.id.loc = get_turf(src.loc) + if(src.pai) + src.pai.loc = get_turf(src.loc) ..() /obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index e3c8a5d23f7..616584b0429 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -48,7 +48,10 @@ spawn(5) if(radio_controller) radio_controller.add_object(src, control_freq, filter = RADIO_SECBOT) - + Destroy() + if(radio_controller) + radio_controller.remove_object(src, control_freq) + ..() // receive radio signals // can detect bot status signals // create/populate list as they are recvd @@ -118,6 +121,10 @@ spawn(10) post_signal(beacon_freq, "findbeacon", "delivery", s_filter = RADIO_NAVBEACONS) + Destroy() + if(radio_controller) + radio_controller.remove_object(src, control_freq) + radio_controller.remove_object(src, beacon_freq) // receive radio signals // can detect bot status signals // and beacon locations diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index b8e15fdcf6c..5ef7ee6f952 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -120,7 +120,11 @@ overlays += image('icons/obj/aicards.dmi', "aicard-on") attack_self(U) - - - - +/obj/item/device/aicard/ex_act(severity) + switch(severity) + if(1.0) + del(src) + if(2.0) + if(prob(50)) del(src) + if(3.0) + if(prob(25)) del(src) diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 7e4a6d89958..f164bcca623 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -31,6 +31,7 @@ user << "No exposed cable here to attach to." return else + attached.attached = src anchored = 1 mode = 1 user << "You attach the device to the cable." @@ -47,6 +48,8 @@ anchored = 0 mode = 0 user << "You detach the device from the cable." + attached.attached = null + attached = null for(var/mob/M in viewers(user)) if(M == user) continue M << "[user] detaches the power sink from the cable." @@ -57,7 +60,12 @@ else ..() - + Destroy() + SetLuminosity(0) + processing_objects.Remove(src) + attached.attached = null + attached = null + ..() attack_paw() return @@ -117,4 +125,4 @@ if(power_drained >= max_power) processing_objects.Remove(src) explosion(src.loc, 3,6,9,12) - del(src) + qdel(src) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index be7e314193d..8f4bfa74d16 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -816,4 +816,10 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use return /obj/item/device/radio/off - listening = 0 \ No newline at end of file + listening = 0 + +/obj/item/device/radio/Destroy() + if(isrobot(src.loc)) + var/mob/living/silicon/robot/R = src.loc + R.radio = null + ..() diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 2a0234934ec..08e94c58f89 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -20,6 +20,11 @@ REAGENT SCANNER m_amt = 150 origin_tech = "magnets=1;engineering=1" +/obj/item/device/t_scanner/Destroy() + if(on) + processing_objects.Remove(src) + ..() + /obj/item/device/t_scanner/attack_self(mob/user) on = !on diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 2fa75536ec3..dc92438dadc 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -41,7 +41,7 @@ user << "The device is secured." return if(attached_device) - user << "There is already an device attached to the valve, remove it first." + user << "There is already a device attached to the valve, remove it first." return user.remove_from_mob(item) attached_device = A diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index f6588fea61f..797e472933b 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -90,6 +90,14 @@ if(powernet) powernet.cut_cable(src) // update the powernets cable_list -= src + if(istype(attached)) + attached.SetLuminosity(0) + attached.icon_state = "powersink0" + attached.mode = 0 + processing_objects.Remove(attached) + attached.anchored = 0 + attached.attached = null + attached = null ..() // then go ahead and delete the cable /obj/structure/cable/hide(var/i) @@ -623,4 +631,4 @@ obj/structure/cable/proc/cableColor(var/colorC) else user << "Nothing to fix!" else - return ..() \ No newline at end of file + return ..()