From ae470547980bb4605ab0327126039d3fe5f962ba Mon Sep 17 00:00:00 2001 From: Exapsters <98767708+Exapsters@users.noreply.github.com> Date: Sat, 17 Jun 2023 01:14:15 +0700 Subject: [PATCH] WHO (#305) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * WHO * Мини-фиксы * Merge pull request #33706 from Spookerton/spkrtn/cng/but-where-does-it-all-go rigs get some storage on the chestpiece --------- Co-authored-by: Mucker <1161516+MuckerMayhem@users.noreply.github.com> --- baystation12.dme | 1 - .../hud/ability_screen_objects_prx.dm | 2 +- .../objects/items/weapons/storage/internal.dm | 5 +- .../objects/items/weapons/storage/storage.dm | 18 ++++--- .../items/weapons/tools/screwdriver.dm | 3 +- .../items/weapons/tools/weldingtool.dm | 5 ++ .../clothing/spacesuits/rig/rig_attackby.dm | 16 ++++++- .../clothing/spacesuits/rig/rig_pieces.dm | 42 +++++++++++++++- .../clothing/spacesuits/rig/suits/light.dm | 14 +++++- .../clothing/spacesuits/rig/suits/station.dm | 2 + code/modules/events/rogue_drones.dm | 30 ++++++------ .../projectiles/guns/projectile/revolver.dm | 2 +- code/modules/psionics/events/mini_spasm.dm | 2 +- maps/torch/job/command_jobs.dm | 2 +- proxima/code/game/verbs/who.dm | 48 +++++++++++++++++++ 15 files changed, 159 insertions(+), 33 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index 76e234e320bb4..3241fa5ead995 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -3310,7 +3310,6 @@ #include "proxima\code\modules\clothing\suits\suits.dm" #include "proxima\code\modules\clothing\under\under.dm" #include "proxima\code\modules\clothing\under\accessories\armor_tag.dm" -#include "proxima\code\modules\clothing\under\accessories\wristwatches.dm" #include "proxima\code\modules\culture_descriptor\culture\cultures_human.dm" #include "proxima\code\modules\culture_descriptor\faction\factions_other.dm" #include "proxima\code\modules\culture_descriptor\location\locations_human.dm" diff --git a/code/_onclick/hud/ability_screen_objects_prx.dm b/code/_onclick/hud/ability_screen_objects_prx.dm index 68e397e80d529..ffde3773f5aab 100644 --- a/code/_onclick/hud/ability_screen_objects_prx.dm +++ b/code/_onclick/hud/ability_screen_objects_prx.dm @@ -6,7 +6,7 @@ var/sting_datum /obj/screen/ability/changeling/activate() - to_chat(ability_master.my_mob, SPAN_LING("Мы подготовили жало. Используйте alt+клик или СКМ на цели для укола.")) + to_chat(ability_master.my_mob, SPAN_LING("Мы подготовили жало. Используйте alt+клик на цели для укола.")) var/datum/changeling/C = ability_master.my_mob.mind.changeling C.chosen_sting = new sting_datum diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 1e13098515aec..fecdc1024cc9f 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -91,6 +91,7 @@ max_w_class = slot_size ..() -/obj/item/storage/internal/pouch/New(var/newloc, var/storage_space) +/obj/item/storage/internal/pouch/New(newloc, storage_space, max_w_class) max_storage_space = storage_space - ..() \ No newline at end of file + src.max_w_class = max_w_class || src.max_w_class + ..() diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 5d8ff1c66bd68..3a68e3890defa 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -341,18 +341,24 @@ if(0) to_chat(usr, "\The [src] now picks up one item at a time.") + +/obj/item/storage/proc/DoQuickEmpty() + var/turf/into = get_turf(src) + if (!into) + return + for(var/atom/movable/movable in contents) + remove_from_storage(movable, into, TRUE) + finish_bulk_removal() + + /obj/item/storage/verb/quick_empty() set name = "Empty Contents" set category = "Object" - if((!ishuman(usr) && (src.loc != usr)) || usr.stat || usr.restrained()) return - - var/turf/T = get_turf(src) hide_from(usr) - for(var/obj/item/I in contents) - remove_from_storage(I, T, 1) - finish_bulk_removal() + DoQuickEmpty() + /obj/item/storage/verb/dump_contents() set name = "Dump Contents" diff --git a/code/game/objects/items/weapons/tools/screwdriver.dm b/code/game/objects/items/weapons/tools/screwdriver.dm index 9a361a3f7db66..8f5dc11668297 100644 --- a/code/game/objects/items/weapons/tools/screwdriver.dm +++ b/code/game/objects/items/weapons/tools/screwdriver.dm @@ -16,6 +16,7 @@ attack_verb = list("stabbed") lock_picking_level = 5 sharp = TRUE + item_flags = ITEM_FLAG_CAN_HIDE_IN_SHOES var/build_from_parts = TRUE var/valid_colours = list(COLOR_RED, COLOR_CYAN_BLUE, COLOR_PURPLE, COLOR_CHESTNUT, COLOR_GREEN, COLOR_TEAL, COLOR_ASSEMBLY_YELLOW, COLOR_BOTTLE_GREEN, COLOR_VIOLET, COLOR_GRAY80, COLOR_GRAY20) @@ -36,4 +37,4 @@ return ..() if((MUTATION_CLUMSY in user.mutations) && prob(50)) M = user - return eyestab(M,user) \ No newline at end of file + return eyestab(M,user) diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index ba8afc3e8698f..3181252ecb5a7 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -58,6 +58,7 @@ to_chat(user, SPAN_NOTICE("You secure the welder.")) else to_chat(user, SPAN_NOTICE("The welder can now be attached and modified.")) + playsound(src, 'sound/items/Screwdriver.ogg', 10, 1) src.add_fingerprint(user) return @@ -84,6 +85,7 @@ user.visible_message("[user] slots \a [W] into \the [src].", "You slot \a [W] into \the [src].") w_class = tank.size_in_use force = tank.unlit_force + playsound(src, 'sound/items/cap_close.ogg', 10, 1) update_icon() return @@ -98,6 +100,7 @@ tank = null w_class = initial(w_class) force = initial(force) + playsound(src, 'sound/items/cap_open.ogg', 10, 1) update_icon() else to_chat(user, SPAN_DANGER("Turn off the welder first!")) @@ -240,6 +243,7 @@ src.force = tank.lit_force src.damtype = DAMAGE_BURN welding = 1 + playsound(src, 'sound/items/welderactivate.ogg', 10, 1) update_icon() START_PROCESSING(SSobj, src) else @@ -259,6 +263,7 @@ src.force = tank.unlit_force src.damtype = DAMAGE_BRUTE src.welding = 0 + playsound(src, 'sound/items/welderdeactivate.ogg', 10, 1) update_icon() /obj/item/weldingtool/attack(mob/living/M, mob/living/user, target_zone) diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm index 29b7146381dbc..7bb2b015bab2d 100644 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm @@ -126,8 +126,8 @@ var/list/current_mounts = list() if(cell) current_mounts += "cell" if(air_supply) current_mounts += "tank" - if(installed_modules && installed_modules.len) current_mounts += "system module" - + if (length(chest?.storage?.contents)) current_mounts += "storage" + if(installed_modules && length(installed_modules)) current_mounts += "system module" var/to_remove = input("Which would you like to modify?") as null|anything in current_mounts if(!to_remove) return @@ -160,6 +160,18 @@ to_chat(user, "You detach and remove \the [air_supply].") air_supply = null + if ("storage") + if (!length(chest?.storage?.contents)) + to_chat(user, "There is nothing in the storage to remove.") + return + chest.storage.DoQuickEmpty() + user.visible_message( + SPAN_ITALIC("\The [user] ejects the contents of \a [src]'s storage."), + SPAN_ITALIC("You eject the contents of \the [src]'s storage."), + SPAN_ITALIC("You hear things clatter to the floor."), + range = 5 + ) + if("system module") var/list/possible_removals = list() diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm index 2296584df7df5..529658d839c6d 100644 --- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm +++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm @@ -53,16 +53,56 @@ ) var/list/supporting_limbs = list() //If not-null, automatically splints breaks. Checked when removing the suit. equip_delay = null + var/obj/item/storage/internal/storage + var/max_w_class = ITEM_SIZE_NORMAL + var/slots = 2 STORAGE_FREEFORM + + +/obj/item/clothing/suit/space/rig/Destroy() + LAZYCLEARLIST(supporting_limbs) + QDEL_NULL(storage) + return ..() + + +/obj/item/clothing/suit/space/rig/Initialize() + . = ..() + if (slots && max_w_class) + if (slots < 0) + storage = new /obj/item/storage/internal/pouch (src, (-slots) * BASE_STORAGE_COST(max_w_class), max_w_class) + else + storage = new /obj/item/storage/internal/pockets (src, slots, max_w_class) + + +/obj/item/clothing/suit/space/rig/attack_hand(mob/living/user) + if (storage?.handle_attack_hand(user)) + ..(user) + +/obj/item/clothing/suit/space/rig/MouseDrop(obj/over) + if (storage?.handle_mousedrop(usr, over)) + ..(over) + + +/obj/item/clothing/suit/space/rig/emp_act(severity) + storage?.emp_act(severity) + ..() + + +/obj/item/clothing/suit/space/rig/attempt_store_item(obj/item/I, mob/user, silent) + if (storage?.can_be_inserted(I, user, TRUE) && storage.handle_item_insertion(I, silent)) + return TRUE + return ..() /obj/item/clothing/suit/space/rig/equipped(mob/M) check_limb_support(M) ..() -/obj/item/clothing/suit/space/rig/dropped(var/mob/user) + +/obj/item/clothing/suit/space/rig/dropped(mob/user) check_limb_support(user) ..() + // Some space suits are equipped with reactive membranes that support broken limbs /obj/item/clothing/suit/space/rig/proc/can_support(var/mob/living/carbon/human/user) if(user.wear_suit != src) diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index 44add5f42adb5..36b1050fb27d1 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -28,7 +28,19 @@ /obj/item/clothing/suit/space/rig/light name = "suit" breach_threshold = 18 //comparable to voidsuits - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL) + species_restricted = list(SPECIES_HUMAN,SPECIES_IPC) + allowed = list( + /obj/item/gun, + /obj/item/ammo_magazine, + /obj/item/ammo_casing, + /obj/item/melee/baton, + /obj/item/handcuffs, + /obj/item/tank, + /obj/item/device/suit_cooling_unit, + /obj/item/cell + ) + max_w_class = ITEM_SIZE_SMALL + slots = 3 STORAGE_FREEFORM /obj/item/clothing/gloves/rig/light name = "gloves" diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm index f04090c2275d3..c33a1b1d66a3d 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station.dm @@ -443,6 +443,8 @@ /obj/item/tank, /obj/item/device/suit_cooling_unit ) + max_w_class = null + slots = null /obj/item/rig/zero/on_update_icon(var/update_mob_icon) ..() diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index 46f2dd34cd6da..e46e102269542 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -3,21 +3,21 @@ var/list/drones_list = list() /datum/event/rogue_drone/start() - //spawn them at the same place as carp - var/list/possible_spawns = list() - for(var/obj/effect/landmark/C in landmarks_list) - if(C.name == "carpspawn") - possible_spawns.Add(C) - - //25% chance for this to be a false alarm - var/num = 0 - if (length(possible_spawns) && prob(75)) - num = rand(2, 6) - for(var/i=0, i" + else + line += "\t[C], ["\improper[C.holder.rank]"]" + if(!C.is_afk()) + active_staff++ + if(can_investigate) + if(C.is_afk()) + line += " (AFK - [C.inactivity2text()])" + if(isghost(C.mob)) + line += " - Наблюдает" + else if(istype(C.mob,/mob/new_player)) + line += " - Лобби" + else + line += " - Играет" + if(C.is_stealthed()) + line += " (Невидимость)" + if(C.get_preference_value(/datum/client_preference/show_ooc) == GLOB.PREF_HIDE) + line += " (OOC)" + if(C.get_preference_value(/datum/client_preference/show_looc) == GLOB.PREF_HIDE) + line += " (LOOC)" + if(C.get_preference_value(/datum/client_preference/show_aooc) == GLOB.PREF_HIDE) + line += " (AOOC)" + if(C.get_preference_value(/datum/client_preference/show_dsay) == GLOB.PREF_HIDE) + line += " (DSAY)" + line = jointext(line,null) + if(check_rights(R_ADMIN,0,C)) + msg.Insert(1, line) + else + msg += line + + to_chat(src, "Сотрудники [active_staff]/[total_staff]:") + to_chat(src, jointext(msg,"\n"))