Fixed a few runtimes.

Changed the shotgun pump proc a bit, should work better now and not teleport old shells around.
Added a config option for the jobs to be loaded from the jobs.txt rather than use the defaults.
Loyalty implanter removed.  The Limplanter was designed to be on the prison station as it took more time and was a pain to get people up there to implant them.  No prison station, no Limplanter.
Implanter lockbox moved to the armory from the HoS' locker.
Security room's table once again shrunk so people can walk around in there.
Brig lockers are now anchored to the inside of the cells and once again have their IDs set.
Warden's locker moved to his office.
Cell controls Names/IDs/Access fixed as well as once again working with the brig lockers.
Removed a few of the blast doors from the inside of the brig.
The three secure cells have blast doors controlled from a button outside of the cell.
The play admin midis toggle should be working properly now.
Morgue trays will no longer teleport anything from anywhere.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2413 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
mport2004@gmail.com
2011-10-22 11:32:08 +00:00
parent 64887ce41c
commit 3c68098a08
22 changed files with 8742 additions and 8667 deletions

View File

@@ -37,6 +37,7 @@
var/guest_jobban = 1 var/guest_jobban = 1
var/usewhitelist = 0 var/usewhitelist = 0
var/kick_inactive = 0 //force disconnect for inactive players var/kick_inactive = 0 //force disconnect for inactive players
var/load_jobs_from_txt = 0
var/server var/server
var/banappeals var/banappeals
@@ -187,7 +188,7 @@
config.banappeals = value config.banappeals = value
if ("guest_jobban") if ("guest_jobban")
config.guest_jobban = text2num(value) config.guest_jobban = 1
if ("usewhitelist") if ("usewhitelist")
config.usewhitelist = 1 config.usewhitelist = 1
@@ -214,7 +215,10 @@
diary << "Incorrect probability configuration definition: [prob_name] [prob_value]." diary << "Incorrect probability configuration definition: [prob_name] [prob_value]."
if ("kick_inactive") if ("kick_inactive")
config.kick_inactive = text2num(value) config.kick_inactive = 1
if("load_jobs_from_txt")
load_jobs_from_txt = 1
else else
diary << "Unknown setting in configuration: '[name]'" diary << "Unknown setting in configuration: '[name]'"

View File

@@ -16,7 +16,6 @@ datum/mind
var/has_been_rev = 0//Tracks if this mind has been a rev or not var/has_been_rev = 0//Tracks if this mind has been a rev or not
proc/transfer_to(mob/new_character) proc/transfer_to(mob/new_character)
if(current) if(current)
current.mind = null current.mind = null

View File

@@ -39,10 +39,10 @@
var/STFU_radio //80+ people rounds are fun to admin when text flies faster than airport security var/STFU_radio //80+ people rounds are fun to admin when text flies faster than airport security
var/sound_adminhelp = 0 //If set to 1 this will play a sound when adminhelps are received. var/sound_adminhelp = 0 //If set to 1 this will play a sound when adminhelps are received.
var/midis = 1 //Check if midis should be played for someone -- Urist var/midis = 1 //Check if midis should be played for someone
var/bubbles = 1 //Check if bubbles should be displayed for someone -- Doohl var/bubbles = 1 //Check if bubbles should be displayed for someone
var/be_alien = 0 //Check if that guy wants to be an alien -- Urist var/be_alien = 0 //Check if that guy wants to be an alien
var/be_pai = 1 //Consider client when searching for players to recruit as a pAI -- TLE var/be_pai = 1 //Consider client when searching for players to recruit as a pAI
var/vote = null var/vote = null

View File

@@ -33,6 +33,7 @@
I'll make some notes on where certain variable defines should probably go. I'll make some notes on where certain variable defines should probably go.
Changing this around would probably require a good look-over the pre-existing code. Changing this around would probably require a good look-over the pre-existing code.
*/ */
var/midis = 1 //Check if midis should be played for someone
var/alien_egg_flag = 0//Have you been infected? var/alien_egg_flag = 0//Have you been infected?
var/last_special = 0 var/last_special = 0
var/obj/screen/zone_sel/zone_sel = null var/obj/screen/zone_sel/zone_sel = null

View File

