Merge pull request #4894 from Zuhayr/master

IPC fixes.
This commit is contained in:
Mloc
2014-05-04 13:49:00 +01:00
10 changed files with 107 additions and 13 deletions

View File

@@ -285,11 +285,14 @@
playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1) playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1)
if(ishuman(M)) if(ishuman(M))
var/mob/living/carbon/human/H = M var/mob/living/carbon/human/H = M
if(H.species.flags & IS_SYNTHETIC)
return
if( !H.shoes && ( !H.wear_suit || !(H.wear_suit.body_parts_covered & FEET) ) ) if( !H.shoes && ( !H.wear_suit || !(H.wear_suit.body_parts_covered & FEET) ) )
var/datum/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot")) var/datum/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot"))
if(affecting.status & ORGAN_ROBOT) if(affecting.status & ORGAN_ROBOT)
return return
H.Weaken(3) H.Weaken(3)
if(affecting.take_damage(5, 0)) if(affecting.take_damage(5, 0))
H.UpdateDamageIcon() H.UpdateDamageIcon()

View File

@@ -449,11 +449,15 @@
item_state = "crowbar_red" item_state = "crowbar_red"
/obj/item/weapon/weldingtool/attack(mob/M as mob, mob/user as mob) /obj/item/weapon/weldingtool/attack(mob/M as mob, mob/user as mob)
if(hasorgans(M)) if(hasorgans(M))
var/datum/organ/external/S = M:organs_by_name[user.zone_sel.selecting] var/datum/organ/external/S = M:organs_by_name[user.zone_sel.selecting]
if (!S) return if (!S) return
if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help") if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help")
return ..() return ..()
if(S.brute_dam) if(S.brute_dam)
S.heal_damage(15,0,0,1) S.heal_damage(15,0,0,1)
if(user != M) if(user != M)
@@ -464,7 +468,26 @@
user.visible_message("\red \The [user] patches some dents on their [S.display_name] with \the [src]",\ user.visible_message("\red \The [user] patches some dents on their [S.display_name] with \the [src]",\
"\red You patch some dents on your [S.display_name]",\ "\red You patch some dents on your [S.display_name]",\
"You hear a welder.") "You hear a welder.")
else return
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.species.flags & IS_SYNTHETIC)
if(H.getBruteLoss() > 0)
if(M == user)
user << "\red You can't repair damage to your own body - it's against OH&S."
return
user.visible_message("\red \The [user] patches some dents on \the [M] with \the [src]",\
"\red You patch some of the dents on \the [M].",\
"You hear a welder.")
H.heal_overall_damage(5,0)
return
user << "Nothing to fix!" user << "Nothing to fix!"
else else
return ..() return ..()

View File

@@ -860,6 +860,10 @@
return return
/mob/living/carbon/human/proc/vomit() /mob/living/carbon/human/proc/vomit()
if(species.flags & IS_SYNTHETIC)
return //Machines don't throw up.
if(!lastpuke) if(!lastpuke)
lastpuke = 1 lastpuke = 1
src << "<spawn class='warning'>You feel nauseous..." src << "<spawn class='warning'>You feel nauseous..."

View File

@@ -73,6 +73,10 @@
/mob/living/carbon/human/adjustCloneLoss(var/amount) /mob/living/carbon/human/adjustCloneLoss(var/amount)
..() ..()
if(species.flags & IS_SYNTHETIC)
return
var/heal_prob = max(0, 80 - getCloneLoss()) var/heal_prob = max(0, 80 - getCloneLoss())
var/mut_prob = min(80, getCloneLoss()+10) var/mut_prob = min(80, getCloneLoss()+10)
if (amount > 0) if (amount > 0)

View File

@@ -225,6 +225,9 @@
proc/handle_mutations_and_radiation() proc/handle_mutations_and_radiation()
if(species.flags & IS_SYNTHETIC) //Robots don't suffer from mutations or radloss.
return
if(getFireLoss()) if(getFireLoss())
if((COLD_RESISTANCE in mutations) || (prob(1))) if((COLD_RESISTANCE in mutations) || (prob(1)))
heal_organ_damage(0,1) heal_organ_damage(0,1)
@@ -249,6 +252,7 @@
radiation = 0 radiation = 0
else else
if(species.flags & RAD_ABSORB) if(species.flags & RAD_ABSORB)
var/rads = radiation/25 var/rads = radiation/25
radiation -= rads radiation -= rads
@@ -258,8 +262,6 @@
adjustToxLoss(-(rads)) adjustToxLoss(-(rads))
updatehealth() updatehealth()
return return
if(species.flags & IS_SYNTHETIC)
return
var/damage = 0 var/damage = 0
switch(radiation) switch(radiation)

View File

@@ -515,8 +515,6 @@ This function completely restores a damaged organ to perfect condition.
var/obj/organ //Dropped limb object var/obj/organ //Dropped limb object
switch(body_part) switch(body_part)
if(LOWER_TORSO)
owner << "\red You are now sterile."
if(HEAD) if(HEAD)
if(owner.species.flags & IS_SYNTHETIC) if(owner.species.flags & IS_SYNTHETIC)
organ= new /obj/item/weapon/organ/head/posi(owner.loc, owner) organ= new /obj/item/weapon/organ/head/posi(owner.loc, owner)

View File

