From 9927cd9de79e7fbf55831ccb3e642a3e0f42906b Mon Sep 17 00:00:00 2001 From: "rastaf.zero@gmail.com" Date: Mon, 28 Mar 2011 23:13:58 +0000 Subject: [PATCH] Fixed bug with custom changelling gets his absosrb objective always failed. Fixed runtime error when cyborg (or sometimes AI) looks at paper. Healing in cryo without cryoaxodone now works correctly. (slow as before) Fixed some more runtime errors. Fixed heal_organ_damage for non-humans. Slitt have to do a lot of work here. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1305 316c924e-a436-60f5-8080-3fe189b3f50e --- code/WorkInProgress/Chemistry-Holder.dm | 4 +++- code/datums/mind.dm | 4 +++- code/game/machinery/cryo.dm | 5 ++--- code/game/objects/items/weapons/papers_bins.dm | 7 ++++++- .../living/carbon/alien/humanoid/humanoid.dm | 5 +++++ code/modules/mob/living/carbon/carbon.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 17 +++-------------- code/modules/mob/living/carbon/monkey/monkey.dm | 7 ++++++- code/modules/mob/mob.dm | 16 +++++++++++++++- 9 files changed, 44 insertions(+), 23 deletions(-) diff --git a/code/WorkInProgress/Chemistry-Holder.dm b/code/WorkInProgress/Chemistry-Holder.dm index 49f10196ffe..de22a277f0f 100644 --- a/code/WorkInProgress/Chemistry-Holder.dm +++ b/code/WorkInProgress/Chemistry-Holder.dm @@ -58,7 +58,9 @@ datum return the_id trans_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. - if (!target || src.total_volume<=0) + if (!target ) + return + if (!target.reagents || src.total_volume<=0) return var/datum/reagents/R = target.reagents amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 2bf5292aa28..1b9469a3c52 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -240,7 +240,9 @@ datum/mind if (istype(objective, /datum/objective/absorb)) def_num = objective:num_to_eat - var/num_to_eat = input("Number to eat:", "Objective", def_num) as text + var/num_to_eat = input("Number to eat:", "Objective", def_num) as num|null + if (isnull(num_to_eat)) + return new_objective = new /datum/objective/absorb new_objective.owner = src new_objective:num_to_eat = num_to_eat diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 33b1a407b50..9b72ab06268 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -169,9 +169,8 @@ occupant.oxyloss -= 1 //severe damage should heal waaay slower without proper chemicals if(occupant.bodytemperature < 225) - if(occupant.bruteloss) occupant.bruteloss = max(0, occupant.bruteloss - min(1, 20/occupant.bruteloss)) - if(occupant.fireloss) occupant.fireloss = max(0, occupant.fireloss - min(1, 20/occupant.fireloss)) - if(occupant.toxloss) occupant.toxloss = max(0, occupant.toxloss - min(1, 20/occupant.toxloss)) + occupant.toxloss = max(0, occupant.toxloss - min(1, 20/occupant.toxloss)) + occupant.heal_organ_damage(min(1, 20/occupant.bruteloss),min(1, 20/occupant.fireloss)) if(beaker && (next_trans == 0)) beaker:reagents.trans_to(occupant, 1, 10) beaker:reagents.reaction(occupant) diff --git a/code/game/objects/items/weapons/papers_bins.dm b/code/game/objects/items/weapons/papers_bins.dm index da8c3f710fd..e252c1560fd 100644 --- a/code/game/objects/items/weapons/papers_bins.dm +++ b/code/game/objects/items/weapons/papers_bins.dm @@ -203,7 +203,12 @@ CLIPBOARDS return /obj/item/weapon/paper/attack_ai(var/mob/living/silicon/ai/user as mob) - if (get_dist(src, user.current) < 2) + var/dist + if (istype(user) && user.current) //is AI + dist = get_dist(src, user.current) + else //cyborg or AI not seeing through a camera + dist = get_dist(src, user) + if (dist < 2) usr << browse(text("[][]", src.name, src.info), text("window=[]", src.name)) onclose(usr, "[src.name]") else diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 9187ed65b50..7ef7b3c98a6 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -800,3 +800,8 @@ In all, this is a lot like the monkey code. /N src.health = 100 src.stat = 0 + +/mob/living/carbon/alien/heal_organ_damage(var/brute, var/burn) + bruteloss = max(0, bruteloss-brute) //HACK + fireloss = max(0, fireloss-burn) //HACK + src.updatehealth() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0bb0c06a0b6..321ea947044 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -87,7 +87,7 @@ return 0 src.burn_skin(shock_damage) //src.fireloss += shock_damage //burn_skin will do this for us - src.updatehealth() + //src.updatehealth() src.visible_message( "\red [src] was shocked by the [source]!", \ "\red You feel a powerful shock course through your body!", \ diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f3e2d02c665..224ecb0edf9 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -2696,18 +2696,7 @@ var/obj/item/clothing/gloves/G = src.gloves siemens_coeff = G.siemens_coefficient return ..(shock_damage,source,siemens_coeff) - -/mob/living/carbon/human/proc/heal_organ_damage(var/brute, var/burn) - var/list/parts = list() - for(var/A in src.organs) - if(!src.organs[A]) continue - var/datum/organ/external/affecting = src.organs[A] - if(!istype(affecting)) continue - if((brute && affecting.brute_dam) || (burn && affecting.burn_dam)) - parts += affecting - - if(!parts.len) return - var/datum/organ/external/picked = pick(parts) - picked.heal_damage(brute,burn) + +/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn) + ..() src.UpdateDamageIcon() - src.updatehealth() diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 9e8c86aa5fa..23baebd00e7 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -701,4 +701,9 @@ src.source.update_clothing() src.target.update_clothing() del(src) - return \ No newline at end of file + return + +/mob/living/carbon/monkey/heal_organ_damage(var/brute, var/burn) + bruteloss = max(0, bruteloss-brute) //HACK + fireloss = max(0, fireloss-burn) //HACK + src.updatehealth() \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ed7d74ca04f..982bd647c54 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -2228,4 +2228,18 @@ note dizziness decrements automatically in the mob's Life() proc. var/list/L = src.get_contents() for(var/obj/O in L) O.emp_act(severity) - ..() \ No newline at end of file + ..() + +/mob/proc/heal_organ_damage(var/brute, var/burn) + var/list/parts = list() + for(var/A in src.organs) + if(!src.organs[A]) continue + var/datum/organ/external/affecting = src.organs[A] + if(!istype(affecting)) continue + if((brute && affecting.brute_dam) || (burn && affecting.burn_dam)) + parts += affecting + + if(!parts.len) return + var/datum/organ/external/picked = pick(parts) + picked.heal_damage(brute,burn) + src.updatehealth()