@@ -47,6 +47,7 @@
/mob/living/simple_animal/Login() /mob/living/simple_animal/Login()
if(src && src.client) if(src && src.client)
src.client.screen = null src.client.screen = null
..()
/mob/living/simple_animal/Life() /mob/living/simple_animal/Life()

View File

@@ -154,7 +154,8 @@
icon = 'windoor.dmi' icon = 'windoor.dmi'
icon_state = "leftsecure" icon_state = "leftsecure"
base_state = "leftsecure" base_state = "leftsecure"
var/id = 1.0 req_access = list(access_security)
var/id = null
/obj/machinery/door/window/northleft /obj/machinery/door/window/northleft

View File

@@ -259,4 +259,43 @@ var/global/datum/controller/occupations/job_master
if(rank == "Clown") if(rank == "Clown")
spawn(1) spawn(1)
clname(H) clname(H)
return 1
proc/LoadJobs(jobsfile) //ran during round setup, reads info from jobs.txt -- Urist
if(!config.load_jobs_from_txt)
return 0
var/text = file2text(jobsfile)
if(!text)
world << "No jobs.txt found, using defaults."
return
var/list/jobEntries = dd_text2list(text, "\n")
for(var/job in jobEntries)
if(!job)
continue
job = trim(job)
if (!length(job))
continue
var/pos = findtext(job, "=")
var/name = null
var/value = null
if(pos)
name = copytext(job, 1, pos)
value = copytext(job, pos + 1)
else
continue
if(name && value)
var/datum/job/J = GetJob(name)
if(!J) continue
J.total_positions = text2num(value)
J.spawn_positions = text2num(value)
return 1 return 1

View File

@@ -1,45 +1,4 @@
/*
/proc/SetupJobs(jobsfile) //ran during round setup, reads info from jobs.txt -- Urist
return 1
var/text = file2text(jobsfile)
if(!text)
world << "No jobs.txt found, using defaults."
return
var/list/jobEntries = dd_text2list(text, "\n")
world << "\red \b Setting up jobs..."
for(var/job in jobEntries)
if (!job)
continue
job = trim(job)
if (!length(job))
continue
var/pos = findtext(job, "=")
var/name = null
var/value = null
if (pos)
name = copytext(job, 1, pos)
value = copytext(job, pos + 1)
else
continue
if(name && value)
occupations[name] = text2num(value)
if(name && value)
jobMax[name] = text2num(value)
world << "\red \b Jobs set up!"
return
*/
//TODO: put these somewhere else //TODO: put these somewhere else
/client/proc/mimewall() /client/proc/mimewall()

View File

