mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
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:
@@ -37,6 +37,7 @@
|
||||
var/guest_jobban = 1
|
||||
var/usewhitelist = 0
|
||||
var/kick_inactive = 0 //force disconnect for inactive players
|
||||
var/load_jobs_from_txt = 0
|
||||
|
||||
var/server
|
||||
var/banappeals
|
||||
@@ -187,7 +188,7 @@
|
||||
config.banappeals = value
|
||||
|
||||
if ("guest_jobban")
|
||||
config.guest_jobban = text2num(value)
|
||||
config.guest_jobban = 1
|
||||
|
||||
if ("usewhitelist")
|
||||
config.usewhitelist = 1
|
||||
@@ -214,7 +215,10 @@
|
||||
diary << "Incorrect probability configuration definition: [prob_name] [prob_value]."
|
||||
|
||||
if ("kick_inactive")
|
||||
config.kick_inactive = text2num(value)
|
||||
config.kick_inactive = 1
|
||||
|
||||
if("load_jobs_from_txt")
|
||||
load_jobs_from_txt = 1
|
||||
|
||||
else
|
||||
diary << "Unknown setting in configuration: '[name]'"
|
||||
|
||||
@@ -16,7 +16,6 @@ datum/mind
|
||||
|
||||
var/has_been_rev = 0//Tracks if this mind has been a rev or not
|
||||
|
||||
|
||||
proc/transfer_to(mob/new_character)
|
||||
if(current)
|
||||
current.mind = null
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
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/midis = 1 //Check if midis should be played for someone -- Urist
|
||||
var/bubbles = 1 //Check if bubbles should be displayed for someone -- Doohl
|
||||
var/be_alien = 0 //Check if that guy wants to be an alien -- Urist
|
||||
var/be_pai = 1 //Consider client when searching for players to recruit as a pAI -- TLE
|
||||
var/midis = 1 //Check if midis should be played for someone
|
||||
var/bubbles = 1 //Check if bubbles should be displayed for someone
|
||||
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
|
||||
|
||||
|
||||
var/vote = null
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
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.
|
||||
*/
|
||||
var/midis = 1 //Check if midis should be played for someone
|
||||
var/alien_egg_flag = 0//Have you been infected?
|
||||
var/last_special = 0
|
||||
var/obj/screen/zone_sel/zone_sel = null
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
/mob/living/simple_animal/Login()
|
||||
if(src && src.client)
|
||||
src.client.screen = null
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/Life()
|
||||
|
||||
|
||||
@@ -154,7 +154,8 @@
|
||||
icon = 'windoor.dmi'
|
||||
icon_state = "leftsecure"
|
||||
base_state = "leftsecure"
|
||||
var/id = 1.0
|
||||
req_access = list(access_security)
|
||||
var/id = null
|
||||
|
||||
|
||||
/obj/machinery/door/window/northleft
|
||||
|
||||
@@ -259,4 +259,43 @@ var/global/datum/controller/occupations/job_master
|
||||
if(rank == "Clown")
|
||||
spawn(1)
|
||||
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
|
||||
@@ -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
|
||||
/client/proc/mimewall()
|
||||
|
||||
@@ -14,114 +14,147 @@
|
||||
req_access = list(access_brig)
|
||||
anchored = 1.0 // can't pick it up
|
||||
density = 0 // can walk through it.
|
||||
var/id = null // id of door it controls.
|
||||
var/releasetime = 0 // when world.time reaches it - release the prisoneer
|
||||
var/timing = 1 // boolean, true/1 timer is on, false/0 means it's not timing
|
||||
var/childproof = 0 // boolean, when activating the door controls, locks door for 1 minute
|
||||
var/picture_state // icon_state of alert picture, if not displaying text/numbers
|
||||
var/list/obj/machinery/door/window/brigdoor/targetdoors = new
|
||||
var/list/obj/machinery/flasher/targetflashers = new
|
||||
var
|
||||
id = null // id of door it controls.
|
||||
releasetime = 0 // when world.time reaches it - release the prisoneer
|
||||
timing = 1 // boolean, true/1 timer is on, false/0 means it's not timing
|
||||
picture_state // icon_state of alert picture, if not displaying text/numbers
|
||||
list/obj/machinery/targets = list()
|
||||
|
||||
|
||||
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.
|
||||
// if it's less than 0, open door, reset timer
|
||||
// update the door_timer window and the icon
|
||||
/obj/machinery/door_timer/process()
|
||||
if (stat & (NOPOWER|BROKEN))
|
||||
process()
|
||||
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
|
||||
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.
|
||||
/obj/machinery/door_timer/power_change()
|
||||
..()
|
||||
update_icon()
|
||||
power_change()
|
||||
..()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
// 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.
|
||||
/obj/machinery/door_timer/proc/opendoor()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
proc/timer_start()
|
||||
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
|
||||
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
|
||||
/obj/machinery/door_timer/attack_ai(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
attack_ai(var/mob/user as mob)
|
||||
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
|
||||
//Opens dialog window when someone clicks on door timer
|
||||
// Allows altering timer and the timing boolean.
|
||||
// Flasher activation limited to 150 seconds
|
||||
/obj/machinery/door_timer/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
var/dat = "<HTML><BODY><TT><B>Door [src.id] controls</B>"
|
||||
user.machine = src
|
||||
var/d2
|
||||
if (src.timing)
|
||||
d2 = text("<A href='?src=\ref[];timing=0'>Stop Timer and open doors</A><br>", src)
|
||||
else
|
||||
d2 = text("<A href='?src=\ref[];timing=1'>Activate Timer and close doors</A><br>", src)
|
||||
var/timeleft = timeleft()
|
||||
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)
|
||||
attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
var/second = round(timeleft() % 60)
|
||||
var/minute = round((timeleft() - second) / 60)
|
||||
user.machine = src
|
||||
var/dat = "<HTML><BODY><TT>"
|
||||
dat += "<HR>Timer System:</hr>"
|
||||
dat += "<b>Door [src.id] controls</b><br/>"
|
||||
if (src.timing)
|
||||
dat += "<a href='?src=\ref[src];timing=0'>Stop Timer and open door</a><br/>"
|
||||
else
|
||||
dat += text("<BR><A href='?src=\ref[];fc=1'>Flash Cell</A>", src)
|
||||
dat += text("<BR><BR><A href='?src=\ref[];mach_close=computer'>Close</A></TT></BODY></HTML>", user)
|
||||
user << browse(dat, "window=computer;size=400x500")
|
||||
onclose(user, "computer")
|
||||
return
|
||||
dat += "<a href='?src=\ref[src];timing=1'>Activate Timer and close door</a><br/>"
|
||||
|
||||
dat += "Time Left: [(minute ? text("[minute]:") : null)][second] <br/>"
|
||||
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/>"
|
||||
|
||||
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
|
||||
// href_list to
|
||||
@@ -129,92 +162,135 @@
|
||||
// "tp" value to modify timer
|
||||
// "fc" activates flasher
|
||||
// Also updates dialog window and timer icon
|
||||
/obj/machinery/door_timer/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(!src.allowed(usr))
|
||||
Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
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
|
||||
|
||||
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
|
||||
// if NOPOWER, display blank
|
||||
// if BROKEN, display blue screen of death icon AI uses
|
||||
// if timing=true, run update display function
|
||||
/obj/machinery/door_timer/update_icon()
|
||||
if(stat & (NOPOWER))
|
||||
icon_state = "frame"
|
||||
update_icon()
|
||||
if(stat & (NOPOWER))
|
||||
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
|
||||
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
|
||||
/obj/machinery/door_timer/proc/set_picture(var/state)
|
||||
picture_state = state
|
||||
overlays = null
|
||||
overlays += image('status_display.dmi', icon_state=picture_state)
|
||||
proc/set_picture(var/state)
|
||||
picture_state = state
|
||||
overlays = null
|
||||
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
|
||||
// Stolen from status_display
|
||||
/obj/machinery/door_timer/proc/update_display(var/line1, var/line2)
|
||||
if(line2 == null) // single line display
|
||||
overlays = null
|
||||
overlays += texticon(line1, 23, -13)
|
||||
else // dual line display
|
||||
overlays = null
|
||||
overlays += texticon(line1, 23, -9)
|
||||
overlays += texticon(line2, 23, -17)
|
||||
// return an icon of a time text string (tn)
|
||||
// valid characters are 0-9 and :
|
||||
// px, py are pixel offsets
|
||||
proc/update_display(var/line1, var/line2)
|
||||
if(line2 == null) // single line display
|
||||
overlays = null
|
||||
overlays += texticon(line1, 23, -13)
|
||||
else // dual line display
|
||||
overlays = null
|
||||
overlays += texticon(line1, 23, -9)
|
||||
overlays += texticon(line2, 23, -17)
|
||||
// return an icon of a time text string (tn)
|
||||
// valid characters are 0-9 and :
|
||||
// px, py are pixel offsets
|
||||
|
||||
|
||||
//Actual string input to icon display for loop, with 5 pixel x offsets for each letter.
|
||||
//Stolen from status_display
|
||||
/obj/machinery/door_timer/proc/texticon(var/tn, var/px = 0, var/py = 0)
|
||||
var/image/I = image('status_display.dmi', "blank")
|
||||
var/len = lentext(tn)
|
||||
proc/texticon(var/tn, var/px = 0, var/py = 0)
|
||||
var/image/I = image('status_display.dmi', "blank")
|
||||
var/len = lentext(tn)
|
||||
|
||||
for(var/d = 1 to len)
|
||||
var/char = copytext(tn, len-d+1, len-d+2)
|
||||
if(char == " ")
|
||||
continue
|
||||
var/image/ID = image('status_display.dmi', icon_state=char)
|
||||
ID.pixel_x = -(d-1)*5 + px
|
||||
ID.pixel_y = py
|
||||
|
||||
I.overlays += ID
|
||||
|
||||
return I
|
||||
for(var/d = 1 to len)
|
||||
var/char = copytext(tn, len-d+1, len-d+2)
|
||||
if(char == " ")
|
||||
continue
|
||||
var/image/ID = image('status_display.dmi', icon_state=char)
|
||||
ID.pixel_x = -(d-1)*5 + px
|
||||
ID.pixel_y = py
|
||||
I.overlays += ID
|
||||
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
|
||||
@@ -123,22 +123,15 @@
|
||||
return
|
||||
|
||||
/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)))
|
||||
return
|
||||
if (!ismob(O))
|
||||
if (!ismob(O) && !istype(O, /obj/structure/closet/body_bag))
|
||||
return
|
||||
O.loc = src.loc
|
||||
if (user != O)
|
||||
for(var/mob/B in viewers(user, 3))
|
||||
if ((B.client && !( B.blinded )))
|
||||
B << text("\red [] stuffs [] into []!", user, O, src)
|
||||
//Foreach goto(99)
|
||||
return
|
||||
|
||||
/obj/structure/crematorium/proc/update()
|
||||
|
||||
@@ -23,6 +23,7 @@ datum/controller/game_controller
|
||||
job_master = new /datum/controller/occupations()
|
||||
if(job_master.SetupOccupations())
|
||||
world << "\red \b Job setup complete"
|
||||
job_master.LoadJobs("config/jobs.txt")
|
||||
|
||||
if(!tension_master)
|
||||
tension_master = new /datum/tension()
|
||||
@@ -33,8 +34,6 @@ datum/controller/game_controller
|
||||
|
||||
setupgenetics()
|
||||
|
||||
// SetupJobs("config/jobs.txt")
|
||||
|
||||
syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round.
|
||||
syndicate_code_response = generate_code_phrase()
|
||||
|
||||
|
||||
@@ -55,7 +55,6 @@
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
new /obj/item/device/radio/headset/heads/hos(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/belt/security(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
@@ -154,6 +153,7 @@
|
||||
/obj/structure/secure_closet/brig
|
||||
name = "Brig Locker"
|
||||
req_access = list(access_brig)
|
||||
anchored = 1
|
||||
var/id = null
|
||||
|
||||
New()
|
||||
|
||||
@@ -2,10 +2,11 @@
|
||||
set category = "Special Verbs"
|
||||
set name = "Toggle Midis"
|
||||
|
||||
if(usr.client.midis)
|
||||
usr.client.midis=0
|
||||
usr << "You will now stop receiving any sounds uploaded by admins."
|
||||
else
|
||||
usr.client.midis=1
|
||||
usr << "You will now start receiving any sounds uploaded by admins."
|
||||
return
|
||||
if(istype(usr,/mob))
|
||||
var/mob/M = usr
|
||||
M.midis = !M.midis
|
||||
|
||||
if(M.client)
|
||||
M.client.midis = !M.client.midis
|
||||
M << "You will now [M.client.midis? "start":"stop"] receiving any sounds uploaded by admins."
|
||||
return
|
||||
@@ -11,11 +11,13 @@
|
||||
loc = location
|
||||
else//Safety, in case a turf cannot be found.
|
||||
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
|
||||
name = body.real_name
|
||||
if(!safety)
|
||||
corpse = body
|
||||
verbs += /mob/dead/observer/proc/reenter_corpse
|
||||
return
|
||||
|
||||
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
return 1
|
||||
|
||||
@@ -743,10 +743,11 @@
|
||||
|
||||
handle_regular_hud_updates()
|
||||
|
||||
if(client)
|
||||
for(var/image/hud in client.images)
|
||||
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
|
||||
del(hud)
|
||||
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
|
||||
del(hud)
|
||||
|
||||
if (stat == 2 || mutations & XRAY)
|
||||
sight |= SEE_TURFS
|
||||
|
||||
@@ -25,7 +25,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates
|
||||
var/obj/item/device/paicard/card = locate(href_list["device"])
|
||||
if(card.pai)
|
||||
return
|
||||
if(card && candidate)
|
||||
if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate))
|
||||
var/mob/living/silicon/pai/pai = new(card)
|
||||
pai.name = candidate.name
|
||||
pai.real_name = pai.name
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
log_access("Login: [key_name(src)] from [src.client.address ? src.client.address : "localhost"]")
|
||||
src.lastKnownIP = src.client.address
|
||||
src.computer_id = src.client.computer_id
|
||||
if(!src.client.midis || !src.midis)
|
||||
src.client.midis = 0
|
||||
src.midis = 0
|
||||
if (config.log_access)
|
||||
for (var/mob/M in world)
|
||||
if(M == src)
|
||||
|
||||
@@ -34,13 +34,15 @@
|
||||
pumped = 0
|
||||
if(current_shell)//We have a shell in the chamber
|
||||
current_shell.loc = get_turf(src)//Eject casing
|
||||
current_shell = null
|
||||
if(in_chamber)
|
||||
in_chamber = null
|
||||
if(!loaded.len) return 0
|
||||
var/obj/item/ammo_casing/AC = loaded[1] //load next casing.
|
||||
loaded -= AC //Remove casing from loaded list.
|
||||
current_shell = AC
|
||||
if(AC.BB)
|
||||
in_chamber = AC.BB //Load projectile into chamber.
|
||||
AC.BB.loc = src //Set projectile loc to gun.
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -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 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.
|
||||
## 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
|
||||
## spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard
|
||||
# FEATURE_OBJECT_SPELL_SYSTEM
|
||||
|
||||
##Toggle for having jobs load up from the .txt
|
||||
# LOAD_JOBS_FROM_TXT
|
||||
|
||||
16863
maps/tgstation.2.0.8.dmm
16863
maps/tgstation.2.0.8.dmm
File diff suppressed because it is too large
Load Diff
@@ -541,7 +541,6 @@
|
||||
#include "code\game\objects\noticeboard.dm"
|
||||
#include "code\game\objects\object_procs.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\stool.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\personal.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\devices\aicard.dm"
|
||||
#include "code\game\objects\devices\chameleonproj.dm"
|
||||
|
||||
Reference in New Issue
Block a user