@@ -638,11 +638,14 @@ obj/structure/cable/proc/cableColor(var/colorC)
/obj/item/weapon/cable_coil/attack(mob/M as mob, mob/user as mob) /obj/item/weapon/cable_coil/attack(mob/M as mob, mob/user as mob)
if(hasorgans(M)) if(hasorgans(M))
var/datum/organ/external/S = M:get_organ(user.zone_sel.selecting) var/datum/organ/external/S = M:get_organ(user.zone_sel.selecting)
if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help") if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help")
return ..() return ..()
if(S.burn_dam > 0 && use(1)) if(S.burn_dam > 0 && use(1))
S.heal_damage(0,15,0,1) S.heal_damage(0,15,0,1)
if(user != M) if(user != M)
user.visible_message("<span class='notice'>\The [user] repairs some burn damage on [M]'s [S.display_name] with \the [src]</span>",\ user.visible_message("<span class='notice'>\The [user] repairs some burn damage on [M]'s [S.display_name] with \the [src]</span>",\
"<span class='notice'>\The [user] repairs some burn damage on your [S.display_name]</span>",\ "<span class='notice'>\The [user] repairs some burn damage on your [S.display_name]</span>",\
@@ -651,7 +654,28 @@ obj/structure/cable/proc/cableColor(var/colorC)
user.visible_message("<span class='notice'>\The [user] repairs some burn damage on their [S.display_name] with \the [src]</span>",\ user.visible_message("<span class='notice'>\The [user] repairs some burn damage on their [S.display_name] with \the [src]</span>",\
"<span class='notice'>You repair some burn damage on your [S.display_name]</span>",\ "<span class='notice'>You repair some burn damage on your [S.display_name]</span>",\
"You hear wires being cut.") "You hear wires being cut.")
else
return
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.species.flags & IS_SYNTHETIC)
if(H.getFireLoss() > 0)
if(M == user)
user << "\red You can't repair damage to your own body - it's against OH&S."
return
user.visible_message("<span class='notice'>\The [user] repairs some burn damage on [M] with \the [src]</span>",\
"<span class='notice'>You repair some of \the [M]'s burn damage.</span>",\
"You hear wires being cut.")
H.heal_overall_damage(0,5)
return
user << "Nothing to fix!" user << "Nothing to fix!"
else else
return ..() return ..()

View File

@@ -27,6 +27,13 @@
return 0 return 0
if(M == user) if(M == user)
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.species.flags & IS_SYNTHETIC)
H << "\red You have a monitor for a head, where do you think you're going to put that?"
return
M << "\blue You swallow a gulp of [src]." M << "\blue You swallow a gulp of [src]."
if(reagents.total_volume) if(reagents.total_volume)
reagents.trans_to_ingest(M, gulp_size) reagents.trans_to_ingest(M, gulp_size)
@@ -35,6 +42,11 @@
return 1 return 1
else if( istype(M, /mob/living/carbon/human) ) else if( istype(M, /mob/living/carbon/human) )
var/mob/living/carbon/human/H = M
if(H.species.flags & IS_SYNTHETIC)
H << "\red They have a monitor for a head, where do you think you're going to put that?"
return
for(var/mob/O in viewers(world.view, user)) for(var/mob/O in viewers(world.view, user))
O.show_message("\red [user] attempts to feed [M] [src].", 1) O.show_message("\red [user] attempts to feed [M] [src].", 1)
if(!do_mob(user, M)) return if(!do_mob(user, M)) return

View File

@@ -37,9 +37,15 @@
M.drop_from_inventory(src) //so icons update :[ M.drop_from_inventory(src) //so icons update :[
del(src) del(src)
return 0 return 0
if(istype(M, /mob/living/carbon)) if(istype(M, /mob/living/carbon))
if(M == user) //If you're eating it yourself.
var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25) var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
if(M == user) //If you're eating it yourself
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.species.flags & IS_SYNTHETIC)
H << "\red You have a monitor for a head, where do you think you're going to put that?"
return
if (fullness <= 50) if (fullness <= 50)
M << "\red You hungrily chew out a piece of [src] and gobble it!" M << "\red You hungrily chew out a piece of [src] and gobble it!"
if (fullness > 50 && fullness <= 150) if (fullness > 50 && fullness <= 150)
@@ -52,8 +58,14 @@
M << "\red You cannot force any more of [src] to go down your throat." M << "\red You cannot force any more of [src] to go down your throat."
return 0 return 0
else else
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.species.flags & IS_SYNTHETIC)
H << "\red They have a monitor for a head, where do you think you're going to put that?"
return
if(!istype(M, /mob/living/carbon/slime)) //If you're feeding it to someone else. if(!istype(M, /mob/living/carbon/slime)) //If you're feeding it to someone else.
var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
if (fullness <= (550 * (1 + M.overeatduration / 1000))) if (fullness <= (550 * (1 + M.overeatduration / 1000)))
for(var/mob/O in viewers(world.view, user)) for(var/mob/O in viewers(world.view, user))
O.show_message("\red [user] attempts to feed [M] [src].", 1) O.show_message("\red [user] attempts to feed [M] [src].", 1)

View File

@@ -20,6 +20,13 @@
return return
attack(mob/M as mob, mob/user as mob, def_zone) attack(mob/M as mob, mob/user as mob, def_zone)
if(M == user) if(M == user)
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.species.flags & IS_SYNTHETIC)
H << "\red You have a monitor for a head, where do you think you're going to put that?"
return
M << "\blue You swallow [src]." M << "\blue You swallow [src]."
M.drop_from_inventory(src) //icon update M.drop_from_inventory(src) //icon update
if(reagents.total_volume) if(reagents.total_volume)
@@ -31,6 +38,11 @@
else if(istype(M, /mob/living/carbon/human) ) else if(istype(M, /mob/living/carbon/human) )
var/mob/living/carbon/human/H = M
if(H.species.flags & IS_SYNTHETIC)
H << "\red They have a monitor for a head, where do you think you're going to put that?"
return
for(var/mob/O in viewers(world.view, user)) for(var/mob/O in viewers(world.view, user))
O.show_message("\red [user] attempts to force [M] to swallow [src].", 1) O.show_message("\red [user] attempts to force [M] to swallow [src].", 1)