@@ -14,114 +14,147 @@
req_access = list(access_brig) req_access = list(access_brig)
anchored = 1.0 // can't pick it up anchored = 1.0 // can't pick it up
density = 0 // can walk through it. density = 0 // can walk through it.
var/id = null // id of door it controls. var
var/releasetime = 0 // when world.time reaches it - release the prisoneer id = null // id of door it controls.
var/timing = 1 // boolean, true/1 timer is on, false/0 means it's not timing releasetime = 0 // when world.time reaches it - release the prisoneer
var/childproof = 0 // boolean, when activating the door controls, locks door for 1 minute timing = 1 // boolean, true/1 timer is on, false/0 means it's not timing
var/picture_state // icon_state of alert picture, if not displaying text/numbers picture_state // icon_state of alert picture, if not displaying text/numbers
var/list/obj/machinery/door/window/brigdoor/targetdoors = new list/obj/machinery/targets = list()
var/list/obj/machinery/flasher/targetflashers = new
New()
..()
pixel_x = ((src.dir & 3)? (0) : (src.dir == 4 ? 32 : -32))
pixel_y = ((src.dir & 3)? (src.dir ==1 ? 24 : -32) : (0))
spawn(20)
for(var/obj/machinery/door/window/brigdoor/M in world)
if (M.id == src.id)
targets += M
for(var/obj/machinery/flasher/F in world)
if(F.id == src.id)
targets += F
for(var/obj/structure/secure_closet/brig/C in world)
if(C.id == src.id)
targets += C
if(targets.len==0)
stat |= BROKEN
update_icon()
return
return
/obj/machinery/door_timer/New()
..()
for(var/obj/machinery/door/window/brigdoor/M in world)
if (M.id == src.id)
targetdoors += M
break
if (targetdoors.len==0)
stat |= BROKEN
targetflashers = list()
for(var/obj/machinery/flasher/F in world)
if(F.id == src.id)
targetflashers += F
update_icon()
//Main door timer loop, if it's timing and time is >0 reduce time by 1. //Main door timer loop, if it's timing and time is >0 reduce time by 1.
// if it's less than 0, open door, reset timer // if it's less than 0, open door, reset timer
// update the door_timer window and the icon // update the door_timer window and the icon
/obj/machinery/door_timer/process() process()
if (stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN)) return
if(src.timing)
if(world.time > src.releasetime)
src.timer_end() // open doors, reset timer, clear status screen
src.timing = 0
src.updateUsrDialog()
src.update_icon()
else
timer_end()
return return
if (src.timing)
if (world.time > src.releasetime)
src.opendoor() // open doors, reset timer, clear status screen
src.timing = 0
src.updateUsrDialog()
src.update_icon()
else
opendoor()
return
// has the door power sitatuation changed, if so update icon. // has the door power sitatuation changed, if so update icon.
/obj/machinery/door_timer/power_change() power_change()
..() ..()
update_icon() update_icon()
return
// open/closedoor checks if door_timer has power, if so it checks if the // open/closedoor checks if door_timer has power, if so it checks if the
// linked door is open/closed (by density) then opens it/closes it. // linked door is open/closed (by density) then opens it/closes it.
/obj/machinery/door_timer/proc/opendoor() proc/timer_start()
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN)) return 0
for(var/obj/machinery/door/window/brigdoor/door in targets)
if(door.density) continue
spawn(0)
door.close()
for(var/obj/structure/secure_closet/brig/C in targets)
if(C.broken) continue
if(!C.close()) continue
C.locked = 1
C.icon_state = C.icon_locked
return 1
proc/timer_end()
if(stat & (NOPOWER|BROKEN)) return 0
for(var/obj/machinery/door/window/brigdoor/door in targets)
if(!door.density) continue
spawn(0)
door.open()
for(var/obj/structure/secure_closet/brig/C in targets)
if(C.broken) continue
if(C.opened) continue
C.locked = 0
C.icon_state = C.icon_closed
return 1
proc/timeleft()
. = (releasetime-world.time)/10
if(. < 0)
. = 0
proc/timeset(var/seconds)
releasetime=world.time+seconds*10
return return
for (var/obj/machinery/door/window/brigdoor/targetdoor in targetdoors)
if(targetdoor.density)
spawn( 0 )
targetdoor.open()
return
/obj/machinery/door_timer/proc/closedoor()
if(stat & (NOPOWER|BROKEN))
return
for (var/obj/machinery/door/window/brigdoor/targetdoor in targetdoors)
if(!targetdoor.density)
spawn( 0 )
targetdoor.close()
return
/obj/machinery/door_timer/proc/timeleft()
. = (releasetime-world.time)/10
if (. < 0)
. = 0
/obj/machinery/door_timer/proc/timeset(var/seconds)
releasetime=world.time+seconds*10
//Allows AIs to use door_timer, see human attack_hand function below //Allows AIs to use door_timer, see human attack_hand function below
/obj/machinery/door_timer/attack_ai(var/mob/user as mob) attack_ai(var/mob/user as mob)
return src.attack_hand(user) return src.attack_hand(user)
//Allows monkeys to use door_timer, see human attack_hand function below
/obj/machinery/door_timer/attack_paw(var/mob/user as mob)
return src.attack_hand(user)
//Allows humans to use door_timer //Allows humans to use door_timer
//Opens dialog window when someone clicks on door timer //Opens dialog window when someone clicks on door timer
// Allows altering timer and the timing boolean. // Allows altering timer and the timing boolean.
// Flasher activation limited to 150 seconds // Flasher activation limited to 150 seconds
/obj/machinery/door_timer/attack_hand(var/mob/user as mob) attack_hand(var/mob/user as mob)
if(..()) if(..())
return return
var/dat = "<HTML><BODY><TT><B>Door [src.id] controls</B>" var/second = round(timeleft() % 60)
user.machine = src var/minute = round((timeleft() - second) / 60)
var/d2 user.machine = src
if (src.timing) var/dat = "<HTML><BODY><TT>"
d2 = text("<A href='?src=\ref[];timing=0'>Stop Timer and open doors</A><br>", src) dat += "<HR>Timer System:</hr>"
else dat += "<b>Door [src.id] controls</b><br/>"
d2 = text("<A href='?src=\ref[];timing=1'>Activate Timer and close doors</A><br>", src) if (src.timing)
var/timeleft = timeleft() dat += "<a href='?src=\ref[src];timing=0'>Stop Timer and open door</a><br/>"
var/second = round(timeleft % 60)
var/minute = round((timeleft - second) / 60)
dat += text("<br><HR>\nTimer System: [d2]\nTime Left: [(minute ? text("[minute]:") : null)][second] <A href='?src=\ref[src];tp=-60'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=60'>+</A>")
if (targetflashers.len)
dat += "<BR>"
for(var/obj/machinery/flasher/F in targetflashers)
if(F.last_flash && (F.last_flash + 150) > world.time)
dat += text("<BR><A href='?src=\ref[];fc=1'>Flash Cell (Charging)</A>", src)
else else
dat += text("<BR><A href='?src=\ref[];fc=1'>Flash Cell</A>", src) dat += "<a href='?src=\ref[src];timing=1'>Activate Timer and close door</a><br/>"
dat += text("<BR><BR><A href='?src=\ref[];mach_close=computer'>Close</A></TT></BODY></HTML>", user)
user << browse(dat, "window=computer;size=400x500") dat += "Time Left: [(minute ? text("[minute]:") : null)][second] <br/>"
onclose(user, "computer") dat += "<a href='?src=\ref[src];tp=-60'>-</a> <a href='?src=\ref[src];tp=-1'>-</a> <a href='?src=\ref[src];tp=1'>+</a> <A href='?src=\ref[src];tp=60'>+</a><br/>"
return
for(var/obj/machinery/flasher/F in targets)
if(F.last_flash && (F.last_flash + 150) > world.time)
dat += "<br/><A href='?src=\ref[src];fc=1'>Flash Charging</A>"
else
dat += "<br/><A href='?src=\ref[src];fc=1'>Activate Flash</A>"
dat += "<br/><br/><a href='?src=\ref[user];mach_close=computer'>Close</a>"
dat += "</TT></BODY></HTML>"
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
return
//Function for using door_timer dialog input, checks if user has permission //Function for using door_timer dialog input, checks if user has permission
// href_list to // href_list to
@@ -129,92 +162,135 @@
// "tp" value to modify timer // "tp" value to modify timer
// "fc" activates flasher // "fc" activates flasher
// Also updates dialog window and timer icon // Also updates dialog window and timer icon
/obj/machinery/door_timer/Topic(href, href_list) Topic(href, href_list)
if(..()) if(..())
return return
if(!src.allowed(usr)) if(!src.allowed(usr))
return
usr.machine = src
if(href_list["timing"])
src.timing = text2num(href_list["timing"])
else
if(href_list["tp"]) //adjust timer, close door if not already closed
var/tp = text2num(href_list["tp"])
var/timeleft = timeleft()
timeleft += tp
timeleft = min(max(round(timeleft), 0), 600)
timeset(timeleft)
//src.timing = 1
//src.closedoor()
if(href_list["fc"])
for(var/obj/machinery/flasher/F in targets)
F.flash()
src.add_fingerprint(usr)
src.updateUsrDialog()
src.update_icon()
if(src.timing)
src.timer_start()
else
src.timer_end()
return return
usr.machine = src
if (href_list["timing"])
src.timing = text2num(href_list["timing"])
else
if (href_list["tp"]) //adjust timer, close door if not already closed
var/tp = text2num(href_list["tp"])
var/timeleft = timeleft()
timeleft += tp
timeleft = min(max(round(timeleft), 0), 600)
timeset(timeleft)
//src.timing = 1
//src.closedoor()
if (href_list["fc"])
for (var/obj/machinery/flasher/F in targetflashers)
F.flash()
src.add_fingerprint(usr)
src.updateUsrDialog()
src.update_icon()
if (src.timing)
src.closedoor()
else
src.opendoor()
return
//icon update function //icon update function
// if NOPOWER, display blank // if NOPOWER, display blank
// if BROKEN, display blue screen of death icon AI uses // if BROKEN, display blue screen of death icon AI uses
// if timing=true, run update display function // if timing=true, run update display function
/obj/machinery/door_timer/update_icon() update_icon()
if(stat & (NOPOWER)) if(stat & (NOPOWER))
icon_state = "frame" icon_state = "frame"
return
if(stat & (BROKEN))
set_picture("ai_bsod")
return
if(src.timing)
var/disp1 = uppertext(id)
var/timeleft = timeleft()
var/disp2 = "[add_zero(num2text((timeleft / 60) % 60),2)]~[add_zero(num2text(timeleft % 60), 2)]"
spawn( 5 )
update_display(disp1, disp2)
else
update_display("SET","TIME")
return return
if(stat & (BROKEN))
set_picture("ai_bsod")
return
if(src.timing)
var/disp1 = uppertext(id)
var/timeleft = timeleft()
var/disp2 = "[add_zero(num2text((timeleft / 60) % 60),2)]~[add_zero(num2text(timeleft % 60), 2)]"
spawn( 5 )
update_display(disp1, disp2)
else
update_display("SET","TIME")
// Adds an icon in case the screen is broken/off, stolen from status_display.dm // Adds an icon in case the screen is broken/off, stolen from status_display.dm
/obj/machinery/door_timer/proc/set_picture(var/state) proc/set_picture(var/state)
picture_state = state picture_state = state
overlays = null overlays = null
overlays += image('status_display.dmi', icon_state=picture_state) overlays += image('status_display.dmi', icon_state=picture_state)
//Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display //Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display
// Stolen from status_display // Stolen from status_display
/obj/machinery/door_timer/proc/update_display(var/line1, var/line2) proc/update_display(var/line1, var/line2)
if(line2 == null) // single line display if(line2 == null) // single line display
overlays = null overlays = null
overlays += texticon(line1, 23, -13) overlays += texticon(line1, 23, -13)
else // dual line display else // dual line display
overlays = null overlays = null
overlays += texticon(line1, 23, -9) overlays += texticon(line1, 23, -9)
overlays += texticon(line2, 23, -17) overlays += texticon(line2, 23, -17)
// return an icon of a time text string (tn) // return an icon of a time text string (tn)
// valid characters are 0-9 and : // valid characters are 0-9 and :
// px, py are pixel offsets // px, py are pixel offsets
//Actual string input to icon display for loop, with 5 pixel x offsets for each letter. //Actual string input to icon display for loop, with 5 pixel x offsets for each letter.
//Stolen from status_display //Stolen from status_display
/obj/machinery/door_timer/proc/texticon(var/tn, var/px = 0, var/py = 0) proc/texticon(var/tn, var/px = 0, var/py = 0)
var/image/I = image('status_display.dmi', "blank") var/image/I = image('status_display.dmi', "blank")
var/len = lentext(tn) var/len = lentext(tn)
for(var/d = 1 to len) for(var/d = 1 to len)
var/char = copytext(tn, len-d+1, len-d+2) var/char = copytext(tn, len-d+1, len-d+2)
if(char == " ") if(char == " ")
continue continue
var/image/ID = image('status_display.dmi', icon_state=char) var/image/ID = image('status_display.dmi', icon_state=char)
ID.pixel_x = -(d-1)*5 + px ID.pixel_x = -(d-1)*5 + px
ID.pixel_y = py ID.pixel_y = py
I.overlays += ID
I.overlays += ID return I
return I
/obj/machinery/door_timer/cell_1
name = "Cell 1"
id = "Cell 1"
dir = 2
pixel_y = -32
/obj/machinery/door_timer/cell_2
name = "Cell 2"
id = "Cell 2"
dir = 2
pixel_y = -32
/obj/machinery/door_timer/cell_3
name = "Cell 3"
id = "Cell 3"
dir = 2
pixel_y = -32
/obj/machinery/door_timer/cell_4
name = "Cell 4"
id = "Cell 4"
dir = 2
pixel_y = -32
/obj/machinery/door_timer/cell_5
name = "Cell 5"
id = "Cell 5"
dir = 2
pixel_y = -32
/obj/machinery/door_timer/cell_6
name = "Cell 6"
id = "Cell 6"
dir = 4
pixel_x = 32

