mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-27 23:14:18 +01:00
Modular PDAs: The End of an Era (#10319)
PDAs are dead, long live PDAs. All trace of old PDAs has been scoured from the codebase, and in its place are modular computer PDAs that are feature-equivalent. Essentially every PDA function except the Syndicate detonation feature and Notepad has been ported over, and battery life for handheld computers has been boosted alongside the addition of charging cables to make things easier.
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
--
|
||||
-- Implemented in PR #10319.
|
||||
-- Adds a `pda_choice` column for PDA type preferences.
|
||||
--
|
||||
|
||||
ALTER TABLE `ss13_characters`
|
||||
ADD COLUMN `pda_choice` INT(11) NULL DEFAULT NULL AFTER `backbag_style`;
|
||||
+8
-9
@@ -842,9 +842,6 @@
|
||||
#include "code\game\objects\items\devices\lighting\flashlight.dm"
|
||||
#include "code\game\objects\items\devices\lighting\glowstick.dm"
|
||||
#include "code\game\objects\items\devices\lighting\lamp.dm"
|
||||
#include "code\game\objects\items\devices\PDA\cart.dm"
|
||||
#include "code\game\objects\items\devices\PDA\chatroom.dm"
|
||||
#include "code\game\objects\items\devices\PDA\PDA.dm"
|
||||
#include "code\game\objects\items\devices\PDA\radio.dm"
|
||||
#include "code\game\objects\items\devices\radio\_radio_defines.dm"
|
||||
#include "code\game\objects\items\devices\radio\beacon.dm"
|
||||
@@ -1581,7 +1578,6 @@
|
||||
#include "code\modules\events\meteors.dm"
|
||||
#include "code\modules\events\money_hacker.dm"
|
||||
#include "code\modules\events\money_lotto.dm"
|
||||
#include "code\modules\events\money_spam.dm"
|
||||
#include "code\modules\events\prison_break.dm"
|
||||
#include "code\modules\events\radiation_storm.dm"
|
||||
#include "code\modules\events\random_antagonist.dm"
|
||||
@@ -2156,15 +2152,17 @@
|
||||
#include "code\modules\modular_computers\computers\modular_computer\ui.dm"
|
||||
#include "code\modules\modular_computers\computers\modular_computer\variables.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\dev_console.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\dev_handheld.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\dev_laptop.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\dev_pda.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\dev_silicon.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\dev_silicon_subtypes.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\dev_tablet.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\dev_telescreen.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\dev_wristbound.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\preset_console.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\preset_handheld.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\preset_laptop.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\preset_tablet.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\preset_pda.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\preset_telescreen.dm"
|
||||
#include "code\modules\modular_computers\computers\subtypes\preset_wristbound.dm"
|
||||
#include "code\modules\modular_computers\file_system\computer_file.dm"
|
||||
@@ -2181,27 +2179,29 @@
|
||||
#include "code\modules\modular_computers\file_system\programs\civilian\cargo_delivery.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\civilian\cargo_order.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\civilian\crusher_control.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\civilian\janitor.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\command\card.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\command\comm.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\engineering\_engineering.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\games\arcade.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\games\sudoku\helpers.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\games\sudoku\sudoku.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\generic\atmosphere.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\generic\manifest.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\generic\news_browser.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\generic\ntnrc_client.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\generic\ntsl2_interpreter.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\generic\nttransfer.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\generic\records.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\generic\scanner.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\generic\signaler.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\medical\suit_sensors.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\pai\access_lock.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\pai\atmosphere.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\pai\directives.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\pai\doorjack.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\pai\flashlight.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\pai\hud.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\pai\radio.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\pai\signaler.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\pai\translator.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\research\ai_restorer.dm"
|
||||
#include "code\modules\modular_computers\file_system\programs\research\chemistry_codex.dm"
|
||||
@@ -2582,7 +2582,6 @@
|
||||
#include "code\modules\research\designs\protolathe\mining_designs.dm"
|
||||
#include "code\modules\research\designs\protolathe\modular_computer_designs.dm"
|
||||
#include "code\modules\research\designs\protolathe\modular_gun_designs.dm"
|
||||
#include "code\modules\research\designs\protolathe\pda_designs.dm"
|
||||
#include "code\modules\research\designs\protolathe\power_designs.dm"
|
||||
#include "code\modules\research\designs\protolathe\stock_parts_designs.dm"
|
||||
#include "code\modules\research\designs\protolathe\tool_designs.dm"
|
||||
|
||||
@@ -199,6 +199,7 @@
|
||||
#define PROGRAM_SILICON (PROGRAM_SILICON_AI | PROGRAM_SILICON_ROBOT | PROGRAM_SILICON_PAI)
|
||||
#define PROGRAM_STATIONBOUND (PROGRAM_SILICON_AI | PROGRAM_SILICON_ROBOT)
|
||||
#define PROGRAM_ALL_REGULAR (PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET | PROGRAM_WRISTBOUND | PROGRAM_TELESCREEN)
|
||||
#define PROGRAM_ALL_HANDHELD (PROGRAM_TABLET | PROGRAM_WRISTBOUND)
|
||||
|
||||
#define PROGRAM_STATE_KILLED 0
|
||||
#define PROGRAM_STATE_BACKGROUND 1
|
||||
@@ -216,6 +217,14 @@
|
||||
#define PROGRAM_SERVICE 2
|
||||
#define PROGRAM_TYPE_ALL (PROGRAM_NORMAL | PROGRAM_SERVICE)
|
||||
|
||||
#define DEVICE_UNKNOWN 0
|
||||
#define DEVICE_COMPANY 1
|
||||
#define DEVICE_PRIVATE 2
|
||||
|
||||
#define SCANNER_MEDICAL 1
|
||||
#define SCANNER_REAGENT 2
|
||||
#define SCANNER_GAS 4
|
||||
|
||||
// Special return values from bullet_act(). Positive return values are already used to indicate the blocked level of the projectile.
|
||||
#define PROJECTILE_CONTINUE -1 //if the projectile should continue flying after calling bullet_act()
|
||||
#define PROJECTILE_FORCE_MISS -2 //if the projectile should treat the attack as a miss (suppresses attack and admin logs) - only applies to mobs.
|
||||
|
||||
@@ -123,7 +123,6 @@
|
||||
|
||||
//Augment organs
|
||||
#define BP_AUG_TIMEPIECE "integrated timepiece"
|
||||
#define BP_AUG_PDA "integrated pda"
|
||||
#define BP_AUG_TOOL "retractable combitool"
|
||||
#define BP_AUG_PEN "retractable combipen"
|
||||
#define BP_AUG_LIGHTER "retractable lighter"
|
||||
|
||||
@@ -62,6 +62,9 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al
|
||||
var/global/list/backbagstyles = list("Job-specific", "Grey")
|
||||
var/global/list/exclude_jobs = list(/datum/job/ai,/datum/job/cyborg, /datum/job/merchant)
|
||||
|
||||
//PDA choice
|
||||
var/global/list/pdalist = list("Nothing", "Standard PDA", "Classic PDA", "Rugged PDA", "Slate PDA", "Smart PDA", "Tablet", "Wristbound")
|
||||
|
||||
// Visual nets
|
||||
var/list/datum/visualnet/visual_nets = list()
|
||||
var/datum/visualnet/camera/cameranet = new()
|
||||
|
||||
@@ -122,17 +122,6 @@
|
||||
game_log("ADMINSAY", text)
|
||||
send_gelf_log(short_message = text, long_message = "[time_stamp()]: [text]",level = SEVERITY_NOTICE, category = "ADMINSAY")
|
||||
|
||||
/proc/log_pda(text, level = SEVERITY_NOTICE, ckey = "", ckey_target = "")
|
||||
if (config.log_pda)
|
||||
game_log("PDA", text)
|
||||
send_gelf_log(
|
||||
short_message = text,
|
||||
long_message = "[time_stamp()]: [text]",
|
||||
level = level,
|
||||
category="PDA",
|
||||
additional_data = list("_ckey" = html_encode(ckey), "_ckey_target" = html_encode(ckey_target))
|
||||
)
|
||||
|
||||
/proc/log_ntirc(text, level = SEVERITY_NOTICE, ckey = "", conversation = "")
|
||||
if (config.log_pda)
|
||||
game_log("NTIRC", text)
|
||||
|
||||
@@ -80,9 +80,6 @@
|
||||
var/b_score = LAZYLEN(B.items) + LAZYLEN(B.reagents) + LAZYLEN(B.fruit)
|
||||
return b_score - a_score
|
||||
|
||||
/proc/cmp_pda(obj/item/device/pda/A, obj/item/device/pda/B)
|
||||
return sorttext(B.owner, A.owner)
|
||||
|
||||
/proc/cmp_planelayer(atom/A, atom/B)
|
||||
return (B.plane - A.plane) || (B.layer - A.layer)
|
||||
|
||||
|
||||
@@ -313,11 +313,12 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
if(!search_pda) break
|
||||
search_id = 0
|
||||
|
||||
else if( search_pda && istype(A,/obj/item/device/pda) )
|
||||
var/obj/item/device/pda/PDA = A
|
||||
if(PDA.owner == oldname)
|
||||
PDA.owner = newname
|
||||
PDA.name = "PDA-[newname] ([PDA.ownjob])"
|
||||
else if(search_pda && istype(A,/obj/item/modular_computer))
|
||||
var/obj/item/modular_computer/PDA = A
|
||||
if(!PDA.registered_id)
|
||||
continue
|
||||
if(PDA.registered_id.name == oldname)
|
||||
PDA.name = "PDA-[newname] ([PDA.registered_id.assignment])"
|
||||
if(!search_id) break
|
||||
search_pda = 0
|
||||
return 1
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
new /obj/screen/ai/announcement,
|
||||
new /obj/screen/ai/call_shuttle,
|
||||
new /obj/screen/ai/state_laws,
|
||||
new /obj/screen/ai/pda_msg,
|
||||
new /obj/screen/ai/pda_log,
|
||||
new /obj/screen/ai/take_image,
|
||||
new /obj/screen/ai/view_image,
|
||||
new /obj/screen/ai/sensor_aug,
|
||||
|
||||
@@ -130,26 +130,6 @@
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
AI.subsystem_law_manager()
|
||||
|
||||
/obj/screen/ai/pda_msg
|
||||
name = "PDA - Send Message"
|
||||
icon_state = "pda_send"
|
||||
screen_loc = ui_ai_pda_send
|
||||
|
||||
/obj/screen/ai/pda_msg/Click()
|
||||
if (isAI(usr))
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
AI.ai_pda.cmd_send_pdamesg(usr)
|
||||
|
||||
/obj/screen/ai/pda_log
|
||||
name = "PDA - Show Message Log"
|
||||
icon_state = "pda_receive"
|
||||
screen_loc = ui_ai_pda_log
|
||||
|
||||
/obj/screen/ai/pda_log/Click()
|
||||
if (isAI(usr))
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
AI.ai_pda.cmd_show_message_log(usr)
|
||||
|
||||
/obj/screen/ai/take_image
|
||||
name = "Take Image"
|
||||
icon_state = "take_picture"
|
||||
|
||||
@@ -15,7 +15,7 @@ var/list/gamemode_cache = list()
|
||||
var/log_emote = 0 // log emotes
|
||||
var/log_attack = 0 // log attack messages
|
||||
var/log_adminchat = 0 // log admin chat messages
|
||||
var/log_pda = 0 // log pda messages
|
||||
var/log_pda = 0 // log NTIRC messages
|
||||
var/log_hrefs = 0 // logs all links clicked in-game. Could be used for debugging and tracking down exploits
|
||||
var/log_runtime = 0 // logs world.log to a file
|
||||
var/log_world_output = 0 // log world.log << messages
|
||||
|
||||
@@ -312,6 +312,7 @@
|
||||
SearchVar(skin_styles_female_list)
|
||||
SearchVar(body_marking_styles_list)
|
||||
SearchVar(backbaglist)
|
||||
SearchVar(pdalist)
|
||||
SearchVar(exclude_jobs)
|
||||
SearchVar(visual_nets)
|
||||
SearchVar(cameranet)
|
||||
|
||||
@@ -160,17 +160,6 @@
|
||||
NEWSCASTER.newsAlert(annoncement)
|
||||
NEWSCASTER.update_icon()
|
||||
|
||||
var/list/receiving_pdas = new
|
||||
for (var/obj/item/device/pda/P in PDAs)
|
||||
if (!P.owner)
|
||||
continue
|
||||
if (P.toff)
|
||||
continue
|
||||
receiving_pdas += P
|
||||
|
||||
for(var/obj/item/device/pda/PDA in receiving_pdas)
|
||||
PDA.new_news(annoncement)
|
||||
|
||||
/datum/controller/subsystem/news/proc/GetForumAuthor(topic_id, post_id)
|
||||
topic_id = "[topic_id]"
|
||||
post_id = text2num(post_id)
|
||||
|
||||
@@ -134,7 +134,6 @@
|
||||
feedback_add_details("radio_usage","CAR-[msg_cargo.len]")
|
||||
feedback_add_details("radio_usage","SRV-[msg_service.len]")
|
||||
feedback_add_details("radio_usage","OTH-[messages.len]")
|
||||
feedback_add_details("radio_usage","PDA-[pda_msg_amt]")
|
||||
feedback_add_details("radio_usage","RC-[rc_msg_amt]")
|
||||
|
||||
for (var/key in simple_statistics)
|
||||
|
||||
@@ -63,7 +63,7 @@ var/datum/controller/subsystem/traumas/SStraumas
|
||||
|
||||
"clowns" = typecacheof(list(/obj/item/clothing/under/rank/clown, /obj/item/clothing/shoes/clown_shoes,
|
||||
/obj/item/clothing/mask/gas/clown_hat, /obj/item/bananapeel,
|
||||
/obj/item/bikehorn, /obj/item/device/pda/clown)),
|
||||
/obj/item/bikehorn, /obj/item/modular_computer/handheld/pda/civilian/clown)),
|
||||
|
||||
"cats" = typecacheof(list(/obj/item/clothing/head/tajaran, /obj/item/clothing/suit/storage/tajaran,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/tajaran, /obj/item/clothing/suit/storage/tajaran,
|
||||
|
||||
@@ -174,6 +174,25 @@
|
||||
var/obj/effect/ebeam/B = beam
|
||||
B.color = set_color
|
||||
|
||||
/datum/beam/power
|
||||
var/obj/item/computer_hardware/tesla_link/charging_cable/owner
|
||||
|
||||
/datum/beam/power/End()
|
||||
owner.beam = null
|
||||
owner.untether(FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/beam/power/get_x_translation_vector()
|
||||
return (world.icon_size * target_oldloc.x) - (world.icon_size * origin_oldloc.x)
|
||||
|
||||
/datum/beam/power/get_y_translation_vector()
|
||||
return (world.icon_size * target_oldloc.y) - (world.icon_size * origin_oldloc.y)
|
||||
|
||||
/datum/beam/power/afterDraw()
|
||||
for(var/beam in elements)
|
||||
var/obj/effect/ebeam/B = beam
|
||||
B.color = COLOR_GRAY40
|
||||
|
||||
/obj/effect/ebeam
|
||||
mouse_opacity = 0
|
||||
anchored = 1
|
||||
|
||||
+1
-6
@@ -467,13 +467,8 @@
|
||||
var/is_currently_brigged = 0
|
||||
if(A?.is_prison())
|
||||
is_currently_brigged = 1
|
||||
for(var/obj/item/card/id/card in current)
|
||||
if(current.GetIdCard())
|
||||
is_currently_brigged = 0
|
||||
break // if they still have ID they're not brigged
|
||||
for(var/obj/item/device/pda/P in current)
|
||||
if(P.id)
|
||||
is_currently_brigged = 0
|
||||
break // if they still have ID they're not brigged
|
||||
|
||||
if(!is_currently_brigged)
|
||||
brigged_since = -1
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
l_pocket = /obj/item/melee/energy/sword
|
||||
r_pocket = /obj/item/cloaking_device
|
||||
id = /obj/item/card/id/syndicate
|
||||
pda = /obj/item/device/pda/heads
|
||||
pda = /obj/item/modular_computer/handheld/pda/command
|
||||
|
||||
/datum/outfit/admin/killer/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
var/obj/item/storage/secure/briefcase/sec_briefcase = new(H)
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
l_pocket = /obj/item/reagent_containers/spray/pepper
|
||||
r_pocket = /obj/item/device/taperecorder/cciaa
|
||||
l_hand = /obj/item/storage/lockbox/cciaa
|
||||
pda = /obj/item/device/pda/central
|
||||
pda = /obj/item/modular_computer/handheld/pda/command/cciaa
|
||||
|
||||
id_access = "CCIA Agent"
|
||||
|
||||
@@ -304,7 +304,7 @@
|
||||
name = "NTCC Odin Sanitation Specialist"
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/janitor
|
||||
pda = /obj/item/device/pda/janitor
|
||||
pda = /obj/item/modular_computer/handheld/pda/civilian
|
||||
shoes = /obj/item/clothing/shoes/galoshes
|
||||
l_ear = /obj/item/device/radio/headset/headset_service
|
||||
l_pocket = /obj/item/grenade/chem_grenade/cleaner
|
||||
|
||||
@@ -35,6 +35,11 @@
|
||||
var/dufflebag = /obj/item/storage/backpack/duffel
|
||||
var/messengerbag = /obj/item/storage/backpack/messenger
|
||||
|
||||
var/allow_pda_choice = FALSE
|
||||
var/tab_pda = /obj/item/modular_computer/handheld/pda/civilian
|
||||
var/tablet = /obj/item/modular_computer/handheld/preset/civilian
|
||||
var/wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian
|
||||
|
||||
var/internals_slot = null //ID of slot containing a gas tank
|
||||
var/list/backpack_contents = list() //In the list(path=count,otherpath=count) format
|
||||
var/list/accessory_contents = list()
|
||||
@@ -45,7 +50,7 @@
|
||||
/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
//to be overriden for customization depending on client prefs,species etc
|
||||
if(allow_backbag_choice)
|
||||
var/use_job_specific = H.backbag_style == 1
|
||||
var/use_job_specific = H.backbag_style == TRUE
|
||||
switch(H.backbag)
|
||||
if (1)
|
||||
back = null
|
||||
@@ -165,22 +170,40 @@
|
||||
if(r_hand)
|
||||
H.put_in_r_hand(new r_hand(H))
|
||||
|
||||
if(pda && !visualsOnly) //Dont equip and imprint the PDA in visuals only (preview) to avoid duplicates
|
||||
if(allow_pda_choice)
|
||||
switch(H.pda_choice)
|
||||
if (1)
|
||||
pda = null
|
||||
if (7)
|
||||
pda = tablet
|
||||
if (8)
|
||||
pda = wristbound
|
||||
else
|
||||
pda = tab_pda
|
||||
|
||||
if(pda && !visualsOnly)
|
||||
var/obj/item/I = new pda(H)
|
||||
imprint_pda(H,I)
|
||||
switch(H.pda_choice)
|
||||
if(3)
|
||||
I.icon = 'icons/obj/pda_old.dmi'
|
||||
if(4)
|
||||
I.icon = 'icons/obj/pda_rugged.dmi'
|
||||
if(5)
|
||||
I.icon = 'icons/obj/pda_slate.dmi'
|
||||
if(6)
|
||||
I.icon = 'icons/obj/pda_smart.dmi'
|
||||
I.update_icon()
|
||||
H.equip_or_collect(I, slot_wear_id)
|
||||
|
||||
if(id)
|
||||
var/obj/item/device/pda/P = H.wear_id
|
||||
var/obj/item/modular_computer/P = H.wear_id
|
||||
var/obj/item/I = new id(H)
|
||||
imprint_idcard(H,I)
|
||||
if(istype(P))
|
||||
I.forceMove(P)
|
||||
P.id = I
|
||||
if(istype(P) && P.card_slot)
|
||||
addtimer(CALLBACK(src, .proc/register_pda, P, I), 1 SECOND)
|
||||
else
|
||||
H.equip_or_collect(I, slot_wear_id)
|
||||
|
||||
|
||||
if(!visualsOnly) // Items in pockets or backpack don't show up on mob's icon.
|
||||
if(l_pocket)
|
||||
equip_item(H, l_pocket, slot_l_store)
|
||||
@@ -272,16 +295,14 @@
|
||||
if(H.mind && H.mind.initial_account)
|
||||
C.associated_account_number = H.mind.initial_account.account_number
|
||||
|
||||
/datum/outfit/proc/imprint_pda(mob/living/carbon/human/H, obj/item/device/pda/PDA)
|
||||
var/obj/item/card/id/C = PDA.id
|
||||
PDA.owner = H.real_name
|
||||
if(istype(PDA) && istype(C))
|
||||
PDA.ownjob = C.assignment
|
||||
PDA.ownrank = C.rank
|
||||
else //As a fallback if the id isnt inside of the PDA
|
||||
PDA.ownjob = get_id_assignment(H)
|
||||
PDA.ownrank = get_id_rank(H)
|
||||
PDA.name = "PDA-[H.real_name] ([PDA.ownjob])"
|
||||
/datum/outfit/proc/register_pda(obj/item/modular_computer/P, obj/item/card/id/I)
|
||||
if(!P.card_slot)
|
||||
return
|
||||
P.card_slot.insert_id(I)
|
||||
if(P.card_slot.stored_card && !P.hidden)
|
||||
P.set_autorun("ntnrc_client")
|
||||
P.enable_computer(null, TRUE) // passing null because we don't want the UI to open
|
||||
P.minimize_program()
|
||||
|
||||
/datum/outfit/proc/get_id_access(mob/living/carbon/human/H)
|
||||
return list()
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
name = "Random Visitor"
|
||||
|
||||
id = /obj/item/card/id
|
||||
pda = /obj/item/device/pda
|
||||
pda = /obj/item/modular_computer/handheld/pda/civilian
|
||||
|
||||
/datum/outfit/admin/random/visitor/get_id_assignment()
|
||||
return "Visitor"
|
||||
|
||||
@@ -151,6 +151,7 @@
|
||||
belt = /obj/item/storage/belt/military
|
||||
gloves = /obj/item/clothing/gloves/swat
|
||||
shoes = /obj/item/clothing/shoes/jackboots
|
||||
pda = /obj/item/modular_computer/handheld/pda/syndicate
|
||||
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/box/engineer = 1,
|
||||
|
||||
@@ -32,7 +32,6 @@ They sell generic supplies and ask for generic supplies.
|
||||
/obj/item/device/assembly_holder = TRADER_BLACKLIST_ALL,
|
||||
/obj/item/device/encryptionkey = TRADER_BLACKLIST_SUB, //Why should ai want NT encryption keys?
|
||||
/obj/item/device/radio = TRADER_BLACKLIST_ALL,
|
||||
/obj/item/device/pda = TRADER_BLACKLIST_SUB,
|
||||
/obj/item/device/chameleon = TRADER_BLACKLIST, // Why should it want a chameleon projector
|
||||
/obj/item/device/dociler = TRADER_BLACKLIST, //Item unobtaineable
|
||||
/obj/item/device/flashlight/drone = TRADER_BLACKLIST, // No drone stuff
|
||||
|
||||
@@ -88,8 +88,7 @@
|
||||
/obj/item/clothing/mask/gas/sexyclown = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/shoes/clown_shoes = TRADER_THIS_TYPE,
|
||||
/obj/item/clothing/under/rank/clown = TRADER_THIS_TYPE,
|
||||
/obj/item/device/pda/clown = TRADER_THIS_TYPE,
|
||||
/obj/item/cartridge/clown = TRADER_THIS_TYPE,
|
||||
/obj/item/modular_computer/handheld/pda/civilian/clown = TRADER_THIS_TYPE,
|
||||
/obj/item/stamp/clown = TRADER_THIS_TYPE,
|
||||
/obj/item/storage/backpack/clown = TRADER_THIS_TYPE,
|
||||
/obj/item/bananapeel = TRADER_THIS_TYPE,
|
||||
|
||||
@@ -19,11 +19,6 @@
|
||||
item_cost = 2
|
||||
path = /obj/item/storage/box/syndie_kit/toxin
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/detomatix
|
||||
name = "Detomatix PDA Cartridge"
|
||||
item_cost = 4
|
||||
path = /obj/item/cartridge/syndicate
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/pens
|
||||
name = "Pen-jector Kit"
|
||||
desc = "A kit that contains four differently coloured pens. A blue pacifying pen, a green pen containing healing chemicals, and a yellow hyperzine pen."
|
||||
|
||||
@@ -119,12 +119,12 @@ var/datum/antagonist/traitor/traitors
|
||||
if(traitor_mob.client.prefs.uplinklocation == "Headset")
|
||||
R = locate(/obj/item/device/radio) in traitor_mob.contents
|
||||
if(!R)
|
||||
R = locate(/obj/item/device/pda) in traitor_mob.contents
|
||||
R = locate(/obj/item/modular_computer) in traitor_mob.contents
|
||||
to_chat(traitor_mob, "Could not locate a Radio, installing in PDA instead!")
|
||||
if (!R)
|
||||
to_chat(traitor_mob, "Unfortunately, neither a radio or a PDA relay could be installed.")
|
||||
else if(traitor_mob.client.prefs.uplinklocation == "PDA")
|
||||
R = locate(/obj/item/device/pda) in traitor_mob.contents
|
||||
R = locate(/obj/item/modular_computer) in traitor_mob.contents
|
||||
if(!R)
|
||||
R = locate(/obj/item/device/radio) in traitor_mob.contents
|
||||
to_chat(traitor_mob, "Could not locate a PDA, installing into a Radio instead!")
|
||||
@@ -135,7 +135,7 @@ var/datum/antagonist/traitor/traitors
|
||||
R = null
|
||||
else
|
||||
to_chat(traitor_mob, "You have not selected a location for your relay in the antagonist options! Defaulting to PDA!")
|
||||
R = locate(/obj/item/device/pda) in traitor_mob.contents
|
||||
R = locate(/obj/item/modular_computer) in traitor_mob.contents
|
||||
if (!R)
|
||||
R = locate(/obj/item/device/radio) in traitor_mob.contents
|
||||
to_chat(traitor_mob, "Could not locate a PDA, installing into a Radio instead!")
|
||||
@@ -164,13 +164,12 @@ var/datum/antagonist/traitor/traitors
|
||||
to_chat(traitor_mob, "A portable object teleportation relay has been installed in your [R.name] [loc]. Simply dial the frequency [format_frequency(freq)] to unlock its hidden features.")
|
||||
traitor_mob.mind.store_memory("<B>Radio Freq:</B> [format_frequency(freq)] ([R.name] [loc]).")
|
||||
|
||||
else if (istype(R, /obj/item/device/pda))
|
||||
else if (istype(R, /obj/item/modular_computer))
|
||||
// generate a passcode if the uplink is hidden in a PDA
|
||||
var/pda_pass = "[rand(100,999)] [pick("Alpha","Bravo","Delta","Omega")]"
|
||||
var/obj/item/device/uplink/hidden/T = new(R, traitor_mob.mind)
|
||||
R.hidden_uplink = T
|
||||
var/obj/item/device/pda/P = R
|
||||
P.lock_code = pda_pass
|
||||
T.pda_code = pda_pass
|
||||
R.autodrobe_no_remove = TRUE
|
||||
to_chat(traitor_mob, "A portable object teleportation relay has been installed in your [R.name] [loc]. Simply enter the code \"[pda_pass]\" into the ringtone select to unlock its hidden features.")
|
||||
traitor_mob.mind.store_memory("<B>Uplink Passcode:</B> [pda_pass] ([R.name] [loc]).")
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
return 0
|
||||
|
||||
/obj/item/proc/GetAccess()
|
||||
return list()
|
||||
var/obj/item/card/id = GetID()
|
||||
return istype(id) ? id.GetAccess() : list()
|
||||
|
||||
/obj/proc/GetID()
|
||||
return null
|
||||
|
||||
@@ -35,7 +35,9 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
l_ear = /obj/item/device/radio/headset/heads/captain
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
id = /obj/item/card/id/gold
|
||||
pda = /obj/item/device/pda/captain
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/command/captain
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/command/captain
|
||||
tablet = /obj/item/modular_computer/handheld/preset/command/captain
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/box/ids = 1
|
||||
)
|
||||
@@ -107,7 +109,9 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
shoes = /obj/item/clothing/shoes/brown
|
||||
l_ear = /obj/item/device/radio/headset/heads/hop
|
||||
id = /obj/item/card/id/navy
|
||||
pda = /obj/item/device/pda/heads/hop
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/command/hop
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/command/hop
|
||||
tablet = /obj/item/modular_computer/handheld/preset/command/hop
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/box/ids = 1
|
||||
)
|
||||
|
||||
@@ -22,7 +22,9 @@
|
||||
jobtype = /datum/job/bartender
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/bartender
|
||||
pda = /obj/item/device/pda/bar
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian/bartender
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/bartender
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian/bartender
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/device/radio/headset/headset_service
|
||||
|
||||
@@ -52,7 +54,9 @@
|
||||
uniform = /obj/item/clothing/under/rank/chef
|
||||
suit = /obj/item/clothing/suit/chef
|
||||
head = /obj/item/clothing/head/chefhat
|
||||
pda = /obj/item/device/pda/chef
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/device/radio/headset/headset_service
|
||||
|
||||
@@ -84,7 +88,9 @@
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/hydroponics
|
||||
suit = /obj/item/clothing/suit/apron
|
||||
pda = /obj/item/device/pda/botanist
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/device/radio/headset/headset_service
|
||||
suit_store = /obj/item/device/analyzer/plant_analyzer
|
||||
@@ -131,7 +137,9 @@
|
||||
jobtype = /datum/job/qm
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/quartermaster
|
||||
pda = /obj/item/device/pda/quartermaster
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/supply/qm
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/supply/qm
|
||||
tablet = /obj/item/modular_computer/handheld/preset/supply/qm
|
||||
shoes = /obj/item/clothing/shoes/brown
|
||||
l_ear = /obj/item/device/radio/headset/qm
|
||||
l_hand = /obj/item/clipboard
|
||||
@@ -160,7 +168,9 @@
|
||||
jobtype = /datum/job/cargo_tech
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/cargo
|
||||
pda = /obj/item/device/pda/cargo
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/supply
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/supply
|
||||
tablet = /obj/item/modular_computer/handheld/preset/supply
|
||||
id = /obj/item/card/id/silver
|
||||
shoes = /obj/item/clothing/shoes/brown
|
||||
l_ear = /obj/item/device/radio/headset/headset_cargo
|
||||
@@ -191,7 +201,9 @@
|
||||
jobtype = /datum/job/mining
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/miner
|
||||
pda = /obj/item/device/pda/shaftminer
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/supply/miner
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/supply/miner
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian
|
||||
id = /obj/item/card/id/silver
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/device/radio/headset/headset_mining
|
||||
@@ -232,7 +244,9 @@
|
||||
jobtype = /datum/job/janitor
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/janitor
|
||||
pda = /obj/item/device/pda/janitor
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian/janitor
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/janitor
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian/janitor
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/device/radio/headset/headset_service
|
||||
|
||||
@@ -261,7 +275,9 @@
|
||||
jobtype = /datum/job/journalist
|
||||
|
||||
uniform = /obj/item/clothing/under/suit_jacket/red
|
||||
pda = /obj/item/device/pda/librarian
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian/librarian
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/librarian
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian/librarian
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/device/radio/headset/headset_service
|
||||
|
||||
@@ -274,7 +290,9 @@
|
||||
jobtype = /datum/job/journalist
|
||||
|
||||
uniform = /obj/item/clothing/under/suit_jacket/red
|
||||
pda = /obj/item/device/pda/librarian
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian/librarian
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/librarian
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian/librarian
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
|
||||
backpack_contents = list(
|
||||
@@ -304,7 +322,9 @@
|
||||
jobtype = /datum/job/librarian
|
||||
|
||||
uniform = /obj/item/clothing/under/suit_jacket/red
|
||||
pda = /obj/item/device/pda/librarian
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian/librarian
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/librarian
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian/librarian
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/device/radio/headset/headset_service
|
||||
r_pocket = /obj/item/barcodescanner
|
||||
@@ -323,8 +343,8 @@
|
||||
jobtype = /datum/job/librarian
|
||||
|
||||
uniform = /obj/item/clothing/under/suit_jacket/charcoal
|
||||
l_pocket = /obj/item/modular_computer/tablet/preset/custom_loadout/advanced
|
||||
l_pocket = /obj/item/modular_computer/handheld/custom_loadout/advanced
|
||||
r_pocket = /obj/item/card/tech_support
|
||||
r_hand = /obj/item/storage/bag/circuits/basic
|
||||
l_hand = /obj/item/modular_computer/laptop/preset
|
||||
gloves = /obj/item/modular_computer/wristbound/preset/advanced/generic
|
||||
gloves = /obj/item/modular_computer/handheld/wristbound/preset/advanced/generic
|
||||
|
||||
@@ -20,7 +20,9 @@
|
||||
uniform = /obj/item/clothing/under/rank/chaplain
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/device/radio/headset/headset_service
|
||||
pda = /obj/item/device/pda/chaplain
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian/chaplain
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/chaplain
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian/chaplain
|
||||
|
||||
/datum/outfit/job/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
. = ..()
|
||||
|
||||
@@ -37,7 +37,9 @@
|
||||
uniform = /obj/item/clothing/under/rank/chief_engineer
|
||||
head = /obj/item/clothing/head/hardhat/white
|
||||
belt = /obj/item/storage/belt/utility
|
||||
pda = /obj/item/device/pda/heads/ce
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/engineering/ce
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/engineering/ce
|
||||
tablet = /obj/item/modular_computer/handheld/preset/engineering/ce
|
||||
id = /obj/item/card/id/navy
|
||||
shoes = /obj/item/clothing/shoes/workboots
|
||||
l_ear = /obj/item/device/radio/headset/heads/ce
|
||||
@@ -90,7 +92,9 @@
|
||||
uniform = /obj/item/clothing/under/rank/engineer
|
||||
head = /obj/item/clothing/head/hardhat
|
||||
belt = /obj/item/storage/belt/utility
|
||||
pda = /obj/item/device/pda/engineering
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/engineering
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/engineering
|
||||
tablet = /obj/item/modular_computer/handheld/preset/engineering
|
||||
id = /obj/item/card/id/silver
|
||||
shoes = /obj/item/clothing/shoes/workboots
|
||||
l_ear = /obj/item/device/radio/headset/headset_eng
|
||||
@@ -134,7 +138,6 @@
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/atmospheric_technician
|
||||
belt = /obj/item/storage/belt/utility
|
||||
pda = /obj/item/device/pda/atmos
|
||||
id = /obj/item/card/id/silver
|
||||
shoes = /obj/item/clothing/shoes/workboots
|
||||
l_ear = /obj/item/device/radio/headset/headset_eng
|
||||
@@ -144,6 +147,10 @@
|
||||
dufflebag = /obj/item/storage/backpack/duffel/eng
|
||||
messengerbag = /obj/item/storage/backpack/messenger/engi
|
||||
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/engineering/atmos
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/engineering/atmos
|
||||
tablet = /obj/item/modular_computer/handheld/preset/engineering/atmos
|
||||
|
||||
belt_contents = list(
|
||||
/obj/item/weldingtool = 1,
|
||||
/obj/item/crowbar = 1,
|
||||
|
||||
@@ -184,6 +184,7 @@
|
||||
|
||||
var/allow_loadout = TRUE
|
||||
allow_backbag_choice = TRUE
|
||||
allow_pda_choice = TRUE
|
||||
var/jobtype = null
|
||||
|
||||
uniform = /obj/item/clothing/under/color/grey
|
||||
@@ -191,7 +192,9 @@
|
||||
l_ear = /obj/item/device/radio/headset
|
||||
back = /obj/item/storage/backpack
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
pda = /obj/item/device/pda
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian
|
||||
|
||||
var/box = /obj/item/storage/box/survival
|
||||
|
||||
|
||||
@@ -38,7 +38,9 @@
|
||||
suit_store = /obj/item/device/flashlight/pen
|
||||
shoes = /obj/item/clothing/shoes/brown
|
||||
l_ear = /obj/item/device/radio/headset/heads/cmo
|
||||
pda = /obj/item/device/pda/heads/cmo
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/medical/cmo
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical/cmo
|
||||
tablet = /obj/item/modular_computer/handheld/preset/medical/cmo
|
||||
id = /obj/item/card/id/navy
|
||||
l_hand = /obj/item/storage/firstaid/adv
|
||||
|
||||
@@ -93,7 +95,9 @@
|
||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/medical
|
||||
shoes = /obj/item/clothing/shoes/medical
|
||||
l_ear = /obj/item/device/radio/headset/headset_med
|
||||
pda = /obj/item/device/pda/medical
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/medical
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical
|
||||
tablet = /obj/item/modular_computer/handheld/preset/medical
|
||||
id = /obj/item/card/id/white
|
||||
suit_store = /obj/item/device/flashlight/pen
|
||||
|
||||
@@ -146,7 +150,9 @@
|
||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/pharmacist
|
||||
shoes = /obj/item/clothing/shoes/chemist
|
||||
l_ear = /obj/item/device/radio/headset/headset_med
|
||||
pda = /obj/item/device/pda/chemist
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/medical
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical
|
||||
tablet = /obj/item/modular_computer/handheld/preset/medical
|
||||
id = /obj/item/card/id/white
|
||||
|
||||
backpack = /obj/item/storage/backpack/pharmacy
|
||||
@@ -183,7 +189,9 @@
|
||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/psych
|
||||
shoes = /obj/item/clothing/shoes/psych
|
||||
l_ear = /obj/item/device/radio/headset/headset_med
|
||||
pda = /obj/item/device/pda/psych
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/medical/psych
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical/psych
|
||||
tablet = /obj/item/modular_computer/handheld/preset/medical/psych
|
||||
id = /obj/item/card/id/white
|
||||
|
||||
/datum/outfit/job/psychiatrist/psycho
|
||||
@@ -221,7 +229,9 @@
|
||||
l_hand = /obj/item/storage/firstaid/adv
|
||||
r_hand = /obj/item/reagent_containers/hypospray
|
||||
belt = /obj/item/storage/belt/medical/emt
|
||||
pda = /obj/item/device/pda/paramedic
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/medical
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical
|
||||
tablet = /obj/item/modular_computer/handheld/preset/medical
|
||||
id = /obj/item/card/id/white
|
||||
head = /obj/item/clothing/head/hardhat/emt
|
||||
|
||||
|
||||
@@ -38,13 +38,17 @@
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
head = /obj/item/clothing/head/that
|
||||
id = /obj/item/card/id/merchant
|
||||
pda = /obj/item/device/pda/merchant
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian/merchant
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian
|
||||
r_pocket = /obj/item/device/price_scanner
|
||||
|
||||
/datum/outfit/merchant_assistant
|
||||
name = "Merchant's Assistant"
|
||||
id = /obj/item/card/id/merchant
|
||||
pda = /obj/item/device/pda/merchant
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian/merchant
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian
|
||||
r_pocket = /obj/item/device/price_scanner
|
||||
belt = /obj/item/storage/belt/utility/full
|
||||
uniform = list(
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
head = /obj/item/clothing/head/beret/liaison
|
||||
uniform = /obj/item/clothing/under/rank/liaison
|
||||
suit = /obj/item/clothing/suit/storage/toggle/liaison
|
||||
pda = /obj/item/device/pda/lawyer
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/civilian/lawyer
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/lawyer
|
||||
tablet = /obj/item/modular_computer/handheld/preset/civilian/lawyer
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
glasses = /obj/item/clothing/glasses/sunglasses/big
|
||||
l_ear = /obj/item/device/radio/headset/representative
|
||||
|
||||
@@ -38,7 +38,9 @@
|
||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/science
|
||||
shoes = /obj/item/clothing/shoes/brown
|
||||
l_ear = /obj/item/device/radio/headset/heads/rd
|
||||
pda = /obj/item/device/pda/heads/rd
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/research/rd
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/research/rd
|
||||
tablet = /obj/item/modular_computer/handheld/preset/research/rd
|
||||
id = /obj/item/card/id/navy
|
||||
l_hand = /obj/item/clipboard
|
||||
|
||||
@@ -78,7 +80,9 @@
|
||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/science
|
||||
shoes = /obj/item/clothing/shoes/science
|
||||
l_ear = /obj/item/device/radio/headset/headset_sci
|
||||
pda = /obj/item/device/pda/science
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/research
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/research
|
||||
tablet = /obj/item/modular_computer/handheld/preset/research
|
||||
id = /obj/item/card/id/white
|
||||
|
||||
backpack = /obj/item/storage/backpack/toxins
|
||||
@@ -116,7 +120,7 @@
|
||||
/datum/outfit/job/scientist/xenobiologist
|
||||
name = "Xenobiologist"
|
||||
jobtype = /datum/job/xenobiologist
|
||||
pda = /obj/item/device/pda/xenobio
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/research
|
||||
|
||||
/datum/outfit/job/scientist/xenobiologist/xenobotanist
|
||||
name = "Xenobotanist"
|
||||
@@ -151,7 +155,9 @@
|
||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/device/radio/headset/headset_sci
|
||||
pda = /obj/item/device/pda/roboticist
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/research
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/research
|
||||
tablet = /obj/item/modular_computer/handheld/preset/research
|
||||
id = /obj/item/card/id/white
|
||||
belt = /obj/item/storage/belt/utility
|
||||
|
||||
|
||||
@@ -36,7 +36,9 @@
|
||||
uniform = /obj/item/clothing/under/rank/head_of_security
|
||||
shoes = /obj/item/clothing/shoes/jackboots
|
||||
l_ear = /obj/item/device/radio/headset/heads/hos
|
||||
pda = /obj/item/device/pda/heads/hos
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/security/hos
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/security/hos
|
||||
tablet = /obj/item/modular_computer/handheld/preset/security/hos
|
||||
id = /obj/item/card/id/navy
|
||||
glasses = /obj/item/clothing/glasses/sunglasses/sechud/head
|
||||
|
||||
@@ -89,7 +91,9 @@
|
||||
uniform = /obj/item/clothing/under/rank/warden
|
||||
shoes = /obj/item/clothing/shoes/jackboots
|
||||
l_ear = /obj/item/device/radio/headset/headset_warden
|
||||
pda = /obj/item/device/pda/warden
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/security
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/security
|
||||
tablet = /obj/item/modular_computer/handheld/preset/security
|
||||
glasses = /obj/item/clothing/glasses/sunglasses/sechud/head
|
||||
l_pocket = /obj/item/device/flash
|
||||
|
||||
@@ -138,7 +142,9 @@
|
||||
uniform = /obj/item/clothing/under/det
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
l_ear = /obj/item/device/radio/headset/headset_sec
|
||||
pda = /obj/item/device/pda/detective
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/security/detective
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/security/detective
|
||||
tablet = /obj/item/modular_computer/handheld/preset/security/detective
|
||||
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/box/evidence = 1
|
||||
@@ -181,7 +187,9 @@
|
||||
uniform = /obj/item/clothing/under/det/forensics
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
l_ear = /obj/item/device/radio/headset/headset_sec
|
||||
pda = /obj/item/device/pda/detective
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/security/detective
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/security/detective
|
||||
tablet = /obj/item/modular_computer/handheld/preset/security/detective
|
||||
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/box/evidence = 1
|
||||
@@ -229,7 +237,9 @@
|
||||
uniform = /obj/item/clothing/under/rank/security
|
||||
shoes = /obj/item/clothing/shoes/jackboots
|
||||
l_ear = /obj/item/device/radio/headset/headset_sec
|
||||
pda = /obj/item/device/pda/security
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/security
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/security
|
||||
tablet = /obj/item/modular_computer/handheld/preset/security
|
||||
l_pocket = /obj/item/device/flash
|
||||
|
||||
backpack = /obj/item/storage/backpack/security
|
||||
|
||||
@@ -123,7 +123,7 @@ var/list/whitelist = list()
|
||||
return 0
|
||||
|
||||
if(!dbcon.IsConnected())
|
||||
return TRUE
|
||||
return 0
|
||||
|
||||
var/age_to_beat = 0
|
||||
|
||||
|
||||
@@ -275,7 +275,7 @@ update_flag
|
||||
valve_open = !valve_open
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/W as obj, var/mob/user as mob)
|
||||
if(!W.iswrench() && !istype(W, /obj/item/tank) && !istype(W, /obj/item/device/analyzer) && !istype(W, /obj/item/device/pda))
|
||||
if(!W.iswrench() && !istype(W, /obj/item/tank) && !istype(W, /obj/item/device/analyzer) && !istype(W, /obj/item/modular_computer))
|
||||
visible_message("<span class='warning'>\The [user] hits \the [src] with \a [W]!</span>")
|
||||
src.health -= W.force
|
||||
if(!istype(W, /obj/item/forensics))
|
||||
|
||||
@@ -162,21 +162,16 @@
|
||||
return
|
||||
|
||||
// OTHER
|
||||
else if (can_use() && (istype(W, /obj/item/paper) || istype(W, /obj/item/device/pda)) && isliving(user))
|
||||
else if (can_use() && (istype(W, /obj/item/paper)) && isliving(user))
|
||||
var/info = null
|
||||
var/mob/living/U = user
|
||||
var/obj/item/paper/X = null
|
||||
var/obj/item/device/pda/P = null
|
||||
|
||||
var/itemname = ""
|
||||
if(istype(W, /obj/item/paper))
|
||||
X = W
|
||||
itemname = X.name
|
||||
info = X.info
|
||||
else
|
||||
P = W
|
||||
itemname = P.name
|
||||
info = P.notehtml
|
||||
to_chat(U, "You hold \a [itemname] up to the camera ...")
|
||||
for(var/mob/living/silicon/ai/O in living_mob_list)
|
||||
var/entry = O.addCameraRecord(itemname,info)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/obj/machinery/computer/message_monitor
|
||||
name = "messaging monitor console"
|
||||
desc = "Used to access and maintain data on messaging servers. Allows you to view PDA and requests console messages."
|
||||
desc = "Used to access and maintain data on messaging servers. Allows you to view requests console messages."
|
||||
icon_screen = "comm_logs"
|
||||
light_color = "#00b000"
|
||||
var/hack_icon = "error"
|
||||
@@ -25,7 +25,6 @@
|
||||
var/optioncount = 8
|
||||
// Custom Message Properties
|
||||
var/customsender = "System Administrator"
|
||||
var/obj/item/device/pda/customrecepient = null
|
||||
var/customjob = "Admin"
|
||||
var/custommessage = "This is a test, please ignore."
|
||||
|
||||
@@ -36,7 +35,6 @@
|
||||
/obj/machinery/computer/message_monitor/Destroy()
|
||||
QDEL_NULL(spark_system)
|
||||
linkedServer = null
|
||||
customrecepient = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/message_monitor/attackby(obj/item/O as obj, mob/living/user as mob)
|
||||
@@ -144,21 +142,6 @@
|
||||
dat += "<br><hr><dd><span class='warning'>Reg, #514 forbids sending messages to a Head of Staff containing Erotic Rendering Properties.</span>"
|
||||
|
||||
//Message Logs
|
||||
if(1)
|
||||
var/index = 0
|
||||
//var/recipient = "Unspecified" //name of the person
|
||||
//var/sender = "Unspecified" //name of the sender
|
||||
//var/message = "Blank" //transferred message
|
||||
dat += "<center><A href='?src=\ref[src];back=1'>Back</a> - <A href='?src=\ref[src];refresh=1'>Refresh</center><hr>"
|
||||
dat += "<table border='1' width='100%'><tr><th width = '5%'>X</th><th width='15%'>Sender</th><th width='15%'>Recipient</th><th width='300px' word-wrap: break-word>Message</th></tr>"
|
||||
for(var/datum/data_pda_msg/pda in src.linkedServer.pda_msgs)
|
||||
index++
|
||||
if(index > 3000)
|
||||
break
|
||||
// Del - Sender - Recepient - Message
|
||||
// X - Al Green - Your Mom - WHAT UP!?
|
||||
dat += "<tr><td width = '5%'><center><A href='?src=\ref[src];delete=\ref[pda]' style='color: rgb(255,0,0)'>X</a></center></td><td width='15%'>[pda.sender]</td><td width='15%'>[pda.recipient]</td><td width='300px'>[pda.message]</td></tr>"
|
||||
dat += "</table>"
|
||||
//Hacking screen.
|
||||
if(2)
|
||||
if(istype(user, /mob/living/silicon/ai) || istype(user, /mob/living/silicon/robot))
|
||||
@@ -202,24 +185,6 @@
|
||||
10010000001110100011010000110000101110100001000000111010<br>
|
||||
001101001011011010110010100101110"}
|
||||
|
||||
//Fake messages
|
||||
if(3)
|
||||
dat += "<center><A href='?src=\ref[src];back=1'>Back</a> - <A href='?src=\ref[src];Reset=1'>Reset</a></center><hr>"
|
||||
|
||||
dat += {"<table border='1' width='100%'>
|
||||
<tr><td width='20%'><A href='?src=\ref[src];select=Sender'>Sender</a></td>
|
||||
<td width='20%'><A href='?src=\ref[src];select=RecJob'>Sender's Job</a></td>
|
||||
<td width='20%'><A href='?src=\ref[src];select=Recepient'>Recipient</a></td>
|
||||
<td width='300px' word-wrap: break-word><A href='?src=\ref[src];select=Message'>Message</a></td></tr>"}
|
||||
//Sender - Sender's Job - Recepient - Message
|
||||
//Al Green- Your Dad - Your Mom - WHAT UP!?
|
||||
|
||||
dat += {"<tr><td width='20%'>[customsender]</td>
|
||||
<td width='20%'>[customjob]</td>
|
||||
<td width='20%'>[customrecepient ? customrecepient.owner : "NONE"]</td>
|
||||
<td width='300px'>[custommessage]</td></tr>"}
|
||||
dat += "</table><br><center><A href='?src=\ref[src];select=Send'>Send</a></center>"
|
||||
|
||||
//Requests Console Logs
|
||||
if(4)
|
||||
|
||||
@@ -285,7 +250,6 @@
|
||||
|
||||
/obj/machinery/computer/message_monitor/proc/ResetMessage()
|
||||
customsender = "System Administrator"
|
||||
customrecepient = null
|
||||
custommessage = "This is a test, please ignore."
|
||||
customjob = "Admin"
|
||||
|
||||
@@ -403,80 +367,6 @@
|
||||
else
|
||||
if(auth)
|
||||
src.screen = 3
|
||||
//Fake messaging selection - KEY REQUIRED
|
||||
if (href_list["select"])
|
||||
if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN)))
|
||||
message = noserver
|
||||
screen = 0
|
||||
else
|
||||
switch(href_list["select"])
|
||||
|
||||
//Reset
|
||||
if("Reset")
|
||||
ResetMessage()
|
||||
|
||||
//Select Your Name
|
||||
if("Sender")
|
||||
customsender = sanitize(input(usr, "Please enter the sender's name.") as text|null)
|
||||
|
||||
//Select Receiver
|
||||
if("Recepient")
|
||||
//Get out list of viable PDAs
|
||||
var/list/obj/item/device/pda/sendPDAs = list()
|
||||
for(var/obj/item/device/pda/P in PDAs)
|
||||
if(!P.owner || P.toff || P.hidden) continue
|
||||
sendPDAs += P
|
||||
if(PDAs && PDAs.len > 0)
|
||||
customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sendPDAs
|
||||
else
|
||||
customrecepient = null
|
||||
|
||||
//Enter custom job
|
||||
if("RecJob")
|
||||
customjob = sanitize(input(usr, "Please enter the sender's job.") as text|null)
|
||||
|
||||
//Enter message
|
||||
if("Message")
|
||||
custommessage = input(usr, "Please enter your message.") as text|null
|
||||
custommessage = sanitize(custommessage)
|
||||
|
||||
//Send message
|
||||
if("Send")
|
||||
|
||||
if(isnull(customsender) || customsender == "")
|
||||
customsender = "UNKNOWN"
|
||||
|
||||
if(isnull(customrecepient))
|
||||
message = "<span class='notice'>NOTICE: No recepient selected!</span>"
|
||||
return src.attack_hand(usr)
|
||||
|
||||
if(isnull(custommessage) || custommessage == "")
|
||||
message = "<span class='notice'>NOTICE: No message entered!</span>"
|
||||
return src.attack_hand(usr)
|
||||
|
||||
var/obj/item/device/pda/PDARec = null
|
||||
for (var/obj/item/device/pda/P in PDAs)
|
||||
if (!P.owner || P.toff || P.hidden) continue
|
||||
if(P.owner == customsender)
|
||||
PDARec = P
|
||||
//Sender isn't faking as someone who exists
|
||||
if(isnull(PDARec))
|
||||
src.linkedServer.send_pda_message("[customrecepient.owner]", "[customsender]","[custommessage]")
|
||||
customrecepient.new_message(customsender, customsender, customjob, custommessage)
|
||||
log_and_message_admins("sent a fake PDA message to: [customrecepient.owner] from: [customsender] - [customjob] message: [custommessage]")
|
||||
//Sender is faking as someone who exists
|
||||
else
|
||||
|
||||
src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]")
|
||||
customrecepient.tnote.Add(list(list("sent" = 0, "owner" = "[PDARec.owner]", "job" = "[customjob]", "message" = "[custommessage]", "target" ="\ref[PDARec]")))
|
||||
|
||||
if(!customrecepient.conversations.Find("\ref[PDARec]"))
|
||||
customrecepient.conversations.Add("\ref[PDARec]")
|
||||
|
||||
customrecepient.new_message(PDARec, custommessage)
|
||||
log_and_message_admins("sent a fake PDA message to: [customrecepient.owner] from: [PDARec.owner] - [customjob] message: [custommessage]")
|
||||
//Finally..
|
||||
ResetMessage()
|
||||
|
||||
//Requests Console Logs - KEY REQUIRED
|
||||
if(href_list["viewr"])
|
||||
|
||||
@@ -203,8 +203,6 @@ var/global/list/frozen_crew = list()
|
||||
/obj/item/implant,
|
||||
/obj/item/card/id,
|
||||
/obj/item/modular_computer,
|
||||
/obj/item/device/pda,
|
||||
/obj/item/cartridge,
|
||||
/obj/item/device/radio/headset,
|
||||
/obj/item/device/encryptionkey
|
||||
)
|
||||
|
||||
@@ -64,7 +64,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
var/lid = 0
|
||||
//End Form Integration
|
||||
var/datum/announcement/announcement = new
|
||||
var/list/obj/item/device/pda/alert_pdas = list() //The PDAs we alert upon a request receipt.
|
||||
var/list/obj/item/modular_computer/alert_pdas = list() //The PDAs we alert upon a request receipt.
|
||||
var/global/list/screen_overlays
|
||||
|
||||
/obj/machinery/requests_console/proc/generate_overlays(var/force = 0)
|
||||
@@ -144,11 +144,6 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
if (departmentType & RC_INFO)
|
||||
req_console_information -= department
|
||||
|
||||
if (LAZYLEN(alert_pdas))
|
||||
for (var/pp in alert_pdas)
|
||||
var/obj/item/device/pda/P = pp
|
||||
P.linked_consoles -= src
|
||||
|
||||
alert_pdas.Cut()
|
||||
return ..()
|
||||
|
||||
@@ -200,7 +195,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
data["pda_list"] = list()
|
||||
|
||||
for (var/A in alert_pdas)
|
||||
var/obj/item/device/pda/pda = A
|
||||
var/obj/item/modular_computer/pda = A
|
||||
data["pda_list"] += list(list("name" = alert_pdas[pda], "pda" = "\ref[pda]"))
|
||||
|
||||
data["lid"] = lid
|
||||
@@ -251,6 +246,9 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
if(!MS.active) continue
|
||||
MS.send_rc_message(ckey(href_list["department"]),department,log_msg,msgStamped,msgVerified,priority)
|
||||
pass = 1
|
||||
for (var/obj/item/modular_computer/P in alert_pdas)
|
||||
P.get_notification(log_msg, 1, "[href_list["department"]] ([src])")
|
||||
pass = 1
|
||||
if(pass)
|
||||
screen = RCS_SENTPASS
|
||||
message_log += "<B>Message sent to [recipient]</B><BR>[message]"
|
||||
@@ -278,25 +276,24 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
|
||||
// Link a PDA
|
||||
if(href_list["linkpda"])
|
||||
var/obj/item/device/pda/pda = usr.get_active_hand()
|
||||
var/obj/item/modular_computer/pda = usr.get_active_hand()
|
||||
if (!pda || !istype(pda))
|
||||
to_chat(usr, "<span class='warning'>You need to be holding a PDA to link it.</span>")
|
||||
to_chat(usr, "<span class='warning'>You need to be holding a handheld computer to link it.</span>")
|
||||
else if (pda in alert_pdas)
|
||||
to_chat(usr, "<span class='notice'>\The [pda] appears to be already linked.</span>")
|
||||
//Update the name real quick.
|
||||
alert_pdas[pda] = pda.name
|
||||
else
|
||||
LAZYADD(pda.linked_consoles, src)
|
||||
alert_pdas += pda
|
||||
alert_pdas[pda] = pda.name
|
||||
to_chat(usr, "<span class='notice'>You link \the [pda] to \the [src]. It will now ping upon the arrival of a fax to this machine.</span>")
|
||||
to_chat(usr, "<span class='notice'>You link \the [pda] to \the [src]. It will now ping upon the arrival of a request to this machine.</span>")
|
||||
|
||||
// Unlink a PDA.
|
||||
if(href_list["unlink"])
|
||||
var/obj/item/device/pda/pda = locate(href_list["unlink"])
|
||||
var/obj/item/modular_computer/pda = locate(href_list["unlink"])
|
||||
if (pda && istype(pda))
|
||||
if (pda in alert_pdas)
|
||||
to_chat(usr, "<span class='notice'>You unlink [alert_pdas[pda]] from \the [src]. It will no longer be notified of new faxes.</span>")
|
||||
to_chat(usr, "<span class='notice'>You unlink [alert_pdas[pda]] from \the [src]. It will no longer be notified of new requests.</span>")
|
||||
alert_pdas -= pda
|
||||
|
||||
// Sort the forms.
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
req_access = list() //what access it needs to link your pda
|
||||
|
||||
var/id = null
|
||||
var/list/obj/item/device/pda/rings_pdas = list() //A list of PDAs to alert upon someone touching the machine
|
||||
var/list/obj/item/modular_computer/rings_pdas = list() //A list of PDAs to alert upon someone touching the machine
|
||||
var/listener/ringers
|
||||
var/on = TRUE
|
||||
var/department = "Somewhere" //whatever department/desk you put this thing
|
||||
@@ -62,7 +62,7 @@
|
||||
if(stat & (BROKEN|NOPOWER) || !istype(user,/mob/living))
|
||||
return
|
||||
|
||||
if (istype(C, /obj/item/device/pda))
|
||||
if (istype(C, /obj/item/modular_computer))
|
||||
if(!check_access(C))
|
||||
to_chat(user, "<span class='warning'>Access Denied.</span>")
|
||||
return
|
||||
@@ -108,12 +108,9 @@
|
||||
|
||||
playsound(src.loc, 'sound/machines/ringer.ogg', 50, 1)
|
||||
|
||||
for (var/obj/item/device/pda/pda in rings_pdas)
|
||||
if (pda.toff || pda.message_silent)
|
||||
continue
|
||||
|
||||
var/message = "Notification from \the [department]!"
|
||||
pda.new_info(pda.message_silent, pda.ttone, "[icon2html(pda, viewers(get_turf(pda)))] <b>[message]</b>")
|
||||
for (var/obj/item/modular_computer/P in rings_pdas)
|
||||
var/message = "Attention required!"
|
||||
P.get_notification(message, 1, "[capitalize(department)]")
|
||||
|
||||
addtimer(CALLBACK(src, .proc/unping), 45 SECONDS)
|
||||
|
||||
@@ -121,9 +118,9 @@
|
||||
pinged = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/ringer/proc/remove_pda(var/obj/item/device/pda/pda)
|
||||
if (istype(pda))
|
||||
rings_pdas -= pda
|
||||
/obj/machinery/ringer/proc/remove_pda(var/obj/item/modular_computer/P)
|
||||
if (istype(P))
|
||||
rings_pdas -= P
|
||||
|
||||
/obj/machinery/ringer_button
|
||||
name = "ringer button"
|
||||
|
||||
@@ -63,11 +63,6 @@
|
||||
vend_id = "cola"
|
||||
charges = 50
|
||||
|
||||
/obj/item/vending_refill/pda
|
||||
name = "pdas resupply canister"
|
||||
vend_id = "pdas"
|
||||
charges = 38
|
||||
|
||||
/obj/item/vending_refill/smokes
|
||||
name = "smokes resupply canister"
|
||||
vend_id = "smokes"
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
/obj/item/vending_refill/coffee = 1,
|
||||
/obj/item/vending_refill/snack = 1,
|
||||
/obj/item/vending_refill/cola = 1,
|
||||
/obj/item/vending_refill/pda = 1,
|
||||
/obj/item/vending_refill/smokes = 1,
|
||||
/obj/item/vending_refill/meds = 1,
|
||||
/obj/item/vending_refill/robust = 1,
|
||||
@@ -141,8 +140,7 @@
|
||||
/obj/item/device/assembly/prox_sensor = 5,
|
||||
/obj/item/device/assembly/igniter = 3,
|
||||
/obj/item/device/assembly/signaler = 4,
|
||||
/obj/item/wirecutters = 1,
|
||||
/obj/item/cartridge/signal = 4
|
||||
/obj/item/wirecutters = 1
|
||||
)
|
||||
contraband = list(
|
||||
/obj/item/device/flashlight = 5,
|
||||
@@ -315,36 +313,6 @@
|
||||
temperature_setting = -1
|
||||
light_color = COLOR_GUNMETAL
|
||||
|
||||
|
||||
//This one's from bay12
|
||||
/obj/machinery/vending/cart
|
||||
name = "PTech"
|
||||
desc = "Cartridges for PDAs."
|
||||
product_slogans = "Carts to go!"
|
||||
icon_state = "cart"
|
||||
deny_time = 14
|
||||
req_access = list(access_hop)
|
||||
vend_id = "pdas"
|
||||
products = list(
|
||||
/obj/item/cartridge/medical = 10,
|
||||
/obj/item/cartridge/engineering = 10,
|
||||
/obj/item/cartridge/security = 10,
|
||||
/obj/item/cartridge/janitor = 10,
|
||||
/obj/item/cartridge/signal/science = 10,
|
||||
/obj/item/device/pda/heads = 10,
|
||||
/obj/item/cartridge/captain = 3,
|
||||
/obj/item/cartridge/quartermaster = 10
|
||||
)
|
||||
contraband = list(
|
||||
/obj/item/cartridge/clown = 2
|
||||
)
|
||||
premium = list(
|
||||
/obj/item/cartridge/captain = 1
|
||||
)
|
||||
restock_items = 1
|
||||
light_color = COLOR_BLUE_GRAY
|
||||
|
||||
|
||||
/obj/machinery/vending/cigarette
|
||||
name = "Cigarette machine" //OCD had to be uppercase to look nice with the new formating
|
||||
desc = "If you want to get cancer, might as well do it in style!"
|
||||
|
||||
@@ -434,7 +434,7 @@ var/list/global/slot_flags_enumeration = list(
|
||||
if(!disable_warning)
|
||||
to_chat(usr, "<span class='warning'>You somehow have a suit with no defined allowed items for suit storage, stop that.</span>")
|
||||
return 0
|
||||
if( !(istype(src, /obj/item/device/pda) || src.ispen() || is_type_in_list(src, H.wear_suit.allowed)) )
|
||||
if( !(istype(src, /obj/item/modular_computer) || src.ispen() || is_type_in_list(src, H.wear_suit.allowed)) )
|
||||
return 0
|
||||
if(slot_handcuffed)
|
||||
if(!istype(src, /obj/item/handcuffs))
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,557 +0,0 @@
|
||||
/obj/item/cartridge
|
||||
name = "generic cartridge"
|
||||
desc = "A data cartridge for portable microcomputers."
|
||||
icon = 'icons/obj/cartridge.dmi'
|
||||
icon_state = "cart"
|
||||
item_state = "electronic"
|
||||
w_class = ITEMSIZE_TINY
|
||||
drop_sound = 'sound/items/drop/component.ogg'
|
||||
pickup_sound = 'sound/items/pickup/component.ogg'
|
||||
|
||||
var/obj/item/radio/integrated/radio = null
|
||||
var/access_security = 0
|
||||
var/access_engine = 0
|
||||
var/access_atmos = 0
|
||||
var/access_medical = 0
|
||||
var/access_clown = 0
|
||||
var/access_mime = 0
|
||||
var/access_janitor = 0
|
||||
// var/access_flora = 0
|
||||
var/access_reagent_scanner = 0
|
||||
var/access_remote_door = 0 // Control some blast doors remotely!!
|
||||
var/remote_door_id = ""
|
||||
var/access_status_display = 0
|
||||
var/access_quartermaster = 0
|
||||
var/access_detonate_pda = 0
|
||||
var/access_hydroponics = 0
|
||||
var/charges = 0
|
||||
var/mode = null
|
||||
var/menu
|
||||
var/datum/record/general/active = null //General
|
||||
var/list/listify_cache
|
||||
var/selected_sensor = null // Power Sensor
|
||||
var/message1 // used for status_displays
|
||||
var/message2
|
||||
var/list/stored_data = list()
|
||||
|
||||
/obj/item/cartridge/Destroy()
|
||||
QDEL_NULL(radio)
|
||||
return ..()
|
||||
|
||||
/obj/item/cartridge/engineering
|
||||
name = "\improper Power-ON cartridge"
|
||||
icon_state = "cart-e"
|
||||
access_engine = 1
|
||||
|
||||
/obj/item/cartridge/atmos
|
||||
name = "\improper BreatheDeep cartridge"
|
||||
icon_state = "cart-a"
|
||||
access_atmos = 1
|
||||
|
||||
/obj/item/cartridge/medical
|
||||
name = "\improper Med-U cartridge"
|
||||
icon_state = "cart-m"
|
||||
access_medical = 1
|
||||
|
||||
/obj/item/cartridge/chemistry
|
||||
name = "\improper ChemWhiz cartridge"
|
||||
icon_state = "cart-chem"
|
||||
access_reagent_scanner = 1
|
||||
|
||||
/obj/item/cartridge/security
|
||||
name = "\improper R.O.B.U.S.T. cartridge"
|
||||
icon_state = "cart-s"
|
||||
access_security = 1
|
||||
|
||||
/obj/item/cartridge/security/Initialize()
|
||||
. = ..()
|
||||
radio = new /obj/item/radio/integrated/beepsky(src)
|
||||
|
||||
/obj/item/cartridge/detective
|
||||
name = "\improper D.E.T.E.C.T. cartridge"
|
||||
icon_state = "cart-s"
|
||||
access_security = 1
|
||||
access_medical = 1
|
||||
|
||||
|
||||
/obj/item/cartridge/janitor
|
||||
name = "\improper CustodiPRO cartridge"
|
||||
desc = "The ultimate in clean-room design."
|
||||
icon_state = "cart-j"
|
||||
access_janitor = 1
|
||||
|
||||
/obj/item/cartridge/lawyer
|
||||
name = "\improper P.R.O.V.E. cartridge"
|
||||
icon_state = "cart-s"
|
||||
access_security = 1
|
||||
|
||||
/obj/item/cartridge/clown
|
||||
name = "\improper Honkworks 5.0 cartridge"
|
||||
icon_state = "cart-clown"
|
||||
access_clown = 1
|
||||
charges = 5
|
||||
|
||||
/obj/item/cartridge/mime
|
||||
name = "\improper Gestur-O 1000 cartridge"
|
||||
icon_state = "cart-mi"
|
||||
access_mime = 1
|
||||
charges = 5
|
||||
/*
|
||||
/obj/item/cartridge/botanist
|
||||
name = "Green Thumb v4.20"
|
||||
icon_state = "cart-b"
|
||||
access_flora = 1
|
||||
*/
|
||||
|
||||
/obj/item/cartridge/signal
|
||||
name = "generic signaler cartridge"
|
||||
desc = "A data cartridge with an integrated radio signaler module."
|
||||
|
||||
/obj/item/cartridge/signal/science
|
||||
name = "\improper Signal Ace 2 cartridge"
|
||||
desc = "Complete with integrated radio signaler!"
|
||||
icon_state = "cart-tox"
|
||||
access_reagent_scanner = 1
|
||||
access_atmos = 1
|
||||
|
||||
/obj/item/cartridge/signal/Initialize()
|
||||
. = ..()
|
||||
radio = new /obj/item/radio/integrated/signal(src)
|
||||
|
||||
/obj/item/cartridge/quartermaster
|
||||
name = "\improper Space Parts & Space Vendors cartridge"
|
||||
desc = "Perfect for the Quartermaster on the go!"
|
||||
icon_state = "cart-q"
|
||||
access_quartermaster = 1
|
||||
|
||||
/obj/item/cartridge/quartermaster/Initialize()
|
||||
. = ..()
|
||||
radio = new /obj/item/radio/integrated/mule(src)
|
||||
|
||||
/obj/item/cartridge/head
|
||||
name = "\improper Easy-Record DELUXE"
|
||||
icon_state = "cart-h"
|
||||
access_status_display = 1
|
||||
|
||||
/obj/item/cartridge/hop
|
||||
name = "\improper HumanResources9001 cartridge"
|
||||
icon_state = "cart-h"
|
||||
access_status_display = 1
|
||||
access_quartermaster = 1
|
||||
access_janitor = 1
|
||||
access_security = 1
|
||||
|
||||
/obj/item/cartridge/hop/Initialize()
|
||||
. = ..()
|
||||
radio = new /obj/item/radio/integrated/mule(src)
|
||||
|
||||
/obj/item/cartridge/hos
|
||||
name = "\improper R.O.B.U.S.T. DELUXE"
|
||||
icon_state = "cart-hos"
|
||||
access_status_display = 1
|
||||
access_security = 1
|
||||
|
||||
/obj/item/cartridge/hos/Initialize()
|
||||
. = ..()
|
||||
radio = new /obj/item/radio/integrated/beepsky(src)
|
||||
|
||||
/obj/item/cartridge/ce
|
||||
name = "\improper Power-On DELUXE"
|
||||
icon_state = "cart-ce"
|
||||
access_status_display = 1
|
||||
access_engine = 1
|
||||
access_atmos = 1
|
||||
|
||||
/obj/item/cartridge/cmo
|
||||
name = "\improper Med-U DELUXE"
|
||||
icon_state = "cart-cmo"
|
||||
access_status_display = 1
|
||||
access_reagent_scanner = 1
|
||||
access_medical = 1
|
||||
|
||||
/obj/item/cartridge/rd
|
||||
name = "\improper Signal Ace DELUXE"
|
||||
icon_state = "cart-rd"
|
||||
access_status_display = 1
|
||||
access_reagent_scanner = 1
|
||||
access_atmos = 1
|
||||
|
||||
/obj/item/cartridge/rd/Initialize()
|
||||
. = ..()
|
||||
radio = new /obj/item/radio/integrated/signal(src)
|
||||
|
||||
/obj/item/cartridge/captain
|
||||
name = "\improper Value-PAK cartridge"
|
||||
desc = "Now with 200% more value!"
|
||||
icon_state = "cart-c"
|
||||
access_quartermaster = 1
|
||||
access_janitor = 1
|
||||
access_engine = 1
|
||||
access_security = 1
|
||||
access_medical = 1
|
||||
access_reagent_scanner = 1
|
||||
access_status_display = 1
|
||||
access_atmos = 1
|
||||
|
||||
/obj/item/cartridge/syndicate
|
||||
name = "\improper Detomatix cartridge"
|
||||
icon_state = "cart"
|
||||
access_remote_door = 1
|
||||
access_detonate_pda = 1
|
||||
remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing.
|
||||
charges = 4
|
||||
|
||||
/obj/item/cartridge/proc/post_status(var/command, var/data1, var/data2)
|
||||
|
||||
var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
|
||||
if(!frequency) return
|
||||
|
||||
var/datum/signal/status_signal = new
|
||||
status_signal.source = src
|
||||
status_signal.transmission_method = 1
|
||||
status_signal.data["command"] = command
|
||||
|
||||
switch(command)
|
||||
if("message")
|
||||
status_signal.data["msg1"] = data1
|
||||
status_signal.data["msg2"] = data2
|
||||
if(loc)
|
||||
var/obj/item/PDA = loc
|
||||
var/mob/user = PDA.fingerprintslast
|
||||
if(istype(PDA.loc,/mob/living))
|
||||
name = PDA.loc
|
||||
log_admin("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]")
|
||||
message_admins("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]")
|
||||
|
||||
if("alert")
|
||||
status_signal.data["picture_state"] = data1
|
||||
|
||||
frequency.post_signal(src, status_signal)
|
||||
|
||||
|
||||
/*
|
||||
This generates the nano values of the cart menus.
|
||||
Because we close the UI when we insert a new cart
|
||||
we don't have to worry about null values on items
|
||||
the user can't access. Well, unless they are href hacking.
|
||||
But in that case their UI will just lock up.
|
||||
*/
|
||||
|
||||
|
||||
/obj/item/cartridge/proc/create_NanoUI_values(mob/user as mob)
|
||||
var/values[0]
|
||||
|
||||
/* Signaler (Mode: 40) */
|
||||
|
||||
|
||||
if(istype(radio,/obj/item/radio/integrated/signal) && (mode==40))
|
||||
var/obj/item/radio/integrated/signal/R = radio
|
||||
values["signal_freq"] = format_frequency(R.frequency)
|
||||
values["signal_code"] = R.code
|
||||
|
||||
|
||||
/* Station Display (Mode: 42) */
|
||||
|
||||
if(mode==42)
|
||||
values["message1"] = message1 ? message1 : "(none)"
|
||||
values["message2"] = message2 ? message2 : "(none)"
|
||||
|
||||
|
||||
|
||||
/* Power Monitor (Mode: 43 / 433) */
|
||||
|
||||
if(mode == 43 || mode == 433)
|
||||
var/list/sensors = list()
|
||||
var/obj/machinery/power/sensor/MS = null
|
||||
|
||||
for(var/obj/machinery/power/sensor/S in SSpower.all_sensors)
|
||||
sensors.Add(list(list("name_tag" = S.name_tag)))
|
||||
if(S.name_tag == selected_sensor)
|
||||
MS = S
|
||||
values["power_sensors"] = sensors
|
||||
if(selected_sensor && MS)
|
||||
values["sensor_reading"] = MS.return_reading_data()
|
||||
|
||||
|
||||
/* General Records (Mode: 44 / 441 / 45 / 451) */
|
||||
if(mode == 44 || mode == 441 || mode == 45 || mode ==451)
|
||||
if(istype(active, /datum/record/general) && (active in SSrecords.records))
|
||||
LAZYINITLIST(listify_cache)
|
||||
if(listify_cache["type"] != RECORD_GENERAL)
|
||||
listify_cache["type"] = RECORD_GENERAL
|
||||
listify_cache["data"] = active.Listify()
|
||||
values["general"] = listify_cache["data"]
|
||||
values["general_exists"] = 1
|
||||
|
||||
else
|
||||
values["general_exists"] = 0
|
||||
|
||||
|
||||
|
||||
/* Medical Records (Mode: 44 / 441) */
|
||||
|
||||
if(mode == 44 || mode == 441)
|
||||
var/medData[0]
|
||||
for(var/datum/record/general/R in sortRecord(SSrecords.records))
|
||||
medData += list(list(Name = R.name,"ref" = "\ref[R]"))
|
||||
values["medical_records"] = medData
|
||||
|
||||
if(istype(active, /datum/record/general) && (active in SSrecords.records) && istype(active.medical, /datum/record/medical))
|
||||
LAZYINITLIST(listify_cache)
|
||||
if(listify_cache["type"] != RECORD_MEDICAL)
|
||||
listify_cache["type"] = RECORD_MEDICAL
|
||||
listify_cache["data"] = active.Listify(0)
|
||||
listify_cache["data"] += active.medical.Listify()
|
||||
values["medical"] = listify_cache["data"]
|
||||
values["medical_exists"] = 1
|
||||
else
|
||||
values["medical_exists"] = 0
|
||||
|
||||
/* Security Records (Mode:45 / 451) */
|
||||
|
||||
if(mode == 45 || mode == 451)
|
||||
var/secData[0]
|
||||
for(var/datum/record/general/R in sortRecord(SSrecords.records))
|
||||
secData += list(list(Name = R.name,"ref" = "\ref[R]"))
|
||||
values["security_records"] = secData
|
||||
|
||||
if(istype(active, /datum/record/general) && (active in SSrecords.records) && istype(active.security, /datum/record/security))
|
||||
LAZYINITLIST(listify_cache)
|
||||
if(listify_cache["type"] != RECORD_SECURITY)
|
||||
listify_cache["type"] = RECORD_SECURITY
|
||||
listify_cache["data"] = active.Listify(0)
|
||||
listify_cache["data"] += active.security.Listify()
|
||||
values["security"] = listify_cache["data"]
|
||||
values["security_exists"] = 1
|
||||
else
|
||||
values["security_exists"] = 0
|
||||
|
||||
/* Security Bot Control (Mode: 46) */
|
||||
|
||||
if(mode==46)
|
||||
var/botsData[0]
|
||||
var/beepskyData[0]
|
||||
if(istype(radio,/obj/item/radio/integrated/beepsky))
|
||||
var/obj/item/radio/integrated/beepsky/SC = radio
|
||||
beepskyData["active"] = SC.active
|
||||
if(SC.active && !isnull(SC.botstatus))
|
||||
var/area/loca = SC.botstatus["loca"]
|
||||
var/loca_name = sanitize(loca.name)
|
||||
beepskyData["botstatus"] = list("loca" = loca_name, "mode" = SC.botstatus["mode"])
|
||||
else
|
||||
beepskyData["botstatus"] = list("loca" = null, "mode" = -1)
|
||||
var/botsCount=0
|
||||
if(SC.botlist && SC.botlist.len)
|
||||
for(var/mob/living/bot/B in SC.botlist)
|
||||
botsCount++
|
||||
if(B.loc)
|
||||
botsData[++botsData.len] = list("Name" = sanitize(B.name), "Location" = sanitize(B.loc.loc.name), "ref" = "\ref[B]")
|
||||
|
||||
if(!botsData.len)
|
||||
botsData[++botsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null)
|
||||
|
||||
beepskyData["bots"] = botsData
|
||||
beepskyData["count"] = botsCount
|
||||
|
||||
else
|
||||
beepskyData["active"] = 0
|
||||
botsData[++botsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null)
|
||||
beepskyData["botstatus"] = list("loca" = null, "mode" = null)
|
||||
beepskyData["bots"] = botsData
|
||||
beepskyData["count"] = 0
|
||||
|
||||
values["beepsky"] = beepskyData
|
||||
|
||||
|
||||
/* MULEBOT Control (Mode: 48) */
|
||||
|
||||
if(mode==48)
|
||||
var/muleData[0]
|
||||
var/mulebotsData[0]
|
||||
if(istype(radio,/obj/item/radio/integrated/mule))
|
||||
var/obj/item/radio/integrated/mule/QC = radio
|
||||
muleData["active"] = QC.active
|
||||
if(QC.active && !isnull(QC.botstatus))
|
||||
var/area/loca = QC.botstatus["loca"]
|
||||
var/loca_name = sanitize(loca.name)
|
||||
muleData["botstatus"] = list("loca" = loca_name, "mode" = QC.botstatus["mode"],"home"=QC.botstatus["home"],"powr" = QC.botstatus["powr"],"retn" =QC.botstatus["retn"], "pick"=QC.botstatus["pick"], "load" = QC.botstatus["load"], "dest" = sanitize(QC.botstatus["dest"]))
|
||||
|
||||
else
|
||||
muleData["botstatus"] = list("loca" = null, "mode" = -1,"home"=null,"powr" = null,"retn" =null, "pick"=null, "load" = null, "dest" = null)
|
||||
|
||||
|
||||
var/mulebotsCount=0
|
||||
for(var/obj/machinery/bot/B in QC.botlist)
|
||||
mulebotsCount++
|
||||
if(B.loc)
|
||||
mulebotsData[++mulebotsData.len] = list("Name" = sanitize(B.name), "Location" = sanitize(B.loc.loc.name), "ref" = "\ref[B]")
|
||||
|
||||
if(!mulebotsData.len)
|
||||
mulebotsData[++mulebotsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null)
|
||||
|
||||
muleData["bots"] = mulebotsData
|
||||
muleData["count"] = mulebotsCount
|
||||
|
||||
else
|
||||
muleData["botstatus"] = list("loca" = null, "mode" = -1,"home"=null,"powr" = null,"retn" =null, "pick"=null, "load" = null, "dest" = null)
|
||||
muleData["active"] = 0
|
||||
mulebotsData[++mulebotsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null)
|
||||
muleData["bots"] = mulebotsData
|
||||
muleData["count"] = 0
|
||||
|
||||
values["mulebot"] = muleData
|
||||
|
||||
|
||||
|
||||
/* Supply Shuttle Requests Menu (Mode: 47) */
|
||||
|
||||
if(mode==47)
|
||||
var/supplyData[0]
|
||||
var/datum/shuttle/autodock/ferry/supply/shuttle = SScargo.shuttle
|
||||
if (shuttle)
|
||||
supplyData["shuttle_moving"] = shuttle.has_arrive_time()
|
||||
supplyData["shuttle_eta"] = shuttle.eta_minutes()
|
||||
supplyData["shuttle_loc"] = shuttle.at_station() ? "Station" : "Dock"
|
||||
var/list/approved_orders = SScargo.get_orders_by_status("approved",1)
|
||||
supplyData["approved"] = approved_orders
|
||||
supplyData["approved_count"] = approved_orders.len
|
||||
|
||||
var/list/requested_orders = SScargo.get_orders_by_status("submitted",1)
|
||||
supplyData["requests"] = requested_orders
|
||||
supplyData["requests_count"] = requested_orders.len
|
||||
|
||||
values["supply"] = supplyData
|
||||
|
||||
|
||||
|
||||
/* Janitor Supplies Locator (Mode: 49) */
|
||||
if(mode==49)
|
||||
var/JaniData[0]
|
||||
var/turf/cl = get_turf(src)
|
||||
|
||||
if(cl)
|
||||
JaniData["user_loc"] = list("x" = cl.x, "y" = cl.y)
|
||||
else
|
||||
JaniData["user_loc"] = list("x" = 0, "y" = 0)
|
||||
var/MopData[0]
|
||||
for(var/obj/item/mop/M in global.janitorial_supplies)
|
||||
var/turf/ml = get_turf(M)
|
||||
if(ml)
|
||||
if(ml.z != cl.z)
|
||||
continue
|
||||
var/direction = get_dir(src, M)
|
||||
MopData[++MopData.len] = list ("x" = ml.x, "y" = ml.y, "dir" = uppertext(dir2text(direction)), "status" = M.reagents.total_volume ? "Wet" : "Dry")
|
||||
|
||||
if(!MopData.len)
|
||||
MopData[++MopData.len] = list("x" = 0, "y" = 0, dir=null, status = null)
|
||||
|
||||
var/BucketData[0]
|
||||
for(var/obj/structure/mopbucket/B in global.janitorial_supplies)
|
||||
var/turf/bl = get_turf(B)
|
||||
if(bl)
|
||||
if(bl.z != cl.z)
|
||||
continue
|
||||
var/direction = get_dir(src,B)
|
||||
BucketData[++BucketData.len] = list ("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.reagents.total_volume/100)
|
||||
|
||||
if(!BucketData.len)
|
||||
BucketData[++BucketData.len] = list("x" = 0, "y" = 0, dir=null, status = null)
|
||||
|
||||
var/CbotData[0]
|
||||
for(var/mob/living/bot/cleanbot/B in global.janitorial_supplies)
|
||||
var/turf/bl = get_turf(B)
|
||||
if(bl)
|
||||
if(bl.z != cl.z)
|
||||
continue
|
||||
var/direction = get_dir(src,B)
|
||||
CbotData[++CbotData.len] = list("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.on ? "Online" : "Offline")
|
||||
|
||||
if(!CbotData.len)
|
||||
CbotData[++CbotData.len] = list("x" = 0, "y" = 0, dir=null, status = null)
|
||||
var/CartData[0]
|
||||
for(var/obj/structure/janitorialcart/B in global.janitorial_supplies)
|
||||
var/turf/bl = get_turf(B)
|
||||
if(bl)
|
||||
if(bl.z != cl.z)
|
||||
continue
|
||||
var/direction = get_dir(src,B)
|
||||
CartData[++CartData.len] = list("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.get_short_status())
|
||||
if(!CartData.len)
|
||||
CartData[++CartData.len] = list("x" = 0, "y" = 0, dir=null, status = null)
|
||||
|
||||
JaniData["mops"] = MopData
|
||||
JaniData["buckets"] = BucketData
|
||||
JaniData["cleanbots"] = CbotData
|
||||
JaniData["carts"] = CartData
|
||||
values["janitor"] = JaniData
|
||||
|
||||
return values
|
||||
|
||||
|
||||
/obj/item/cartridge/Topic(href, href_list)
|
||||
..()
|
||||
|
||||
if (!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
|
||||
usr.unset_machine()
|
||||
usr << browse(null, "window=pda")
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
switch(href_list["choice"])
|
||||
if("Medical Records")
|
||||
var/datum/record/general/R = locate(href_list["target"])
|
||||
loc:mode = 441
|
||||
mode = 441
|
||||
if ((R in SSrecords.records) && istype(R))
|
||||
active = R
|
||||
|
||||
if("Security Records")
|
||||
var/datum/record/general/R = locate(href_list["target"])
|
||||
loc:mode = 451
|
||||
mode = 451
|
||||
if ((R in SSrecords.records) && istype(R))
|
||||
active = R
|
||||
|
||||
if("Send Signal")
|
||||
spawn( 0 )
|
||||
radio:send_signal("ACTIVATE")
|
||||
return
|
||||
|
||||
if("Signal Frequency")
|
||||
var/new_frequency = sanitize_frequency(radio:frequency + text2num(href_list["sfreq"]))
|
||||
radio:set_frequency(new_frequency)
|
||||
|
||||
if("Signal Code")
|
||||
radio:code += text2num(href_list["scode"])
|
||||
radio:code = round(radio:code)
|
||||
radio:code = min(100, radio:code)
|
||||
radio:code = max(1, radio:code)
|
||||
|
||||
if("Status")
|
||||
switch(href_list["statdisp"])
|
||||
if("message")
|
||||
post_status("message", message1, message2)
|
||||
if("alert")
|
||||
post_status("alert", href_list["alert"])
|
||||
if("setmsg1")
|
||||
message1 = reject_bad_text(sanitize(input("Line 1", "Enter Message Text", message1) as text|null, 40), 40)
|
||||
updateSelfDialog()
|
||||
if("setmsg2")
|
||||
message2 = reject_bad_text(sanitize(input("Line 2", "Enter Message Text", message2) as text|null, 40), 40)
|
||||
updateSelfDialog()
|
||||
else
|
||||
post_status(href_list["statdisp"])
|
||||
|
||||
if("Power Select")
|
||||
selected_sensor = href_list["target"]
|
||||
loc:mode = 433
|
||||
mode = 433
|
||||
if("Power Clear")
|
||||
selected_sensor = null
|
||||
loc:mode = 43
|
||||
mode = 43
|
||||
|
||||
|
||||
return 1
|
||||
@@ -1,16 +0,0 @@
|
||||
var/list/chatrooms = list()
|
||||
|
||||
/datum/chatroom
|
||||
var/name = "Generic Chatroom"
|
||||
var/list/logged_in = list()
|
||||
var/list/logs = list() // chat logs
|
||||
var/list/banned = list() // banned users
|
||||
var/list/whitelist = list() // whitelisted users
|
||||
var/list/muted = list()
|
||||
var/topic = "" // topic message for the chatroom
|
||||
var/password = "" // blank for no password.
|
||||
var/operator = "" // name of the operator
|
||||
|
||||
/datum/chatroom/proc/attempt_connect(var/obj/item/device/pda/device, var/obj/password)
|
||||
if(!device)
|
||||
return
|
||||
@@ -3,14 +3,14 @@
|
||||
desc = "An electronic radio system."
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "power_mod"
|
||||
var/obj/item/device/pda/hostpda = null
|
||||
var/obj/item/modular_computer/hostpda = null
|
||||
|
||||
var/on = 0 //Are we currently active??
|
||||
var/menu_message = ""
|
||||
|
||||
/obj/item/radio/integrated/Initialize()
|
||||
. = ..()
|
||||
if (istype(loc.loc, /obj/item/device/pda))
|
||||
if (istype(loc.loc, /obj/item/modular_computer))
|
||||
hostpda = loc.loc
|
||||
|
||||
/obj/item/radio/integrated/Destroy()
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
/obj/item/radio/integrated/beepsky/Topic(href, href_list)
|
||||
..()
|
||||
var/obj/item/device/pda/PDA = src.hostpda
|
||||
var/obj/item/modular_computer/PDA = src.hostpda
|
||||
|
||||
switch(href_list["op"])
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
var/active = 0
|
||||
var/datum/uplink_category/category = 0 // The current category we are in
|
||||
var/exploit_id // Id of the current exploit record we are viewing
|
||||
var/pda_code = ""
|
||||
|
||||
|
||||
// The hidden uplink MUST be inside an obj/item's contents.
|
||||
|
||||
@@ -50,7 +50,6 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra
|
||||
|
||||
items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/soap, 5, 100)
|
||||
items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/concealed_cane, 50, 10)
|
||||
items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/detomatix, 20, 10)
|
||||
items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/parapen)
|
||||
items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/cigarette_kit)
|
||||
|
||||
|
||||
@@ -127,6 +127,7 @@ var/const/NO_EMAG_ACT = -50
|
||||
var/assignment = null //can be alt title or the actual job
|
||||
var/rank = null //actual job
|
||||
var/dorm = 0 // determines if this ID has claimed a dorm already
|
||||
var/chat_registered = FALSE // registration for NTNET chat
|
||||
|
||||
/obj/item/card/id/Destroy()
|
||||
mob = null
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
/obj/item/clothing/glasses/hud/security,
|
||||
/obj/item/device/flashlight/maglight,
|
||||
/obj/item/device/flashlight/flare,
|
||||
/obj/item/device/pda,
|
||||
/obj/item/modular_computer/handheld,
|
||||
/obj/item/device/radio/headset,
|
||||
/obj/item/device/hailer,
|
||||
/obj/item/device/megaphone,
|
||||
@@ -222,7 +222,7 @@
|
||||
/obj/item/ammo_magazine,
|
||||
/obj/item/melee/baton,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/device/pda,
|
||||
/obj/item/modular_computer/handheld,
|
||||
/obj/item/device/radio/headset,
|
||||
/obj/item/melee,
|
||||
/obj/item/shield/energy,
|
||||
@@ -390,7 +390,7 @@
|
||||
/obj/item/ammo_magazine,
|
||||
/obj/item/melee/baton,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/device/pda,
|
||||
/obj/item/modular_computer/handheld,
|
||||
/obj/item/device/radio/headset,
|
||||
/obj/item/melee,
|
||||
/obj/item/crowbar,
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* Prescription glasses and drinking glass boxes,
|
||||
* Condiment bottle and silly cup boxes,
|
||||
* Donkpocket and monkeycube boxes,
|
||||
* ID and security PDA cart boxes,
|
||||
* ID boxes,
|
||||
* Handcuff, mousetrap, and pillbottle boxes,
|
||||
* Snap-pops,
|
||||
* Replacement light boxes.
|
||||
@@ -471,12 +471,6 @@
|
||||
icon_state = "id"
|
||||
starts_with = list(/obj/item/card/id = 7)
|
||||
|
||||
/obj/item/storage/box/seccarts
|
||||
name = "box of spare R.O.B.U.S.T. Cartridges"
|
||||
desc = "A box full of R.O.B.U.S.T. Cartridges, used by Security."
|
||||
icon_state = "pda"
|
||||
starts_with = list(/obj/item/cartridge/security = 7)
|
||||
|
||||
/obj/item/storage/box/handcuffs
|
||||
name = "box of spare handcuffs"
|
||||
desc = "A box full of handcuffs."
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
var/integrity = 3
|
||||
var/volume = 70
|
||||
var/manipulated_by = null //Used by _onclick/hud/screen_objects.dm internals to determine if someone has messed with our tank or not.
|
||||
//If they have and we haven't scanned it with the PDA or gas analyzer then we might just breath whatever they put in it.
|
||||
//If they have and we haven't scanned it with a computer or handheld gas analyzer then we might just breath whatever they put in it.
|
||||
/obj/item/tank/Initialize()
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -523,7 +523,6 @@
|
||||
/obj/machinery/vending/coffee = 1,
|
||||
/obj/machinery/vending/snack = 1,
|
||||
/obj/machinery/vending/cola = 1,
|
||||
/obj/machinery/vending/cart = 1.5,
|
||||
/obj/machinery/vending/cigarette = 1,
|
||||
/obj/machinery/vending/medical = 1.2,
|
||||
/obj/machinery/vending/phoronresearch = 0.7,
|
||||
@@ -568,16 +567,6 @@
|
||||
|
||||
V.scan_id &= scan_id
|
||||
|
||||
/obj/random/pda_cart/item_to_spawn()
|
||||
var/list/options = typesof(/obj/item/cartridge)
|
||||
var/type = pick(options)
|
||||
|
||||
//reroll syndicate cartridge once to make it less common
|
||||
if (type == /obj/item/cartridge/syndicate)
|
||||
type = pick(options)
|
||||
|
||||
return type
|
||||
|
||||
/obj/random/glowstick
|
||||
name = "random glowstick"
|
||||
desc = "This is a random glowstick."
|
||||
@@ -897,7 +886,6 @@
|
||||
/obj/random/softcap = 0.5,
|
||||
/obj/random/junk = 0.4,
|
||||
/obj/random/medical = 0.4,
|
||||
/obj/random/pda_cart = 0.5,
|
||||
/obj/random/powercell = 0.8,
|
||||
/obj/random/smalltank = 0.5,
|
||||
/obj/random/soap = 0.5,
|
||||
|
||||
@@ -68,7 +68,6 @@
|
||||
/obj/structure/closet/jcloset/fill()
|
||||
new /obj/item/clothing/under/rank/janitor(src)
|
||||
new /obj/item/device/radio/headset/headset_service(src)
|
||||
new /obj/item/cartridge/janitor(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/head/softcap/janitor(src)
|
||||
new /obj/item/clothing/head/bandana/janitor(src)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/head/softcap/cargo(src)
|
||||
new /obj/item/clothing/head/bandana/cargo(src)
|
||||
new /obj/item/modular_computer/tablet/preset/custom_loadout/advanced/cargo_delivery(src)
|
||||
new /obj/item/modular_computer/handheld/custom_loadout/advanced/cargo_delivery(src)
|
||||
new /obj/item/export_scanner(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/quartermaster
|
||||
@@ -37,13 +37,12 @@
|
||||
new /obj/item/device/radio/headset/qm(src)
|
||||
new /obj/item/device/radio/headset/qm/alt(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/cartridge/quartermaster(src)
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/head/softcap/cargo(src)
|
||||
new /obj/item/clothing/head/bandana/cargo(src)
|
||||
new /obj/item/modular_computer/tablet/preset/custom_loadout/advanced/cargo_delivery(src)
|
||||
new /obj/item/modular_computer/handheld/custom_loadout/advanced/cargo_delivery(src)
|
||||
new /obj/item/export_scanner(src)
|
||||
new /obj/item/device/orbital_dropper/drill(src)
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
new /obj/item/clothing/gloves/yellow/specialu(src)
|
||||
new /obj/item/clothing/gloves/yellow/specialt(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/cartridge/ce(src)
|
||||
new /obj/item/device/radio/headset/heads/ce(src)
|
||||
new /obj/item/device/radio/headset/heads/ce/alt(src)
|
||||
new /obj/item/storage/toolbox/mechanical(src)
|
||||
@@ -129,7 +128,6 @@
|
||||
new /obj/item/device/radio/headset/headset_eng/alt(src)
|
||||
new /obj/item/clothing/suit/storage/hazardvest(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/cartridge/engineering(src)
|
||||
new /obj/item/taperoll/engineering(src)
|
||||
new /obj/item/clothing/accessory/storage/overalls/engineer(src)
|
||||
|
||||
@@ -160,7 +158,6 @@
|
||||
new /obj/item/device/radio/headset/headset_eng/alt(src)
|
||||
new /obj/item/clothing/suit/storage/hazardvest/blue/atmos(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/cartridge/atmos(src)
|
||||
new /obj/item/taperoll/engineering(src)
|
||||
new /obj/item/clothing/accessory/storage/overalls/engineer(src)
|
||||
new /obj/item/rfd/piping(src)
|
||||
|
||||
@@ -108,7 +108,6 @@
|
||||
new /obj/item/clothing/head/bio_hood/cmo(src)
|
||||
new /obj/item/clothing/shoes/medical(src)
|
||||
new /obj/item/clothing/under/rank/chief_medical_officer(src)
|
||||
new /obj/item/cartridge/cmo(src)
|
||||
new /obj/item/clothing/gloves/latex/nitrile(src)
|
||||
new /obj/item/device/radio/headset/heads/cmo(src)
|
||||
new /obj/item/device/radio/headset/heads/cmo/alt(src)
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
new /obj/item/clothing/under/rank/research_director/rdalt(src)
|
||||
new /obj/item/clothing/under/rank/research_director/dress_rd(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/cartridge/rd(src)
|
||||
new /obj/item/clothing/shoes/science(src)
|
||||
new /obj/item/clothing/shoes/laceup/brown(src)
|
||||
new /obj/item/clothing/gloves/latex/nitrile(src)
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
//Tools
|
||||
new /obj/item/device/radio/headset/heads/captain(src)
|
||||
new /obj/item/device/radio/headset/heads/captain/alt(src)
|
||||
new /obj/item/cartridge/captain(src)
|
||||
new /obj/item/gun/energy/disruptorpistol(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/melee/telebaton(src)
|
||||
@@ -81,7 +80,6 @@
|
||||
new /obj/item/clothing/suit/storage/vest(src)
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
//Tools
|
||||
new /obj/item/cartridge/hop(src)
|
||||
new /obj/item/device/radio/headset/heads/hop(src)
|
||||
new /obj/item/device/radio/headset/heads/hop/alt(src)
|
||||
new /obj/item/gun/energy/disruptorpistol(src)
|
||||
@@ -141,7 +139,6 @@
|
||||
new /obj/item/clothing/accessory/badge/hos(src)
|
||||
new /obj/item/clothing/gloves/black_leather(src)
|
||||
//Tools
|
||||
new /obj/item/cartridge/hos(src)
|
||||
new /obj/item/device/radio/headset/heads/hos(src)
|
||||
new /obj/item/device/radio/headset/heads/hos/alt(src)
|
||||
new /obj/item/storage/box/tranquilizer(src)
|
||||
@@ -227,7 +224,6 @@
|
||||
new /obj/item/clothing/accessory/badge/warden(src)
|
||||
new /obj/item/clothing/gloves/black_leather(src)
|
||||
//Tools
|
||||
new /obj/item/cartridge/security(src)
|
||||
new /obj/item/device/radio/headset/headset_warden(src)
|
||||
new /obj/item/device/radio/headset/headset_warden/alt(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud/aviator(src)
|
||||
|
||||
@@ -97,7 +97,6 @@
|
||||
new /obj/item/clothing/under/rank/dress/officer(src)
|
||||
new /obj/item/clothing/head/dress/officer(src)
|
||||
new /obj/item/clothing/suit/storage/vest(src)
|
||||
new /obj/item/cartridge/captain(src)
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
new /obj/item/clothing/shoes/laceup(src)
|
||||
new /obj/item/device/radio/headset/heads/captain(src)
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
new /obj/item/pinpointer/nukeop(src)
|
||||
new /obj/item/pinpointer/nukeop(src)
|
||||
new /obj/item/pinpointer/nukeop(src)
|
||||
new /obj/item/device/pda/syndicate(src)
|
||||
new /obj/item/modular_computer/handheld/pda/syndicate(src)
|
||||
var/obj/item/device/radio/uplink/U = new(src)
|
||||
U.hidden_uplink.uses = 40
|
||||
return
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
else
|
||||
bst.equip_to_slot_or_del(new /obj/item/storage/box/ids(bst.back), slot_in_backpack)
|
||||
bst.equip_to_slot_or_del(new /obj/item/device/t_scanner(bst.back), slot_in_backpack)
|
||||
bst.equip_to_slot_or_del(new /obj/item/device/pda/captain/bst(bst.back), slot_in_backpack)
|
||||
bst.equip_to_slot_or_del(new /obj/item/modular_computer/handheld/pda/command/bst(bst.back), slot_in_backpack)
|
||||
bst.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(bst.back), slot_in_backpack)
|
||||
bst.equip_to_slot_or_del(new /obj/item/research(bst.back), slot_in_backpack)
|
||||
|
||||
@@ -499,19 +499,5 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/device/pda/captain/bst
|
||||
hidden = 1
|
||||
message_silent = 1
|
||||
// ttone = "DO SOMETHING HERE"
|
||||
|
||||
/obj/item/device/pda/captain/bst/attack_hand()
|
||||
if(!usr)
|
||||
return
|
||||
if(!istype(usr, /mob/living/carbon/human/bst))
|
||||
to_chat(usr, SPAN_ALERT("Your hand seems to go right through the [src]. It's like it doesn't exist."))
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/bst/restrained()
|
||||
return 0
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
/datum/export/radio
|
||||
cost = 5
|
||||
unit_name = "radio"
|
||||
export_types = list(/obj/item/radio)
|
||||
export_types = list(/obj/item/device/radio)
|
||||
|
||||
|
||||
/datum/export/rfd_construction
|
||||
|
||||
@@ -178,10 +178,6 @@ STOCK_ITEM_UNCOMMON(atmosfiresuit, 2)
|
||||
new /obj/item/clothing/head/hardhat/red/atmos(L)
|
||||
new /obj/item/clothing/suit/fire/atmos(L)
|
||||
|
||||
STOCK_ITEM_UNCOMMON(pdacart, 3)
|
||||
for(var/i in 1 to rand(1, 3))
|
||||
new /obj/random/pda_cart(L)
|
||||
|
||||
STOCK_ITEM_UNCOMMON(debugger, 2)
|
||||
new /obj/item/device/debugger(L)
|
||||
|
||||
@@ -367,7 +363,7 @@ STOCK_ITEM_UNCOMMON(apiary, 1)
|
||||
new /obj/item/honey_frame(L)
|
||||
|
||||
STOCK_ITEM_UNCOMMON(wristbound, 0.5)
|
||||
var/obj/item/modular_computer/wristbound/preset/P = pick(subtypesof(/obj/item/modular_computer/wristbound/preset))
|
||||
var/obj/item/modular_computer/handheld/wristbound/preset/P = pick(subtypesof(/obj/item/modular_computer/handheld/wristbound/preset))
|
||||
new P(L)
|
||||
|
||||
STOCK_ITEM_UNCOMMON(pops, 0.5)
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
//CCIAA's PDA.
|
||||
/obj/item/device/pda/central
|
||||
default_cartridge = /obj/item/cartridge/captain
|
||||
icon_state = "pda-h"
|
||||
detonate = 0
|
||||
|
||||
//CCIAA's tape recorder
|
||||
/obj/item/device/taperecorder/cciaa
|
||||
w_class = ITEMSIZE_TINY
|
||||
|
||||
@@ -540,9 +540,6 @@ var/list/asset_datums = list()
|
||||
/datum/asset/spritesheet/vending/cola
|
||||
v_type = /obj/machinery/vending/cola
|
||||
|
||||
/datum/asset/spritesheet/vending/cart
|
||||
v_type = /obj/machinery/vending/cart
|
||||
|
||||
/datum/asset/spritesheet/vending/cigarette
|
||||
v_type = /obj/machinery/vending/cigarette
|
||||
|
||||
|
||||
@@ -11,12 +11,14 @@
|
||||
S["all_underwear_metadata"] >> pref.all_underwear_metadata
|
||||
S["backbag"] >> pref.backbag
|
||||
S["backbag_style"] >> pref.backbag_style
|
||||
S["pda_choice"] >> pref.pda_choice
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S)
|
||||
S["all_underwear"] << pref.all_underwear
|
||||
S["all_underwear_metadata"] << pref.all_underwear_metadata
|
||||
S["backbag"] << pref.backbag
|
||||
S["backbag_style"] << pref.backbag_style
|
||||
S["pda_choice"] << pref.pda_choice
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/gather_load_query()
|
||||
return list(
|
||||
@@ -25,7 +27,8 @@
|
||||
"all_underwear",
|
||||
"all_underwear_metadata",
|
||||
"backbag",
|
||||
"backbag_style"
|
||||
"backbag_style",
|
||||
"pda_choice"
|
||||
),
|
||||
"args" = list("id")
|
||||
)
|
||||
@@ -41,6 +44,7 @@
|
||||
"all_underwear_metadata",
|
||||
"backbag",
|
||||
"backbag_style",
|
||||
"pda_choice",
|
||||
"id" = 1,
|
||||
"ckey" = 1
|
||||
)
|
||||
@@ -52,6 +56,7 @@
|
||||
"all_underwear_metadata" = json_encode(pref.all_underwear_metadata),
|
||||
"backbag" = pref.backbag,
|
||||
"backbag_style" = pref.backbag_style,
|
||||
"pda_choice" = pref.pda_choice,
|
||||
"id" = pref.current_character,
|
||||
"ckey" = PREF_CLIENT_CKEY
|
||||
)
|
||||
@@ -60,6 +65,7 @@
|
||||
if (sql_load)
|
||||
pref.backbag = text2num(pref.backbag)
|
||||
pref.backbag_style = text2num(pref.backbag_style)
|
||||
pref.pda_choice = text2num(pref.pda_choice)
|
||||
if(istext(pref.all_underwear))
|
||||
var/before = pref.all_underwear
|
||||
try
|
||||
@@ -102,6 +108,7 @@
|
||||
|
||||
pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag))
|
||||
pref.backbag_style = sanitize_integer(pref.backbag_style, 1, backbagstyles.len, initial(pref.backbag_style))
|
||||
pref.pda_choice = sanitize_integer(pref.pda_choice, 1, pdalist.len, initial(pref.pda_choice))
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/content(var/mob/user)
|
||||
. = list()
|
||||
@@ -119,6 +126,7 @@
|
||||
|
||||
. += "Backpack Type: <a href='?src=\ref[src];change_backpack=1'><b>[backbaglist[pref.backbag]]</b></a><br>"
|
||||
. += "Backpack Style: <a href='?src=\ref[src];change_backpack_style=1'><b>[backbagstyles[pref.backbag_style]]</b></a><br>"
|
||||
. += "PDA Type: <a href='?src=\ref[src];change_pda=1'><b>[pdalist[pref.pda_choice]]</b></a><br>"
|
||||
|
||||
return jointext(., null)
|
||||
|
||||
@@ -151,6 +159,12 @@
|
||||
pref.backbag_style = backbagstyles.Find(new_backbag)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["change_pda"])
|
||||
var/new_pda = input(user, "Choose your character's PDA type:", "Character Preference", pdalist[pref.pda_choice]) as null|anything in pdalist
|
||||
if(!isnull(new_pda) && CanUseTopic(user))
|
||||
pref.pda_choice = pdalist.Find(new_pda)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["change_underwear"])
|
||||
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[href_list["change_underwear"]]
|
||||
if(!UWC)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/datum/gear/computer
|
||||
display_name = "tablet"
|
||||
path = /obj/item/modular_computer/tablet/preset/custom_loadout/cheap
|
||||
path = /obj/item/modular_computer/handheld/custom_loadout/cheap
|
||||
sort_category = "Modular Computers"
|
||||
cost = 2
|
||||
|
||||
@@ -9,66 +9,66 @@
|
||||
path = /obj/item/modular_computer/laptop/preset
|
||||
cost = 3
|
||||
|
||||
/datum/gear/computer/wristbound
|
||||
/datum/gear/computer/handheld/wristbound
|
||||
display_name = "wristbound computer"
|
||||
path = /obj/item/modular_computer/wristbound/preset/cheap/generic
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/cheap/generic
|
||||
|
||||
/datum/gear/computer/wristbound/cargo
|
||||
/datum/gear/computer/handheld/wristbound/cargo
|
||||
display_name = "wristbound computer (Cargo)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/cargo
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/cargo
|
||||
allowed_roles = list("Cargo Technician", "Shaft Miner", "Quartermaster")
|
||||
|
||||
/datum/gear/computer/wristbound/engineering
|
||||
/datum/gear/computer/handheld/wristbound/engineering
|
||||
display_name = "wristbound computer (Engineering)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/engineering
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/engineering
|
||||
allowed_roles = list("Station Engineer", "Engineering Apprentince", "Atmospheric Technician", "Engineering Apprentice")
|
||||
|
||||
/datum/gear/computer/wristbound/medical
|
||||
/datum/gear/computer/handheld/wristbound/medical
|
||||
display_name = "wristbound computer (Medical)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/medical
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/medical
|
||||
allowed_roles = list("Physician", "Surgeon", "Medical Intern", "Pharmacist", "Psychiatrist", "Emergency Medical Technician")
|
||||
|
||||
/datum/gear/computer/wristbound/security
|
||||
/datum/gear/computer/handheld/wristbound/security
|
||||
display_name = "wristbound computer (Security)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/security
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/security
|
||||
allowed_roles = list("Security Officer", "Warden", "Security Cadet")
|
||||
|
||||
/datum/gear/computer/wristbound/security/investigations
|
||||
/datum/gear/computer/handheld/wristbound/security/investigations
|
||||
display_name = "wristbound computer (Security Investigations)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/security/investigations
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/security/investigations
|
||||
allowed_roles = list("Detective", "Forensic Technician")
|
||||
|
||||
/datum/gear/computer/wristbound/security/research
|
||||
/datum/gear/computer/handheld/wristbound/security/research
|
||||
display_name = "wristbound computer (Research)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/research
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/research
|
||||
allowed_roles = list("Scientist", "Lab Assistant", "Roboticist", "Xenobiologist")
|
||||
|
||||
/datum/gear/computer/wristbound/ce
|
||||
/datum/gear/computer/handheld/wristbound/ce
|
||||
display_name = "wristbound computer (Chief Engineer)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/command/ce
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/command/ce
|
||||
allowed_roles = list("Chief Engineer")
|
||||
|
||||
/datum/gear/computer/wristbound/rd
|
||||
/datum/gear/computer/handheld/wristbound/rd
|
||||
display_name = "wristbound computer (Research Director)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/command/rd
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/command/rd
|
||||
allowed_roles = list("Research Director")
|
||||
|
||||
/datum/gear/computer/wristbound/cmo
|
||||
/datum/gear/computer/handheld/wristbound/cmo
|
||||
display_name = "wristbound computer (Chief Medical Officer)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/command/cmo
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/command/cmo
|
||||
allowed_roles = list("Chief Medical Officer")
|
||||
|
||||
/datum/gear/computer/wristbound/hop
|
||||
/datum/gear/computer/handheld/wristbound/hop
|
||||
display_name = "wristbound computer (Head of Personnel)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/command/hop
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/command/hop
|
||||
allowed_roles = list("Head of Personnel")
|
||||
|
||||
/datum/gear/computer/wristbound/hos
|
||||
/datum/gear/computer/handheld/wristbound/hos
|
||||
display_name = "wristbound computer (Head of Security)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/command/hos
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/command/hos
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/computer/wristbound/captain
|
||||
/datum/gear/computer/handheld/wristbound/captain
|
||||
display_name = "wristbound computer (Captain)"
|
||||
path = /obj/item/modular_computer/wristbound/preset/advanced/command/captain
|
||||
path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/command/captain
|
||||
allowed_roles = list("Captain")
|
||||
|
||||
@@ -42,6 +42,7 @@ datum/preferences
|
||||
var/b_type = "A+" //blood type (not-chooseable)
|
||||
var/backbag = 2 //backpack type
|
||||
var/backbag_style = 1
|
||||
var/pda_choice = 2
|
||||
var/h_style = "Bald" //Hair type
|
||||
var/hair_colour = "#000000" //Hair colour hex value, for SQL loading
|
||||
var/r_hair = 0 //Hair color
|
||||
@@ -469,6 +470,11 @@ datum/preferences
|
||||
character.backbag = backbag
|
||||
character.backbag_style = backbag_style
|
||||
|
||||
if(pda_choice > 8 || pda_choice < 1)
|
||||
pda_choice = 2
|
||||
|
||||
character.pda_choice = pda_choice
|
||||
|
||||
if(icon_updates)
|
||||
character.force_update_limbs()
|
||||
character.update_mutations(0)
|
||||
|
||||
@@ -219,12 +219,12 @@
|
||||
if(!has_title)
|
||||
continue
|
||||
|
||||
// ID cards and PDAs are applied directly to the existing object rather than spawned fresh.
|
||||
// ID cards and MCs are applied directly to the existing object rather than spawned fresh.
|
||||
var/obj/item/existing_item
|
||||
if(citem.item_path == /obj/item/card/id)
|
||||
existing_item = locate(/obj/item/card/id) in M.get_contents() //TODO: Improve this ?
|
||||
else if(citem.item_path == /obj/item/device/pda)
|
||||
existing_item = locate(/obj/item/device/pda) in M.contents
|
||||
else if(citem.item_path == /obj/item/modular_computer)
|
||||
existing_item = locate(/obj/item/modular_computer) in M.contents
|
||||
|
||||
// Spawn and equip the item.
|
||||
if(existing_item)
|
||||
|
||||
@@ -137,7 +137,6 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 10),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 75, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_GARDENER = 20)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Clogged Vents", /datum/event/vent_clog, 55),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "False Alarm", /datum/event/false_alarm, 100),
|
||||
|
||||
@@ -53,7 +53,6 @@ var/list/event_last_fired = list()
|
||||
possibleEvents[/datum/event/economic_event] = 300
|
||||
possibleEvents[/datum/event/mundane_news] = 300
|
||||
|
||||
possibleEvents[/datum/event/pda_spam] = max(min(25, player_list.len) * 4, 200)
|
||||
possibleEvents[/datum/event/money_lotto] = max(min(5, player_list.len), 50)
|
||||
if(account_hack_attempted)
|
||||
possibleEvents[/datum/event/money_hacker] = max(min(25, player_list.len) * 4, 200)
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
/datum/event/pda_spam
|
||||
endWhen = 36000
|
||||
var/last_spam_time = 0
|
||||
var/obj/machinery/message_server/useMS
|
||||
|
||||
/datum/event/pda_spam/setup()
|
||||
last_spam_time = world.time
|
||||
pick_message_server()
|
||||
|
||||
/datum/event/pda_spam/proc/pick_message_server()
|
||||
if(message_servers)
|
||||
for (var/obj/machinery/message_server/MS in message_servers)
|
||||
if(MS.active)
|
||||
useMS = MS
|
||||
break
|
||||
|
||||
/datum/event/pda_spam/tick()
|
||||
if(world.time > last_spam_time + 3000)
|
||||
//if there's no spam managed to get to receiver for five minutes, give up
|
||||
kill()
|
||||
return
|
||||
|
||||
if(!useMS || !useMS.active)
|
||||
useMS = null
|
||||
pick_message_server()
|
||||
|
||||
if(useMS)
|
||||
if(prob(5))
|
||||
// /obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "")
|
||||
var/obj/item/device/pda/P
|
||||
var/list/viables = list()
|
||||
for(var/obj/item/device/pda/check_pda in PDAs)
|
||||
if (!check_pda.owner||check_pda.toff||check_pda == src||check_pda.hidden)
|
||||
continue
|
||||
viables.Add(check_pda)
|
||||
|
||||
if(!viables.len)
|
||||
return
|
||||
P = pick(viables)
|
||||
|
||||
var/sender
|
||||
var/message
|
||||
switch(pick(1,2,3,4,5,6,7,8))
|
||||
|
||||
if(1)
|
||||
sender = pick("MaxBet","MaxBet Online Casino",\
|
||||
"There is no better time to register",\
|
||||
"I'm excited for you to join us")
|
||||
message = pick("Triple deposits are waiting for you at MaxBet Online when you register to play with us.",\
|
||||
"You can qualify for a 200% Welcome Bonus at MaxBet Online when you sign up today.",\
|
||||
"Once you are a player with MaxBet, you will also receive lucrative weekly and monthly promotions.",\
|
||||
"You will be able to enjoy over 450 top-flight casino games at MaxBet.")
|
||||
|
||||
if(2)
|
||||
sender = pick("QuickDatingSystem",\
|
||||
"Find your russian bride",\
|
||||
"Tajaran beauties are waiting",\
|
||||
"Find your secret skrell crush",\
|
||||
"Beautiful unathi brides",\
|
||||
"Hyperrealistic pleasure-bots available",\
|
||||
"Zo'ra broods in need of genetic material!")
|
||||
message = pick("Your profile caught my attention and I wanted to write and say hello (QuickDating).",\
|
||||
"If you will write to me on my email [pick(first_names_female)]@[pick(last_names)]@[current_map.company_name].[pick("ru","ck","tj","ur","nt")] I shall necessarily send you a photo (QuickDating).",\
|
||||
"I want that we write each other and I hope, that you will like my profile and you will answer me (QuickDating).",\
|
||||
"You have (1) new message!",\
|
||||
"You have (2) new profile views!",\
|
||||
"You have a secret admirer! Meet them today on 4EverYung.nt",\
|
||||
"Single farmer? Dating with us helps meet your best match.")
|
||||
|
||||
if(3)
|
||||
sender = pick("Galactic Payments Association",\
|
||||
"Better Business Bureau",\
|
||||
"Tau Ceti E-Payments",\
|
||||
"NAnoTransen Finance Deparmtent",\
|
||||
"IDrist Corp",\
|
||||
"Luxury Replicas")
|
||||
message = pick("Luxury watches for Blowout sale prices!",\
|
||||
"Watches, Jewelry & Accessories, Bags & Wallets !",\
|
||||
"Deposit 100$ and get 300$ totally free!",\
|
||||
" 100K NT.|WOWGOLD õnly $89 <HOT>",\
|
||||
"We have been filed with a complaint from one of your customers in respect of their business relations with you.",\
|
||||
"We kindly ask you to open the COMPLAINT REPORT (attached) to reply on this complaint..",\
|
||||
"Thizzz izz the Idrizz bank, we need your pazzzword, plzzz click here.",\
|
||||
"Your Idris Account has been Limited! Click here for more informtion",\
|
||||
"Your password has been upated. Please click to confirm.",\
|
||||
"This is the Reclamation Unit bureau. We ask that you reply or a unit will be sent to your location.",\
|
||||
"This staff assistant is making mad credits and basically, you're fucking stupid. How? ...Just Watch The Free Video >")
|
||||
|
||||
if(4)
|
||||
sender = pick("Buy Dr. Maxman",\
|
||||
"Having dysfuctional troubles?")
|
||||
message = pick("DR MAXMAN: REAL Doctors, REAL Science, REAL Results!",\
|
||||
"Dr. Maxman was created by George Acuilar, M.D, a [current_map.boss_short] Certified Urologist who has treated over 70,000 patients sector wide with 'male problems'.",\
|
||||
"After seven years of research, Dr Acuilar and his team came up with this simple breakthrough male enhancement formula.",\
|
||||
"Men of all species report AMAZING increases in length, width and stamina.",
|
||||
"Discovery of this ONE Vaurca pheremone has led to years of genital growth progress! Sign on now!",\
|
||||
"Is your sexlife growing dull? Your late-night sessions growing short? Have you considered Unathi testicle transplants? Greater stamina, greater virility, greater fun.")
|
||||
|
||||
if(5)
|
||||
sender = pick("Dr","Crown prince","King Regent","Professor","Captain")
|
||||
sender += " " + pick("Robert","Alfred","Josephat","Kingsley","Sehi","Zbahi")
|
||||
sender += " " + pick("Mugawe","Nkem","Gbatokwia","Nchekwube","Ndim","Ndubisi")
|
||||
message = pick("YOUR FUND HAS BEEN MOVED TO [pick("Sol","Biesel","Dominia","Elyra","Qerrbalak","Adhomai","NTCC Odin","Hephaestus","NSS Upsilon")] DEVELOPMENTARY BANK FOR ONWARD REMITTANCE.",\
|
||||
"We are happy to inform you that due to the delay, we have been instructed to IMMEDIATELY deposit all funds into your account",\
|
||||
"Dear fund beneficiary, We have please to inform you that overdue funds payment has finally been approved and released for payment",\
|
||||
"Due to my lack of agents I require an off-world financial account to immediately deposit the sum of 1 POINT FIVE MILLION credits.",\
|
||||
"Greetings sir, I regretfully to inform you that as I lay dying here due to my lack ofheirs I have chosen you to receive the full sum of my lifetime savings of 1.5 billion credits")
|
||||
|
||||
if(6)
|
||||
var/pornography = pick("www.wetskrell.nt",\
|
||||
"www.badkitty.nt",\
|
||||
"www.scalesnstuff.nt",\
|
||||
"www.spacelube.nt",\
|
||||
"www.pervertedprogramming.nt",\
|
||||
"www.risquerobots.tc",\
|
||||
"www.clanked.tc",\
|
||||
"www.filledsockets.tc",\
|
||||
"www.hivenetmingle.nt")
|
||||
sender = pick("[current_map.company_name] Morale Divison",\
|
||||
"Feeling Lonely?",\
|
||||
"Bored?",\
|
||||
"[pornography]")
|
||||
message = pick("The [current_map.company_name] Morale Division wishes to provide you with quality entertainment sites.",\
|
||||
"[pornography] is a xenophillic website endorsed by NT for the use of male crewmembers among it's many stations and outposts.",\
|
||||
"[pornography] only provides the higest quality of male entertaiment to [current_map.company_name] Employees.",\
|
||||
"district14.nt : Find local Scrapheap babes near your area. Click to learn more.",\
|
||||
"Simply enter your [current_map.company_name] Bank account system number and pin. With three easy steps this service could be yours!",
|
||||
"Warning! Your connection is not private. Attackers might be trying to steal your information from [pornography] (for example, passwords, messages, or credit cards). Click to learn more.")
|
||||
|
||||
if(7)
|
||||
var/genre = pick("detective crime thriller","crime drama","saturday cartoon","coming of age drama","hospital drama","space opera","sci-fi epic","historical drama","murder mystery","soft-core thriller","S-movie")
|
||||
var/premise = pick("Attack","Revenge", "Apocalypse","War","Army","Night","House","Invasion","Mountain","Rise","Rage")
|
||||
var/list/noun = list("Maniac","Commando","Alien","Goblin","Skeleton","Bird","Raider","Hive","Snake","Teacher","Zombie","Wizard","Dragon","Octopus","Dinosaur","Thing","Changeling","Cult","Vampire","Ninja","Agent","Blob","People","Man","Woman","Clown")
|
||||
var/list/adjective = list("Killer","Skrell","Unathi","Devil","Satan","Evil","Unnameable","Antimatter","Robot","Vaurca","Human","Ancient","Vampire","Sleeper","Secret","Nazi","Space-Nazi","Communist","Immortal","Demon","Murderous","Collosal","Undead","Sex")
|
||||
var/list/relation = list("Neighbour","Priest","Brother","Mother","Father","Sister","Teacher","Parents","King","Son","Daughter","Friends","Self")
|
||||
var/list/action = list("Killed","Conquered","Became","Joined","Tricked","Absorbed","Frightened","Seduced","Married")
|
||||
var/list/place = list("Outer Space","School","Center of the Earth","Sedantis IV","Tau Ceti","Moghes","Holy Terra","Earth","Our Own Minds","the Village Green","Two Doors Down the Block","the Town Over","the Ancient Past","the Distant Future","Kentucky")
|
||||
var/plural = "s"
|
||||
if(prob(50))
|
||||
plural = ""
|
||||
var/movie_title = pick("[premise] of the [pick(adjective)] [pick(noun)][plural]","[pick(adjective)] [pick(noun)][plural] vs. [pick(adjective)] [pick(noun)]s from [pick(place)]","The Night My [pick(relation)] [pick(action)] [pick("a [pick(adjective)] [pick(noun)]",pick(place))]")
|
||||
if(prob(50))
|
||||
movie_title = uppertext(movie_title)
|
||||
|
||||
sender = pick("You have won free tickets!",\
|
||||
"Click here to claim your prize!",\
|
||||
"You are the 1000th vistor!",\
|
||||
"You are our lucky grand prize winner!")
|
||||
message = pick("You have won tickets to the newest [genre] \"[movie_title]\"!",\
|
||||
"Click here to receive your new iFrame 7")
|
||||
|
||||
if(8)
|
||||
sender = pick("[pick(first_names_female,first_names_male)][pick(last_names)]@[current_map.company_name].[pick("ru","ck","tj","ur","nt")]",\
|
||||
"Cindy Kate messenging",\
|
||||
"MirandaTrasen@NanoTrasen.nt")
|
||||
message = pick("We know who you are. Expect us.",\
|
||||
"Hi [P.owner]! Remember me from high-school? Well I have this great business deal proposition....",\
|
||||
"If you don't forward this message to 8 more crewmembers your head will die in their sleep.",\
|
||||
"If you break the chain you will have bad luck for the rest of you're miserable life. Forward to 10 more crewmembers.",\
|
||||
"Forward this email to 3.14 more crewmembers and receive 10,000 cR!",\
|
||||
"[P.owner]! I come from the future to give warning! The code has become self-referential! Run while you still can!")
|
||||
|
||||
if (useMS.send_pda_message("[P.owner]", sender, message)) //Message been filtered by spam filter.
|
||||
return
|
||||
|
||||
last_spam_time = world.time
|
||||
|
||||
if (prob(50)) //Give the AI an increased chance to intercept the message
|
||||
for(var/mob/living/silicon/ai/ai in mob_list)
|
||||
// Allows other AIs to intercept the message but the AI won't intercept their own message.
|
||||
if(ai.ai_pda != P && ai.ai_pda != src)
|
||||
ai.show_message("<i>Intercepted message from <b>[sender]</b></i> (Unknown / spam?) <i>to <b>[P:owner]</b>: [message]</i>")
|
||||
|
||||
//Commented out because we don't send messages like this anymore. Instead it will just popup in their chat window.
|
||||
//P.tnote += "<i><b>← From [sender] (Unknown / spam?):</b></i><br>[message]<br>"
|
||||
|
||||
if (!P.message_silent)
|
||||
playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
for (var/mob/O in hearers(3, P.loc))
|
||||
if(!P.message_silent)
|
||||
O.show_message(text("[icon2html(P, O)] *[P.ttone]*"))
|
||||
//Search for holder of the PDA.
|
||||
var/mob/living/L = null
|
||||
if(P.loc && isliving(P.loc))
|
||||
L = P.loc
|
||||
//Maybe they are a pAI!
|
||||
else
|
||||
L = get(P, /mob/living/silicon)
|
||||
|
||||
if(L)
|
||||
to_chat(L, "[icon2html(P, L)] <b>Message from [sender] (Unknown / spam?), </b>\"[message]\" (Unable to Reply)")
|
||||
@@ -115,7 +115,7 @@
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/chaplain
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
pda = /obj/item/device/pda/chaplain
|
||||
pda = /obj/item/modular_computer/handheld/pda/civilian/chaplain
|
||||
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/bible/fluff/oscar_bible = 1,
|
||||
@@ -135,7 +135,7 @@
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/idris
|
||||
id = /obj/item/card/id/idris
|
||||
pda = /obj/item/device/pda/lawyer
|
||||
pda = /obj/item/modular_computer/handheld/pda/civilian/lawyer
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
glasses = /obj/item/clothing/glasses/sunglasses/big
|
||||
l_hand = /obj/item/storage/briefcase
|
||||
@@ -221,7 +221,7 @@
|
||||
suit_store = /obj/item/tank/oxygen
|
||||
shoes = /obj/item/clothing/shoes/jackboots
|
||||
id = /obj/item/card/id/eridani
|
||||
pda = /obj/item/device/pda/security
|
||||
pda = /obj/item/modular_computer/handheld/pda/security
|
||||
belt = /obj/item/gun/energy/gun/nuclear
|
||||
uniform = /obj/item/clothing/under/rank/security/eridani
|
||||
|
||||
|
||||
@@ -385,7 +385,7 @@ datum/ghosttrap/pai/transfer_personality(var/mob/candidate, var/mob/living/silic
|
||||
list_as_special_role = FALSE
|
||||
|
||||
/datum/ghosttrap/traitor/welcome_candidate(var/mob/target)
|
||||
to_chat(target, "<span class ='notice'> Check your notes for your PDA code!</span>")
|
||||
to_chat(target, "<span class ='notice'> Check your notes for your uplink code!</span>")
|
||||
return 1
|
||||
|
||||
/datum/ghosttrap/vampire
|
||||
|
||||
@@ -94,14 +94,10 @@
|
||||
|
||||
/datum/hallucination/pda/start()
|
||||
var/list/sender = SShallucinations.message_sender
|
||||
var/hall_job = "Unknown"
|
||||
if(ishuman(holder))
|
||||
var/mob/living/carbon/human/M = holder
|
||||
hall_job = M.job
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
if(H.client && !player_is_antag(H, only_offstation_roles = TRUE)) //adds current players to default list to provide variety. leaves out offstation antags.
|
||||
sender += H
|
||||
to_chat(holder, "<b>Message from [pick(sender)] to [holder.name] ([hall_job]),</b> \"[pick(SShallucinations.hallucinated_phrases)]\" (<FONT color = blue><u>reply</u></FONT>)")
|
||||
to_chat(holder, FONT_SMALL("<i>[pick(sender)]</i>: [pick(SShallucinations.hallucinated_phrases)] (<FONT color = blue><u>reply</u></FONT>)"))
|
||||
sound_to(holder, 'sound/machines/twobeep.ogg')
|
||||
|
||||
//hallucinate someone else doing something.
|
||||
|
||||
@@ -288,7 +288,6 @@ var/list/worths = list(
|
||||
/obj/item/orion_ship = 100,
|
||||
/obj/item/airlock_electronics/secure = 600,
|
||||
/obj/item/airlock_electronics = 300,
|
||||
/obj/item/cartridge = 50,
|
||||
/obj/item/aiModule = 3000,
|
||||
/obj/item/autopsy_scanner = 180,
|
||||
//CARDS,
|
||||
@@ -606,7 +605,6 @@ var/list/worths = list(
|
||||
/obj/item/device/slime_scanner = 300,
|
||||
/obj/item/device/transfer_valve = 50,
|
||||
/obj/item/device/violin = 250,
|
||||
/obj/item/device/pda = 60,
|
||||
/obj/item/device/radio = 150,
|
||||
/obj/item/device/assembly/igniter = 15,
|
||||
/obj/item/device/assembly/infra = 10,
|
||||
@@ -626,7 +624,7 @@ var/list/worths = list(
|
||||
/obj/item/slime_extract = 200,
|
||||
/obj/item/robot_parts/robot_component = 250,
|
||||
/obj/item/robot_parts = 30,
|
||||
/obj/item/modular_computer/tablet = 1300,
|
||||
/obj/item/modular_computer/handheld = 1300,
|
||||
/obj/item/modular_computer = 4000,
|
||||
/obj/item/solar_assembly = 680,
|
||||
/obj/item/ammo_casing/cannon = 200,
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
list(
|
||||
new /datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20, time = 25, one_per_turf = TRUE),
|
||||
new /datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10, time = 25),
|
||||
new /datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5, time = 25)
|
||||
new /datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/handheld, 5, time = 25)
|
||||
))
|
||||
|
||||
recipes += new /datum/stack_recipe_list("[display_name] weaponry",
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
new /obj/item/storage/backpack/clown(src)
|
||||
new /obj/item/clothing/under/rank/clown(src)
|
||||
new /obj/item/clothing/shoes/clown_shoes(src)
|
||||
new /obj/item/device/pda/clown(src)
|
||||
new /obj/item/modular_computer/handheld/pda/civilian/clown(src)
|
||||
new /obj/item/clothing/mask/gas/clown_hat(src)
|
||||
new /obj/item/bikehorn(src)
|
||||
new /obj/item/pen/crayon/rainbow(src)
|
||||
@@ -129,7 +129,7 @@
|
||||
if(95)
|
||||
new /obj/item/clothing/under/mime(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/device/pda/mime(src)
|
||||
new /obj/item/modular_computer/handheld/pda/civilian/mime(src)
|
||||
new /obj/item/clothing/gloves/white(src)
|
||||
new /obj/item/clothing/mask/gas/mime(src)
|
||||
new /obj/item/clothing/head/beret(src)
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
randomize_hair_color("facial")
|
||||
|
||||
backbag = 2
|
||||
pda_choice = 2
|
||||
age = rand(getMinAge(),getMaxAge())
|
||||
if(H)
|
||||
copy_to(H,1)
|
||||
|
||||
@@ -115,11 +115,6 @@
|
||||
//gloves
|
||||
if(gloves && !skipgloves)
|
||||
var/gloves_name = gloves
|
||||
if(istype(wear_id, /obj/item/modular_computer))
|
||||
var/obj/item/modular_computer/C = wear_id
|
||||
var/obj/item/card/id/ID = C.GetID()
|
||||
if(ID)
|
||||
gloves_name = "[C.name] ([ID.registered_name] ([ID.assignment]))"
|
||||
if(gloves.blood_color)
|
||||
msg += "<span class='warning'>[get_pronoun("He")] [get_pronoun("has")] [icon2html(gloves, user)] [gloves.gender==PLURAL?"some":"a"] [fluid_color_type_map(gloves.blood_color)]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[gloves]'>[gloves_name]</a> on [get_pronoun("his")] hands!</span>\n"
|
||||
else
|
||||
@@ -179,11 +174,6 @@
|
||||
//ID
|
||||
if(wear_id)
|
||||
var/id_name = wear_id
|
||||
if(istype(wear_id, /obj/item/modular_computer))
|
||||
var/obj/item/modular_computer/C = wear_id
|
||||
var/obj/item/card/id/ID = C.GetID()
|
||||
if(ID)
|
||||
id_name = "[C.name] ([ID.registered_name] ([ID.assignment]))"
|
||||
msg += "[get_pronoun("He")] [get_pronoun("is")] wearing [icon2html(wear_id, user)] <a href='?src=\ref[src];lookitem_desc_only=\ref[wear_id]'>\a [id_name]</a>.\n"
|
||||
|
||||
//Jitters
|
||||
|
||||
@@ -423,18 +423,11 @@
|
||||
|
||||
// Get rank from ID, ID inside PDA, PDA, ID in wallet, etc.
|
||||
/mob/living/carbon/human/proc/get_authentification_rank(var/if_no_id = "No id", var/if_no_job = "No job")
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
if (istype(pda))
|
||||
if (pda.id)
|
||||
return pda.id.rank
|
||||
else
|
||||
return pda.ownrank
|
||||
var/obj/item/card/id/id = GetIdCard()
|
||||
if(!istype(id))
|
||||
return if_no_id
|
||||
else
|
||||
var/obj/item/card/id/id = get_idcard()
|
||||
if(id)
|
||||
return id.rank ? id.rank : if_no_job
|
||||
else
|
||||
return if_no_id
|
||||
return id.rank ? id.rank : if_no_job
|
||||
|
||||
//gets assignment from ID or ID inside PDA or PDA itself
|
||||
//Useful when player do something with computers
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
var/list/hide_underwear = list()
|
||||
var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack.
|
||||
var/backbag_style = 1
|
||||
var/pda_choice = 2
|
||||
|
||||
var/last_chew = 0 // Used for hand chewing
|
||||
|
||||
|
||||
@@ -584,10 +584,6 @@ There are several things that need to be remembered:
|
||||
var/obj/item/card/id/id_card = wear_id
|
||||
if(id_card.wear_over_suit == 1)
|
||||
id_layer = ID_LAYER_ALT
|
||||
else if(istype(wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/pda_device = wear_id
|
||||
if(pda_device.wear_over_suit == 1)
|
||||
id_layer = ID_LAYER_ALT
|
||||
|
||||
if (wear_id.color)
|
||||
result_layer.color = wear_id.color
|
||||
|
||||
@@ -62,7 +62,6 @@ var/list/ai_verbs_default = list(
|
||||
var/list/network = list("Station")
|
||||
var/obj/machinery/camera/camera
|
||||
var/list/cameraRecords = list() //For storing what is shown to the cameras
|
||||
var/obj/item/device/pda/ai/ai_pda
|
||||
var/obj/item/device/multitool/ai_multi
|
||||
var/obj/item/device/radio/headset/heads/ai_integrated/ai_radio
|
||||
var/datum/announcement/priority/announcement
|
||||
@@ -133,7 +132,6 @@ var/list/ai_verbs_default = list(
|
||||
possibleNames -= pickedName
|
||||
pickedName = null
|
||||
|
||||
ai_pda = new/obj/item/device/pda/ai(src)
|
||||
SetName(pickedName)
|
||||
anchored = TRUE
|
||||
canmove = FALSE
|
||||
@@ -202,7 +200,6 @@ var/list/ai_verbs_default = list(
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/ai/Destroy()
|
||||
QDEL_NULL(ai_pda)
|
||||
QDEL_NULL(ai_multi)
|
||||
QDEL_NULL(ai_radio)
|
||||
QDEL_NULL(psupply)
|
||||
@@ -289,12 +286,6 @@ var/list/ai_verbs_default = list(
|
||||
if(eyeobj)
|
||||
eyeobj.name = "[pickedName] (AI Eye)"
|
||||
|
||||
// Set ai pda name
|
||||
if(ai_pda)
|
||||
ai_pda.ownjob = "AI"
|
||||
ai_pda.owner = pickedName
|
||||
ai_pda.name = pickedName + " (" + ai_pda.ownjob + ")"
|
||||
|
||||
//Set the ID Name
|
||||
if(id_card)
|
||||
id_card.registered_name = pickedName
|
||||
|
||||
@@ -82,7 +82,6 @@
|
||||
var/screen // Which screen our main window displays
|
||||
var/subscreen // Which specific function of the main screen is being displayed
|
||||
|
||||
var/obj/item/device/pda/ai/pai/pda = null
|
||||
var/obj/item/modular_computer/parent_computer
|
||||
|
||||
var/secHUD = 0 // Toggles whether the Security HUD is active or not
|
||||
@@ -185,17 +184,8 @@
|
||||
verbs += /mob/living/silicon/proc/computer_interact
|
||||
verbs += /mob/living/silicon/proc/silicon_mimic_accent
|
||||
|
||||
//PDA
|
||||
pda = new(src)
|
||||
addtimer(CALLBACK(src, .proc/set_pda), 5)
|
||||
. = ..()
|
||||
|
||||
/mob/living/silicon/pai/proc/set_pda()
|
||||
pda.ownjob = "Personal Assistant"
|
||||
pda.owner = "[src]"
|
||||
pda.name = "[pda.owner] ([pda.ownjob])"
|
||||
pda.toff = TRUE
|
||||
|
||||
|
||||
/mob/living/silicon/pai/proc/set_custom_sprite()
|
||||
var/datum/custom_synth/sprite = robot_custom_icons[name]
|
||||
@@ -349,9 +339,6 @@
|
||||
H.visible_message(SPAN_DANGER("\The [src] explodes out of \the [H]'s [affecting.name] in shower of gore!"))
|
||||
break
|
||||
holder.drop_from_inventory(card)
|
||||
else if(istype(card.loc,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/holder = card.loc
|
||||
holder.pai = null
|
||||
|
||||
src.client.perspective = EYE_PERSPECTIVE
|
||||
src.client.eye = src
|
||||
|
||||
@@ -82,7 +82,6 @@
|
||||
var/obj/item/device/radio/borg/radio
|
||||
var/obj/machinery/camera/camera
|
||||
var/obj/item/device/mmi/mmi
|
||||
var/obj/item/device/pda/ai/pda
|
||||
var/obj/item/stock_parts/matter_bin/storage
|
||||
var/obj/item/tank/jetpack/carbondioxide/synthetic/jetpack
|
||||
|
||||
@@ -258,14 +257,6 @@
|
||||
return amount
|
||||
return FALSE
|
||||
|
||||
// setup the PDA and its name
|
||||
/mob/living/silicon/robot/proc/setup_PDA()
|
||||
if(!has_pda)
|
||||
return
|
||||
if(!pda)
|
||||
pda = new /obj/item/device/pda/ai(src)
|
||||
pda.set_name_and_job(custom_name, "[mod_type] [braintype]")
|
||||
|
||||
//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO
|
||||
//Improved /N
|
||||
/mob/living/silicon/robot/Destroy()
|
||||
@@ -369,9 +360,6 @@
|
||||
mmi.brainmob.real_name = src.name
|
||||
mmi.name = "[initial(mmi.name)]: [src.name]"
|
||||
|
||||
// if we've changed our name, we also need to update the display name for our PDA
|
||||
setup_PDA()
|
||||
|
||||
// We also need to update our internal ID
|
||||
if(id_card)
|
||||
id_card.assignment = prefix
|
||||
|
||||
@@ -867,8 +867,8 @@ proc/is_blind(A)
|
||||
preposition = "on"
|
||||
action3 = "wears"
|
||||
newlocation = "feet"
|
||||
else if (istype(loc,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/S = loc
|
||||
else if (istype(loc,/obj/item/modular_computer))
|
||||
var/obj/item/modular_computer/S = loc
|
||||
newlocation = S.name
|
||||
if (justmoved)
|
||||
preposition = "into"
|
||||
|
||||
@@ -25,6 +25,10 @@ var/global/ntnrc_uid = 0
|
||||
for(var/datum/computer_file/program/chatclient/C in clients)
|
||||
if(C.program_state > PROGRAM_STATE_KILLED)
|
||||
C.computer.output_message(FONT_SMALL("<b>([get_title(C)]) <i>[username]</i>:</b> [message] (<a href='byond://?src=\ref[C];Reply=1;target=[src.title]'>Reply</a>)"), 0)
|
||||
if(!C.silent && C.username != username && C.program_state == PROGRAM_STATE_BACKGROUND)
|
||||
for (var/mob/O in hearers(2, get_turf(C.computer)))
|
||||
playsound(C.computer, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
O.show_message(text("[icon2html(C.computer, O)] *[C.ringtone]*"))
|
||||
|
||||
message = "[worldtime2text()] [username]: [message]"
|
||||
messages.Add(message)
|
||||
|
||||
@@ -13,6 +13,7 @@ var/global/datum/ntnet/ntnet_global = new()
|
||||
var/list/chat_channels = list()
|
||||
var/list/chat_clients = list()
|
||||
var/list/fileservers = list()
|
||||
var/list/datum/ntnet_account/users = list()
|
||||
// Amount of logs the system tries to keep in memory. Keep below 999 to prevent byond from acting weirdly.
|
||||
// High values make displaying logs much laggier.
|
||||
var/setting_maxlogcount = 100
|
||||
|
||||
@@ -69,6 +69,21 @@
|
||||
continue
|
||||
hard_drive.store_file(prog)
|
||||
|
||||
/obj/item/modular_computer/proc/handle_verbs()
|
||||
if(card_slot)
|
||||
if(card_slot.stored_card)
|
||||
verbs += /obj/item/modular_computer/proc/eject_id
|
||||
if(card_slot.stored_item)
|
||||
verbs += /obj/item/modular_computer/proc/eject_item
|
||||
if(portable_drive)
|
||||
verbs += /obj/item/modular_computer/proc/eject_usb
|
||||
if(battery_module && battery_module.hotswappable)
|
||||
verbs += /obj/item/modular_computer/proc/eject_battery
|
||||
if(ai_slot && ai_slot.stored_card)
|
||||
verbs += /obj/item/modular_computer/proc/eject_ai
|
||||
if(personal_ai)
|
||||
verbs += /obj/item/modular_computer/proc/eject_personal_ai
|
||||
|
||||
/obj/item/modular_computer/Initialize()
|
||||
. = ..()
|
||||
listener = new(LISTENER_MODULAR_COMPUTER, src)
|
||||
@@ -76,7 +91,9 @@
|
||||
install_default_hardware()
|
||||
if(hard_drive)
|
||||
install_default_programs()
|
||||
handle_verbs()
|
||||
update_icon()
|
||||
initial_name = name
|
||||
|
||||
/obj/item/modular_computer/Destroy()
|
||||
kill_program(TRUE)
|
||||
@@ -87,6 +104,11 @@
|
||||
QDEL_NULL(listener)
|
||||
return ..()
|
||||
|
||||
/obj/item/modular_computer/CouldUseTopic(var/mob/user)
|
||||
..()
|
||||
if(iscarbon(user))
|
||||
playsound(src, 'sound/machines/pda_click.ogg', 20)
|
||||
|
||||
/obj/item/modular_computer/emag_act(var/remaining_charges, var/mob/user)
|
||||
if(computer_emagged)
|
||||
to_chat(user, SPAN_WARNING("\The [src] has already been emagged."))
|
||||
@@ -155,10 +177,11 @@
|
||||
|
||||
// Relays kill program request to currently active program. Use this to quit current program.
|
||||
/obj/item/modular_computer/proc/kill_program(var/forced = FALSE)
|
||||
if(active_program)
|
||||
active_program.kill_program(forced)
|
||||
if(active_program && active_program.kill_program(forced))
|
||||
src.vueui_transfer(active_program)
|
||||
active_program = null
|
||||
else
|
||||
return FALSE
|
||||
var/mob/user = usr
|
||||
if(user && istype(user) && !forced)
|
||||
ui_interact(user) // Re-open the UI on this computer. It should show the main screen now.
|
||||
@@ -195,14 +218,14 @@
|
||||
enabled = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/item/modular_computer/proc/enable_computer(var/mob/user)
|
||||
/obj/item/modular_computer/proc/enable_computer(var/mob/user, var/ar_forced=FALSE)
|
||||
enabled = TRUE
|
||||
update_icon()
|
||||
|
||||
// Autorun feature
|
||||
var/datum/computer_file/data/autorun = hard_drive ? hard_drive.find_file_by_name("autorun") : null
|
||||
if(istype(autorun))
|
||||
run_program(autorun.stored_data, user)
|
||||
run_program(autorun.stored_data, user, ar_forced)
|
||||
|
||||
for(var/s in enabled_services)
|
||||
var/datum/computer_file/program/service = s
|
||||
@@ -227,7 +250,7 @@
|
||||
ui_interact(user) // Re-open the UI on this computer. It should show the main screen now.
|
||||
|
||||
|
||||
/obj/item/modular_computer/proc/run_program(prog, mob/user)
|
||||
/obj/item/modular_computer/proc/run_program(prog, mob/user, var/forced=FALSE)
|
||||
var/datum/computer_file/program/P = null
|
||||
if(!istype(user))
|
||||
user = usr
|
||||
@@ -255,7 +278,7 @@
|
||||
to_chat(user, SPAN_WARNING("\The [src] displays, \"Maximal CPU load reached. Unable to run another program.\"."))
|
||||
return
|
||||
|
||||
if(P.requires_ntnet && !get_ntnet_status(P.requires_ntnet_feature)) // The program requires NTNet connection, but we are not connected to NTNet.
|
||||
if(P.requires_ntnet && !get_ntnet_status(P.requires_ntnet_feature) && !forced) // The program requires NTNet connection, but we are not connected to NTNet.
|
||||
to_chat(user, FONT_SMALL(SPAN_WARNING("\The [src] displays, \"NETWORK ERROR - Unable to connect to NTNet. Please retry. If problem persists contact your system administrator.\".")))
|
||||
return
|
||||
|
||||
@@ -353,11 +376,10 @@
|
||||
if(S in enabled_services)
|
||||
return
|
||||
|
||||
enabled_services += S
|
||||
|
||||
// Start service
|
||||
S.service_activate()
|
||||
S.service_state = PROGRAM_STATE_ACTIVE
|
||||
if(S.service_activate())
|
||||
enabled_services += S
|
||||
S.service_state = PROGRAM_STATE_ACTIVE
|
||||
|
||||
|
||||
/obj/item/modular_computer/proc/disable_service(service, mob/user, var/datum/computer_file/program/S = null)
|
||||
@@ -383,3 +405,73 @@
|
||||
to_chat(user, message)
|
||||
return
|
||||
audible_message(message, hearing_distance = message_range)
|
||||
|
||||
// TODO: Make pretty much everything use these helpers.
|
||||
/obj/item/modular_computer/proc/output_notice(var/message, var/message_range)
|
||||
message = "[icon2html(src, viewers(message_range, get_turf(src)))][src]: " + message
|
||||
output_message(SPAN_NOTICE(message), message_range)
|
||||
|
||||
/obj/item/modular_computer/proc/output_error(var/message, var/message_range)
|
||||
message = "[icon2html(src, viewers(message_range, get_turf(src)))][src]: " + message
|
||||
output_message(SPAN_WARNING(message), message_range)
|
||||
|
||||
/obj/item/modular_computer/proc/get_notification(var/message, var/message_range = 1, var/atom/source)
|
||||
if(silent)
|
||||
return
|
||||
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 20, 1)
|
||||
message = "[icon2html(src, viewers(message_range, get_turf(src)))][src]: [SPAN_DANGER("-!-")] Notification from [source]: " + message
|
||||
output_message(FONT_SMALL(SPAN_BOLD(message)), message_range)
|
||||
|
||||
/obj/item/modular_computer/proc/register_account(var/datum/computer_file/program/PRG = null)
|
||||
var/obj/item/card/id/id = GetID()
|
||||
if(PRG)
|
||||
output_message(SPAN_NOTICE("\The [src] shows a notice: \"[PRG.filedesc] requires a registered NTNRC account. Registering automatically...\""))
|
||||
if(!istype(id))
|
||||
output_message(SPAN_WARNING("\The [src] shows an error: \"No ID card found!\""))
|
||||
return FALSE
|
||||
if(id.chat_registered)
|
||||
output_message(SPAN_WARNING("\The [src] shows an error: \"This card is already registered to another account!\""))
|
||||
return FALSE
|
||||
|
||||
id.chat_registered = TRUE
|
||||
registered_id = id
|
||||
output_message(SPAN_NOTICE("\The [src] beeps: \"Registration successful!\""))
|
||||
playsound(get_turf(src), 'sound/machines/ping.ogg', 20, 0)
|
||||
return registered_id
|
||||
|
||||
/obj/item/modular_computer/proc/unregister_account()
|
||||
if(!registered_id)
|
||||
return FALSE
|
||||
|
||||
registered_id.chat_registered = FALSE
|
||||
registered_id = null
|
||||
|
||||
if(hard_drive)
|
||||
var/datum/computer_file/program/P = hard_drive.find_file_by_name("ntnrc_client")
|
||||
P.event_unregistered()
|
||||
|
||||
output_message(SPAN_NOTICE("\The [src] beeps: \"Successfully unregistered ID!\""))
|
||||
playsound(get_turf(src), 'sound/machines/ping.ogg', 20, 0)
|
||||
return TRUE
|
||||
|
||||
/obj/item/modular_computer/proc/set_autorun(var/fname)
|
||||
if(!fname)
|
||||
return FALSE
|
||||
|
||||
var/datum/computer_file/data/autorun = hard_drive.find_file_by_name("autorun")
|
||||
|
||||
if(istype(autorun) && autorun.stored_data == fname)
|
||||
autorun.stored_data = null
|
||||
return -1
|
||||
|
||||
autorun = new /datum/computer_file/data(src)
|
||||
autorun.filename = "autorun"
|
||||
autorun.stored_data = fname
|
||||
hard_drive.store_file(autorun)
|
||||
return TRUE
|
||||
|
||||
/obj/item/modular_computer/proc/silence_notifications()
|
||||
for (var/datum/computer_file/program/P in hard_drive.stored_files)
|
||||
if (istype(P))
|
||||
P.event_silentmode()
|
||||
silent = !silent
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
return
|
||||
found = TRUE
|
||||
portable_drive = H
|
||||
verbs += /obj/item/modular_computer/proc/eject_usb
|
||||
else if(istype(H, /obj/item/computer_hardware/hard_drive))
|
||||
if(hard_drive)
|
||||
to_chat(user, SPAN_WARNING("\The [src]'s hard drive slot is already occupied by \the [hard_drive]."))
|
||||
@@ -39,6 +40,8 @@
|
||||
return
|
||||
found = TRUE
|
||||
battery_module = H
|
||||
if(battery_module.hotswappable)
|
||||
verbs += /obj/item/modular_computer/proc/eject_battery
|
||||
else if(istype(H, /obj/item/computer_hardware/processor_unit))
|
||||
if(processor_unit)
|
||||
to_chat(user, SPAN_WARNING("\The [src]'s processor slot is already occupied by \the [processor_unit]."))
|
||||
@@ -51,6 +54,7 @@
|
||||
return
|
||||
found = TRUE
|
||||
ai_slot = H
|
||||
verbs += /obj/item/modular_computer/proc/eject_ai
|
||||
else if(istype(H, /obj/item/computer_hardware/tesla_link))
|
||||
if(tesla_link)
|
||||
to_chat(user, SPAN_WARNING("\The [src]'s tesla link slot is already occupied by \the [tesla_link]."))
|
||||
@@ -63,6 +67,7 @@
|
||||
return
|
||||
personal_ai = H
|
||||
to_chat(user, SPAN_NOTICE("You install \the [H] into \the [src]."))
|
||||
verbs += /obj/item/modular_computer/proc/eject_personal_ai
|
||||
personal_ai.pai.parent_computer = src
|
||||
personal_ai.pai.verbs += /mob/living/silicon/pai/proc/personal_computer_interact
|
||||
to_chat(personal_ai.pai, SPAN_NOTICE("You gain access to \the [src]'s computronics."))
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// Eject ID card from computer, if it has ID slot with card inside.
|
||||
/obj/item/modular_computer/verb/eject_id()
|
||||
/obj/item/modular_computer/proc/eject_id()
|
||||
set name = "Eject ID"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
@@ -7,49 +6,12 @@
|
||||
if(use_check_and_message(usr))
|
||||
return
|
||||
|
||||
proc_eject_id(usr)
|
||||
|
||||
// Eject ID card from computer, if it has ID slot with card inside.
|
||||
/obj/item/modular_computer/verb/eject_usb()
|
||||
set name = "Eject Portable Storage"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(use_check_and_message(usr))
|
||||
return
|
||||
|
||||
proc_eject_usb(usr)
|
||||
|
||||
/obj/item/modular_computer/verb/eject_ai()
|
||||
set name = "Eject AI Storage"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(use_check_and_message(usr))
|
||||
return
|
||||
|
||||
proc_eject_ai(usr)
|
||||
|
||||
/obj/item/modular_computer/verb/eject_personal_ai()
|
||||
set name = "Eject Personal AI"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(use_check_and_message(usr))
|
||||
return
|
||||
|
||||
proc_eject_personal_ai(usr)
|
||||
|
||||
/obj/item/modular_computer/proc/proc_eject_id(mob/user)
|
||||
if(!user)
|
||||
user = usr
|
||||
|
||||
if(!card_slot)
|
||||
to_chat(user, SPAN_WARNING("\The [src] does not have an ID card slot."))
|
||||
to_chat(usr, SPAN_WARNING("\The [src] does not have an ID card slot."))
|
||||
return
|
||||
|
||||
if(!card_slot.stored_card)
|
||||
to_chat(user, SPAN_WARNING("There is no card in \the [src]."))
|
||||
to_chat(usr, SPAN_WARNING("There is no card in \the [src]."))
|
||||
return
|
||||
|
||||
if(active_program)
|
||||
@@ -57,57 +19,155 @@
|
||||
|
||||
for(var/datum/computer_file/program/P in idle_threads)
|
||||
P.event_idremoved(TRUE)
|
||||
if(ishuman(user))
|
||||
user.put_in_hands(card_slot.stored_card)
|
||||
else
|
||||
card_slot.stored_card.forceMove(get_turf(src))
|
||||
card_slot.stored_card = null
|
||||
|
||||
card_slot.eject_id(usr)
|
||||
|
||||
update_uis()
|
||||
to_chat(user, SPAN_NOTICE("You remove the card from \the [src]."))
|
||||
to_chat(usr, SPAN_NOTICE("You remove the card from \the [src]."))
|
||||
|
||||
|
||||
/obj/item/modular_computer/proc/proc_eject_usb(mob/user)
|
||||
if(!user)
|
||||
user = usr
|
||||
/obj/item/modular_computer/proc/eject_usb()
|
||||
set name = "Eject Portable Storage"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(!portable_drive)
|
||||
to_chat(user, SPAN_WARNING("There is no portable drive connected to \the [src]."))
|
||||
if(use_check_and_message(usr))
|
||||
return
|
||||
|
||||
uninstall_component(user, portable_drive, put_in_hands = TRUE)
|
||||
if(!portable_drive)
|
||||
to_chat(usr, SPAN_WARNING("There is no portable drive connected to \the [src]."))
|
||||
return
|
||||
|
||||
uninstall_component(usr, portable_drive, put_in_hands = TRUE)
|
||||
verbs -= /obj/item/modular_computer/proc/eject_usb
|
||||
update_uis()
|
||||
|
||||
/obj/item/modular_computer/proc/proc_eject_ai(mob/user)
|
||||
if(!user)
|
||||
user = usr
|
||||
/obj/item/modular_computer/proc/eject_item()
|
||||
set name = "Eject Stored Item"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(use_check_and_message(usr))
|
||||
return
|
||||
|
||||
if(!card_slot)
|
||||
to_chat(usr, SPAN_WARNING("\The [src] does not have an ID card slot."))
|
||||
return
|
||||
|
||||
if(!card_slot.stored_item)
|
||||
to_chat(usr, SPAN_WARNING("There is no item stored in \the [src]."))
|
||||
return
|
||||
|
||||
var/I = card_slot.stored_item.name
|
||||
|
||||
if(ishuman(usr))
|
||||
usr.put_in_hands(card_slot.stored_item)
|
||||
else
|
||||
card_slot.stored_item.forceMove(get_turf(src))
|
||||
|
||||
card_slot.stored_item = null
|
||||
update_uis()
|
||||
verbs -= /obj/item/modular_computer/proc/eject_item
|
||||
to_chat(usr, SPAN_NOTICE("You remove \the [I] from \the [src]."))
|
||||
|
||||
/obj/item/modular_computer/proc/eject_battery(mob/usr = usr)
|
||||
set name = "Eject Battery"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(use_check_and_message(usr))
|
||||
return
|
||||
|
||||
if(!battery_module)
|
||||
to_chat(usr, SPAN_WARNING("\The [src] doesn't have a battery installed."))
|
||||
return
|
||||
|
||||
if(!battery_module.hotswappable)
|
||||
to_chat(usr, SPAN_WARNING("\The [src]'s battery isn't removable without tools!"))
|
||||
return
|
||||
|
||||
uninstall_component(usr, battery_module, put_in_hands = TRUE)
|
||||
verbs -= /obj/item/modular_computer/proc/eject_battery
|
||||
update_uis()
|
||||
|
||||
/obj/item/modular_computer/proc/eject_ai()
|
||||
set name = "Eject AI Storage"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(use_check_and_message(usr))
|
||||
return
|
||||
|
||||
if(!ai_slot)
|
||||
to_chat(user, SPAN_WARNING("\The [src] doesn't have an intellicard slot."))
|
||||
to_chat(usr, SPAN_WARNING("\The [src] doesn't have an intellicard slot."))
|
||||
return
|
||||
|
||||
if(!ai_slot.stored_card)
|
||||
to_chat(user, SPAN_WARNING("There is no intellicard connected to \the [src]."))
|
||||
to_chat(usr, SPAN_WARNING("There is no intellicard connected to \the [src]."))
|
||||
return
|
||||
|
||||
if(ishuman(user))
|
||||
user.put_in_hands(ai_slot.stored_card)
|
||||
if(ishuman(usr))
|
||||
usr.put_in_hands(ai_slot.stored_card)
|
||||
else
|
||||
ai_slot.stored_card.forceMove(get_turf(src))
|
||||
ai_slot.stored_card = null
|
||||
ai_slot.update_power_usage()
|
||||
verbs -= /obj/item/modular_computer/proc/eject_ai
|
||||
update_uis()
|
||||
|
||||
/obj/item/modular_computer/proc/proc_eject_personal_ai(mob/user)
|
||||
if(!personal_ai)
|
||||
to_chat(user, SPAN_WARNING("There is no personal AI connected to \the [src]."))
|
||||
/obj/item/modular_computer/proc/eject_personal_ai()
|
||||
set name = "Eject Personal AI"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(use_check_and_message(usr))
|
||||
return
|
||||
|
||||
personal_ai.pai.verbs -= /mob/living/silicon/pai/proc/personal_computer_interact
|
||||
personal_ai.pai.parent_computer = null
|
||||
to_chat(personal_ai.pai, SPAN_NOTICE("You lose access to \the [src]'s computronics."))
|
||||
uninstall_component(user, personal_ai, put_in_hands = TRUE)
|
||||
if(!personal_ai)
|
||||
to_chat(usr, SPAN_WARNING("There is no personal AI connected to \the [src]."))
|
||||
return
|
||||
|
||||
uninstall_component(usr, personal_ai, put_in_hands = TRUE)
|
||||
verbs -= /obj/item/modular_computer/proc/eject_personal_ai
|
||||
update_uis()
|
||||
|
||||
/obj/item/modular_computer/AltClick(var/mob/user)
|
||||
if(use_check_and_message(user, 32))
|
||||
return
|
||||
|
||||
if(!card_slot)
|
||||
to_chat(user, SPAN_WARNING("\The [src] does not have an ID card slot."))
|
||||
return
|
||||
|
||||
if(card_slot.stored_card)
|
||||
eject_id()
|
||||
else if(card_slot.stored_item)
|
||||
eject_item()
|
||||
else
|
||||
to_chat(user, SPAN_WARNING("\The [src] does not have a card or item stored in the card slot."))
|
||||
|
||||
/obj/item/modular_computer/attack(mob/living/M, mob/living/user)
|
||||
if(scan_mode == SCANNER_MEDICAL)
|
||||
health_scan_mob(M, user, TRUE)
|
||||
|
||||
/obj/item/modular_computer/afterattack(atom/A, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(!proximity_flag)
|
||||
return
|
||||
if(scan_mode == SCANNER_REAGENT)
|
||||
if(!isobj(A) || isnull(A.reagents))
|
||||
return
|
||||
if(A.reagents.reagent_list.len)
|
||||
var/reagents_length = A.reagents.reagent_list.len
|
||||
to_chat(user, SPAN_NOTICE("[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found."))
|
||||
for(var/re in A.reagents.reagent_list)
|
||||
to_chat(user, SPAN_NOTICE(" [re]"))
|
||||
else
|
||||
to_chat(user, SPAN_NOTICE("No active chemical agents found in [A]."))
|
||||
|
||||
else if(scan_mode == SCANNER_GAS)
|
||||
analyze_gases(A, user)
|
||||
|
||||
/obj/item/modular_computer/attack_ghost(var/mob/abstract/observer/user)
|
||||
if(enabled)
|
||||
ui_interact(user)
|
||||
@@ -152,15 +212,29 @@
|
||||
if(!card_slot)
|
||||
to_chat(user, SPAN_WARNING("You try to insert \the [I] into \the [src], but it does not have an ID card slot installed."))
|
||||
return
|
||||
if(card_slot.stored_card)
|
||||
to_chat(user, SPAN_WARNING("You try to insert \the [I] into \the [src], but its ID card slot is occupied."))
|
||||
return
|
||||
|
||||
user.drop_from_inventory(I, src)
|
||||
card_slot.stored_card = I
|
||||
if(card_slot.stored_card)
|
||||
eject_id()
|
||||
|
||||
card_slot.insert_id(I)
|
||||
update_uis()
|
||||
to_chat(user, SPAN_NOTICE("You insert \the [I] into \the [src]."))
|
||||
return
|
||||
if(is_type_in_list(W, card_slot?.allowed_items))
|
||||
if(!card_slot)
|
||||
to_chat(user, SPAN_WARNING("You try to insert \the [W] into \the [src], but it does not have an ID card slot installed."))
|
||||
return
|
||||
if(card_slot.stored_item)
|
||||
to_chat(user, SPAN_WARNING("You try to insert \the [W] into \the [src], but its storage slot is occupied."))
|
||||
return
|
||||
|
||||
user.drop_from_inventory(W, src)
|
||||
card_slot.stored_item = W
|
||||
update_uis()
|
||||
verbs += /obj/item/modular_computer/proc/eject_item
|
||||
to_chat(user, SPAN_NOTICE("You insert \the [W] into \the [src]."))
|
||||
return
|
||||
if(istype(W, /obj/item/paper))
|
||||
if(!nano_printer)
|
||||
return
|
||||
@@ -230,6 +304,8 @@
|
||||
var/mob/M = usr
|
||||
if(use_check_and_message(M))
|
||||
return
|
||||
if(istype(over_object, /obj/machinery/power/apc) && tesla_link)
|
||||
return over_object.attackby(src, M)
|
||||
if(!istype(over_object, /obj/screen) && !(over_object == src))
|
||||
return attack_self(M)
|
||||
|
||||
|
||||
@@ -92,9 +92,9 @@
|
||||
if(!istype(P) || P.program_state == PROGRAM_STATE_KILLED)
|
||||
return
|
||||
|
||||
P.kill_program(TRUE)
|
||||
if(P.kill_program())
|
||||
to_chat(user, SPAN_NOTICE("Program [P.filename].[P.filetype] with PID [rand(100,999)] has been killed."))
|
||||
update_uis()
|
||||
to_chat(user, SPAN_NOTICE("Program [P.filename].[P.filetype] with PID [rand(100,999)] has been killed."))
|
||||
|
||||
if(href_list["PC_runprogram"] )
|
||||
. = run_program(href_list["PC_runprogram"], usr)
|
||||
@@ -103,16 +103,14 @@
|
||||
if(href_list["PC_setautorun"])
|
||||
if(!hard_drive)
|
||||
return
|
||||
var/datum/computer_file/data/autorun = hard_drive.find_file_by_name("autorun")
|
||||
if(!istype(autorun))
|
||||
autorun = new /datum/computer_file/data()
|
||||
autorun.filename = "autorun"
|
||||
hard_drive.store_file(autorun)
|
||||
if(autorun.stored_data == href_list["PC_setautorun"])
|
||||
autorun.stored_data = null
|
||||
else
|
||||
autorun.stored_data = href_list["PC_setautorun"]
|
||||
|
||||
set_autorun(href_list["PC_setautorun"])
|
||||
|
||||
if(href_list["PC_register"])
|
||||
if(registered_id)
|
||||
unregister_account()
|
||||
else if(GetID())
|
||||
register_account()
|
||||
|
||||
if( href_list["PC_toggleservice"] )
|
||||
toggle_service(href_list["PC_toggleservice"], usr)
|
||||
return 1
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// This is the base type that handles everything. Subtypes can be easily created by tweaking variables in this file to your liking.
|
||||
|
||||
/obj/item/modular_computer
|
||||
name = "Modular Computer"
|
||||
desc = "A modular computer. You shouldn't see this."
|
||||
@@ -21,6 +22,12 @@
|
||||
var/_app_preset_type // Used for specifying the software preset of the console
|
||||
var/ambience_last_played // Last time sound was played
|
||||
var/pAI_lock = FALSE // Toggles whether pAI can interact with the modular computer while installed in it
|
||||
var/obj/item/card/id/registered_id = null // ID used for chat client registering
|
||||
var/scan_mode = null // Mode used for health/reagent scanners
|
||||
var/silent = FALSE
|
||||
var/doorcode = "smindicate"
|
||||
var/hidden = FALSE
|
||||
var/initial_name
|
||||
|
||||
// Modular computers can run on various devices. Each DEVICE (Laptop, Console, Tablet,..)
|
||||
// must have it's own DMI file. Icon states must be called exactly the same in all files, but may look differently
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user