Merge branch 'master' into dev

This commit is contained in:
Chinsky
2014-03-08 12:02:32 +04:00
15 changed files with 141 additions and 65 deletions

View File

@@ -11,6 +11,8 @@
return return
/obj/effect/datacore/proc/manifest_modify(var/name, var/assignment) /obj/effect/datacore/proc/manifest_modify(var/name, var/assignment)
if(PDA_Manifest.len)
PDA_Manifest.Cut()
var/datum/data/record/foundrecord var/datum/data/record/foundrecord
var/real_title = assignment var/real_title = assignment
@@ -34,6 +36,9 @@
foundrecord.fields["real_rank"] = real_title foundrecord.fields["real_rank"] = real_title
/obj/effect/datacore/proc/manifest_inject(var/mob/living/carbon/human/H) /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")) if(H.mind && (H.mind.assigned_role != "MODE"))
var/assignment var/assignment
if(H.mind.role_alt_title) if(H.mind.role_alt_title)
@@ -269,4 +274,4 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
del(eyes_s) del(eyes_s)
del(clothes_s) del(clothes_s)
return preview_icon return preview_icon

View File

@@ -51,6 +51,8 @@
//This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character(). //This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character().
var/locked[] = list() var/locked[] = list()
/obj/effect/datacore/proc/get_manifest(monochrome, OOC) /obj/effect/datacore/proc/get_manifest(monochrome, OOC)
var/list/heads = new() var/list/heads = new()
var/list/sec = 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. 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() /obj/effect/datacore/proc/get_manifest_json()
if(PDA_Manifest.len)
return PDA_Manifest
var/heads[0] var/heads[0]
var/sec[0] var/sec[0]
var/eng[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)) if(!department && !(name in heads))
misc[++misc.len] = list("name" = name, "rank" = rank, "active" = isactive) misc[++misc.len] = list("name" = name, "rank" = rank, "active" = isactive)
return list(\
PDA_Manifest = list(\
"heads" = heads,\ "heads" = heads,\
"sec" = sec,\ "sec" = sec,\
"eng" = eng,\ "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,\ "bot" = bot,\
"misc" = misc\ "misc" = misc\
) )
return PDA_Manifest

View File

@@ -36,6 +36,8 @@ var/list/whitelist = list()
return 1 return 1
if(species == "human" || species == "Human") if(species == "human" || species == "Human")
return 1 return 1
if(species == "machine" || species == "Machine")
return 1
if(check_rights(R_ADMIN, 0)) if(check_rights(R_ADMIN, 0))
return 1 return 1
if(!alien_whitelist) if(!alien_whitelist)

View File

@@ -289,6 +289,8 @@ What a mess.*/
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>" temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
if ("Purge All Records") if ("Purge All Records")
if(PDA_Manifest.len)
PDA_Manifest.Cut()
for(var/datum/data/record/R in data_core.security) for(var/datum/data/record/R in data_core.security)
del(R) del(R)
temp = "All Employment records deleted." temp = "All Employment records deleted."
@@ -300,6 +302,9 @@ What a mess.*/
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>" temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
//RECORD CREATE //RECORD CREATE
if ("New Record (General)") if ("New Record (General)")
if(PDA_Manifest.len)
PDA_Manifest.Cut()
var/datum/data/record/G = new /datum/data/record() var/datum/data/record/G = new /datum/data/record()
G.fields["name"] = "New Record" G.fields["name"] = "New Record"
G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
@@ -372,12 +377,16 @@ What a mess.*/
switch(href_list["choice"]) switch(href_list["choice"])
if ("Change Rank") if ("Change Rank")
if (active1) if (active1)
if(PDA_Manifest.len)
PDA_Manifest.Cut()
active1.fields["rank"] = href_list["rank"] active1.fields["rank"] = href_list["rank"]
if(href_list["rank"] in joblist) if(href_list["rank"] in joblist)
active1.fields["real_rank"] = href_list["real_rank"] active1.fields["real_rank"] = href_list["real_rank"]
if ("Delete Record (ALL) Execute") if ("Delete Record (ALL) Execute")
if (active1) if (active1)
if(PDA_Manifest.len)
PDA_Manifest.Cut()
for(var/datum/data/record/R in data_core.medical) for(var/datum/data/record/R in data_core.medical)
if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
del(R) del(R)
@@ -416,4 +425,4 @@ What a mess.*/
del(R) del(R)
continue continue
..(severity) ..(severity)

View File

@@ -168,7 +168,7 @@ to destroy them and players will be able to make replacements.
build_path = "/obj/machinery/r_n_d/destructive_analyzer" build_path = "/obj/machinery/r_n_d/destructive_analyzer"
board_type = "machine" board_type = "machine"
origin_tech = "magnets=2;engineering=2;programming=2" 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( req_components = list(
"/obj/item/weapon/stock_parts/scanning_module" = 1, "/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 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" build_path = "/obj/machinery/autolathe"
board_type = "machine" board_type = "machine"
origin_tech = "engineering=2;programming=2" 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( req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 3, "/obj/item/weapon/stock_parts/matter_bin" = 3,
"/obj/item/weapon/stock_parts/manipulator" = 1, "/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" build_path = "/obj/machinery/r_n_d/protolathe"
board_type = "machine" board_type = "machine"
origin_tech = "engineering=2;programming=2" 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( req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 2, "/obj/item/weapon/stock_parts/matter_bin" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 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" build_path = "/obj/machinery/r_n_d/circuit_imprinter"
board_type = "machine" board_type = "machine"
origin_tech = "engineering=2;programming=2" 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( req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 1, "/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1, "/obj/item/weapon/stock_parts/manipulator" = 1,
@@ -245,7 +245,7 @@ obj/item/weapon/circuitboard/rdserver
build_path = "/obj/machinery/mecha_part_fabricator" build_path = "/obj/machinery/mecha_part_fabricator"
board_type = "machine" board_type = "machine"
origin_tech = "programming=3;engineering=3" 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( req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 2, "/obj/item/weapon/stock_parts/matter_bin" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 1, "/obj/item/weapon/stock_parts/manipulator" = 1,
@@ -269,7 +269,7 @@ obj/item/weapon/circuitboard/rdserver
build_path = "/obj/machinery/dna_scannernew" build_path = "/obj/machinery/dna_scannernew"
board_type = "machine" board_type = "machine"
origin_tech = "programming=2;biotech=2" 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( req_components = list(
"/obj/item/weapon/stock_parts/scanning_module" = 1, "/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1, "/obj/item/weapon/stock_parts/manipulator" = 1,
@@ -285,7 +285,7 @@ obj/item/weapon/circuitboard/rdserver
build_path = "/obj/machinery/telecomms/receiver" build_path = "/obj/machinery/telecomms/receiver"
board_type = "machine" board_type = "machine"
origin_tech = "programming=4;engineering=3;bluespace=2" 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( req_components = list(
"/obj/item/weapon/stock_parts/subspace/ansible" = 1, "/obj/item/weapon/stock_parts/subspace/ansible" = 1,
"/obj/item/weapon/stock_parts/subspace/filter" = 1, "/obj/item/weapon/stock_parts/subspace/filter" = 1,
@@ -297,7 +297,7 @@ obj/item/weapon/circuitboard/rdserver
build_path = "/obj/machinery/telecomms/hub" build_path = "/obj/machinery/telecomms/hub"
board_type = "machine" board_type = "machine"
origin_tech = "programming=4;engineering=4" 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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2, "/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/weapon/cable_coil" = 2, "/obj/item/weapon/cable_coil" = 2,
@@ -308,7 +308,7 @@ obj/item/weapon/circuitboard/rdserver
build_path = "/obj/machinery/telecomms/relay" build_path = "/obj/machinery/telecomms/relay"
board_type = "machine" board_type = "machine"
origin_tech = "programming=3;engineering=4;bluespace=3" 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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2, "/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/weapon/cable_coil" = 2, "/obj/item/weapon/cable_coil" = 2,
@@ -319,7 +319,7 @@ obj/item/weapon/circuitboard/rdserver
build_path = "/obj/machinery/telecomms/bus" build_path = "/obj/machinery/telecomms/bus"
board_type = "machine" board_type = "machine"
origin_tech = "programming=4;engineering=4" 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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2, "/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/weapon/cable_coil" = 1, "/obj/item/weapon/cable_coil" = 1,
@@ -330,7 +330,7 @@ obj/item/weapon/circuitboard/rdserver
build_path = "/obj/machinery/telecomms/processor" build_path = "/obj/machinery/telecomms/processor"
board_type = "machine" board_type = "machine"
origin_tech = "programming=4;engineering=4" 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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 3, "/obj/item/weapon/stock_parts/manipulator" = 3,
"/obj/item/weapon/stock_parts/subspace/filter" = 1, "/obj/item/weapon/stock_parts/subspace/filter" = 1,
@@ -344,7 +344,7 @@ obj/item/weapon/circuitboard/rdserver
build_path = "/obj/machinery/telecomms/server" build_path = "/obj/machinery/telecomms/server"
board_type = "machine" board_type = "machine"
origin_tech = "programming=4;engineering=4" 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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2, "/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/weapon/cable_coil" = 1, "/obj/item/weapon/cable_coil" = 1,
@@ -355,7 +355,7 @@ obj/item/weapon/circuitboard/rdserver
build_path = "/obj/machinery/telecomms/broadcaster" build_path = "/obj/machinery/telecomms/broadcaster"
board_type = "machine" board_type = "machine"
origin_tech = "programming=4;engineering=4;bluespace=2" 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( req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2, "/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/weapon/cable_coil" = 1, "/obj/item/weapon/cable_coil" = 1,

View File

@@ -240,6 +240,9 @@ obj/machinery/computer/cryopod/Topic(href, href_list)
current_mode.possible_traitors.Remove(occupant) current_mode.possible_traitors.Remove(occupant)
// Delete them from datacore. // Delete them from datacore.
if(PDA_Manifest.len)
PDA_Manifest.Cut()
for(var/datum/data/record/R in data_core.medical) for(var/datum/data/record/R in data_core.medical)
if ((R.fields["name"] == occupant.real_name)) if ((R.fields["name"] == occupant.real_name))
del(R) del(R)

View File

@@ -498,13 +498,15 @@
src.updateUsrDialog() src.updateUsrDialog()
return return
*/ */
if(!silent) if(!silent)
temp = "Updating local R&D database..." temp = "Updating local R&D database..."
src.updateUsrDialog() src.updateUsrDialog()
sleep(30) //only sleep if called by user sleep(30) //only sleep if called by user
var/found = 0
for(var/obj/machinery/computer/rdconsole/RDC in get_area(src)) for(var/obj/machinery/computer/rdconsole/RDC in get_area(src))
if(!RDC.sync) if(!RDC.sync)
continue continue
found++
for(var/datum/tech/T in RDC.files.known_tech) for(var/datum/tech/T in RDC.files.known_tech)
files.AddTech2Known(T) files.AddTech2Known(T)
for(var/datum/design/D in RDC.files.known_designs) for(var/datum/design/D in RDC.files.known_designs)
@@ -519,6 +521,11 @@
src.updateUsrDialog() src.updateUsrDialog()
if(i || tech_output) if(i || tech_output)
src.visible_message("\icon[src] <b>[src]</b> beeps, \"Successfully synchronized with R&D server. New data processed.\"") 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 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) /obj/machinery/mecha_part_fabricator/proc/get_resource_cost_w_coeff(var/obj/item/part as obj,var/resource as text, var/roundto=1)

View File

@@ -20,6 +20,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/obj/item/weapon/cartridge/cartridge = null //current cartridge 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/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 //Secondary variables
var/scanmode = 0 //1 is medical scanner, 2 is forensics, 3 is reagent scanner. var/scanmode = 0 //1 is medical scanner, 2 is forensics, 3 is reagent scanner.
var/fon = 0 //Is the flashlight function on? 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/list/conversations = list() // For keeping up with who we have PDA messsages from.
var/newmessage = 0 //To remove hackish overlay check 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/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 var/ownjob = null //related to above
@@ -287,6 +294,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/New() /obj/item/device/pda/New()
..() ..()
PDAs += src PDAs += src
PDAs = sortAtom(PDAs)
if(default_cartridge) if(default_cartridge)
cartridge = new default_cartridge(src) cartridge = new default_cartridge(src)
new /obj/item/weapon/pen(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 attack_self(M)
return return
/obj/item/device/pda/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /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/title = "Personal Data Assistant"
var/data[0] // This is the data that will be sent to the PDA 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) if(cartridge)
var/cartdata[0] var/cartdata[0]
data["records"] = cartridge.create_NanoUI_values() if(mode in cartmodes)
data["records"] = cartridge.create_NanoUI_values()
cartdata["name"] = cartridge.name if(mode == 0)
cartdata["access"] = list(\ cartdata["name"] = cartridge.name
"access_security" = cartridge.access_security,\ cartdata["access"] = list(\
"access_engine" = cartridge.access_engine,\ "access_security" = cartridge.access_security,\
"access_atmos" = cartridge.access_atmos,\ "access_engine" = cartridge.access_engine,\
"access_medical" = cartridge.access_medical,\ "access_atmos" = cartridge.access_atmos,\
"access_clown" = cartridge.access_clown,\ "access_medical" = cartridge.access_medical,\
"access_mime" = cartridge.access_mime,\ "access_clown" = cartridge.access_clown,\
"access_janitor" = cartridge.access_janitor,\ "access_mime" = cartridge.access_mime,\
"access_quartermaster" = cartridge.access_quartermaster,\ "access_janitor" = cartridge.access_janitor,\
"access_hydroponics" = cartridge.access_hydroponics,\ "access_quartermaster" = cartridge.access_quartermaster,\
"access_reagent_scanner" = cartridge.access_reagent_scanner,\ "access_hydroponics" = cartridge.access_hydroponics,\
"access_remote_door" = cartridge.access_remote_door,\ "access_reagent_scanner" = cartridge.access_reagent_scanner,\
"access_status_display" = cartridge.access_status_display\ "access_remote_door" = cartridge.access_remote_door,\
) "access_status_display" = cartridge.access_status_display\
if(isnull(cartridge.radio)) )
cartdata["radio"] = 0 if(isnull(cartridge.radio))
else cartdata["radio"] = 0
if(istype(cartridge.radio, /obj/item/radio/integrated/beepsky)) else
cartdata["radio"] = 1 if(istype(cartridge.radio, /obj/item/radio/integrated/beepsky))
if(istype(cartridge.radio, /obj/item/radio/integrated/signal)) cartdata["radio"] = 1
cartdata["radio"] = 2 if(istype(cartridge.radio, /obj/item/radio/integrated/signal))
if(istype(cartridge.radio, /obj/item/radio/integrated/mule)) cartdata["radio"] = 2
cartdata["radio"] = 3 if(istype(cartridge.radio, /obj/item/radio/integrated/mule))
cartdata["radio"] = 3
cartdata["type"] = cartridge.type if(mode == 2)
cartdata["charges"] = cartridge.charges ? cartridge.charges : 0 cartdata["type"] = cartridge.type
cartdata["charges"] = cartridge.charges ? cartridge.charges : 0
data["cartridge"] = cartdata data["cartridge"] = cartdata
data["stationTime"] = worldtime2text() data["stationTime"] = worldtime2text()
@@ -383,7 +404,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/convopdas[0] var/convopdas[0]
var/pdas[0] var/pdas[0]
var/count = 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 (!P.owner||P.toff||P == src||P.hidden) continue
if(conversations.Find("\ref[P]")) if(conversations.Find("\ref[P]"))
convopdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "1"))) 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) if(mode==3)
var/turf/T = get_turf_or_move(user.loc) var/turf/T = get_turf(user.loc)
if(!isnull(T) || mode!=3) if(!isnull(T))
var/datum/gas_mixture/environment = T.return_air() var/datum/gas_mixture/environment = T.return_air()
var/pressure = environment.return_pressure() var/pressure = environment.return_pressure()
@@ -449,8 +470,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
ui.set_initial_data(data) ui.set_initial_data(data)
// open the new ui window // open the new ui window
ui.open() ui.open()
// auto update every Master Controller tick // auto update every Master Controller tick
ui.set_auto_update(1) ui.set_auto_update(auto_update)
//NOTE: graphic resources are loaded on client login //NOTE: graphic resources are loaded on client login
/obj/item/device/pda/attack_self(mob/user as mob) /obj/item/device/pda/attack_self(mob/user as mob)

View File

@@ -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.") log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
if(admin_number_present <= 0) if(admin_number_present <= 0)
if(!admin_number_afk) 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 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 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! feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return return

View File

@@ -37,8 +37,9 @@
..() ..()
/mob/living/carbon/human/machine/New() /mob/living/carbon/human/machine/New()
species = new /datum/species/machine(src)
h_style = "blue IPC screen" h_style = "blue IPC screen"
set_species("Machine")
..()
/mob/living/carbon/human/New() /mob/living/carbon/human/New()
@@ -676,6 +677,8 @@
if(setmedical != "Cancel") if(setmedical != "Cancel")
R.fields["p_stat"] = setmedical R.fields["p_stat"] = setmedical
modified = 1 modified = 1
if(PDA_Manifest.len)
PDA_Manifest.Cut()
spawn() spawn()
if(istype(usr,/mob/living/carbon/human)) if(istype(usr,/mob/living/carbon/human))

View File

@@ -1296,7 +1296,7 @@
if(2) healths.icon_state = "health7" if(2) healths.icon_state = "health7"
else else
//switch(health - halloss) //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(100 to INFINITY) healths.icon_state = "health0"
if(80 to 100) healths.icon_state = "health1" if(80 to 100) healths.icon_state = "health1"
if(60 to 80) healths.icon_state = "health2" if(60 to 80) healths.icon_state = "health2"

View File

@@ -53,6 +53,13 @@
return return
/datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns). /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 return
/datum/species/human /datum/species/human
@@ -219,8 +226,8 @@
punch_damage = 2 punch_damage = 2
eyes = "blank_eyes" eyes = "blank_eyes"
brute_mod = 1.5 brute_mod = 0.5
burn_mod = 1.5 burn_mod = 1
warning_low_pressure = 50 warning_low_pressure = 50
hazard_low_pressure = 10 hazard_low_pressure = 10
@@ -233,7 +240,7 @@
heat_level_2 = 3000 heat_level_2 = 3000
heat_level_3 = 4000 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" blood_color = "#1F181F"
flesh_color = "#AAAAAA" flesh_color = "#575757"

View File

@@ -27,6 +27,7 @@
#define APC_UPOVERLAY_ENVIRON1 1024 #define APC_UPOVERLAY_ENVIRON1 1024
#define APC_UPOVERLAY_ENVIRON2 2048 #define APC_UPOVERLAY_ENVIRON2 2048
#define APC_UPOVERLAY_LOCKED 4096 #define APC_UPOVERLAY_LOCKED 4096
#define APC_UPOVERLAY_OPERATING 8192
#define APC_UPDATE_ICON_COOLDOWN 100 // 10 seconds #define APC_UPDATE_ICON_COOLDOWN 100 // 10 seconds
@@ -323,6 +324,9 @@
if(update_state <= 1) if(update_state <= 1)
update_state |= UPSTATE_ALLGOOD update_state |= UPSTATE_ALLGOOD
if(operating)
update_overlay |= APC_UPOVERLAY_OPERATING
if(update_state & UPSTATE_ALLGOOD) if(update_state & UPSTATE_ALLGOOD)
if(locked) if(locked)
update_overlay |= APC_UPOVERLAY_LOCKED update_overlay |= APC_UPOVERLAY_LOCKED

View File

@@ -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 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) if(M.antibodies & disease.antigen != 0)
return 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]") // log_debug("Infecting [M]")
if(prob(disease.infectionchance) || forced) if(prob(disease.infectionchance) || forced)

View File

@@ -1,4 +1,3 @@
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@@ -47,11 +46,11 @@ DLL_EXPORT const char * nudge(int n, char *v[])
{ {
return ""; return "";
} }
size_t out_c = san_c(v[0]) + san_c(v[2]) + san_c(v[3]); 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; char * san_i = san_out;
strcpy(san_i, "(dp1\nS'ip'\np2\nS'"); strcpy(san_i, "(dp1\nS'ip'\np2\nS'");
san_i += 16; 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"); socket_t nudge_sock = connect_sock(v[1], "45678");
send_n(nudge_sock, san_out, out_c + 56); send_n(nudge_sock, san_out, out_c + 56);
close_socket(nudge_sock); close_socket(nudge_sock);
free(san_out);
return "1"; return "1";
} }