mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Merge branch 'master' into dev
This commit is contained in:
@@ -11,6 +11,8 @@
|
||||
return
|
||||
|
||||
/obj/effect/datacore/proc/manifest_modify(var/name, var/assignment)
|
||||
if(PDA_Manifest.len)
|
||||
PDA_Manifest.Cut()
|
||||
var/datum/data/record/foundrecord
|
||||
var/real_title = assignment
|
||||
|
||||
@@ -34,6 +36,9 @@
|
||||
foundrecord.fields["real_rank"] = real_title
|
||||
|
||||
/obj/effect/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
|
||||
if(PDA_Manifest.len)
|
||||
PDA_Manifest.Cut()
|
||||
|
||||
if(H.mind && (H.mind.assigned_role != "MODE"))
|
||||
var/assignment
|
||||
if(H.mind.role_alt_title)
|
||||
@@ -269,4 +274,4 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
||||
del(eyes_s)
|
||||
del(clothes_s)
|
||||
|
||||
return preview_icon
|
||||
return preview_icon
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
//This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character().
|
||||
var/locked[] = list()
|
||||
|
||||
|
||||
|
||||
/obj/effect/datacore/proc/get_manifest(monochrome, OOC)
|
||||
var/list/heads = new()
|
||||
var/list/sec = new()
|
||||
@@ -165,9 +167,16 @@
|
||||
|
||||
/*
|
||||
We can't just insert in HTML into the nanoUI so we need the raw data to play with.
|
||||
Instead of creating this list over and over when someone leaves their PDA open to the page
|
||||
we'll only update it when it changes. The PDA_Manifest global list is zeroed out upon any change
|
||||
using /obj/effect/datacore/proc/manifest_inject( ), or manifest_insert( )
|
||||
*/
|
||||
|
||||
var/global/list/PDA_Manifest = list()
|
||||
|
||||
/obj/effect/datacore/proc/get_manifest_json()
|
||||
if(PDA_Manifest.len)
|
||||
return PDA_Manifest
|
||||
var/heads[0]
|
||||
var/sec[0]
|
||||
var/eng[0]
|
||||
@@ -227,7 +236,8 @@ We can't just insert in HTML into the nanoUI so we need the raw data to play wit
|
||||
if(!department && !(name in heads))
|
||||
misc[++misc.len] = list("name" = name, "rank" = rank, "active" = isactive)
|
||||
|
||||
return list(\
|
||||
|
||||
PDA_Manifest = list(\
|
||||
"heads" = heads,\
|
||||
"sec" = sec,\
|
||||
"eng" = eng,\
|
||||
@@ -237,6 +247,7 @@ We can't just insert in HTML into the nanoUI so we need the raw data to play wit
|
||||
"bot" = bot,\
|
||||
"misc" = misc\
|
||||
)
|
||||
return PDA_Manifest
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -36,6 +36,8 @@ var/list/whitelist = list()
|
||||
return 1
|
||||
if(species == "human" || species == "Human")
|
||||
return 1
|
||||
if(species == "machine" || species == "Machine")
|
||||
return 1
|
||||
if(check_rights(R_ADMIN, 0))
|
||||
return 1
|
||||
if(!alien_whitelist)
|
||||
|
||||
@@ -289,6 +289,8 @@ What a mess.*/
|
||||
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
|
||||
|
||||
if ("Purge All Records")
|
||||
if(PDA_Manifest.len)
|
||||
PDA_Manifest.Cut()
|
||||
for(var/datum/data/record/R in data_core.security)
|
||||
del(R)
|
||||
temp = "All Employment records deleted."
|
||||
@@ -300,6 +302,9 @@ What a mess.*/
|
||||
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
|
||||
//RECORD CREATE
|
||||
if ("New Record (General)")
|
||||
|
||||
if(PDA_Manifest.len)
|
||||
PDA_Manifest.Cut()
|
||||
var/datum/data/record/G = new /datum/data/record()
|
||||
G.fields["name"] = "New Record"
|
||||
G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
|
||||
@@ -372,12 +377,16 @@ What a mess.*/
|
||||
switch(href_list["choice"])
|
||||
if ("Change Rank")
|
||||
if (active1)
|
||||
if(PDA_Manifest.len)
|
||||
PDA_Manifest.Cut()
|
||||
active1.fields["rank"] = href_list["rank"]
|
||||
if(href_list["rank"] in joblist)
|
||||
active1.fields["real_rank"] = href_list["real_rank"]
|
||||
|
||||
if ("Delete Record (ALL) Execute")
|
||||
if (active1)
|
||||
if(PDA_Manifest.len)
|
||||
PDA_Manifest.Cut()
|
||||
for(var/datum/data/record/R in data_core.medical)
|
||||
if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
|
||||
del(R)
|
||||
@@ -416,4 +425,4 @@ What a mess.*/
|
||||
del(R)
|
||||
continue
|
||||
|
||||
..(severity)
|
||||
..(severity)
|
||||
|
||||
@@ -168,7 +168,7 @@ to destroy them and players will be able to make replacements.
|
||||
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
|
||||
board_type = "machine"
|
||||
origin_tech = "magnets=2;engineering=2;programming=2"
|
||||
frame_desc = "Requires 1 Scanning Module, 1 Manipulator, and 1 Micro-Laser."
|
||||
frame_desc = "Requires 1 Scanning Module, 1 Micro Manipulator, and 1 Micro-Laser."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -179,7 +179,7 @@ to destroy them and players will be able to make replacements.
|
||||
build_path = "/obj/machinery/autolathe"
|
||||
board_type = "machine"
|
||||
origin_tech = "engineering=2;programming=2"
|
||||
frame_desc = "Requires 3 Matter Bins, 1 Manipulator, and 1 Console Screen."
|
||||
frame_desc = "Requires 3 Matter Bins, 1 Micro Manipulator, and 1 Console Screen."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 3,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -190,7 +190,7 @@ to destroy them and players will be able to make replacements.
|
||||
build_path = "/obj/machinery/r_n_d/protolathe"
|
||||
board_type = "machine"
|
||||
origin_tech = "engineering=2;programming=2"
|
||||
frame_desc = "Requires 2 Matter Bins, 2 Manipulators, and 2 Beakers."
|
||||
frame_desc = "Requires 2 Matter Bins, 2 Micro Manipulators, and 2 Beakers."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
@@ -202,7 +202,7 @@ to destroy them and players will be able to make replacements.
|
||||
build_path = "/obj/machinery/r_n_d/circuit_imprinter"
|
||||
board_type = "machine"
|
||||
origin_tech = "engineering=2;programming=2"
|
||||
frame_desc = "Requires 1 Matter Bin, 1 Manipulator, and 2 Beakers."
|
||||
frame_desc = "Requires 1 Matter Bin, 1 Micro Manipulator, and 2 Beakers."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -245,7 +245,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/mecha_part_fabricator"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=3;engineering=3"
|
||||
frame_desc = "Requires 2 Matter Bins, 1 Manipulator, 1 Micro-Laser and 1 Console Screen."
|
||||
frame_desc = "Requires 2 Matter Bins, 1 Micro Manipulator, 1 Micro-Laser and 1 Console Screen."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -269,7 +269,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/dna_scannernew"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
frame_desc = "Requires 1 Scanning module, 1 Manipulator, 1 Micro-Laser, 2 pieces of cable and 1 Console Screen."
|
||||
frame_desc = "Requires 1 Scanning module, 1 Micro Manipulator, 1 Micro-Laser, 2 pieces of cable and 1 Console Screen."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -285,7 +285,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/telecomms/receiver"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=4;engineering=3;bluespace=2"
|
||||
frame_desc = "Requires 1 Subspace Ansible, 1 Hyperwave Filter, 2 Manipulators, and 1 Micro-Laser."
|
||||
frame_desc = "Requires 1 Subspace Ansible, 1 Hyperwave Filter, 2 Micro Manipulators, and 1 Micro-Laser."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/subspace/ansible" = 1,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
@@ -297,7 +297,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/telecomms/hub"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=4;engineering=4"
|
||||
frame_desc = "Requires 2 Manipulators, 2 Cable Coil and 2 Hyperwave Filter."
|
||||
frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filter."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/weapon/cable_coil" = 2,
|
||||
@@ -308,7 +308,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/telecomms/relay"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=3;engineering=4;bluespace=3"
|
||||
frame_desc = "Requires 2 Manipulators, 2 Cable Coil and 2 Hyperwave Filters."
|
||||
frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filters."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/weapon/cable_coil" = 2,
|
||||
@@ -319,7 +319,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/telecomms/bus"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=4;engineering=4"
|
||||
frame_desc = "Requires 2 Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
|
||||
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/weapon/cable_coil" = 1,
|
||||
@@ -330,7 +330,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/telecomms/processor"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=4;engineering=4"
|
||||
frame_desc = "Requires 3 Manipulators, 1 Hyperwave Filter, 2 Treatment Disks, 1 Wavelength Analyzer, 2 Cable Coils and 1 Subspace Amplifier."
|
||||
frame_desc = "Requires 3 Micro Manipulators, 1 Hyperwave Filter, 2 Treatment Disks, 1 Wavelength Analyzer, 2 Cable Coils and 1 Subspace Amplifier."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 3,
|
||||
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
|
||||
@@ -344,7 +344,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/telecomms/server"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=4;engineering=4"
|
||||
frame_desc = "Requires 2 Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
|
||||
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/weapon/cable_coil" = 1,
|
||||
@@ -355,7 +355,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/telecomms/broadcaster"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=4;engineering=4;bluespace=2"
|
||||
frame_desc = "Requires 2 Manipulators, 1 Cable Coil, 1 Hyperwave Filter, 1 Ansible Crystal and 2 High-Powered Micro-Lasers. "
|
||||
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil, 1 Hyperwave Filter, 1 Ansible Crystal and 2 High-Powered Micro-Lasers. "
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/weapon/cable_coil" = 1,
|
||||
|
||||
@@ -240,6 +240,9 @@ obj/machinery/computer/cryopod/Topic(href, href_list)
|
||||
current_mode.possible_traitors.Remove(occupant)
|
||||
|
||||
// Delete them from datacore.
|
||||
|
||||
if(PDA_Manifest.len)
|
||||
PDA_Manifest.Cut()
|
||||
for(var/datum/data/record/R in data_core.medical)
|
||||
if ((R.fields["name"] == occupant.real_name))
|
||||
del(R)
|
||||
|
||||
@@ -498,13 +498,15 @@
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
*/
|
||||
if(!silent)
|
||||
if(!silent)
|
||||
temp = "Updating local R&D database..."
|
||||
src.updateUsrDialog()
|
||||
sleep(30) //only sleep if called by user
|
||||
var/found = 0
|
||||
for(var/obj/machinery/computer/rdconsole/RDC in get_area(src))
|
||||
if(!RDC.sync)
|
||||
continue
|
||||
found++
|
||||
for(var/datum/tech/T in RDC.files.known_tech)
|
||||
files.AddTech2Known(T)
|
||||
for(var/datum/design/D in RDC.files.known_designs)
|
||||
@@ -519,6 +521,11 @@
|
||||
src.updateUsrDialog()
|
||||
if(i || tech_output)
|
||||
src.visible_message("\icon[src] <b>[src]</b> beeps, \"Successfully synchronized with R&D server. New data processed.\"")
|
||||
if(found == 0)
|
||||
temp = "Couldn't contact R&D server.<br>"
|
||||
temp += "<a href='?src=\ref[src];clear_temp=1'>Return</a>"
|
||||
src.updateUsrDialog()
|
||||
src.visible_message("\icon[src] <b>[src]</b> beeps, \"Error! Couldn't connect to R&D server.\"")
|
||||
return
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/proc/get_resource_cost_w_coeff(var/obj/item/part as obj,var/resource as text, var/roundto=1)
|
||||
|
||||
@@ -20,6 +20,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
var/obj/item/weapon/cartridge/cartridge = null //current cartridge
|
||||
var/mode = 0 //Controls what menu the PDA will display. 0 is hub; the rest are either built in or based on cartridge.
|
||||
|
||||
var/lastmode = 0
|
||||
var/ui_tick = 0
|
||||
|
||||
//Secondary variables
|
||||
var/scanmode = 0 //1 is medical scanner, 2 is forensics, 3 is reagent scanner.
|
||||
var/fon = 0 //Is the flashlight function on?
|
||||
@@ -42,6 +45,10 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
var/list/conversations = list() // For keeping up with who we have PDA messsages from.
|
||||
var/newmessage = 0 //To remove hackish overlay check
|
||||
|
||||
var/list/cartmodes = list(40, 42, 43, 433, 44, 441, 45, 451, 46, 48, 47, 49) // If you add more cartridge modes add them to this list as well.
|
||||
var/list/no_auto_update = list(1, 40, 43, 44, 441, 45, 451) // These modes we turn off autoupdate
|
||||
var/list/update_every_five = list(3, 41, 433, 46, 47, 48, 49) // These we update every 5 ticks
|
||||
|
||||
var/obj/item/weapon/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both.
|
||||
var/ownjob = null //related to above
|
||||
|
||||
@@ -287,6 +294,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
/obj/item/device/pda/New()
|
||||
..()
|
||||
PDAs += src
|
||||
PDAs = sortAtom(PDAs)
|
||||
if(default_cartridge)
|
||||
cartridge = new default_cartridge(src)
|
||||
new /obj/item/weapon/pen(src)
|
||||
@@ -319,7 +327,17 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
return attack_self(M)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/pda/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
|
||||
ui_tick++
|
||||
var/auto_update = 1
|
||||
if(mode in no_auto_update)
|
||||
auto_update = 0
|
||||
if(mode == lastmode && ui_tick % 5 && mode in update_every_five)
|
||||
return
|
||||
|
||||
lastmode = mode
|
||||
|
||||
var/title = "Personal Data Assistant"
|
||||
|
||||
var/data[0] // This is the data that will be sent to the PDA
|
||||
@@ -345,35 +363,38 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if(cartridge)
|
||||
var/cartdata[0]
|
||||
|
||||
data["records"] = cartridge.create_NanoUI_values()
|
||||
if(mode in cartmodes)
|
||||
data["records"] = cartridge.create_NanoUI_values()
|
||||
|
||||
cartdata["name"] = cartridge.name
|
||||
cartdata["access"] = list(\
|
||||
"access_security" = cartridge.access_security,\
|
||||
"access_engine" = cartridge.access_engine,\
|
||||
"access_atmos" = cartridge.access_atmos,\
|
||||
"access_medical" = cartridge.access_medical,\
|
||||
"access_clown" = cartridge.access_clown,\
|
||||
"access_mime" = cartridge.access_mime,\
|
||||
"access_janitor" = cartridge.access_janitor,\
|
||||
"access_quartermaster" = cartridge.access_quartermaster,\
|
||||
"access_hydroponics" = cartridge.access_hydroponics,\
|
||||
"access_reagent_scanner" = cartridge.access_reagent_scanner,\
|
||||
"access_remote_door" = cartridge.access_remote_door,\
|
||||
"access_status_display" = cartridge.access_status_display\
|
||||
)
|
||||
if(isnull(cartridge.radio))
|
||||
cartdata["radio"] = 0
|
||||
else
|
||||
if(istype(cartridge.radio, /obj/item/radio/integrated/beepsky))
|
||||
cartdata["radio"] = 1
|
||||
if(istype(cartridge.radio, /obj/item/radio/integrated/signal))
|
||||
cartdata["radio"] = 2
|
||||
if(istype(cartridge.radio, /obj/item/radio/integrated/mule))
|
||||
cartdata["radio"] = 3
|
||||
if(mode == 0)
|
||||
cartdata["name"] = cartridge.name
|
||||
cartdata["access"] = list(\
|
||||
"access_security" = cartridge.access_security,\
|
||||
"access_engine" = cartridge.access_engine,\
|
||||
"access_atmos" = cartridge.access_atmos,\
|
||||
"access_medical" = cartridge.access_medical,\
|
||||
"access_clown" = cartridge.access_clown,\
|
||||
"access_mime" = cartridge.access_mime,\
|
||||
"access_janitor" = cartridge.access_janitor,\
|
||||
"access_quartermaster" = cartridge.access_quartermaster,\
|
||||
"access_hydroponics" = cartridge.access_hydroponics,\
|
||||
"access_reagent_scanner" = cartridge.access_reagent_scanner,\
|
||||
"access_remote_door" = cartridge.access_remote_door,\
|
||||
"access_status_display" = cartridge.access_status_display\
|
||||
)
|
||||
if(isnull(cartridge.radio))
|
||||
cartdata["radio"] = 0
|
||||
else
|
||||
if(istype(cartridge.radio, /obj/item/radio/integrated/beepsky))
|
||||
cartdata["radio"] = 1
|
||||
if(istype(cartridge.radio, /obj/item/radio/integrated/signal))
|
||||
cartdata["radio"] = 2
|
||||
if(istype(cartridge.radio, /obj/item/radio/integrated/mule))
|
||||
cartdata["radio"] = 3
|
||||
|
||||
cartdata["type"] = cartridge.type
|
||||
cartdata["charges"] = cartridge.charges ? cartridge.charges : 0
|
||||
if(mode == 2)
|
||||
cartdata["type"] = cartridge.type
|
||||
cartdata["charges"] = cartridge.charges ? cartridge.charges : 0
|
||||
data["cartridge"] = cartdata
|
||||
|
||||
data["stationTime"] = worldtime2text()
|
||||
@@ -383,7 +404,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
var/convopdas[0]
|
||||
var/pdas[0]
|
||||
var/count = 0
|
||||
for (var/obj/item/device/pda/P in sortAtom(PDAs))
|
||||
for (var/obj/item/device/pda/P in PDAs)
|
||||
if (!P.owner||P.toff||P == src||P.hidden) continue
|
||||
if(conversations.Find("\ref[P]"))
|
||||
convopdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "1")))
|
||||
@@ -413,8 +434,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
|
||||
if(mode==3)
|
||||
var/turf/T = get_turf_or_move(user.loc)
|
||||
if(!isnull(T) || mode!=3)
|
||||
var/turf/T = get_turf(user.loc)
|
||||
if(!isnull(T))
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
|
||||
var/pressure = environment.return_pressure()
|
||||
@@ -449,8 +470,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
ui.set_initial_data(data)
|
||||
// open the new ui window
|
||||
ui.open()
|
||||
// auto update every Master Controller tick
|
||||
ui.set_auto_update(1)
|
||||
// auto update every Master Controller tick
|
||||
ui.set_auto_update(auto_update)
|
||||
|
||||
//NOTE: graphic resources are loaded on client login
|
||||
/obj/item/device/pda/attack_self(mob/user as mob)
|
||||
|
||||
@@ -106,10 +106,10 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
|
||||
if(admin_number_present <= 0)
|
||||
if(!admin_number_afk)
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [original_msg] - !!No admins online!!")
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!No admins online!!")
|
||||
else
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [original_msg] - !!All admins AFK ([admin_number_afk])!!")
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!All admins AFK ([admin_number_afk])!!")
|
||||
else
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [original_msg]")
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)]")
|
||||
feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
@@ -37,8 +37,9 @@
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/machine/New()
|
||||
species = new /datum/species/machine(src)
|
||||
h_style = "blue IPC screen"
|
||||
set_species("Machine")
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/New()
|
||||
|
||||
@@ -676,6 +677,8 @@
|
||||
if(setmedical != "Cancel")
|
||||
R.fields["p_stat"] = setmedical
|
||||
modified = 1
|
||||
if(PDA_Manifest.len)
|
||||
PDA_Manifest.Cut()
|
||||
|
||||
spawn()
|
||||
if(istype(usr,/mob/living/carbon/human))
|
||||
|
||||
@@ -1296,7 +1296,7 @@
|
||||
if(2) healths.icon_state = "health7"
|
||||
else
|
||||
//switch(health - halloss)
|
||||
switch(100 - ((species && species.flags & NO_PAIN) ? 0 : traumatic_shock))
|
||||
switch(100 - ((species && species.flags & NO_PAIN & !IS_SYNTHETIC) ? 0 : traumatic_shock))
|
||||
if(100 to INFINITY) healths.icon_state = "health0"
|
||||
if(80 to 100) healths.icon_state = "health1"
|
||||
if(60 to 80) healths.icon_state = "health2"
|
||||
|
||||
@@ -53,6 +53,13 @@
|
||||
return
|
||||
|
||||
/datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns).
|
||||
if(flags & IS_SYNTHETIC)
|
||||
//H.make_jittery(200) //S-s-s-s-sytem f-f-ai-i-i-i-i-lure-ure-ure-ure
|
||||
H.h_style = ""
|
||||
spawn(100)
|
||||
//H.is_jittery = 0
|
||||
//H.jitteriness = 0
|
||||
H.update_hair()
|
||||
return
|
||||
|
||||
/datum/species/human
|
||||
@@ -219,8 +226,8 @@
|
||||
punch_damage = 2
|
||||
|
||||
eyes = "blank_eyes"
|
||||
brute_mod = 1.5
|
||||
burn_mod = 1.5
|
||||
brute_mod = 0.5
|
||||
burn_mod = 1
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = 10
|
||||
@@ -233,7 +240,7 @@
|
||||
heat_level_2 = 3000
|
||||
heat_level_3 = 4000
|
||||
|
||||
flags = NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC
|
||||
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC
|
||||
|
||||
blood_color = "#FFFFFF"
|
||||
flesh_color = "#AAAAAA"
|
||||
blood_color = "#1F181F"
|
||||
flesh_color = "#575757"
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#define APC_UPOVERLAY_ENVIRON1 1024
|
||||
#define APC_UPOVERLAY_ENVIRON2 2048
|
||||
#define APC_UPOVERLAY_LOCKED 4096
|
||||
#define APC_UPOVERLAY_OPERATING 8192
|
||||
|
||||
#define APC_UPDATE_ICON_COOLDOWN 100 // 10 seconds
|
||||
|
||||
@@ -323,6 +324,9 @@
|
||||
if(update_state <= 1)
|
||||
update_state |= UPSTATE_ALLGOOD
|
||||
|
||||
if(operating)
|
||||
update_overlay |= APC_UPOVERLAY_OPERATING
|
||||
|
||||
if(update_state & UPSTATE_ALLGOOD)
|
||||
if(locked)
|
||||
update_overlay |= APC_UPOVERLAY_LOCKED
|
||||
|
||||
@@ -65,7 +65,10 @@ proc/airborne_can_reach(turf/source, turf/target)
|
||||
// if one of the antibodies in the mob's body matches one of the disease's antigens, don't infect
|
||||
if(M.antibodies & disease.antigen != 0)
|
||||
return
|
||||
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if (H.species.flags & IS_SYNTHETIC)
|
||||
return
|
||||
// log_debug("Infecting [M]")
|
||||
|
||||
if(prob(disease.infectionchance) || forced)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -47,11 +46,11 @@ DLL_EXPORT const char * nudge(int n, char *v[])
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
size_t out_c = san_c(v[0]) + san_c(v[2]) + san_c(v[3]);
|
||||
|
||||
char * san_out = malloc(out_c + 56);
|
||||
|
||||
char * san_out = malloc(out_c + 57);
|
||||
|
||||
char * san_i = san_out;
|
||||
strcpy(san_i, "(dp1\nS'ip'\np2\nS'");
|
||||
san_i += 16;
|
||||
@@ -67,7 +66,9 @@ DLL_EXPORT const char * nudge(int n, char *v[])
|
||||
socket_t nudge_sock = connect_sock(v[1], "45678");
|
||||
send_n(nudge_sock, san_out, out_c + 56);
|
||||
close_socket(nudge_sock);
|
||||
|
||||
|
||||
free(san_out);
|
||||
|
||||
return "1";
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user