View File

@@ -123,22 +123,15 @@
return return
/obj/structure/m_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) /obj/structure/m_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
if (istype(O, /obj/structure/closet/body_bag) || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))
O.loc = src.loc
for(var/mob/B in viewers(user, 3))
if ((B.client && !( B.blinded )))
B << text("\red [] stuffs the bodybag into []!", user, src)
return
if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))) if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)))
return return
if (!ismob(O)) if (!ismob(O) && !istype(O, /obj/structure/closet/body_bag))
return return
O.loc = src.loc O.loc = src.loc
if (user != O) if (user != O)
for(var/mob/B in viewers(user, 3)) for(var/mob/B in viewers(user, 3))
if ((B.client && !( B.blinded ))) if ((B.client && !( B.blinded )))
B << text("\red [] stuffs [] into []!", user, O, src) B << text("\red [] stuffs [] into []!", user, O, src)
//Foreach goto(99)
return return
/obj/structure/crematorium/proc/update() /obj/structure/crematorium/proc/update()

View File

@@ -23,6 +23,7 @@ datum/controller/game_controller
job_master = new /datum/controller/occupations() job_master = new /datum/controller/occupations()
if(job_master.SetupOccupations()) if(job_master.SetupOccupations())
world << "\red \b Job setup complete" world << "\red \b Job setup complete"
job_master.LoadJobs("config/jobs.txt")
if(!tension_master) if(!tension_master)
tension_master = new /datum/tension() tension_master = new /datum/tension()
@@ -33,8 +34,6 @@ datum/controller/game_controller
setupgenetics() setupgenetics()
// SetupJobs("config/jobs.txt")
syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round. syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round.
syndicate_code_response = generate_code_phrase() syndicate_code_response = generate_code_phrase()

