diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 18649dc998d..c6402eac5fc 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -29,8 +29,7 @@ /proc/get_area(O) var/turf/loc = get_turf(O) if(loc) - var/area/res = loc.loc - .= res + .= loc.loc /proc/get_area_name(N) //get area by its name for(var/area/A in world) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 9ec21d3b273..bce0d2c663e 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -100,7 +100,8 @@ can_hold = list(/obj/item/weapon/ore) /obj/item/weapon/storage/bag/ore/drone - max_storage_space = 400 + // this used to be 400. The inventory system FUCKING DIED at this. + max_storage_space = 200 // ----------------------------- diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 66e0f051747..c4bcf5c854a 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -4,6 +4,10 @@ // Do not remove this functionality without good reason, cough reagent_containers cough. // -Sayu +// Because tick_checking this code gets funky (it's bound directly into user interaction) +// We instead cap the amount of maximum storage space to 200. A loop that should be fine +// for the server to handle without dying. +#define STORAGE_SPACE_CAP 200 /obj/item/weapon/storage name = "storage" @@ -254,11 +258,11 @@ var/obj/item/sample_object var/number - New(obj/item/sample as obj) - if(!istype(sample)) - qdel(src) - sample_object = sample - number = 1 +/datum/numbered_display/New(obj/item/sample as obj) + if(!istype(sample)) + qdel(src) + sample_object = sample + number = 1 //This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing. /obj/item/weapon/storage/proc/orient2hud(mob/user as mob) @@ -522,6 +526,10 @@ /obj/item/weapon/storage/Initialize() ..() + if (max_storage_space > STORAGE_SPACE_CAP) + log_debug("STORAGE: [type] exceed STORAGE_SPACE_CAP. It has been reset to [STORAGE_SPACE_CAP].") + max_storage_space = STORAGE_SPACE_CAP + fill() if(!allow_quick_empty) @@ -666,3 +674,5 @@ return 1000 //return 2**(w_class-1) //1,2,4,8,16,... + +#undef STORAGE_SPACE_CAP diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 61f2d4d332f..8569c1707a4 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -138,7 +138,12 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if (pref.rlimb_data) pref.rlimb_data = params2list(pref.rlimb_data) if (pref.body_markings) - pref.body_markings = json_decode(pref.body_markings) + var/before = pref.body_markings + try + pref.body_markings = json_decode(pref.body_markings) + catch (var/exception/e) + log_debug("BODY MARKINGS: Caught [e]. Initial value: [before]") + pref.body_markings = list() pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair)) pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair)) @@ -601,7 +606,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/disability_flag = text2num(href_list["disabilities"]) pref.disabilities ^= disability_flag return TOPIC_REFRESH - + else if(href_list["toggle_clothing"]) pref.dress_mob = !pref.dress_mob return TOPIC_REFRESH diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index fb6d4e3b9d8..4cfcbec4921 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -266,9 +266,11 @@ //sealed pieces become airtight, protecting against diseases if (!seal_target) + LAZYINITLIST(piece.armor) piece.armor["bio"] = 100 else - piece.armor["bio"] = src.armor["bio"] + LAZYINITLIST(piece.armor) + piece.armor["bio"] = LAZYACCESS(src.armor, "bio") || 0 else failed_to_seal = 1 diff --git a/code/modules/clothing/suits/hoodies.dm b/code/modules/clothing/suits/hoodies.dm index a330699fb2c..01bec85cc7a 100644 --- a/code/modules/clothing/suits/hoodies.dm +++ b/code/modules/clothing/suits/hoodies.dm @@ -27,11 +27,17 @@ icon_state = "[initial(icon_state)]" item_state = "[initial(item_state)]" suittoggled = 0 + + // Hood got nuked. Probably because of RIGs or the like. + if (!hood) + MakeHood() + return + if(ishuman(hood.loc)) var/mob/living/carbon/H = hood.loc H.unEquip(hood, 1) H.update_inv_wear_suit() - hood.loc = src + hood.forceMove(src) /obj/item/clothing/suit/storage/hooded/dropped() RemoveHood() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 5c232fb6178..2ca2c9f90eb 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -67,7 +67,7 @@ var/obj/item/clothing/head/helmet = get_equipped_item(slot_head) if(istype(helmet) && (helmet.body_parts_covered & HEAD) && (helmet.flags & STOPPRESSUREDAMAGE)) //we don't do an armor_check here because this is not an impact effect like a weapon swung with momentum, that either penetrates or glances off. - damage_mod = 1.0 - (helmet.armor["melee"]/100) + damage_mod = 1.0 - (LAZYACCESS(helmet.armor, "melee")/100) var/total_damage = 0 for(var/i in 1 to 3) diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm index 5297e9fe601..02f7aafd5a2 100644 --- a/code/modules/mob/living/simple_animal/bees.dm +++ b/code/modules/mob/living/simple_animal/bees.dm @@ -79,12 +79,12 @@ if ((worn_suit.flags & THICKMATERIAL)) prob_mult -= 0.7 else - prob_mult -= 0.01 * (min(worn_suit.armor["bio"],70)) // Is it sealed? I can't get to 70% of your body. + prob_mult -= 0.01 * (min(LAZYACCESS(worn_suit.armor, "bio"), 70)) // Is it sealed? I can't get to 70% of your body. if(worn_helmet) if ((worn_helmet.flags & THICKMATERIAL)) prob_mult -= 0.3 else - prob_mult -= 0.01 *(min(worn_helmet.armor["bio"],30))// Is your helmet sealed? I can't get to 30% of your body. + prob_mult -= 0.01 *(min(LAZYACCESS(worn_helmet.armor, "bio"), 30))// Is your helmet sealed? I can't get to 30% of your body. if( prob(sting_prob*prob_mult) && (M.stat == CONSCIOUS || (M.stat == UNCONSCIOUS && prob(25*prob_mult))) ) // Try to sting! If you're not moving, think about stinging. M.apply_damage(min(strength*0.85,2)+mut, BURN, sharp=1) // Stinging. The more mutated I am, the harder I sting. M.apply_damage(max(strength*1.7,(round(feral/10,1)*(max((round(strength/20,1)),1)))+toxic), TOX) // Bee venom based on how angry I am and how many there are of me! diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index de404b15d6f..69dc6f303ad 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -171,7 +171,7 @@ if(owner) replaced(owner) sync_colour_to_human(owner) - + addtimer(CALLBACK(src, .proc/get_icon), 1) if ((status & ORGAN_PLANT)) @@ -229,7 +229,7 @@ brute -= brute / 2 if(status & ORGAN_BROKEN && prob(40) && brute) - if (!(owner.species && (owner.species.flags & NO_PAIN))) + if (owner && !(owner.species && (owner.species.flags & NO_PAIN))) owner.emote("scream") //getting hit on broken hand hurts if(used_weapon) add_autopsy_data("[used_weapon]", brute + burn) @@ -272,12 +272,14 @@ spillover += max(0, burn - can_inflict) //If there are still hurties to dispense - if (spillover) + if (spillover && owner) owner.shock_stage += spillover * config.organ_damage_spillover_multiplier // sync the organ's damage with its wounds src.update_damages() - owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called + + if (owner) + owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called //If limb took enough damage, try to cut or tear it off if(owner && loc == owner && !is_stump()) diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index a6157133f2b..923bdc072f9 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -17,14 +17,14 @@ var/global/list/gps_by_type = list() /obj/item/device/gps/Initialize() . = ..() - GPS_list.Add(src) + GPS_list += src LAZYADD(gps_by_type["[type]"], src) gpstag = "[gps_prefix][LAZYLEN(gps_by_type["[type]"])]" name = "global positioning system ([gpstag])" add_overlay("working") /obj/item/device/gps/Destroy() - GPS_list.Remove(src) + GPS_list -= src var/list/typelist = gps_by_type["[type]"] LAZYREMOVE(typelist, src) return ..() @@ -57,7 +57,7 @@ var/global/list/gps_by_type = list() var/turf/pos = get_turf(G) var/area/gps_area = get_area(G) var/tracked_gpstag = G.gpstag - if(G.emped == 1) + if(G.emped == 1 || !pos) t += "
[tracked_gpstag]: ERROR" else t += "
[tracked_gpstag]: [format_text(gps_area.name)] ([pos.x], [pos.y], [pos.z])" diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm index 1694c14a30b..adb75d25ddb 100644 --- a/code/modules/virus2/helpers.dm +++ b/code/modules/virus2/helpers.dm @@ -17,7 +17,8 @@ proc/infection_check(var/mob/living/carbon/M, var/vector = "Airborne") var/obj/item/I = M.wear_mask //masks provide a small bonus and can replace overall bio protection if(I) - score = max(score, round(0.06*I.armor["bio"])) + var/bio_armor = LAZYACCESS(I.armor, "bio") || 0 + score = max(score, round(0.06 * bio_armor)) if (istype(I, /obj/item/clothing/mask)) score += 1 //this should be added after @@ -51,7 +52,7 @@ proc/infection_check(var/mob/living/carbon/M, var/vector = "Airborne") if (vector == "Airborne") var/obj/item/I = M.wear_mask if (istype(I)) - protection = max(protection, I.armor["bio"]) + protection = max(protection, LAZYACCESS(I.armor, "bio") || 0) return prob(protection)