Merge branch 'master' of github.com:Baystation12/Baystation12

Conflicts:
	baystation12.dme
This commit is contained in:
cib
2012-02-24 06:41:38 -08:00
33 changed files with 8710 additions and 8023 deletions

View File

@@ -49,6 +49,21 @@ atom/proc/add_fibers(mob/living/carbon/human/M)
suit_fibers += "Material from a pair of [M.gloves.name]."
if(!suit_fibers.len) del suit_fibers
atom/proc/get_duplicate(var/atom/location)
var/atom/temp_atom = new src.type(location)
temp_atom.name = src.name
temp_atom.desc = src.desc
temp_atom.icon = src.icon
temp_atom.icon_state = src.icon_state
temp_atom.fingerprints = src.fingerprints
temp_atom.blood_DNA = src.blood_DNA
temp_atom.suit_fibers = src.suit_fibers
if(src.original_atom)
temp_atom.original_atom = src.original_atom
else
temp_atom.original_atom = src
return temp_atom
#define FINGERPRINT_COMPLETE 6 //This is the output of the stringpercent(print) proc, and means about 80% of
//the print must be there for it to be complete. (Prints are 32 digits)
@@ -167,12 +182,20 @@ obj/machinery/computer/forensic_scanning
M.drop_item()
I.loc = src
else
temp = "Invalid Object Rejected."
usr << "Invalid Object Rejected."
if("card")
var/mob/M = usr
var/obj/item/I = M.equipped()
if(!(I && istype(I,/obj/item/weapon/f_card)))
I = card
if(I && istype(I,/obj/item/weapon/f_card))
card = I
if(card.amount > 1 || !card.fingerprints.len)
usr << "\red ERROR: No prints/too many cards."
if(card.loc == src)
card.loc = src.loc
card = null
return
M.drop_item()
I.loc = src
process_card()
@@ -181,8 +204,16 @@ obj/machinery/computer/forensic_scanning
usr << "\red Invalid Object Rejected."
if("database")
canclear = 1
if(href_list["delete_record"])
delete_dossier(text2num(href_list["delete_record"]))
if(href_list["delete_aux"])
delete_record(text2num(href_list["delete_aux"]))
if((!misc || !misc.len) && (!files || !files.len))
temp = "Database is empty."
for(var/atom/A in contents)
if(A == scanning)
continue
del(A)
else
if(files && files.len)
temp = "<b>Criminal Evidence Database</b><br><br>"
@@ -238,7 +269,7 @@ obj/machinery/computer/forensic_scanning
temp += "&nbsp;&nbsp;&nbsp;&nbsp;No blood found.<br>"
else
temp = "ERROR. Database not found!<br>"
temp += "<br><a href='?src=\ref[src];operation=delete;identifier=[href_list["identifier"]]'>{delete}</a>"
temp += "<br><a href='?src=\ref[src];operation=database;delete_record=[href_list["identifier"]]'>{Delete this Dossier}</a>"
temp += "<br><a href='?src=\ref[src];operation=databaseprint;identifier=[href_list["identifier"]]'>{Print}</a>"
temp += "<br><a href='?src=\ref[src];operation=database'>{Return}</a>"
if("databaseprint")
@@ -305,7 +336,7 @@ obj/machinery/computer/forensic_scanning
temp += "&nbsp;&nbsp;&nbsp;&nbsp;No blood found.<br>"
else
temp = "ERROR. Database not found!<br>"
temp += "<br><a href='?src=\ref[src];operation=delete_aux;identifier=[href_list["identifier"]]'>{Delete This Record}</a>"
temp += "<br><a href='?src=\ref[src];operation=database;delete_aux=[href_list["identifier"]]'>{Delete This Record}</a>"
temp += "<br><a href='?src=\ref[src];operation=auxiliaryprint;identifier=[href_list["identifier"]]'>{Print}</a>"
temp += "<br><a href='?src=\ref[src];operation=database'>{Return}</a>"
if("auxiliaryprint")
@@ -427,10 +458,6 @@ obj/machinery/computer/forensic_scanning
temp = "Print Failed: No Data"
if("erase")
scan_data = ""
if("delete_aux")
delete_record(text2num(href_list["identifier"]))
if("delete")
delete_dossier(text2num(href_list["identifier"]))
if("cancel")
scan_process = 0
if("add")
@@ -448,6 +475,10 @@ obj/machinery/computer/forensic_scanning
add_fingerprint(usr)
files = list()
misc = list()
for(var/atom/A in contents)
if(A == scanning)
continue
del(A)
return
@@ -460,6 +491,9 @@ obj/machinery/computer/forensic_scanning
var/list/data = W.stored[i]
add_data(data[1],1,data[2],data[3],data[4])
W.stored = list()
for(var/atom/A in W.contents)
del(A)
return
proc/add_data(var/atom/A, var/override = 0, var/tempfingerprints, var/tempsuit_fibers,var/tempblood_DNA)
@@ -483,8 +517,8 @@ obj/machinery/computer/forensic_scanning
if(misc)
for(var/i = 1, i <= misc.len, i++) //Lets see if we can find it.
var/list/templist = misc[i]
var/check = templist[1]
if(check == A) //There it is!
var/atom/check = templist[1]
if(check.original_atom == A || check.original_atom == A.original_atom) //There it is!
merged = 1
var/list/fibers = templist[2]
if(!fibers)
@@ -501,14 +535,14 @@ obj/machinery/computer/forensic_scanning
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
blood += A.blood_DNA[j]
var/list/sum_list[3] //Pack it back up!
sum_list[1] = A
sum_list[1] = check
sum_list[2] = fibers
sum_list[3] = blood
misc[i] = sum_list //Store it!
break //We found it, we're done here.
if(!merged) //Nope! Guess we have to add it!
var/list/templist[3]
templist[1] = A
templist[1] = A.get_duplicate(src)
templist[2] = A.suit_fibers
templist[3] = A.blood_DNA
misc.len++
@@ -532,7 +566,8 @@ obj/machinery/computer/forensic_scanning
found_prints[m] = 1
for(var/n = 2, n <= perp_list.len, n++) //Lets see if it is already in the database
var/list/target = perp_list[n]
if(target[1] == A) //Found the original object!
var/atom/atom_checker = target[1]
if(atom_checker.original_atom == A || atom_checker.original_atom == A.original_atom) //Found the original object!
found2 = 1
var/list/prints = target[2]
if(!prints)
@@ -566,7 +601,7 @@ obj/machinery/computer/forensic_scanning
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
blood += A.blood_DNA[j]
var/list/sum_list[4] //Pack it back up!
sum_list[1] = A
sum_list[1] = atom_checker
sum_list[2] = prints
sum_list[3] = fibers
sum_list[4] = blood
@@ -575,7 +610,7 @@ obj/machinery/computer/forensic_scanning
break //We found it, we're done here.
if(!found2) //Add a new datapoint to this perp!
var/list/sum_list[4]
sum_list[1] = A
sum_list[1] = A.get_duplicate(src)
sum_list[2] = A.fingerprints
sum_list[3] = A.suit_fibers
sum_list[4] = A.blood_DNA
@@ -586,7 +621,7 @@ obj/machinery/computer/forensic_scanning
if(found_prints[m] == 0)
var/list/newperp[2]
var/list/sum_list[4]
sum_list[1] = A
sum_list[1] = A.get_duplicate(src)
sum_list[2] = A.fingerprints
sum_list[3] = A.suit_fibers
sum_list[4] = A.blood_DNA
@@ -628,7 +663,7 @@ obj/machinery/computer/forensic_scanning
proc/process_card() //I am tired, but this updates the master print from a fingerprint card
//which is used to determine completion of a print.
if(card.fingerprints)
if(card.fingerprints && !(card.amount > 1))
for(var/k = 1, k <= card.fingerprints.len, k++)
var/list/test_prints = params2list(card.fingerprints[k])
var/print = test_prints[num2text(1)]
@@ -640,7 +675,13 @@ obj/machinery/computer/forensic_scanning
test_list[1] = "1=" + print + "&2=" + print
files[i] = test_list
break
del(card)
del(card)
else
usr << "\red ERROR: No prints/too many cards."
if(card.loc == src)
card.loc = src.loc
card = null
return
return
proc/delete_record(var/location)

