From 7b1732dda0c88853b8da2429215c7902fc430fc8 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 2 Jan 2013 18:38:31 +0400 Subject: [PATCH] Moved global steps list and it's initializing to TG's new place for such things. Moved helper for checking if mob is down on some operable surface to unsorted helpers. Checking for tool type now will properly work with subtypes (istype instead of comparing type var)/ --- code/WorkInProgress/surgery.dm | 11 +---------- code/__HELPERS/global_lists.dm | 8 +++++++- code/__HELPERS/unsorted.dm | 8 ++++++++ code/game/objects/items.dm | 22 +++++++++++++--------- 4 files changed, 29 insertions(+), 20 deletions(-) diff --git a/code/WorkInProgress/surgery.dm b/code/WorkInProgress/surgery.dm index 3ad76272466..404afdbb859 100644 --- a/code/WorkInProgress/surgery.dm +++ b/code/WorkInProgress/surgery.dm @@ -1,12 +1,3 @@ - -//check if mob is lying down on something we can operate him on. -/proc/can_operate(mob/living/carbon/M) - return (locate(/obj/machinery/optable, M.loc) && M.resting) || \ - (locate(/obj/structure/stool/bed/roller, M.loc) && \ - (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || \ - (locate(/obj/structure/table/, M.loc) && \ - (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66)) - /datum/surgery_status/ var/eyes = 0 var/face = 0 @@ -49,7 +40,7 @@ var/can_infect = 0 // Build this list by iterating over all typesof(/datum/surgery_step) and sorting the results by priority -var/global/list/surgery_steps = null + proc/build_surgery_steps_list() surgery_steps = list() diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index f683c47e06e..47f61c261af 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -16,7 +16,7 @@ var/global/list/facial_hair_styles_list = list() //stores /datum/sprite_accessor var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff var/global/list/landmarks_list = list() //list of all landmarks created - +var/global/list/surgery_steps = list() //list of all surgery steps |BS12 ////////////////////////// /////Initial Building///// ////////////////////////// @@ -33,4 +33,10 @@ var/global/list/landmarks_list = list() //list of all landmarks created for(var/path in paths) var/datum/sprite_accessory/facial_hair/H = new path() facial_hair_styles_list[H.name] = H + //Surgery Steps - Initialize all /datum/surgery_step into a list + paths = typesof(/datum/surgery_step)-/datum/surgery_step + for(var/T in paths) + var/datum/surgery_step/S = new T + surgery_steps += S + diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 41dd9feb078..cf8831dd76e 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1363,6 +1363,14 @@ proc/is_hot(obj/item/W as obj) istype(W, /obj/item/weapon/bonesetter) ) +//check if mob is lying down on something we can operate him on. +/proc/can_operate(mob/living/carbon/M) + return (locate(/obj/machinery/optable, M.loc) && M.resting) || \ + (locate(/obj/structure/stool/bed/roller, M.loc) && \ + (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || \ + (locate(/obj/structure/table/, M.loc) && \ + (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66)) + /proc/reverse_direction(var/dir) switch(dir) if(NORTH) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 742d50f98f7..b6c7cf8da8f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -189,17 +189,21 @@ if (can_operate(M)) //Checks if mob is lying down on table for surgery if(istype(M,/mob/living/carbon)) if (user.a_intent != "harm") - if(surgery_steps == null) build_surgery_steps_list() + if(surgery_steps.len == 0) build_surgery_steps_list() for(var/datum/surgery_step/S in surgery_steps) //check if tool is right or close enough - if(istype(src, S.required_tool) || (S.allowed_tools && (src.type in S.allowed_tools) )) - if(S.can_use(user, M, user.zone_sel.selecting, src)) //is this step possible? - S.begin_step(user, M, user.zone_sel.selecting, src) - if(do_mob(user, M, rand(S.min_duration, S.max_duration))) - S.end_step(user, M, user.zone_sel.selecting, src) - else - S.fail_step(user, M, user.zone_sel.selecting, src) - return //don't want to do weapony things after surgery + var/right = istype(src, S.required_tool) + if (!right && S.allowed_tools) + for (var/T in S.allowed_tools) + if (istype(src, T)) + right = 1 + if(right && S.can_use(user, M, user.zone_sel.selecting, src)) //is this step possible? + S.begin_step(user, M, user.zone_sel.selecting, src) + if(do_mob(user, M, rand(S.min_duration, S.max_duration))) + S.end_step(user, M, user.zone_sel.selecting, src) + else + S.fail_step(user, M, user.zone_sel.selecting, src) + return //don't want to do weapony things after surgery if (is_surgery_tool(src)) return