View File

@@ -55,7 +55,6 @@
new /obj/item/clothing/head/helmet(src) new /obj/item/clothing/head/helmet(src)
new /obj/item/device/radio/headset/heads/hos(src) new /obj/item/device/radio/headset/heads/hos(src)
new /obj/item/weapon/shield/riot(src) new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/storage/lockbox/loyalty(src)
new /obj/item/weapon/storage/flashbang_kit(src) new /obj/item/weapon/storage/flashbang_kit(src)
new /obj/item/weapon/storage/belt/security(src) new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/melee/baton(src) new /obj/item/weapon/melee/baton(src)
@@ -154,6 +153,7 @@
/obj/structure/secure_closet/brig /obj/structure/secure_closet/brig
name = "Brig Locker" name = "Brig Locker"
req_access = list(access_brig) req_access = list(access_brig)
anchored = 1
var/id = null var/id = null
New() New()

View File

@@ -2,10 +2,11 @@
set category = "Special Verbs" set category = "Special Verbs"
set name = "Toggle Midis" set name = "Toggle Midis"
if(usr.client.midis) if(istype(usr,/mob))
usr.client.midis=0 var/mob/M = usr
usr << "You will now stop receiving any sounds uploaded by admins." M.midis = !M.midis
else
usr.client.midis=1 if(M.client)
usr << "You will now start receiving any sounds uploaded by admins." M.client.midis = !M.client.midis
return M << "You will now [M.client.midis? "start":"stop"] receiving any sounds uploaded by admins."
return