View File

@@ -17,7 +17,6 @@
/obj/item/weapon/evidencebag/afterattack(obj/item/O, mob/user as mob)
if(istype(O, /obj/item/weapon/storage) && O in user)
user << "You put the evidence bag into the [O]."
return ..()
if(!(O && istype(O)) || O.anchored == 1)
user << "You can't put that inside the [src]!"

View File

@@ -1747,7 +1747,18 @@
J.spawn_positions = -1
message_admins("[key_name_admin(usr)] has removed the cap on security officers.")
return
//hahaha
if (href_list["rnd_max"])
for(var/obj/machinery/computer/rdconsole/C in world)
for(var/datum/tech/T in C.files.known_tech)
T.level = 6
C.files.RefreshResearch()
for(var/obj/machinery/r_n_d/server/C in world)
for(var/datum/tech/T in C.files.known_tech)
T.level = 6
C.files.RefreshResearch()
owner:rnd_check_designs()
///////////////////////////////////////////////////////////////////////////////////////////////Panels

View File

@@ -141,6 +141,7 @@
verbs += /client/proc/callprocobj
verbs += /client/proc/cmd_debug_prints
verbs += /client/proc/cmd_debug_blood
verbs += /client/proc/rnd_check_designs
if (holder.level >= 5)//Game Admin********************************************************************
verbs += /obj/admins/proc/view_txt_log
@@ -422,6 +423,7 @@
verbs -= /client/proc/radioalert
verbs -= /client/proc/cmd_debug_prints
verbs -= /client/proc/cmd_debug_blood
verbs -= /client/proc/rnd_check_designs
return

