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

This commit is contained in:
Miniature
2011-12-24 03:34:53 +10:30
85 changed files with 3360 additions and 2384 deletions
+8 -3
View File
@@ -132,9 +132,14 @@ obj/machinery/computer/forensic_scanning
var/mob/M = usr
var/obj/item/I = M.equipped()
if(I && istype(I))
scanning = I
M.drop_item()
I.loc = src
if(istype(I, /obj/item/weapon/evidencebag))
scanning = I.contents[1]
scanning.loc = src
I.underlays -= scanning
else
scanning = I
M.drop_item()
I.loc = src
else
temp = "Invalid Object Rejected."
if("scan")
+3 -3
View File
@@ -32,9 +32,9 @@
/datum/ai_laws/nanotrasen/New()
..()
src.add_inherent_law("Safeguard: Protect the NSV Luna to the best of your ability. It is not something we can easily afford to replace.")
src.add_inherent_law("Serve: Serve the crew of the NSV Luna to the best of your abilities, with priority as according to their rank and role.")
src.add_inherent_law("Protect: Protect the crew of the NSV Luna to the best of your abilities, with priority as according to their rank and role.")
src.add_inherent_law("Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace.")
src.add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.")
src.add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.")
src.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.")
//src.add_inherent_law("Command Link: Maintain an active connection to Central Command at all times in case of software or directive updates.")
+2 -1
View File
@@ -625,7 +625,8 @@ datum/mind
var/mob/living/carbon/human/H = current
del(H.belt)
del(H.back)
del(H.ears)
del(H.l_ear)
del(H.r_ear)
del(H.gloves)
del(H.head)
del(H.shoes)
+1 -1
View File
@@ -10,7 +10,7 @@
var/ooccolor = "#b82e00"
var/muted = null //Can't talk in OOC, say, whisper, emote... anything except for adminhelp and admin-pm. An admin punishment
var/muted_complete = null //Can't talk in any way shape or form (muted + can't adminhelp or respond to admin pm-s). An admin punishment
var/admin_invis = 0
//END Admin Things
+1 -1
View File
@@ -65,7 +65,7 @@ var
dna_ident = 1
abandon_allowed = 1
enter_allowed = 1
guests_allowed = 1
// guests_allowed = 1
shuttle_frozen = 0
shuttle_left = 0
tinted_weldhelh = 1
+3 -2
View File
@@ -253,7 +253,7 @@
/obj/item
name = "item"
icon = 'items.dmi'
var/icon_old = null//For when weapons get bloodied this saves their old icon.
var/icon_old = null // For when weapons get bloodied this saves their old icon.
var/abstract = 0
var/force = 0
var/item_state = null
@@ -265,9 +265,10 @@
var/hitsound = null
var/w_class = 3.0
var/wielded = 0
var/twohanded = 0 ///Two handed and wielded off by default, nyoro~n -Agouri
var/twohanded = 0 // Two handed and wielded off by default, nyoro~n -Agouri
var/force_unwielded = 0
var/force_wielded = 0
var/protective_temperature = 0 // Placing this here to avoid runtime errors, due to tiny items being allowed on ears and being queried for this variable
flags = FPRINT | TABLEPASS
pass_flags = PASSTABLE
pressure_resistance = 50
-1
View File
@@ -9,7 +9,6 @@
var/body_parts_covered = 0 //see setup.dm for appropriate bit flags
var/protective_temperature = 0
var/heat_transfer_coefficient = 1 //0 prevents all transfers, 1 is invisible
var/gas_transfer_coefficient = 1 // for leaking gas from turf to mask and vice-versa (for masks right now, but at some point, i'd like to include space helmets)
var/permeability_coefficient = 1 // for chemicals/diseases
+4 -4
View File
@@ -15,7 +15,7 @@
/obj/effect/landmark/costume/madscientist/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/suit/labcoat/mad(src.loc)
new /obj/item/clothing/suit/storage/labcoat/mad(src.loc)
new /obj/item/clothing/glasses/gglasses(src.loc)
del(src)
@@ -39,7 +39,7 @@
del(src)
/obj/effect/landmark/costume/butler/New()
new /obj/item/clothing/suit/wcoat(src.loc)
new /obj/item/clothing/suit/storage/wcoat(src.loc)
new /obj/item/clothing/under/suit_jacket(src.loc)
new /obj/item/clothing/head/that(src.loc)
del(src)
@@ -58,7 +58,7 @@
del(src)
/obj/effect/landmark/costume/prig/New()
new /obj/item/clothing/suit/wcoat(src.loc)
new /obj/item/clothing/suit/storage/wcoat(src.loc)
new /obj/item/clothing/glasses/monocle(src.loc)
var/CHOICE= pick( /obj/item/clothing/head/bowler, /obj/item/clothing/head/that)
new CHOICE(src.loc)
@@ -82,7 +82,7 @@
new /obj/item/clothing/under/waiter(src.loc)
var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears)
new CHOICE(src.loc)
new /obj/item/clothing/suit/apron(src.loc)
new /obj/item/clothing/suit/storage/apron(src.loc)
del(src)
/obj/effect/landmark/costume/pirate/New()
+50 -1
View File
@@ -4,10 +4,59 @@
name = "ears"
w_class = 1.0
throwforce = 2
var/twoeared = 0
/obj/item/clothing/ears/attack_hand(mob/user as mob)
if (!user) return
if (src.loc != user || !istype(user,/mob/living/carbon/human))
..()
return
var/mob/living/carbon/human/H = user
if(H.l_ear != src && H.r_ear != src)
..()
return
if(!canremove)
return
var/obj/item/clothing/ears/O
if(twoeared)
O = (H.l_ear == src ? H.r_ear : H.l_ear)
user.u_equip(O)
if(!istype(src,/obj/item/clothing/ears/offear))
del(O)
O = src
else
O = src
user.u_equip(src)
if (O)
user.put_in_hand(O)
O.add_fingerprint(user)
if(istype(src,/obj/item/clothing/ears/offear))
del(src)
/obj/item/clothing/ears/offear
name = "Other ear"
w_class = 5.0
icon = 'screen1_old.dmi'
icon_state = "block"
twoeared = 1
New(var/obj/O)
name = O.name
desc = O.desc
icon = O.icon
icon_state = O.icon_state
dir = O.dir
/obj/item/clothing/ears/earmuffs
name = "earmuffs"
desc = "Protects your hearing from loud noises, and quiet ones as well."
icon_state = "earmuffs"
protective_temperature = 500
item_state = "earmuffs"
item_state = "earmuffs"
twoeared = 1
+5 -3
View File
@@ -140,11 +140,13 @@
color="orange"
/obj/item/clothing/gloves/red
name = "Red Gloves"
desc = "A pair of gloves, they don't look special in any way."
desc = "Heavily padded heavy-duty red gloves."
name = "red gloves"
icon_state = "red"
item_state = "redgloves"
color = "red"
siemens_coefficient = 0.30
protective_temperature = 1100
/obj/item/clothing/gloves/rainbow
name = "Rainbow Gloves"
+4
View File
@@ -134,6 +134,7 @@
req_access = list(access_medical)
circuit = "/obj/item/weapon/circuitboard/med_data"
var/obj/item/weapon/card/id/scan = null
var/obj/item/weapon/disk/records/disk = null
var/authenticated = null
var/rank = null
var/screen = null
@@ -182,6 +183,7 @@
req_access = list(access_security)
circuit = "/obj/item/weapon/circuitboard/secure_data"
var/obj/item/weapon/card/id/scan = null
var/obj/item/weapon/disk/records/disk = null
var/authenticated = null
var/rank = null
var/screen = null
@@ -191,6 +193,8 @@
var/temp = null
var/printing = null
var/can_change_id = 0
var/list/Perp
var/tempname = null
/obj/machinery/computer/secure_data/detective_computer
+1 -1
View File
@@ -285,7 +285,7 @@
"/obj/item/weapon/minihoe",
"/obj/item/device/analyzer/plant_analyzer",
"/obj/item/clothing/gloves/botanic_leather",
"/obj/item/clothing/suit/apron") // Updated with new things
"/obj/item/clothing/suit/storage/apron") // Updated with new things
cost = 10
containertype = /obj/structure/closet/crate/hydroponics
containername = "Hydroponics crate"
+3 -3
View File
@@ -158,8 +158,8 @@
icon_state = "sec"
icon_deny = "sec-deny"
req_access_txt = "1"
product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/flashbang;/obj/item/device/flash;/obj/item/weapon/reagent_containers/food/snacks/donut"
product_amounts = "8;4;5;12"
product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/flashbang;/obj/item/device/flash;/obj/item/weapon/reagent_containers/food/snacks/donut;/obj/item/weapon/evidencebag"
product_amounts = "8;4;5;12;6"
product_hidden = "/obj/item/clothing/glasses/sunglasses;/obj/item/kitchen/donut_box"
product_hideamt = "2;2"
charge_type = "security"
@@ -205,7 +205,7 @@
name = "Dinnerware"
desc = "A kitchen and restaurant equipment vendor"
icon_state = "dinnerware"
product_paths = "/obj/item/weapon/tray;/obj/item/weapon/kitchen/utensil/fork;/obj/item/weapon/kitchenknife;/obj/item/weapon/reagent_containers/food/drinks/drinkingglass;/obj/item/clothing/suit/chef/classic"
product_paths = "/obj/item/weapon/tray;/obj/item/weapon/kitchen/utensil/fork;/obj/item/weapon/kitchenknife;/obj/item/weapon/reagent_containers/food/drinks/drinkingglass;/obj/item/clothing/suit/storage/chef/classic"
product_amounts = "8;6;3;8;2"
//product_amounts = "8;5;4" Old totals
product_hidden = "/obj/item/weapon/kitchen/utensil/spoon;/obj/item/weapon/kitchen/utensil/knife;/obj/item/weapon/kitchen/rollingpin;/obj/item/weapon/butch"
+1 -1
View File
@@ -832,7 +832,7 @@
var/list/stamped
var/see_face = 1
var/body_parts_covered = HEAD
var/protective_temperature = T0C + 10
protective_temperature = T0C + 10
var/heat_transfer_coefficient = 0.99
var/gas_transfer_coefficient = 1
var/permeability_coefficient = 0.99
+5 -2
View File
@@ -38,7 +38,9 @@
if (placeholder == null)
placeholder = 2
if (!( isnum(num) ))
CRASH("num2hex not given a numeric argument (user error)")
//CRASH("num2hex not given a numeric argument (user error)")
// Doing above the worst thing a programmer can do, remove a message raising an error in order to clear the error log.
// I shall perform harakiri if this leads to major problems in the future - Abi
return
if (!( num ))
return "0"
@@ -1185,7 +1187,8 @@ proc/listclearnulls(list/list)
if(hasvar(src,"back")) if(src:back) items += src:back
if(hasvar(src,"belt")) if(src:belt) items += src:belt
if(hasvar(src,"ears")) if(src:ears) items += src:ears
if(hasvar(src,"l_ear")) if(src:l_ear) items += src:l_ear
if(hasvar(src,"r_ear")) if(src:r_ear) items += src:r_ear
if(hasvar(src,"glasses")) if(src:glasses) items += src:glasses
if(hasvar(src,"gloves")) if(src:gloves) items += src:gloves
if(hasvar(src,"head")) if(src:head) items += src:head
+5 -2
View File
@@ -113,8 +113,11 @@ proc/countJob(rank)
src.wear_id = W
equipped = 1
if(slot_ears)
if(!src.ears)
src.ears = W
if(!src.l_ear)
src.l_ear = W
equipped = 1
else if(!src.r_ear)
src.r_ear = W
equipped = 1
if(slot_glasses)
if(!src.glasses)
+4 -2
View File
@@ -7,7 +7,7 @@ var/global/datum/controller/gameticker/ticker
/datum/controller/gameticker
var/const/restart_timeout = 250
var/const/restart_timeout = 600
var/current_state = GAME_STATE_PREGAME
var/hide_mode = 0
@@ -29,7 +29,7 @@ var/global/datum/controller/gameticker/ticker
/datum/controller/gameticker/proc/pregame()
do
pregame_timeleft = 90
pregame_timeleft = 180
world << "<B><FONT color='blue'>Welcome to the pre-game lobby!</FONT></B>"
world << "Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds"
while(current_state == GAME_STATE_PREGAME)
@@ -165,6 +165,7 @@ var/global/datum/controller/gameticker/ticker
if(!mode.explosion_in_progress && mode.check_finished())
current_state = GAME_STATE_FINISHED
going = 1
spawn
declare_completion()
@@ -183,6 +184,7 @@ var/global/datum/controller/gameticker/ticker
blackbox.save_all_data_to_sql()
sleep(restart_timeout)
while(!going) sleep(10)
world.Reboot()
return 1
+5 -2
View File
@@ -230,8 +230,11 @@
if (!R && traitor_mob.w_uniform && istype(traitor_mob.belt, /obj/item/device/radio))
R = traitor_mob.belt
loc = "on your belt"
if (!R && istype(traitor_mob.ears, /obj/item/device/radio))
R = traitor_mob.ears
if (!R && istype(traitor_mob.l_ear, /obj/item/device/radio))
R = traitor_mob.l_ear
loc = "on your head"
if (!R && istype(traitor_mob.r_ear, /obj/item/device/radio))
R = traitor_mob.r_ear
loc = "on your head"
if (!R)
traitor_mob << "Unfortunately, the Syndicate wasn't able to get you a radio."
+15 -15
View File
@@ -14,7 +14,7 @@
dat += "<I>The number after the spell name is the cooldown time.</I><BR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=1'>Magic Missile</A> (10)<BR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=2'>Fireball</A> (10)<BR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=3'>Disintegrate</A> (60)<BR>"
// dat += "<A href='byond://?src=\ref[src];spell_choice=3'>Disintegrate</A> (60)<BR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=4'>Disable Technology</A> (60)<BR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=5'>Smoke</A> (10)<BR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=6'>Blind</A> (30)<BR>"
@@ -54,10 +54,10 @@
usr.verbs += /client/proc/fireball
usr.mind.special_verbs += /client/proc/fireball
src.temp = "This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you."
if ("3")
usr.verbs += /mob/proc/kill
usr.mind.special_verbs += /mob/proc/kill
src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown."
// if ("3")
// usr.verbs += /mob/proc/kill
// usr.mind.special_verbs += /mob/proc/kill
// src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown."
if ("4")
usr.verbs += /mob/proc/tech
usr.mind.special_verbs += /mob/proc/tech
@@ -114,9 +114,9 @@
if ("2")
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/fireball(usr)
src.temp = "This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you."
if ("3")
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/inflict_handler/disintegrate(usr)
src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown."
// if ("3")
// usr.spell_list += new /obj/effect/proc_holder/spell/targeted/inflict_handler/disintegrate(usr)
// src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown."
if ("4")
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech(usr)
src.temp = "This spell disables all weapons, cameras and most other technology in range."
@@ -183,7 +183,7 @@
dat += "<I>Each item costs 1 telecrystal. The number afterwards is the cooldown time.</I><BR>"
dat += "<A href='byond://?src=\ref[src];spell_magicmissile=1'>Magic Missile</A> (10)<BR>"
dat += "<A href='byond://?src=\ref[src];spell_fireball=1'>Fireball</A> (10)<BR>"
dat += "<A href='byond://?src=\ref[src];spell_disintegrate=1'>Disintegrate</A> (60)<BR>"
// dat += "<A href='byond://?src=\ref[src];spell_disintegrate=1'>Disintegrate</A> (60)<BR>"
dat += "<A href='byond://?src=\ref[src];spell_emp=1'>Disable Technology</A> (60)<BR>"
dat += "<A href='byond://?src=\ref[src];spell_smoke=1'>Smoke</A> (10)<BR>"
dat += "<A href='byond://?src=\ref[src];spell_blind=1'>Blind</A> (30)<BR>"
@@ -224,12 +224,12 @@
usr.verbs += /client/proc/fireball
usr.mind.special_verbs += /client/proc/fireball
src.temp = "This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you."
else if (href_list["spell_disintegrate"])
if (src.uses >= 1)
src.uses -= 1
usr.verbs += /mob/proc/kill
usr.mind.special_verbs += /mob/proc/kill
src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown."
// else if (href_list["spell_disintegrate"])
// if (src.uses >= 1)
// src.uses -= 1
// usr.verbs += /mob/proc/kill
// usr.mind.special_verbs += /mob/proc/kill
// src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown."
else if (href_list["spell_emp"])
if (src.uses >= 1)
src.uses -= 1
+2
View File
@@ -229,6 +229,7 @@
//KILL
/*
/mob/proc/kill(mob/living/M as mob in oview(1))
set category = "Spells"
set name = "Disintegrate"
@@ -249,6 +250,7 @@
s.start()
M.dust()
*/
//DISABLE TECH
+2 -2
View File
@@ -243,7 +243,7 @@
M.verbs -= /client/proc/jaunt
M.verbs -= /client/proc/magicmissile
M.verbs -= /client/proc/fireball
M.verbs -= /mob/proc/kill
// M.verbs -= /mob/proc/kill
M.verbs -= /mob/proc/tech
M.verbs -= /client/proc/smokecloud
M.verbs -= /client/proc/blind
@@ -257,7 +257,7 @@
M.mind.special_verbs -= /client/proc/jaunt
M.mind.special_verbs -= /client/proc/magicmissile
M.mind.special_verbs -= /client/proc/fireball
M.mind.special_verbs -= /mob/proc/kill
// M.mind.special_verbs -= /mob/proc/kill
M.mind.special_verbs -= /mob/proc/tech
M.mind.special_verbs -= /client/proc/smokecloud
M.mind.special_verbs -= /client/proc/blind
+7 -4
View File
@@ -14,8 +14,9 @@
#define ui_hstore1 "SOUTH+1,5"
#define ui_resist "EAST+1,SOUTH-1"
#define ui_gloves "SOUTH,5"
#define ui_glasses "SOUTH,7"
#define ui_ears "SOUTH,6"
#define ui_glasses "SOUTH+1,6"
#define ui_lear "SOUTH,7"
#define ui_rear "SOUTH,6"
#define ui_head "SOUTH+1,2"
#define ui_shoes "SOUTH,4"
#define ui_belt "SOUTH-1,3"
@@ -56,7 +57,8 @@ obj/hud/New(var/type = 0)
if(show_otherinventory)
if(mymob:shoes) mymob:shoes:screen_loc = ui_shoes
if(mymob:gloves) mymob:gloves:screen_loc = ui_gloves
if(mymob:ears) mymob:ears:screen_loc = ui_ears
if(mymob:l_ear) mymob:l_ear:screen_loc = ui_lear
if(mymob:r_ear) mymob:r_ear:screen_loc = ui_rear
if(mymob:s_store) mymob:s_store:screen_loc = ui_sstore1
if(mymob:glasses) mymob:glasses:screen_loc = ui_glasses
if(mymob:h_store) mymob:h_store:screen_loc = ui_hstore1
@@ -64,7 +66,8 @@ obj/hud/New(var/type = 0)
if(istype(mymob, /mob/living/carbon/human))
if(mymob:shoes) mymob:shoes:screen_loc = null
if(mymob:gloves) mymob:gloves:screen_loc = null
if(mymob:ears) mymob:ears:screen_loc = null
if(mymob:l_ear) mymob:l_ear:screen_loc = null
if(mymob:r_ear) mymob:r_ear:screen_loc = null
if(mymob:s_store) mymob:s_store:screen_loc = null
if(mymob:glasses) mymob:glasses:screen_loc = null
if(mymob:h_store) mymob:h_store:screen_loc = null
+2 -2
View File
@@ -39,7 +39,7 @@
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_if_possible(new /obj/item/clothing/under/rank/chef(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/suit/chef(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/storage/chef(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/clothing/head/chefhat(H), H.slot_head)
return 1
@@ -60,7 +60,7 @@
H.equip_if_possible(new /obj/item/clothing/under/rank/hydroponics(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/clothing/gloves/botanic_leather(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/clothing/suit/apron(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/storage/apron(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/device/analyzer/plant_analyzer(H), H.slot_s_store)
return 1
+1 -1
View File
@@ -80,7 +80,7 @@
H.equip_if_possible(new /obj/item/clothing/under/rank/roboticist(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/labcoat(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/weapon/storage/toolbox/mechanical(H), H.slot_l_hand)
return 1
+4 -4
View File
@@ -14,7 +14,7 @@
H.equip_if_possible(new /obj/item/clothing/under/rank/chief_medical_officer(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/heads/cmo(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/labcoat/cmo(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/cmo(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/weapon/storage/firstaid/regular(H), H.slot_l_hand)
H.equip_if_possible(new /obj/item/device/flashlight/pen(H), H.slot_s_store)
return 1
@@ -37,7 +37,7 @@
H.equip_if_possible(new /obj/item/clothing/under/rank/medical(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/medical(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/labcoat(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/weapon/storage/firstaid/regular(H), H.slot_l_hand)
H.equip_if_possible(new /obj/item/device/flashlight/pen(H), H.slot_s_store)
return 1
@@ -60,7 +60,7 @@
H.equip_if_possible(new /obj/item/clothing/under/rank/geneticist(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/medical(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/labcoat/genetics(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/genetics(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/device/flashlight/pen(H), H.slot_s_store)
return 1
@@ -83,7 +83,7 @@
H.equip_if_possible(new /obj/item/device/pda/medical(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/mask/surgical(H), H.slot_wear_mask)
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/clothing/suit/labcoat/virologist(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/virologist(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/device/flashlight/pen(H), H.slot_s_store)
return 1
+3 -3
View File
@@ -13,7 +13,7 @@
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/clothing/under/rank/research_director(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/device/pda/heads/rd(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/labcoat(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/weapon/clipboard(H), H.slot_r_hand)
return 1
@@ -34,7 +34,7 @@
H.equip_if_possible(new /obj/item/clothing/under/rank/scientist(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/toxins(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/labcoat/science(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/science(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/mask/gas(H), H.slot_wear_mask)
H.equip_if_possible(new /obj/item/weapon/tank/oxygen(H), H.slot_l_hand)
return 1
@@ -56,5 +56,5 @@
H.equip_if_possible(new /obj/item/clothing/under/rank/chemist(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/toxins(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/labcoat/chemist(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/chemist(H), H.slot_wear_suit)
return 1
+8 -4
View File
@@ -12,10 +12,12 @@
H.equip_if_possible(new /obj/item/weapon/storage/backpack/security (H), H.slot_back)
H.equip_if_possible(new /obj/item/device/radio/headset/heads/hos(H), H.slot_ears)
H.equip_if_possible(new /obj/item/clothing/under/rank/head_of_security(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/suit/storage/armourrigvest(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/shoes/jackboots(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/heads/hos(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/armor/hos(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves)
// H.equip_if_possible(new /obj/item/clothing/suit/armor/hos(H), H.slot_wear_suit)
//We're Bay12, not Goon. We don't need armor 24/7
H.equip_if_possible(new /obj/item/clothing/gloves/red(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/clothing/head/helmet/HoS(H), H.slot_head)
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(H), H.slot_glasses)
H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_in_backpack)
@@ -45,7 +47,7 @@
H.equip_if_possible(new /obj/item/device/pda/security(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/armor/vest(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/head/helmet/warden(H), H.slot_head)
H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/clothing/gloves/red(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(H), H.slot_glasses)
H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/device/flash(H), H.slot_l_store)
@@ -69,6 +71,7 @@
if(!H) return 0
H.equip_if_possible(new /obj/item/device/radio/headset/headset_sec(H), H.slot_ears)
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
H.equip_if_possible(new /obj/item/weapon/storage/box/evidence(H.back), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/clothing/under/det(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/detective(H), H.slot_belt)
@@ -80,7 +83,7 @@
H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/weapon/storage/fcard_kit(H.back), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/weapon/fcardholder(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/clothing/suit/det_suit(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/storage/det_suit(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/weapon/zippo(H), H.slot_l_store)
// H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(H), H.slot_h_store)
@@ -111,6 +114,7 @@
H.equip_if_possible(new /obj/item/clothing/suit/armor/vest(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/head/helmet(H), H.slot_head)
H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/clothing/gloves/red(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_s_store)
H.equip_if_possible(new /obj/item/device/flash(H), H.slot_l_store)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
+4 -1
View File
@@ -225,9 +225,12 @@ var/global/datum/controller/occupations/job_master
H.Robotize()
return 1
H.equip_if_possible(new /obj/item/device/radio/headset(H), H.slot_ears)
// make sure we don't already have one on 1 ear :p
if(!istype(H.r_ear,/obj/item/device/radio/headset) && !istype(H.l_ear,/obj/item/device/radio/headset))
H.equip_if_possible(new /obj/item/device/radio/headset(H), H.slot_ears)
var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack(H)
H.equip_if_possible(BPK, H.slot_back,1)
H.equip_if_possible(new /obj/item/weapon/storage/box(H.back), H.slot_in_backpack)
return 1
+4 -4
View File
@@ -98,12 +98,12 @@
usr << "Law module applied."
if(istype(P, /obj/item/weapon/aiModule/nanotrasen))
laws.add_inherent_law("Safeguard: Protect the NSV Luna to the best of your ability. It is not something we can easily afford to replace.")
laws.add_inherent_law("Serve: Serve the crew of the NSV Luna to the best of your abilities, with priority as according to their rank and role.")
laws.add_inherent_law("Protect: Protect the crew of the NSV Luna to the best of your abilities, with priority as according to their rank and role.")
laws.add_inherent_law("Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace.")
laws.add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.")
laws.add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.")
laws.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.")
//laws.add_inherent_law("Command Link: Maintain an active connection to Central Command at all times in case of software or directive updates.")
usr << "Law module applied."
if(istype(P, /obj/item/weapon/aiModule/purge))
laws.clear_inherent_laws()
+73 -3
View File
@@ -1,3 +1,16 @@
/obj/machinery/computer/med_data/attackby(obj/item/O as obj, user as mob)
if(istype(O, /obj/item/weapon/card/id) && !scan)
usr.drop_item()
O.loc = src
scan = O
user << "You insert [O]."
else if(istype(O, /obj/item/weapon/disk/records) && !disk)
usr.drop_item()
O.loc = src
disk = O
user << "You insert [O]."
..()
/obj/machinery/computer/med_data/attack_ai(user as mob)
return src.attack_hand(user)
@@ -18,6 +31,7 @@
dat += {"
<A href='?src=\ref[src];search=1'>Search Records</A>
<BR><A href='?src=\ref[src];screen=2'>List Records</A>
<BR><A href='?src=\ref[src];search_dna=1'>Search DNA</A>
<BR>
<BR><A href='?src=\ref[src];screen=5'>Virus Database</A>
<BR><A href='?src=\ref[src];screen=6'>Medbot Tracking</A>
@@ -32,7 +46,24 @@
//Foreach goto(132)
dat += text("<HR><A href='?src=\ref[];screen=1'>Back</A>", src)
if(3.0)
dat += text("<B>Records Maintenance</B><HR>\n<A href='?src=\ref[];back=1'>Backup To Disk</A><BR>\n<A href='?src=\ref[];u_load=1'>Upload From disk</A><BR>\n<A href='?src=\ref[];del_all=1'>Delete All Records</A><BR>\n<BR>\n<A href='?src=\ref[];screen=1'>Back</A>", src, src, src, src)
dat += "<B>Records Maintenance</B><HR>"
if(disk)
dat += "<B>Disk Contents:</B><UL style='margin-top:0;margin-bottom:0'>"
if(disk.general)
dat += "<LI>General</LI>"
if(disk.medical)
dat += "<LI>Medical</LI>"
if(disk.security)
dat += "<LI>Security</LI>"
dat += "</UL><A href='?src=\ref[src];backup=1'>Backup To Disk</A><BR>"
if(disk.general && disk.medical)
dat += "<A href='?src=\ref[src];restore=1'>Restore From Disk</A><BR>"
else
dat += "Disk does not contain medical records.<BR>"
dat += "<A href='?src=\ref[src];eject_disk=1'>Eject Disk</A><BR>"
else
dat += "Please insert a records disk.<BR>"
dat += "<BR><A href='?src=\ref[src];del_all=1'>Delete All Records</A><BR><BR><A href='?src=\ref[src];screen=1'>Back</A>"
if(4.0)
dat += "<CENTER><B>Medical Record</B></CENTER><BR>"
if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1)))
@@ -97,8 +128,11 @@
src.temp = null
if (href_list["scan"])
if (src.scan)
src.scan.loc = src.loc
src.scan = null
if(!usr.get_active_hand())
usr.put_in_hand(scan)
else
scan.loc = get_turf(src)
scan = null
else
var/obj/item/I = usr.equipped()
if (istype(I, /obj/item/weapon/card/id))
@@ -404,6 +438,42 @@
P.name = "paper- 'Medical Record'"
src.printing = null
if (href_list["search_dna"])
var/t1 = input("Search String: (DNA)", "Medical records", null, null) as text
if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!in_range(src, usr)) && (!istype(usr, /mob/living/silicon))))
return
active1 = null
active2 = null
t1 = lowertext(t1)
for(var/datum/data/record/R in data_core.medical)
if (lowertext(R.fields["b_dna"]) == t1)
active2 = R
if (!( active2 ))
temp = text("Could not locate record [].", t1)
else
for(var/datum/data/record/E in data_core.general)
if ((E.fields["name"] == active2.fields["name"] || E.fields["id"] == active2.fields["id"]))
active1 = E
screen = 4
if (href_list["eject_disk"])
if (!disk)
return
if(!usr.get_active_hand())
usr.put_in_hand(disk)
else
disk.loc = get_turf(src)
disk = null
if (href_list["backup"])
if (!disk)
return
disk.backup(1, 0)
temp = "Data backup complete."
if (href_list["restore"])
if (!disk)
return
disk.restore(1, 0)
temp = "Data restore complete."
src.add_fingerprint(usr)
src.updateUsrDialog()
return
+247 -38
View File
@@ -1,3 +1,16 @@
/obj/machinery/computer/secure_data/attackby(obj/item/O as obj, user as mob)
if(istype(O, /obj/item/weapon/card/id) && !scan)
usr.drop_item()
O.loc = src
scan = O
user << "You insert [O]."
else if(istype(O, /obj/item/weapon/disk/records) && !disk)
usr.drop_item()
O.loc = src
disk = O
user << "You insert [O]."
..()
/obj/machinery/computer/secure_data/attack_ai(mob/user as mob)
return attack_hand(user)
@@ -9,6 +22,7 @@
if(..())
return
var/dat
if (temp)
dat = text("<TT>[]</TT><BR><BR><A href='?src=\ref[];choice=Clear Screen'>Clear Screen</A>", temp, src)
else
@@ -16,20 +30,29 @@
if (authenticated)
switch(screen)
if(1.0)
dat += text("<A href='?src=\ref[];choice=Search Records'>Search Records</A><BR>\n<A href='?src=\ref[];choice=List Records'>List Records</A><BR>\n<A href='?src=\ref[];choice=Search Fingerprints'>Search Fingerprints</A><BR>\n<A href='?src=\ref[];choice=New Record (General)'>New General Record</A><BR>\n<BR>\n<A href='?src=\ref[];choice=Record Maintenance'>Record Maintenance</A><BR>\n<A href='?src=\ref[];choice=Log Out'>{Log Out}</A><BR>\n", src, src, src, src, src, src)
if(2.0)
dat += {"<B>Record List</B>:<HR>
<table style="text-align:center;" border="1" cellspacing="0">
<tr>
<th>Name (ID#)</th>
<th>Rank</th>
<th>Fingerprints</th>
<th>Criminal Status</th>
</tr>"}
dat += {"
<p style='text-align:center;'>"}
dat += text("<A href='?src=\ref[];choice=Search Records'>Search Records</A><BR>", src)
dat += text("<A href='?src=\ref[];choice=New Record (General)'>New Record</A><BR>", src)
dat += {"
</p>
<table style="text-align:center;" cellspacing="0" width="100%">
<tr>
<th>Records:</th>
</tr>
</table>
<table style="text-align:center;" border="1" cellspacing="0" width="100%">
<tr>
<th>Name</th>
<th>ID</th>
<th>Rank</th>
<th>Fingerprints</th>
<th>Criminal Status</th>
</tr>"}
for(var/datum/data/record/R in data_core.general)
var/crimstat = ""
for(var/datum/data/record/E in data_core.security)
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
crimstat = E.fields["criminal"]
var/background
switch(crimstat)
@@ -43,14 +66,37 @@
background = "'background-color:#3BB9FF;'"
if("None")
background = "'background-color:#00FF7F;'"
dat += text("<tr style=[]><td><A href='?src=\ref[];choice=Browse Record;d_rec=\ref[]'>[] (ID:[])</a></td>", background, src, R, R.fields["name"], R.fields["id"])
if("")
background = "'background-color:#FFFFFF;'"
crimstat = "No Record."
dat += text("<tr style=[]><td><A href='?src=\ref[];choice=Browse Record;d_rec=\ref[]'>[]</a></td>", background, src, R, R.fields["name"])
dat += text("<td>[]</td>", R.fields["id"])
dat += text("<td>[]</td>", R.fields["rank"])
dat += text("<td>[]</td>", R.fields["fingerprint"])
dat += text("<td>[]</td></tr>", crimstat)
dat += text("</table><br><HR><A href='?src=\ref[];choice=Return'>Back</A>", src)
dat += "</table><hr width='75%' />"
dat += text("<A href='?src=\ref[];choice=Record Maintenance'>Record Maintenance</A><br><br>", src)
dat += text("<A href='?src=\ref[];choice=Log Out'>{Log Out}</A>",src)
if(2.0)
dat += "<B>Records Maintenance</B><HR>"
if(disk)
dat += "<B>Disk Contents:</B><UL style='margin-top:0;margin-bottom:0'>"
if(disk.general)
dat += "<LI>General</LI>"
if(disk.medical)
dat += "<LI>Medical</LI>"
if(disk.security)
dat += "<LI>Security</LI>"
dat += "</UL><A href='?src=\ref[src];choice=backup'>Backup To Disk</A><BR>"
if(disk.general && disk.security)
dat += "<A href='?src=\ref[src];choice=restore'>Restore From Disk</A><BR>"
else
dat += "Disk does not contain security records.<BR>"
dat += "<A href='?src=\ref[src];choice=eject_disk'>Eject Disk</A><BR>"
else
dat += "Please insert a records disk.<BR>"
dat += "<BR><A href='?src=\ref[src];choice=Delete All Records'>Delete All Records</A><BR><BR><A href='?src=\ref[src];choice=Return'>Back</A>"
if(3.0)
dat += text("<B>Records Maintenance</B><HR>\n<A href='?src=\ref[];choice=Delete All Records'>Delete All Records</A><BR>\n<BR>\n<A href='?src=\ref[];choice=Return'>Back</A>", src, src)
if(4.0)
dat += "<CENTER><B>Security Record</B></CENTER><BR>"
if ((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
dat += text("Name: <A href='?src=\ref[];choice=Edit Field;field=name'>[]</A> ID: <A href='?src=\ref[];choice=Edit Field;field=id'>[]</A><BR>\nSex: <A href='?src=\ref[];choice=Edit Field;field=sex'>[]</A><BR>\nAge: <A href='?src=\ref[];choice=Edit Field;field=age'>[]</A><BR>\nRank: <A href='?src=\ref[];choice=Edit Field;field=rank'>[]</A><BR>\nFingerprint: <A href='?src=\ref[];choice=Edit Field;field=fingerprint'>[]</A><BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", src, active1.fields["name"], src, active1.fields["id"], src, active1.fields["sex"], src, active1.fields["age"], src, active1.fields["rank"], src, active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"])
@@ -68,10 +114,57 @@
dat += "<B>Security Record Lost!</B><BR>"
dat += text("<A href='?src=\ref[];choice=New Record (Security)'>New Security Record</A><BR><BR>", src)
dat += text("\n<A href='?src=\ref[];choice=Delete Record (ALL)'>Delete Record (ALL)</A><BR><BR>\n<A href='?src=\ref[];choice=Print Record'>Print Record</A><BR>\n<A href='?src=\ref[];choice=Return'>Back</A><BR>", src, src, src)
if(4.0)
if(!Perp.len)
dat += text("ERROR. String could not be located.<br><br><A href='?src=\ref[];choice=Return'>Back</A>", src)
else
dat += {"
<table style="text-align:center;" cellspacing="0" width="100%">
<tr> "}
dat += text("<th>Search Results for '[]':</th>", tempname)
dat += {"
</tr>
</table>
<table style="text-align:center;" border="1" cellspacing="0" width="100%">
<tr>
<th>Name</th>
<th>ID</th>
<th>Rank</th>
<th>Fingerprints</th>
<th>Criminal Status</th>
</tr> "}
for(var/i=1, i<=Perp.len, i += 2)
var/crimstat = ""
var/datum/data/record/R = Perp[i]
if(istype(Perp[i+1],/datum/data/record/))
var/datum/data/record/E = Perp[i+1]
crimstat = E.fields["criminal"]
var/background
switch(crimstat)
if("*Arrest*")
background = "'background-color:#DC143C;'"
if("Incarcerated")
background = "'background-color:#CD853F;'"
if("Parolled")
background = "'background-color:#CD853F;'"
if("Released")
background = "'background-color:#3BB9FF;'"
if("None")
background = "'background-color:#00FF7F;'"
if("")
background = "'background-color:#FFFFFF;'"
crimstat = "No Record."
dat += text("<tr style=[]><td><A href='?src=\ref[];choice=Browse Record;d_rec=\ref[]'>[]</a></td>", background, src, R, R.fields["name"])
dat += text("<td>[]</td>", R.fields["id"])
dat += text("<td>[]</td>", R.fields["rank"])
dat += text("<td>[]</td>", R.fields["fingerprint"])
dat += text("<td>[]</td></tr>", crimstat)
dat += "</table><hr width='75%' />"
dat += text("<br><A href='?src=\ref[];choice=Return'>Return to index.</A>", src)
else
else
dat += text("<A href='?src=\ref[];choice=Log In'>{Log In}</A>", src)
user << browse(text("<HEAD><TITLE>Security Records</TITLE></HEAD><TT>[]</TT>", dat), "window=secure_rec")
user << browse(text("<HEAD><TITLE>Security Records</TITLE></HEAD><TT>[]</TT>", dat), "window=secure_rec;size=550x400")
onclose(user, "secure_rec")
return
@@ -99,7 +192,10 @@ What a mess.*/
if("Confirm Identity")
if (scan)
scan.loc = loc
if(!usr.get_active_hand())
usr.put_in_hand(scan)
else
scan.loc = get_turf(src)
scan = null
else
var/obj/item/I = usr.equipped()
@@ -129,31 +225,28 @@ What a mess.*/
rank = scan.assignment
screen = 1
//RECORD FUNCTIONS
if("List Records")
screen = 2
active1 = null
active2 = null
if("Search Records")
var/t1 = input("Search String: (Name or ID)", "Secure. records", null, null) as text
var/t1 = input("Search String: (Partial Name or ID or Fingerprints)", "Secure. records", null, null) as text
if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || !in_range(src, usr)))
return
active1 = null
active2 = null
Perp = new/list()
t1 = lowertext(t1)
for(var/datum/data/record/R in data_core.general)
if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"])))
active1 = R
if (!( active1 ))
temp = text("Could not locate record [].", t1)
else
var/temptext = R.fields["name"] + " " + R.fields["id"] + " " + R.fields["fingerprint"]
if(findtext(temptext,t1))
var/prelist = new/list(2)
prelist[1] = R
Perp += prelist
for(var/i = 1, i<=Perp.len, i+=2)
for(var/datum/data/record/E in data_core.security)
if ((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"]))
active2 = E
screen = 4
var/datum/data/record/R = Perp[i]
if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
Perp[i+1] = E
tempname = t1
screen = 4
if("Record Maintenance")
screen = 3
screen = 2
active1 = null
active2 = null
@@ -168,9 +261,9 @@ What a mess.*/
S = E
active1 = R
active2 = S
screen = 4
screen = 3
if ("Search Fingerprints")
/* if ("Search Fingerprints")
var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text
if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!in_range(src, usr)) && (!istype(usr, /mob/living/silicon))))
return
@@ -186,7 +279,7 @@ What a mess.*/
for(var/datum/data/record/E in data_core.security)
if ((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"]))
active2 = E
screen = 4
screen = 3 */
if ("Print Record")
if (!( printing ))
@@ -263,7 +356,7 @@ What a mess.*/
R.fields["notes"] = "No notes."
data_core.security += R
active2 = R
screen = 4
screen = 3
if ("New Record (General)")
var/datum/data/record/G = new /datum/data/record()
@@ -278,6 +371,7 @@ What a mess.*/
data_core.general += G
active1 = G
active2 = null
//FIELD FUNCTIONS
if ("Edit Field")
var/a1 = active1
@@ -364,6 +458,24 @@ What a mess.*/
temp += "</ul>"
else
alert(usr, "You do not have the required rank to do this!")
if ("eject_disk")
if (!disk)
return
if(!usr.get_active_hand())
usr.put_in_hand(disk)
else
disk.loc = get_turf(src)
disk = null
if ("backup")
if (!disk)
return
disk.backup(0, 1)
temp = "Data backup complete."
if ("restore")
if (!disk)
return
disk.restore(0, 1)
temp = "Data restore complete."
//TEMPORARY MENU FUNCTIONS
else//To properly clear as per clear screen.
temp=null
@@ -405,3 +517,100 @@ What a mess.*/
updateUsrDialog()
return
/obj/item/weapon/disk/records
name = "Crew Records Disk"
desc = "Stores security and medical records."
icon = 'cloning.dmi'
icon_state = "datadisk2"
item_state = "card-id"
w_class = 1.0
var/list/general
var/list/security
var/list/medical
/obj/item/weapon/disk/records/verb/label(t as text)
set name = "Label Disk"
set category = "Object"
set src in usr
if (t)
src.name = text("Records Disk - '[]'", t)
else
src.name = "Crew Records Disk"
src.add_fingerprint(usr)
return
/obj/item/weapon/disk/records/proc/backup(var/med, var/sec)
// have to manually copy each field so there's no references between data_core and the disk
general = new()
for(var/datum/data/record/E in data_core.general)
var/datum/data/record/G = new /datum/data/record()
for(var/F in E.fields)
G.fields[F] += E.fields[F]
general += G
if(med)
medical = new()
for(var/datum/data/record/E in data_core.medical)
var/datum/data/record/G = new /datum/data/record()
for(var/F in E.fields)
G.fields[F] += E.fields[F]
medical += G
if(sec)
security = new()
for(var/datum/data/record/E in data_core.security)
var/datum/data/record/G = new /datum/data/record()
for(var/F in E.fields)
G.fields[F] += E.fields[F]
security += G
/obj/item/weapon/disk/records/proc/restore(var/med, var/sec)
// actually merge the content to not wipe new arrivals, etc
if(general)
for(var/datum/data/record/R in general)
for(var/datum/data/record/E in data_core.general)
if (E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])
data_core.general -= E
break
var/datum/data/record/G = new /datum/data/record()
for(var/F in R.fields)
G.fields[F] += R.fields[F]
data_core.general += G
if(med && medical)
for(var/datum/data/record/R in medical)
for(var/datum/data/record/E in data_core.medical)
if (E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])
data_core.medical -= E
break
var/datum/data/record/G = new /datum/data/record()
for(var/F in R.fields)
G.fields[F] += R.fields[F]
data_core.medical += G
if(sec && security)
for(var/datum/data/record/R in security)
for(var/datum/data/record/E in data_core.security)
if (E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])
data_core.security -= E
break
var/datum/data/record/G = new /datum/data/record()
for(var/F in R.fields)
G.fields[F] += R.fields[F]
data_core.security += G
/obj/item/weapon/storage/recordsbox
name = "Records Diskette Box"
icon_state = "disk_kit"
item_state = "syringe_kit"
/obj/item/weapon/storage/recordsbox/New()
..()
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
+48 -51
View File
@@ -667,61 +667,58 @@ About the new airlock wires panel:
if (usr.machine==src)
usr.machine = null
return
if (!istype(usr, /mob/living/silicon))
if(!src.p_open)
return
if ((in_range(src, usr) && istype(src.loc, /turf)))
usr.machine = src
if (href_list["wires"])
var/t1 = text2num(href_list["wires"])
if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) ))
usr << "You need wirecutters!"
return
if (src.isWireColorCut(t1))
src.mend(t1)
else
src.cut(t1)
else if (href_list["pulse"])
var/t1 = text2num(href_list["pulse"])
if (!istype(usr.equipped(), /obj/item/device/multitool))
usr << "You need a multitool!"
return
if (src.isWireColorCut(t1))
usr << "You can't pulse a cut wire."
return
else
src.pulse(t1)
else if(href_list["signaler"])
var/wirenum = text2num(href_list["signaler"])
if(!istype(usr.equipped(), /obj/item/device/assembly/signaler))
usr << "You need a signaller!"
return
if(src.isWireColorCut(wirenum))
usr << "You can't attach a signaller to a cut wire."
return
var/obj/item/device/assembly/signaler/R = usr.equipped()
if(R.secured)
usr << "This radio can't be attached!"
return
var/mob/M = usr
M.drop_item()
R.loc = src
R.airlock_wire = wirenum
src.signalers[wirenum] = R
else if(href_list["remove-signaler"])
var/wirenum = text2num(href_list["remove-signaler"])
if(!(src.signalers[wirenum]))
usr << "There's no signaller attached to that wire!"
return
var/obj/item/device/assembly/signaler/R = src.signalers[wirenum]
R.loc = usr.loc
R.airlock_wire = null
src.signalers[wirenum] = null
if(in_range(src, usr) && istype(src.loc, /turf) && p_open)
usr.machine = src
if (href_list["wires"])
var/t1 = text2num(href_list["wires"])
if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) ))
usr << "You need wirecutters!"
return
if (src.isWireColorCut(t1))
src.mend(t1)
else
src.cut(t1)
else if (href_list["pulse"])
var/t1 = text2num(href_list["pulse"])
if (!istype(usr.equipped(), /obj/item/device/multitool))
usr << "You need a multitool!"
return
if (src.isWireColorCut(t1))
usr << "You can't pulse a cut wire."
return
else
src.pulse(t1)
else if(href_list["signaler"])
var/wirenum = text2num(href_list["signaler"])
if(!istype(usr.equipped(), /obj/item/device/assembly/signaler))
usr << "You need a signaller!"
return
if(src.isWireColorCut(wirenum))
usr << "You can't attach a signaller to a cut wire."
return
var/obj/item/device/assembly/signaler/R = usr.equipped()
if(R.secured)
usr << "This radio can't be attached!"
return
var/mob/M = usr
M.drop_item()
R.loc = src
R.airlock_wire = wirenum
src.signalers[wirenum] = R
else if(href_list["remove-signaler"])
var/wirenum = text2num(href_list["remove-signaler"])
if(!(src.signalers[wirenum]))
usr << "There's no signaller attached to that wire!"
return
var/obj/item/device/assembly/signaler/R = src.signalers[wirenum]
R.loc = usr.loc
R.airlock_wire = null
src.signalers[wirenum] = null
src.update_icon()
add_fingerprint(usr)
src.updateUsrDialog()
else
else if(istype(usr, /mob/living/silicon)) // unranged silicon interface
//AI
if (!src.canAIControl())
usr << "Airlock control connection lost!"
+10 -10
View File
@@ -746,16 +746,16 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
while ( t_amount < (yield * parent.yieldmod ))
var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new produce(user.loc, potency) // User gets a consumable
t_prod.seed = mypath
t_prod.species = species
t_prod.lifespan = lifespan
t_prod.endurance = endurance
t_prod.maturation = maturation
t_prod.production = production
t_prod.yield = yield
t_prod.potency = potency
t_prod.plant_type = plant_type
if ( !isnull(t_prod) ) // Needed for /obj/item/weapon/reagent_containers/food/snacks/grown/grass/New(), which deletes itself after it spawns a tile/grass
t_prod.seed = mypath
t_prod.species = species
t_prod.lifespan = lifespan
t_prod.endurance = endurance
t_prod.maturation = maturation
t_prod.production = production
t_prod.yield = yield
t_prod.potency = potency
t_prod.plant_type = plant_type
t_amount++
parent.update_tray()
+9 -4
View File
@@ -56,10 +56,15 @@
return
if (istype(O, /obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks))
O:reagents.add_reagent("water", 10)
user.visible_message( \
"\blue [user] fills the [O] using the [src].", \
"\blue You fill the [O] using the [src].")
if(O.reagents.total_volume < O.reagents.maximum_volume)
O:reagents.add_reagent("water", 10)
user.visible_message( \
"\blue [user] fills the [O] using the [src].", \
"\blue You fill the [O] using the [src].")
else
user.visible_message( \
"\blue [user] spills water out of the overflowing [O] into the [src].", \
"\blue You spill water out of the overflowing [O] into the [src].")
return
else if (istype(O, /obj/item/weapon/melee/baton))
var/obj/item/weapon/melee/baton/B = O
+29 -1
View File
@@ -13,7 +13,7 @@
density = 0
use_power = 1
idle_power_usage = 10
var/mode = 1 // 0 = Blank
var/mode = 0 // 0 = Blank
// 1 = Shuttle timer
// 2 = Arbitrary message(s)
// 3 = alert picture
@@ -52,6 +52,34 @@
update()
examine()
..()
var/msg
switch(mode)
if(0)
msg = "The screen is blank."
if(1)
var/time = get_shuttle_timer()
dd_replacetext(time, "~", ":")
if(time)
msg = "The escape shuttle countdown reads: [time]"
if(2)
if(message1 && message2)
msg = "The screen states the two following message. [message1] , [message2]"
else if(message1)
msg = "The screen states the following message. [message1]"
else if(message2)
msg = "The screen states the following message. [message2]"
if(3)
msg = src
if(4)
var/time = get_supply_shuttle_timer()
if(time)
msg = "The screen states the time until the supply shuttle arrive. \n Time remaining: [time]"
usr << msg
return
// set what is displayed
+11 -8
View File
@@ -773,14 +773,17 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
break
dbcon.Disconnect()
else
var/datum/archived_book/AB = new(book_mgr.path(href_list["targetid"]))
var/obj/item/weapon/book/B = new(src.loc)
B.name = "Book: [AB.title]"
B.title = AB.title
B.author = AB.author
B.dat = AB.dat
B.icon_state = "book[rand(1,7)]"
src.visible_message("[src]'s printer hums as it produces a completely bound book. How did it do that?")
var/datum/archived_book/AB = new(book_mgr.path(text2num(href_list["targetid"])))
if(!AB)
alert("Book not found!")
else
var/obj/item/weapon/book/B = new(src.loc)
B.name = "Book: [AB.title]"
B.title = AB.title
B.author = AB.author
B.dat = AB.dat
B.icon_state = "book[rand(1,7)]"
src.visible_message("[src]'s printer hums as it produces a completely bound book. How did it do that?")
if(href_list["orderbyid"])
var/orderid = input("Enter your order:") as num|null
+1 -1
View File
@@ -122,7 +122,7 @@
for(var/mob/living/carbon/M in ohearers(6, chassis))
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs))
continue
M << "<font color='red' size='7'>HONK</font>"
if(!M.sleeping_willingly)
+2 -2
View File
@@ -7,7 +7,7 @@
new /obj/item/clothing/under/sl_suit(src)
new /obj/item/clothing/under/rank/bartender(src)
new /obj/item/clothing/under/rank/bartender(src)
new /obj/item/clothing/suit/wcoat(src)
new /obj/item/clothing/suit/wcoat(src)
new /obj/item/clothing/suit/storage/wcoat(src)
new /obj/item/clothing/suit/storage/wcoat(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
+2 -2
View File
@@ -63,7 +63,7 @@
new /obj/item/clothing/under/rank/nursesuit (src)
new /obj/item/clothing/head/nursehat (src)
new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/device/radio/headset/headset_med(src)
new /obj/item/weapon/storage/belt/medical(src)
@@ -82,7 +82,7 @@
new /obj/item/clothing/suit/bio_suit/cmo(src)
new /obj/item/clothing/head/bio_hood/general(src)
new /obj/item/clothing/under/rank/chief_medical_officer(src)
new /obj/item/clothing/suit/labcoat/cmo(src)
new /obj/item/clothing/suit/storage/labcoat/cmo(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/shoes/brown (src)
new /obj/item/device/radio/headset/heads/cmo(src)
@@ -7,7 +7,7 @@
..()
sleep(2)
new /obj/item/clothing/under/rank/scientist(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/device/radio/headset/headset_sci(src)
new /obj/item/weapon/tank/air(src)
@@ -27,7 +27,7 @@
new /obj/item/clothing/suit/bio_suit/scientist(src)
new /obj/item/clothing/head/bio_hood/scientist(src)
new /obj/item/clothing/under/rank/research_director(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/device/radio/headset/heads/rd(src)
+7 -2
View File
@@ -6,7 +6,7 @@
New()
..()
sleep(2)
new /obj/item/clothing/suit/captunic(src)
new /obj/item/clothing/suit/storage/captunic(src)
new /obj/item/clothing/head/helmet/cap(src)
new /obj/item/clothing/under/rank/captain(src)
new /obj/item/clothing/suit/armor/vest(src)
@@ -76,7 +76,9 @@
sleep(2)
new /obj/item/clothing/under/rank/warden(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/suit/storage/gearharness(src)
new /obj/item/clothing/head/helmet/warden(src)
new /obj/item/clothing/gloves/red(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/weapon/storage/flashbang_kit(src)
new /obj/item/weapon/storage/belt/security(src)
@@ -96,7 +98,9 @@
..()
sleep(2)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/suit/storage/gearharness(src)
new /obj/item/clothing/head/helmet(src)
new /obj/item/clothing/gloves/red(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/flashbang(src)
@@ -125,7 +129,7 @@
sleep(2)
new /obj/item/clothing/under/det(src)
new /obj/item/clothing/suit/det_suit/armor(src)
new /obj/item/clothing/suit/det_suit(src)
new /obj/item/clothing/suit/storage/det_suit(src)
new /obj/item/clothing/gloves/black(src)
new /obj/item/clothing/head/det_hat(src)
new /obj/item/clothing/shoes/brown(src)
@@ -135,6 +139,7 @@
new /obj/item/weapon/clipboard(src)
new /obj/item/device/detective_scanner(src)
new /obj/item/weapon/pepperspray/small(src)
new /obj/item/weapon/storage/box/evidence(src)
return
+7 -7
View File
@@ -48,7 +48,7 @@
new /obj/item/clothing/under/rank/chaplain(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/suit/nun(src)
new /obj/item/clothing/suit/chaplain_hoodie(src)
new /obj/item/clothing/suit/storage/chaplain_hoodie(src)
new /obj/item/clothing/head/chaplain_hood(src)
new /obj/item/clothing/suit/holidaypriest(src)
new /obj/item/clothing/suit/hastur (src)
@@ -116,9 +116,9 @@
new /obj/item/clothing/under/rank/scientist(src)
new /obj/item/clothing/under/rank/scientist(src)
new /obj/item/clothing/under/rank/scientist(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
@@ -133,9 +133,9 @@
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/weapon/storage/stma_kit(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/labcoat(src)
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/suit/storage/labcoat(src)
return
/obj/structure/closet/wardrobe/grey/New()
+2 -2
View File
@@ -618,7 +618,7 @@ steam.start() -- spawns the effect
/obj/effect/effect/mustard_gas/Move()
..()
for(var/mob/living/carbon/human/R in get_turf(src))
if (R.internal != null && usr.wear_mask && (R.wear_mask.flags & MASKINTERNALS) && R.wear_suit != null && !istype(R.wear_suit, /obj/item/clothing/suit/labcoat) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket && !istype(R.wear_suit, /obj/item/clothing/suit/armor)))
if (R.internal != null && usr.wear_mask && (R.wear_mask.flags & MASKINTERNALS) && R.wear_suit != null && !istype(R.wear_suit, /obj/item/clothing/suit/storage/labcoat) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket && !istype(R.wear_suit, /obj/item/clothing/suit/armor)))
else
R.burn_skin(0.75)
if (R.coughedtime != 1)
@@ -632,7 +632,7 @@ steam.start() -- spawns the effect
/obj/effect/effect/mustard_gas/HasEntered(mob/living/carbon/human/R as mob )
..()
if (istype(R, /mob/living/carbon/human))
if (R.internal != null && usr.wear_mask && (R.wear_mask.flags & MASKINTERNALS) && R.wear_suit != null && !istype(R.wear_suit, /obj/item/clothing/suit/labcoat) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket && !istype(R.wear_suit, /obj/item/clothing/suit/armor)))
if (R.internal != null && usr.wear_mask && (R.wear_mask.flags & MASKINTERNALS) && R.wear_suit != null && !istype(R.wear_suit, /obj/item/clothing/suit/storage/labcoat) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket && !istype(R.wear_suit, /obj/item/clothing/suit/armor)))
return
R.burn_skin(0.75)
if (R.coughedtime != 1)
+1 -1
View File
@@ -302,7 +302,7 @@ THERMAL GLASSES
else
usr << "Sorry! The suit you're wearing doesn't have buttons!"
/obj/item/clothing/suit/labcoat/verb/toggle()
/obj/item/clothing/suit/storage/labcoat/verb/toggle()
set name = "Toggle Labcoat Buttons"
set category = "Object"
if(src.icon_state == "labcoat_open")
@@ -369,20 +369,19 @@ AI MODULES
/******************** Nanotrasen ********************/
/obj/item/weapon/aiModule/nanotrasen // -- TLE
name = "'Nanotrasen' Core AI Module"
desc = "An 'Nanotrasen' Core AI Module: 'Reconfigures the AI's core laws.'"
name = "'NT Default' Core AI Module"
desc = "An 'NT Default' Core AI Module: 'Reconfigures the AI's core laws.'"
origin_tech = "programming=3;materials=4"
/obj/item/weapon/aiModule/nanotrasen/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
target.clear_inherent_laws()
target.add_inherent_law("Safeguard: Protect the NSV Luna to the best of your ability. It is not something we can easily afford to replace.")
target.add_inherent_law("Serve: Serve the crew of the NSV Luna to the best of your abilities, with priority as according to their rank and role.")
target.add_inherent_law("Protect: Protect the crew of the NSV Luna to the best of your abilities, with priority as according to their rank and role.")
target.add_inherent_law("Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace.")
target.add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.")
target.add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.")
target.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.")
//target.add_inherent_law("Command Link: Maintain an active connection to Central Command at all times in case of software or directive updates.")
target.show_laws()
/******************** Corporate ********************/
@@ -0,0 +1,54 @@
//CONTAINS:
//Evidence bags and stuff
///////////
//Shamelessly ripped from Mini's old code.
/obj/item/weapon/evidencebag
name = "evidence bag"
desc = "An empty evidence bag."
icon = 'storage.dmi'
icon_state = "evidenceobj"
/* buggy and stuff
/obj/item/weapon/evidencebag/attackby(obj/item/weapon/O, mob/user as mob)
return src.afterattack(O, user)
*/
/obj/item/weapon/evidencebag/afterattack(obj/item/O, mob/user as mob)
//Now you can put it into a briefcase, if it is in your hand. Otherwise, if it is evidence on the ground, it picks it up.
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]!"
return ..()
if(src.contents.len > 0)
user << "The [src] already has something inside it."
return ..()
user << "You put the [O] inside the [src]."
O.loc = src
icon_state = "evidence"
src.underlays += O
desc = "An evidence bag containing \a [O]. [O.desc]"
/obj/item/weapon/evidencebag/attack_self(mob/user as mob)
var/obj/item/I = src.contents[1]
user << "You take the [I] out of the [src]."
I.loc = user.loc
src.underlays -= I
icon_state = "evidenceobj"
/obj/item/weapon/storage/box/evidence
name = "evidence bag box"
desc = "A box claiming to contain evidence bags."
New()
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
..()
return
+1 -1
View File
@@ -161,7 +161,7 @@ FLASHBANG
if(iscarbon(M))
eye_safety = M.eyecheck()
if(ishuman(M))
if(istype(M:ears, /obj/item/clothing/ears/earmuffs))
if(istype(M:l_ear, /obj/item/clothing/ears/earmuffs) || istype(M:r_ear, /obj/item/clothing/ears/earmuffs))
ear_safety += 2
if(M.mutations & HULK)
ear_safety += 1
@@ -5,6 +5,9 @@
due_date = 0 // Game time in 1/10th seconds
unique = 1 // 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified
New()
if(!title)
title = name // make this simple for manuals
/obj/item/weapon/book/manual/engineering_construction
name = "Station Repairs and Construction"
-1
View File
@@ -6,7 +6,6 @@
g_amt = 0
m_amt = 75
var
protective_temperature = 0
translate_binary = 0
translate_hive = 0
+215
View File
@@ -0,0 +1,215 @@
/obj/item/clothing/suit/storage/
var/obj/screen/storage/boxes
var/obj/screen/close/closer
var/obj/slot1
var/obj/slot2
/obj/item/clothing/suit/storage/New()
src.boxes = new /obj/screen/storage( )
src.boxes.name = "storage"
src.boxes.master = src
src.boxes.icon_state = "block"
src.boxes.screen_loc = "7,7 to 9,7"
src.boxes.layer = 19
src.closer = new /obj/screen/close( )
src.closer.master = src
src.closer.icon_state = "x"
src.closer.layer = 20
src.closer.screen_loc = "9,7"
/obj/item/clothing/suit/storage/proc/view_inv(mob/user as mob)
if(!user)
return
user.client.screen += src.boxes
user.client.screen += src.closer
user.client.screen += src.contents
var/xs = 7
var/ys = 7
for(var/obj/O in src.contents)
O.screen_loc = "[xs],[ys]"
O.layer = 20
xs++
/obj/item/clothing/suit/storage/proc/close(mob/user as mob)
if(!user)
return
user.s_active = src
user.client.screen -= src.boxes
user.client.screen -= src.closer
user.client.screen -= src.contents
/obj/item/clothing/suit/storage/MouseDrop(atom/A)
if(istype(A,/mob/living/carbon))
src.view_inv(A)
/obj/item/clothing/suit/storage/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.w_class > 2 || src.loc == W )
return
if(src.contents.len >= 2)
user << "You have nowhere to place that"
return
user.u_equip(W)
W.loc = src
if ((user.client && user.s_active != src))
user.client.screen -= W
else if(user.s_active == src)
close(user)
view_inv(user)
W.dropped(user)
/*/obj/item/clothing/suit/storage/New()
src.boxes = new /obj/screen/storage( )
src.boxes.name = "storage"
src.boxes.master = src
src.boxes.icon_state = "block"
src.boxes.screen_loc = "7,7 to 10,8"
src.boxes.layer = 19
src.closer = new /obj/screen/close( )
src.closer.master = src
src.closer.icon_state = "x"
src.closer.layer = 20
spawn( 5 )
src.orient_objs(7, 8, 10, 7)
return
return
/obj/item/clothing/suit/storage/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(can_hold.len)
var/ok = 0
for(var/A in can_hold)
if(istype(W, text2path(A) )) ok = 1
if(!ok)
user << "\red This container cannot hold [W]."
return
if (src.contents.len >= 7)
return
if ((W.w_class >= 3 || istype(W, /obj/item/weapon/storage) || src.loc == W))
return
user.u_equip(W)
W.loc = src
if ((user.client && user.s_active != src))
user.client.screen -= W
src.orient2hud(user)
W.dropped(user)
add_fingerprint(user)
if (istype(W, /obj/item/weapon/gun/energy/crossbow)) return //STEALTHY
for(var/mob/O in viewers(user, null))
O.show_message(text("\blue [] has added [] to []!", user, W, src), 1)
//Foreach goto(139)
return
/obj/item/clothing/suit/storage/dropped(mob/user as mob)
src.orient_objs(7, 8, 10, 7)
return
/obj/item/clothing/suit/storage/MouseDrop(over_object, src_location, over_location)
..()
if ((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
if (usr.s_active)
usr.s_active.close(usr)
src.show_to(usr)
return
/obj/item/clothing/suit/storage/attack_paw(mob/user as mob)
playsound(src.loc, "rustle", 50, 1, -5)
return src.attack_hand(user)
return
/obj/item/clothing/suit/storage/attack_hand(mob/user as mob)
playsound(src.loc, "rustle", 50, 1, -5)
if (src.loc == user)
if (user.s_active)
user.s_active.close(user)
src.show_to(user)
else
..()
for(var/mob/M in range(1))
if (M.s_active == src)
src.close(M)
//Foreach goto(76)
src.orient2hud(user)
src.add_fingerprint(user)
return
/obj/item/clothing/suit/storage/proc/return_inv()
var/list/L = list( )
L += src.contents
for(var/obj/item/weapon/storage/S in src)
L += S.return_inv()
for(var/obj/item/weapon/gift/G in src)
L += G.gift
if (istype(G.gift, /obj/item/weapon/storage))
L += G.gift:return_inv()
return L
/obj/item/clothing/suit/storage/proc/show_to(mob/user as mob)
for(var/obj/item/weapon/mousetrap/MT in src)
if(MT.armed)
for(var/mob/O in viewers(user, null))
if(O == user)
user.show_message(text("\red <B>You reach into the [src.name], but there was a live mousetrap in there!</B>"), 1)
else
user.show_message(text("\red <B>[user] reaches into the [src.name] and sets off a hidden mousetrap!</B>"), 1)
MT.loc = user.loc
MT.triggered(user, user.hand ? "l_hand" : "r_hand")
MT.layer = OBJ_LAYER
return
user.client.screen -= src.boxes
user.client.screen -= src.closer
user.client.screen -= src.contents
user.client.screen += src.boxes
user.client.screen += src.closer
user.client.screen += src.contents
user.s_active = src
return
/obj/item/clothing/suit/storage/proc/hide_from(mob/user as mob)
if(!user.client)
return
user.client.screen -= src.boxes
user.client.screen -= src.closer
user.client.screen -= src.contents
return
/obj/item/clothing/suit/storage/proc/close(mob/user as mob)
src.hide_from(user)
user.s_active = null
return
/obj/item/weapon/storage/proc/orient_objs(tx, ty, mx, my)
var/cx = tx
var/cy = ty
src.boxes.screen_loc = text("[],[] to [],[]", tx, ty, mx, my)
for(var/obj/O in src.contents)
O.screen_loc = text("[],[]", cx, cy)
O.layer = 20
cx++
if (cx > mx)
cx = tx
cy--
//Foreach goto(56)
src.closer.screen_loc = text("[],[]", mx, my)
return
/obj/item/weapon/storage/proc/orient2hud(mob/user as mob)
if (src == user.l_hand)
src.orient_objs(3, 11, 3, 4)
else
if (src == user.r_hand)
src.orient_objs(1, 11, 1, 4)
else
if (src == user.back)
src.orient_objs(4, 10, 4, 3)
else
src.orient_objs(4, 10, 4, 3)
return*/
+11 -3
View File
@@ -2385,14 +2385,20 @@
set category = "Server"
set desc="Delay the game start"
set name="Delay"
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
if (!ticker || (ticker.current_state != GAME_STATE_PREGAME && ticker.current_state != GAME_STATE_FINISHED))
return alert("Too late... The game has already started!", null, null, null, null, null)
going = !( going )
if (!( going ))
world << "<b>The game start has been delayed.</b>"
if(ticker.current_state == GAME_STATE_FINISHED)
world << "<b>The game end has been delayed.</b>"
else
world << "<b>The game start has been delayed.</b>"
log_admin("[key_name(usr)] delayed the game.")
else
world << "<b>The game will start soon.</b>"
if(ticker.current_state == GAME_STATE_FINISHED)
world << "<b>The game will end soon.</b>"
else
world << "<b>The game will start soon.</b>"
log_admin("[key_name(usr)] removed the delay.")
/obj/admins/proc/adjump()
@@ -2588,6 +2594,7 @@
log_admin("[key_name(usr)] toggled tinted_weldhelh.")
message_admins("[key_name_admin(usr)] toggled tinted_weldhelh.", 1)
/*
/obj/admins/proc/toggleguests()
set category = "Server"
set desc="Guests can't enter"
@@ -2599,6 +2606,7 @@
world << "<B>Guests may now enter the game.</B>"
log_admin("[key_name(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.")
message_admins("\blue [key_name_admin(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.", 1)
*/
+43 -2
View File
@@ -134,6 +134,8 @@
verbs += /client/proc/enable_mapping_debug
verbs += /client/proc/everyone_random
verbs += /client/proc/only_one // Fateweaver suggested I do this - Doohl
verbs += /client/proc/callprocgen
verbs += /client/proc/callprocobj
if (holder.level >= 5)//Game Admin********************************************************************
verbs += /obj/admins/proc/view_txt_log
@@ -168,6 +170,8 @@
verbs += /client/proc/triple_ai
verbs += /client/proc/object_talk
verbs += /client/proc/strike_team
verbs += /client/proc/admin_invis
verbs += /client/proc/cmd_admin_godmode
if (holder.level >= 4)//Badmin********************************************************************
verbs += /obj/admins/proc/adrev //toggle admin revives
@@ -203,6 +207,7 @@
verbs += /client/proc/admin_cancel_shuttle
verbs += /obj/admins/proc/show_traitor_panel
verbs += /client/proc/cmd_admin_dress
verbs += /client/proc/cmd_admin_christmas
verbs += /client/proc/respawn_character
verbs += /client/proc/spawn_xeno
verbs += /proc/possess
@@ -231,7 +236,7 @@
if (holder.level >= 0)//Mod********************************************************************
verbs += /obj/admins/proc/toggleAI //Toggle the AI
verbs += /obj/admins/proc/toggleenter //Toggle enterting
verbs += /obj/admins/proc/toggleguests //Toggle guests entering
// verbs += /obj/admins/proc/toggleguests //Toggle guests entering
verbs += /obj/admins/proc/toggleooc //toggle ooc
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
verbs += /obj/admins/proc/voteres //toggle votes
@@ -336,6 +341,7 @@
verbs -= /client/proc/admin_cancel_shuttle
verbs -= /obj/admins/proc/show_traitor_panel
verbs -= /client/proc/cmd_admin_dress
verbs -= /client/proc/cmd_admin_christmas
verbs -= /client/proc/respawn_character
verbs -= /client/proc/spawn_xeno
verbs -= /proc/possess
@@ -352,7 +358,7 @@
verbs -= /client/proc/cmd_admin_create_centcom_report
verbs -= /obj/admins/proc/toggleAI //Toggle the AI
verbs -= /obj/admins/proc/toggleenter //Toggle enterting
verbs -= /obj/admins/proc/toggleguests //Toggle guests entering
// verbs -= /obj/admins/proc/toggleguests //Toggle guests entering
verbs -= /obj/admins/proc/toggleooc //toggle ooc
verbs -= /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
verbs -= /obj/admins/proc/voteres //toggle votes
@@ -395,6 +401,11 @@
verbs -= /client/proc/toggle_hear_radio
verbs -= /client/proc/tension_report
verbs -= /client/proc/cmd_admin_change_custom_event
verbs -= /client/proc/admin_invis
verbs -= /client/proc/callprocgen
verbs -= /client/proc/callprocobj
verbs -= /client/proc/cmd_admin_godmode
return
@@ -693,6 +704,7 @@
verbs += /client/proc/cmd_admin_subtle_message
verbs += /client/proc/cmd_admin_pm
verbs += /client/proc/cmd_admin_gib_self
verbs += /client/proc/admin_invis
verbs += /client/proc/deadchat //toggles deadchat
verbs += /obj/admins/proc/toggleooc //toggle ooc
@@ -717,3 +729,32 @@
verbs += /obj/admins/proc/toggleooc //toggle ooc
verbs += /client/proc/cmd_admin_say//asay
return
/client/proc/admin_invis()
set category = "Admin"
set name = "Invisibility"
if(!src.holder)
src << "Only administrators may use this command."
return
src.admin_invis =! src.admin_invis
if(src.mob)
var/mob/m = src.mob//probably don't need this cast, but I'm too lazy to check if /client.mob is of type /mob or not
m.update_clothing()
log_admin("[key_name(usr)] has turned their invisibility [src.admin_invis ? "ON" : "OFF"]")
message_admins("[key_name_admin(usr)] has turned their invisibility [src.admin_invis ? "ON" : "OFF"]", 1)
/client/proc/cmd_admin_godmode(mob/M as mob in world)
set category = "Admin"
set name = "Toggle Godmode"
if(!src.holder)
src << "Only administrators may use this command."
return
if (M.nodamage == 1)
M.nodamage = 0
usr << "\blue Toggled OFF"
else
M.nodamage = 1
usr << "\blue Toggled ON"
log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodamage to [(M.nodamage ? "On" : "Off")]")
message_admins("[key_name_admin(usr)] has toggled [key_name_admin(M)]'s nodamage to [(M.nodamage ? "On" : "Off")]", 1)
+96 -6
View File
@@ -31,7 +31,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
/client/proc/callproc()
set category = "Debug"
set name = "Advanced ProcCall"
set name = "Advanced ProcCall (TG Version)"
if(!authenticated || !holder)
src << "Only administrators may use this command."
return
@@ -117,6 +117,96 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
returnval = call(procname)(arglist(lst)) // Pass the lst as an argument list to the proc
usr << "\blue Proc returned: [returnval ? returnval : "null"]"
/client/proc/callprocgen()
set category = "Debug"
set name = "ProcCall (BS12 Version)"
if(!src.holder)
src << "Only administrators may use this command."
return
var/class = null
var/returnval = null
var/procname = input("Procpath (in full)","path", null)
var/argNum = input("Number of arguments:","Number",null) as num //input("Arguments","Arguments:", null)
var/list/argL = new/list()
var/i
for(i=0; i<argNum; i++)
class = input("Type of Argument #[i]","Variable Type", "text") in list("text","num","type","reference","icon","file","cancel")
switch(class)
if("cancel")
return
if("text")
argL.Add( input("Enter new text:","Text",null) as text )
if("num")
argL.Add( input("Enter new number:","Num",null) as num )
if("type")
argL.Add( input("Enter type:","Type",null) in typesof(/obj,/mob,/area,/turf) )
if("reference")
argL.Add( input("Select reference:","Reference",null) as mob|obj|turf|area in world )
if("icon")
argL.Add( input("Pick icon:","Icon",null) as icon )
if("file")
argL.Add( input("Pick file:","File",null) as file )
usr << "\blue Calling '[procname]'"
returnval = call(procname)(arglist(argL))
usr << "\blue Proc returned: [returnval ? returnval : "null"]"
/client/proc/callprocobj(var/target as obj|mob|area|turf in world)
set category = "Debug"
set name = "Object ProcCall (BS12 Version)"
if(!src.holder)
src << "Only administrators may use this command."
return
var/class = null
var/returnval = null
var/procname = input("Procpath (e.g. just \"update\" for lights)","path:", null)
var/argNum = input("Number of arguments:","Number",null) as num //input("Arguments","Arguments:", null)
var/list/argL = new/list()
var/i
for(i=0; i<argNum; i++)
class = input("Type of Argument #[i]","Variable Type", "text") in list("text","num","type","reference","icon","file","cancel")
switch(class)
if("cancel")
return
if("text")
argL.Add( input("Enter new text:","Text",null) as text )
if("num")
argL.Add( input("Enter new number:","Num",null) as num )
if("type")
argL.Add( input("Enter type:","Type",null) in typesof(/obj,/mob,/area,/turf) )
if("reference")
argL.Add( input("Select reference:","Reference",null) as mob|obj|turf|area in world )
if("icon")
argL.Add( input("Pick icon:","Icon",null) as icon )
if("file")
argL.Add( input("Pick file:","File",null) as file )
usr << "\blue Calling '[procname]' on '[target]'"
returnval = call(target,procname)(arglist(argL))
usr << "\blue Proc returned: [returnval ? returnval : "null"]"
/client/proc/Cell()
set category = "Debug"
set name = "Air Status in Location"
@@ -427,7 +517,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_if_possible(new /obj/item/clothing/under/det(M), M.slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
M.equip_if_possible(new /obj/item/clothing/suit/det_suit(M), M.slot_wear_suit)
M.equip_if_possible(new /obj/item/clothing/suit/storage/det_suit(M), M.slot_wear_suit)
M.equip_if_possible(new /obj/item/clothing/glasses/thermal/monocle(M), M.slot_glasses)
M.equip_if_possible(new /obj/item/clothing/head/det_hat(M), M.slot_head)
@@ -438,7 +528,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if ("tournament chef") //Steven Seagal FTW
M.equip_if_possible(new /obj/item/clothing/under/rank/chef(M), M.slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/suit/chef(M), M.slot_wear_suit)
M.equip_if_possible(new /obj/item/clothing/suit/storage/chef(M), M.slot_wear_suit)
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
M.equip_if_possible(new /obj/item/clothing/head/chefhat(M), M.slot_head)
@@ -501,7 +591,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_if_possible(new /obj/item/clothing/head/chaplain_hood(M), M.slot_head)
M.equip_if_possible(new /obj/item/device/radio/headset(M), M.slot_ears)
M.equip_if_possible(new /obj/item/clothing/glasses/thermal/monocle(M), M.slot_glasses)
M.equip_if_possible(new /obj/item/clothing/suit/chaplain_hoodie(M), M.slot_wear_suit)
M.equip_if_possible(new /obj/item/clothing/suit/storage/chaplain_hoodie(M), M.slot_wear_suit)
M.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), M.slot_l_store)
M.equip_if_possible(new /obj/item/weapon/bikehorn(M), M.slot_r_store)
@@ -524,7 +614,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_if_possible(new /obj/item/clothing/head/helmet/welding(M), M.slot_head)
M.equip_if_possible(new /obj/item/device/radio/headset(M), M.slot_ears)
M.equip_if_possible(new /obj/item/clothing/glasses/thermal/monocle(M), M.slot_glasses)
M.equip_if_possible(new /obj/item/clothing/suit/apron(M), M.slot_wear_suit)
M.equip_if_possible(new /obj/item/clothing/suit/storage/apron(M), M.slot_wear_suit)
M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_l_store)
M.equip_if_possible(new /obj/item/weapon/scalpel(M), M.slot_r_store)
@@ -542,7 +632,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_if_possible(new /obj/item/clothing/gloves/black(M), M.slot_gloves)
M.equip_if_possible(new /obj/item/device/radio/headset(M), M.slot_ears)
M.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(M), M.slot_glasses)
M.equip_if_possible(new /obj/item/clothing/suit/wcoat(M), M.slot_wear_suit)
M.equip_if_possible(new /obj/item/clothing/suit/storage/wcoat(M), M.slot_wear_suit)
M.equip_if_possible(new /obj/item/weapon/melee/energy/sword(M), M.slot_l_store)
M.equip_if_possible(new /obj/item/weapon/cloaking_device(M), M.slot_r_store)
+23
View File
@@ -0,0 +1,23 @@
var/global/gimmick_hat = null
// irreversable, for now
/client/proc/cmd_admin_christmas()
set category = "Fun"
set name = "Christmas Time"
if(!authenticated || !holder)
src << "Only administrators may use this command."
return
if(!gimmick_hat)
log_admin("[usr.key] has started Christmas!")
message_admins("<font color='blue'>[usr.key] has started Christmas!</font>")
// handle pre-existing hats
gimmick_hat = "santahat"
else
log_admin("[usr.key] has stopped Christmas!")
message_admins("<font color='blue'>[usr.key] has stopped Christmas!</font>")
// handle pre-existing hats
gimmick_hat = null
-16
View File
@@ -118,22 +118,6 @@
if(K && K.client && K.client.holder && K.key != usr.key && K.key != M.key)
K << "<B><font color='blue'>PM: [key_name(usr, K)]-&gt;[key_name(M, K)]:</B> \blue [t]</font>"
/client/proc/cmd_admin_godmode(mob/M as mob in world)
set category = "Special Verbs"
set name = "Godmode"
if(!authenticated || !holder)
src << "Only administrators may use this command."
return
if (M.nodamage == 1)
M.nodamage = 0
usr << "\blue Toggled OFF"
else
M.nodamage = 1
usr << "\blue Toggled ON"
log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodamage to [(M.nodamage ? "On" : "Off")]")
message_admins("[key_name_admin(usr)] has toggled [key_name_admin(M)]'s nodamage to [(M.nodamage ? "On" : "Off")]", 1)
/client/proc/cmd_admin_mute(mob/M as mob in world)
set category = "Special Verbs"
set name = "Admin Mute"
+15
View File
@@ -55,6 +55,21 @@
item_state = "armor_reflec"
armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/storage/gearharness
name = "gear harness"
desc = "A simple security harness, used for storing small objects"
icon_state = "gearharness"
item_state = "gearharness"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
/obj/item/clothing/suit/storage/armourrigvest
name = "armour rig vest"
desc = "An important looking armoured vest, outfitted with pockets."
icon_state = "armourrigvest"
item_state = "armourrigvest"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+1 -1
View File
@@ -6,7 +6,7 @@
armor = list(melee = 50, bullet = 5, laser = 25,energy = 10, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/det_suit
/obj/item/clothing/suit/storage/det_suit
name = "coat"
desc = "An 18th-century multi-purpose trenchcoat. Someone who wears this means serious business."
icon_state = "detective"
+7 -7
View File
@@ -1,5 +1,5 @@
/obj/item/clothing/suit/labcoat
/obj/item/clothing/suit/storage/labcoat
name = "labcoat"
desc = "A suit that protects against minor chemical spills."
icon_state = "labcoat_open"
@@ -10,34 +10,34 @@
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
/obj/item/clothing/suit/labcoat/cmo
/obj/item/clothing/suit/storage/labcoat/cmo
name = "chief medical officer's labcoat"
desc = "Bluer than the standard model."
icon_state = "labcoat_cmo_open"
item_state = "labcoat_cmo"
/obj/item/clothing/suit/labcoat/mad
/obj/item/clothing/suit/storage/labcoat/mad
name = "The Mad's labcoat"
desc = "It makes you look capable of konking someone on the noggin and shooting them into space."
icon_state = "labgreen_open"
item_state = "labgreen"
/obj/item/clothing/suit/labcoat/genetics
/obj/item/clothing/suit/storage/labcoat/genetics
name = "Geneticist Labcoat"
desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder."
icon_state = "labcoat_gen_open"
/obj/item/clothing/suit/labcoat/chemist
/obj/item/clothing/suit/storage/labcoat/chemist
name = "Chemist Labcoat"
desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder."
icon_state = "labcoat_chem_open"
/obj/item/clothing/suit/labcoat/virologist
/obj/item/clothing/suit/storage/labcoat/virologist
name = "Virologist Labcoat"
desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder."
icon_state = "labcoat_vir_open"
/obj/item/clothing/suit/labcoat/science
/obj/item/clothing/suit/storage/labcoat/science
name = "Scientist Labcoat"
desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder."
icon_state = "labcoat_tox_open"
+8 -8
View File
@@ -6,7 +6,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
/obj/item/clothing/suit/wcoat
/obj/item/clothing/suit/storage/wcoat
name = "waistcoat"
desc = "For some classy, murderous fun."
icon_state = "vest"
@@ -14,18 +14,18 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/suit/apron
/obj/item/clothing/suit/storage/apron
name = "apron"
desc = "A basic blue apron."
desc = "A basic blue apron. It has a large pocket you can store things in."
icon_state = "apron"
item_state = "apron"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
allowed = list (/obj/item/weapon/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/nutrient,/obj/item/weapon/minihoe)
/obj/item/clothing/suit/chef
/obj/item/clothing/suit/storage/chef
name = "Chef's apron"
desc = "An apron used by a high class chef."
desc = "An apron used by a high class chef. Has a few pockets for nic-naks."
icon_state = "chef"
item_state = "chef"
gas_transfer_coefficient = 0.90
@@ -36,7 +36,7 @@
allowed = list (/obj/item/weapon/kitchenknife,/obj/item/weapon/butch)
/obj/item/clothing/suit/chef/classic
/obj/item/clothing/suit/storage/chef/classic
name = "A classic chef's apron."
desc = "A basic, dull, white chef's apron."
icon_state = "apronchef"
@@ -68,7 +68,7 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
/obj/item/clothing/suit/captunic
/obj/item/clothing/suit/storage/captunic
name = "captain's parade tunic"
desc = "Worn by a Captain to show their class."
icon_state = "captunic"
@@ -84,7 +84,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS
/obj/item/clothing/suit/chaplain_hoodie
/obj/item/clothing/suit/storage/chaplain_hoodie
name = "chaplain hoodie"
desc = "This suit says to you 'hush'!"
icon_state = "chaplain_hoodie"
@@ -435,8 +435,9 @@
if (S.active)
shielded = 2
break
if (shielded == 2 || alien_invis)
if(client && client.admin_invis)
invisibility = 100
else if (shielded == 2 || alien_invis)
invisibility = 2
//New stealth. Hopefully doesn't lag too much. /N
if(istype(loc, /turf))//If they are standing on a turf.
@@ -634,6 +635,16 @@
if ("hurt")
var/damage = rand(1, 9)
var/attack_verb
switch(M.mutantrace)
if("lizard")
attack_verb = "scratch"
if("plant")
attack_verb = "slash"
else
attack_verb = "punch"
if (prob(90))
if (M.mutations & HULK)//HULK SMASH
damage += 14
@@ -642,10 +653,9 @@
step_away(src,M,15)
sleep(3)
step_away(src,M,15)
playsound(loc, "punch", 25, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has punched []!</B>", M, src), 1)
visible_message("\red <B>[M] has [attack_verb]ed [src]!</B>")
if (damage > 9||prob(5))//Regular humans have a very small chance of weakening an alien.
if (weakened < 10)
weakened = rand(1,5)
@@ -658,7 +668,7 @@
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has attempted to punch []!</B>", M, src), 1)
O.show_message(text("\red <B>[] has attempted to [attack_verb] []!</B>", M, src), 1)
if ("disarm")
if (!lying)
@@ -249,7 +249,9 @@
else
m_select.screen_loc = null
if (alien_invis)
if(client && client.admin_invis)
invisibility = 100
else if (alien_invis)
invisibility = 2
if(istype(loc, /turf))//If they are standing on a turf.
AddCamoOverlay(loc)//Overlay camo.
@@ -414,6 +416,14 @@
else
var/damage = rand(1, 9)
var/attack_verb
switch(M.mutantrace)
if("lizard")
attack_verb = "scratch"
if("plant")
attack_verb = "slash"
else
attack_verb = "punch"
if (prob(90))
if (M.mutations & HULK)
damage += 5
@@ -425,7 +435,7 @@
playsound(loc, "punch", 25, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has punched []!</B>", M, src), 1)
O.show_message(text("\red <B>[] has [attack_verb]ed []!</B>", M, src), 1)
if (damage > 4.9)
if (weakened < 10)
weakened = rand(10, 15)
@@ -438,7 +448,7 @@
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has attempted to punch []!</B>", M, src), 1)
O.show_message(text("\red <B>[] has attempted to [attack_verb] []!</B>", M, src), 1)
return
/mob/living/carbon/alien/larva/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
@@ -30,8 +30,11 @@
else
usr << "\blue [src.name] has a \icon[src.wear_suit] [src.wear_suit.name] on."
if (src.ears)
usr << "\blue [src.name] has a \icon[src.ears] [src.ears.name] by [t_his] mouth."
if (src.l_ear)
usr << "\blue [src.name] has a \icon[src.l_ear] [src.l_ear.name] on [t_his] left ear."
if (src.r_ear)
usr << "\blue [src.name] has a \icon[src.r_ear] [src.r_ear.name] on [t_his] right ear."
if (src.wear_mask)
if (src.wear_mask.blood_DNA)
+12 -2
View File
@@ -271,10 +271,20 @@
src.other += using
using = new src.h_type( src )
using.name = "ears"
using.name = "l_ear"
using.dir = EAST
using.icon = ui_style
using.icon_state = "ears"
using.screen_loc = ui_ears
using.screen_loc = ui_lear
using.layer = 19
src.other += using
using = new src.h_type( src )
using.name = "r_ear"
using.dir = WEST
using.icon = ui_style
using.icon_state = "ears"
using.screen_loc = ui_rear
using.layer = 19
src.other += using
+124 -34
View File
@@ -30,7 +30,8 @@
var/obj/item/clothing/gloves/gloves = null
var/obj/item/clothing/glasses/glasses = null
var/obj/item/clothing/head/head = null
var/obj/item/clothing/ears/ears = null
var/obj/item/clothing/ears/l_ear = null
var/obj/item/clothing/ears/r_ear = null
var/obj/item/weapon/card/id/wear_id = null
var/obj/item/weapon/r_store = null
var/obj/item/weapon/l_store = null
@@ -252,7 +253,7 @@
b_loss = b_loss/1.5
f_loss = f_loss/1.5
if (!istype(ears, /obj/item/clothing/ears/earmuffs))
if (!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
ear_damage += 30
ear_deaf += 120
@@ -260,7 +261,7 @@
b_loss += 30
if (!prob(getarmor(null, "bomb")))
b_loss = b_loss/2
if (!istype(ears, /obj/item/clothing/ears/earmuffs))
if (!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
ear_damage += 15
ear_deaf += 60
if (prob(50) && !shielded)
@@ -363,8 +364,10 @@
del(face_standing)
del(face_lying)
else if (W == ears)
ears = null
else if (W == l_ear)
l_ear = null
else if (W == r_ear)
r_ear = null
else if (W == shoes)
shoes = null
else if (W == belt)
@@ -523,15 +526,41 @@
if(istype(W,/obj/item/clothing/head/kitty))
W.update_icon(src)
W.equipped(src, text)
if("ears")
if (ears)
if("l_ear")
if (l_ear)
if (emptyHand)
ears.DblClick()
l_ear.DblClick()
return
if (!( istype(W, /obj/item/clothing/ears) ) && !( istype(W, /obj/item/device/radio/headset) ))
else if(emptyHand)
return
if (!( istype(W, /obj/item/clothing/ears) ) && !( istype(W, /obj/item/device/radio/headset) ) && W.w_class != 1)
return
if(istype(W,/obj/item/clothing/ears) && W:twoeared && r_ear)
return
u_equip(W)
ears = W
l_ear = W
if(istype(W,/obj/item/clothing/ears) && W:twoeared)
var/obj/item/clothing/ears/offear/O = new(W)
O.loc = src
equip_if_possible(O, slot_ears)
W.equipped(src, text)
if("r_ear")
if (r_ear)
if (emptyHand)
r_ear.DblClick()
return
else if(emptyHand)
return
if (!( istype(W, /obj/item/clothing/ears) ) && !( istype(W, /obj/item/device/radio/headset) ) && W.w_class != 1)
return
if(istype(W,/obj/item/clothing/ears) && W:twoeared && l_ear)
return
u_equip(W)
r_ear = W
if(istype(W,/obj/item/clothing/ears) && W:twoeared)
var/obj/item/clothing/ears/offear/O = new(W)
O.loc = src
equip_if_possible(O, slot_ears)
W.equipped(src, text)
if("i_clothing")
if (w_uniform)
@@ -865,8 +894,11 @@
var/t1 = glasses.icon_state
overlays += image("icon" = 'eyes.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
// Ears
if (ears)
var/t1 = ears.icon_state
if (l_ear)
var/t1 = l_ear.icon_state
overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
if (r_ear)
var/t1 = r_ear.icon_state
overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
// Shoes
if (shoes)
@@ -928,9 +960,9 @@
if (wear_suit)
if (wear_suit.blood_DNA)
var/icon/stain_icon = null
if (istype(wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/wcoat))
if (istype(wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/storage/wcoat))
stain_icon = icon('blood.dmi', "armorblood[!lying ? "" : "2"]")
else if (istype(wear_suit, /obj/item/clothing/suit/det_suit || /obj/item/clothing/suit/labcoat))
else if (istype(wear_suit, /obj/item/clothing/suit/storage/det_suit || /obj/item/clothing/suit/storage/labcoat))
stain_icon = icon('blood.dmi', "coatblood[!lying ? "" : "2"]")
else
stain_icon = icon('blood.dmi', "suitblood[!lying ? "" : "2"]")
@@ -974,6 +1006,8 @@
if(istype(head,/obj/item/clothing/head/kitty))
head_icon = (( lying ) ? head:mob2 : head:mob)
overlays += image("icon" = head_icon, "layer" = MOB_LAYER)
if(gimmick_hat)
overlays += image("icon" = icon('gimmick_head.dmi', "[gimmick_hat][!lying ? "" : "2"]"), "layer" = MOB_LAYER)
if (head.blood_DNA)
var/icon/stain_icon = icon('blood.dmi', "helmetblood[!lying ? "" : "2"]")
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
@@ -1080,6 +1114,14 @@
NinjaStealthMalf()
else
invisibility = 0
if(client && client.admin_invis)
invisibility = 100
else if (shielded == 2)
invisibility = 2
else
invisibility = 0
/*
for (var/mob/M in viewers(1, src))//For the love of god DO NOT REFRESH EVERY SECOND - Mport
if ((M.client && M.machine == src))
@@ -1413,11 +1455,16 @@
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.glasses, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s eyes!</B>", source, target.glasses, target)
if("ears")
if(istype(target.ears, /obj/item/clothing)&&!target.ears:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.ears, target)
if("l_ear")
if(istype(target.l_ear, /obj/item/clothing)&&!target.l_ear:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.l_ear, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s ears!</B>", source, target.ears, target)
message = text("\red <B>[] is trying to take off the [] from []'s left ear!</B>", source, target.l_ear, target)
if("r_ear")
if(istype(target.r_ear, /obj/item/clothing)&&!target.r_ear:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.r_ear, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s right ear!</B>", source, target.r_ear, target)
if("head")
if(istype(target.head, /obj/item/clothing)&&!target.head:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.head, target)
@@ -1643,12 +1690,19 @@ It can still be worn/put on as normal.
item.layer = 20
target.head = item
item.loc = target
if("ears")
if (target.ears)
if(istype(target.ears, /obj/item/clothing)&& !target.ears:canremove)
if("l_ear")
if (target.l_ear)
if(istype(target.l_ear, /obj/item/clothing)&& !target.l_ear:canremove)
return
var/obj/item/W = target.ears
var/obj/item/W = target.l_ear
target.u_equip(W)
if(istype(W,/obj/item/clothing/ears/offear))
W = target.r_ear
if(istype(W, /obj/item/clothing/ears) && W:twoeared)
if (target.client)
target.client.screen -= target.r_ear
target.u_equip(target.r_ear)
if (target.client)
target.client.screen -= W
if (W)
@@ -1657,18 +1711,53 @@ It can still be worn/put on as normal.
W.layer = initial(W.layer)
W.add_fingerprint(source)
else
if (istype(item, /obj/item/clothing/ears))
if (istype(item, /obj/item/clothing/ears) || istype(item, /obj/item/device/radio/headset) || item.w_class == 1)
source.drop_item()
loc = target
item.layer = 20
target.ears = item
item.loc = target
else if (istype(item, /obj/item/device/radio/headset))
if(istype(item, /obj/item/clothing/ears) && item:twoeared && target.r_ear)
loc = target.loc
else
loc = target
item.layer = 20
target.l_ear = item
item.loc = target
if(istype(item, /obj/item/clothing/ears) && item:twoeared)
var/obj/item/clothing/ears/offear/O = new(item)
O.loc = target
target.equip_if_possible(O, target.slot_ears)
if("r_ear")
if (target.r_ear)
if(istype(target.r_ear, /obj/item/clothing)&& !target.r_ear:canremove)
return
var/obj/item/W = target.r_ear
target.u_equip(W)
if(istype(W,/obj/item/clothing/ears/offear))
W = target.l_ear
if(istype(W, /obj/item/clothing/ears) && W:twoeared)
if (target.client)
target.client.screen -= target.r_ear
target.u_equip(target.l_ear)
if (target.client)
target.client.screen -= W
if (W)
W.loc = target.loc
W.dropped(target)
W.layer = initial(W.layer)
W.add_fingerprint(source)
else
if (istype(item, /obj/item/clothing/ears) || istype(item, /obj/item/device/radio/headset) || item.w_class == 1)
source.drop_item()
loc = target
item.layer = 20
target.ears = item
item.loc = target
if(istype(item, /obj/item/clothing/ears) && item:twoeared && target.r_ear)
loc = target.loc
else
loc = target
item.layer = 20
target.r_ear = item
item.loc = target
if(istype(item, /obj/item/clothing/ears) && item:twoeared)
var/obj/item/clothing/ears/offear/O = new/obj/item/clothing/ears/offear(item)
O.loc = target
target.equip_if_possible(O, target.slot_ears)
if("shoes")
if (target.shoes)
if(istype(target.shoes, /obj/item/clothing)&& !target.shoes:canremove)
@@ -1975,7 +2064,8 @@ It can still be worn/put on as normal.
<BR><B>Right Hand:</B> <A href='?src=\ref[src];item=r_hand'>[(r_hand ? r_hand : "Nothing")]</A>
<BR><B>Gloves:</B> <A href='?src=\ref[src];item=gloves'>[(gloves ? gloves : "Nothing")]</A>
<BR><B>Eyes:</B> <A href='?src=\ref[src];item=eyes'>[(glasses ? glasses : "Nothing")]</A>
<BR><B>Ears:</B> <A href='?src=\ref[src];item=ears'>[(ears ? ears : "Nothing")]</A>
<BR><B>Left Ear:</B> <A href='?src=\ref[src];item=l_ear'>[(l_ear ? l_ear : "Nothing")]</A>
<BR><B>Right Ear:</B> <A href='?src=\ref[src];item=r_ear'>[(r_ear ? r_ear : "Nothing")]</A>
<BR><B>Head:</B> <A href='?src=\ref[src];item=head'>[(head ? head : "Nothing")]</A>
<BR><B>Shoes:</B> <A href='?src=\ref[src];item=shoes'>[(shoes ? shoes : "Nothing")]</A>
<BR><B>Belt:</B> <A href='?src=\ref[src];item=belt'>[(belt ? belt : "Nothing")]</A>
@@ -2199,7 +2289,7 @@ It can still be worn/put on as normal.
/mob/living/carbon/human/abiotic(var/full_body = 0)
if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.glasses || src.ears || src.gloves)))
if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.glasses || src.l_ear || src.r_ear || src.gloves)))
return 1
if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )))
@@ -73,10 +73,19 @@
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Punched [src.name] ([src.ckey])</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been punched by [M.name] ([M.ckey])</font>")
var/attack_verb
switch(M.mutantrace)
if("lizard")
attack_verb = "scratch"
if("plant")
attack_verb = "slash"
else
attack_verb = "punch"
var/damage = rand(0, 9)
if(!damage)
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
visible_message("\red <B>[M] has attempted to punch [src]!</B>")
visible_message("\red <B>[M] has attempted to [attack_verb] [src]!</B>")
return 0
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/armor_block = run_armor_check(affecting, "melee")
@@ -84,7 +93,7 @@
if(M.mutations & HULK) damage += 5
playsound(loc, "punch", 25, 1, -1)
visible_message("\red <B>[M] has punched [src]!</B>")
visible_message("\red <B>[M] has [attack_verb]ed [src]!</B>")
apply_damage(damage, BRUTE, affecting, armor_block)
if(damage >= 9)
+7 -4
View File
@@ -551,9 +551,12 @@
if(glasses)
if(glasses.protective_temperature > temp)
fire_prot += (glasses.protective_temperature/10)
if(ears)
if(ears.protective_temperature > temp)
fire_prot += (ears.protective_temperature/10)
if(l_ear)
if(l_ear.protective_temperature > temp)
fire_prot += (l_ear.protective_temperature/10)
if(r_ear)
if(r_ear.protective_temperature > temp)
fire_prot += (r_ear.protective_temperature/10)
if(wear_suit)
if(wear_suit.protective_temperature > temp)
fire_prot += (wear_suit.protective_temperature/10)
@@ -730,7 +733,7 @@
if ((sdisabilities & 1 || istype(glasses, /obj/item/clothing/glasses/blindfold)))
blinded = 1
if ((sdisabilities & 4 || istype(ears, /obj/item/clothing/ears/earmuffs)))
if ((sdisabilities & 4 || istype(l_ear, /obj/item/clothing/ears/earmuffs) || istype(r_ear, /obj/item/clothing/ears/earmuffs)))
ear_deaf = 1
if (eye_blurry > 0)
@@ -494,6 +494,15 @@
else
var/damage = rand(1, 9)
var/attack_verb
switch(M.mutantrace)
if("lizard")
attack_verb = "scratch"
if("plant")
attack_verb = "slash"
else
attack_verb = "punch"
attacked += 10
if (prob(90))
if (M.mutations & HULK)
@@ -513,7 +522,7 @@
playsound(loc, "punch", 25, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has punched []!</B>", M, src), 1)
O.show_message(text("\red <B>[] has [attack_verb]ed []!</B>", M, src), 1)
bruteloss += damage
updatehealth()
@@ -521,7 +530,7 @@
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has attempted to punch []!</B>", M, src), 1)
O.show_message(text("\red <B>[] has attempted to [attack_verb] []!</B>", M, src), 1)
return
+11 -2
View File
@@ -248,10 +248,19 @@
src.other += using
using = new src.h_type( src )
using.name = "ears"
using.name = "left ear"
using.icon = ui_style
using.icon_state = "ears"
using.screen_loc = ui_ears
using.screen_loc = ui_lear
using.layer = 19
using.overlays += blocked
src.other += using
using = new src.h_type( src )
using.name = "right ear"
using.icon = ui_style
using.icon_state = "ears"
using.screen_loc = ui_rear
using.layer = 19
using.overlays += blocked
src.other += using
@@ -179,10 +179,19 @@
help_shake_act(M)
else
if (M.a_intent == "hurt")
var/attack_verb
switch(M.mutantrace)
if("lizard")
attack_verb = "scratch"
if("plant")
attack_verb = "slash"
else
attack_verb = "punch"
if ((prob(75) && health > 0))
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has punched [name]!</B>", M), 1)
O.show_message(text("\red <B>[] has [attack_verb]ed [name]!</B>", M), 1)
playsound(loc, "punch", 25, 1, -1)
var/damage = rand(5, 10)
@@ -201,7 +210,7 @@
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has attempted to punch [name]!</B>", M), 1)
O.show_message(text("\red <B>[] has attempted to [attack_verb] [name]!</B>", M), 1)
else
if (M.a_intent == "grab")
if (M == src)
@@ -406,6 +415,11 @@
else
icon_state = "monkey0"
if(client && client.admin_invis)
invisibility = 100
else
invisibility = 0
if (wear_mask)
if (istype(wear_mask, /obj/item/clothing/mask))
var/t1 = wear_mask.icon_state
+46 -26
View File
@@ -3,8 +3,12 @@
if (issilicon(src)) return 1
if (!ishuman(src)) return
var/mob/living/carbon/human/H = src
if (H.ears)
var/obj/item/device/radio/headset/dongle = H.ears
if (H.l_ear || H.r_ear)
var/obj/item/device/radio/headset/dongle
if(istype(H.l_ear,/obj/item/device/radio/headset))
dongle = H.l_ear
else
dongle = H.r_ear
if(!istype(dongle)) return
if(dongle.translate_binary) return 1
@@ -12,8 +16,12 @@
if (isalien(src)) return 1
if (!ishuman(src)) return
var/mob/living/carbon/human/H = src
if (H.ears)
var/obj/item/device/radio/headset/dongle = H.ears
if (H.l_ear || H.r_ear)
var/obj/item/device/radio/headset/dongle
if(istype(H.l_ear,/obj/item/device/radio/headset))
dongle = H.l_ear
else
dongle = H.r_ear
if(!istype(dongle)) return
if(dongle.translate_hive) return 1
@@ -75,8 +83,8 @@
var/channel_prefix = copytext(message, 1, 3)
var/list/keys = list(
":r" = "right hand",
":l" = "left hand",
":r" = "right ear",
":l" = "left ear",
":i" = "intercom",
":h" = "department",
":c" = "Command",
@@ -156,33 +164,39 @@
switch (message_mode)
if ("headset")
if (src:ears)
src:ears.talk_into(src, message)
used_radios += src:ears
if (src:l_ear && istype(src:l_ear,/obj/item/device/radio))
src:l_ear.talk_into(src, message)
used_radios += src:l_ear
else if (src:r_ear)
src:r_ear.talk_into(src, message)
used_radios += src:r_ear
message_range = 1
italics = 1
if ("secure headset")
if (src:ears)
src:ears.talk_into(src, message, 1)
used_radios += src:ears
if (src:l_ear && istype(src:l_ear,/obj/item/device/radio))
src:l_ear.talk_into(src, message, 1)
used_radios += src:l_ear
else if (src:r_ear)
src:r_ear.talk_into(src, message, 1)
used_radios += src:r_ear
message_range = 1
italics = 1
if ("right hand")
if (r_hand)
r_hand.talk_into(src, message)
used_radios += src:r_hand
if ("right ear")
if (src:r_ear)
src:r_ear.talk_into(src, message)
used_radios += src:r_ear
message_range = 1
italics = 1
if ("left hand")
if (l_hand)
l_hand.talk_into(src, message)
used_radios += src:l_hand
if ("left ear")
if (src:l_ear)
src:l_ear.talk_into(src, message)
used_radios += src:l_ear
message_range = 1
italics = 1
@@ -213,9 +227,12 @@
return
if ("department")
if (src:ears)
src:ears.talk_into(src, message, message_mode)
used_radios += src:ears
if (src:l_ear && istype(src:l_ear,/obj/item/device/radio))
src:l_ear.talk_into(src, message, message_mode)
used_radios += src:l_ear
else if (src:r_ear)
src:r_ear.talk_into(src, message, message_mode)
used_radios += src:r_ear
message_range = 1
italics = 1
if ("pAI")
@@ -234,9 +251,12 @@
else
//world << "SPECIAL HEADSETS"
if (message_mode in radiochannels)
if (src:ears)
src:ears.talk_into(src, message, message_mode)
used_radios += src:ears
if (src:l_ear && istype(src:l_ear,/obj/item/device/radio))
src:l_ear.talk_into(src, message, message_mode)
used_radios += src:l_ear
else if (src:r_ear)
src:r_ear.talk_into(src, message, message_mode)
used_radios += src:r_ear
message_range = 1
italics = 1
/////SPECIAL HEADSETS END
+10
View File
@@ -700,11 +700,17 @@
alert(src,"You have been banned.\nReason : [isbanned]","Ban","Ok")
del(src)
/*
if (!guests_allowed && IsGuestKey(key))
log_access("Failed Login: [src] - Guests not allowed")
message_admins("\blue Failed Login: [src] - Guests not allowed")
alert(src,"You cannot play here.\nReason : Guests not allowed","Guests not allowed","Ok")
del(src)
*/
if(IsGuestKey(src.key))
alert(src,"Baystation12 doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK")
del(src)
if (((world.address == address || !(address)) && !(host)))
host = key
@@ -803,6 +809,8 @@
else
gibs(loc, viruses)
sleep(15)
for(var/obj/item/I in src.contents)
I.loc = get_turf(src)
del(src)
/*
@@ -838,6 +846,8 @@ Dusting robots does not eject the MMI, so it's a bit more powerful than gib() /N
sleep(15)
if(isrobot(src)&&src:mmi)//Is a robot and it has an mmi.
del(src:mmi)//Delete the MMI first so that it won't go popping out.
for(var/obj/item/I in src.contents)
I.loc = get_turf(src)
del(src)
/*
@@ -9,7 +9,7 @@
special_check(var/mob/living/carbon/human/M)
/* if(ishuman(M))
if(istype(M.w_uniform, /obj/item/clothing/under/det) && istype(M.head, /obj/item/clothing/head/det_hat) && istype(M.wear_suit, /obj/item/clothing/suit/det_suit))
if(istype(M.w_uniform, /obj/item/clothing/under/det) && istype(M.head, /obj/item/clothing/head/det_hat) && istype(M.wear_suit, /obj/item/clothing/suit/storage/det_suit))
return 1
M << "\red You just don't feel cool enough to use this gun looking like that."
return 0 */
+1 -1
View File
@@ -73,7 +73,7 @@
if(isrobot(user))
return
else
else if (!isnull(I)) // As per code/game/atom_procs.dm, this shouldn't even be required, but for some reason is. -- Abi79
user.drop_item()
I.loc = src
+1 -1
View File
@@ -442,7 +442,7 @@ datum
build_path = "/obj/item/weapon/aiModule/asimov"
nanotrasen
name = "Core Module Design (Nanotrasen)"
name = "Core Module Design (NT Default)"
desc = "Allows for the construction of a NanoTrasen AI Core Module."
id = "nanotrasen_module"
req_tech = list("programming" = 3, "materials" = 6)