View File

@@ -11,11 +11,13 @@
loc = location loc = location
else//Safety, in case a turf cannot be found. else//Safety, in case a turf cannot be found.
loc = pick(latejoin) loc = pick(latejoin)
if(!istype(body,/mob)) return//This needs to be recoded sometime so it has loc as its first arg
real_name = body.real_name real_name = body.real_name
name = body.real_name name = body.real_name
if(!safety) if(!safety)
corpse = body corpse = body
verbs += /mob/dead/observer/proc/reenter_corpse verbs += /mob/dead/observer/proc/reenter_corpse
return
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) /mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
return 1 return 1

View File

@@ -743,10 +743,11 @@
handle_regular_hud_updates() handle_regular_hud_updates()
if(client) if(!client) return 0
for(var/image/hud in client.images)
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe for(var/image/hud in client.images)
del(hud) if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
del(hud)
if (stat == 2 || mutations & XRAY) if (stat == 2 || mutations & XRAY)
sight |= SEE_TURFS sight |= SEE_TURFS

View File

@@ -25,7 +25,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates
var/obj/item/device/paicard/card = locate(href_list["device"]) var/obj/item/device/paicard/card = locate(href_list["device"])
if(card.pai) if(card.pai)
return return
if(card && candidate) if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate))
var/mob/living/silicon/pai/pai = new(card) var/mob/living/silicon/pai/pai = new(card)
pai.name = candidate.name pai.name = candidate.name
pai.real_name = pai.name pai.real_name = pai.name