View File

@@ -862,4 +862,31 @@ Traitors and the like can also be revived with the previous role mostly intact.
ticker.random_players = 1
/client/proc/rnd_check_designs()
set category = "Debug"
set name = "Check RnD Designs"
set desc = "Check validity of RnD data of the consoles and server."
if (!holder)
src << "Only administrators may use this command."
return
var/dat = "<head><title>RnD Check</title></head>"
for(var/obj/machinery/computer/rdconsole/C in world)
dat += "<b>[C.name] - RnD Console</b><br>"
for(var/datum/design/D in C.files.known_designs)
if(!text2path(D.build_path))
dat += "[D.name]'s has invalid build path [D.build_path]<br>"
dat += "<br>"
for(var/obj/machinery/r_n_d/server/C in world)
dat += "<b>[C.name] - Server</b><br>"
for(var/datum/design/D in C.files.known_designs)
if(!text2path(D.build_path))
dat += "[D.name]'s has invalid build path [D.build_path]<br>"
dat += "<br>"
dat += "<hr><a href='?src=\ref[holder];rnd_max=1'>Max out tech levels.</a>"
usr << browse(dat, "window=chk_design")

View File

@@ -154,7 +154,7 @@
/obj/machinery/chem_dispenser/process()
if(stat & NOPOWER) return
if(!charging_reagents) return
if(!charging_reagents || src.energy > 30) return
use_power(10000)
src.energy += 0.05
@@ -331,7 +331,7 @@
else if(href_list["pill_sprite"])
pillsprite = href_list["pill_sprite"]
else if(href_list["bottle_sprite"])
bottlesprite = href_list["bottlesprite"]
bottlesprite = href_list["bottle_sprite"]
else
usr << browse(null, "window=chem_master")
src.updateUsrDialog()

