mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-16 21:23:20 +00:00
Merge branch 'master' of github.com:Baystation12/Baystation12
Conflicts: baystation12.dme
This commit is contained in:
70
README.txt
70
README.txt
@@ -1,72 +1,10 @@
|
|||||||
baystation 12
|
Baystation 12
|
||||||
|
|
||||||
Website: http://baystation12.net/
|
Website: http://baystation12.net/
|
||||||
|
Wiki: http://baystation12.net/wiki/
|
||||||
|
Install Guide: http://baystation12.net/wiki/index.php/Install
|
||||||
Code: https://github.com/Baystation12/Baystation12
|
Code: https://github.com/Baystation12/Baystation12
|
||||||
IRC: irc://irc.sorcery.net/bs12
|
IRC: irc://irc.sorcery.net/bs12
|
||||||
|
|
||||||
based on the code of tgstation13, itself based on the code of goonstation13.
|
Based on the code of tgstation13, itself based on the code of goonstation13.
|
||||||
tgstation13 - http://code.google.com/p/tgstation13
|
tgstation13 - http://code.google.com/p/tgstation13
|
||||||
|
|
||||||
================================================================================
|
|
||||||
INSTALLATION
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
First-time installation should be fairly straightforward. First, you'll need
|
|
||||||
BYOND installed. You can get it from http://www.byond.com/. Once you've done
|
|
||||||
that, extract the game files to wherever you want to keep them. This is a
|
|
||||||
sourcecode-only release, so the next step is to compile the server files.
|
|
||||||
Open tgstation.dme by double-clicking it, open the Build menu, and click
|
|
||||||
compile. This'll take a little while, and if everything's done right you'll get
|
|
||||||
a message like this:
|
|
||||||
|
|
||||||
saving tgstation.dmb (DEBUG mode)
|
|
||||||
|
|
||||||
tgstation.dmb - 0 errors, 0 warnings
|
|
||||||
|
|
||||||
If you see any errors or warnings, something has gone wrong - possibly a corrupt
|
|
||||||
download or the files extracted wrong.
|
|
||||||
|
|
||||||
Once that's done, open up the config folder. You'll want to edit config.txt to
|
|
||||||
set the probabilities for different gamemodes in Secret and to set your server
|
|
||||||
location so that all your players don't get disconnected at the end of each
|
|
||||||
round. It's recommended you don't turn on the gamemodes with probability 0,
|
|
||||||
except Extended, as they have various issues and aren't currently being tested,
|
|
||||||
so they may have unknown and bizarre bugs. Extended is essentially no mode, and
|
|
||||||
isn't in the Secret rotation by default as it's just not very fun.
|
|
||||||
|
|
||||||
You'll also want to edit admins.txt to remove the default admins and add your
|
|
||||||
own. "Game Master" is the highest level of access, and the other recommended admin
|
|
||||||
levels for now are "Game Admin" (a little below host) and "Moderator". The format is
|
|
||||||
|
|
||||||
byondkey - Rank
|
|
||||||
|
|
||||||
where the BYOND key must be in lowercase and the admin rank must be properly
|
|
||||||
capitalised. There are a bunch more admin ranks, but these three should be
|
|
||||||
enough for most servers, assuming you have trustworthy admins.
|
|
||||||
|
|
||||||
Finally, to start the server, run Dream Daemon and enter the path to your
|
|
||||||
compiled tgstation.dmb file. Make sure to set the port to the one you
|
|
||||||
specified in the config.txt, and set the Security box to 'Safe'. Then press GO
|
|
||||||
and the server should start up and be ready to join.
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
UPDATING
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
To update an existing installation, first back up your /config and /data folders
|
|
||||||
as these store your server configuration, player preferences and banlist.
|
|
||||||
|
|
||||||
Then, extract the new files (preferably into a clean directory, but updating in
|
|
||||||
place should work fine), copy your /config and /data folders back into the new
|
|
||||||
install, overwriting when prompted except if we've specified otherwise, and
|
|
||||||
recompile the game. Once you start the server up again, you should be running
|
|
||||||
the new version.
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
SQL Setup
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
The SQL backend for the library, karma system and stats tracking requires a
|
|
||||||
MySQL server. Your server details go in /config/dbconfig.txt, and the SQL
|
|
||||||
schema is in /SQL/tgstation_schema.sql. More detailed setup instructions are
|
|
||||||
coming soon, for now ask in our IRC channel.
|
|
||||||
0
code/WorkInProgress/Apples/artifacts.dm
Normal file
0
code/WorkInProgress/Apples/artifacts.dm
Normal file
@@ -7,7 +7,7 @@
|
|||||||
var/max_fuel = 350
|
var/max_fuel = 350
|
||||||
|
|
||||||
/obj/item/weapon/weldpack/New()
|
/obj/item/weapon/weldpack/New()
|
||||||
var/datum/reagents/R = new/datum/reagents(max_fuel) //5 refills
|
var/datum/reagents/R = new/datum/reagents(max_fuel) //Lotsa refills
|
||||||
reagents = R
|
reagents = R
|
||||||
R.my_atom = src
|
R.my_atom = src
|
||||||
R.add_reagent("fuel", max_fuel)
|
R.add_reagent("fuel", max_fuel)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
var/level = 2
|
var/level = 2
|
||||||
var/flags = FPRINT
|
var/flags = FPRINT
|
||||||
var/list/fingerprints = list()
|
var/list/fingerprints = list()
|
||||||
var/list/fingerprintshidden = new/list()
|
var/list/fingerprintshidden = list()
|
||||||
var/fingerprintslast = null
|
var/fingerprintslast = null
|
||||||
var/list/blood_DNA = list()
|
var/list/blood_DNA = list()
|
||||||
var/last_bumped = 0
|
var/last_bumped = 0
|
||||||
@@ -12,6 +12,9 @@
|
|||||||
///Chemistry.
|
///Chemistry.
|
||||||
var/datum/reagents/reagents = null
|
var/datum/reagents/reagents = null
|
||||||
|
|
||||||
|
//Detective Work, used for the duplicate data points kept in the scanners
|
||||||
|
var/atom/original_atom = null
|
||||||
|
|
||||||
//var/chem_is_open_container = 0
|
//var/chem_is_open_container = 0
|
||||||
// replaced by OPENCONTAINER flags and atom/proc/is_open_container()
|
// replaced by OPENCONTAINER flags and atom/proc/is_open_container()
|
||||||
///Chemistry.
|
///Chemistry.
|
||||||
|
|||||||
@@ -387,7 +387,7 @@
|
|||||||
icon_state = "seed-carrot"
|
icon_state = "seed-carrot"
|
||||||
mypath = "/obj/item/seeds/carrotseed"
|
mypath = "/obj/item/seeds/carrotseed"
|
||||||
species = "carrot"
|
species = "carrot"
|
||||||
plantname = "CURROTS MAN CURROTS"
|
plantname = "Carrot"
|
||||||
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/carrot"
|
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/carrot"
|
||||||
lifespan = 25
|
lifespan = 25
|
||||||
endurance = 15
|
endurance = 15
|
||||||
|
|||||||
@@ -93,11 +93,13 @@
|
|||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
if (!istype(H.dna, /datum/dna))
|
if (!istype(H.dna, /datum/dna))
|
||||||
return 0
|
return 0
|
||||||
if (H.gloves)
|
if (H.gloves && H.gloves != src)
|
||||||
if(src.fingerprintslast != H.key)
|
if(src.fingerprintslast != H.key)
|
||||||
src.fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
|
src.fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
|
||||||
src.fingerprintslast = H.key
|
src.fingerprintslast = H.key
|
||||||
|
H.gloves.add_fingerprint(M)
|
||||||
if (H.dna.uni_identity)
|
if (H.dna.uni_identity)
|
||||||
|
if(H.gloves != src)
|
||||||
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex))
|
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex))
|
||||||
return 0
|
return 0
|
||||||
else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex))
|
else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex))
|
||||||
@@ -302,6 +304,9 @@
|
|||||||
src.fingerprints[i] = "1=" + prints["1"] + "&2=" + new_print
|
src.fingerprints[i] = "1=" + prints["1"] + "&2=" + new_print
|
||||||
if(!src.fingerprints)
|
if(!src.fingerprints)
|
||||||
src.fingerprints = list()
|
src.fingerprints = list()
|
||||||
|
if(istype(src, /mob/living/carbon/human))
|
||||||
|
var/mob/living/carbon/human/M = src
|
||||||
|
M.update_clothing()
|
||||||
return
|
return
|
||||||
|
|
||||||
/atom/MouseDrop(atom/over_object as mob|obj|turf|area)
|
/atom/MouseDrop(atom/over_object as mob|obj|turf|area)
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ I decided to scrap round-specific objectives since keeping track of them would r
|
|||||||
When I already created about 4 new objectives, this doesn't seem terribly important or needed.
|
When I already created about 4 new objectives, this doesn't seem terribly important or needed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/var/global/toggle_space_ninja = 1//If ninjas can spawn or not.
|
/var/global/toggle_space_ninja = 0//If ninjas can spawn or not.
|
||||||
/var/global/sent_ninja_to_station = 0//If a ninja is already on the station.
|
/var/global/sent_ninja_to_station = 0//If a ninja is already on the station.
|
||||||
|
|
||||||
/proc/space_ninja_arrival()
|
/proc/space_ninja_arrival()
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ var/global/datum/controller/occupations/job_master
|
|||||||
if(unassigned.len == 0) return 0
|
if(unassigned.len == 0) return 0
|
||||||
//Shuffle players and jobs
|
//Shuffle players and jobs
|
||||||
unassigned = shuffle(unassigned)
|
unassigned = shuffle(unassigned)
|
||||||
// occupations = shuffle(occupations) check and see if we can do this one
|
occupations = shuffle(occupations)
|
||||||
|
|
||||||
//Assistants are checked first
|
//Assistants are checked first
|
||||||
Debug("DO, Running Assistant Check 1")
|
Debug("DO, Running Assistant Check 1")
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
src.get_targets()
|
src.get_targets()
|
||||||
src.icon_state = "cleanbot[src.on]"
|
src.icon_state = "cleanbot[src.on]"
|
||||||
|
|
||||||
should_patrol = 0
|
should_patrol = 1
|
||||||
|
|
||||||
src.botcard = new /obj/item/weapon/card/id(src)
|
src.botcard = new /obj/item/weapon/card/id(src)
|
||||||
src.botcard.access = get_access("Janitor")
|
src.botcard.access = get_access("Janitor")
|
||||||
|
|||||||
@@ -360,9 +360,9 @@
|
|||||||
// if (subject.suiciding == 1)
|
// if (subject.suiciding == 1)
|
||||||
// src.temp = "Error: Subject's brain is not responding to scanning stimuli."
|
// src.temp = "Error: Subject's brain is not responding to scanning stimuli."
|
||||||
// return
|
// return
|
||||||
if ((!subject.ckey) || (!subject.client))
|
// if ((!subject.ckey) || (!subject.client))
|
||||||
src.temp = "Error: Mental interface failure."
|
// src.temp = "Error: Mental interface failure."
|
||||||
return
|
// return
|
||||||
if (subject.mutations & HUSK)
|
if (subject.mutations & HUSK)
|
||||||
src.temp = "Error: Mental interface failure."
|
src.temp = "Error: Mental interface failure."
|
||||||
return
|
return
|
||||||
@@ -372,9 +372,13 @@
|
|||||||
|
|
||||||
subject.dna.check_integrity()
|
subject.dna.check_integrity()
|
||||||
|
|
||||||
|
var/ckey = subject.ckey
|
||||||
|
if(!ckey && subject && subject.mind)
|
||||||
|
ckey = subject.mind.key
|
||||||
|
|
||||||
var/datum/data/record/R = new /datum/data/record( )
|
var/datum/data/record/R = new /datum/data/record( )
|
||||||
R.fields["mrace"] = subject.mutantrace
|
R.fields["mrace"] = subject.mutantrace
|
||||||
R.fields["ckey"] = subject.ckey
|
R.fields["ckey"] = ckey
|
||||||
R.fields["name"] = subject.real_name
|
R.fields["name"] = subject.real_name
|
||||||
R.fields["id"] = copytext(md5(subject.real_name), 2, 6)
|
R.fields["id"] = copytext(md5(subject.real_name), 2, 6)
|
||||||
R.fields["UI"] = subject.dna.uni_identity
|
R.fields["UI"] = subject.dna.uni_identity
|
||||||
|
|||||||
@@ -477,6 +477,10 @@
|
|||||||
tnote += "<i><b>→ To [P.owner]:</b></i><br>[t]<br>"
|
tnote += "<i><b>→ To [P.owner]:</b></i><br>[t]<br>"
|
||||||
P.tnote += "<i><b>← From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a>:</b></i><br>[t]<br>"
|
P.tnote += "<i><b>← From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a>:</b></i><br>[t]<br>"
|
||||||
|
|
||||||
|
// Give every ghost the ability to see all messages
|
||||||
|
for (var/mob/dead/observer/G in world)
|
||||||
|
G.show_message("<i>PDA message from <b>[src.owner]</b> to <b>[P:owner]</b>: [t]</i>")
|
||||||
|
|
||||||
if (prob(15)) //Give the AI a chance of intercepting the message
|
if (prob(15)) //Give the AI a chance of intercepting the message
|
||||||
var/who = src.owner
|
var/who = src.owner
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
@@ -763,8 +767,19 @@
|
|||||||
user << "\blue Unable to locate any fingerprints on [A]!"
|
user << "\blue Unable to locate any fingerprints on [A]!"
|
||||||
else
|
else
|
||||||
user << "\blue Isolated [A:fingerprints.len] fingerprints."
|
user << "\blue Isolated [A:fingerprints.len] fingerprints."
|
||||||
// for(var/i in L)
|
var/list/prints = A:fingerprints
|
||||||
// user << "\blue \t [i]"
|
var/list/complete_prints = list()
|
||||||
|
for(var/i in prints)
|
||||||
|
var/list/templist = params2list(i)
|
||||||
|
var/temp = stringpercent(templist["2"])
|
||||||
|
if(temp <= 6)
|
||||||
|
complete_prints += templist["2"]
|
||||||
|
if(complete_prints.len < 1)
|
||||||
|
user << "\blue No intact prints found"
|
||||||
|
else
|
||||||
|
user << "\blue Found [complete_prints.len] intact prints"
|
||||||
|
for(var/i in complete_prints)
|
||||||
|
user << "\blue " + i
|
||||||
|
|
||||||
if(3)
|
if(3)
|
||||||
if(!isnull(A.reagents))
|
if(!isnull(A.reagents))
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
/obj/item/device/geneticsanalyzer
|
|
||||||
name = "Genetics Analyser"
|
|
||||||
icon = 'device.dmi'
|
|
||||||
icon_state = "genetics"
|
|
||||||
w_class = 2
|
|
||||||
|
|
||||||
/obj/item/device/geneticsanalyzer/attack(mob/M as mob, mob/user as mob)
|
|
||||||
for(var/mob/O in viewers(M, null))
|
|
||||||
O.show_message(text("\red [] has analyzed []'s genetic code!", user, M), 1)
|
|
||||||
//Foreach goto(67)
|
|
||||||
user.show_message(text("\blue Analyzing Results for [M]: [M.dna.struc_enzymes]\n\t"), 1)
|
|
||||||
user.show_message(text("\blue \t Epilepsy: [isblockon(getblock(M.dna.struc_enzymes, HEADACHEBLOCK,3),HEADACHEBLOCK) ? "Yes" : "No"]"), 1)
|
|
||||||
user.show_message(text("\blue \t Cough: [isblockon(getblock(M.dna.struc_enzymes, COUGHBLOCK,3),COUGHBLOCK) ? "Yes" : "No"]"), 1)
|
|
||||||
user.show_message(text("\blue \t Clumsy: [isblockon(getblock(M.dna.struc_enzymes, CLUMSYBLOCK,3),CLUMSYBLOCK) ? "Yes" : "No"]"), 1)
|
|
||||||
user.show_message(text("\blue \t Twitch: [isblockon(getblock(M.dna.struc_enzymes, TWITCHBLOCK,3),TWITCHBLOCK) ? "Yes" : "No"]"), 1)
|
|
||||||
user.show_message(text("\blue \t Nervous: [isblockon(getblock(M.dna.struc_enzymes, NERVOUSBLOCK,3),NERVOUSBLOCK) ? "Yes" : "No"]"), 1)
|
|
||||||
user.show_message(text("\blue \t Blind: [isblockon(getblock(M.dna.struc_enzymes, BLINDBLOCK,3),BLINDBLOCK) ? "Yes" : "No"]"), 1)
|
|
||||||
user.show_message(text("\blue \t Deaf: [isblockon(getblock(M.dna.struc_enzymes, DEAFBLOCK,3),DEAFBLOCK) ? "Yes" : "No"]"), 1)
|
|
||||||
user.show_message(text("\blue \t Requires Glasses: [isblockon(getblock(M.dna.struc_enzymes, GLASSESBLOCK,3),GLASSESBLOCK) ? "Yes" : "No"]"), 1)
|
|
||||||
|
|
||||||
/*
|
|
||||||
var/unknow = 0
|
|
||||||
var/list/unknowns = list(HULKBLOCK,TELEBLOCK,FIREBLOCK,XRAYBLOCK,NOBREATHBLOCK,REMOTEVIEWBLOCK,REGENERATEBLOCK,INCREASERUNBLOCK,REMOTETALKBLOCK,MORPHBLOCK,BLENDBLOCK,HALLUCINATIONBLOCK,NOPRINTSBLOCK,SHOCKIMMUNITYBLOCK,SMALLSIZEBLOCK)
|
|
||||||
for(var/unknown in unknowns)
|
|
||||||
if(isblockon(getblock(M.dna.struc_enzymes, unknown,3),unknown))
|
|
||||||
unknow += 1
|
|
||||||
user.show_message(text("\blue \t Unknown Anomalies: [unknow]"))*/
|
|
||||||
@@ -204,8 +204,8 @@ MASS SPECTROMETER
|
|||||||
var/merged = 0
|
var/merged = 0
|
||||||
for(var/i = 1, i < (stored.len + 1), i++) //Lets see if the object is already in there!
|
for(var/i = 1, i < (stored.len + 1), i++) //Lets see if the object is already in there!
|
||||||
var/list/temp = stored[i]
|
var/list/temp = stored[i]
|
||||||
var/checker = temp[1]
|
var/atom/checker = temp[1]
|
||||||
if(checker == A) //It is! Merge!
|
if(checker.original_atom == A || checker.original_atom == A.original_atom) //It is! Merge!
|
||||||
merged = 1
|
merged = 1
|
||||||
var/list/prints = temp[2]
|
var/list/prints = temp[2]
|
||||||
if(!prints)
|
if(!prints)
|
||||||
@@ -239,7 +239,7 @@ MASS SPECTROMETER
|
|||||||
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
|
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
|
||||||
blood += A.blood_DNA[j]
|
blood += A.blood_DNA[j]
|
||||||
var/list/sum_list[4] //Pack it back up!
|
var/list/sum_list[4] //Pack it back up!
|
||||||
sum_list[1] = A
|
sum_list[1] = checker
|
||||||
sum_list[2] = prints
|
sum_list[2] = prints
|
||||||
sum_list[3] = fibers
|
sum_list[3] = fibers
|
||||||
sum_list[4] = blood
|
sum_list[4] = blood
|
||||||
@@ -247,7 +247,7 @@ MASS SPECTROMETER
|
|||||||
break //We found it, we're done here.
|
break //We found it, we're done here.
|
||||||
if(!merged) //Uh, oh! New data point!
|
if(!merged) //Uh, oh! New data point!
|
||||||
var/list/sum_list[4] //Pack it back up!
|
var/list/sum_list[4] //Pack it back up!
|
||||||
sum_list[1] = A
|
sum_list[1] = A.get_duplicate(src)
|
||||||
if(!A.fingerprints)
|
if(!A.fingerprints)
|
||||||
world << "Report this to a dev! [A] was lacking a list() for fingerprints!"
|
world << "Report this to a dev! [A] was lacking a list() for fingerprints!"
|
||||||
sum_list[2] = list()
|
sum_list[2] = list()
|
||||||
|
|||||||
@@ -59,6 +59,26 @@
|
|||||||
|
|
||||||
|
|
||||||
/obj/structure/displaycase/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
/obj/structure/displaycase/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
|
if(istype(W, /obj/item/weapon/gun/energy/laser/captain))
|
||||||
|
if(!src.occupied)
|
||||||
|
user << "\b You put the [W] back into the display case."
|
||||||
|
del(W)
|
||||||
|
src.occupied = 1
|
||||||
|
update_icon()
|
||||||
|
return
|
||||||
|
if(istype(W, /obj/item/stack/sheet/glass))
|
||||||
|
if(src.occupied && src.destroyed)
|
||||||
|
var/obj/item/stack/sheet/glass/G = W
|
||||||
|
user << "\b You repair the display case."
|
||||||
|
G.amount--
|
||||||
|
if (G.amount <= 0)
|
||||||
|
user.update_clothing()
|
||||||
|
del(G)
|
||||||
|
src.destroyed = 0
|
||||||
|
src.density = 1
|
||||||
|
src.health = 30
|
||||||
|
update_icon()
|
||||||
|
return
|
||||||
src.health -= W.force
|
src.health -= W.force
|
||||||
src.healthcheck()
|
src.healthcheck()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -219,6 +219,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
src.created_name = t
|
src.created_name = t
|
||||||
|
user.update_clothing()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
1
code/game/objects/items/weapons/AI_modules.dm
Normal file → Executable file
1
code/game/objects/items/weapons/AI_modules.dm
Normal file → Executable file
@@ -79,6 +79,7 @@ AI MODULES
|
|||||||
src.transmitInstructions(comp.current, usr)
|
src.transmitInstructions(comp.current, usr)
|
||||||
comp.current << "These are your laws now:"
|
comp.current << "These are your laws now:"
|
||||||
comp.current.show_laws()
|
comp.current.show_laws()
|
||||||
|
|
||||||
usr << "Upload complete. The AI's laws have been modified."
|
usr << "Upload complete. The AI's laws have been modified."
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1207,13 +1207,6 @@ turf/simulated/floor/return_siding_icon_state()
|
|||||||
if(istype(A, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks travel Z levels
|
if(istype(A, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks travel Z levels
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!isemptylist(A.search_contents_for(/obj/item/weapon/disk/nuclear)))
|
|
||||||
if(istype(A, /mob/living))
|
|
||||||
var/mob/living/MM = A
|
|
||||||
if(MM.client)
|
|
||||||
MM << "\red Something you are carrying is preventing you from leaving. Don't play stupid; you know exactly what it is."
|
|
||||||
return
|
|
||||||
|
|
||||||
// else if(ticker.mode.name == "extended"||ticker.mode.name == "sandbox") Sandbox_Spacemove(A)
|
// else if(ticker.mode.name == "extended"||ticker.mode.name == "sandbox") Sandbox_Spacemove(A)
|
||||||
|
|
||||||
else
|
else
|
||||||
@@ -1222,6 +1215,13 @@ turf/simulated/floor/return_siding_icon_state()
|
|||||||
del(A)
|
del(A)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(!isemptylist(A.search_contents_for(/obj/item/weapon/disk/nuclear)))
|
||||||
|
if(istype(A, /mob/living))
|
||||||
|
var/mob/living/MM = A
|
||||||
|
if(MM.client)
|
||||||
|
MM << "\red Something you are carrying is preventing you from leaving. Don't play stupid; you know exactly what it is."
|
||||||
|
return
|
||||||
|
|
||||||
var/move_to_z_str = pickweight(accessable_z_levels)
|
var/move_to_z_str = pickweight(accessable_z_levels)
|
||||||
|
|
||||||
var/move_to_z = text2num(move_to_z_str)
|
var/move_to_z = text2num(move_to_z_str)
|
||||||
|
|||||||
@@ -49,6 +49,21 @@ atom/proc/add_fibers(mob/living/carbon/human/M)
|
|||||||
suit_fibers += "Material from a pair of [M.gloves.name]."
|
suit_fibers += "Material from a pair of [M.gloves.name]."
|
||||||
if(!suit_fibers.len) del suit_fibers
|
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
|
#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)
|
//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()
|
M.drop_item()
|
||||||
I.loc = src
|
I.loc = src
|
||||||
else
|
else
|
||||||
temp = "Invalid Object Rejected."
|
usr << "Invalid Object Rejected."
|
||||||
if("card")
|
if("card")
|
||||||
var/mob/M = usr
|
var/mob/M = usr
|
||||||
var/obj/item/I = M.equipped()
|
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))
|
if(I && istype(I,/obj/item/weapon/f_card))
|
||||||
card = I
|
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()
|
M.drop_item()
|
||||||
I.loc = src
|
I.loc = src
|
||||||
process_card()
|
process_card()
|
||||||
@@ -181,8 +204,16 @@ obj/machinery/computer/forensic_scanning
|
|||||||
usr << "\red Invalid Object Rejected."
|
usr << "\red Invalid Object Rejected."
|
||||||
if("database")
|
if("database")
|
||||||
canclear = 1
|
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))
|
if((!misc || !misc.len) && (!files || !files.len))
|
||||||
temp = "Database is empty."
|
temp = "Database is empty."
|
||||||
|
for(var/atom/A in contents)
|
||||||
|
if(A == scanning)
|
||||||
|
continue
|
||||||
|
del(A)
|
||||||
else
|
else
|
||||||
if(files && files.len)
|
if(files && files.len)
|
||||||
temp = "<b>Criminal Evidence Database</b><br><br>"
|
temp = "<b>Criminal Evidence Database</b><br><br>"
|
||||||
@@ -238,7 +269,7 @@ obj/machinery/computer/forensic_scanning
|
|||||||
temp += " No blood found.<br>"
|
temp += " No blood found.<br>"
|
||||||
else
|
else
|
||||||
temp = "ERROR. Database not found!<br>"
|
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=databaseprint;identifier=[href_list["identifier"]]'>{Print}</a>"
|
||||||
temp += "<br><a href='?src=\ref[src];operation=database'>{Return}</a>"
|
temp += "<br><a href='?src=\ref[src];operation=database'>{Return}</a>"
|
||||||
if("databaseprint")
|
if("databaseprint")
|
||||||
@@ -305,7 +336,7 @@ obj/machinery/computer/forensic_scanning
|
|||||||
temp += " No blood found.<br>"
|
temp += " No blood found.<br>"
|
||||||
else
|
else
|
||||||
temp = "ERROR. Database not found!<br>"
|
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=auxiliaryprint;identifier=[href_list["identifier"]]'>{Print}</a>"
|
||||||
temp += "<br><a href='?src=\ref[src];operation=database'>{Return}</a>"
|
temp += "<br><a href='?src=\ref[src];operation=database'>{Return}</a>"
|
||||||
if("auxiliaryprint")
|
if("auxiliaryprint")
|
||||||
@@ -427,10 +458,6 @@ obj/machinery/computer/forensic_scanning
|
|||||||
temp = "Print Failed: No Data"
|
temp = "Print Failed: No Data"
|
||||||
if("erase")
|
if("erase")
|
||||||
scan_data = ""
|
scan_data = ""
|
||||||
if("delete_aux")
|
|
||||||
delete_record(text2num(href_list["identifier"]))
|
|
||||||
if("delete")
|
|
||||||
delete_dossier(text2num(href_list["identifier"]))
|
|
||||||
if("cancel")
|
if("cancel")
|
||||||
scan_process = 0
|
scan_process = 0
|
||||||
if("add")
|
if("add")
|
||||||
@@ -448,6 +475,10 @@ obj/machinery/computer/forensic_scanning
|
|||||||
add_fingerprint(usr)
|
add_fingerprint(usr)
|
||||||
files = list()
|
files = list()
|
||||||
misc = list()
|
misc = list()
|
||||||
|
for(var/atom/A in contents)
|
||||||
|
if(A == scanning)
|
||||||
|
continue
|
||||||
|
del(A)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
@@ -460,6 +491,9 @@ obj/machinery/computer/forensic_scanning
|
|||||||
var/list/data = W.stored[i]
|
var/list/data = W.stored[i]
|
||||||
add_data(data[1],1,data[2],data[3],data[4])
|
add_data(data[1],1,data[2],data[3],data[4])
|
||||||
W.stored = list()
|
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)
|
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)
|
if(misc)
|
||||||
for(var/i = 1, i <= misc.len, i++) //Lets see if we can find it.
|
for(var/i = 1, i <= misc.len, i++) //Lets see if we can find it.
|
||||||
var/list/templist = misc[i]
|
var/list/templist = misc[i]
|
||||||
var/check = templist[1]
|
var/atom/check = templist[1]
|
||||||
if(check == A) //There it is!
|
if(check.original_atom == A || check.original_atom == A.original_atom) //There it is!
|
||||||
merged = 1
|
merged = 1
|
||||||
var/list/fibers = templist[2]
|
var/list/fibers = templist[2]
|
||||||
if(!fibers)
|
if(!fibers)
|
||||||
@@ -501,14 +535,14 @@ obj/machinery/computer/forensic_scanning
|
|||||||
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
|
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
|
||||||
blood += A.blood_DNA[j]
|
blood += A.blood_DNA[j]
|
||||||
var/list/sum_list[3] //Pack it back up!
|
var/list/sum_list[3] //Pack it back up!
|
||||||
sum_list[1] = A
|
sum_list[1] = check
|
||||||
sum_list[2] = fibers
|
sum_list[2] = fibers
|
||||||
sum_list[3] = blood
|
sum_list[3] = blood
|
||||||
misc[i] = sum_list //Store it!
|
misc[i] = sum_list //Store it!
|
||||||
break //We found it, we're done here.
|
break //We found it, we're done here.
|
||||||
if(!merged) //Nope! Guess we have to add it!
|
if(!merged) //Nope! Guess we have to add it!
|
||||||
var/list/templist[3]
|
var/list/templist[3]
|
||||||
templist[1] = A
|
templist[1] = A.get_duplicate(src)
|
||||||
templist[2] = A.suit_fibers
|
templist[2] = A.suit_fibers
|
||||||
templist[3] = A.blood_DNA
|
templist[3] = A.blood_DNA
|
||||||
misc.len++
|
misc.len++
|
||||||
@@ -532,7 +566,8 @@ obj/machinery/computer/forensic_scanning
|
|||||||
found_prints[m] = 1
|
found_prints[m] = 1
|
||||||
for(var/n = 2, n <= perp_list.len, n++) //Lets see if it is already in the database
|
for(var/n = 2, n <= perp_list.len, n++) //Lets see if it is already in the database
|
||||||
var/list/target = perp_list[n]
|
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
|
found2 = 1
|
||||||
var/list/prints = target[2]
|
var/list/prints = target[2]
|
||||||
if(!prints)
|
if(!prints)
|
||||||
@@ -566,7 +601,7 @@ obj/machinery/computer/forensic_scanning
|
|||||||
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
|
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
|
||||||
blood += A.blood_DNA[j]
|
blood += A.blood_DNA[j]
|
||||||
var/list/sum_list[4] //Pack it back up!
|
var/list/sum_list[4] //Pack it back up!
|
||||||
sum_list[1] = A
|
sum_list[1] = atom_checker
|
||||||
sum_list[2] = prints
|
sum_list[2] = prints
|
||||||
sum_list[3] = fibers
|
sum_list[3] = fibers
|
||||||
sum_list[4] = blood
|
sum_list[4] = blood
|
||||||
@@ -575,7 +610,7 @@ obj/machinery/computer/forensic_scanning
|
|||||||
break //We found it, we're done here.
|
break //We found it, we're done here.
|
||||||
if(!found2) //Add a new datapoint to this perp!
|
if(!found2) //Add a new datapoint to this perp!
|
||||||
var/list/sum_list[4]
|
var/list/sum_list[4]
|
||||||
sum_list[1] = A
|
sum_list[1] = A.get_duplicate(src)
|
||||||
sum_list[2] = A.fingerprints
|
sum_list[2] = A.fingerprints
|
||||||
sum_list[3] = A.suit_fibers
|
sum_list[3] = A.suit_fibers
|
||||||
sum_list[4] = A.blood_DNA
|
sum_list[4] = A.blood_DNA
|
||||||
@@ -586,7 +621,7 @@ obj/machinery/computer/forensic_scanning
|
|||||||
if(found_prints[m] == 0)
|
if(found_prints[m] == 0)
|
||||||
var/list/newperp[2]
|
var/list/newperp[2]
|
||||||
var/list/sum_list[4]
|
var/list/sum_list[4]
|
||||||
sum_list[1] = A
|
sum_list[1] = A.get_duplicate(src)
|
||||||
sum_list[2] = A.fingerprints
|
sum_list[2] = A.fingerprints
|
||||||
sum_list[3] = A.suit_fibers
|
sum_list[3] = A.suit_fibers
|
||||||
sum_list[4] = A.blood_DNA
|
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
|
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.
|
//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++)
|
for(var/k = 1, k <= card.fingerprints.len, k++)
|
||||||
var/list/test_prints = params2list(card.fingerprints[k])
|
var/list/test_prints = params2list(card.fingerprints[k])
|
||||||
var/print = test_prints[num2text(1)]
|
var/print = test_prints[num2text(1)]
|
||||||
@@ -641,6 +676,12 @@ obj/machinery/computer/forensic_scanning
|
|||||||
files[i] = test_list
|
files[i] = test_list
|
||||||
break
|
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
|
return
|
||||||
|
|
||||||
proc/delete_record(var/location)
|
proc/delete_record(var/location)
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
|
|
||||||
/obj/item/weapon/evidencebag/afterattack(obj/item/O, mob/user as mob)
|
/obj/item/weapon/evidencebag/afterattack(obj/item/O, mob/user as mob)
|
||||||
if(istype(O, /obj/item/weapon/storage) && O in user)
|
if(istype(O, /obj/item/weapon/storage) && O in user)
|
||||||
user << "You put the evidence bag into the [O]."
|
|
||||||
return ..()
|
return ..()
|
||||||
if(!(O && istype(O)) || O.anchored == 1)
|
if(!(O && istype(O)) || O.anchored == 1)
|
||||||
user << "You can't put that inside the [src]!"
|
user << "You can't put that inside the [src]!"
|
||||||
|
|||||||
@@ -1747,7 +1747,18 @@
|
|||||||
J.spawn_positions = -1
|
J.spawn_positions = -1
|
||||||
message_admins("[key_name_admin(usr)] has removed the cap on security officers.")
|
message_admins("[key_name_admin(usr)] has removed the cap on security officers.")
|
||||||
return
|
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
|
///////////////////////////////////////////////////////////////////////////////////////////////Panels
|
||||||
|
|
||||||
|
|||||||
@@ -141,6 +141,7 @@
|
|||||||
verbs += /client/proc/callprocobj
|
verbs += /client/proc/callprocobj
|
||||||
verbs += /client/proc/cmd_debug_prints
|
verbs += /client/proc/cmd_debug_prints
|
||||||
verbs += /client/proc/cmd_debug_blood
|
verbs += /client/proc/cmd_debug_blood
|
||||||
|
verbs += /client/proc/rnd_check_designs
|
||||||
|
|
||||||
if (holder.level >= 5)//Game Admin********************************************************************
|
if (holder.level >= 5)//Game Admin********************************************************************
|
||||||
verbs += /obj/admins/proc/view_txt_log
|
verbs += /obj/admins/proc/view_txt_log
|
||||||
@@ -422,6 +423,7 @@
|
|||||||
verbs -= /client/proc/radioalert
|
verbs -= /client/proc/radioalert
|
||||||
verbs -= /client/proc/cmd_debug_prints
|
verbs -= /client/proc/cmd_debug_prints
|
||||||
verbs -= /client/proc/cmd_debug_blood
|
verbs -= /client/proc/cmd_debug_blood
|
||||||
|
verbs -= /client/proc/rnd_check_designs
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -862,4 +862,31 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
|||||||
|
|
||||||
ticker.random_players = 1
|
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")
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
|
|
||||||
/obj/machinery/chem_dispenser/process()
|
/obj/machinery/chem_dispenser/process()
|
||||||
if(stat & NOPOWER) return
|
if(stat & NOPOWER) return
|
||||||
if(!charging_reagents) return
|
if(!charging_reagents || src.energy > 30) return
|
||||||
|
|
||||||
use_power(10000)
|
use_power(10000)
|
||||||
src.energy += 0.05
|
src.energy += 0.05
|
||||||
@@ -331,7 +331,7 @@
|
|||||||
else if(href_list["pill_sprite"])
|
else if(href_list["pill_sprite"])
|
||||||
pillsprite = href_list["pill_sprite"]
|
pillsprite = href_list["pill_sprite"]
|
||||||
else if(href_list["bottle_sprite"])
|
else if(href_list["bottle_sprite"])
|
||||||
bottlesprite = href_list["bottlesprite"]
|
bottlesprite = href_list["bottle_sprite"]
|
||||||
else
|
else
|
||||||
usr << browse(null, "window=chem_master")
|
usr << browse(null, "window=chem_master")
|
||||||
src.updateUsrDialog()
|
src.updateUsrDialog()
|
||||||
|
|||||||
@@ -1413,6 +1413,7 @@
|
|||||||
else user << "\red [M] finishes eating [src]."
|
else user << "\red [M] finishes eating [src]."
|
||||||
del(src)
|
del(src)
|
||||||
playsound(M.loc,'eatfood.ogg', rand(10,50), 1)
|
playsound(M.loc,'eatfood.ogg', rand(10,50), 1)
|
||||||
|
user.update_clothing()
|
||||||
return 1
|
return 1
|
||||||
else if(istype(M, /mob/living/simple_animal/livestock))
|
else if(istype(M, /mob/living/simple_animal/livestock))
|
||||||
if(M == user) //If you're eating it yourself.
|
if(M == user) //If you're eating it yourself.
|
||||||
@@ -1465,6 +1466,8 @@
|
|||||||
if(!reagents.total_volume)
|
if(!reagents.total_volume)
|
||||||
if(M == user) user << "\red You finish eating [src]."
|
if(M == user) user << "\red You finish eating [src]."
|
||||||
else user << "\red [M] finishes eating [src]."
|
else user << "\red [M] finishes eating [src]."
|
||||||
|
spawn(2)
|
||||||
|
user.update_clothing()
|
||||||
del(src)
|
del(src)
|
||||||
playsound(M.loc,'eatfood.ogg', rand(10,50), 1)
|
playsound(M.loc,'eatfood.ogg', rand(10,50), 1)
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -130,7 +130,7 @@
|
|||||||
var/pr = 50
|
var/pr = 50
|
||||||
if(prob(pr))
|
if(prob(pr))
|
||||||
adjustToxLoss(1)
|
adjustToxLoss(1)
|
||||||
else
|
else if (stat != 0)
|
||||||
if(!lying)
|
if(!lying)
|
||||||
lying = 1 //Seriously, stay down :x
|
lying = 1 //Seriously, stay down :x
|
||||||
update_clothing()
|
update_clothing()
|
||||||
|
|||||||
18
code/modules/mob/living/silicon/ai/laws.dm
Normal file → Executable file
18
code/modules/mob/living/silicon/ai/laws.dm
Normal file → Executable file
@@ -20,33 +20,51 @@
|
|||||||
if (!src.laws)
|
if (!src.laws)
|
||||||
src.laws = new /datum/ai_laws/nanotrasen
|
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)
|
/mob/living/silicon/ai/proc/set_zeroth_law(var/law)
|
||||||
src.laws_sanity_check()
|
src.laws_sanity_check()
|
||||||
src.laws.set_zeroth_law(law)
|
src.laws.set_zeroth_law(law)
|
||||||
|
src.notify_linked_cyborgs()
|
||||||
|
|
||||||
/mob/living/silicon/ai/proc/add_inherent_law(var/law)
|
/mob/living/silicon/ai/proc/add_inherent_law(var/law)
|
||||||
src.laws_sanity_check()
|
src.laws_sanity_check()
|
||||||
src.laws.add_inherent_law(law)
|
src.laws.add_inherent_law(law)
|
||||||
|
src.notify_linked_cyborgs()
|
||||||
|
|
||||||
/mob/living/silicon/ai/proc/clear_inherent_laws()
|
/mob/living/silicon/ai/proc/clear_inherent_laws()
|
||||||
src.laws_sanity_check()
|
src.laws_sanity_check()
|
||||||
src.laws.clear_inherent_laws()
|
src.laws.clear_inherent_laws()
|
||||||
|
src.notify_linked_cyborgs()
|
||||||
|
|
||||||
/mob/living/silicon/ai/proc/add_ion_law(var/law)
|
/mob/living/silicon/ai/proc/add_ion_law(var/law)
|
||||||
src.laws_sanity_check()
|
src.laws_sanity_check()
|
||||||
src.laws.add_ion_law(law)
|
src.laws.add_ion_law(law)
|
||||||
|
src.notify_linked_cyborgs()
|
||||||
|
|
||||||
/mob/living/silicon/ai/proc/clear_ion_laws()
|
/mob/living/silicon/ai/proc/clear_ion_laws()
|
||||||
src.laws_sanity_check()
|
src.laws_sanity_check()
|
||||||
src.laws.clear_ion_laws()
|
src.laws.clear_ion_laws()
|
||||||
|
src.notify_linked_cyborgs()
|
||||||
|
|
||||||
/mob/living/silicon/ai/proc/add_supplied_law(var/number, var/law)
|
/mob/living/silicon/ai/proc/add_supplied_law(var/number, var/law)
|
||||||
src.laws_sanity_check()
|
src.laws_sanity_check()
|
||||||
src.laws.add_supplied_law(number, law)
|
src.laws.add_supplied_law(number, law)
|
||||||
|
src.notify_linked_cyborgs()
|
||||||
|
|
||||||
/mob/living/silicon/ai/proc/clear_supplied_laws()
|
/mob/living/silicon/ai/proc/clear_supplied_laws()
|
||||||
src.laws_sanity_check()
|
src.laws_sanity_check()
|
||||||
src.laws.clear_supplied_laws()
|
src.laws.clear_supplied_laws()
|
||||||
|
src.notify_linked_cyborgs()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -188,6 +188,7 @@
|
|||||||
var/turf/T = get_turf(loc)
|
var/turf/T = get_turf(loc)
|
||||||
if (istype(T))
|
if (istype(T))
|
||||||
T.Entered(W)
|
T.Entered(W)
|
||||||
|
update_clothing()
|
||||||
return
|
return
|
||||||
|
|
||||||
/mob/proc/before_take_item(var/obj/item/item)
|
/mob/proc/before_take_item(var/obj/item/item)
|
||||||
|
|||||||
@@ -170,13 +170,7 @@ datum/preferences
|
|||||||
dat += "<hr><b>Eyes</b><br>"
|
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 += "<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 += "<hr><b><a href=\"byond://?src=\ref[user];preferences=1;disabilities=-1\">Disabilities</a></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>Flavor Text</b><br>"
|
dat += "<hr><b>Flavor Text</b><br>"
|
||||||
dat += "<a href='byond://?src=\ref[user];preferences=1;flavor_text=1'>Change</a><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)
|
proc/closesave(mob/user)
|
||||||
user << browse(null, "window=saves;size=300x640")
|
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)
|
proc/GetAltTitle(datum/job/job)
|
||||||
return job_alt_titles.Find(job.title) > 0 \
|
return job_alt_titles.Find(job.title) > 0 \
|
||||||
? job_alt_titles[job.title] \
|
? job_alt_titles[job.title] \
|
||||||
@@ -694,7 +708,13 @@ datum/preferences
|
|||||||
midis = 1
|
midis = 1
|
||||||
disabilities = 0
|
disabilities = 0
|
||||||
if(link_tags["disabilities"])
|
if(link_tags["disabilities"])
|
||||||
|
if(text2num(link_tags["disabilities"]) >= -1)
|
||||||
|
if(text2num(link_tags["disabilities"]) >= 0)
|
||||||
disabilities ^= (1<<text2num(link_tags["disabilities"])) //MAGIC
|
disabilities ^= (1<<text2num(link_tags["disabilities"])) //MAGIC
|
||||||
|
SetDisabilities(user)
|
||||||
|
return
|
||||||
|
else
|
||||||
|
user << browse(null, "window=disabil")
|
||||||
|
|
||||||
ShowChoices(user)
|
ShowChoices(user)
|
||||||
|
|
||||||
|
|||||||
@@ -221,8 +221,7 @@
|
|||||||
/obj/item/proc/wrap(obj/item/I as obj, mob/user as mob)
|
/obj/item/proc/wrap(obj/item/I as obj, mob/user as mob)
|
||||||
if(istype(I, /obj/item/weapon/packageWrap))
|
if(istype(I, /obj/item/weapon/packageWrap))
|
||||||
var/obj/item/weapon/packageWrap/C = I
|
var/obj/item/weapon/packageWrap/C = I
|
||||||
if(!istype(src.loc,/turf))
|
if(anchored)
|
||||||
user << "\red You need to place the item on the ground or a table before wrapping it!"
|
|
||||||
return
|
return
|
||||||
else if (C.amount > 1)
|
else if (C.amount > 1)
|
||||||
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(src.loc))
|
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(src.loc))
|
||||||
|
|||||||
@@ -330,6 +330,7 @@ datum
|
|||||||
materials = list("$glass" = 2000, "acid" = 20)
|
materials = list("$glass" = 2000, "acid" = 20)
|
||||||
build_path = "/obj/item/weapon/circuitboard/supplycomp"
|
build_path = "/obj/item/weapon/circuitboard/supplycomp"
|
||||||
|
|
||||||
|
/* is not a thing
|
||||||
mining
|
mining
|
||||||
name = "Circuit Design (Outpost Status Display)"
|
name = "Circuit Design (Outpost Status Display)"
|
||||||
desc = "Allows for the construction of circuit boards used to build an outpost status display console."
|
desc = "Allows for the construction of circuit boards used to build an outpost status display console."
|
||||||
@@ -338,6 +339,7 @@ datum
|
|||||||
build_type = IMPRINTER
|
build_type = IMPRINTER
|
||||||
materials = list("$glass" = 2000, "acid" = 20)
|
materials = list("$glass" = 2000, "acid" = 20)
|
||||||
build_path = "/obj/item/weapon/circuitboard/mining"
|
build_path = "/obj/item/weapon/circuitboard/mining"
|
||||||
|
*/
|
||||||
|
|
||||||
firealarm
|
firealarm
|
||||||
name = "Circuit Design (Fire Alarm)"
|
name = "Circuit Design (Fire Alarm)"
|
||||||
@@ -533,30 +535,34 @@ datum
|
|||||||
req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2)
|
req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2)
|
||||||
build_type = IMPRINTER
|
build_type = IMPRINTER
|
||||||
materials = list("$glass" = 2000, "acid" = 20)
|
materials = list("$glass" = 2000, "acid" = 20)
|
||||||
|
build_path = "/obj/item/weapon/circuitboard/telecomms/receiver"
|
||||||
|
|
||||||
telecomms_bus
|
telecomms_bus
|
||||||
name = "Circuit Design (Bus Mainframe)"
|
name = "Circuit Design (Telecom Bus Mainframe)"
|
||||||
desc = "Allows for the construction of Telecommunications Bus Mainframes."
|
desc = "Allows for the construction of Telecommunications Bus Mainframes."
|
||||||
id = "s-bus"
|
id = "s-bus"
|
||||||
req_tech = list("programming" = 4, "engineering" = 4)
|
req_tech = list("programming" = 4, "engineering" = 4)
|
||||||
build_type = IMPRINTER
|
build_type = IMPRINTER
|
||||||
materials = list("$glass" = 2000, "acid" = 20)
|
materials = list("$glass" = 2000, "acid" = 20)
|
||||||
|
build_path = "/obj/item/weapon/circuitboard/telecomms/bus"
|
||||||
|
|
||||||
telecomms_processor
|
telecomms_processor
|
||||||
name = "Circuit Design (Processor Unit)"
|
name = "Circuit Design (Telecom Processor Unit)"
|
||||||
desc = "Allows for the construction of Telecommunications Processor equipment."
|
desc = "Allows for the construction of Telecommunications Processor equipment."
|
||||||
id = "s-processor"
|
id = "s-processor"
|
||||||
req_tech = list("programming" = 4, "engineering" = 4)
|
req_tech = list("programming" = 4, "engineering" = 4)
|
||||||
build_type = IMPRINTER
|
build_type = IMPRINTER
|
||||||
materials = list("$glass" = 2000, "acid" = 20)
|
materials = list("$glass" = 2000, "acid" = 20)
|
||||||
|
build_path = "/obj/item/weapon/circuitboard/telecomms/processor"
|
||||||
|
|
||||||
telecomms_server
|
telecomms_server
|
||||||
name = "Circuit Design (Subspace Receiver)"
|
name = "Circuit Design (Telecom Server)"
|
||||||
desc = "Allows for the construction of Telecommunications Servers."
|
desc = "Allows for the construction of Telecommunications Servers."
|
||||||
id = "s-server"
|
id = "s-server"
|
||||||
req_tech = list("programming" = 4, "engineering" = 4)
|
req_tech = list("programming" = 4, "engineering" = 4)
|
||||||
build_type = IMPRINTER
|
build_type = IMPRINTER
|
||||||
materials = list("$glass" = 2000, "acid" = 20)
|
materials = list("$glass" = 2000, "acid" = 20)
|
||||||
|
build_path = "/obj/item/weapon/circuitboard/telecomms/server"
|
||||||
|
|
||||||
subspace_broadcaster
|
subspace_broadcaster
|
||||||
name = "Circuit Design (Subspace Broadcaster)"
|
name = "Circuit Design (Subspace Broadcaster)"
|
||||||
@@ -565,6 +571,7 @@ datum
|
|||||||
req_tech = list("programming" = 4, "engineering" = 4, "bluespace" = 2)
|
req_tech = list("programming" = 4, "engineering" = 4, "bluespace" = 2)
|
||||||
build_type = IMPRINTER
|
build_type = IMPRINTER
|
||||||
materials = list("$glass" = 2000, "acid" = 20)
|
materials = list("$glass" = 2000, "acid" = 20)
|
||||||
|
build_path = "/obj/item/weapon/circuitboard/telecomms/broadcaster"
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 63 KiB |
5037
maps/Antiqua.dmm
5037
maps/Antiqua.dmm
File diff suppressed because it is too large
Load Diff
11294
maps/tgstation.2.0.8.dmm
11294
maps/tgstation.2.0.8.dmm
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user