Unapologetic Janitor Buffs (#4006)

This commit is contained in:
LordFowl
2018-01-15 21:25:22 -06:00
committed by Lohikar
parent 79b0531d7d
commit 148ba78e64
20 changed files with 1762 additions and 630 deletions
+3
View File
@@ -538,6 +538,7 @@
#include "code\game\machinery\transformer.dm"
#include "code\game\machinery\turret_control.dm"
#include "code\game\machinery\vending.dm"
#include "code\game\machinery\vending_items.dm"
#include "code\game\machinery\vending_types.dm"
#include "code\game\machinery\wall_frames.dm"
#include "code\game\machinery\washing_machine.dm"
@@ -877,6 +878,7 @@
#include "code\game\objects\items\weapons\tanks\jetpack.dm"
#include "code\game\objects\items\weapons\tanks\tank_types.dm"
#include "code\game\objects\items\weapons\tanks\tanks.dm"
#include "code\game\objects\items\weapons\tanks\watertank.dm"
#include "code\game\objects\random\random.dm"
#include "code\game\objects\structures\banner.dm"
#include "code\game\objects\structures\barsign.dm"
@@ -2251,6 +2253,7 @@
#include "code\modules\vehicles\bike.dm"
#include "code\modules\vehicles\cargo_train.dm"
#include "code\modules\vehicles\droppod.dm"
#include "code\modules\vehicles\pussywagon.dm"
#include "code\modules\vehicles\train.dm"
#include "code\modules\vehicles\vehicle.dm"
#include "code\modules\ventcrawl\ventcrawl.dm"
-29
View File
@@ -200,35 +200,6 @@
H.species.equip_survival_gear(H,1)
return TRUE
/datum/job/janitor
title = "Janitor"
flag = JANITOR
department = "Civilian"
department_flag = CIVILIAN
faction = "Station"
total_positions = 2
spawn_positions = 2
supervisors = "the head of personnel"
selection_color = "#dddddd"
access = list(access_janitor, access_maint_tunnels, access_engine, access_research, access_sec_doors, access_medical)
minimal_access = list(access_janitor, access_maint_tunnels, access_engine, access_research, access_sec_doors, access_medical)
equip(var/mob/living/carbon/human/H)
if(!H)
return FALSE
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/janitor(H), slot_belt)
return TRUE
//More or less assistants
/datum/job/librarian
title = "Librarian"
+30 -2
View File
@@ -18,11 +18,11 @@
access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
access_heads, access_construction, access_sec_doors,
access_heads, access_construction, access_sec_doors, access_janitor,
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload)
minimal_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
access_heads, access_construction, access_sec_doors,
access_heads, access_construction, access_sec_doors, access_janitor,
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload)
minimal_player_age = 7
@@ -134,3 +134,31 @@
return FALSE
H.species.equip_survival_gear(H,1)
return TRUE
/datum/job/janitor
title = "Janitor"
flag = JANITOR
department = "Engineering"
department_flag = ENGSEC
faction = "Station"
total_positions = 2
spawn_positions = 2
supervisors = "the chief engineer"
selection_color = "#fff5cc"
access = list(access_janitor, access_maint_tunnels, access_engine, access_research, access_sec_doors, access_medical)
minimal_access = list(access_janitor, access_maint_tunnels, access_engine, access_research, access_sec_doors, access_medical)
bag_type = /obj/item/weapon/storage/backpack
satchel_type = /obj/item/weapon/storage/backpack/satchel_norm
duffel_type = /obj/item/weapon/storage/backpack/satchel
messenger_bag_type = /obj/item/weapon/storage/backpack/duffel
equip(var/mob/living/carbon/human/H)
if(!H)
return FALSE
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_eng(H), slot_l_ear)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/janitor(H), slot_belt)
return TRUE
+22 -2
View File
@@ -9,6 +9,7 @@
var/product_name = "generic" // Display name for the product
var/product_path = null
var/amount = 0 // Amount held in the vending machine
var/max_amount = 0
var/price = 0 // Price to buy one
var/display_color = null // Display color for vending machine listing
var/category = CAT_NORMAL // CAT_HIDDEN for contraband, CAT_COIN for premium
@@ -95,8 +96,9 @@
var/scan_id = 1
var/obj/item/weapon/coin/coin
var/datum/wires/vending/wires = null
var/can_move = 1 //if you can wrench the machine out of place
var/vend_id = "generic"
/obj/machinery/vending/Initialize()
. = ..()
@@ -137,6 +139,7 @@
product.price = (entry in src.prices) ? src.prices[entry] : 0
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
product.max_amount = product.amount
product.category = category
src.product_records.Add(product)
@@ -246,6 +249,24 @@
anchored = !anchored
return
else if(istype(W,/obj/item/weapon/vending_refill))
if(panel_open)
var/obj/item/weapon/vending_refill/VR = W
if(VR.charges)
if(VR.vend_id == vend_id)
VR.restock_inventory(src)
user << "<span class='notice'>You restock \the [src] with \the [VR]!</span>"
if(!VR.charges)
user << "<span class='warning'>\The [VR] is depleted!</span>"
else
user << "<span class='warning'>\The [VR] is not stocked for this type of vendor!</span>"
else
user << "<span class='warning'>\The [VR] is depleted!</span>"
return
else
user << "<span class='warning'>You must open \the [src]'s maintenance panel first!</span>"
return
else if(!is_borg_item(W))
for(var/datum/data/vending_product/R in product_records)
@@ -254,7 +275,6 @@
qdel(W)
return
..()
else
..()
+100
View File
@@ -0,0 +1,100 @@
/obj/item/weapon/vending_refill
name = "resupply canister"
var/vend_id = "generic"
icon = 'icons/obj/electronic_assemblies.dmi'
icon_state = "setup_medium-open"
item_state = "RPED"
desc = "A vending machine restock cart."
force = 7
throwforce = 10
throw_speed = 1
throw_range = 7
w_class = 3
var/charges = 0
/obj/item/weapon/vending_refill/examine(mob/user)
..()
if(charges > 0)
to_chat(user, "It can restock [charges] item(s).")
else
to_chat(user, "It's empty!")
/obj/item/weapon/vending_refill/proc/restock_inventory(var/obj/machinery/vending/vendor)
if(vendor)
for(var/datum/data/vending_product/product in vendor.product_records)
if(product.amount < product.max_amount)
var/expense = product.max_amount - product.amount
if(charges < expense)
expense = charges
product.amount += expense
charges -= expense
if(!charges)
break
//can refill most vendors from half depleted once.
/obj/item/weapon/vending_refill/booze
name = "booze resupply canister"
vend_id = "booze"
charges = 100 //holy shit that's a lot of booze
/obj/item/weapon/vending_refill/tools
name = "tools resupply canister"
vend_id = "tools"
charges = 25
/obj/item/weapon/vending_refill/coffee
name = "coffee resupply canister"
vend_id = "coffee"
charges = 38
/obj/item/weapon/vending_refill/snack
name = "snacks resupply canister"
vend_id = "snacks"
charges = 38
/obj/item/weapon/vending_refill/cola
name = "cola resupply canister"
vend_id = "cola"
charges = 50
/obj/item/weapon/vending_refill/pda
name = "pdas resupply canister"
vend_id = "pdas"
charges = 38
/obj/item/weapon/vending_refill/smokes
name = "smokes resupply canister"
vend_id = "smokes"
charges = 25
/obj/item/weapon/vending_refill/meds
name = "meds resupply canister"
vend_id = "meds"
charges = 38
/obj/item/weapon/vending_refill/robust
name = "security resupply canister"
vend_id = "security"
charges = 25
/obj/item/weapon/vending_refill/hydro
name = "hydro resupply canister"
vend_id = "hydro"
charges = 23
/obj/item/weapon/vending_refill/seeds
name = "resupply canister"
vend_id = "seeds"
charges = 175
/obj/item/weapon/vending_refill/cutlery
name = "cutlery resupply canister"
vend_id = "cutlery"
charges = 50
/obj/item/weapon/vending_refill/robo
name = "robo-tools resupply canister"
vend_id = "robo-tools"
charges = 38
+50
View File
@@ -22,6 +22,7 @@
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
icon_state = "boozeomat" //////////////18 drink entities below, plus the glasses, in case someone wants to edit the number of bottles
icon_deny = "boozeomat-deny"
vend_id = "booze"
products = list(
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5,
@@ -79,6 +80,7 @@
req_access = list(access_bar)
/obj/machinery/vending/assist
vend_id = "tools"
products = list(
/obj/item/device/assembly/prox_sensor = 5,
/obj/item/device/assembly/igniter = 3,
@@ -101,6 +103,7 @@
vend_delay = 34
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
vend_power_usage = 85000 //85 kJ to heat a 250 mL cup of coffee
vend_id = "coffee"
products = list(
/obj/item/weapon/reagent_containers/food/drinks/coffee = 25,
/obj/item/weapon/reagent_containers/food/drinks/tea = 25,
@@ -122,6 +125,7 @@
product_slogans = "Try our new nougat bar!;Twice the calories for half the price!"
product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!"
icon_state = "snack"
vend_id = "snacks"
products = list(
/obj/item/weapon/reagent_containers/food/snacks/candy = 6,
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 6,
@@ -163,6 +167,7 @@
icon_state = "Cola_Machine"
product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!"
product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in space."
vend_id = "cola"
products = list(
/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 10,
@@ -199,6 +204,7 @@
icon_state = "cart"
icon_deny = "cart-deny"
req_access = list(access_hop)
vend_id = "pdas"
products = list(
/obj/item/weapon/cartridge/medical = 10,
/obj/item/weapon/cartridge/engineering = 10,
@@ -218,6 +224,7 @@
product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs."
vend_delay = 34
icon_state = "cigs"
vend_id = "smokes"
products = list(
/obj/item/weapon/storage/fancy/cigarettes = 10,
/obj/item/weapon/storage/box/matches = 10,
@@ -244,6 +251,7 @@
icon_deny = "med-deny"
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!"
req_access = list(access_medical_equip)
vend_id = "meds"
products = list(
/obj/item/weapon/reagent_containers/glass/bottle/antitoxin = 4,
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline = 4,
@@ -270,6 +278,7 @@
/obj/machinery/vending/phoronresearch
name = "Toximate 3000"
desc = "All the fine parts you need in one vending machine!"
vend_id = "bomba"
products = list(
/obj/item/clothing/under/rank/scientist = 6,
/obj/item/clothing/suit/bio_suit = 6,
@@ -289,6 +298,7 @@
icon_deny = "wallmed-deny"
req_access = list(access_medical)
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
vend_id = "meds"
products = list(
/obj/item/stack/medical/bruise_pack = 2,
/obj/item/stack/medical/ointment = 2,
@@ -308,6 +318,7 @@
icon_deny = "wallmed-deny"
req_access = list(access_medical)
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
vend_id = "meds"
products = list(
/obj/item/weapon/reagent_containers/hypospray/autoinjector = 5,
/obj/item/weapon/reagent_containers/syringe/antitoxin = 3,
@@ -326,6 +337,7 @@
icon_state = "sec"
icon_deny = "sec-deny"
req_access = list(access_security)
vend_id = "security"
products = list(
/obj/item/weapon/handcuffs = 8,
/obj/item/weapon/grenade/chem_grenade/teargas = 4,
@@ -349,6 +361,7 @@
product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..."
icon_state = "nutri"
icon_deny = "nutri-deny"
vend_id = "hydro"
products = list(
/obj/item/weapon/reagent_containers/glass/fertilizer/ez = 6,
/obj/item/weapon/reagent_containers/glass/fertilizer/l4z = 5,
@@ -373,6 +386,7 @@
product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!"
product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!"
icon_state = "seeds"
vend_id = "seeds"
products = list(
/obj/item/seeds/bananaseed = 3,
@@ -493,6 +507,7 @@
vend_delay = 15
vend_reply = "Have an enchanted evening!"
product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!"
vend_id = "magic"
products = list(
/obj/item/clothing/head/wizard = 1,
/obj/item/clothing/suit/wizrobe = 1,
@@ -510,6 +525,7 @@
desc = "A kitchen and restaurant equipment vendor."
product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..."
icon_state = "dinnerware"
vend_id = "cutlery"
products = list(
/obj/item/weapon/tray = 8,
/obj/item/weapon/material/kitchen/utensil/fork = 6,
@@ -532,6 +548,7 @@
name = "BODA"
desc = "An old sweet water vending machine,how did this end up here?"
icon_state = "sovietsoda"
vend_id = "cola"
product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
products = list(
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda = 30
@@ -550,6 +567,7 @@
desc = "Tools for tools."
icon_state = "tool"
icon_deny = "tool-deny"
vend_id = "tools"
//req_access = list(access_maint_tunnels) //Maintenance access
products = list(
/obj/item/stack/cable_coil/random = 10,
@@ -575,6 +593,7 @@
icon_state = "engivend"
icon_deny = "engivend-deny"
req_access = list(access_engine_equip)
vend_id = "tools"
products = list(
/obj/item/clothing/glasses/meson = 2,
/obj/item/device/multitool = 4,
@@ -597,6 +616,7 @@
icon_state = "tact"
icon_deny = "tact-deny"
req_access = list(access_security)
vend_id = "tactical"
products = list(
/obj/item/weapon/storage/box/shotgunammo = 2,
/obj/item/weapon/storage/box/shotgunshells = 2,
@@ -616,6 +636,7 @@
icon_state = "tact"
icon_deny = "tact-deny"
req_access = list(access_security)
vend_id = "ert"
products = list(
/obj/item/weapon/storage/box/shotgunammo = 2,
/obj/item/weapon/storage/box/shotgunshells = 2,
@@ -639,6 +660,7 @@
icon_state = "engi"
icon_deny = "engi-deny"
req_access = list(access_engine_equip)
vend_id = "tools"
products = list(
/obj/item/clothing/under/rank/chief_engineer = 4,
/obj/item/clothing/under/rank/engineer = 4,
@@ -676,6 +698,7 @@
icon_state = "robotics"
icon_deny = "robotics-deny"
req_access = list(access_robotics)
vend_id = "robo-tools"
products = list(
/obj/item/clothing/suit/storage/toggle/labcoat = 4,
/obj/item/clothing/under/rank/roboticist = 4,
@@ -699,6 +722,7 @@
name = "prop dispenser"
desc = "All the props an actor could need. Probably."
icon_state = "Theater"
vend_id = "baygay"
products = list(
/obj/structure/flora/pottedplant = 2,
/obj/item/device/flashlight/lamp = 2,
@@ -715,8 +739,34 @@
name = "container dispenser"
desc = "A container that dispenses containers."
icon_state = "robotics"
vend_id = "baygay"
products = list(
/obj/structure/closet/crate/freezer = 2,
/obj/structure/closet = 3,
/obj/structure/closet/crate = 3
)
//RECURSION
/obj/machinery/vending/vendors
name = "Omni-Vendor"
desc = "The mother of all vendors, from which vending itself comes!"
icon_state = "engivend"
icon_deny = "engivend-deny"
vend_id = "admin"
req_access = list(access_janitor)
products = list(
/obj/item/weapon/vending_refill/booze = 1,
/obj/item/weapon/vending_refill/tools = 1,
/obj/item/weapon/vending_refill/coffee = 1,
/obj/item/weapon/vending_refill/snack = 1,
/obj/item/weapon/vending_refill/cola = 1,
/obj/item/weapon/vending_refill/pda = 1,
/obj/item/weapon/vending_refill/smokes = 1,
/obj/item/weapon/vending_refill/meds = 1,
/obj/item/weapon/vending_refill/robust = 1,
/obj/item/weapon/vending_refill/hydro = 1,
/obj/item/weapon/vending_refill/cutlery = 1,
/obj/item/weapon/vending_refill/robo = 1
)
+1 -1
View File
@@ -4,7 +4,7 @@
//Added by Jack Rost
/obj/item/trash
icon = 'icons/obj/trash.dmi'
w_class = 2.0
w_class = 1.0
desc = "This is rubbish."
/obj/item/trash/koisbar
@@ -37,15 +37,16 @@
w_class = 4
max_w_class = 2
max_storage_space = 56
can_hold = null // any
cant_hold = list(/obj/item/weapon/disk/nuclear)
/obj/item/weapon/storage/bag/trash/update_icon()
if(contents.len == 0)
icon_state = "trashbag0"
else if(contents.len < 12)
icon_state = "trashbag1"
else if(contents.len < 21)
icon_state = "trashbag1"
else if(contents.len < 42)
icon_state = "trashbag2"
else icon_state = "trashbag3"
@@ -230,7 +230,11 @@
/obj/item/device/lightreplacer,
/obj/item/device/flashlight,
/obj/item/weapon/reagent_containers/spray,
/obj/item/weapon/soap
/obj/item/weapon/soap,
/obj/item/weapon/storage/bag/trash,
/obj/item/weapon/screwdriver,
/obj/item/weapon/wrench,
/obj/item/weapon/crowbar
)
/obj/item/weapon/storage/belt/wands
@@ -0,0 +1,149 @@
/obj/item/watertank
name = "backpack water tank"
desc = "A watertank backpack with nozzle to clean dirt and graffiti."
icon = 'icons/obj/hydro_equipment.dmi'
icon_state = "waterpack"
item_state = "waterpack"
contained_sprite = 1
w_class = 3
slot_flags = SLOT_BACK
var/obj/item/weapon/reagent_containers/spray/chemsprayer/mister/noz
var/on = FALSE
var/volume = 500
/obj/item/watertank/Initialize()
. = ..()
create_reagents(volume)
noz = make_noz()
noz.tank = src
noz.reagents = reagents
noz.loc = src
/obj/item/watertank/ui_action_click()
toggle_mister()
/obj/item/watertank/verb/toggle_mister()
set name = "Toggle Mister"
set category = "Object"
var/mob/living/carbon/human/user
if(istype(usr,/mob/living/carbon/human))
user = usr
else
return
if(!user)
return
if (user.back!= src)
to_chat(user, "<span class='warning'>The watertank must be worn properly to use!</span>")
return
if(use_check(user))
return
on = !on
if(on)
if(!noz)
noz = make_noz()
noz.tank = src
noz.reagents = reagents
noz.loc = src
//Detach the nozzle into the user's hands
if(!user.put_in_hands(noz))
on = FALSE
to_chat(user, "<span class='warning'>You need a free hand to hold the mister!</span>")
return
noz.loc = user
else
//Remove from their hands and put back "into" the tank
remove_noz()
return
/obj/item/watertank/proc/make_noz()
return new /obj/item/weapon/reagent_containers/spray/chemsprayer/mister()
/obj/item/watertank/equipped(mob/user, slot)
..()
if(slot != slot_back)
remove_noz()
/obj/item/watertank/proc/remove_noz()
if(!noz)
noz = make_noz()
noz.tank = src
noz.reagents = reagents
noz.loc = src
if(ismob(noz.loc))
var/mob/M = noz.loc
M.drop_from_inventory(noz)
noz.loc = src
return
/obj/item/watertank/Destroy()
qdel(noz)
noz = null
return ..()
/obj/item/watertank/attackby(obj/item/W, mob/user, params)
if(W == noz)
remove_noz()
return 1
else
return ..()
/obj/item/weapon/reagent_containers/spray/chemsprayer/mister
name = "water mister"
desc = "A mister nozzle attached to a water tank."
icon = 'icons/obj/hydro_equipment.dmi'
icon_state = "mister"
item_state = "mister"
contained_sprite = 1
w_class = 3
amount_per_transfer_from_this = 50
volume = 500
slot_flags = 0
var/obj/item/watertank/tank
/obj/item/weapon/reagent_containers/spray/chemsprayer/mister/dropped(mob/user)
..()
to_chat(user, "<span class='notice'>The mister snaps back onto the watertank.</span>")
tank.on = 0
forceMove(tank)
/obj/item/weapon/reagent_containers/spray/chemsprayer/mister/attack_self()
return
/obj/item/weapon/reagent_containers/spray/chemsprayer/mister/Move()
..()
if(loc != tank.loc)
forceMove(tank.loc)
/obj/item/weapon/reagent_containers/spray/chemsprayer/mister/afterattack(obj/target, mob/user, proximity)
if(target.loc == loc) //Safety check so you don't fill your mister with mutagen or something and then blast yourself in the face with it
return
..()
//Janitor tank
/obj/item/watertank/janitor
name = "backpack water tank"
desc = "A janitorial watertank backpack with nozzle to clean dirt and graffiti."
icon_state = "waterpackjani"
item_state = "waterpackjani"
/obj/item/watertank/janitor/Initialize()
..()
reagents.add_reagent("cleaner", 500)
/obj/item/weapon/reagent_containers/spray/chemsprayer/mister/janitor
name = "janitor spray nozzle"
desc = "A janitorial spray nozzle attached to a watertank, designed to clean up large messes."
icon_state = "misterjani"
item_state = "misterjani"
amount_per_transfer_from_this = 5
possible_transfer_amounts = list()
/obj/item/watertank/janitor/make_noz()
return new /obj/item/weapon/reagent_containers/spray/chemsprayer/mister/janitor(src)
/obj/item/weapon/reagent_containers/spray/chemsprayer/mister/janitor/attack_self(var/mob/user)
amount_per_transfer_from_this = (amount_per_transfer_from_this == 10 ? 5 : 10)
to_chat(user, "<span class='notice'>You [amount_per_transfer_from_this == 10 ? "remove" : "fix"] the nozzle. You'll now use [amount_per_transfer_from_this] units per spray.</span>")
@@ -62,11 +62,10 @@
/obj/structure/closet/jcloset/fill()
new /obj/item/clothing/under/rank/janitor(src)
new /obj/item/device/radio/headset/headset_service(src)
new /obj/item/device/radio/headset/headset_eng(src)
new /obj/item/weapon/cartridge/janitor(src)
new /obj/item/clothing/gloves/black(src)
new /obj/item/clothing/head/soft/purple(src)
new /obj/item/clothing/head/beret/purple(src)
new /obj/item/device/flashlight(src)
new /obj/item/weapon/caution(src)
new /obj/item/weapon/caution(src)
@@ -81,6 +80,8 @@
new /obj/item/weapon/grenade/chem_grenade/cleaner(src)
new /obj/item/weapon/grenade/chem_grenade/cleaner(src)
new /obj/item/weapon/reagent_containers/spray/cleaner(src)
new /obj/item/weapon/reagent_containers/glass/rag(src)
new /obj/item/weapon/soap/nanotrasen(src)
/*
* Lawyer
+1 -127
View File
@@ -302,130 +302,4 @@
has_items = 1
if(signs)
add_overlay("cart_sign[signs]")
has_items = 1
//old style retardo-cart
/obj/structure/bed/chair/janicart
name = "janicart"
icon = 'icons/obj/vehicles.dmi'
icon_state = "pussywagon"
anchored = 1
density = 1
flags = OPENCONTAINER
//copypaste sorry
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
var/obj/item/weapon/storage/bag/trash/mybag = null
var/callme = "pimpin' ride" //how do people refer to it?
/obj/structure/bed/chair/janicart/New()
create_reagents(100)
/obj/structure/bed/chair/janicart/examine(mob/user)
if(!..(user, 1))
return
user << "\icon[src] This [callme] contains [reagents.total_volume] unit\s of water!"
if(mybag)
user << "\A [mybag] is hanging on the [callme]."
/obj/structure/bed/chair/janicart/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/weapon/mop))
if(reagents.total_volume > 1)
reagents.trans_to_obj(I, 2)
user << "<span class='notice'>You wet [I] in the [callme].</span>"
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
else
user << "<span class='notice'>This [callme] is out of water!</span>"
else if(istype(I, /obj/item/key))
user << "Hold [I] in one of your hands while you drive this [callme]."
else if(istype(I, /obj/item/weapon/storage/bag/trash))
user << "<span class='notice'>You hook the trashbag onto the [callme].</span>"
user.drop_item()
I.loc = src
mybag = I
/obj/structure/bed/chair/janicart/attack_hand(mob/user)
if(mybag)
mybag.loc = get_turf(user)
user.put_in_hands(mybag)
mybag = null
else
..()
/obj/structure/bed/chair/janicart/relaymove(mob/user, direction)
if(user.stat || user.stunned || user.weakened || user.paralysis)
unbuckle_mob()
if(istype(user.l_hand, /obj/item/key) || istype(user.r_hand, /obj/item/key))
step(src, direction)
update_mob()
else
user << "<span class='notice'>You'll need the keys in one of your hands to drive this [callme].</span>"
/obj/structure/bed/chair/janicart/Move()
..()
if(buckled_mob)
if(buckled_mob.buckled == src)
buckled_mob.loc = loc
/obj/structure/bed/chair/janicart/post_buckle_mob(mob/living/M)
update_mob()
return ..()
/obj/structure/bed/chair/janicart/unbuckle_mob()
var/mob/living/M = ..()
if(M)
M.pixel_x = 0
M.pixel_y = 0
return M
/obj/structure/bed/chair/janicart/set_dir()
..()
if(buckled_mob)
if(buckled_mob.loc != loc)
buckled_mob.buckled = null //Temporary, so Move() succeeds.
buckled_mob.buckled = src //Restoring
update_mob()
/obj/structure/bed/chair/janicart/proc/update_mob()
if(buckled_mob)
buckled_mob.set_dir(dir)
switch(dir)
if(SOUTH)
buckled_mob.pixel_x = 0
buckled_mob.pixel_y = 7
if(WEST)
buckled_mob.pixel_x = 13
buckled_mob.pixel_y = 7
if(NORTH)
buckled_mob.pixel_x = 0
buckled_mob.pixel_y = 4
if(EAST)
buckled_mob.pixel_x = -13
buckled_mob.pixel_y = 7
/obj/structure/bed/chair/janicart/bullet_act(var/obj/item/projectile/Proj)
if(buckled_mob)
if(prob(85))
return buckled_mob.bullet_act(Proj)
visible_message("<span class='warning'>[Proj] ricochets off the [callme]!</span>")
/obj/item/key
name = "key"
desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"."
icon = 'icons/obj/vehicles.dmi'
icon_state = "keys"
w_class = 1
has_items = 1
+4
View File
@@ -145,6 +145,10 @@
desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\""
icon_state = "kiddieplaque"
/obj/structure/sign/kiddieplaque/janitor
desc = "A humble wooden plaque. In simple lettering begin the words: \"Primum non sordes\"."
name = "\improper Janitorial Oath"
/obj/structure/sign/atmosplaque
name = "\improper FEA atmospherics division plaque"
desc = "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands."
+1 -1
View File
@@ -596,7 +596,7 @@
add_overlay(I)
turn_off() //so engine verbs are correctly set
/obj/vehicle/train/cargo/engine/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/vehicle/train/cargo/engine/mining/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/key/minecarts))
if(!key)
user.drop_item()
+212
View File
@@ -0,0 +1,212 @@
/obj/vehicle/train/cargo/engine/pussywagon
name = "janicart deluxe engine"
desc = "The engine for the janicart deluxe trolley, the bread to your butter."
icon = 'icons/obj/vehicles.dmi'
icon_state = "janicart_off"
move_delay = 3
mob_offset_y = 7
load_offset_x = -13
var/cart_icon = "janicart"
/obj/item/weapon/key/janicart
name = "key"
desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"."
icon = 'icons/obj/vehicles.dmi'
icon_state = "keys"
w_class = 1
/obj/vehicle/train/cargo/engine/pussywagon/Initialize()
. = ..()
cell = new /obj/item/weapon/cell/high(src)
key = null
update_icon()
turn_off() //so engine verbs are correctly set
/obj/vehicle/train/cargo/engine/pussywagon/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/key/janicart))
if(!key)
user.drop_item()
W.forceMove(src)
key = W
verbs += /obj/vehicle/train/cargo/engine/verb/remove_key
return
..()
/obj/vehicle/train/cargo/engine/pussywagon/turn_on()
if(!key)
return
else
..()
update_stats()
verbs += /obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_mop
verbs += /obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_hoover
/obj/vehicle/train/cargo/engine/pussywagon/turn_off()
..()
if(tow)
if(istype(tow,/obj/vehicle/train/cargo/trolley/pussywagon))
var/obj/vehicle/train/cargo/trolley/pussywagon/PW = tow
if(PW.mopping)
PW.mop_toggle()
if(PW.hoover)
PW.hoover_toggle()
verbs -= /obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_mop
verbs -= /obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_hoover
/obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_mop()
set name = "Toggle Mop-o-matic"
set category = "Vehicle"
set src in view(0)
if(usr.incapacitated())
return
if(on && tow)
if(istype(tow,/obj/vehicle/train/cargo/trolley/pussywagon))
var/obj/vehicle/train/cargo/trolley/pussywagon/PW = tow
if(!PW.bucket)
usr << "<span class='warning'>You must insert a reagent container first!</span>"
return
PW.mop_toggle()
/obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_hoover()
set name = "Toggle Space Hoover"
set category = "Vehicle"
set src in view(0)
if(usr.incapacitated())
return
if(on && tow)
if(istype(tow,/obj/vehicle/train/cargo/trolley/pussywagon))
var/obj/vehicle/train/cargo/trolley/pussywagon/PW = tow
PW.hoover_toggle()
/obj/vehicle/train/cargo/engine/pussywagon/update_icon()
cut_overlays()
if(on)
add_overlay(image('icons/obj/vehicles.dmi', "[cart_icon]_on_overlay", MOB_LAYER + 1))
icon_state = "[cart_icon]_on"
else
add_overlay(image('icons/obj/vehicles.dmi', "[cart_icon]_off_overlay", MOB_LAYER + 1))
icon_state = "[cart_icon]_off"
..()
/obj/vehicle/train/cargo/engine/pussywagon/Move(var/turf/destination)
switch(dir)
if(NORTH)
mob_offset_y = 7
load_offset_x = 0
load.pixel_y = mob_offset_y
load.pixel_x = load_offset_x
if(SOUTH)
mob_offset_y = 7
load_offset_x = 0
load.pixel_y = mob_offset_y
load.pixel_x = load_offset_x
if(EAST)
mob_offset_y = 7
load_offset_x = -13
load.pixel_y = mob_offset_y
load.pixel_x = load_offset_x
if(WEST)
mob_offset_y = 7
load_offset_x = 13
load.pixel_y = mob_offset_y
load.pixel_x = load_offset_x
..()
/obj/vehicle/train/cargo/trolley/pussywagon
name = "janicart deluxe trolley"
desc = "The trolley of the janicart deluxe, equipped with dual rotary mop and a NT-X1 Vacuum Cleaner."
icon = 'icons/obj/vehicles.dmi'
icon_state = "jantrolley"
var/obj/item/weapon/reagent_containers/bucket
var/list/hoovered = list()
var/vacuum_capacity = 125
var/mopping = 0
var/hoover = 0
/obj/vehicle/train/cargo/trolley/pussywagon/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/reagent_containers) && open)
if(!bucket)
user.drop_item()
bucket = W
W.forceMove(src)
user << "<span class='notice'>You replace \the [src]'s reagent reservoir.</span>"
return
if(iswrench(W) && open)
if(bucket)
bucket.forceMove(user.loc)
bucket = null
user << "<span class='notice'>You remove \the [src]'s reagent reservoir.</span>"
return
if(iscrowbar(W) && !open)
if(bucket)
for(var/obj/item/I in hoovered)
I.forceMove(user.loc)
hoovered -= I
vacuum_capacity = 125
user << "<span class='notice'>You empty \the [src]'s vacuum cleaner.</span>"
return
..()
/obj/vehicle/train/cargo/trolley/pussywagon/Move(var/turf/destination)
if(lead)
var/turf/tile = loc
if(mopping && bucket)
if(isturf(tile))
if(bucket.reagents.total_volume > 1)
tile.clean(bucket)
lead.cell.use(charge_use, load)
else
mop_toggle()
if(hoover)
var/current_len = hoovered.len
for(var/obj/item/I in tile)
if(I.w_class <= 2.0 && !I.anchored && (vacuum_capacity -= w_class >= 0))
I.forceMove(src)
hoovered += I
vacuum_capacity -= I.w_class
lead.cell.use(charge_use)
if(!vacuum_capacity)
hoover_toggle()
if(hoovered.len > current_len)
playsound(src, 'sound/machines/disposalflush.ogg', 100, 1)
return ..()
/obj/vehicle/train/cargo/trolley/pussywagon/proc/mop_toggle()
if(!mopping)
mopping = 1
src.visible_message("\The [src]'s mop-o-matic rumbles to life.", "You hear something rumble deeply.")
playsound(src, 'sound/machines/hydraulic_long.ogg', 100, 1)
else
mopping = 0
src.visible_message("\The [src]'s mop-o-matic putters before turning off.", "You hear something putter slowly.")
update_icon()
/obj/vehicle/train/cargo/trolley/pussywagon/proc/hoover_toggle()
if(!hoover)
hoover = 1
src.visible_message("\The [src]'s space hoover rumbles to life.", "You hear something rumble deeply.")
playsound(src, 'sound/machines/hydraulic_long.ogg', 100, 1)
else
hoover = 0
src.visible_message("\The [src]'s space hoover putters before turning off.", "You hear something putter slowly.")
update_icon()
/obj/vehicle/train/cargo/trolley/pussywagon/update_icon()
cut_overlays()
if(mopping)
add_overlay(image('icons/obj/vehicles.dmi', "[icon_state]_mop_overlay", MOB_LAYER + 1))
+40
View File
@@ -0,0 +1,40 @@
################################
# 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
# balance
#################################
# Your name.
author: LordFowl
# 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:
- rscadd: "Added vending machine restockers, which can be used to restock vending machines. Can be ordered from cargo with a custodial ID."
- rscadd: "Added the janicart deluxe, a multi-object vehicle that can be used to clean wide swathes of area with its turbomop and space hoover attachments."
- rscadd: "Added backmounted chemsprayers."
- tweak: "Janitors have been moved from civilian to engineering."
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because it is too large Load Diff
-3
View File
@@ -15263,9 +15263,6 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/start{
name = "Janitor"
},
/turf/simulated/floor/plating,
/area/hallway/secondary/entry/aft)
"Cj" = (