View File

@@ -1413,6 +1413,7 @@
else user << "\red [M] finishes eating [src]."
del(src)
playsound(M.loc,'eatfood.ogg', rand(10,50), 1)
user.update_clothing()
return 1
else if(istype(M, /mob/living/simple_animal/livestock))
if(M == user) //If you're eating it yourself.
@@ -1465,6 +1466,8 @@
if(!reagents.total_volume)
if(M == user) user << "\red You finish eating [src]."
else user << "\red [M] finishes eating [src]."
spawn(2)
user.update_clothing()
del(src)
playsound(M.loc,'eatfood.ogg', rand(10,50), 1)
return 1

View File

@@ -130,7 +130,7 @@
var/pr = 50
if(prob(pr))
adjustToxLoss(1)
else
else if (stat != 0)
if(!lying)
lying = 1 //Seriously, stay down :x
update_clothing()

18
code/modules/mob/living/silicon/ai/laws.dm Normal file → Executable file
View File

@@ -20,33 +20,51 @@
if (!src.laws)
src.laws = new /datum/ai_laws/nanotrasen
/mob/living/silicon/ai/proc/notify_linked_cyborgs()
for (var/mob/living/silicon/robot/A in world)
if(A.stat == 2)
continue
if(!islinked(A, src))
continue
A << "These are your laws now:"
A.show_laws()
/mob/living/silicon/ai/proc/set_zeroth_law(var/law)
src.laws_sanity_check()
src.laws.set_zeroth_law(law)
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/add_inherent_law(var/law)
src.laws_sanity_check()
src.laws.add_inherent_law(law)
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/clear_inherent_laws()
src.laws_sanity_check()
src.laws.clear_inherent_laws()
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/add_ion_law(var/law)
src.laws_sanity_check()
src.laws.add_ion_law(law)
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/clear_ion_laws()
src.laws_sanity_check()
src.laws.clear_ion_laws()
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/add_supplied_law(var/number, var/law)
src.laws_sanity_check()
src.laws.add_supplied_law(number, law)
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/clear_supplied_laws()
src.laws_sanity_check()
src.laws.clear_supplied_laws()
src.notify_linked_cyborgs()

View File

@@ -188,6 +188,7 @@
var/turf/T = get_turf(loc)
if (istype(T))
T.Entered(W)
update_clothing()
return
/mob/proc/before_take_item(var/obj/item/item)

View File