View File

@@ -2,6 +2,9 @@
log_access("Login: [key_name(src)] from [src.client.address ? src.client.address : "localhost"]") log_access("Login: [key_name(src)] from [src.client.address ? src.client.address : "localhost"]")
src.lastKnownIP = src.client.address src.lastKnownIP = src.client.address
src.computer_id = src.client.computer_id src.computer_id = src.client.computer_id
if(!src.client.midis || !src.midis)
src.client.midis = 0
src.midis = 0
if (config.log_access) if (config.log_access)
for (var/mob/M in world) for (var/mob/M in world)
if(M == src) if(M == src)

View File

@@ -34,13 +34,15 @@
pumped = 0 pumped = 0
if(current_shell)//We have a shell in the chamber if(current_shell)//We have a shell in the chamber
current_shell.loc = get_turf(src)//Eject casing current_shell.loc = get_turf(src)//Eject casing
current_shell = null
if(in_chamber)
in_chamber = null
if(!loaded.len) return 0 if(!loaded.len) return 0
var/obj/item/ammo_casing/AC = loaded[1] //load next casing. var/obj/item/ammo_casing/AC = loaded[1] //load next casing.
loaded -= AC //Remove casing from loaded list. loaded -= AC //Remove casing from loaded list.
current_shell = AC current_shell = AC
if(AC.BB) if(AC.BB)
in_chamber = AC.BB //Load projectile into chamber. in_chamber = AC.BB //Load projectile into chamber.
AC.BB.loc = src //Set projectile loc to gun.
return 1 return 1

View File

@@ -82,7 +82,7 @@ HOSTEDBY Yournamehere
## Set to jobban "Guest-" accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions. ## Set to jobban "Guest-" accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
## Set to 1 to jobban them from those positions, set to 0 to allow them. ## Set to 1 to jobban them from those positions, set to 0 to allow them.
GUEST_JOBBAN 1 # GUEST_JOBBAN
## Set to jobban everyone who's key is not listed in data/whitelist.txt from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions. ## Set to jobban everyone who's key is not listed in data/whitelist.txt from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
## Uncomment to 1 to jobban, leave commented out to allow these positions for everyone (but see GUEST_JOBBAN above and regular jobbans) ## Uncomment to 1 to jobban, leave commented out to allow these positions for everyone (but see GUEST_JOBBAN above and regular jobbans)
@@ -97,3 +97,6 @@ GUEST_JOBBAN 1
## In-game features ## In-game features
## spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard ## spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard
# FEATURE_OBJECT_SPELL_SYSTEM # FEATURE_OBJECT_SPELL_SYSTEM
##Toggle for having jobs load up from the .txt
# LOAD_JOBS_FROM_TXT

File diff suppressed because it is too large Load Diff

View File

@@ -541,7 +541,6 @@
#include "code\game\objects\noticeboard.dm" #include "code\game\objects\noticeboard.dm"
#include "code\game\objects\object_procs.dm" #include "code\game\objects\object_procs.dm"
#include "code\game\objects\portals.dm" #include "code\game\objects\portals.dm"
#include "code\game\objects\secure_closets.dm"
#include "code\game\objects\sign_decals.dm" #include "code\game\objects\sign_decals.dm"
#include "code\game\objects\stool.dm" #include "code\game\objects\stool.dm"
#include "code\game\objects\structures.dm" #include "code\game\objects\structures.dm"
@@ -576,6 +575,7 @@
#include "code\game\objects\closets\secure\medical.dm" #include "code\game\objects\closets\secure\medical.dm"
#include "code\game\objects\closets\secure\personal.dm" #include "code\game\objects\closets\secure\personal.dm"
#include "code\game\objects\closets\secure\scientist.dm" #include "code\game\objects\closets\secure\scientist.dm"
#include "code\game\objects\closets\secure\secure_closets.dm"
#include "code\game\objects\closets\secure\security.dm" #include "code\game\objects\closets\secure\security.dm"
#include "code\game\objects\devices\aicard.dm" #include "code\game\objects\devices\aicard.dm"
#include "code\game\objects\devices\chameleonproj.dm" #include "code\game\objects\devices\chameleonproj.dm"