mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-29 23:17:28 +01:00
Merge branch 'master' into shadow_fluff
This commit is contained in:
@@ -70,10 +70,6 @@
|
||||
if(istype(W, /obj/item/device/pipe_painter))
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/device/analyzer) && in_range(user, src))
|
||||
var/obj/item/device/analyzer/A = W
|
||||
A.analyze_gases(src, user)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/air
|
||||
name = "Pressure Tank (Air)"
|
||||
icon_state = "air_map"
|
||||
|
||||
+7
-4
@@ -141,8 +141,9 @@
|
||||
return 1
|
||||
|
||||
/obj/machinery/turretid/AICtrlClick() //turns off/on Turrets
|
||||
Topic(src, list("command"="enable", "value"="[!enabled]"))
|
||||
return 1
|
||||
enabled = !enabled
|
||||
updateTurrets()
|
||||
return TRUE
|
||||
|
||||
/atom/proc/AIAltClick(var/atom/A)
|
||||
return AltClick(A)
|
||||
@@ -156,8 +157,10 @@
|
||||
return 1
|
||||
|
||||
/obj/machinery/turretid/AIAltClick() //toggles lethal on turrets
|
||||
Topic(src, list("command"="lethal", "value"="[!lethal]"))
|
||||
return 1
|
||||
if(lethal_is_configurable)
|
||||
lethal = !lethal
|
||||
updateTurrets()
|
||||
return TRUE
|
||||
|
||||
/atom/proc/AIMiddleClick(var/mob/living/silicon/user)
|
||||
return 0
|
||||
|
||||
@@ -515,7 +515,7 @@
|
||||
if("Show Crew Manifest")
|
||||
if(isAI(usr))
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
AI.ai_roster()
|
||||
AI.subsystem_crew_manifest()
|
||||
|
||||
if("Show Alerts")
|
||||
if(isAI(usr))
|
||||
@@ -540,12 +540,14 @@
|
||||
if("PDA - Send Message")
|
||||
if(isAI(usr))
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
AI.aiPDA.cmd_send_pdamesg(usr)
|
||||
AI.aiPDA.start_program(AI.aiPDA.find_program(/datum/data/pda/app/messenger))
|
||||
AI.aiPDA.cmd_pda_open_ui(usr)
|
||||
|
||||
if("PDA - Show Message Log")
|
||||
if(isAI(usr))
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
AI.aiPDA.cmd_show_message_log(usr)
|
||||
AI.aiPDA.start_program(AI.aiPDA.find_program(/datum/data/pda/app/messenger))
|
||||
AI.aiPDA.cmd_pda_open_ui(usr)
|
||||
|
||||
if("Take Image")
|
||||
if(isAI(usr))
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
SUBSYSTEM_DEF(nanoui)
|
||||
name = "NanoUI"
|
||||
wait = 5
|
||||
flags = SS_NO_INIT
|
||||
// a list of current open /nanoui UIs, grouped by src_object and ui_key
|
||||
var/list/open_uis = list()
|
||||
// a list of current open /nanoui UIs, not grouped, for use in processing
|
||||
var/list/processing_uis = list()
|
||||
|
||||
/datum/controller/subsystem/nanoui/Recover()
|
||||
if(SSnanoui.open_uis)
|
||||
open_uis |= SSnanoui.open_uis
|
||||
if(SSnanoui.processing_uis)
|
||||
processing_uis |= SSnanoui.processing_uis
|
||||
|
||||
/datum/controller/subsystem/nanoui/stat_entry()
|
||||
return ..("[processing_uis.len] UIs")
|
||||
|
||||
/datum/controller/subsystem/nanoui/fire(resumed)
|
||||
for(var/thing in processing_uis)
|
||||
var/datum/nanoui/UI = thing
|
||||
UI.process()
|
||||
@@ -31,7 +31,7 @@ SUBSYSTEM_DEF(persistence)
|
||||
return
|
||||
|
||||
// if((!T.z in GLOB.using_map.station_levels) || !initialized)
|
||||
if(!T.z in using_map.station_levels)
|
||||
if(!(T.z in using_map.station_levels))
|
||||
return
|
||||
|
||||
if(!tracking_values[track_type])
|
||||
|
||||
@@ -31,5 +31,5 @@
|
||||
weakref = null // Clear this reference to ensure it's kept for as brief duration as possible.
|
||||
|
||||
tag = null
|
||||
SSnanoui.close_uis(src)
|
||||
SStgui.close_uis(src)
|
||||
return QDEL_HINT_QUEUE
|
||||
|
||||
@@ -85,7 +85,6 @@
|
||||
current.verbs -= /datum/changeling/proc/EvolutionMenu
|
||||
current.mind = null
|
||||
|
||||
SSnanoui.user_transferred(current, new_character) // transfer active NanoUI instances to new user
|
||||
if(new_character.mind) //remove any mind currently in our new body's mind variable
|
||||
new_character.mind.current = null
|
||||
|
||||
|
||||
@@ -73,3 +73,13 @@
|
||||
name = "Integrated Surge Implant"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/surge
|
||||
|
||||
/datum/uplink_item/item/implants/imp_armblade
|
||||
name = "Integrated Armblade Implant"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/armblade
|
||||
|
||||
/datum/uplink_item/item/implants/imp_handblade
|
||||
name = "Integrated Handblade Implant"
|
||||
item_cost = 25
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/imp_aug/handblade
|
||||
|
||||
@@ -51,7 +51,7 @@ var/datum/uplink/uplink = new()
|
||||
if(!can_buy(U))
|
||||
return
|
||||
|
||||
if(U.CanUseTopic(user, inventory_state) != STATUS_INTERACTIVE)
|
||||
if(U.CanUseTopic(user, GLOB.tgui_inventory_state) != STATUS_INTERACTIVE)
|
||||
return
|
||||
|
||||
var/cost = cost(U.uses, U)
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("called", "rang")
|
||||
hitsound = 'sound/weapons/ring.ogg'
|
||||
drop_sound = 'sound/items/drop/device.ogg'
|
||||
pickup_sound = 'sound/items/pickup/device.ogg'
|
||||
|
||||
/obj/item/weapon/rsp
|
||||
name = "\improper Rapid-Seed-Producer (RSP)"
|
||||
@@ -22,6 +24,8 @@
|
||||
var/stored_matter = 0
|
||||
var/mode = 1
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
drop_sound = 'sound/items/drop/device.ogg'
|
||||
pickup_sound = 'sound/items/pickup/device.ogg'
|
||||
|
||||
/obj/item/weapon/soap
|
||||
name = "soap"
|
||||
@@ -35,7 +39,6 @@
|
||||
throwforce = 0
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
drop_sound = 'sound/misc/slip.ogg'
|
||||
|
||||
/obj/item/weapon/soap/nanotrasen
|
||||
desc = "A NanoTrasen-brand bar of soap. Smells of phoron."
|
||||
@@ -149,6 +152,8 @@
|
||||
throw_range = 20
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 100)
|
||||
origin_tech = list(TECH_MAGNET = 1)
|
||||
drop_sound = 'sound/items/drop/device.ogg'
|
||||
pickup_sound = 'sound/items/pickup/device.ogg'
|
||||
|
||||
/obj/item/weapon/staff
|
||||
name = "wizards staff"
|
||||
@@ -196,6 +201,8 @@
|
||||
item_state = "std_mod"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/mtype = 1 // 1=electronic 2=hardware
|
||||
drop_sound = 'sound/items/drop/component.ogg'
|
||||
pickup_sound = 'sound/items/pickup/component.ogg'
|
||||
|
||||
/obj/item/weapon/module/card_reader
|
||||
name = "card reader module"
|
||||
@@ -227,7 +234,6 @@
|
||||
item_state = "std_mod"
|
||||
desc = "Charging circuits for power cells."
|
||||
|
||||
|
||||
/obj/item/device/camera_bug
|
||||
name = "camera bug"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
@@ -303,6 +309,8 @@
|
||||
display_contents_with_number = 1
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
max_storage_space = 100
|
||||
drop_sound = 'sound/items/drop/device.ogg'
|
||||
pickup_sound = 'sound/items/pickup/device.ogg'
|
||||
|
||||
/obj/item/weapon/storage/part_replacer/adv
|
||||
name = "advanced rapid part exchange device"
|
||||
@@ -326,7 +334,8 @@
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/rating = 1
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
drop_sound = 'sound/items/drop/component.ogg'
|
||||
pickup_sound = 'sound/items/pickup/component.ogg'
|
||||
|
||||
/obj/item/weapon/stock_parts/New()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
|
||||
@@ -286,5 +286,5 @@ var/global/list/changeling_fabricated_clothing = list(
|
||||
if(!registered_user)
|
||||
registered_user = usr
|
||||
usr.set_id_info(src)
|
||||
ui_interact(registered_user)
|
||||
tgui_interact(registered_user)
|
||||
..()
|
||||
@@ -260,7 +260,7 @@ update_flag
|
||||
|
||||
..()
|
||||
|
||||
SSnanoui.update_uis(src) // Update all NanoUIs attached to src
|
||||
SStgui.update_uis(src) // Update all NanoUIs attached to src
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/attack_ai(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
@@ -136,12 +136,6 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Nothing happens.</span>")
|
||||
return
|
||||
|
||||
else if ((istype(W, /obj/item/device/analyzer)) && Adjacent(user))
|
||||
var/obj/item/device/analyzer/A = W
|
||||
A.analyze_gases(src, user)
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -92,8 +92,11 @@
|
||||
var/blocked = 0 //Player cannot attack/heal while set
|
||||
var/turtle = 0
|
||||
|
||||
/obj/machinery/computer/arcade/battle/New()
|
||||
..()
|
||||
/obj/machinery/computer/arcade/battle/Initialize()
|
||||
. = ..()
|
||||
randomize_characters()
|
||||
|
||||
/obj/machinery/computer/arcade/battle/proc/randomize_characters()
|
||||
var/name_action
|
||||
var/name_part1
|
||||
var/name_part2
|
||||
@@ -111,17 +114,17 @@
|
||||
if(..())
|
||||
return
|
||||
user.set_machine(src)
|
||||
ui_interact(user)
|
||||
tgui_interact(user)
|
||||
|
||||
/**
|
||||
* Display the NanoUI window for the arcade machine.
|
||||
*
|
||||
* See NanoUI documentation for details.
|
||||
*/
|
||||
/obj/machinery/computer/arcade/battle/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
user.set_machine(src)
|
||||
/obj/machinery/computer/arcade/battle/tgui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "ArcadeBattle", name)
|
||||
ui.open()
|
||||
|
||||
var/list/data = list()
|
||||
/obj/machinery/computer/arcade/battle/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
|
||||
var/list/data = ..()
|
||||
data["name"] = name
|
||||
data["temp"] = temp
|
||||
data["enemyAction"] = enemy_action
|
||||
data["enemyName"] = enemy_name
|
||||
@@ -129,59 +132,54 @@
|
||||
data["playerMP"] = player_mp
|
||||
data["enemyHP"] = enemy_hp
|
||||
data["gameOver"] = gameover
|
||||
return data
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "arcade_battle.tmpl", src.name, 400, 300)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
//ui.set_auto_update(2)
|
||||
|
||||
/obj/machinery/computer/arcade/battle/Topic(href, href_list)
|
||||
/obj/machinery/computer/arcade/battle/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
|
||||
if(..())
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
if (!blocked && !gameover)
|
||||
if (href_list["attack"])
|
||||
blocked = 1
|
||||
var/attackamt = rand(2,6)
|
||||
temp = "You attack for [attackamt] damage!"
|
||||
playsound(src, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE)
|
||||
if(turtle > 0)
|
||||
turtle--
|
||||
if(!blocked && !gameover)
|
||||
switch(action)
|
||||
if("attack")
|
||||
blocked = 1
|
||||
var/attackamt = rand(2,6)
|
||||
temp = "You attack for [attackamt] damage!"
|
||||
playsound(src, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE)
|
||||
if(turtle > 0)
|
||||
turtle--
|
||||
|
||||
sleep(10)
|
||||
enemy_hp -= attackamt
|
||||
arcade_action()
|
||||
sleep(10)
|
||||
enemy_hp -= attackamt
|
||||
arcade_action()
|
||||
|
||||
else if (href_list["heal"])
|
||||
blocked = 1
|
||||
var/pointamt = rand(1,3)
|
||||
var/healamt = rand(6,8)
|
||||
temp = "You use [pointamt] magic to heal for [healamt] damage!"
|
||||
playsound(src, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE)
|
||||
turtle++
|
||||
if("heal")
|
||||
blocked = 1
|
||||
var/pointamt = rand(1,3)
|
||||
var/healamt = rand(6,8)
|
||||
temp = "You use [pointamt] magic to heal for [healamt] damage!"
|
||||
playsound(src, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE)
|
||||
turtle++
|
||||
|
||||
sleep(10)
|
||||
player_mp -= pointamt
|
||||
player_hp += healamt
|
||||
blocked = 1
|
||||
arcade_action()
|
||||
sleep(10)
|
||||
player_mp -= pointamt
|
||||
player_hp += healamt
|
||||
blocked = 1
|
||||
arcade_action()
|
||||
|
||||
else if (href_list["charge"])
|
||||
blocked = 1
|
||||
var/chargeamt = rand(4,7)
|
||||
temp = "You regain [chargeamt] points"
|
||||
playsound(src, 'sound/arcade/mana.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE)
|
||||
player_mp += chargeamt
|
||||
if(turtle > 0)
|
||||
turtle--
|
||||
if("charge")
|
||||
blocked = 1
|
||||
var/chargeamt = rand(4,7)
|
||||
temp = "You regain [chargeamt] points"
|
||||
playsound(src, 'sound/arcade/mana.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE)
|
||||
player_mp += chargeamt
|
||||
if(turtle > 0)
|
||||
turtle--
|
||||
|
||||
sleep(10)
|
||||
arcade_action()
|
||||
sleep(10)
|
||||
arcade_action()
|
||||
|
||||
|
||||
else if (href_list["newgame"]) //Reset everything
|
||||
if(action == "newgame") //Reset everything
|
||||
temp = "New Round"
|
||||
player_hp = 30
|
||||
player_mp = 10
|
||||
@@ -191,12 +189,11 @@
|
||||
turtle = 0
|
||||
|
||||
if(emagged)
|
||||
src.New()
|
||||
randomize_characters()
|
||||
emagged = 0
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
SSnanoui.update_uis(src)
|
||||
return
|
||||
add_fingerprint(usr)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/computer/arcade/battle/proc/arcade_action()
|
||||
if ((enemy_mp <= 0) || (enemy_hp <= 0))
|
||||
@@ -211,7 +208,7 @@
|
||||
new /obj/item/clothing/head/collectable/petehat(src.loc)
|
||||
message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.")
|
||||
log_game("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.")
|
||||
src.New()
|
||||
randomize_characters()
|
||||
emagged = 0
|
||||
else if(!contents.len)
|
||||
feedback_inc("arcade_win_normal")
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
var/reason = "NOT SPECIFIED"
|
||||
|
||||
/obj/item/weapon/card/id/guest/GetAccess()
|
||||
if (world.time > expiration_time)
|
||||
if(world.time > expiration_time)
|
||||
return access
|
||||
else
|
||||
return temp_access
|
||||
|
||||
/obj/item/weapon/card/id/guest/examine(mob/user)
|
||||
. = ..()
|
||||
if (world.time < expiration_time)
|
||||
if(world.time < expiration_time)
|
||||
. += "<span class='notice'>This pass expires at [worldtime2stationtime(expiration_time)].</span>"
|
||||
else
|
||||
. += "<span class='warning'>It expired at [worldtime2stationtime(expiration_time)].</span>"
|
||||
@@ -28,7 +28,7 @@
|
||||
/obj/item/weapon/card/id/guest/read()
|
||||
if(!Adjacent(usr))
|
||||
return //Too far to read
|
||||
if (world.time > expiration_time)
|
||||
if(world.time > expiration_time)
|
||||
to_chat(usr, "<span class='notice'>This pass expired at [worldtime2stationtime(expiration_time)].</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>This pass expires at [worldtime2stationtime(expiration_time)].</span>")
|
||||
@@ -105,7 +105,7 @@
|
||||
if(!giver && user.unEquip(I))
|
||||
I.forceMove(src)
|
||||
giver = I
|
||||
SSnanoui.update_uis(src)
|
||||
SStgui.update_uis(src)
|
||||
else if(giver)
|
||||
to_chat(user, "<span class='warning'>There is already ID card inside.</span>")
|
||||
return
|
||||
@@ -119,128 +119,119 @@
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
tgui_interact(user)
|
||||
|
||||
ui_interact(user)
|
||||
/obj/machinery/computer/guestpass/tgui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "GuestPass", name)
|
||||
ui.open()
|
||||
|
||||
/**
|
||||
* Display the NanoUI window for the guest pass console.
|
||||
*
|
||||
* See NanoUI documentation for details.
|
||||
*/
|
||||
/obj/machinery/computer/guestpass/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
user.set_machine(src)
|
||||
/obj/machinery/computer/guestpass/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
|
||||
var/list/data = ..()
|
||||
|
||||
var/list/data = list()
|
||||
var/list/area_list = list()
|
||||
|
||||
var/area_list[0]
|
||||
|
||||
if (giver && giver.access)
|
||||
data["access"] = null
|
||||
if(giver && giver.access)
|
||||
data["access"] = giver.access
|
||||
for (var/A in giver.access)
|
||||
if(A in accesses)
|
||||
area_list[++area_list.len] = list("area" = A, "area_name" = get_access_desc(A), "on" = 1)
|
||||
area_list.Add(list(list("area" = A, "area_name" = get_access_desc(A), "on" = 1)))
|
||||
else
|
||||
area_list[++area_list.len] = list("area" = A, "area_name" = get_access_desc(A), "on" = null)
|
||||
area_list.Add(list(list("area" = A, "area_name" = get_access_desc(A), "on" = null)))
|
||||
data["area"] = area_list
|
||||
|
||||
data["giver"] = giver
|
||||
data["giveName"] = giv_name
|
||||
data["reason"] = reason
|
||||
data["duration"] = duration
|
||||
data["area"] = area_list
|
||||
data["mode"] = mode
|
||||
data["log"] = internal_log
|
||||
data["uid"] = uid
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "guest_pass.tmpl", src.name, 400, 520)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
//ui.set_auto_update(5)
|
||||
return data
|
||||
|
||||
/obj/machinery/computer/guestpass/Topic(href, href_list)
|
||||
/obj/machinery/computer/guestpass/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
|
||||
if(..())
|
||||
return 1
|
||||
usr.set_machine(src)
|
||||
if (href_list["mode"])
|
||||
mode = href_list["mode"]
|
||||
return TRUE
|
||||
|
||||
if (href_list["choice"])
|
||||
switch(href_list["choice"])
|
||||
if ("giv_name")
|
||||
var/nam = sanitizeName(input("Person pass is issued to", "Name", giv_name) as text|null)
|
||||
if (nam)
|
||||
giv_name = nam
|
||||
if ("reason")
|
||||
var/reas = sanitize(input("Reason why pass is issued", "Reason", reason) as text|null)
|
||||
if(reas)
|
||||
reason = reas
|
||||
if ("duration")
|
||||
var/dur = input("Duration (in minutes) during which pass is valid (up to 120 minutes).", "Duration") as num|null
|
||||
if (dur)
|
||||
if (dur > 0 && dur <= 120)
|
||||
duration = dur
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Invalid duration.</span>")
|
||||
if ("access")
|
||||
var/A = text2num(href_list["access"])
|
||||
if (A in accesses)
|
||||
accesses.Remove(A)
|
||||
switch(action)
|
||||
if("mode")
|
||||
mode = params["mode"]
|
||||
|
||||
if("giv_name")
|
||||
var/nam = sanitizeName(input("Person pass is issued to", "Name", giv_name) as text|null)
|
||||
if(nam)
|
||||
giv_name = nam
|
||||
if("reason")
|
||||
var/reas = sanitize(input("Reason why pass is issued", "Reason", reason) as text|null)
|
||||
if(reas)
|
||||
reason = reas
|
||||
if("duration")
|
||||
var/dur = input("Duration (in minutes) during which pass is valid (up to 120 minutes).", "Duration") as num|null
|
||||
if(dur)
|
||||
if(dur > 0 && dur <= 120)
|
||||
duration = dur
|
||||
else
|
||||
if(A in giver.access) //Let's make sure the ID card actually has the access.
|
||||
accesses.Add(A)
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Invalid selection, please consult technical support if there are any issues.</span>")
|
||||
log_debug("[key_name_admin(usr)] tried selecting an invalid guest pass terminal option.")
|
||||
if (href_list["action"])
|
||||
switch(href_list["action"])
|
||||
if ("id")
|
||||
if (giver)
|
||||
if(ishuman(usr))
|
||||
giver.loc = usr.loc
|
||||
if(!usr.get_active_hand())
|
||||
usr.put_in_hands(giver)
|
||||
giver = null
|
||||
else
|
||||
giver.loc = src.loc
|
||||
giver = null
|
||||
accesses.Cut()
|
||||
to_chat(usr, "<span class='warning'>Invalid duration.</span>")
|
||||
if("access")
|
||||
var/A = text2num(params["access"])
|
||||
if(A in accesses)
|
||||
accesses.Remove(A)
|
||||
else
|
||||
if(A in giver.access) //Let's make sure the ID card actually has the access.
|
||||
accesses.Add(A)
|
||||
else
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if (istype(I, /obj/item/weapon/card/id) && usr.unEquip(I))
|
||||
I.loc = src
|
||||
giver = I
|
||||
|
||||
if ("print")
|
||||
var/dat = "<h3>Activity log of guest pass terminal #[uid]</h3><br>"
|
||||
for (var/entry in internal_log)
|
||||
dat += "[entry]<br><hr>"
|
||||
//to_chat(usr, "Printing the log, standby...")
|
||||
//sleep(50)
|
||||
var/obj/item/weapon/paper/P = new/obj/item/weapon/paper( loc )
|
||||
P.name = "activity log"
|
||||
P.info = dat
|
||||
|
||||
if ("issue")
|
||||
if (giver)
|
||||
var/number = add_zero("[rand(0,9999)]", 4)
|
||||
var/entry = "\[[stationtime2text()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: "
|
||||
for (var/i=1 to accesses.len)
|
||||
var/A = accesses[i]
|
||||
if (A)
|
||||
var/area = get_access_desc(A)
|
||||
entry += "[i > 1 ? ", [area]" : "[area]"]"
|
||||
entry += ". Expires at [worldtime2stationtime(world.time + duration*10*60)]."
|
||||
internal_log.Add(entry)
|
||||
|
||||
var/obj/item/weapon/card/id/guest/pass = new(src.loc)
|
||||
pass.temp_access = accesses.Copy()
|
||||
pass.registered_name = giv_name
|
||||
pass.expiration_time = world.time + duration*10*60
|
||||
pass.reason = reason
|
||||
pass.name = "guest pass #[number]"
|
||||
to_chat(usr, "<span class='warning'>Invalid selection, please consult technical support if there are any issues.</span>")
|
||||
log_debug("[key_name_admin(usr)] tried selecting an invalid guest pass terminal option.")
|
||||
if("id")
|
||||
if(giver)
|
||||
if(ishuman(usr))
|
||||
giver.loc = usr.loc
|
||||
if(!usr.get_active_hand())
|
||||
usr.put_in_hands(giver)
|
||||
giver = null
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Cannot issue pass without issuing ID.</span>")
|
||||
giver.loc = src.loc
|
||||
giver = null
|
||||
accesses.Cut()
|
||||
else
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if(istype(I, /obj/item/weapon/card/id) && usr.unEquip(I))
|
||||
I.loc = src
|
||||
giver = I
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
SSnanoui.update_uis(src)
|
||||
if("print")
|
||||
var/dat = "<h3>Activity log of guest pass terminal #[uid]</h3><br>"
|
||||
for (var/entry in internal_log)
|
||||
dat += "[entry]<br><hr>"
|
||||
//to_chat(usr, "Printing the log, standby...")
|
||||
//sleep(50)
|
||||
var/obj/item/weapon/paper/P = new/obj/item/weapon/paper( loc )
|
||||
P.name = "activity log"
|
||||
P.info = dat
|
||||
|
||||
if("issue")
|
||||
if(giver)
|
||||
var/number = add_zero("[rand(0,9999)]", 4)
|
||||
var/entry = "\[[stationtime2text()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: "
|
||||
for (var/i=1 to accesses.len)
|
||||
var/A = accesses[i]
|
||||
if(A)
|
||||
var/area = get_access_desc(A)
|
||||
entry += "[i > 1 ? ", [area]" : "[area]"]"
|
||||
entry += ". Expires at [worldtime2stationtime(world.time + duration*10*60)]."
|
||||
internal_log.Add(entry)
|
||||
|
||||
var/obj/item/weapon/card/id/guest/pass = new(src.loc)
|
||||
pass.temp_access = accesses.Copy()
|
||||
pass.registered_name = giv_name
|
||||
pass.expiration_time = world.time + duration*10*60
|
||||
pass.reason = reason
|
||||
pass.name = "guest pass #[number]"
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Cannot issue pass without issuing ID.</span>")
|
||||
|
||||
add_fingerprint(usr)
|
||||
return TRUE
|
||||
@@ -55,7 +55,7 @@
|
||||
if(!card && user.unEquip(I))
|
||||
I.forceMove(src)
|
||||
card = I
|
||||
SSnanoui.update_uis(src)
|
||||
SStgui.update_uis(src)
|
||||
update_icon()
|
||||
else if(card)
|
||||
to_chat(user, "<span class='warning'>There is already ID card inside.</span>")
|
||||
|
||||
@@ -851,11 +851,13 @@ About the new airlock wires panel:
|
||||
/obj/machinery/door/airlock/attack_ghost(mob/user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/door/airlock/tgui_interact(mob/user, datum/tgui/ui)
|
||||
/obj/machinery/door/airlock/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui, datum/tgui_state/custom_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "AiAirlock", name)
|
||||
ui.open()
|
||||
if(custom_state)
|
||||
ui.set_state(custom_state)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/door/airlock/tgui_data(mob/user)
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
layer = ABOVE_OBJ_LAYER
|
||||
var/id_tag
|
||||
|
||||
var/datum/topic_state/remote/remote_state
|
||||
var/obj/machinery/embedded_controller/radio/airlock/master_controller
|
||||
|
||||
/obj/machinery/dummy_airlock_controller/process()
|
||||
@@ -25,15 +24,10 @@
|
||||
break
|
||||
if(!master_controller)
|
||||
qdel(src)
|
||||
else
|
||||
remote_state = new /datum/topic_state/remote(src, master_controller)
|
||||
|
||||
/obj/machinery/dummy_airlock_controller/Destroy()
|
||||
if(master_controller)
|
||||
master_controller.dummy_terminals -= src
|
||||
if(remote_state)
|
||||
qdel(remote_state)
|
||||
remote_state = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/dummy_airlock_controller/interface_interact(var/mob/user)
|
||||
|
||||
@@ -192,7 +192,6 @@
|
||||
if(inoperable())
|
||||
to_chat(usr, "\The [src] doesn't appear to function.")
|
||||
return
|
||||
ui_interact(user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/media/jukebox/tgui_status(mob/user)
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
update_use_power(USE_POWER_IDLE)
|
||||
|
||||
/obj/machinery/oxygen_pump/attack_ai(mob/user as mob)
|
||||
ui_interact(user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/oxygen_pump/proc/attach_mask(var/mob/living/carbon/C)
|
||||
if(C && istype(C))
|
||||
@@ -176,61 +176,60 @@
|
||||
set src in oview(1)
|
||||
set category = "Object"
|
||||
set name = "Show Tank Settings"
|
||||
ui_interact(usr)
|
||||
tgui_interact(usr)
|
||||
|
||||
//GUI Tank Setup
|
||||
/obj/machinery/oxygen_pump/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
var/data[0]
|
||||
/obj/machinery/oxygen_pump/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
|
||||
if(!tank)
|
||||
to_chat(usr, "<span class='warning'>It is missing a tank!</span>")
|
||||
data["tankPressure"] = 0
|
||||
data["releasePressure"] = 0
|
||||
data["defaultReleasePressure"] = 0
|
||||
data["maxReleasePressure"] = 0
|
||||
data["maskConnected"] = 0
|
||||
data["tankInstalled"] = 0
|
||||
// this is the data which will be sent to the ui
|
||||
to_chat(user, "<span class='warning'>[src] is missing a tank.</span>")
|
||||
if(ui)
|
||||
ui.close()
|
||||
return
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "Tank", name)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/oxygen_pump/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
|
||||
var/list/data = ..()
|
||||
|
||||
data["showToggle"] = FALSE
|
||||
data["maskConnected"] = !!breather
|
||||
|
||||
data["tankPressure"] = 0
|
||||
data["releasePressure"] = 0
|
||||
data["defaultReleasePressure"] = 0
|
||||
data["minReleasePressure"] = 0
|
||||
data["releasePressure"] = round(tank.distribute_pressure ? tank.distribute_pressure : 0)
|
||||
data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE)
|
||||
|
||||
if(tank)
|
||||
data["tankPressure"] = round(tank.air_contents.return_pressure() ? tank.air_contents.return_pressure() : 0)
|
||||
data["releasePressure"] = round(tank.distribute_pressure ? tank.distribute_pressure : 0)
|
||||
data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE)
|
||||
data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE)
|
||||
data["maskConnected"] = 0
|
||||
data["tankInstalled"] = 1
|
||||
|
||||
if(!breather)
|
||||
data["maskConnected"] = 0
|
||||
if(breather)
|
||||
data["maskConnected"] = 1
|
||||
return data
|
||||
|
||||
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
// the ui does not exist, so we'll create a new() one
|
||||
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
|
||||
ui = new(user, src, ui_key, "Oxygen_pump.tmpl", "Tank", 500, 300)
|
||||
// when the ui is first opened this is the data it will use
|
||||
ui.set_initial_data(data)
|
||||
// open the new ui window
|
||||
ui.open()
|
||||
// auto update every Master Controller tick
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/machinery/oxygen_pump/Topic(href, href_list)
|
||||
/obj/machinery/oxygen_pump/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
|
||||
if(..())
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
if (href_list["dist_p"])
|
||||
if (href_list["dist_p"] == "reset")
|
||||
tank.distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
|
||||
else if (href_list["dist_p"] == "max")
|
||||
tank.distribute_pressure = TANK_MAX_RELEASE_PRESSURE
|
||||
else
|
||||
var/cp = text2num(href_list["dist_p"])
|
||||
tank.distribute_pressure += cp
|
||||
tank.distribute_pressure = min(max(round(tank.distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE)
|
||||
return 1
|
||||
switch(action)
|
||||
if("pressure")
|
||||
var/pressure = params["pressure"]
|
||||
if(pressure == "reset")
|
||||
pressure = TANK_DEFAULT_RELEASE_PRESSURE
|
||||
. = TRUE
|
||||
else if(pressure == "min")
|
||||
pressure = 0
|
||||
. = TRUE
|
||||
else if(pressure == "max")
|
||||
pressure = TANK_MAX_RELEASE_PRESSURE
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
tank.distribute_pressure = clamp(round(pressure), 0, TANK_MAX_RELEASE_PRESSURE)
|
||||
|
||||
/obj/machinery/oxygen_pump/anesthetic
|
||||
name = "anesthetic pump"
|
||||
|
||||
@@ -233,7 +233,6 @@
|
||||
/obj/machinery/partslathe/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
ui_interact(user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/partslathe/ui_assets(mob/user)
|
||||
|
||||
@@ -95,7 +95,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense)
|
||||
/obj/machinery/pointdefense_control/attackby(var/obj/item/W, var/mob/user)
|
||||
if(W?.is_multitool())
|
||||
var/new_ident = input(user, "Enter a new ident tag.", "[src]", id_tag) as null|text
|
||||
if(new_ident && new_ident != id_tag && user.Adjacent(src) && CanInteract(user, physical_state))
|
||||
if(new_ident && new_ident != id_tag && user.Adjacent(src) && CanInteract(user, GLOB.tgui_physical_state))
|
||||
// Check for duplicate controllers with this ID
|
||||
for(var/thing in pointdefense_controllers)
|
||||
var/obj/machinery/pointdefense_control/PC = thing
|
||||
@@ -211,7 +211,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense)
|
||||
/obj/machinery/power/pointdefense/attackby(var/obj/item/W, var/mob/user)
|
||||
if(W?.is_multitool())
|
||||
var/new_ident = input(user, "Enter a new ident tag.", "[src]", id_tag) as null|text
|
||||
if(new_ident && new_ident != id_tag && user.Adjacent(src) && CanInteract(user, physical_state))
|
||||
if(new_ident && new_ident != id_tag && user.Adjacent(src) && CanInteract(user, GLOB.tgui_physical_state))
|
||||
to_chat(user, "<span class='notice'>You register [src] with the [new_ident] network.</span>")
|
||||
id_tag = new_ident
|
||||
return
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
var/last_fired = FALSE //TRUE: if the turret is cooling down from a shot, FALSE: turret is ready to fire
|
||||
var/shot_delay = 1.5 SECONDS //1.5 seconds between each shot
|
||||
|
||||
var/targetting_is_configurable = TRUE // if false, you cannot change who this turret attacks via its UI
|
||||
var/check_arrest = TRUE //checks if the perp is set to arrest
|
||||
var/check_records = TRUE //checks if a security record exists at all
|
||||
var/check_weapons = FALSE //checks if it can shoot people that have a weapon they aren't authorized to have
|
||||
@@ -81,6 +82,7 @@
|
||||
|
||||
var/enabled = TRUE //determines if the turret is on
|
||||
var/lethal = FALSE //whether in lethal or stun mode
|
||||
var/lethal_is_configurable = TRUE // if false, its lethal setting cannot be changed
|
||||
var/disabled = FALSE
|
||||
|
||||
var/shot_sound //what sound should play when the turret fires
|
||||
@@ -214,6 +216,9 @@
|
||||
req_one_access = list()
|
||||
installation = /obj/item/weapon/gun/energy/lasertag/omni
|
||||
|
||||
targetting_is_configurable = FALSE
|
||||
lethal_is_configurable = FALSE
|
||||
|
||||
locked = FALSE
|
||||
enabled = FALSE
|
||||
anchored = FALSE
|
||||
@@ -262,43 +267,14 @@
|
||||
if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag) && check_weapons) // Checks if they are a blue player
|
||||
return TURRET_PRIORITY_TARGET
|
||||
|
||||
/obj/machinery/porta_turret/lasertag/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
var/data[0]
|
||||
data["access"] = !isLocked(user)
|
||||
data["locked"] = locked
|
||||
data["enabled"] = enabled
|
||||
//data["is_lethal"] = 1 // VOREStation Removal of "Lethal" setting - it does nothing. Rykka did dis.
|
||||
//data["lethal"] = lethal // VOREStation Removal of "Lethal" setting - it does nothing. Rykka did dis.
|
||||
|
||||
if(data["access"])
|
||||
var/settings[0]
|
||||
settings[++settings.len] = list("category" = "Target Red", "setting" = "check_synth", "value" = check_synth) // Could not get the UI to work with new vars specifically for lasertag turrets -Nalarac
|
||||
settings[++settings.len] = list("category" = "Target Blue", "setting" = "check_weapons", "value" = check_weapons) // So I'm using these variables since they don't do anything else in this case
|
||||
data["settings"] = settings
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/machinery/porta_turret/lasertag/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(href_list["command"] && href_list["value"])
|
||||
var/value = text2num(href_list["value"])
|
||||
if(href_list["command"] == "enable")
|
||||
enabled = value
|
||||
//else if(href_list["command"] == "lethal") // VOREStation Removal of "Lethal" setting - it does nothing. Rykka did dis.
|
||||
//lethal = value // VOREStation Removal of "Lethal" setting - it does nothing. Rykka did dis.
|
||||
else if(href_list["command"] == "check_synth")
|
||||
check_synth = value
|
||||
else if(href_list["command"] == "check_weapons")
|
||||
check_weapons = value
|
||||
|
||||
return 1
|
||||
/obj/machinery/porta_turret/lasertag/tgui_data(mob/user)
|
||||
var/list/data = list(
|
||||
"locked" = isLocked(user), // does the current user have access?
|
||||
"on" = enabled, // is turret turned on?
|
||||
"lethal" = lethal,
|
||||
"lethal_is_configurable" = lethal_is_configurable
|
||||
)
|
||||
return data
|
||||
|
||||
/obj/machinery/porta_turret/Initialize()
|
||||
//Sets up a spark system
|
||||
@@ -401,102 +377,99 @@
|
||||
lethal_shot_sound = 'sound/weapons/eluger.ogg'
|
||||
shot_sound = 'sound/weapons/Taser.ogg'
|
||||
|
||||
/obj/machinery/porta_turret/proc/isLocked(mob/user)
|
||||
if(ailock && issilicon(user))
|
||||
to_chat(user, "<span class='notice'>There seems to be a firewall preventing you from accessing this device.</span>")
|
||||
return 1
|
||||
|
||||
if(locked && !issilicon(user))
|
||||
to_chat(user, "<span class='notice'>Controls locked.</span>")
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/obj/machinery/porta_turret/attack_ai(mob/user)
|
||||
if(isLocked(user))
|
||||
return
|
||||
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/porta_turret/attack_hand(mob/user)
|
||||
if(isLocked(user))
|
||||
return
|
||||
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/porta_turret/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
var/data[0]
|
||||
data["access"] = !isLocked(user)
|
||||
data["locked"] = locked
|
||||
data["enabled"] = enabled
|
||||
data["is_lethal"] = 1
|
||||
data["lethal"] = lethal
|
||||
|
||||
if(data["access"])
|
||||
var/settings[0]
|
||||
settings[++settings.len] = list("category" = "Neutralize All Non-Synthetics", "setting" = "check_synth", "value" = check_synth)
|
||||
settings[++settings.len] = list("category" = "Check Weapon Authorization", "setting" = "check_weapons", "value" = check_weapons)
|
||||
settings[++settings.len] = list("category" = "Check Security Records", "setting" = "check_records", "value" = check_records)
|
||||
settings[++settings.len] = list("category" = "Check Arrest Status", "setting" = "check_arrest", "value" = check_arrest)
|
||||
settings[++settings.len] = list("category" = "Check Access Authorization", "setting" = "check_access", "value" = check_access)
|
||||
settings[++settings.len] = list("category" = "Check misc. Lifeforms", "setting" = "check_anomalies", "value" = check_anomalies)
|
||||
settings[++settings.len] = list("category" = "Neutralize All Entities", "setting" = "check_all", "value" = check_all)
|
||||
settings[++settings.len] = list("category" = "Neutralize Downed Entities", "setting" = "check_down", "value" = check_down)
|
||||
data["settings"] = settings
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/machinery/porta_turret/proc/HasController()
|
||||
var/area/A = get_area(src)
|
||||
return A && A.turret_controls.len > 0
|
||||
|
||||
/obj/machinery/porta_turret/CanUseTopic(var/mob/user)
|
||||
/obj/machinery/porta_turret/proc/isLocked(mob/user)
|
||||
if(HasController())
|
||||
to_chat(user, "<span class='notice'>Turrets can only be controlled using the assigned turret controller.</span>")
|
||||
return STATUS_CLOSE
|
||||
return TRUE
|
||||
if(isrobot(user) || isAI(user))
|
||||
if(ailock)
|
||||
to_chat(user, "<span class='notice'>There seems to be a firewall preventing you from accessing this device.</span>")
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
if(isobserver(user))
|
||||
var/mob/observer/dead/D = user
|
||||
if(D.can_admin_interact())
|
||||
return FALSE
|
||||
else
|
||||
return TRUE
|
||||
if(locked)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
if(isLocked(user))
|
||||
return STATUS_CLOSE
|
||||
/obj/machinery/porta_turret/attack_ai(mob/user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/porta_turret/attack_ghost(mob/user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/porta_turret/attack_hand(mob/user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/porta_turret/tgui_interact(mob/user, datum/tgui/ui = null)
|
||||
if(HasController())
|
||||
to_chat(user, "<span class='notice'>[src] can only be controlled using the assigned turret controller.</span>")
|
||||
return
|
||||
if(!anchored)
|
||||
to_chat(user, "<span class='notice'>\The [src] has to be secured first!</span>")
|
||||
return STATUS_CLOSE
|
||||
to_chat(user, "<span class='notice'>[src] has to be secured first!</span>")
|
||||
return
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "PortableTurret", name, 500, 400)
|
||||
ui.open()
|
||||
|
||||
return ..()
|
||||
/obj/machinery/porta_turret/tgui_data(mob/user)
|
||||
var/list/data = list(
|
||||
"locked" = isLocked(user), // does the current user have access?
|
||||
"on" = enabled,
|
||||
"targetting_is_configurable" = targetting_is_configurable, // If false, targetting settings don't show up
|
||||
"lethal" = lethal,
|
||||
"lethal_is_configurable" = lethal_is_configurable,
|
||||
"check_weapons" = check_weapons,
|
||||
"neutralize_noaccess" = check_access,
|
||||
"neutralize_norecord" = check_records,
|
||||
"neutralize_criminals" = check_arrest,
|
||||
"neutralize_all" = check_all,
|
||||
"neutralize_nonsynth" = check_synth,
|
||||
"neutralize_unidentified" = check_anomalies,
|
||||
"neutralize_down" = check_down,
|
||||
)
|
||||
return data
|
||||
|
||||
/obj/machinery/porta_turret/Topic(href, href_list)
|
||||
/obj/machinery/porta_turret/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
|
||||
if(..())
|
||||
return 1
|
||||
return TRUE
|
||||
if(isLocked(usr))
|
||||
return TRUE
|
||||
. = TRUE
|
||||
|
||||
if(href_list["command"] && href_list["value"])
|
||||
var/value = text2num(href_list["value"])
|
||||
if(href_list["command"] == "enable")
|
||||
enabled = value
|
||||
else if(href_list["command"] == "lethal")
|
||||
lethal = value
|
||||
else if(href_list["command"] == "check_synth")
|
||||
check_synth = value
|
||||
else if(href_list["command"] == "check_weapons")
|
||||
check_weapons = value
|
||||
else if(href_list["command"] == "check_records")
|
||||
check_records = value
|
||||
else if(href_list["command"] == "check_arrest")
|
||||
check_arrest = value
|
||||
else if(href_list["command"] == "check_access")
|
||||
check_access = value
|
||||
else if(href_list["command"] == "check_anomalies")
|
||||
check_anomalies = value
|
||||
else if(href_list["command"] == "check_all")
|
||||
check_all = value
|
||||
else if(href_list["command"] == "check_down")
|
||||
check_down = value
|
||||
|
||||
return 1
|
||||
switch(action)
|
||||
if("power")
|
||||
enabled = !enabled
|
||||
if("lethal")
|
||||
if(lethal_is_configurable)
|
||||
lethal = !lethal
|
||||
if(targetting_is_configurable)
|
||||
switch(action)
|
||||
if("authweapon")
|
||||
check_weapons = !check_weapons
|
||||
if("authaccess")
|
||||
check_access = !check_access
|
||||
if("authnorecord")
|
||||
check_records = !check_records
|
||||
if("autharrest")
|
||||
check_arrest = !check_arrest
|
||||
if("authxeno")
|
||||
check_anomalies = !check_anomalies
|
||||
if("authsynth")
|
||||
check_synth = !check_synth
|
||||
if("authall")
|
||||
check_all = !check_all
|
||||
if("authdown")
|
||||
check_down = !check_down
|
||||
|
||||
/obj/machinery/porta_turret/power_change()
|
||||
if(powered())
|
||||
@@ -929,6 +902,7 @@
|
||||
var/check_weapons
|
||||
var/check_anomalies
|
||||
var/check_all
|
||||
var/check_down
|
||||
var/ailock
|
||||
|
||||
/obj/machinery/porta_turret/proc/setState(var/datum/turret_checks/TC)
|
||||
@@ -944,6 +918,7 @@
|
||||
check_weapons = TC.check_weapons
|
||||
check_anomalies = TC.check_anomalies
|
||||
check_all = TC.check_all
|
||||
check_down = TC.check_down
|
||||
ailock = TC.ailock
|
||||
|
||||
power_change()
|
||||
|
||||
@@ -104,7 +104,6 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
/obj/machinery/requests_console/attack_hand(user as mob)
|
||||
if(..(user))
|
||||
return
|
||||
ui_interact(user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/requests_console/tgui_interact(mob/user, datum/tgui/ui)
|
||||
|
||||
@@ -1210,22 +1210,31 @@
|
||||
//VOREStation Addition End
|
||||
//END: downstream variant space
|
||||
if(target_species)
|
||||
//Making sure all of our items have the sprites to be refitted.
|
||||
var/helmet_check = ((helmet!=null && (initial(parent_helmet.icon_state) in icon_states(helmet.sprite_sheets_obj[target_species],1))) || helmet==null)
|
||||
//If the helmet exists, only return true if there's also sprites for it. If the helmet doesn't exist, return true.
|
||||
var/suit_check = ((suit!=null && (initial(parent_suit.icon_state) in icon_states(suit.sprite_sheets_obj[target_species],1))) || suit==null)
|
||||
var/suit_helmet_check = ((suit.helmet!=null && (initial(parent_helmet.icon_state) in icon_states(suit.helmet.sprite_sheets_obj[target_species],1))) || suit.helmet==null)
|
||||
if(helmet_check && suit_check && suit_helmet_check)
|
||||
//Only run these checks if they have a sprite sheet defined, otherwise they use human's anyways, and there is almost definitely a sprite.
|
||||
if((helmet!=null&&(target_species in helmet.sprite_sheets_obj))||(suit!=null&&(target_species in suit.sprite_sheets_obj)))
|
||||
//Making sure all of our items have the sprites to be refitted.
|
||||
var/helmet_check = ((helmet!=null && (initial(parent_helmet.icon_state) in icon_states(helmet.sprite_sheets_obj[target_species],1))) || helmet==null)
|
||||
//If the helmet exists, only return true if there's also sprites for it. If the helmet doesn't exist, return true.
|
||||
var/suit_check = ((suit!=null && (initial(parent_suit.icon_state) in icon_states(suit.sprite_sheets_obj[target_species],1))) || suit==null)
|
||||
var/suit_helmet_check = ((suit!=null && suit.helmet!=null && (initial(parent_helmet.icon_state) in icon_states(suit.helmet.sprite_sheets_obj[target_species],1))) || suit==null || suit.helmet==null)
|
||||
if(helmet_check && suit_check && suit_helmet_check)
|
||||
if(helmet)
|
||||
helmet.refit_for_species(target_species)
|
||||
if(suit)
|
||||
suit.refit_for_species(target_species)
|
||||
if(suit.helmet)
|
||||
suit.helmet.refit_for_species(target_species)
|
||||
else
|
||||
//If they don't, alert the user and stop here.
|
||||
T.visible_message("[bicon(src)]<span class='warning'>Unable to apply specified cosmetics with specified species. Please try again with a different species or cosmetic option selected.</span>")
|
||||
return
|
||||
else
|
||||
if(helmet)
|
||||
helmet.refit_for_species(target_species)
|
||||
if(suit)
|
||||
suit.refit_for_species(target_species)
|
||||
if(suit.helmet)
|
||||
suit.helmet.refit_for_species(target_species)
|
||||
else
|
||||
//If they don't, alert the user and stop here.
|
||||
T.visible_message("[bicon(src)]<span class='warning'>Unable to apply specified cosmetics with specified species. Please try again with a different species or cosmetic option selected.</span>")
|
||||
return
|
||||
//look at this! isn't it beautiful? -KK (well ok not beautiful but it's a lot cleaner)
|
||||
if(helmet && target_department != "No Change")
|
||||
var/obj/item/clothing/H = new parent_helmet
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/id = null
|
||||
var/one_time_use = 0 //Used for one-time-use teleport cards (such as clown planet coordinates.)
|
||||
//Setting this to 1 will set locked to null after a player enters the portal and will not allow hand-teles to open portals to that location.
|
||||
var/datum/nano_module/program/teleport_control/teleport_control
|
||||
var/datum/tgui_module/teleport_control/teleport_control
|
||||
|
||||
/obj/machinery/computer/teleporter/New()
|
||||
id = "[rand(1000, 9999)]"
|
||||
@@ -44,7 +44,7 @@
|
||||
teleport_control.station = station
|
||||
|
||||
/obj/machinery/computer/teleporter/Destroy()
|
||||
qdel_null(teleport_control)
|
||||
QDEL_NULL(teleport_control)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/teleporter/attackby(I as obj, mob/living/user as mob)
|
||||
@@ -96,108 +96,13 @@
|
||||
attack_hand()
|
||||
|
||||
/obj/machinery/computer/teleporter/attack_ai(mob/user)
|
||||
ui_interact(user)
|
||||
teleport_control.tgui_interact(user)
|
||||
|
||||
/obj/machinery/computer/teleporter/attack_hand(mob/user)
|
||||
add_fingerprint(user)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/computer/teleporter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
teleport_control.ui_interact(user, ui_key, ui, force_open)
|
||||
|
||||
/obj/machinery/computer/teleporter/interact(mob/user)
|
||||
teleport_control.ui_interact(user)
|
||||
|
||||
//////
|
||||
////// Nano-module for teleporter
|
||||
//////
|
||||
/datum/nano_module/program/teleport_control
|
||||
name = "Teleporter Control"
|
||||
var/locked_name = "Not Locked"
|
||||
var/obj/item/locked = null
|
||||
var/obj/machinery/teleport/station/station = null
|
||||
var/obj/machinery/teleport/hub/hub = null
|
||||
|
||||
/datum/nano_module/program/teleport_control/Topic(href, href_list)
|
||||
if(..()) return 1
|
||||
|
||||
if(href_list["select_target"])
|
||||
var/list/L = list()
|
||||
var/list/areaindex = list()
|
||||
|
||||
for(var/obj/item/device/radio/beacon/R in all_beacons)
|
||||
var/turf/T = get_turf(R)
|
||||
if(!T)
|
||||
continue
|
||||
if(!(T.z in using_map.player_levels))
|
||||
continue
|
||||
var/tmpname = T.loc.name
|
||||
if(areaindex[tmpname])
|
||||
tmpname = "[tmpname] ([++areaindex[tmpname]])"
|
||||
else
|
||||
areaindex[tmpname] = 1
|
||||
L[tmpname] = R
|
||||
|
||||
for (var/obj/item/weapon/implant/tracking/I in all_tracking_implants)
|
||||
if(!I.implanted || !ismob(I.loc))
|
||||
continue
|
||||
else
|
||||
var/mob/M = I.loc
|
||||
if(M.stat == 2)
|
||||
if(M.timeofdeath + 6000 < world.time)
|
||||
continue
|
||||
var/turf/T = get_turf(M)
|
||||
if(T) continue
|
||||
if(T.z == 2) continue
|
||||
var/tmpname = M.real_name
|
||||
if(areaindex[tmpname])
|
||||
tmpname = "[tmpname] ([++areaindex[tmpname]])"
|
||||
else
|
||||
areaindex[tmpname] = 1
|
||||
L[tmpname] = I
|
||||
|
||||
var/desc = input("Please select a location to lock in.", "Locking Menu") in L|null
|
||||
if(!desc)
|
||||
return 0
|
||||
if(get_dist(host, usr) > 1 && !issilicon(usr))
|
||||
return 0
|
||||
|
||||
locked = L[desc]
|
||||
locked_name = desc
|
||||
return 1
|
||||
|
||||
if(href_list["test_fire"])
|
||||
station?.testfire()
|
||||
return 1
|
||||
|
||||
if(href_list["toggle_on"])
|
||||
if(!station)
|
||||
return 0
|
||||
|
||||
if(station.engaged)
|
||||
station.disengage()
|
||||
else
|
||||
station.engage()
|
||||
|
||||
return 1
|
||||
|
||||
/datum/nano_module/program/teleport_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
|
||||
var/list/data = host.initial_data()
|
||||
|
||||
data["locked_name"] = locked_name ? locked_name : "No Target"
|
||||
data["station_connected"] = station ? 1 : 0
|
||||
data["hub_connected"] = hub ? 1 : 0
|
||||
data["calibrated"] = hub ? hub.accurate : 0
|
||||
data["teleporter_on"] = station ? station.engaged : 0
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "teleport_control.tmpl", "Teleport Control Console", 400, 500, state = state)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
teleport_control.tgui_interact(user)
|
||||
|
||||
/obj/machinery/computer/teleporter/verb/set_id(t as text)
|
||||
set category = "Object"
|
||||
@@ -211,14 +116,6 @@
|
||||
id = t
|
||||
return
|
||||
|
||||
/proc/find_loc(obj/R as obj)
|
||||
if(!R) return null
|
||||
var/turf/T = R.loc
|
||||
while(!istype(T, /turf))
|
||||
T = T.loc
|
||||
if(!T || istype(T, /area)) return null
|
||||
return T
|
||||
|
||||
//////
|
||||
////// Root of all the machinery
|
||||
//////
|
||||
|
||||
@@ -11,31 +11,35 @@
|
||||
desc = "Used to control a room's automated defenses."
|
||||
icon = 'icons/obj/machines/turret_control.dmi'
|
||||
icon_state = "control_standby"
|
||||
anchored = 1
|
||||
density = 0
|
||||
var/enabled = 0
|
||||
var/lethal = 0
|
||||
var/locked = 1
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
var/enabled = FALSE
|
||||
var/lethal = FALSE
|
||||
var/lethal_is_configurable = TRUE
|
||||
var/locked = TRUE
|
||||
var/area/control_area //can be area name, path or nothing.
|
||||
|
||||
var/check_arrest = 1 //checks if the perp is set to arrest
|
||||
var/check_records = 1 //checks if a security record exists at all
|
||||
var/check_weapons = 0 //checks if it can shoot people that have a weapon they aren't authorized to have
|
||||
var/check_access = 1 //if this is active, the turret shoots everything that does not meet the access requirements
|
||||
var/check_anomalies = 1 //checks if it can shoot at unidentified lifeforms (ie xenos)
|
||||
var/check_synth = 0 //if active, will shoot at anything not an AI or cyborg
|
||||
var/check_all = 0 //If active, will shoot at anything.
|
||||
var/ailock = 0 //Silicons cannot use this
|
||||
var/targetting_is_configurable = TRUE // if false, you cannot change who this turret attacks via its UI
|
||||
var/check_arrest = TRUE //checks if the perp is set to arrest
|
||||
var/check_records = TRUE //checks if a security record exists at all
|
||||
var/check_weapons = FALSE //checks if it can shoot people that have a weapon they aren't authorized to have
|
||||
var/check_access = TRUE //if this is active, the turret shoots everything that does not meet the access requirements
|
||||
var/check_anomalies = TRUE //checks if it can shoot at unidentified lifeforms (ie xenos)
|
||||
var/check_synth = FALSE //if active, will shoot at anything not an AI or cyborg
|
||||
var/check_all = FALSE //If active, will shoot at anything.
|
||||
var/check_down = TRUE //If active, won't shoot laying targets.
|
||||
var/ailock = FALSE //Silicons cannot use this
|
||||
|
||||
var/syndicate = FALSE
|
||||
req_access = list(access_ai_upload)
|
||||
|
||||
/obj/machinery/turretid/stun
|
||||
enabled = 1
|
||||
enabled = TRUE
|
||||
icon_state = "control_stun"
|
||||
|
||||
/obj/machinery/turretid/lethal
|
||||
enabled = 1
|
||||
lethal = 1
|
||||
enabled = TRUE
|
||||
lethal = TRUE
|
||||
icon_state = "control_kill"
|
||||
|
||||
/obj/machinery/turretid/Destroy()
|
||||
@@ -67,21 +71,24 @@
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/turretid/proc/isLocked(mob/user)
|
||||
if(ailock && issilicon(user))
|
||||
to_chat(user, "<span class='notice'>There seems to be a firewall preventing you from accessing this device.</span>")
|
||||
return 1
|
||||
if(isrobot(user) || isAI(user))
|
||||
if(ailock)
|
||||
to_chat(user, "<span class='notice'>There seems to be a firewall preventing you from accessing this device.</span>")
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
if(locked && !issilicon(user))
|
||||
to_chat(user, "<span class='notice'>Access denied.</span>")
|
||||
return 1
|
||||
if(isobserver(user))
|
||||
var/mob/observer/dead/D = user
|
||||
if(D.can_admin_interact())
|
||||
return FALSE
|
||||
else
|
||||
return TRUE
|
||||
|
||||
return 0
|
||||
if(locked)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/turretid/CanUseTopic(mob/user)
|
||||
if(isLocked(user))
|
||||
return STATUS_CLOSE
|
||||
|
||||
return ..()
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/turretid/attackby(obj/item/weapon/W, mob/user)
|
||||
if(stat & BROKEN)
|
||||
@@ -100,77 +107,80 @@
|
||||
/obj/machinery/turretid/emag_act(var/remaining_charges, var/mob/user)
|
||||
if(!emagged)
|
||||
to_chat(user, "<span class='danger'>You short out the turret controls' access analysis module.</span>")
|
||||
emagged = 1
|
||||
locked = 0
|
||||
ailock = 0
|
||||
return 1
|
||||
emagged = TRUE
|
||||
locked = FALSE
|
||||
ailock = FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/turretid/attack_ai(mob/user as mob)
|
||||
if(isLocked(user))
|
||||
return
|
||||
tgui_interact(user)
|
||||
|
||||
ui_interact(user)
|
||||
/obj/machinery/turretid/attack_ghost(mob/user as mob)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/turretid/attack_hand(mob/user as mob)
|
||||
if(isLocked(user))
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/turretid/tgui_interact(mob/user, datum/tgui/ui = null)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "PortableTurret", name) // 500, 400
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/turretid/tgui_data(mob/user)
|
||||
var/list/data = list(
|
||||
"locked" = isLocked(user), // does the current user have access?
|
||||
"on" = enabled,
|
||||
"targetting_is_configurable" = targetting_is_configurable,
|
||||
"lethal" = lethal,
|
||||
"lethal_is_configurable" = lethal_is_configurable,
|
||||
"check_weapons" = check_weapons,
|
||||
"neutralize_noaccess" = check_access,
|
||||
"one_access" = FALSE,
|
||||
"selectedAccess" = list(),
|
||||
"access_is_configurable" = FALSE,
|
||||
"neutralize_norecord" = check_records,
|
||||
"neutralize_criminals" = check_arrest,
|
||||
"neutralize_nonsynth" = check_synth,
|
||||
"neutralize_all" = check_all,
|
||||
"neutralize_unidentified" = check_anomalies,
|
||||
"neutralize_down" = check_down,
|
||||
)
|
||||
return data
|
||||
|
||||
/obj/machinery/turretid/tgui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
if(isLocked(usr))
|
||||
return
|
||||
|
||||
ui_interact(user)
|
||||
. = TRUE
|
||||
switch(action)
|
||||
if("power")
|
||||
enabled = !enabled
|
||||
if("lethal")
|
||||
if(lethal_is_configurable)
|
||||
lethal = !lethal
|
||||
if(targetting_is_configurable)
|
||||
switch(action)
|
||||
if("authweapon")
|
||||
check_weapons = !check_weapons
|
||||
if("authaccess")
|
||||
check_access = !check_access
|
||||
if("authnorecord")
|
||||
check_records = !check_records
|
||||
if("autharrest")
|
||||
check_arrest = !check_arrest
|
||||
if("authxeno")
|
||||
check_anomalies = !check_anomalies
|
||||
if("authsynth")
|
||||
check_synth = !check_synth
|
||||
if("authall")
|
||||
check_all = !check_all
|
||||
if("authdown")
|
||||
check_down = !check_down
|
||||
|
||||
/obj/machinery/turretid/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
var/data[0]
|
||||
data["access"] = !isLocked(user)
|
||||
data["locked"] = locked
|
||||
data["enabled"] = enabled
|
||||
data["is_lethal"] = 1
|
||||
data["lethal"] = lethal
|
||||
|
||||
if(data["access"])
|
||||
var/settings[0]
|
||||
settings[++settings.len] = list("category" = "Neutralize All Non-Synthetics", "setting" = "check_synth", "value" = check_synth)
|
||||
settings[++settings.len] = list("category" = "Check Weapon Authorization", "setting" = "check_weapons", "value" = check_weapons)
|
||||
settings[++settings.len] = list("category" = "Check Security Records", "setting" = "check_records", "value" = check_records)
|
||||
settings[++settings.len] = list("category" = "Check Arrest Status", "setting" = "check_arrest", "value" = check_arrest)
|
||||
settings[++settings.len] = list("category" = "Check Access Authorization", "setting" = "check_access", "value" = check_access)
|
||||
settings[++settings.len] = list("category" = "Check misc. Lifeforms", "setting" = "check_anomalies", "value" = check_anomalies)
|
||||
settings[++settings.len] = list("category" = "Neutralize All Entities", "setting" = "check_all", "value" = check_all)
|
||||
|
||||
data["settings"] = settings
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/machinery/turretid/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(href_list["command"] && href_list["value"])
|
||||
var/value = text2num(href_list["value"])
|
||||
if(href_list["command"] == "enable")
|
||||
enabled = value
|
||||
else if(href_list["command"] == "lethal")
|
||||
lethal = value
|
||||
else if(href_list["command"] == "check_synth")
|
||||
check_synth = value
|
||||
else if(href_list["command"] == "check_weapons")
|
||||
check_weapons = value
|
||||
else if(href_list["command"] == "check_records")
|
||||
check_records = value
|
||||
else if(href_list["command"] == "check_arrest")
|
||||
check_arrest = value
|
||||
else if(href_list["command"] == "check_access")
|
||||
check_access = value
|
||||
else if(href_list["command"] == "check_anomalies")
|
||||
check_anomalies = value
|
||||
else if(href_list["command"] == "check_all")
|
||||
check_all = value
|
||||
|
||||
updateTurrets()
|
||||
return 1
|
||||
updateTurrets()
|
||||
|
||||
/obj/machinery/turretid/proc/updateTurrets()
|
||||
var/datum/turret_checks/TC = new
|
||||
@@ -183,10 +193,11 @@
|
||||
TC.check_weapons = check_weapons
|
||||
TC.check_anomalies = check_anomalies
|
||||
TC.check_all = check_all
|
||||
TC.check_down = check_down
|
||||
TC.ailock = ailock
|
||||
|
||||
if(istype(control_area))
|
||||
for (var/obj/machinery/porta_turret/aTurret in control_area)
|
||||
for(var/obj/machinery/porta_turret/aTurret in control_area)
|
||||
aTurret.setState(TC)
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -144,6 +144,6 @@
|
||||
if(!istype(user))
|
||||
return
|
||||
|
||||
if(CanInteract(user, physical_state))
|
||||
if(CanInteract(user, GLOB.tgui_physical_state))
|
||||
beep = !beep
|
||||
to_chat(user, "<span class='notice'>You turn the sound on \the [src] [beep ? "on" : "off"].</span>")
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
max_special_equip = 1
|
||||
cargo_capacity = 1
|
||||
|
||||
encumbrance_gap = 1.5
|
||||
|
||||
starting_components = list(
|
||||
/obj/item/mecha_parts/component/hull/durable,
|
||||
/obj/item/mecha_parts/component/actuator,
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
max_universal_equip = 3
|
||||
max_special_equip = 4
|
||||
|
||||
encumbrance_gap = 2
|
||||
|
||||
starting_components = list(
|
||||
/obj/item/mecha_parts/component/hull/durable,
|
||||
/obj/item/mecha_parts/component/actuator,
|
||||
|
||||
+20
-10
@@ -31,7 +31,10 @@
|
||||
var/initial_icon = null //Mech type for resetting icon. Only used for reskinning kits (see custom items)
|
||||
var/can_move = 1
|
||||
var/mob/living/carbon/occupant = null
|
||||
|
||||
var/step_in = 10 //Make a step in step_in/10 sec.
|
||||
var/encumbrance_gap = 1 //How many points of slowdown are negated from equipment? Added to the mech's base step_in.
|
||||
|
||||
var/dir_in = 2 //What direction will the mech face when entered/powered on? Defaults to South.
|
||||
var/step_energy_drain = 10
|
||||
var/health = 300 //Health is health
|
||||
@@ -193,6 +196,7 @@
|
||||
var/datum/action/innate/mecha/mech_toggle_cloaking/cloak_action = new
|
||||
|
||||
var/weapons_only_cycle = FALSE //So combat mechs don't switch to their equipment at times.
|
||||
|
||||
/obj/mecha/Initialize()
|
||||
..()
|
||||
|
||||
@@ -559,12 +563,12 @@
|
||||
target.attack_hand(src.occupant)
|
||||
return 1
|
||||
if(istype(target, /obj/machinery/embedded_controller))
|
||||
target.ui_interact(src.occupant)
|
||||
target.tgui_interact(src.occupant)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/mecha/contents_nano_distance(var/src_object, var/mob/living/user)
|
||||
. = user.shared_living_nano_distance(src_object) //allow them to interact with anything they can interact with normally.
|
||||
/obj/mecha/contents_tgui_distance(var/src_object, var/mob/living/user)
|
||||
. = user.shared_living_tgui_distance(src_object) //allow them to interact with anything they can interact with normally.
|
||||
if(. != STATUS_INTERACTIVE)
|
||||
//Allow interaction with the mecha or anything that is part of the mecha
|
||||
if(src_object == src || (src_object in src))
|
||||
@@ -641,18 +645,21 @@
|
||||
/obj/mecha/proc/get_step_delay()
|
||||
var/tally = 0
|
||||
|
||||
if(overload)
|
||||
tally = min(1, round(step_in/2))
|
||||
if(LAZYLEN(equipment))
|
||||
for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment)
|
||||
if(ME.get_step_delay())
|
||||
tally += ME.get_step_delay()
|
||||
|
||||
if(tally <= encumbrance_gap) // If the total is less than our encumbrance gap, ignore equipment weight.
|
||||
tally = 0
|
||||
else // Otherwise, start the tally after cutting that gap out.
|
||||
tally -= encumbrance_gap
|
||||
|
||||
for(var/slot in internal_components)
|
||||
var/obj/item/mecha_parts/component/C = internal_components[slot]
|
||||
if(C && C.get_step_delay())
|
||||
tally += C.get_step_delay()
|
||||
|
||||
for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment)
|
||||
if(ME.get_step_delay())
|
||||
tally += ME.get_step_delay()
|
||||
|
||||
var/obj/item/mecha_parts/component/actuator/actuator = internal_components[MECH_ACTUATOR]
|
||||
|
||||
if(!actuator) // Relying purely on hydraulic pumps. You're going nowhere fast.
|
||||
@@ -674,7 +681,10 @@
|
||||
break
|
||||
break
|
||||
|
||||
return max(1, round(tally, 0.1))
|
||||
if(overload) // At the end, because this would normally just make the mech *slower* since tally wasn't starting at 0.
|
||||
tally = min(1, round(tally/2))
|
||||
|
||||
return max(1, round(tally, 0.1)) // Round the total to the nearest 10th. Can't go lower than 1 tick. Even humans have a delay longer than that.
|
||||
|
||||
/obj/mecha/proc/dyndomove(direction)
|
||||
if(!can_move)
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
|
||||
minimum_penetration = 10
|
||||
|
||||
encumbrance_gap = 2
|
||||
|
||||
starting_components = list(
|
||||
/obj/item/mecha_parts/component/hull/durable,
|
||||
/obj/item/mecha_parts/component/actuator,
|
||||
|
||||
@@ -91,16 +91,16 @@
|
||||
|
||||
var/icon/default_worn_icon //Default on-mob icon
|
||||
var/worn_layer //Default on-mob layer
|
||||
|
||||
|
||||
// Pickup/Drop/Equip/Throw Sounds
|
||||
///Used when thrown into a mob
|
||||
var/mob_throw_hit_sound
|
||||
// Sound used when equipping the items into a valid slot.
|
||||
var/equip_sound
|
||||
var/equip_sound
|
||||
// pickup sound - this is the default
|
||||
var/pickup_sound = 'sound/items/pickup/device.ogg'
|
||||
var/pickup_sound = "generic_pickup"
|
||||
// drop sound - this is the default
|
||||
var/drop_sound = 'sound/items/drop/device.ogg'
|
||||
var/drop_sound = "generic_drop"
|
||||
|
||||
var/tip_timer // reference to timer id for a tooltip we might open soon
|
||||
|
||||
@@ -468,12 +468,12 @@ var/list/global/slot_flags_enumeration = list(
|
||||
|
||||
if(!canremove)
|
||||
return 0
|
||||
|
||||
|
||||
if(!slot)
|
||||
if(issilicon(M))
|
||||
return 1 // for stuff in grippers
|
||||
return 0
|
||||
|
||||
|
||||
if(!M.slot_is_accessible(slot, src, disable_warning? null : M))
|
||||
return 0
|
||||
return 1
|
||||
@@ -785,6 +785,8 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
// My best guess as to why this is here would be that it does so little. Still, keep it under all the procs, for sanity's sake.
|
||||
/obj/item/device
|
||||
icon = 'icons/obj/device.dmi'
|
||||
pickup_sound = 'sound/items/pickup/device.ogg'
|
||||
drop_sound = 'sound/items/drop/device.ogg'
|
||||
|
||||
//Worn icon generation for on-mob sprites
|
||||
/obj/item/proc/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer,var/icon/clip_mask = null) //VOREStation edit - add 'clip mask' argument.
|
||||
|
||||
@@ -233,7 +233,6 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
initialize_exonet(user)
|
||||
alert_called = 0
|
||||
update_icon()
|
||||
ui_interact(user) // TGUITODO: Remove
|
||||
tgui_interact(user)
|
||||
if(video_source)
|
||||
watch_video(user)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
var/in_hack_mode = 0
|
||||
var/list/known_targets
|
||||
var/list/supported_types
|
||||
var/datum/topic_state/default/must_hack/hack_state
|
||||
var/datum/tgui_state/default/must_hack/hack_state
|
||||
|
||||
/obj/item/device/multitool/hacktool/New()
|
||||
..()
|
||||
@@ -39,7 +39,8 @@
|
||||
if(!attempt_hack(user, A))
|
||||
return 0
|
||||
|
||||
A.ui_interact(user, state = hack_state)
|
||||
// Note, if you ever want to expand supported_types, you must manually add the custom state argument to their tgui_interact
|
||||
A.tgui_interact(user, custom_state = hack_state)
|
||||
return 1
|
||||
|
||||
/obj/item/device/multitool/hacktool/proc/attempt_hack(var/mob/user, var/atom/target)
|
||||
@@ -83,18 +84,18 @@
|
||||
/obj/item/device/multitool/hacktool/proc/on_target_destroy(var/target)
|
||||
known_targets -= target
|
||||
|
||||
/datum/topic_state/default/must_hack
|
||||
/datum/tgui_state/default/must_hack
|
||||
var/obj/item/device/multitool/hacktool/hacktool
|
||||
|
||||
/datum/topic_state/default/must_hack/New(var/hacktool)
|
||||
/datum/tgui_state/default/must_hack/New(var/hacktool)
|
||||
src.hacktool = hacktool
|
||||
..()
|
||||
|
||||
/datum/topic_state/default/must_hack/Destroy()
|
||||
/datum/tgui_state/default/must_hack/Destroy()
|
||||
hacktool = null
|
||||
return ..()
|
||||
|
||||
/datum/topic_state/default/must_hack/can_use_topic(var/src_object, var/mob/user)
|
||||
/datum/tgui_state/default/must_hack/can_use_topic(src_object, mob/user)
|
||||
if(!hacktool || !hacktool.in_hack_mode || !(src_object in hacktool.known_targets))
|
||||
return STATUS_CLOSE
|
||||
return ..()
|
||||
|
||||
@@ -151,18 +151,10 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
return tgui_interact(user)
|
||||
|
||||
/obj/item/device/radio/ui_interact(mob/user, ui_key, datum/nanoui/ui, force_open, datum/nano_ui/master_ui, datum/topic_state/state)
|
||||
log_runtime(EXCEPTION("Warning: [user] attempted to call ui_interact on radio [src] [type]. This is deprecated. Please update the caller to tgui_interact."))
|
||||
|
||||
/obj/item/device/radio/Topic(href, href_list)
|
||||
if(href_list["track"])
|
||||
log_runtime(EXCEPTION("Warning: Topic() was improperly called on radio [src] [type], with the track href and \[[href] [json_encode(href_list)]]. Please update the caller to use tgui_act."))
|
||||
. = ..()
|
||||
|
||||
/obj/item/device/radio/tgui_interact(mob/user, datum/tgui/ui)
|
||||
/obj/item/device/radio/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "Radio", name)
|
||||
ui = new(user, src, "Radio", name, parent_ui)
|
||||
ui.open()
|
||||
|
||||
/obj/item/device/radio/tgui_data(mob/user)
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
popup.set_content(jointext(dat,null))
|
||||
popup.open()
|
||||
|
||||
/obj/item/device/tvcamera/Topic(bred, href_list, state = physical_state)
|
||||
/obj/item/device/tvcamera/Topic(bred, href_list, state = GLOB.tgui_physical_state)
|
||||
if(..())
|
||||
return 1
|
||||
if(href_list["channel"])
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
singular_name = "human skin piece"
|
||||
icon_state = "sheet-hide"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/cloth.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cloth.ogg'
|
||||
drop_sound = 'sound/items/drop/leather.ogg'
|
||||
pickup_sound = 'sound/items/pickup/leather.ogg'
|
||||
|
||||
/obj/item/stack/animalhide/human
|
||||
amount = 50
|
||||
|
||||
@@ -126,11 +126,13 @@
|
||||
name = "empty cup"
|
||||
icon_state = "coffee_vended"
|
||||
drop_sound = 'sound/items/drop/papercup.ogg'
|
||||
pickup_sound = 'sound/items/pickup/papercup.ogg'
|
||||
|
||||
/obj/item/trash/ramen
|
||||
name = "cup ramen"
|
||||
icon_state = "ramen"
|
||||
drop_sound = 'sound/items/drop/papercup.ogg'
|
||||
pickup_sound = 'sound/items/pickup/papercup.ogg'
|
||||
|
||||
/obj/item/trash/tray
|
||||
name = "tray"
|
||||
@@ -141,6 +143,8 @@
|
||||
name = "candle"
|
||||
icon = 'icons/obj/candle.dmi'
|
||||
icon_state = "candle4"
|
||||
drop_sound = 'sound/items/drop/gloves.ogg'
|
||||
pickup_sound = 'sound/items/pickup/gloves.ogg'
|
||||
|
||||
/obj/item/trash/liquidfood
|
||||
name = "\improper \"LiquidFood\" ration packet"
|
||||
@@ -162,18 +166,26 @@
|
||||
/obj/item/trash/brownies
|
||||
name = "brownie tray"
|
||||
icon_state = "brownies"
|
||||
drop_sound = 'sound/items/drop/soda.ogg'
|
||||
pickup_sound = 'sound/items/pickup/soda.ogg'
|
||||
|
||||
/obj/item/trash/snacktray
|
||||
name = "snacktray"
|
||||
icon_state = "snacktray"
|
||||
drop_sound = 'sound/items/drop/soda.ogg'
|
||||
pickup_sound = 'sound/items/pickup/soda.ogg'
|
||||
|
||||
/obj/item/trash/dipbowl
|
||||
name = "dip bowl"
|
||||
icon_state = "dipbowl"
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
pickup_sound = 'sound/items/pickup/food.ogg'
|
||||
|
||||
/obj/item/trash/chipbasket
|
||||
name = "empty basket"
|
||||
icon_state = "chipbasket_empty"
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
pickup_sound = 'sound/items/pickup/food.ogg'
|
||||
|
||||
/obj/item/trash/spitgum
|
||||
name = "old gum"
|
||||
@@ -181,12 +193,15 @@
|
||||
icon = 'icons/obj/clothing/masks.dmi'
|
||||
icon_state = "spit-gum"
|
||||
drop_sound = 'sound/items/drop/flesh.ogg'
|
||||
pickup_sound = 'sound/items/pickup/flesh.ogg'
|
||||
|
||||
/obj/item/trash/lollibutt
|
||||
name = "lollipop stick"
|
||||
desc = "A lollipop stick devoid of pop."
|
||||
icon = 'icons/obj/clothing/masks.dmi'
|
||||
icon_state = "pop-stick"
|
||||
drop_sound = 'sound/items/drop/component.ogg'
|
||||
pickup_sound = 'sound/items/pickup/component.ogg'
|
||||
|
||||
/obj/item/trash/spitwad
|
||||
name = "spit wad"
|
||||
@@ -194,6 +209,7 @@
|
||||
icon = 'icons/obj/clothing/masks.dmi'
|
||||
icon_state = "spit-chew"
|
||||
drop_sound = 'sound/items/drop/flesh.ogg'
|
||||
pickup_sound = 'sound/items/pickup/flesh.ogg'
|
||||
slot_flags = SLOT_EARS | SLOT_MASK
|
||||
|
||||
/obj/item/trash/attack(mob/M as mob, mob/living/user as mob)
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
// **For augment items that aren't subtypes of other things.**
|
||||
|
||||
/obj/item/weapon/melee/augment
|
||||
name = "integrated item"
|
||||
desc = "A surprisingly non-descript item, integrated into its user. You probably shouldn't be seeing this."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "augment_box"
|
||||
|
||||
|
||||
/obj/item/weapon/melee/augment/blade
|
||||
name = "handblade"
|
||||
desc = "A sleek-looking telescopic blade that fits inside the hand. Favored by infiltration specialists and assassins."
|
||||
icon_state = "augment_handblade"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi',
|
||||
)
|
||||
w_class = ITEMSIZE_SMALL
|
||||
force = 15
|
||||
armor_penetration = 25
|
||||
sharp = 1
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
defend_chance = 10
|
||||
projectile_parry_chance = 5
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
/obj/item/weapon/melee/augment/blade/arm
|
||||
name = "armblade"
|
||||
desc = "A sleek-looking cybernetic blade that cleaves through people like butter. Favored by psychopaths and assassins."
|
||||
icon_state = "augment_armblade"
|
||||
w_class = ITEMSIZE_HUGE
|
||||
force = 30
|
||||
armor_penetration = 15
|
||||
edge = 1
|
||||
pry = 1
|
||||
defend_chance = 40
|
||||
projectile_parry_chance = 20
|
||||
@@ -14,6 +14,8 @@
|
||||
var/list/datum/autopsy_data_scanner/chemtraces = list()
|
||||
var/target_name = null
|
||||
var/timeofdeath = null
|
||||
drop_sound = 'sound/items/drop/device.ogg'
|
||||
pickup_sound = 'sound/items/pickup/device.ogg'
|
||||
|
||||
/datum/autopsy_data_scanner
|
||||
var/weapon = null // this is the DEFINITE weapon type that was used
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
var/board_type = new /datum/frame/frame_types/computer
|
||||
var/list/req_components = null
|
||||
var/contain_parts = 1
|
||||
drop_sound = 'sound/items/drop/device.ogg'
|
||||
pickup_sound = 'sound/items/pickup/device.ogg'
|
||||
|
||||
//Called when the circuitboard is used to contruct a new machine.
|
||||
/obj/item/weapon/circuitboard/proc/construct(var/obj/machinery/M)
|
||||
|
||||
@@ -110,10 +110,6 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/device/analyzer))
|
||||
var/obj/item/device/analyzer/A = W
|
||||
A.analyze_gases(src, user)
|
||||
return
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
@@ -6,8 +6,11 @@
|
||||
var/electronic_warfare = 1
|
||||
var/mob/registered_user = null
|
||||
|
||||
var/datum/tgui_module/agentcard/agentcard_module
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/Initialize()
|
||||
. = ..()
|
||||
agentcard_module = new(src)
|
||||
access = syndicate_access.Copy()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/station_access/Initialize()
|
||||
@@ -15,6 +18,7 @@
|
||||
access |= get_all_station_access()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/Destroy()
|
||||
QDEL_NULL(agentcard_module)
|
||||
unset_registered_user(registered_user)
|
||||
return ..()
|
||||
|
||||
@@ -36,33 +40,12 @@
|
||||
if(registered_user == user)
|
||||
switch(alert("Would you like edit the ID, or show it?","Show or Edit?", "Edit","Show"))
|
||||
if("Edit")
|
||||
ui_interact(user)
|
||||
agentcard_module.tgui_interact(user)
|
||||
if("Show")
|
||||
..()
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
var/data[0]
|
||||
var/entries[0]
|
||||
entries[++entries.len] = list("name" = "Age", "value" = age)
|
||||
entries[++entries.len] = list("name" = "Appearance", "value" = "Set")
|
||||
entries[++entries.len] = list("name" = "Assignment", "value" = assignment)
|
||||
entries[++entries.len] = list("name" = "Blood Type", "value" = blood_type)
|
||||
entries[++entries.len] = list("name" = "DNA Hash", "value" = dna_hash)
|
||||
entries[++entries.len] = list("name" = "Fingerprint Hash", "value" = fingerprint_hash)
|
||||
entries[++entries.len] = list("name" = "Name", "value" = registered_name)
|
||||
entries[++entries.len] = list("name" = "Photo", "value" = "Update")
|
||||
entries[++entries.len] = list("name" = "Sex", "value" = sex)
|
||||
entries[++entries.len] = list("name" = "Factory Reset", "value" = "Use With Care")
|
||||
data["electronic_warfare"] = electronic_warfare
|
||||
data["entries"] = entries
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "agent_id_card.tmpl", "Fake ID", 600, 400)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/proc/register_user(var/mob/user)
|
||||
if(!istype(user) || user == registered_user)
|
||||
@@ -79,114 +62,6 @@
|
||||
registered_user.unregister(OBSERVER_EVENT_DESTROY, src)
|
||||
registered_user = null
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/CanUseTopic(mob/user)
|
||||
if(user != registered_user)
|
||||
return STATUS_CLOSE
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/Topic(href, href_list, var/datum/topic_state/state)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
var/user = usr
|
||||
if(href_list["electronic_warfare"])
|
||||
electronic_warfare = text2num(href_list["electronic_warfare"])
|
||||
to_chat(user, "<span class='notice'>Electronic warfare [electronic_warfare ? "enabled" : "disabled"].</span>")
|
||||
else if(href_list["set"])
|
||||
switch(href_list["set"])
|
||||
if("Age")
|
||||
var/new_age = input(user,"What age would you like to put on this card?","Agent Card Age", age) as null|num
|
||||
if(!isnull(new_age) && CanUseTopic(user, state))
|
||||
if(new_age < 0)
|
||||
age = initial(age)
|
||||
else
|
||||
age = new_age
|
||||
to_chat(user, "<span class='notice'>Age has been set to '[age]'.</span>")
|
||||
. = 1
|
||||
if("Appearance")
|
||||
var/datum/card_state/choice = input(user, "Select the appearance for this card.", "Agent Card Appearance") as null|anything in id_card_states()
|
||||
if(choice && CanUseTopic(user, state))
|
||||
src.icon_state = choice.icon_state
|
||||
src.item_state = choice.item_state
|
||||
to_chat(usr, "<span class='notice'>Appearance changed to [choice].</span>")
|
||||
. = 1
|
||||
if("Assignment")
|
||||
var/new_job = sanitize(input(user,"What assignment would you like to put on this card?\nChanging assignment will not grant or remove any access levels.","Agent Card Assignment", assignment) as null|text)
|
||||
if(!isnull(new_job) && CanUseTopic(user, state))
|
||||
src.assignment = new_job
|
||||
to_chat(user, "<span class='notice'>Occupation changed to '[new_job]'.</span>")
|
||||
update_name()
|
||||
. = 1
|
||||
if("Blood Type")
|
||||
var/default = blood_type
|
||||
if(default == initial(blood_type) && ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.dna)
|
||||
default = H.dna.b_type
|
||||
var/new_blood_type = sanitize(input(user,"What blood type would you like to be written on this card?","Agent Card Blood Type",default) as null|text)
|
||||
if(!isnull(new_blood_type) && CanUseTopic(user, state))
|
||||
src.blood_type = new_blood_type
|
||||
to_chat(user, "<span class='notice'>Blood type changed to '[new_blood_type]'.</span>")
|
||||
. = 1
|
||||
if("DNA Hash")
|
||||
var/default = dna_hash
|
||||
if(default == initial(dna_hash) && ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.dna)
|
||||
default = H.dna.unique_enzymes
|
||||
var/new_dna_hash = sanitize(input(user,"What DNA hash would you like to be written on this card?","Agent Card DNA Hash",default) as null|text)
|
||||
if(!isnull(new_dna_hash) && CanUseTopic(user, state))
|
||||
src.dna_hash = new_dna_hash
|
||||
to_chat(user, "<span class='notice'>DNA hash changed to '[new_dna_hash]'.</span>")
|
||||
. = 1
|
||||
if("Fingerprint Hash")
|
||||
var/default = fingerprint_hash
|
||||
if(default == initial(fingerprint_hash) && ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.dna)
|
||||
default = md5(H.dna.uni_identity)
|
||||
var/new_fingerprint_hash = sanitize(input(user,"What fingerprint hash would you like to be written on this card?","Agent Card Fingerprint Hash",default) as null|text)
|
||||
if(!isnull(new_fingerprint_hash) && CanUseTopic(user, state))
|
||||
src.fingerprint_hash = new_fingerprint_hash
|
||||
to_chat(user, "<span class='notice'>Fingerprint hash changed to '[new_fingerprint_hash]'.</span>")
|
||||
. = 1
|
||||
if("Name")
|
||||
var/new_name = sanitizeName(input(user,"What name would you like to put on this card?","Agent Card Name", registered_name) as null|text)
|
||||
if(!isnull(new_name) && CanUseTopic(user, state))
|
||||
src.registered_name = new_name
|
||||
update_name()
|
||||
to_chat(user, "<span class='notice'>Name changed to '[new_name]'.</span>")
|
||||
. = 1
|
||||
if("Photo")
|
||||
set_id_photo(user)
|
||||
to_chat(user, "<span class='notice'>Photo changed.</span>")
|
||||
. = 1
|
||||
if("Sex")
|
||||
var/new_sex = sanitize(input(user,"What sex would you like to put on this card?","Agent Card Sex", sex) as null|text)
|
||||
if(!isnull(new_sex) && CanUseTopic(user, state))
|
||||
src.sex = new_sex
|
||||
to_chat(user, "<span class='notice'>Sex changed to '[new_sex]'.</span>")
|
||||
. = 1
|
||||
if("Factory Reset")
|
||||
if(alert("This will factory reset the card, including access and owner. Continue?", "Factory Reset", "No", "Yes") == "Yes" && CanUseTopic(user, state))
|
||||
age = initial(age)
|
||||
access = syndicate_access.Copy()
|
||||
assignment = initial(assignment)
|
||||
blood_type = initial(blood_type)
|
||||
dna_hash = initial(dna_hash)
|
||||
electronic_warfare = initial(electronic_warfare)
|
||||
fingerprint_hash = initial(fingerprint_hash)
|
||||
icon_state = initial(icon_state)
|
||||
name = initial(name)
|
||||
registered_name = initial(registered_name)
|
||||
unset_registered_user()
|
||||
sex = initial(sex)
|
||||
to_chat(user, "<span class='notice'>All information has been deleted from \the [src].</span>")
|
||||
. = 1
|
||||
|
||||
// Always update the UI, or buttons will spin indefinitely
|
||||
SSnanoui.update_uis(src)
|
||||
|
||||
/var/global/list/id_card_states
|
||||
/proc/id_card_states()
|
||||
if(!id_card_states)
|
||||
|
||||
@@ -169,6 +169,10 @@
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted/hand/sword
|
||||
organ_display_name = "weapon augment"
|
||||
|
||||
/obj/item/weapon/implant/organ/limbaugment/wrist/blade
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted/hand/blade
|
||||
organ_display_name = "weapon augment"
|
||||
|
||||
// Fore-arm
|
||||
/obj/item/weapon/implant/organ/limbaugment/laser
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted
|
||||
@@ -185,6 +189,10 @@
|
||||
/obj/item/weapon/implant/organ/limbaugment/upperarm/surge
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted/shoulder/surge
|
||||
|
||||
/obj/item/weapon/implant/organ/limbaugment/upperarm/blade
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted/shoulder/blade
|
||||
organ_display_name = "weapon augment"
|
||||
|
||||
/*
|
||||
* Others
|
||||
*/
|
||||
|
||||
@@ -279,3 +279,23 @@
|
||||
src.imp = new /obj/item/weapon/implant/organ/pelvic( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/armblade
|
||||
name = "glass case - 'Armblade'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/armblade/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm/blade( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/handblade
|
||||
name = "glass case - 'Handblade'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/handblade/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ/limbaugment/wrist/blade( src )
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -362,6 +362,8 @@
|
||||
usr.client.screen -= W
|
||||
W.dropped(usr)
|
||||
add_fingerprint(usr)
|
||||
if (use_sound)
|
||||
playsound(src, src.use_sound, 50, 0, -5) //Something broke "add item to container" sounds, this is a hacky fix.
|
||||
|
||||
if(!prevent_warning)
|
||||
for(var/mob/M in viewers(usr, null))
|
||||
|
||||
@@ -128,6 +128,12 @@
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/sprinter
|
||||
case_type = /obj/item/weapon/implantcase/sprinter
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/armblade
|
||||
case_type = /obj/item/weapon/implantcase/armblade
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/handblade
|
||||
case_type = /obj/item/weapon/implantcase/handblade
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/space
|
||||
name = "boxed space suit and helmet"
|
||||
|
||||
@@ -42,9 +42,9 @@
|
||||
slot_flags = SLOT_ID
|
||||
|
||||
var/obj/item/weapon/card/id/front_id = null
|
||||
|
||||
drop_sound = 'sound/items/drop/cloth.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cloth.ogg'
|
||||
|
||||
drop_sound = 'sound/items/drop/leather.ogg'
|
||||
pickup_sound = 'sound/items/pickup/leather.ogg'
|
||||
|
||||
/obj/item/weapon/storage/wallet/remove_from_storage(obj/item/W as obj, atom/new_location)
|
||||
. = ..(W, new_location)
|
||||
|
||||
@@ -120,9 +120,6 @@ var/list/global/tank_gauge_cache = list()
|
||||
if (istype(src.loc, /obj/item/assembly))
|
||||
icon = src.loc
|
||||
|
||||
if ((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1)
|
||||
var/obj/item/device/analyzer/A = W
|
||||
A.analyze_gases(src, user)
|
||||
else if (istype(W,/obj/item/latexballon))
|
||||
var/obj/item/latexballon/LB = W
|
||||
LB.blow(src)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
old_turf.unregister_dangerous_object(src)
|
||||
new_turf.register_dangerous_object(src)
|
||||
|
||||
/obj/Topic(href, href_list, var/datum/topic_state/state = default_state)
|
||||
/obj/Topic(href, href_list, var/datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
if(usr && ..())
|
||||
return 1
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
CouldNotUseTopic(usr)
|
||||
return 1
|
||||
|
||||
/obj/CanUseTopic(var/mob/user, var/datum/topic_state/state = default_state)
|
||||
/obj/CanUseTopic(var/mob/user, var/datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
if(user.CanUseObjTopic(src))
|
||||
return ..()
|
||||
to_chat(user, "<span class='danger'>[bicon(src)]Access Denied!</span>")
|
||||
@@ -69,7 +69,7 @@
|
||||
return 1
|
||||
|
||||
/obj/proc/CouldUseTopic(var/mob/user)
|
||||
var/atom/host = nano_host()
|
||||
var/atom/host = tgui_host()
|
||||
host.add_hiddenprint(user)
|
||||
|
||||
/obj/proc/CouldNotUseTopic(var/mob/user)
|
||||
@@ -135,7 +135,6 @@
|
||||
in_use = 0
|
||||
|
||||
/obj/attack_ghost(mob/user)
|
||||
ui_interact(user)
|
||||
tgui_interact(user)
|
||||
..()
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ LINEN BINS
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
w_class = ITEMSIZE_SMALL
|
||||
drop_sound = 'sound/items/drop/cloth.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cloth.ogg'
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
||||
|
||||
/obj/item/weapon/bedsheet/attack_self(mob/user as mob)
|
||||
user.drop_item()
|
||||
|
||||
@@ -20,8 +20,90 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
|
||||
var/has_items = FALSE
|
||||
var/dismantled = TRUE
|
||||
var/signs = 0 //maximum capacity hardcoded below
|
||||
var/list/tgui_icons = list()
|
||||
|
||||
var/static/list/equippable_item_whitelist
|
||||
|
||||
/obj/structure/janitorialcart/proc/equip_janicart_item(mob/user, obj/item/I)
|
||||
if(!equippable_item_whitelist)
|
||||
equippable_item_whitelist = typecacheof(list(
|
||||
/obj/item/weapon/storage/bag/trash,
|
||||
/obj/item/weapon/mop,
|
||||
/obj/item/weapon/reagent_containers/spray,
|
||||
/obj/item/device/lightreplacer,
|
||||
/obj/item/clothing/suit/caution,
|
||||
))
|
||||
|
||||
if(!is_type_in_typecache(I, equippable_item_whitelist))
|
||||
to_chat(user, "<span class='warning'>There's no room in [src] for [I].</span>")
|
||||
return FALSE
|
||||
|
||||
if(!user.unEquip(I, 0, src))
|
||||
to_chat(user, "<span class='warning'>[I] is stuck to your hand.</span>")
|
||||
return FALSE
|
||||
|
||||
if(istype(I, /obj/item/weapon/storage/bag/trash))
|
||||
if(mybag)
|
||||
to_chat(user, "<span class='warning'>[src] already has \an [I].</span>")
|
||||
return FALSE
|
||||
mybag = I
|
||||
setTguiIcon("mybag", mybag)
|
||||
|
||||
else if(istype(I, /obj/item/weapon/mop))
|
||||
if(mymop)
|
||||
to_chat(user, "<span class='warning'>[src] already has \an [I].</span>")
|
||||
return FALSE
|
||||
mymop = I
|
||||
setTguiIcon("mymop", mymop)
|
||||
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/spray))
|
||||
if(myspray)
|
||||
to_chat(user, "<span class='warning'>[src] already has \an [I].</span>")
|
||||
return FALSE
|
||||
myspray = I
|
||||
setTguiIcon("myspray", myspray)
|
||||
|
||||
else if(istype(I, /obj/item/device/lightreplacer))
|
||||
if(myreplacer)
|
||||
to_chat(user, "<span class='warning'>[src] already has \an [I].</span>")
|
||||
return FALSE
|
||||
myreplacer = I
|
||||
setTguiIcon("myreplacer", myreplacer)
|
||||
|
||||
else if(istype(I, /obj/item/clothing/suit/caution))
|
||||
if(signs < 4)
|
||||
signs++
|
||||
setTguiIcon("signs", I)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] can't hold any more signs.</span>")
|
||||
return FALSE
|
||||
else
|
||||
// This may look like duplicate code, but it's important that we don't call unEquip *and* warn the user if
|
||||
// something horrible goes wrong. (this else is never supposed to happen)
|
||||
to_chat(user, "<span class='warning'>There's no room in [src] for [I].</span>")
|
||||
return FALSE
|
||||
|
||||
update_icon()
|
||||
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/structure/janitorialcart/proc/setTguiIcon(key, atom/A)
|
||||
if(!istype(A) || !key)
|
||||
return
|
||||
|
||||
var/icon/F = getFlatIcon(A, defdir = SOUTH, no_anim = TRUE)
|
||||
tgui_icons["[key]"] = "'data:image/png;base64,[icon2base64(F)]'"
|
||||
SStgui.update_uis(src)
|
||||
|
||||
/obj/structure/janitorialcart/proc/nullTguiIcon(key)
|
||||
if(!key)
|
||||
return
|
||||
tgui_icons.Remove(key)
|
||||
SStgui.update_uis(src)
|
||||
|
||||
/obj/structure/janitorialcart/proc/clearTguiIcons()
|
||||
tgui_icons.Cut()
|
||||
SStgui.update_uis(src)
|
||||
|
||||
/obj/structure/janitorialcart/Destroy()
|
||||
QDEL_NULL(mybag)
|
||||
@@ -29,6 +111,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
|
||||
QDEL_NULL(myspray)
|
||||
QDEL_NULL(myreplacer)
|
||||
QDEL_NULL(mybucket)
|
||||
clearTguiIcons()
|
||||
return ..()
|
||||
|
||||
/obj/structure/janitorialcart/examine(mob/user)
|
||||
@@ -43,6 +126,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
|
||||
if (istype(O, /obj/structure/mopbucket) && !mybucket)
|
||||
O.forceMove(src)
|
||||
mybucket = O
|
||||
setTguiIcon("mybucket", mybucket)
|
||||
to_chat(user, "You mount the [O] on the janicart.")
|
||||
update_icon()
|
||||
else
|
||||
@@ -70,38 +154,19 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
|
||||
return 1
|
||||
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/spray) && !myspray)
|
||||
user.unEquip(I, 0, src)
|
||||
myspray = I
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
|
||||
equip_janicart_item(user, I)
|
||||
return 1
|
||||
|
||||
else if(istype(I, /obj/item/device/lightreplacer) && !myreplacer)
|
||||
user.unEquip(I, 0, src)
|
||||
myreplacer = I
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
|
||||
equip_janicart_item(user, I)
|
||||
return 1
|
||||
|
||||
else if(istype(I, /obj/item/weapon/storage/bag/trash) && !mybag)
|
||||
user.unEquip(I, 0, src)
|
||||
mybag = I
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
|
||||
equip_janicart_item(user, I)
|
||||
return 1
|
||||
|
||||
else if(istype(I, /obj/item/clothing/suit/caution))
|
||||
if(signs < 4)
|
||||
user.unEquip(I, 0, src)
|
||||
signs++
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] can't hold any more signs.</span>")
|
||||
equip_janicart_item(user, I)
|
||||
return 1
|
||||
|
||||
else if(mybag)
|
||||
@@ -124,16 +189,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
|
||||
if(user.incapacitated() || !Adjacent(user)) return
|
||||
var/obj/I = usr.get_active_hand()
|
||||
if(istype(I, /obj/item/weapon/mop))
|
||||
if(!mymop)
|
||||
usr.drop_from_inventory(I,src)
|
||||
mymop = I
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
to_chat(usr, "<span class='notice'>You put [I] into [src].</span>")
|
||||
update_icon()
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>The cart already has a mop attached</span>")
|
||||
return
|
||||
equip_janicart_item(user, I)
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers) && mybucket)
|
||||
var/obj/item/weapon/reagent_containers/C = I
|
||||
C.afterattack(mybucket, usr, 1)
|
||||
@@ -141,75 +197,95 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
|
||||
|
||||
|
||||
/obj/structure/janitorialcart/attack_hand(mob/user)
|
||||
ui_interact(user)
|
||||
tgui_interact(user)
|
||||
return
|
||||
|
||||
/obj/structure/janitorialcart/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = TRUE)
|
||||
var/data[0]
|
||||
data["name"] = capitalize(name)
|
||||
data["bag"] = mybag ? capitalize(mybag.name) : null
|
||||
data["bucket"] = mybucket ? capitalize(mybucket.name) : null
|
||||
data["mop"] = mymop ? capitalize(mymop.name) : null
|
||||
data["spray"] = myspray ? capitalize(myspray.name) : null
|
||||
data["replacer"] = myreplacer ? capitalize(myreplacer.name) : null
|
||||
data["signs"] = signs ? "[signs] sign\s" : null
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
/obj/structure/janitorialcart/tgui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "janitorcart.tmpl", "Janitorial cart", 240, 160)
|
||||
ui.set_initial_data(data)
|
||||
ui = new(user, src, "JanitorCart", name) // 240, 160
|
||||
ui.set_autoupdate(FALSE)
|
||||
ui.open()
|
||||
|
||||
/obj/structure/janitorialcart/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
|
||||
var/list/data = ..()
|
||||
|
||||
/obj/structure/janitorialcart/Topic(href, href_list)
|
||||
if(!in_range(src, usr))
|
||||
return
|
||||
if(!isliving(usr))
|
||||
return
|
||||
var/mob/living/user = usr
|
||||
data["mybag"] = mybag ? capitalize(mybag.name) : null
|
||||
data["mybucket"] = mybucket ? capitalize(mybucket.name) : null
|
||||
data["mymop"] = mymop ? capitalize(mymop.name) : null
|
||||
data["myspray"] = myspray ? capitalize(myspray.name) : null
|
||||
data["myreplacer"] = myreplacer ? capitalize(myreplacer.name) : null
|
||||
data["signs"] = signs ? "[signs] sign\s" : null
|
||||
|
||||
if(href_list["take"])
|
||||
switch(href_list["take"])
|
||||
if("garbage")
|
||||
if(mybag)
|
||||
user.put_in_hands(mybag)
|
||||
to_chat(user, "<span class='notice'>You take [mybag] from [src].</span>")
|
||||
mybag = null
|
||||
if("mop")
|
||||
if(mymop)
|
||||
user.put_in_hands(mymop)
|
||||
to_chat(user, "<span class='notice'>You take [mymop] from [src].</span>")
|
||||
mymop = null
|
||||
if("spray")
|
||||
if(myspray)
|
||||
user.put_in_hands(myspray)
|
||||
to_chat(user, "<span class='notice'>You take [myspray] from [src].</span>")
|
||||
myspray = null
|
||||
if("replacer")
|
||||
if(myreplacer)
|
||||
user.put_in_hands(myreplacer)
|
||||
to_chat(user, "<span class='notice'>You take [myreplacer] from [src].</span>")
|
||||
myreplacer = null
|
||||
if("sign")
|
||||
if(signs)
|
||||
var/obj/item/clothing/suit/caution/Sign = locate() in src
|
||||
if(Sign)
|
||||
user.put_in_hands(Sign)
|
||||
to_chat(user, "<span class='notice'>You take \a [Sign] from [src].</span>")
|
||||
signs--
|
||||
else
|
||||
warning("[src] signs ([signs]) didn't match contents")
|
||||
signs = 0
|
||||
if("bucket")
|
||||
if(mybucket)
|
||||
mybucket.forceMove(get_turf(user))
|
||||
to_chat(user, "<span class='notice'>You unmount [mybucket] from [src].</span>")
|
||||
mybucket = null
|
||||
data["icons"] = tgui_icons
|
||||
return data
|
||||
|
||||
/obj/structure/janitorialcart/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
|
||||
switch(action)
|
||||
if("bag")
|
||||
if(mybag)
|
||||
usr.put_in_hands(mybag)
|
||||
to_chat(usr, "<span class='notice'>You take [mybag] from [src].</span>")
|
||||
mybag = null
|
||||
nullTguiIcon("mybag")
|
||||
else if(is_type_in_typecache(I, equippable_item_whitelist))
|
||||
equip_janicart_item(usr, I)
|
||||
if("mop")
|
||||
if(mymop)
|
||||
usr.put_in_hands(mymop)
|
||||
to_chat(usr, "<span class='notice'>You take [mymop] from [src].</span>")
|
||||
mymop = null
|
||||
nullTguiIcon("mymop")
|
||||
else if(is_type_in_typecache(I, equippable_item_whitelist))
|
||||
equip_janicart_item(usr, I)
|
||||
if("spray")
|
||||
if(myspray)
|
||||
usr.put_in_hands(myspray)
|
||||
to_chat(usr, "<span class='notice'>You take [myspray] from [src].</span>")
|
||||
myspray = null
|
||||
nullTguiIcon("myspray")
|
||||
else if(is_type_in_typecache(I, equippable_item_whitelist))
|
||||
equip_janicart_item(usr, I)
|
||||
if("replacer")
|
||||
if(myreplacer)
|
||||
usr.put_in_hands(myreplacer)
|
||||
to_chat(usr, "<span class='notice'>You take [myreplacer] from [src].</span>")
|
||||
myreplacer = null
|
||||
nullTguiIcon("myreplacer")
|
||||
else if(is_type_in_typecache(I, equippable_item_whitelist))
|
||||
equip_janicart_item(usr, I)
|
||||
if("sign")
|
||||
if(istype(I, /obj/item/clothing/suit/caution) && signs < 4)
|
||||
equip_janicart_item(usr, I)
|
||||
else if(signs)
|
||||
var/obj/item/clothing/suit/caution/sign = locate() in src
|
||||
if(sign)
|
||||
usr.put_in_hands(sign)
|
||||
to_chat(usr, "<span class='notice'>You take \a [sign] from [src].</span>")
|
||||
signs--
|
||||
if(!signs)
|
||||
nullTguiIcon("signs")
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>[src] doesn't have any signs left.</span>")
|
||||
if("bucket")
|
||||
if(mybucket)
|
||||
mybucket.forceMove(get_turf(usr))
|
||||
to_chat(usr, "<span class='notice'>You unmount [mybucket] from [src].</span>")
|
||||
mybucket = null
|
||||
nullTguiIcon("mybucket")
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>((Drag and drop a mop bucket onto [src] to equip it.))</span>")
|
||||
return FALSE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/structure/janitorialcart/update_icon()
|
||||
overlays.Cut()
|
||||
@@ -229,11 +305,6 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
|
||||
if(signs)
|
||||
overlays += "cart_sign[signs]"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//This is called if the cart is caught in an explosion, or destroyed by weapon fire
|
||||
/obj/structure/janitorialcart/proc/spill(var/chance = 100)
|
||||
var/turf/dropspot = get_turf(src)
|
||||
@@ -275,6 +346,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
|
||||
mybag = null
|
||||
|
||||
update_icon()
|
||||
clearTguiIcons()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -172,7 +172,7 @@ obj/structure/safe/ex_act(severity)
|
||||
icon_state = "floorsafe"
|
||||
density = 0
|
||||
level = 1 //underfloor
|
||||
plane = TURF_PLANE
|
||||
plane = PLATING_PLANE
|
||||
layer = ABOVE_UTILITY
|
||||
|
||||
/obj/structure/safe/floor/Initialize()
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
if(!UWC)
|
||||
return
|
||||
var/datum/category_item/underwear/selected_underwear = input(H, "Choose underwear:", "Choose underwear", H.all_underwear[UWC.name]) as null|anything in UWC.items
|
||||
if(selected_underwear && CanUseTopic(H, default_state))
|
||||
if(selected_underwear && CanUseTopic(H, GLOB.tgui_default_state))
|
||||
H.all_underwear[UWC.name] = selected_underwear
|
||||
H.hide_underwear[UWC.name] = FALSE
|
||||
. = TRUE
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
continue
|
||||
if(!SM.Adjacent(user) || !SM.Adjacent(target)) // Cleaving only hits mobs near the target mob and user.
|
||||
continue
|
||||
if(!attack_can_reach(user, SM, 1))
|
||||
continue
|
||||
if(resolve_attackby(SM, user, attack_modifier = 0.5)) // Hit them with the weapon. This won't cause recursive cleaving due to the cleaving variable being set to true.
|
||||
hit_mobs++
|
||||
|
||||
|
||||
@@ -266,6 +266,15 @@
|
||||
soundin = pick('sound/machines/sm/accent/normal/1.ogg', 'sound/machines/sm/accent/normal/2.ogg', 'sound/machines/sm/accent/normal/3.ogg', 'sound/machines/sm/accent/normal/4.ogg', 'sound/machines/sm/accent/normal/5.ogg', 'sound/machines/sm/accent/normal/6.ogg', 'sound/machines/sm/accent/normal/7.ogg', 'sound/machines/sm/accent/normal/8.ogg', 'sound/machines/sm/accent/normal/9.ogg', 'sound/machines/sm/accent/normal/10.ogg', 'sound/machines/sm/accent/normal/11.ogg', 'sound/machines/sm/accent/normal/12.ogg', 'sound/machines/sm/accent/normal/13.ogg', 'sound/machines/sm/accent/normal/14.ogg', 'sound/machines/sm/accent/normal/15.ogg', 'sound/machines/sm/accent/normal/16.ogg', 'sound/machines/sm/accent/normal/17.ogg', 'sound/machines/sm/accent/normal/18.ogg', 'sound/machines/sm/accent/normal/19.ogg', 'sound/machines/sm/accent/normal/20.ogg', 'sound/machines/sm/accent/normal/21.ogg', 'sound/machines/sm/accent/normal/22.ogg', 'sound/machines/sm/accent/normal/23.ogg', 'sound/machines/sm/accent/normal/24.ogg', 'sound/machines/sm/accent/normal/25.ogg', 'sound/machines/sm/accent/normal/26.ogg', 'sound/machines/sm/accent/normal/27.ogg', 'sound/machines/sm/accent/normal/28.ogg', 'sound/machines/sm/accent/normal/29.ogg', 'sound/machines/sm/accent/normal/30.ogg', 'sound/machines/sm/accent/normal/31.ogg', 'sound/machines/sm/accent/normal/32.ogg', 'sound/machines/sm/accent/normal/33.ogg', 'sound/machines/sm/supermatter1.ogg', 'sound/machines/sm/supermatter2.ogg', 'sound/machines/sm/supermatter3.ogg')
|
||||
if("smdelam")
|
||||
soundin = pick('sound/machines/sm/accent/delam/1.ogg', 'sound/machines/sm/accent/normal/2.ogg', 'sound/machines/sm/accent/normal/3.ogg', 'sound/machines/sm/accent/normal/4.ogg', 'sound/machines/sm/accent/normal/5.ogg', 'sound/machines/sm/accent/normal/6.ogg', 'sound/machines/sm/accent/normal/7.ogg', 'sound/machines/sm/accent/normal/8.ogg', 'sound/machines/sm/accent/normal/9.ogg', 'sound/machines/sm/accent/normal/10.ogg', 'sound/machines/sm/accent/normal/11.ogg', 'sound/machines/sm/accent/normal/12.ogg', 'sound/machines/sm/accent/normal/13.ogg', 'sound/machines/sm/accent/normal/14.ogg', 'sound/machines/sm/accent/normal/15.ogg', 'sound/machines/sm/accent/normal/16.ogg', 'sound/machines/sm/accent/normal/17.ogg', 'sound/machines/sm/accent/normal/18.ogg', 'sound/machines/sm/accent/normal/19.ogg', 'sound/machines/sm/accent/normal/20.ogg', 'sound/machines/sm/accent/normal/21.ogg', 'sound/machines/sm/accent/normal/22.ogg', 'sound/machines/sm/accent/normal/23.ogg', 'sound/machines/sm/accent/normal/24.ogg', 'sound/machines/sm/accent/normal/25.ogg', 'sound/machines/sm/accent/normal/26.ogg', 'sound/machines/sm/accent/normal/27.ogg', 'sound/machines/sm/accent/normal/28.ogg', 'sound/machines/sm/accent/normal/29.ogg', 'sound/machines/sm/accent/normal/30.ogg', 'sound/machines/sm/accent/normal/31.ogg', 'sound/machines/sm/accent/normal/32.ogg', 'sound/machines/sm/accent/normal/33.ogg', 'sound/machines/sm/supermatter1.ogg', 'sound/machines/sm/supermatter2.ogg', 'sound/machines/sm/supermatter3.ogg')
|
||||
if ("generic_drop")
|
||||
soundin = pick(
|
||||
'sound/items/drop/generic1.ogg',
|
||||
'sound/items/drop/generic2.ogg' )
|
||||
if ("generic_pickup")
|
||||
soundin = pick(
|
||||
'sound/items/pickup/generic1.ogg',
|
||||
'sound/items/pickup/generic2.ogg',
|
||||
'sound/items/pickup/generic3.ogg')
|
||||
return soundin
|
||||
|
||||
//Are these even used?
|
||||
|
||||
@@ -433,45 +433,6 @@
|
||||
// Insert("polycrystal", 'icons/obj/telescience.dmi', "polycrystal")
|
||||
// ..()
|
||||
|
||||
/datum/asset/nanoui
|
||||
var/list/common = list()
|
||||
|
||||
var/list/common_dirs = list(
|
||||
"nano/css/",
|
||||
"nano/images/",
|
||||
"nano/images/modular_computers/",
|
||||
"nano/js/"
|
||||
)
|
||||
var/list/template_dirs = list(
|
||||
"nano/templates/"
|
||||
)
|
||||
|
||||
/datum/asset/nanoui/register()
|
||||
// Crawl the directories to find files.
|
||||
for(var/path in common_dirs)
|
||||
var/list/filenames = flist(path)
|
||||
for(var/filename in filenames)
|
||||
if(copytext(filename, length(filename)) != "/") // Ignore directories.
|
||||
if(fexists(path + filename))
|
||||
common[filename] = fcopy_rsc(path + filename)
|
||||
register_asset(filename, common[filename])
|
||||
// Combine all templates into a single bundle.
|
||||
var/list/template_data = list()
|
||||
for(var/path in template_dirs)
|
||||
var/list/filenames = flist(path)
|
||||
for(var/filename in filenames)
|
||||
if(copytext(filename, length(filename) - 4) == ".tmpl") // Ignore directories.
|
||||
template_data[filename] = file2text(path + filename)
|
||||
var/template_bundle = "function nanouiTemplateBundle(){return [json_encode(template_data)];}"
|
||||
var/fname = "data/nano_templates_bundle.js"
|
||||
fdel(fname)
|
||||
text2file(template_bundle, fname)
|
||||
register_asset("nano_templates_bundle.js", fcopy_rsc(fname))
|
||||
fdel(fname)
|
||||
|
||||
/datum/asset/nanoui/send(client)
|
||||
send_asset_list(client, common)
|
||||
|
||||
//Pill sprites for UIs
|
||||
/datum/asset/chem_master
|
||||
var/assets = list()
|
||||
@@ -522,4 +483,29 @@
|
||||
|
||||
/datum/asset/spritesheet/sheetmaterials/register()
|
||||
InsertAll("", 'icons/obj/stacks.dmi')
|
||||
..()
|
||||
..()
|
||||
|
||||
// Nanomaps
|
||||
/datum/asset/simple/nanomaps
|
||||
// It REALLY doesnt matter too much if these arent up to date
|
||||
// They are relatively big
|
||||
assets = list(
|
||||
"southern_cross_nanomap_z1.png" = 'icons/_nanomaps/southern_cross_nanomap_z1.png',
|
||||
"southern_cross_nanomap_z10.png" = 'icons/_nanomaps/southern_cross_nanomap_z10.png',
|
||||
"southern_cross_nanomap_z2.png" = 'icons/_nanomaps/southern_cross_nanomap_z2.png',
|
||||
"southern_cross_nanomap_z3.png" = 'icons/_nanomaps/southern_cross_nanomap_z3.png',
|
||||
"southern_cross_nanomap_z5.png" = 'icons/_nanomaps/southern_cross_nanomap_z5.png',
|
||||
"southern_cross_nanomap_z6.png" = 'icons/_nanomaps/southern_cross_nanomap_z6.png',
|
||||
"tether_nanomap_z1.png" = 'icons/_nanomaps/tether_nanomap_z1.png',
|
||||
"tether_nanomap_z10.png" = 'icons/_nanomaps/tether_nanomap_z10.png',
|
||||
"tether_nanomap_z13.png" = 'icons/_nanomaps/tether_nanomap_z13.png',
|
||||
"tether_nanomap_z14.png" = 'icons/_nanomaps/tether_nanomap_z14.png',
|
||||
"tether_nanomap_z2.png" = 'icons/_nanomaps/tether_nanomap_z2.png',
|
||||
"tether_nanomap_z3.png" = 'icons/_nanomaps/tether_nanomap_z3.png',
|
||||
"tether_nanomap_z4.png" = 'icons/_nanomaps/tether_nanomap_z4.png',
|
||||
"tether_nanomap_z5.png" = 'icons/_nanomaps/tether_nanomap_z5.png',
|
||||
"tether_nanomap_z6.png" = 'icons/_nanomaps/tether_nanomap_z6.png',
|
||||
"tether_nanomap_z7.png" = 'icons/_nanomaps/tether_nanomap_z7.png',
|
||||
"tether_nanomap_z8.png" = 'icons/_nanomaps/tether_nanomap_z8.png',
|
||||
"tether_nanomap_z9.png" = 'icons/_nanomaps/tether_nanomap_z9.png',
|
||||
)
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "clothing"
|
||||
siemens_coefficient = 0.9
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cloth.ogg'
|
||||
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
||||
var/list/species_restricted = null //Only these species can wear this kit.
|
||||
var/gunshot_residue //Used by forensics.
|
||||
|
||||
@@ -435,6 +435,8 @@
|
||||
fingerprint_chance = 100
|
||||
punch_force = 2
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
pickup_sound = 'sound/items/pickup/ring.ogg'
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//Head
|
||||
@@ -573,6 +575,9 @@
|
||||
var/list/say_messages
|
||||
var/list/say_verbs
|
||||
|
||||
drop_sound = "generic_drop"
|
||||
pickup_sound = "generic_pickup"
|
||||
|
||||
/obj/item/clothing/mask/update_clothing_icon()
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
@@ -733,6 +738,7 @@
|
||||
siemens_coefficient = 0.9
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
preserve_item = 1
|
||||
equip_sound = 'sound/items/jumpsuit_equip.ogg'
|
||||
|
||||
|
||||
sprite_sheets = list(
|
||||
|
||||
@@ -53,8 +53,8 @@
|
||||
desc = "A delicate golden chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain"
|
||||
item_state_slots = list(slot_r_hand_str = "egg5", slot_l_hand_str = "egg5")
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
pickup_sound = 'sound/items/pickup/accessory.ogg'
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
pickup_sound = 'sound/items/pickup/ring.ogg'
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/silver
|
||||
name = "Silver headtail chains"
|
||||
@@ -85,8 +85,8 @@
|
||||
desc = "Golden metallic bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band"
|
||||
item_state_slots = list(slot_r_hand_str = "egg5", slot_l_hand_str = "egg5")
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
pickup_sound = 'sound/items/pickup/accessory.ogg'
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
pickup_sound = 'sound/items/pickup/ring.ogg'
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/silver
|
||||
name = "Silver headtail bands"
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
var/obj/item/clothing/glasses/hud/omni/hud = null
|
||||
var/mode = "civ"
|
||||
icon_state = "glasses"
|
||||
var/datum/nano_module/arscreen
|
||||
var/arscreen_path
|
||||
var/datum/tgui_module/tgarscreen
|
||||
var/tgarscreen_path
|
||||
var/flash_prot = 0 //0 for none, 1 for flash weapon protection, 2 for welder protection
|
||||
@@ -18,34 +16,24 @@
|
||||
|
||||
/obj/item/clothing/glasses/omnihud/New()
|
||||
..()
|
||||
if(arscreen_path)
|
||||
arscreen = new arscreen_path(src)
|
||||
if(tgarscreen_path)
|
||||
tgarscreen = new tgarscreen_path(src)
|
||||
|
||||
/obj/item/clothing/glasses/omnihud/Destroy()
|
||||
QDEL_NULL(arscreen)
|
||||
QDEL_NULL(tgarscreen)
|
||||
. = ..()
|
||||
|
||||
/obj/item/clothing/glasses/omnihud/dropped()
|
||||
if(arscreen)
|
||||
SSnanoui.close_uis(src)
|
||||
if(tgarscreen)
|
||||
SStgui.close_uis(src)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/glasses/omnihud/emp_act(var/severity)
|
||||
if(arscreen)
|
||||
SSnanoui.close_uis(src)
|
||||
if(tgarscreen)
|
||||
SStgui.close_uis(src)
|
||||
var/disconnect_ar = arscreen
|
||||
var/disconnect_tgar = tgarscreen
|
||||
arscreen = null
|
||||
tgarscreen = null
|
||||
spawn(20 SECONDS)
|
||||
arscreen = disconnect_ar
|
||||
tgarscreen = disconnect_tgar
|
||||
|
||||
//extra fun for non-sci variants; a small chance flip the state to the dumb 3d glasses when EMP'd
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
icon_state = "sunflower_crown"
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
pickup_sound = 'sound/items/pickup/herb.ogg'
|
||||
|
||||
/obj/item/clothing/head/lavender_crown
|
||||
name = "lavender crown"
|
||||
@@ -44,6 +45,7 @@
|
||||
icon_state = "lavender_crown"
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
pickup_sound = 'sound/items/pickup/herb.ogg'
|
||||
|
||||
/obj/item/clothing/head/poppy_crown
|
||||
name = "poppy crown"
|
||||
@@ -51,6 +53,7 @@
|
||||
icon_state = "poppy_crown"
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
pickup_sound = 'sound/items/pickup/herb.ogg'
|
||||
|
||||
/obj/item/clothing/head/rose_crown
|
||||
name = "rose crown"
|
||||
@@ -58,3 +61,4 @@
|
||||
icon_state = "poppy_crown"
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/herb.ogg'
|
||||
pickup_sound = 'sound/items/pickup/herb.ogg'
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
desc = "A nice hair pin."
|
||||
slot_flags = SLOT_HEAD | SLOT_EARS
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
pickup_sound = 'sound/items/pickup/ring.ogg'
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
pickup_sound = 'sound/items/pickup/accessory.ogg'
|
||||
|
||||
/obj/item/clothing/head/pin/pink
|
||||
icon_state = "pinkpin"
|
||||
@@ -424,7 +424,8 @@
|
||||
desc = "A jeweled headpiece originating in India."
|
||||
icon_state = "maangtikka"
|
||||
body_parts_covered = 0
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
pickup_sound = 'sound/items/pickup/ring.ogg'
|
||||
|
||||
/obj/item/clothing/head/jingasa
|
||||
name = "jingasa"
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
permeability_coefficient = 0.50
|
||||
var/hanging = 0
|
||||
action_button_name = "Adjust Breath Mask"
|
||||
pickup_sound = 'sound/items/pickup/component.ogg'
|
||||
drop_sound = 'sound/items/drop/component.ogg'
|
||||
|
||||
|
||||
/obj/item/clothing/mask/breath/proc/adjust_mask(mob/user)
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/gas_filter_strength = 1 //For gas mask filters
|
||||
var/list/filtered_gases = list("phoron", "nitrous_oxide")
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 75, rad = 0)
|
||||
pickup_sound = 'sound/items/pickup/rubber.ogg'
|
||||
|
||||
/obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air)
|
||||
var/datum/gas_mixture/gas_filtered = new
|
||||
|
||||
@@ -108,7 +108,7 @@ obj/item/clothing/shoes/sandal/clogs
|
||||
species_restricted = null
|
||||
w_class = ITEMSIZE_SMALL
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cloth.ogg'
|
||||
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
||||
|
||||
/obj/item/clothing/shoes/slippers/worn
|
||||
name = "worn bunny slippers"
|
||||
@@ -172,7 +172,7 @@ obj/item/clothing/shoes/sandal/clogs
|
||||
w_class = ITEMSIZE_SMALL
|
||||
species_restricted = null
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cloth.ogg'
|
||||
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
||||
|
||||
/obj/item/clothing/shoes/boots/ranger
|
||||
var/bootcolor = "white"
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
to_chat(usr, "Your module is not installed in a hardsuit.")
|
||||
return
|
||||
|
||||
module.holder.ui_interact(usr, nano_state = contained_state)
|
||||
module.holder.tgui_interact(usr, custom_state = GLOB.tgui_contained_state)
|
||||
|
||||
/obj/item/rig_module/ai_container
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
if(!target)
|
||||
if(ai_card)
|
||||
if(istype(ai_card,/obj/item/device/aicard))
|
||||
ai_card.tgui_interact(H, custom_state = deep_inventory_state)
|
||||
ai_card.tgui_interact(H, custom_state = GLOB.tgui_deep_inventory_state)
|
||||
else
|
||||
eject_ai(H)
|
||||
update_verb_holder()
|
||||
|
||||
@@ -13,9 +13,6 @@
|
||||
|
||||
var/stored_name
|
||||
var/badge_string = "Corporate Security"
|
||||
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
pickup_sound = 'sound/items/pickup/ring.ogg'
|
||||
|
||||
/obj/item/clothing/accessory/badge/old
|
||||
name = "faded badge"
|
||||
|
||||
+157
-155
@@ -15,7 +15,7 @@
|
||||
var/const/fund_cap = 1000000
|
||||
|
||||
/obj/machinery/account_database/proc/get_access_level()
|
||||
if (!held_card)
|
||||
if(!held_card)
|
||||
return 0
|
||||
if(access_cent_captain in held_card.access)
|
||||
return 2
|
||||
@@ -53,19 +53,24 @@
|
||||
O.loc = src
|
||||
held_card = O
|
||||
|
||||
SSnanoui.update_uis(src)
|
||||
SStgui.update_uis(src)
|
||||
|
||||
attack_hand(user)
|
||||
|
||||
/obj/machinery/account_database/attack_hand(mob/user as mob)
|
||||
if(stat & (NOPOWER|BROKEN)) return
|
||||
ui_interact(user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/account_database/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
user.set_machine(src)
|
||||
/obj/machinery/account_database/tgui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "AccountsTerminal", name)
|
||||
ui.open()
|
||||
|
||||
|
||||
/obj/machinery/account_database/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
|
||||
var/list/data = ..()
|
||||
|
||||
var/data[0]
|
||||
data["src"] = "\ref[src]"
|
||||
data["id_inserted"] = !!held_card
|
||||
data["id_card"] = held_card ? text("[held_card.registered_name], [held_card.assignment]") : "-----"
|
||||
data["access_level"] = get_access_level()
|
||||
@@ -73,10 +78,14 @@
|
||||
data["creating_new_account"] = creating_new_account
|
||||
data["detailed_account_view"] = !!detailed_account_view
|
||||
data["station_account_number"] = station_account.account_number
|
||||
data["transactions"] = null
|
||||
data["accounts"] = null
|
||||
|
||||
if (detailed_account_view)
|
||||
data["account_number"] = null
|
||||
data["owner_name"] = null
|
||||
data["money"] = null
|
||||
data["suspended"] = null
|
||||
data["transactions"] = list()
|
||||
|
||||
if(detailed_account_view)
|
||||
data["account_number"] = detailed_account_view.account_number
|
||||
data["owner_name"] = detailed_account_view.owner_name
|
||||
data["money"] = detailed_account_view.money
|
||||
@@ -92,11 +101,10 @@
|
||||
"amount" = T.amount, \
|
||||
"source_terminal" = T.source_terminal)))
|
||||
|
||||
if (trx.len > 0)
|
||||
data["transactions"] = trx
|
||||
data["transactions"] = trx
|
||||
|
||||
var/list/accounts[0]
|
||||
for(var/i=1, i<=all_money_accounts.len, i++)
|
||||
var/list/accounts = list()
|
||||
for(var/i in 1 to LAZYLEN(all_money_accounts))
|
||||
var/datum/money_account/D = all_money_accounts[i]
|
||||
if(D.offmap)
|
||||
continue
|
||||
@@ -106,174 +114,168 @@
|
||||
"suspended"=D.suspended ? "SUSPENDED" : "",\
|
||||
"account_index"=i)))
|
||||
|
||||
if (accounts.len > 0)
|
||||
data["accounts"] = accounts
|
||||
data["accounts"] = accounts
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
return data
|
||||
|
||||
/obj/machinery/account_database/Topic(href, href_list)
|
||||
/obj/machinery/account_database/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
|
||||
if(..())
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
var/datum/nanoui/ui = SSnanoui.get_open_ui(usr, src, "main")
|
||||
switch(action)
|
||||
if("create_account")
|
||||
creating_new_account = 1
|
||||
|
||||
if(href_list["choice"])
|
||||
switch(href_list["choice"])
|
||||
if("create_account")
|
||||
creating_new_account = 1
|
||||
if("add_funds")
|
||||
var/amount = input("Enter the amount you wish to add", "Silently add funds") as num
|
||||
if(detailed_account_view)
|
||||
detailed_account_view.money = min(detailed_account_view.money + amount, fund_cap)
|
||||
|
||||
if("add_funds")
|
||||
var/amount = input("Enter the amount you wish to add", "Silently add funds") as num
|
||||
if(detailed_account_view)
|
||||
detailed_account_view.money = min(detailed_account_view.money + amount, fund_cap)
|
||||
if("remove_funds")
|
||||
var/amount = input("Enter the amount you wish to remove", "Silently remove funds") as num
|
||||
if(detailed_account_view)
|
||||
detailed_account_view.money = max(detailed_account_view.money - amount, -fund_cap)
|
||||
|
||||
if("remove_funds")
|
||||
var/amount = input("Enter the amount you wish to remove", "Silently remove funds") as num
|
||||
if(detailed_account_view)
|
||||
detailed_account_view.money = max(detailed_account_view.money - amount, -fund_cap)
|
||||
if("toggle_suspension")
|
||||
if(detailed_account_view)
|
||||
detailed_account_view.suspended = !detailed_account_view.suspended
|
||||
callHook("change_account_status", list(detailed_account_view))
|
||||
|
||||
if("toggle_suspension")
|
||||
if(detailed_account_view)
|
||||
detailed_account_view.suspended = !detailed_account_view.suspended
|
||||
callHook("change_account_status", list(detailed_account_view))
|
||||
if("finalise_create_account")
|
||||
var/account_name = params["holder_name"]
|
||||
var/starting_funds = max(text2num(params["starting_funds"]), 0)
|
||||
|
||||
if("finalise_create_account")
|
||||
var/account_name = href_list["holder_name"]
|
||||
var/starting_funds = max(text2num(href_list["starting_funds"]), 0)
|
||||
starting_funds = CLAMP(starting_funds, 0, station_account.money) // Not authorized to put the station in debt.
|
||||
starting_funds = min(starting_funds, fund_cap) // Not authorized to give more than the fund cap.
|
||||
|
||||
starting_funds = CLAMP(starting_funds, 0, station_account.money) // Not authorized to put the station in debt.
|
||||
starting_funds = min(starting_funds, fund_cap) // Not authorized to give more than the fund cap.
|
||||
create_account(account_name, starting_funds, src)
|
||||
if(starting_funds > 0)
|
||||
//subtract the money
|
||||
station_account.money -= starting_funds
|
||||
|
||||
create_account(account_name, starting_funds, src)
|
||||
if(starting_funds > 0)
|
||||
//subtract the money
|
||||
station_account.money -= starting_funds
|
||||
|
||||
//create a transaction log entry
|
||||
var/trx = create_transation(account_name, "New account activation", "([starting_funds])")
|
||||
station_account.transaction_log.Add(trx)
|
||||
|
||||
creating_new_account = 0
|
||||
ui.close()
|
||||
//create a transaction log entry
|
||||
var/trx = create_transation(account_name, "New account activation", "([starting_funds])")
|
||||
station_account.transaction_log.Add(trx)
|
||||
|
||||
creating_new_account = 0
|
||||
if("insert_card")
|
||||
if(held_card)
|
||||
held_card.loc = src.loc
|
||||
|
||||
if(ishuman(usr) && !usr.get_active_hand())
|
||||
usr.put_in_hands(held_card)
|
||||
held_card = null
|
||||
creating_new_account = 0
|
||||
if("insert_card")
|
||||
if(held_card)
|
||||
held_card.loc = src.loc
|
||||
|
||||
else
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if (istype(I, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/C = I
|
||||
usr.drop_item()
|
||||
C.loc = src
|
||||
held_card = C
|
||||
if(ishuman(usr) && !usr.get_active_hand())
|
||||
usr.put_in_hands(held_card)
|
||||
held_card = null
|
||||
|
||||
if("view_account_detail")
|
||||
var/index = text2num(href_list["account_index"])
|
||||
if(index && index <= all_money_accounts.len)
|
||||
detailed_account_view = all_money_accounts[index]
|
||||
else
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if(istype(I, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/C = I
|
||||
usr.drop_item()
|
||||
C.loc = src
|
||||
held_card = C
|
||||
|
||||
if("view_accounts_list")
|
||||
detailed_account_view = null
|
||||
creating_new_account = 0
|
||||
if("view_account_detail")
|
||||
var/index = text2num(params["account_index"])
|
||||
if(index && index <= all_money_accounts.len)
|
||||
detailed_account_view = all_money_accounts[index]
|
||||
|
||||
if("revoke_payroll")
|
||||
var/funds = detailed_account_view.money
|
||||
var/account_trx = create_transation(station_account.owner_name, "Revoke payroll", "([funds])")
|
||||
var/station_trx = create_transation(detailed_account_view.owner_name, "Revoke payroll", funds)
|
||||
if("view_accounts_list")
|
||||
detailed_account_view = null
|
||||
creating_new_account = 0
|
||||
|
||||
station_account.money += funds
|
||||
detailed_account_view.money = 0
|
||||
if("revoke_payroll")
|
||||
var/funds = detailed_account_view.money
|
||||
var/account_trx = create_transation(station_account.owner_name, "Revoke payroll", "([funds])")
|
||||
var/station_trx = create_transation(detailed_account_view.owner_name, "Revoke payroll", funds)
|
||||
|
||||
detailed_account_view.transaction_log.Add(account_trx)
|
||||
station_account.transaction_log.Add(station_trx)
|
||||
station_account.money += funds
|
||||
detailed_account_view.money = 0
|
||||
|
||||
callHook("revoke_payroll", list(detailed_account_view))
|
||||
detailed_account_view.transaction_log.Add(account_trx)
|
||||
station_account.transaction_log.Add(station_trx)
|
||||
|
||||
if("print")
|
||||
var/text
|
||||
var/obj/item/weapon/paper/P = new(loc)
|
||||
if (detailed_account_view)
|
||||
P.name = "account #[detailed_account_view.account_number] details"
|
||||
var/title = "Account #[detailed_account_view.account_number] Details"
|
||||
text = {"
|
||||
[accounting_letterhead(title)]
|
||||
<u>Holder:</u> [detailed_account_view.owner_name]<br>
|
||||
<u>Balance:</u> $[detailed_account_view.money]<br>
|
||||
<u>Status:</u> [detailed_account_view.suspended ? "Suspended" : "Active"]<br>
|
||||
<u>Transactions:</u> ([detailed_account_view.transaction_log.len])<br>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Timestamp</td>
|
||||
<td>Target</td>
|
||||
<td>Reason</td>
|
||||
<td>Value</td>
|
||||
<td>Terminal</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
"}
|
||||
callHook("revoke_payroll", list(detailed_account_view))
|
||||
|
||||
for (var/datum/transaction/T in detailed_account_view.transaction_log)
|
||||
text += {"
|
||||
<tr>
|
||||
<td>[T.date] [T.time]</td>
|
||||
<td>[T.target_name]</td>
|
||||
<td>[T.purpose]</td>
|
||||
<td>[T.amount]</td>
|
||||
<td>[T.source_terminal]</td>
|
||||
</tr>
|
||||
"}
|
||||
if("print")
|
||||
print()
|
||||
|
||||
text += {"
|
||||
</tbody>
|
||||
</table>
|
||||
"}
|
||||
return TRUE
|
||||
|
||||
else
|
||||
P.name = "financial account list"
|
||||
text = {"
|
||||
[accounting_letterhead("Financial Account List")]
|
||||
/obj/machinery/account_database/proc/print()
|
||||
var/text
|
||||
var/obj/item/weapon/paper/P = new(loc)
|
||||
if(detailed_account_view)
|
||||
P.name = "account #[detailed_account_view.account_number] details"
|
||||
var/title = "Account #[detailed_account_view.account_number] Details"
|
||||
text = {"
|
||||
[accounting_letterhead(title)]
|
||||
<u>Holder:</u> [detailed_account_view.owner_name]<br>
|
||||
<u>Balance:</u> $[detailed_account_view.money]<br>
|
||||
<u>Status:</u> [detailed_account_view.suspended ? "Suspended" : "Active"]<br>
|
||||
<u>Transactions:</u> ([detailed_account_view.transaction_log.len])<br>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Timestamp</td>
|
||||
<td>Target</td>
|
||||
<td>Reason</td>
|
||||
<td>Value</td>
|
||||
<td>Terminal</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
"}
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Account Number</td>
|
||||
<td>Holder</td>
|
||||
<td>Balance</td>
|
||||
<td>Status</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
"}
|
||||
for (var/datum/transaction/T in detailed_account_view.transaction_log)
|
||||
text += {"
|
||||
<tr>
|
||||
<td>[T.date] [T.time]</td>
|
||||
<td>[T.target_name]</td>
|
||||
<td>[T.purpose]</td>
|
||||
<td>[T.amount]</td>
|
||||
<td>[T.source_terminal]</td>
|
||||
</tr>
|
||||
"}
|
||||
|
||||
for(var/i=1, i<=all_money_accounts.len, i++)
|
||||
var/datum/money_account/D = all_money_accounts[i]
|
||||
text += {"
|
||||
<tr>
|
||||
<td>#[D.account_number]</td>
|
||||
<td>[D.owner_name]</td>
|
||||
<td>$[D.money]</td>
|
||||
<td>[D.suspended ? "Suspended" : "Active"]</td>
|
||||
</tr>
|
||||
"}
|
||||
text += {"
|
||||
</tbody>
|
||||
</table>
|
||||
"}
|
||||
|
||||
text += {"
|
||||
</tbody>
|
||||
</table>
|
||||
"}
|
||||
else
|
||||
P.name = "financial account list"
|
||||
text = {"
|
||||
[accounting_letterhead("Financial Account List")]
|
||||
|
||||
P.info = text
|
||||
state("The terminal prints out a report.")
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Account Number</td>
|
||||
<td>Holder</td>
|
||||
<td>Balance</td>
|
||||
<td>Status</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
"}
|
||||
|
||||
return 1
|
||||
for(var/i=1, i<=all_money_accounts.len, i++)
|
||||
var/datum/money_account/D = all_money_accounts[i]
|
||||
text += {"
|
||||
<tr>
|
||||
<td>#[D.account_number]</td>
|
||||
<td>[D.owner_name]</td>
|
||||
<td>$[D.money]</td>
|
||||
<td>[D.suspended ? "Suspended" : "Active"]</td>
|
||||
</tr>
|
||||
"}
|
||||
|
||||
text += {"
|
||||
</tbody>
|
||||
</table>
|
||||
"}
|
||||
|
||||
P.info = text
|
||||
state("The terminal prints out a report.")
|
||||
@@ -5,8 +5,8 @@
|
||||
name = "drink"
|
||||
desc = "yummy"
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
drop_sound = 'sound/items/drop/bottle.ogg'
|
||||
pickup_sound = 'sound/items/pickup/bottle.ogg'
|
||||
drop_sound = 'sound/items/drop/drinkglass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/drinkglass.ogg'
|
||||
icon_state = null
|
||||
flags = OPENCONTAINER
|
||||
amount_per_transfer_from_this = 5
|
||||
@@ -234,6 +234,7 @@
|
||||
trash = /obj/item/trash/coffee
|
||||
center_of_mass = list("x"=15, "y"=13)
|
||||
drop_sound = 'sound/items/drop/papercup.ogg'
|
||||
pickup_sound = 'sound/items/pickup/papercup.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate/Initialize()
|
||||
..()
|
||||
@@ -248,6 +249,7 @@
|
||||
trash = /obj/item/trash/coffee
|
||||
center_of_mass = list("x"=16, "y"=14)
|
||||
drop_sound = 'sound/items/drop/papercup.ogg'
|
||||
pickup_sound = 'sound/items/pickup/papercup.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/greentea/Initialize()
|
||||
. = ..()
|
||||
@@ -262,6 +264,7 @@
|
||||
trash = /obj/item/trash/coffee
|
||||
center_of_mass = list("x"=16, "y"=14)
|
||||
drop_sound = 'sound/items/drop/papercup.ogg'
|
||||
pickup_sound = 'sound/items/pickup/papercup.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/chaitea/Initialize()
|
||||
. = ..()
|
||||
@@ -276,6 +279,7 @@
|
||||
trash = /obj/item/trash/coffee
|
||||
center_of_mass = list("x"=16, "y"=14)
|
||||
drop_sound = 'sound/items/drop/papercup.ogg'
|
||||
pickup_sound = 'sound/items/pickup/papercup.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/decaf/Initialize()
|
||||
. = ..()
|
||||
@@ -289,6 +293,7 @@
|
||||
trash = /obj/item/trash/ramen
|
||||
center_of_mass = list("x"=16, "y"=11)
|
||||
drop_sound = 'sound/items/drop/papercup.ogg'
|
||||
pickup_sound = 'sound/items/pickup/papercup.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/Initialize()
|
||||
..()
|
||||
@@ -302,6 +307,7 @@
|
||||
volume = 10
|
||||
center_of_mass = list("x"=16, "y"=12)
|
||||
drop_sound = 'sound/items/drop/papercup.ogg'
|
||||
pickup_sound = 'sound/items/pickup/papercup.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/sillycup/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
if(isGlass)
|
||||
unacidable = 1
|
||||
drop_sound = 'sound/items/drop/bottle.ogg'
|
||||
pickup_sound = 'sound/items/pickup/bottle.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/Destroy()
|
||||
if(rag)
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
volume = 30
|
||||
unacidable = 1 //glass
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
drop_sound = 'sound/items/drop/drinkglass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/drinkglass.ogg'
|
||||
matter = list("glass" = 500)
|
||||
|
||||
on_reagent_change()
|
||||
|
||||
@@ -318,6 +318,7 @@
|
||||
nutriment_amt = 1
|
||||
nutriment_desc = list("candy" = 1)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("sugar", 3)
|
||||
@@ -4161,6 +4162,8 @@
|
||||
trash = /obj/item/trash/unajerky
|
||||
filling_color = "#631212"
|
||||
center_of_mass = list("x"=15, "y"=9)
|
||||
drop_sound = 'sound/items/drop/soda.ogg'
|
||||
pickup_sound = 'sound/items/pickup/soda.ogg'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/unajerky/Initialize()
|
||||
. =..()
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
use_power = USE_POWER_IDLE
|
||||
idle_power_usage = 5 // Power used when turned on, but not processing anything
|
||||
active_power_usage = 1000 // Power used when turned on and actively cooking something
|
||||
|
||||
|
||||
var/cooking_power = 0 // Effectiveness/speed at cooking
|
||||
var/cooking_coeff = 0 // Optimal power * proximity to optimal temp; used to calc. cooking power.
|
||||
var/heating_power = 1000 // Effectiveness at heating up; not used for mixers, should be equal to active_power_usage
|
||||
@@ -44,9 +44,9 @@
|
||||
|
||||
/obj/machinery/appliance/Initialize()
|
||||
. = ..()
|
||||
|
||||
|
||||
default_apply_parts()
|
||||
|
||||
|
||||
if(output_options.len)
|
||||
verbs += /obj/machinery/appliance/proc/choose_output
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
|
||||
//Handles all validity checking and error messages for inserting things
|
||||
/obj/machinery/appliance/proc/can_insert(var/obj/item/I, var/mob/user)
|
||||
if (istype(I, /obj/item/weapon/gripper))
|
||||
if(istype(I.loc, /mob/living/silicon))
|
||||
return 0
|
||||
else if (istype(I.loc, /obj/item/rig_module))
|
||||
return 0
|
||||
@@ -266,26 +266,52 @@
|
||||
to_chat(user, "<span class='warning'>\The [src] is not working.</span>")
|
||||
return FALSE
|
||||
|
||||
var/result = can_insert(I, user)
|
||||
if(!result)
|
||||
if(!(default_deconstruction_screwdriver(user, I)))
|
||||
default_part_replacement(user, I)
|
||||
return FALSE
|
||||
var/obj/item/ToCook = I
|
||||
|
||||
if(result == 2)
|
||||
var/obj/item/weapon/grab/G = I
|
||||
if (G && istype(G) && G.affecting)
|
||||
cook_mob(G.affecting, user)
|
||||
return FALSE
|
||||
if(istype(I, /obj/item/weapon/gripper))
|
||||
var/obj/item/weapon/gripper/GR = I
|
||||
var/obj/item/Wrap = GR.wrapped
|
||||
if(Wrap)
|
||||
Wrap.loc = get_turf(src)
|
||||
var/result = can_insert(Wrap, user)
|
||||
if(!result)
|
||||
Wrap.forceMove(GR)
|
||||
if(!(default_deconstruction_screwdriver(user, I)))
|
||||
default_part_replacement(user, I)
|
||||
return
|
||||
|
||||
if(QDELETED(GR.wrapped))
|
||||
GR.wrapped = null
|
||||
|
||||
if(GR?.wrapped.loc != src)
|
||||
GR.drop_item_nm()
|
||||
|
||||
ToCook = Wrap
|
||||
else
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
else
|
||||
var/result = can_insert(I, user)
|
||||
if(!result)
|
||||
if(!(default_deconstruction_screwdriver(user, I)))
|
||||
default_part_replacement(user, I)
|
||||
return
|
||||
|
||||
if(result == 2)
|
||||
var/obj/item/weapon/grab/G = I
|
||||
if (G && istype(G) && G.affecting)
|
||||
cook_mob(G.affecting, user)
|
||||
return
|
||||
|
||||
//From here we can start cooking food
|
||||
. = add_content(I, user)
|
||||
add_content(ToCook, user)
|
||||
update_icon()
|
||||
|
||||
//Override for container mechanics
|
||||
/obj/machinery/appliance/proc/add_content(var/obj/item/I, var/mob/user)
|
||||
if(!user.unEquip(I))
|
||||
return FALSE
|
||||
if(!user.unEquip(I) && !isturf(I.loc))
|
||||
return
|
||||
|
||||
var/datum/cooking_item/CI = has_space(I)
|
||||
if (istype(I, /obj/item/weapon/reagent_containers/cooking_container) && CI == 1)
|
||||
@@ -458,7 +484,7 @@
|
||||
//Final step. Cook function just cooks batter for now.
|
||||
for (var/obj/item/weapon/reagent_containers/food/snacks/S in CI.container)
|
||||
S.cook()
|
||||
|
||||
|
||||
|
||||
//Combination cooking involves combining the names and reagents of ingredients into a predefined output object
|
||||
//The ingredients represent flavours or fillings. EG: donut pizza, cheese bread
|
||||
@@ -566,7 +592,7 @@
|
||||
smoke.attach(src)
|
||||
smoke.set_up(10, 0, get_turf(src), 300)
|
||||
smoke.start()
|
||||
|
||||
|
||||
// Set off fire alarms!
|
||||
var/obj/machinery/firealarm/FA = locate() in get_area(src)
|
||||
if(FA)
|
||||
|
||||
@@ -32,13 +32,26 @@
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/cooking_container/attackby(var/obj/item/I as obj, var/mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/gripper))
|
||||
var/obj/item/weapon/gripper/GR = I
|
||||
if(GR.wrapped)
|
||||
GR.wrapped.forceMove(get_turf(src))
|
||||
attackby(GR.wrapped, user)
|
||||
if(QDELETED(GR.wrapped))
|
||||
GR.wrapped = null
|
||||
|
||||
if(GR?.wrapped.loc != src)
|
||||
GR.wrapped = null
|
||||
|
||||
return
|
||||
|
||||
for (var/possible_type in insertable)
|
||||
if (istype(I, possible_type))
|
||||
if (!can_fit(I))
|
||||
to_chat(user, "<span class='warning'>There's no more space in the [src] for that!</span>")
|
||||
return 0
|
||||
|
||||
if(!user.unEquip(I))
|
||||
if(!user.unEquip(I) && !isturf(I.loc))
|
||||
return
|
||||
I.forceMove(src)
|
||||
to_chat(user, "<span class='notice'>You put the [I] into the [src].</span>")
|
||||
@@ -152,7 +165,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/cooking_container/oven/Initialize()
|
||||
. = ..()
|
||||
|
||||
|
||||
// We add to the insertable list specifically for the oven trays, to allow specialty cakes.
|
||||
insertable += list(
|
||||
/obj/item/clothing/head/cakehat, // This is because we want to allow birthday cakes to be makeable.
|
||||
@@ -164,7 +177,7 @@
|
||||
shortname = "basket"
|
||||
desc = "Put ingredients in this; designed for use with a deep fryer. Warranty void if used incorrectly. Alt click to remove contents."
|
||||
icon_state = "basket"
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/cooking_container/grill
|
||||
name = "grill rack"
|
||||
shortname = "rack"
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
/datum/event2/event/prison_break/start()
|
||||
for(var/area/A in areas_to_break)
|
||||
spawn(0) // So we don't block the ticker.
|
||||
A.prison_break(open_blast_doors = !ignore_blast_doors)
|
||||
A.prison_break(TRUE, TRUE, !ignore_blast_doors) // Naming `open_blast_doors` causes mysterious runtimes.
|
||||
|
||||
// There's between 40 seconds and one minute before the whole station knows.
|
||||
// If there's a baddie engineer, they can choose to keep their early announcement to themselves and get a minute to exploit it.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -337,3 +337,6 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
|
||||
|
||||
/obj/item/seeds/sifbulb
|
||||
seed_type = "sifbulb"
|
||||
|
||||
/obj/item/seeds/wurmwoad
|
||||
seed_type = "wurmwoad"
|
||||
|
||||
@@ -138,7 +138,8 @@
|
||||
/obj/item/seeds/wabback = 2,
|
||||
/obj/item/seeds/watermelonseed = 3,
|
||||
/obj/item/seeds/wheatseed = 3,
|
||||
/obj/item/seeds/whitebeetseed = 3
|
||||
/obj/item/seeds/whitebeetseed = 3,
|
||||
/obj/item/seeds/wurmwoad = 3
|
||||
)
|
||||
|
||||
/obj/machinery/seed_storage/xenobotany
|
||||
@@ -195,7 +196,8 @@
|
||||
/obj/item/seeds/wabback = 2,
|
||||
/obj/item/seeds/watermelonseed = 3,
|
||||
/obj/item/seeds/wheatseed = 3,
|
||||
/obj/item/seeds/whitebeetseed = 3
|
||||
/obj/item/seeds/whitebeetseed = 3,
|
||||
/obj/item/seeds/wurmwoad = 3
|
||||
)
|
||||
|
||||
/obj/machinery/seed_storage/attack_hand(mob/user as mob)
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
/datum/seed/amauri
|
||||
name = "amauri"
|
||||
seed_name = "amauri"
|
||||
display_name = "amauri plant"
|
||||
kitchen_tag = "amauri"
|
||||
chems = list("zombiepowder" = list(1,10),"condensedcapsaicin" = list(1,5),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/amauri/New()
|
||||
..()
|
||||
set_trait(TRAIT_PLANT_ICON,"bush4")
|
||||
set_trait(TRAIT_ENDURANCE,10)
|
||||
set_trait(TRAIT_MATURATION,8)
|
||||
set_trait(TRAIT_PRODUCTION,9)
|
||||
set_trait(TRAIT_YIELD,4)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
@@ -0,0 +1,46 @@
|
||||
//Ambrosia/varieties.
|
||||
/datum/seed/ambrosia
|
||||
name = "ambrosia"
|
||||
seed_name = "ambrosia vulgaris"
|
||||
display_name = "ambrosia vulgaris"
|
||||
kitchen_tag = "ambrosia"
|
||||
mutants = list("ambrosiadeus")
|
||||
chems = list("nutriment" = list(1), "space_drugs" = list(1,8), "kelotane" = list(1,8,1), "bicaridine" = list(1,10,1), "toxin" = list(1,10))
|
||||
|
||||
/datum/seed/ambrosia/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_YIELD,6)
|
||||
set_trait(TRAIT_POTENCY,5)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"ambrosia")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#9FAD55")
|
||||
set_trait(TRAIT_PLANT_ICON,"ambrosia")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 6)
|
||||
|
||||
/datum/seed/ambrosia/deus
|
||||
name = "ambrosiadeus"
|
||||
seed_name = "ambrosia deus"
|
||||
display_name = "ambrosia deus"
|
||||
kitchen_tag = "ambrosiadeus"
|
||||
mutants = list("ambrosiainfernus")
|
||||
chems = list("nutriment" = list(1), "bicaridine" = list(1,8), "synaptizine" = list(1,8,1), "hyperzine" = list(1,10,1), "space_drugs" = list(1,10))
|
||||
|
||||
/datum/seed/ambrosia/deus/New()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#A3F0AD")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#2A9C61")
|
||||
|
||||
/datum/seed/ambrosia/infernus
|
||||
name = "ambrosiainfernus"
|
||||
seed_name = "ambrosia infernus"
|
||||
display_name = "ambrosia infernus"
|
||||
kitchen_tag = "ambrosiainfernus"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,3), "oxycodone" = list(1,8), "impedrezene" = list(1,10), "mindbreaker" = list(1,10))
|
||||
|
||||
/datum/seed/ambrosia/infernus/New()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#dc143c")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#b22222")
|
||||
@@ -0,0 +1,62 @@
|
||||
//Apples/varieties.
|
||||
/datum/seed/apple
|
||||
name = "apple"
|
||||
seed_name = "apple"
|
||||
display_name = "apple tree"
|
||||
kitchen_tag = "apple"
|
||||
mutants = list("poisonapple","goldapple")
|
||||
chems = list("nutriment" = list(1,10),"applejuice" = list(10,20))
|
||||
|
||||
/datum/seed/apple/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_YIELD,5)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"apple")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FF540A")
|
||||
set_trait(TRAIT_PLANT_ICON,"tree2")
|
||||
set_trait(TRAIT_FLESH_COLOUR,"#E8E39B")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 4)
|
||||
|
||||
/datum/seed/apple/poison
|
||||
name = "poisonapple"
|
||||
mutants = null
|
||||
chems = list("cyanide" = list(1,5))
|
||||
|
||||
/datum/seed/apple/gold
|
||||
name = "goldapple"
|
||||
seed_name = "golden apple"
|
||||
display_name = "gold apple tree"
|
||||
kitchen_tag = "goldapple"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,10), "gold" = list(1,5))
|
||||
|
||||
/datum/seed/apple/gold/New()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,10)
|
||||
set_trait(TRAIT_PRODUCTION,10)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FFDD00")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#D6B44D")
|
||||
|
||||
/datum/seed/apple/sif
|
||||
name = "sifbulb"
|
||||
seed_name = "sivian tree"
|
||||
display_name = "sivian pod"
|
||||
kitchen_tag = "apple"
|
||||
chems = list("nutriment" = list(1,5),"sifsap" = list(10,20))
|
||||
|
||||
/datum/seed/apple/sif/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,3)
|
||||
set_trait(TRAIT_PRODUCTION,10)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_POTENCY,12)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"alien3")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#0720c3")
|
||||
set_trait(TRAIT_PLANT_ICON,"tree5")
|
||||
set_trait(TRAIT_FLESH_COLOUR,"#05157d")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 1)
|
||||
@@ -0,0 +1,21 @@
|
||||
/datum/seed/banana
|
||||
name = "banana"
|
||||
seed_name = "banana"
|
||||
display_name = "banana tree"
|
||||
kitchen_tag = "banana"
|
||||
chems = list("banana" = list(10,10))
|
||||
trash_type = /obj/item/weapon/bananapeel
|
||||
|
||||
/datum/seed/banana/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"bananas")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FFEC1F")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#69AD50")
|
||||
set_trait(TRAIT_PLANT_ICON,"tree4")
|
||||
set_trait(TRAIT_IDEAL_HEAT, 298)
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 7)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 6)
|
||||
@@ -0,0 +1,70 @@
|
||||
// Berry plants/variants.
|
||||
/datum/seed/berry
|
||||
name = "berries"
|
||||
seed_name = "berry"
|
||||
display_name = "berry bush"
|
||||
kitchen_tag = "berries"
|
||||
mutants = list("glowberries","poisonberries")
|
||||
chems = list("nutriment" = list(1,10), "berryjuice" = list(10,10))
|
||||
|
||||
/datum/seed/berry/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_JUICY,1)
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"berry")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FA1616")
|
||||
set_trait(TRAIT_PLANT_ICON,"bush")
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 6)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
|
||||
|
||||
/datum/seed/berry/glow
|
||||
name = "glowberries"
|
||||
seed_name = "glowberry"
|
||||
display_name = "glowberry bush"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,10), "uranium" = list(3,5))
|
||||
|
||||
/datum/seed/berry/glow/New()
|
||||
..()
|
||||
set_trait(TRAIT_SPREAD,1)
|
||||
set_trait(TRAIT_BIOLUM,1)
|
||||
set_trait(TRAIT_BIOLUM_COLOUR,"#006622")
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#c9fa16")
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 3)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25)
|
||||
|
||||
/datum/seed/berry/poison
|
||||
name = "poisonberries"
|
||||
seed_name = "poison berry"
|
||||
kitchen_tag = "poisonberries"
|
||||
display_name = "poison berry bush"
|
||||
mutants = list("deathberries")
|
||||
chems = list("nutriment" = list(1), "toxin" = list(3,5), "poisonberryjuice" = list(10,5))
|
||||
|
||||
/datum/seed/berry/poison/New()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#6DC961")
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 3)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25)
|
||||
|
||||
/datum/seed/berry/poison/death
|
||||
name = "deathberries"
|
||||
seed_name = "death berry"
|
||||
display_name = "death berry bush"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1), "toxin" = list(3,3), "lexorin" = list(1,5))
|
||||
|
||||
/datum/seed/berry/poison/death/New()
|
||||
..()
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_POTENCY,50)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#7A5454")
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.35)
|
||||
@@ -0,0 +1,21 @@
|
||||
/datum/seed/cabbage
|
||||
name = "cabbage"
|
||||
seed_name = "cabbage"
|
||||
display_name = "cabbages"
|
||||
kitchen_tag = "cabbage"
|
||||
chems = list("nutriment" = list(1,10))
|
||||
|
||||
/datum/seed/cabbage/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,3)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,4)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"cabbage")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#84BD82")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#6D9C6B")
|
||||
set_trait(TRAIT_PLANT_ICON,"vine2")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 6)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 6)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
|
||||
@@ -0,0 +1,17 @@
|
||||
/datum/seed/carrots
|
||||
name = "carrot"
|
||||
seed_name = "carrot"
|
||||
display_name = "carrots"
|
||||
kitchen_tag = "carrot"
|
||||
chems = list("nutriment" = list(1,20), "imidazoline" = list(3,5), "carrotjuice" = list(10,20))
|
||||
|
||||
/datum/seed/carrots/New()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,10)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
set_trait(TRAIT_YIELD,5)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"carrot")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FFDB4A")
|
||||
set_trait(TRAIT_PLANT_ICON,"carrot")
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 6)
|
||||
@@ -0,0 +1,17 @@
|
||||
/datum/seed/celery
|
||||
name = "celery"
|
||||
seed_name = "celery"
|
||||
display_name = "celery"
|
||||
kitchen_tag = "celery"
|
||||
chems = list("nutriment" = list(5,20))
|
||||
|
||||
/datum/seed/celery/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,4)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_POTENCY,8)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"stalk")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#56FD56")
|
||||
set_trait(TRAIT_PLANT_ICON,"stalk3")
|
||||
@@ -0,0 +1,20 @@
|
||||
/datum/seed/cherries
|
||||
name = "cherry"
|
||||
seed_name = "cherry"
|
||||
seed_noun = "pits"
|
||||
display_name = "cherry tree"
|
||||
kitchen_tag = "cherries"
|
||||
chems = list("nutriment" = list(1,15), "sugar" = list(1,15), "cherryjelly" = list(10,15))
|
||||
|
||||
/datum/seed/cherries/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_JUICY,1)
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"cherry")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#A80000")
|
||||
set_trait(TRAIT_PLANT_ICON,"tree2")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#2F7D2D")
|
||||
@@ -0,0 +1,35 @@
|
||||
// Chili plants/variants.
|
||||
/datum/seed/chili
|
||||
name = "chili"
|
||||
seed_name = "chili"
|
||||
display_name = "chili plants"
|
||||
kitchen_tag = "chili"
|
||||
chems = list("capsaicin" = list(3,5), "nutriment" = list(1,25))
|
||||
mutants = list("icechili")
|
||||
|
||||
/datum/seed/chili/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,4)
|
||||
set_trait(TRAIT_POTENCY,20)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"chili")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#ED3300")
|
||||
set_trait(TRAIT_PLANT_ICON,"bush2")
|
||||
set_trait(TRAIT_IDEAL_HEAT, 298)
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 7)
|
||||
|
||||
/datum/seed/chili/ice
|
||||
name = "icechili"
|
||||
seed_name = "ice pepper"
|
||||
display_name = "ice-pepper plants"
|
||||
kitchen_tag = "icechili"
|
||||
mutants = null
|
||||
chems = list("frostoil" = list(3,5), "nutriment" = list(1,50))
|
||||
|
||||
/datum/seed/chili/ice/New()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,4)
|
||||
set_trait(TRAIT_PRODUCTION,4)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#00EDC6")
|
||||
@@ -0,0 +1,46 @@
|
||||
/datum/seed/citrus
|
||||
name = "lime"
|
||||
seed_name = "lime"
|
||||
display_name = "lime trees"
|
||||
kitchen_tag = "lime"
|
||||
chems = list("nutriment" = list(1,20), "limejuice" = list(10,20))
|
||||
|
||||
/datum/seed/citrus/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_JUICY,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_YIELD,4)
|
||||
set_trait(TRAIT_POTENCY,15)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"treefruit")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#3AF026")
|
||||
set_trait(TRAIT_PLANT_ICON,"tree")
|
||||
set_trait(TRAIT_FLESH_COLOUR,"#3AF026")
|
||||
|
||||
/datum/seed/citrus/lemon
|
||||
name = "lemon"
|
||||
seed_name = "lemon"
|
||||
display_name = "lemon trees"
|
||||
kitchen_tag = "lemon"
|
||||
chems = list("nutriment" = list(1,20), "lemonjuice" = list(10,20))
|
||||
|
||||
/datum/seed/citrus/lemon/New()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCES_POWER,1)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"lemon")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#F0E226")
|
||||
set_trait(TRAIT_FLESH_COLOUR,"#F0E226")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 6)
|
||||
|
||||
/datum/seed/citrus/orange
|
||||
name = "orange"
|
||||
seed_name = "orange"
|
||||
display_name = "orange trees"
|
||||
kitchen_tag = "orange"
|
||||
chems = list("nutriment" = list(1,20), "orangejuice" = list(10,20))
|
||||
|
||||
/datum/seed/citrus/orange/New()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FFC20A")
|
||||
set_trait(TRAIT_FLESH_COLOUR,"#FFC20A")
|
||||
@@ -0,0 +1,19 @@
|
||||
/datum/seed/cocoa
|
||||
name = "cocoa"
|
||||
seed_name = "cacao"
|
||||
display_name = "cacao tree"
|
||||
kitchen_tag = "cocoa"
|
||||
chems = list("nutriment" = list(1,10), "coco" = list(4,5))
|
||||
|
||||
/datum/seed/cocoa/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"treefruit")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#CCA935")
|
||||
set_trait(TRAIT_PLANT_ICON,"tree2")
|
||||
set_trait(TRAIT_IDEAL_HEAT, 298)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 6)
|
||||
@@ -0,0 +1,21 @@
|
||||
/datum/seed/corn
|
||||
name = "corn"
|
||||
seed_name = "corn"
|
||||
display_name = "ears of corn"
|
||||
kitchen_tag = "corn"
|
||||
chems = list("nutriment" = list(1,10), "cornoil" = list(3,15))
|
||||
trash_type = /obj/item/weapon/corncob
|
||||
|
||||
/datum/seed/corn/New()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,8)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_POTENCY,20)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"corn")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FFF23B")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#87C969")
|
||||
set_trait(TRAIT_PLANT_ICON,"corn")
|
||||
set_trait(TRAIT_IDEAL_HEAT, 298)
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 6)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 6)
|
||||
@@ -0,0 +1,21 @@
|
||||
/datum/seed/diona
|
||||
name = "diona"
|
||||
seed_name = "diona"
|
||||
seed_noun = "nodes"
|
||||
display_name = "replicant pods"
|
||||
can_self_harvest = 1
|
||||
apply_color_to_mob = FALSE
|
||||
has_mob_product = /mob/living/carbon/alien/diona
|
||||
|
||||
/datum/seed/diona/New()
|
||||
..()
|
||||
set_trait(TRAIT_IMMUTABLE,1)
|
||||
set_trait(TRAIT_ENDURANCE,8)
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_PRODUCTION,10)
|
||||
set_trait(TRAIT_YIELD,1)
|
||||
set_trait(TRAIT_POTENCY,30)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"diona")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#799957")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#66804B")
|
||||
set_trait(TRAIT_PLANT_ICON,"alien4")
|
||||
@@ -0,0 +1,21 @@
|
||||
/datum/seed/durian
|
||||
name = "durian"
|
||||
seed_name = "durian"
|
||||
seed_noun = "pits"
|
||||
display_name = "durian"
|
||||
kitchen_tag = "durian"
|
||||
chems = list("nutriment" = list(1,5), "durianpaste" = list(1, 20))
|
||||
|
||||
/datum/seed/durian/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"spinefruit")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#757631")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#87C969")
|
||||
set_trait(TRAIT_PLANT_ICON,"tree")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 8)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 8)
|
||||
@@ -0,0 +1,31 @@
|
||||
//Eggplants/varieties.
|
||||
/datum/seed/eggplant
|
||||
name = "eggplant"
|
||||
seed_name = "eggplant"
|
||||
display_name = "eggplants"
|
||||
kitchen_tag = "eggplant"
|
||||
mutants = list("egg-plant")
|
||||
chems = list("nutriment" = list(1,10))
|
||||
|
||||
/datum/seed/eggplant/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
set_trait(TRAIT_POTENCY,20)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"eggplant")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#892694")
|
||||
set_trait(TRAIT_PLANT_ICON,"bush4")
|
||||
set_trait(TRAIT_IDEAL_HEAT, 298)
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 7)
|
||||
|
||||
// Return of Eggy. Just makes purple eggs. If the reagents are separated from the egg production by xenobotany or RNG, it's still an Egg plant.
|
||||
/datum/seed/eggplant/egg
|
||||
name = "egg-plant"
|
||||
seed_name = "egg-plant"
|
||||
display_name = "egg-plants"
|
||||
kitchen_tag = "egg-plant"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,5), "egg" = list(3,12))
|
||||
has_item_product = /obj/item/weapon/reagent_containers/food/snacks/egg/purple
|
||||
@@ -0,0 +1,108 @@
|
||||
//Flowers/varieties
|
||||
/datum/seed/flower
|
||||
name = "harebells"
|
||||
seed_name = "harebell"
|
||||
display_name = "harebells"
|
||||
kitchen_tag = "harebell"
|
||||
chems = list("nutriment" = list(1,20))
|
||||
|
||||
/datum/seed/flower/New()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,7)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"flower5")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#C492D6")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#6B8C5E")
|
||||
set_trait(TRAIT_PLANT_ICON,"flower")
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
|
||||
|
||||
/datum/seed/flower/poppy
|
||||
name = "poppies"
|
||||
seed_name = "poppy"
|
||||
display_name = "poppies"
|
||||
kitchen_tag = "poppy"
|
||||
chems = list("nutriment" = list(1,20), "bicaridine" = list(1,10))
|
||||
|
||||
/datum/seed/flower/poppy/New()
|
||||
..()
|
||||
set_trait(TRAIT_POTENCY,20)
|
||||
set_trait(TRAIT_MATURATION,8)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_YIELD,6)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"flower3")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#B33715")
|
||||
set_trait(TRAIT_PLANT_ICON,"flower3")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 6)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 0.5)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
|
||||
|
||||
/datum/seed/flower/sunflower
|
||||
name = "sunflowers"
|
||||
seed_name = "sunflower"
|
||||
display_name = "sunflowers"
|
||||
kitchen_tag = "sunflower"
|
||||
|
||||
/datum/seed/flower/sunflower/New()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"flower2")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FFF700")
|
||||
set_trait(TRAIT_PLANT_ICON,"flower2")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 7)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 6)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
|
||||
|
||||
/datum/seed/flower/lavender
|
||||
name = "lavender"
|
||||
seed_name = "lavender"
|
||||
display_name = "lavender"
|
||||
kitchen_tag = "lavender"
|
||||
chems = list("nutriment" = list(1,20), "bicaridine" = list(1,10))
|
||||
|
||||
/datum/seed/flower/lavender/New()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,7)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,5)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"flower6")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#B57EDC")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#6B8C5E")
|
||||
set_trait(TRAIT_PLANT_ICON,"flower4")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 7)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.05)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 0.5)
|
||||
|
||||
/datum/seed/flower/rose
|
||||
name = "rose"
|
||||
seed_name = "rose"
|
||||
display_name = "rose"
|
||||
kitchen_tag = "rose"
|
||||
mutants = list("bloodrose")
|
||||
chems = list("nutriment" = list(1,5), "stoxin" = list(0,2))
|
||||
|
||||
/datum/seed/flower/rose/New()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,7)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"flowers")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#ce0e0e")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#6B8C5E")
|
||||
set_trait(TRAIT_PLANT_ICON,"bush5")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 7)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.1)
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 0.5)
|
||||
set_trait(TRAIT_STINGS,1)
|
||||
|
||||
/datum/seed/flower/rose/blood
|
||||
name = "bloodrose"
|
||||
display_name = "bleeding rose"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,5), "stoxin" = list(1,5), "blood" = list(0,2))
|
||||
|
||||
/datum/seed/flower/rose/blood/New()
|
||||
..()
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 1)
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#5e0303")
|
||||
set_trait(TRAIT_CARNIVOROUS,1)
|
||||
@@ -0,0 +1,15 @@
|
||||
/datum/seed/gelthi
|
||||
name = "gelthi"
|
||||
seed_name = "gelthi"
|
||||
display_name = "gelthi plant"
|
||||
kitchen_tag = "gelthi"
|
||||
chems = list("stoxin" = list(1,5),"capsaicin" = list(1,5),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/gelthi/New()
|
||||
..()
|
||||
set_trait(TRAIT_PLANT_ICON,"mushroom3")
|
||||
set_trait(TRAIT_ENDURANCE,15)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
set_trait(TRAIT_POTENCY,1)
|
||||
@@ -0,0 +1,25 @@
|
||||
// Gnomes
|
||||
/datum/seed/gnomes
|
||||
name = "gnomes"
|
||||
seed_name = "gnomes"
|
||||
display_name = "gnomes"
|
||||
force_layer = 3
|
||||
chems = list("magicdust" = list(5,20))
|
||||
|
||||
/datum/seed/gnomes/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_PLANT_ICON,"gnomes")
|
||||
set_trait(TRAIT_PRODUCT_ICON,"gnomes")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"")
|
||||
set_trait(TRAIT_FLESH_COLOUR,"")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"")
|
||||
set_trait(TRAIT_BIOLUM_COLOUR,"#fff200")
|
||||
set_trait(TRAIT_MATURATION,8)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_BIOLUM,1)
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
set_trait(TRAIT_SPREAD,1)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_REQUIRES_NUTRIENTS,0)
|
||||
set_trait(TRAIT_REQUIRES_WATER,0)
|
||||
@@ -0,0 +1,33 @@
|
||||
//Grapes/varieties
|
||||
/datum/seed/grapes
|
||||
name = "grapes"
|
||||
seed_name = "grape"
|
||||
display_name = "grapevines"
|
||||
kitchen_tag = "grapes"
|
||||
mutants = list("greengrapes")
|
||||
chems = list("nutriment" = list(1,10), "sugar" = list(1,5), "grapejuice" = list(10,10))
|
||||
|
||||
/datum/seed/grapes/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,3)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
set_trait(TRAIT_YIELD,4)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"grapes")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#BB6AC4")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#378F2E")
|
||||
set_trait(TRAIT_PLANT_ICON,"vine")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 6)
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
|
||||
|
||||
/datum/seed/grapes/green
|
||||
name = "greengrapes"
|
||||
seed_name = "green grape"
|
||||
display_name = "green grapevines"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,10), "kelotane" = list(3,5), "grapejuice" = list(10,10))
|
||||
|
||||
/datum/seed/grapes/green/New()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"42ed2f")
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user