@@ -170,13 +170,7 @@ datum/preferences
dat += "<hr><b>Eyes</b><br>"
dat += "<a href='byond://?src=\ref[user];preferences=1;eyes=input'>Change Color</a> <font face=\"fixedsys\" size=\"3\" color=\"#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes, 2)]\"><table style='display:inline;' bgcolor=\"#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes)]\"><tr><td>__</td></tr></table></font>"
dat += "<hr><b>Disabilities: </b><br>"
dat += "Need Glasses? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=0\">[disabilities & (1<<0) ? "Yes" : "No"]</a><br>"
dat += "Seizures? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=1\">[disabilities & (1<<1) ? "Yes" : "No"]</a><br>"
dat += "Coughing? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=2\">[disabilities & (1<<2) ? "Yes" : "No"]</a><br>"
dat += "Tourettes/Twitching? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=3\">[disabilities & (1<<3) ? "Yes" : "No"]</a><br>"
dat += "Nervousness? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=4\">[disabilities & (1<<4) ? "Yes" : "No"]</a><br>"
dat += "Deafness? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=5\">[disabilities & (1<<5) ? "Yes" : "No"]</a><br>"
dat += "<hr><b><a href=\"byond://?src=\ref[user];preferences=1;disabilities=-1\">Disabilities</a></b><br>"
dat += "<hr><b>Flavor Text</b><br>"
dat += "<a href='byond://?src=\ref[user];preferences=1;flavor_text=1'>Change</a><br>"
@@ -224,6 +218,26 @@ datum/preferences
proc/closesave(mob/user)
user << browse(null, "window=saves;size=300x640")
proc/SetDisabilities(mob/user)
var/HTML = "<body>"
HTML += "<tt><center>"
HTML += "<b>Choose disabilities</b><br>"
HTML += "Need Glasses? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=0\">[disabilities & (1<<0) ? "Yes" : "No"]</a><br>"
HTML += "Seizures? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=1\">[disabilities & (1<<1) ? "Yes" : "No"]</a><br>"
HTML += "Coughing? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=2\">[disabilities & (1<<2) ? "Yes" : "No"]</a><br>"
HTML += "Tourettes/Twitching? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=3\">[disabilities & (1<<3) ? "Yes" : "No"]</a><br>"
HTML += "Nervousness? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=4\">[disabilities & (1<<4) ? "Yes" : "No"]</a><br>"
HTML += "Deafness? <a href=\"byond://?src=\ref[user];preferences=1;disabilities=5\">[disabilities & (1<<5) ? "Yes" : "No"]</a><br>"
HTML += "<br>"
HTML += "<a href=\"byond://?src=\ref[user];preferences=1;disabilities=-2\">\[Done\]</a>"
HTML += "</center></tt>"
user << browse(null, "window=preferences")
user << browse(HTML, "window=disabil;size=350x300")
return
proc/GetAltTitle(datum/job/job)
return job_alt_titles.Find(job.title) > 0 \
? job_alt_titles[job.title] \
@@ -694,7 +708,13 @@ datum/preferences
midis = 1
disabilities = 0
if(link_tags["disabilities"])
disabilities ^= (1<<text2num(link_tags["disabilities"])) //MAGIC
if(text2num(link_tags["disabilities"]) >= -1)
if(text2num(link_tags["disabilities"]) >= 0)
disabilities ^= (1<<text2num(link_tags["disabilities"])) //MAGIC
SetDisabilities(user)
return
else
user << browse(null, "window=disabil")
ShowChoices(user)

View File

@@ -221,8 +221,7 @@
/obj/item/proc/wrap(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/packageWrap))
var/obj/item/weapon/packageWrap/C = I
if(!istype(src.loc,/turf))
user << "\red You need to place the item on the ground or a table before wrapping it!"
if(anchored)
return
else if (C.amount > 1)
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(src.loc))

View File

@@ -330,6 +330,7 @@ datum
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/supplycomp"
/* is not a thing
mining
name = "Circuit Design (Outpost Status Display)"
desc = "Allows for the construction of circuit boards used to build an outpost status display console."
@@ -338,6 +339,7 @@ datum
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/mining"
*/
firealarm
name = "Circuit Design (Fire Alarm)"
@@ -533,30 +535,34 @@ datum
req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/telecomms/receiver"
telecomms_bus
name = "Circuit Design (Bus Mainframe)"
name = "Circuit Design (Telecom Bus Mainframe)"
desc = "Allows for the construction of Telecommunications Bus Mainframes."
id = "s-bus"
req_tech = list("programming" = 4, "engineering" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/telecomms/bus"
telecomms_processor
name = "Circuit Design (Processor Unit)"
name = "Circuit Design (Telecom Processor Unit)"
desc = "Allows for the construction of Telecommunications Processor equipment."
id = "s-processor"
req_tech = list("programming" = 4, "engineering" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/telecomms/processor"
telecomms_server
name = "Circuit Design (Subspace Receiver)"
name = "Circuit Design (Telecom Server)"
desc = "Allows for the construction of Telecommunications Servers."
id = "s-server"
req_tech = list("programming" = 4, "engineering" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/telecomms/server"
subspace_broadcaster
name = "Circuit Design (Subspace Broadcaster)"
@@ -565,6 +571,7 @@ datum
req_tech = list("programming" = 4, "engineering" = 4, "bluespace" = 2)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/telecomms/broadcaster"
///////////////////////////////////