From df09966258b1887f97318f0f5befc32e1933b0a5 Mon Sep 17 00:00:00 2001 From: farie82 Date: Sat, 15 Feb 2020 05:54:01 +0100 Subject: [PATCH] Instant Summons spell now respects no_drop and teleports the holder of the nodrop item to the wizard now (#12961) * Instant recall spell now respects no_drop * Teleports the holder to the wizard instead now --- code/datums/spells/summonitem.dm | 58 +++++++++++++++----------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/code/datums/spells/summonitem.dm b/code/datums/spells/summonitem.dm index 8dbaf5afa77..aaef2229856 100644 --- a/code/datums/spells/summonitem.dm +++ b/code/datums/spells/summonitem.dm @@ -52,73 +52,71 @@ marked_item = null else //Getting previously marked item - var/obj/item_to_retrive = marked_item + var/obj/item_to_retrieve = marked_item var/infinite_recursion = 0 //I don't want to know how someone could put something inside itself but these are wizards so let's be safe - while(!isturf(item_to_retrive.loc) && infinite_recursion < 10) //if it's in something you get the whole thing. - if(ismob(item_to_retrive.loc)) //If its on someone, properly drop it - var/mob/M = item_to_retrive.loc + while(!isturf(item_to_retrieve.loc) && infinite_recursion < 10) //if it's in something you get the whole thing. + if(ismob(item_to_retrieve.loc)) //If its on someone, properly drop it + var/mob/M = item_to_retrieve.loc - if(issilicon(M)) //Items in silicons warp the whole silicon - M.loc.visible_message("[M] suddenly disappears!") - M.loc = target.loc + if(issilicon(M) || !M.unEquip(item_to_retrieve)) //Items in silicons warp the whole silicon + M.visible_message("[M] suddenly disappears!", "A force suddenly pulls you away!") + M.forceMove(target.loc) M.loc.visible_message("[M] suddenly appears!") - item_to_retrive = null + item_to_retrieve = null break - M.unEquip(item_to_retrive) - if(ishuman(M)) //Edge case housekeeping var/mob/living/carbon/human/C = M - /*if(C.internal_bodyparts_by_name && item_to_retrive in C.internal_bodyparts_by_name ) //This won't work, as we use organ datums instead of objects. --DZD - C.internal_bodyparts_by_name -= item_to_retrive + /*if(C.internal_bodyparts_by_name && item_to_retrieve in C.internal_bodyparts_by_name ) //This won't work, as we use organ datums instead of objects. --DZD + C.internal_bodyparts_by_name -= item_to_retrieve if(istype(marked_item, /obj/item/brain)) //If this code ever runs I will be happy var/obj/item/brain/B = new /obj/item/brain(target.loc) B.transfer_identity(C) C.death() add_attack_logs(target, C, "Magically debrained INTENT: [uppertext(target.a_intent)]")*/ - if(C.stomach_contents && item_to_retrive in C.stomach_contents) - C.stomach_contents -= item_to_retrive + if(C.stomach_contents && item_to_retrieve in C.stomach_contents) + C.stomach_contents -= item_to_retrieve for(var/X in C.bodyparts) var/obj/item/organ/external/part = X - if(item_to_retrive in part.embedded_objects) - part.embedded_objects -= item_to_retrive - to_chat(C, "The [item_to_retrive] that was embedded in your [part] has mysteriously vanished. How fortunate!") + if(item_to_retrieve in part.embedded_objects) + part.embedded_objects -= item_to_retrieve + to_chat(C, "The [item_to_retrieve] that was embedded in your [part] has mysteriously vanished. How fortunate!") if(!C.has_embedded_objects()) C.clear_alert("embeddedobject") break else - if(istype(item_to_retrive.loc,/obj/machinery/portable_atmospherics/)) //Edge cases for moved machinery - var/obj/machinery/portable_atmospherics/P = item_to_retrive.loc + if(istype(item_to_retrieve.loc,/obj/machinery/portable_atmospherics/)) //Edge cases for moved machinery + var/obj/machinery/portable_atmospherics/P = item_to_retrieve.loc P.disconnect() P.update_icon() - if(istype(item_to_retrive.loc, /obj/structure/disposalholder) || istype(item_to_retrive.loc, /obj/machinery/disposal))//fixes the breaking of disposals. No more bluespace connected disposal bins! + if(istype(item_to_retrieve.loc, /obj/structure/disposalholder) || istype(item_to_retrieve.loc, /obj/machinery/disposal))//fixes the breaking of disposals. No more bluespace connected disposal bins! break - item_to_retrive = item_to_retrive.loc + item_to_retrieve = item_to_retrieve.loc infinite_recursion += 1 - if(!item_to_retrive) + if(!item_to_retrieve) return - item_to_retrive.loc.visible_message("The [item_to_retrive.name] suddenly disappears!") + item_to_retrieve.loc.visible_message("The [item_to_retrieve.name] suddenly disappears!") if(target.hand) //left active hand - if(!target.equip_to_slot_if_possible(item_to_retrive, slot_l_hand, 0, 1, 1)) - if(!target.equip_to_slot_if_possible(item_to_retrive, slot_r_hand, 0, 1, 1)) + if(!target.equip_to_slot_if_possible(item_to_retrieve, slot_l_hand, 0, 1, 1)) + if(!target.equip_to_slot_if_possible(item_to_retrieve, slot_r_hand, 0, 1, 1)) butterfingers = 1 else //right active hand - if(!target.equip_to_slot_if_possible(item_to_retrive, slot_r_hand, 0, 1, 1)) - if(!target.equip_to_slot_if_possible(item_to_retrive, slot_l_hand, 0, 1, 1)) + if(!target.equip_to_slot_if_possible(item_to_retrieve, slot_r_hand, 0, 1, 1)) + if(!target.equip_to_slot_if_possible(item_to_retrieve, slot_l_hand, 0, 1, 1)) butterfingers = 1 if(butterfingers) - item_to_retrive.loc = target.loc - item_to_retrive.loc.visible_message("The [item_to_retrive.name] suddenly appears!") + item_to_retrieve.loc = target.loc + item_to_retrieve.loc.visible_message("The [item_to_retrieve.name] suddenly appears!") playsound(get_turf(target),'sound/magic/summonitems_generic.ogg',50,1) else - item_to_retrive.loc.visible_message("The [item_to_retrive.name] suddenly appears in [target]'s hand!") + item_to_retrieve.loc.visible_message("The [item_to_retrieve.name] suddenly appears in [target]'s hand!") playsound(get_turf(target),'sound/magic/summonitems_generic.ogg',50,1) if(message)