From d19c62c08166a1898856a431cc23803f6b6083f3 Mon Sep 17 00:00:00 2001 From: NanakoAC Date: Wed, 21 Dec 2016 19:39:22 +0000 Subject: [PATCH] Cargo. Event, Holder fixes (#1253) Fixes runtime errors with cargo stock. Was caused by the type of armor boosts changing. Probably fixes the issue of mobs dying when picked up. I added some robustness and safeties to it Tweaks event probabilities, adjusting the major event distribution (rarer bears), raising some others and slightly reducing the overall chance of major events. --- code/modules/cargo/randomstock.dm | 17 ++++++-- code/modules/events/event_container.dm | 10 ++--- code/modules/mob/holder.dm | 35 +++++++++++++---- html/changelogs/Nanako-Fixes.yml | 37 ++++++++++++++++++ .../Event Probabilities.xls | Bin 19968 -> 0 bytes .../Event Probabilities.xlsx | Bin 0 -> 30630 bytes 6 files changed, 82 insertions(+), 17 deletions(-) create mode 100644 html/changelogs/Nanako-Fixes.yml delete mode 100644 tools/Event Probabilities/Event Probabilities.xls create mode 100644 tools/Event Probabilities/Event Probabilities.xlsx diff --git a/code/modules/cargo/randomstock.dm b/code/modules/cargo/randomstock.dm index 52fdc37101f..cb7c0c947e1 100644 --- a/code/modules/cargo/randomstock.dm +++ b/code/modules/cargo/randomstock.dm @@ -1351,11 +1351,19 @@ var/list/global/random_stock_large = list( var/list/equips = list( "/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp" = 1, "/obj/item/mecha_parts/mecha_equipment/tool/drill" = 1, + "/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill" = 0.7, "/obj/item/mecha_parts/mecha_equipment/tool/extinguisher" = 1, + "/obj/item/mecha_parts/mecha_equipment/tool/rcd" = 0.08, + "/obj/item/mecha_parts/mecha_equipment/teleporter" = 0.3, + "/obj/item/mecha_parts/mecha_equipment/wormhole_generator" = 0.5, "/obj/item/mecha_parts/mecha_equipment/gravcatapult" = 0.8, - "/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster" = 1, - "/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster" = 0.9, + "/obj/item/mecha_parts/mecha_equipment/armor_booster/anticcw_armor_booster" = 1, + "/obj/item/mecha_parts/mecha_equipment/armor_booster/antiproj_armor_booster" = 0.9, + "/obj/item/mecha_parts/mecha_equipment/repair_droid" = 0.7, + "/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay" = 0.4, "/obj/item/mecha_parts/mecha_equipment/generator" = 1.5, + "/obj/item/mecha_parts/mecha_equipment/generator/nuclear" = 0.8, + "/obj/item/mecha_parts/mecha_equipment/tool/safety_clamp" = 0.2, "/obj/item/mecha_parts/mecha_equipment/tool/passenger" = 1, "/obj/item/mecha_parts/mecha_equipment/tool/sleeper" = 0.9, "/obj/item/mecha_parts/mecha_equipment/tool/cable_layer" = 1.2, @@ -1534,8 +1542,8 @@ var/list/global/random_stock_large = list( "/obj/item/mecha_parts/mecha_equipment/teleporter" = 0.3, "/obj/item/mecha_parts/mecha_equipment/wormhole_generator" = 0.5, "/obj/item/mecha_parts/mecha_equipment/gravcatapult" = 0.8, - "/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster" = 1, - "/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster" = 0.9, + "/obj/item/mecha_parts/mecha_equipment/armor_booster/anticcw_armor_booster" = 1, + "/obj/item/mecha_parts/mecha_equipment/armor_booster/antiproj_armor_booster" = 0.9, "/obj/item/mecha_parts/mecha_equipment/repair_droid" = 0.7, "/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay" = 0.4, "/obj/item/mecha_parts/mecha_equipment/generator" = 1.5, @@ -1547,6 +1555,7 @@ var/list/global/random_stock_large = list( "/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun" = 1 ) + var/number = rand(2,5) while (number > 0) var/type = pickweight(equips) diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index ef52f1d8012..be63c13e7bd 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -142,7 +142,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 60, list(ASSIGNMENT_JANITOR = 20, ASSIGNMENT_SECURITY = 10)), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 75, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_GARDENER = 20)), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Clogged Vents", /datum/event/vent_clog, 85), + new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Clogged Vents", /datum/event/vent_clog, 70), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "False Alarm", /datum/event/false_alarm, 100), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Supply Drop", /datum/event/supply_drop, 80), @@ -173,13 +173,13 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT /datum/event_container/major severity = EVENT_LEVEL_MAJOR available_events = list( - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 90), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 105), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 50, list(ASSIGNMENT_ENGINEER = 5,ASSIGNMENT_SECURITY = 5), 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 60, list(ASSIGNMENT_SECURITY = 10), 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 40, list(ASSIGNMENT_ENGINEER = 10),1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 60, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_GARDENER = 20), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, 20, list(ASSIGNMENT_MEDICAL = 13), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Bluespace Bears", /datum/event/bear_attack, 50, list(ASSIGNMENT_SECURITY = 10), 1) + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 75, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_GARDENER = 20), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, 20, list(ASSIGNMENT_MEDICAL = 15), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Bluespace Bears", /datum/event/bear_attack, 35, list(ASSIGNMENT_SECURITY = 10), 1) ) //NOTE: Re added nothing option, but with fairly low weight diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 5fd4f819561..6b1baa2574d 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -28,6 +28,8 @@ var/list/holder_mob_icon_cache = list() /obj/item/weapon/holder/Destroy() processing_objects.Remove(src) + if (contained) + release_mob() ..() /obj/item/weapon/holder/examine(mob/user) @@ -120,6 +122,7 @@ var/list/holder_mob_icon_cache = list() M.reset_view() M.Released() + contained = null var/mob/L = get_holding_mob() if (L) L.drop_from_inventory(src) @@ -241,15 +244,31 @@ var/list/holder_mob_icon_cache = list() else H.isalive = 1//We note that the mob is alive when picked up. If it dies later, we can know that its death happened while held, and play its deathmessage for it - if (user == src) - grabber << "[src.name] climbs up onto you." - src << "You climb up onto [grabber]." + + + + var/success = 0 + if (src == user) + success = grabber.put_in_any_hand_if_possible(H, 0,1,1) else - grabber << "You scoop up [src]." - src << "[grabber] scoops you up." - grabber.status_flags |= PASSEMOTES - H.attack_hand(grabber)//We put this last to prevent some race conditions - return + H.attack_hand(grabber)//We put this last to prevent some race conditions + if (H.loc == grabber) + success = 1 + + if (success) + if (user == src) + grabber << "[src.name] climbs up onto you." + src << "You climb up onto [grabber]." + else + grabber << "You scoop up [src]." + src << "[grabber] scoops you up." + + else + user << "Failed, try again!" + //If the scooping up failed something must have gone wrong + H.release_mob() + + return success /mob/living/proc/get_holder_location() diff --git a/html/changelogs/Nanako-Fixes.yml b/html/changelogs/Nanako-Fixes.yml new file mode 100644 index 00000000000..332f353c1f7 --- /dev/null +++ b/html/changelogs/Nanako-Fixes.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Nanako + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Hopefully fixed a bug where picked up animals would instantly die." + - tweak: "Adjusted several event probabilities for better variety, and a little less major events." diff --git a/tools/Event Probabilities/Event Probabilities.xls b/tools/Event Probabilities/Event Probabilities.xls deleted file mode 100644 index 3d6132045bb2a29303f43267e802b0965357f304..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19968 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