Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- afterattack(obj/target, mob/user , flag)
- if(!target.reagents) return
- switch(mode)
- if(SYRINGE_DRAW)
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red The syringe is full."
- return
- if(ismob(target))//Blood!
- if(istype(target, /mob/living/carbon/metroid))
- user << "\red You are unable to locate any blood."
- return
- if(src.reagents.has_reagent("blood"))
- user << "\red There is already a blood sample in this syringe"
- return
- if(istype(target, /mob/living/carbon))//maybe just add a blood reagent to all mobs. Then you can suck them dry...With hundreds of syringes. Jolly good idea.
- var/amount = src.reagents.maximum_volume - src.reagents.total_volume
- var/mob/living/carbon/T = target
- if(!T.dna)
- usr << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)"
- return
- if(NOCLONE in T.mutations) //target done been et, no more blood in him
- user << "\red You are unable to locate any blood."
- return
- if(ishuman(T))
- if(T:vessel.get_reagent_amount("blood") < amount)
- return
- if(! ( istype(target:wear_suit, /obj/item/clothing/suit/space) || istype(target:wear_suit, /obj/item/clothing/suit/armor) || istype(target:wear_suit, /obj/item/clothing/suit/bio_hood) || istype(target:wear_suit, /obj/item/clothing/suit/fire) ) )
- var/datum/reagent/B = new /datum/reagent/blood
- B.holder = src
- B.volume = amount
- //set reagent data
- B.data["donor"] = T
- /*
- if(T.virus && T.virus.spread_type != SPECIAL)
- B.data["virus"] = new T.virus.type(0)
- */
- for(var/datum/disease/D in T.viruses)
- if(!B.data["viruses"])
- B.data["viruses"] = list()
- B.data["viruses"] += new D.type
- // not sure why it was checking if(B.data["virus2"]), but it seemed wrong
- if(T.virus2)
- B.data["virus2"] = T.virus2.getcopy()
- B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
- if(T.resistances&&T.resistances.len)
- B.data["resistances"] = T.resistances.Copy()
- if(istype(target, /mob/living/carbon/human))//I wish there was some hasproperty operation...
- B.data["blood_type"] = copytext(T.dna.b_type,1,0)
- var/list/temp_chem = list()
- for(var/datum/reagent/R in target.reagents.reagent_list)
- temp_chem += R.name
- temp_chem[R.name] = R.volume
- B.data["trace_chem"] = list2params(temp_chem)
- B.data["antibodies"] = T.antibodies
- //debug
- //for(var/D in B.data)
- // world << "Data [D] = [B.data[D]]"
- //debug
- if(ishuman(T))
- T:vessel.remove_reagent("blood",amount) // Removes blood if human
- src.reagents.reagent_list += B
- src.reagents.update_total()
- src.on_reagent_change()
- src.reagents.handle_reactions()
- // T:vessel.trans_to(src, amount) // Virus2 and antibodies aren't in blood in the first place.
- user << "\blue You take a blood sample from [target]"
- for(var/mob/O in viewers(4, user))
- O.show_message("\red [user] takes a blood sample from [target].", 1)
- if(prob(2) && istype(T,/mob/living/carbon/monkey))
- T:react_to_attack(user)
- else
- user << "\blue That creature has strong suit"
- return 0
- else //if not mob
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
- if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/metroid_core))
- user << "\red You cannot directly remove reagents from this object."
- return
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
- user << "\blue You fill the syringe with [trans] units of the solution."
- if (reagents.total_volume >= reagents.maximum_volume)
- mode=!mode
- update_icon()
- if(SYRINGE_INJECT)
- if(!reagents.total_volume)
- user << "\red The Syringe is empty."
- return
- if(istype(target, /obj/item/weapon/implantcase/chem))
- return
- if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/metroid_core) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/cigpacket))
- user << "\red You cannot directly fill this object."
- return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
- if(istype(target, /obj/item/metroid_core))
- var/obj/item/metroid_core/core = target
- core.Flush = 30 // reset flush counter
- if(! ( istype(target:wear_suit, /obj/item/clothing/suit/space) || istype(target:wear_suit, /obj/item/clothing/suit/armor) || istype(target:wear_suit, /obj/item/clothing/suit/bio_hood) || istype(target:wear_suit, /obj/item/clothing/suit/fire) ) )
- if(ismob(target) && target != user)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red <B>[] is trying to inject []!</B>", user, target), 1)
- if(!do_mob(user, target)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] injects [] with the syringe!", user, target), 1)
- src.reagents.reaction(target, INGEST)
- if(prob(2) && istype(target,/mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/M = target
- M.react_to_attack(user)
- if(ismob(target) && target == user)
- src.reagents.reaction(target, INGEST)
- spawn(5)
- var/datum/reagent/blood/B
- for(var/datum/reagent/blood/d in src.reagents.reagent_list)
- B = d
- break
- var/trans
- if(B && ishuman(target))
- var/mob/living/carbon/human/H = target
- H.vessel.add_reagent("blood",(B.volume > 5? 5 : B.volume),B.data)
- src.reagents.remove_reagent("blood",(B.volume > 5? 5 : B.volume))
- else
- trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units."
- if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT)
- mode = SYRINGE_DRAW
- update_icon()
- else
- user << "\red That creature has strong suit"
- return 0
- return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement