diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 47bae889854..cb2d413f5c7 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -359,3 +359,32 @@ beakers += B1 beakers += B2 icon_state = initial(icon_state) +"_locked" + +///Drugs +/obj/item/weapon/grenade/chem_grenade/mine + name = "Satchel mine" + desc = "Привет от синдиката." + path = 1 + stage = 2 + +/obj/item/weapon/grenade/chem_grenade/mine/atom_init() + . = ..() + var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src) + var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src) + if(rand(50)) + B1.reagents.add_reagent("glycerol", 10) + B2.reagents.add_reagent("sacid", 10) + B2.reagents.add_reagent("pacid", 10) + else + B1.reagents.add_reagent("potassium", 30) + B2.reagents.add_reagent("phosphorus", 30) + B2.reagents.add_reagent("sugar", 30) + + B1.reagents.add_reagent("impedrezene", 30) + B2.reagents.add_reagent("condensedcapsaicin", 30) + + detonator = new/obj/item/device/assembly_holder/mousetrap_igniter(src) + + beakers += B1 + beakers += B2 + icon_state = initial(icon_state) +"_locked" diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 3177922c720..92f2e244abe 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -82,6 +82,7 @@ if(M.a_intent == INTENT_HELP) var/dir_target = get_dir(M.loc, over_location) M.SetNextMove(CLICK_CD_MELEE) + try_open(usr) for(var/obj/item/I in contents) if(M.is_busy()) return @@ -424,6 +425,7 @@ //Clicking on itself will empty it, if it has the verb to do that. if(user.get_active_hand() == src) if(verbs.Find(/obj/item/weapon/storage/proc/quick_empty)) + try_open(user) quick_empty() return diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 0c8096592e2..00e3b689532 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -31,10 +31,14 @@ var/new_path = item_to_spawn() if(!new_path) CRASH("Random item [type] was unable to spawn new item via item_to_spawn(), should be impossible") - new new_path(loc) + var/spawned_item = new new_path(loc) + afterspawn(spawned_item) return INITIALIZE_HINT_QDEL // this function should return a specific item to spawn /obj/random/proc/item_to_spawn() return 0 + +/obj/random/proc/afterspawn(obj/O) + return 0 diff --git a/code/game/objects/random/random_misc.dm b/code/game/objects/random/random_misc.dm index f64a1babc5e..724372a6dc3 100644 --- a/code/game/objects/random/random_misc.dm +++ b/code/game/objects/random/random_misc.dm @@ -1,3 +1,4 @@ +#define MINES_IN_BAG 2 /obj/random/misc/pack name = "Random Misc" desc = "This is a random misc pack." @@ -161,3 +162,117 @@ prob(10);/obj/item/weapon/disk/research_points/rare,\ prob(100);pick(typesof(/obj/item/weapon/disk/smartlight_programm)) ) + +/obj/random/misc/minebag/wallet + name = "Random Wallet" + desc = "Кошелёк с миной или обычными деньгами." + icon = 'icons/obj/storage.dmi' + icon_state = "wallet" + +/obj/random/misc/minebag/wallet/item_to_spawn() + return /obj/item/weapon/storage/wallet + +/obj/random/misc/minebag/wallet/afterspawn(obj/item/weapon/storage/Bag) + if(prob(30)) + for(var/i=0, iTimer can't be [ntime<=0?"negative":"more than 1000 seconds"].") else to_chat(usr, "You cannot do this while [usr.stat?"unconscious/dead":"restrained"].") + +//********-Mousetrap +/obj/item/device/assembly_holder/mousetrap_igniter + name = "mousetrap-igniter assembly" + +/obj/item/device/assembly_holder/mousetrap_igniter/atom_init() + . = ..() + + var/obj/item/device/assembly/igniter/ign = new(src) + ign.secured = 1 + ign.holder = src + var/obj/item/device/assembly/mousetrap/mous = new(src) + mous.armed = TRUE + mous.secured = 1 + mous.holder = src + a_left = mous + a_right = ign + secured = 1 + update_icon() diff --git a/code/modules/events/_event_container.dm b/code/modules/events/_event_container.dm index cea672370ac..3976834af84 100644 --- a/code/modules/events/_event_container.dm +++ b/code/modules/events/_event_container.dm @@ -139,6 +139,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_FEATURE = "RoundStart", EV new /datum/event_meta(EVENT_LEVEL_FEATURE, "Roundstart Nothing", /datum/event/nothing, 1500), new /datum/event_meta(EVENT_LEVEL_FEATURE, "Break Light", /datum/event/feature/area/break_light, 50, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_JANITOR = 40)), new /datum/event_meta(EVENT_LEVEL_FEATURE, "Dirt Bay", /datum/event/feature/area/dirt, 10, list(ASSIGNMENT_JANITOR = 100)), + new /datum/event_meta(EVENT_LEVEL_FEATURE, "Satchel Mine", /datum/event/feature/area/satchelmine, 25, list(ASSIGNMENT_SECURITY = 100)), new /datum/event_meta(EVENT_LEVEL_FEATURE, "Randomize Cargo Storage", /datum/event/feature/area/cargo_storage, 10), new /datum/event_meta(EVENT_LEVEL_FEATURE, "Armory Mess", /datum/event/feature/area/mess/armory, 10), new /datum/event_meta(EVENT_LEVEL_FEATURE, "Bridge Mess", /datum/event/feature/area/mess/bridge, 10), diff --git a/code/modules/events/roundstart_events/area/satchelmine.dm b/code/modules/events/roundstart_events/area/satchelmine.dm new file mode 100644 index 00000000000..e44efe15b13 --- /dev/null +++ b/code/modules/events/roundstart_events/area/satchelmine.dm @@ -0,0 +1,20 @@ +/datum/event/feature/area/satchelmine + special_area_types = list(/area/station/hallway, /area/station/civilian) + +/datum/event/feature/area/satchelmine/start() + var/number_of_satchels = rand(1, 3) + for(var/i = 0, i < number_of_satchels, i++) + var/area/target_area = pick(targeted_areas - special_area_types) + message_admins("RoundStart Event: Satchelmine appears in [target_area]") + var/list/tables = list() + for(var/obj/structure/table/Table in target_area) + tables += Table + var/Mine = pick(/obj/random/misc/minebag/wallet, /obj/random/misc/minebag/box_pouch, /obj/random/misc/minebag/backpack_satchel) + if(tables.len) + var/obj/structure/table/Table = pick(tables) + var/turf/T = get_turf(Table) + new Mine(T) + else + var/list/turf/all_turfs = get_area_turfs(target_area, TRUE, black_list=list(/turf/simulated/wall, /turf/simulated/wall/r_wall)) + var/turf/T = pick(all_turfs) + new Mine(T) diff --git a/taucetistation.dme b/taucetistation.dme index a58ff528b9b..990d48e2a73 100644 --- a/taucetistation.dme +++ b/taucetistation.dme @@ -1638,6 +1638,7 @@ #include "code\modules\events\roundstart_events\area\maintenance.dm" #include "code\modules\events\roundstart_events\area\mess.dm" #include "code\modules\events\roundstart_events\area\minefield.dm" +#include "code\modules\events\roundstart_events\area\satchelmine.dm" #include "code\modules\events\roundstart_events\area\replace\deathly_sec.dm" #include "code\modules\events\roundstart_events\area\replace\del_cable.dm" #include "code\modules\events\roundstart_events\area\replace\del_surgeon_tools.dm"