Merge resolution, compile fixes with outdated glass paths/map.

This commit is contained in:
Zuhayr
2014-11-19 23:17:25 +10:30
33 changed files with 1715 additions and 1723 deletions

View File

@@ -183,12 +183,16 @@ var/list/alldepartments = list("Central Command")
var/msg = "\blue <b><font color='#006100'>CENTCOMM FAX: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<a href='?_src_=holder;CentcommFaxReply=\ref[Sender];originfax=\ref[originfax]'>RPLY</a>)</b>: Receiving '[sentname]' via secure connection ... <a href='?_src_=holder;CentcommFaxView=\ref[sent]'>view message</a>" var/msg = "\blue <b><font color='#006100'>CENTCOMM FAX: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<a href='?_src_=holder;CentcommFaxReply=\ref[Sender];originfax=\ref[originfax]'>RPLY</a>)</b>: Receiving '[sentname]' via secure connection ... <a href='?_src_=holder;CentcommFaxView=\ref[sent]'>view message</a>"
admins << msg for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg
/proc/Solgov_fax(var/originfax, var/sent, var/sentname, var/mob/Sender) /proc/Solgov_fax(var/originfax, var/sent, var/sentname, var/mob/Sender)
var/msg = "\blue <b><font color='#1F66A0'>SOL GOVERNMENT FAX: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<a href='?_src_=holder;SolGovFaxReply=\ref[Sender];originfax=\ref[originfax]'>RPLY</a>)</b>: Receiving '[sentname]' via secure connection ... <a href='?_src_=holder;CentcommFaxView=\ref[sent]'>view message</a>" var/msg = "\blue <b><font color='#1F66A0'>SOL GOVERNMENT FAX: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<a href='?_src_=holder;SolGovFaxReply=\ref[Sender];originfax=\ref[originfax]'>RPLY</a>)</b>: Receiving '[sentname]' via secure connection ... <a href='?_src_=holder;CentcommFaxView=\ref[sent]'>view message</a>"
admins << msg for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg
proc/SendFax(var/sent, var/sentname, var/mob/Sender, var/dpt) proc/SendFax(var/sent, var/sentname, var/mob/Sender, var/dpt)

View File

@@ -290,9 +290,9 @@ datum/controller/vote
var/admin = 0 var/admin = 0
var/trialmin = 0 var/trialmin = 0
if(C.holder) if(C.holder)
admin = 1
if(C.holder.rights & R_ADMIN) if(C.holder.rights & R_ADMIN)
trialmin = 1 admin = 1
trialmin = 1 // don't know why we use both of these it's really weird, but I'm 2 lasy to refactor this all to use just admin.
voting |= C voting |= C
. = "<html><head><title>Voting Panel</title></head><body>" . = "<html><head><title>Voting Panel</title></head><body>"

View File

@@ -89,7 +89,7 @@
/datum/autolathe/recipe/rglass /datum/autolathe/recipe/rglass
name = "reinforced glass sheets" name = "reinforced glass sheets"
path = /obj/item/stack/sheet/rglass path = /obj/item/stack/sheet/glass/reinforced
category = "General" category = "General"
is_stack = 1 is_stack = 1

View File

@@ -87,8 +87,8 @@
var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc ) var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc )
A.amount = 5 A.amount = 5
if(istype(P, /obj/item/stack/sheet/rglass)) if(istype(P, /obj/item/stack/sheet/glass/reinforced))
var/obj/item/stack/sheet/rglass/RG = P var/obj/item/stack/sheet/glass/reinforced/RG = P
if (RG.get_amount() < 2) if (RG.get_amount() < 2)
user << "<span class='warning'>You need two sheets of glass to put in the glass panel.</span>" user << "<span class='warning'>You need two sheets of glass to put in the glass panel.</span>"
return return
@@ -161,7 +161,7 @@
icon_state = "3b" icon_state = "3b"
else else
icon_state = "3" icon_state = "3"
new /obj/item/stack/sheet/rglass( loc, 2 ) new /obj/item/stack/sheet/glass/reinforced( loc, 2 )
return return
if(istype(P, /obj/item/weapon/screwdriver)) if(istype(P, /obj/item/weapon/screwdriver))

View File

@@ -135,23 +135,6 @@
A.ai_actual_track(target) A.ai_actual_track(target)
return return
else if (href_list["faketrack"])
var/mob/target = locate(href_list["track"])
var/mob/living/silicon/ai/A = locate(href_list["track2"])
if(A && target)
A:cameraFollow = target
A << text("Now tracking [] on camera.", target.name)
if (usr.machine == null)
usr.machine = usr
while (usr:cameraFollow == target)
usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)."
sleep(40)
continue
return
else if (href_list["freq"]) else if (href_list["freq"])
var/new_frequency = (frequency + text2num(href_list["freq"])) var/new_frequency = (frequency + text2num(href_list["freq"]))
if (!freerange || (frequency < 1200 || frequency > 1600)) if (!freerange || (frequency < 1200 || frequency > 1600))

View File

@@ -18,6 +18,8 @@
matter = list("glass" = 3750) matter = list("glass" = 3750)
origin_tech = "materials=1" origin_tech = "materials=1"
var/created_window = /obj/structure/window/basic var/created_window = /obj/structure/window/basic
var/is_reinforced = 0
var/list/construction_options = list("One Direction", "Full Window")
/obj/item/stack/sheet/glass/cyborg /obj/item/stack/sheet/glass/cyborg
name = "glass" name = "glass"
@@ -32,19 +34,24 @@
/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user) /obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user)
..() ..()
if(!is_reinforced)
if(istype(W,/obj/item/stack/cable_coil)) if(istype(W,/obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/CC = W var/obj/item/stack/cable_coil/CC = W
if (get_amount() < 1 || CC.get_amount() < 5) if (get_amount() < 1 || CC.get_amount() < 5)
user << "<span class='warning>You need five lengths of coil and one sheet of glass to make wired glass.</span>" user << "<span class='warning>You need five lengths of coil and one sheet of glass to make wired glass.</span>"
return return
CC.use(5) CC.use(5)
use(1) use(1)
user << "<span class='notice'>You attach wire to the [name].</span>" user << "<span class='notice'>You attach wire to the [name].</span>"
new /obj/item/stack/light_w(user.loc) new /obj/item/stack/light_w(user.loc)
else if(istype(W, /obj/item/stack/rods)) else if(istype(W, /obj/item/stack/rods))
var/obj/item/stack/rods/V = W var/obj/item/stack/rods/V = W
if (V.get_amount() >= 1 && get_amount() >= 1) if (V.get_amount() < 1 || get_amount() < 1)
var/obj/item/stack/sheet/rglass/RG = new (user.loc) user << "<span class='warning'>You need one rod and one sheet of glass to make reinforced glass.</span>"
return
var/obj/item/stack/sheet/glass/reinforced/RG = new (user.loc)
RG.add_fingerprint(user) RG.add_fingerprint(user)
RG.add_to_stacks(user) RG.add_to_stacks(user)
var/obj/item/stack/sheet/glass/G = src var/obj/item/stack/sheet/glass/G = src
@@ -54,20 +61,15 @@
G.use(1) G.use(1)
if (!G && replace) if (!G && replace)
user.put_in_hands(RG) user.put_in_hands(RG)
else
user << "<span class='warning'>You need one rod and one sheet of glass to make reinforced glass.</span>"
return
else
return ..()
/obj/item/stack/sheet/glass/proc/construct_window(mob/user as mob) /obj/item/stack/sheet/glass/proc/construct_window(mob/user as mob)
if(!user || !src) return 0 if(!user || !src) return 0
if(!istype(user.loc,/turf)) return 0 if(!istype(user.loc,/turf)) return 0
if(!user.IsAdvancedToolUser()) if(!user.IsAdvancedToolUser())
return 0 return 0
var/title = "Sheet-Glass" var/title = "Sheet-[name]"
title += " ([src.amount] sheet\s left)" title += " ([src.amount] sheet\s left)"
switch(alert(title, "Would you like full tile glass or one direction?", "One Direction", "Full Window", "Cancel", null)) switch(input(title, "What would you like to construct?") as null|anything in construction_options)
if("One Direction") if("One Direction")
if(!src) return 1 if(!src) return 1
if(src.loc != user) return 1 if(src.loc != user) return 1
@@ -80,7 +82,7 @@
user << "\red There are too many windows in this location." user << "\red There are too many windows in this location."
return 1 return 1
directions-=win.dir directions-=win.dir
if(!(win.ini_dir in cardinal)) if(!(win.dir in cardinal))
user << "\red Can't let you do that." user << "\red Can't let you do that."
return 1 return 1
@@ -94,112 +96,23 @@
if(!found) if(!found)
dir_to_set = direction dir_to_set = direction
break break
var/obj/structure/window/W new created_window( user.loc, dir_to_set, 1 )
W = new created_window( user.loc, 0 )
W.dir = dir_to_set
W.ini_dir = W.dir
W.anchored = 0
src.use(1) src.use(1)
if("Full Window") if("Full Window")
if(!src) return 1 if(!src) return 1
if(src.loc != user) return 1 if(src.loc != user) return 1
if(src.amount < 2) if(src.amount < 4)
user << "\red You need more glass to do that." user << "\red You need more glass to do that."
return 1 return 1
if(locate(/obj/structure/window) in user.loc) if(locate(/obj/structure/window) in user.loc)
user << "\red There is a window in the way." user << "\red There is a window in the way."
return 1 return 1
var/obj/structure/window/W new created_window( user.loc, SOUTHWEST, 1 )
W = new created_window( user.loc, 0 ) src.use(4)
W.dir = SOUTHWEST
W.ini_dir = SOUTHWEST
W.anchored = 0
src.use(2)
return 0
/*
* Reinforced glass sheets
*/
/obj/item/stack/sheet/rglass
name = "reinforced glass"
desc = "Glass which seems to have rods or something stuck in them."
singular_name = "reinforced glass sheet"
icon_state = "sheet-rglass"
matter = list("metal" = 1875,"glass" = 3750)
origin_tech = "materials=2"
/obj/item/stack/sheet/rglass/cyborg
name = "reinforced glass"
desc = "Glass which seems to have rods or something stuck in them."
singular_name = "reinforced glass sheet"
icon_state = "sheet-rglass"
/obj/item/stack/sheet/rglass/attack_self(mob/user as mob)
construct_window(user)
/obj/item/stack/sheet/rglass/proc/construct_window(mob/user as mob)
if(!user || !src) return 0
if(!istype(user.loc,/turf)) return 0
if(!user.IsAdvancedToolUser())
return 0
var/title = "Sheet Reinf. Glass"
title += " ([src.amount] sheet\s left)"
switch(input(title, "Would you like full tile glass a one direction glass pane or a windoor?") in list("One Direction", "Full Window", "Windoor", "Cancel"))
if("One Direction")
if(!src) return 1
if(src.loc != user) return 1
var/list/directions = new/list(cardinal)
var/i = 0
for (var/obj/structure/window/win in user.loc)
i++
if(i >= 4)
user << "\red There are too many windows in this location."
return 1
directions-=win.dir
if(!(win.ini_dir in cardinal))
user << "\red Can't let you do that."
return 1
//Determine the direction. It will first check in the direction the person making the window is facing, if it finds an already made window it will try looking at the next cardinal direction, etc.
var/dir_to_set = 2
for(var/direction in list( user.dir, turn(user.dir,90), turn(user.dir,180), turn(user.dir,270) ))
var/found = 0
for(var/obj/structure/window/WT in user.loc)
if(WT.dir == direction)
found = 1
if(!found)
dir_to_set = direction
break
var/obj/structure/window/W
W = new /obj/structure/window/reinforced( user.loc, 1 )
W.state = 0
W.dir = dir_to_set
W.ini_dir = W.dir
W.anchored = 0
src.use(1)
if("Full Window")
if(!src) return 1
if(src.loc != user) return 1
if(src.amount < 2)
user << "\red You need more glass to do that."
return 1
if(locate(/obj/structure/window) in user.loc)
user << "\red There is a window in the way."
return 1
var/obj/structure/window/W
W = new /obj/structure/window/reinforced( user.loc, 1 )
W.state = 0
W.dir = SOUTHWEST
W.ini_dir = SOUTHWEST
W.anchored = 0
src.use(2)
if("Windoor") if("Windoor")
if(!is_reinforced) return 1
if(!src || src.loc != user) return 1 if(!src || src.loc != user) return 1
if(isturf(user.loc) && locate(/obj/structure/windoor_assembly/, user.loc)) if(isturf(user.loc) && locate(/obj/structure/windoor_assembly/, user.loc))
@@ -214,31 +127,33 @@
user << "\red You need more glass to do that." user << "\red You need more glass to do that."
return 1 return 1
var/obj/structure/windoor_assembly/WD new /obj/structure/windoor_assembly(user.loc, user.dir, 1)
WD = new /obj/structure/windoor_assembly(user.loc)
WD.state = "01"
WD.anchored = 0
src.use(5) src.use(5)
switch(user.dir)
if(SOUTH)
WD.dir = SOUTH
WD.ini_dir = SOUTH
if(EAST)
WD.dir = EAST
WD.ini_dir = EAST
if(WEST)
WD.dir = WEST
WD.ini_dir = WEST
else//If the user is facing northeast. northwest, southeast, southwest or north, default to north
WD.dir = NORTH
WD.ini_dir = NORTH
else
return 1
return 0 return 0
/*
* Reinforced glass sheets
*/
/obj/item/stack/sheet/glass/reinforced
name = "reinforced glass"
desc = "Glass which has been reinforced with metal rods."
singular_name = "reinforced glass sheet"
icon_state = "sheet-rglass"
matter = list("metal" = 1875,"glass" = 3750)
origin_tech = "materials=2"
created_window = /obj/structure/window/reinforced
is_reinforced = 1
construction_options = list("One Direction", "Full Window", "Windoor")
/obj/item/stack/sheet/glass/reinforced/cyborg
name = "reinforced glass"
desc = "Glass which has been reinforced with metal rods."
singular_name = "reinforced glass sheet"
icon_state = "sheet-rglass"
/* /*
* Phoron Glass sheets * Phoron Glass sheets
@@ -252,9 +167,6 @@
origin_tech = "materials=3;phorontech=2" origin_tech = "materials=3;phorontech=2"
created_window = /obj/structure/window/phoronbasic created_window = /obj/structure/window/phoronbasic
/obj/item/stack/sheet/glass/phoronglass/attack_self(mob/user as mob)
construct_window(user)
/obj/item/stack/sheet/glass/phoronglass/attackby(obj/item/W, mob/user) /obj/item/stack/sheet/glass/phoronglass/attackby(obj/item/W, mob/user)
..() ..()
if( istype(W, /obj/item/stack/rods) ) if( istype(W, /obj/item/stack/rods) )
@@ -277,13 +189,11 @@
*/ */
/obj/item/stack/sheet/glass/phoronrglass /obj/item/stack/sheet/glass/phoronrglass
name = "reinforced phoron glass" name = "reinforced phoron glass"
desc = "Phoron glass which seems to have rods or something stuck in them." desc = "Phoron glass which has been reinforced with metal rods."
singular_name = "reinforced phoron glass sheet" singular_name = "reinforced phoron glass sheet"
icon_state = "sheet-phoronrglass" icon_state = "sheet-phoronrglass"
matter = list("glass" = 7500,"metal" = 1875) matter = list("glass" = 7500,"metal" = 1875)
origin_tech = "materials=4;phorontech=2" origin_tech = "materials=4;phorontech=2"
created_window = /obj/structure/window/phoronreinforced created_window = /obj/structure/window/phoronreinforced
is_reinforced = 1
/obj/item/stack/sheet/glass/phoronrglass/attack_self(mob/user as mob)
construct_window(user)

View File

@@ -159,7 +159,7 @@ obj/structure/door_assembly
if(do_after(user, 40)) if(do_after(user, 40))
if(!src || !WT.isOn()) return if(!src || !WT.isOn()) return
user << "\blue You welded the glass panel out!" user << "\blue You welded the glass panel out!"
new /obj/item/stack/sheet/rglass(src.loc) new /obj/item/stack/sheet/glass/reinforced(src.loc)
glass = 0 glass = 0
else if(!anchored) else if(!anchored)
user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.") user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.")
@@ -239,7 +239,7 @@ obj/structure/door_assembly
var/obj/item/stack/sheet/S = W var/obj/item/stack/sheet/S = W
if (S) if (S)
if (S.get_amount() >= 1) if (S.get_amount() >= 1)
if(istype(S, /obj/item/stack/sheet/rglass)) if(istype(S, /obj/item/stack/sheet/glass/reinforced))
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.")
if(do_after(user, 40) && !glass) if(do_after(user, 40) && !glass)

View File

@@ -85,8 +85,8 @@
return return
//window placing begin //window placing begin
else if(istype(W,/obj/item/stack/sheet/rglass) || istype(W,/obj/item/stack/sheet/glass)) else if(istype(W,/obj/item/stack/sheet/glass))
var/obj/item/stack/sheet/ST = W var/obj/item/stack/sheet/glass/ST = W
var/dir_to_set = 1 var/dir_to_set = 1
if(loc == user.loc) if(loc == user.loc)
dir_to_set = user.dir dir_to_set = user.dir
@@ -115,16 +115,10 @@
if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting. if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting.
user << "<span class='notice'>There is already a window facing this way there.</span>" user << "<span class='notice'>There is already a window facing this way there.</span>"
return return
var/wtype = ST.created_window
if (ST.use(1)) if (ST.use(1))
var/obj/structure/window/WD var/obj/structure/window/WD = new wtype(loc, dir_to_set, 1)
if(istype(W, /obj/item/stack/sheet/rglass))
WD = new/obj/structure/window/reinforced(loc) //reinforced window
else
WD = new/obj/structure/window/basic(loc) //normal window
WD.dir = dir_to_set
WD.ini_dir = dir_to_set
WD.anchored = 0
WD.state = 0
user << "<span class='notice'>You place the [WD] on [src].</span>" user << "<span class='notice'>You place the [WD] on [src].</span>"
WD.update_icon() WD.update_icon()
return return

View File

@@ -18,7 +18,6 @@ obj/structure/windoor_assembly
density = 0 density = 0
dir = NORTH dir = NORTH
var/ini_dir
var/obj/item/weapon/airlock_electronics/electronics = null var/obj/item/weapon/airlock_electronics/electronics = null
//Vars to help with the icon's name //Vars to help with the icon's name
@@ -26,9 +25,17 @@ obj/structure/windoor_assembly
var/secure = "" //Whether or not this creates a secure windoor var/secure = "" //Whether or not this creates a secure windoor
var/state = "01" //How far the door assembly has progressed in terms of sprites var/state = "01" //How far the door assembly has progressed in terms of sprites
obj/structure/windoor_assembly/New(dir=NORTH) obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0)
..() ..()
src.ini_dir = src.dir if(constructed)
state = "01"
anchored = 0
switch(start_dir)
if(NORTH, SOUTH, EAST, WEST)
dir = start_dir
else //If the user is facing northeast. northwest, southeast, southwest or north, default to north
dir = NORTH
update_nearby_tiles(need_rebuild=1) update_nearby_tiles(need_rebuild=1)
obj/structure/windoor_assembly/Del() obj/structure/windoor_assembly/Del()
@@ -70,7 +77,7 @@ obj/structure/windoor_assembly/Del()
if(do_after(user, 40)) if(do_after(user, 40))
if(!src || !WT.isOn()) return if(!src || !WT.isOn()) return
user << "\blue You dissasembled the windoor assembly!" user << "\blue You dissasembled the windoor assembly!"
new /obj/item/stack/sheet/rglass(get_turf(src), 5) new /obj/item/stack/sheet/glass/reinforced(get_turf(src), 5)
if(secure) if(secure)
new /obj/item/stack/rods(get_turf(src), 4) new /obj/item/stack/rods(get_turf(src), 4)
del(src) del(src)
@@ -270,7 +277,6 @@ obj/structure/windoor_assembly/Del()
if(src.state != "01") if(src.state != "01")
update_nearby_tiles(need_rebuild=1) update_nearby_tiles(need_rebuild=1)
src.ini_dir = src.dir
update_icon() update_icon()
return return

View File

@@ -18,7 +18,6 @@
// var/silicate = 0 // number of units of silicate // var/silicate = 0 // number of units of silicate
// var/icon/silicateIcon = null // the silicated icon // var/icon/silicateIcon = null // the silicated icon
/obj/structure/window/proc/take_damage(var/damage = 0, var/sound_effect = 1) /obj/structure/window/proc/take_damage(var/damage = 0, var/sound_effect = 1)
var/initialhealth = src.health var/initialhealth = src.health
src.health = max(0, src.health - damage) src.health = max(0, src.health - damage)
@@ -85,11 +84,16 @@
/obj/structure/window/meteorhit() /obj/structure/window/meteorhit()
shatter() shatter()
//TODO: Make full windows a separate type of window.
//Once a full window, it will always be a full window, so there's no point
//having the same type for both.
/obj/structure/window/proc/is_full_window()
return (dir == SOUTHWEST || dir == SOUTHEAST || dir == NORTHWEST || dir == NORTHEAST)
/obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) /obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover) && mover.checkpass(PASSGLASS)) if(istype(mover) && mover.checkpass(PASSGLASS))
return 1 return 1
if(dir == SOUTHWEST || dir == SOUTHEAST || dir == NORTHWEST || dir == NORTHEAST) if(is_full_window())
return 0 //full tile window, you can't move into it! return 0 //full tile window, you can't move into it!
if(get_dir(loc, target) == dir) if(get_dir(loc, target) == dir)
return !density return !density
@@ -245,7 +249,6 @@
dir = turn(dir, 90) dir = turn(dir, 90)
// updateSilicate() // updateSilicate()
update_nearby_tiles(need_rebuild=1) update_nearby_tiles(need_rebuild=1)
ini_dir = dir
return return
@@ -262,7 +265,6 @@
dir = turn(dir, 270) dir = turn(dir, 270)
// updateSilicate() // updateSilicate()
update_nearby_tiles(need_rebuild=1) update_nearby_tiles(need_rebuild=1)
ini_dir = dir
return return
@@ -282,10 +284,15 @@
*/ */
/obj/structure/window/New(Loc,re=0) /obj/structure/window/New(Loc, start_dir=null, constructed=0)
..() ..()
// if(re) reinf = re //player-constructed windows
if (constructed)
anchored = 0
if (start_dir)
dir = start_dir
health = maxhealth health = maxhealth
@@ -294,8 +301,6 @@
update_nearby_tiles(need_rebuild=1) update_nearby_tiles(need_rebuild=1)
update_nearby_icons() update_nearby_icons()
return
/obj/structure/window/Del() /obj/structure/window/Del()
density = 0 density = 0
@@ -305,6 +310,7 @@
/obj/structure/window/Move() /obj/structure/window/Move()
var/ini_dir = dir
update_nearby_tiles(need_rebuild=1) update_nearby_tiles(need_rebuild=1)
..() ..()
dir = ini_dir dir = ini_dir
@@ -406,7 +412,14 @@
basestate = "rwindow" basestate = "rwindow"
maxhealth = 40 maxhealth = 40
reinf = 1 reinf = 1
glasstype = /obj/item/stack/sheet/rglass glasstype = /obj/item/stack/sheet/glass/reinforced
/obj/structure/window/New(Loc, constructed=0)
..()
//player-constructed windows
if (constructed)
state = 0
/obj/structure/window/reinforced/tinted /obj/structure/window/reinforced/tinted
name = "tinted window" name = "tinted window"

View File

@@ -281,7 +281,7 @@ var/global/floorIsLava = 0
I.rank = "N/A" I.rank = "N/A"
update_file = 1 update_file = 1
dat += "<font color=#008800>[I.content]</font> <i>by [I.author] ([I.rank])</i> on <i><font color=blue>[I.timestamp]</i></font> " dat += "<font color=#008800>[I.content]</font> <i>by [I.author] ([I.rank])</i> on <i><font color=blue>[I.timestamp]</i></font> "
if(I.author == usr.key || I.author == "Adminbot") if(I.author == usr.key || I.author == "Adminbot" || ishost(usr))
dat += "<A href='?src=\ref[src];remove_player_info=[key];remove_index=[i]'>Remove</A>" dat += "<A href='?src=\ref[src];remove_player_info=[key];remove_index=[i]'>Remove</A>"
dat += "<br><br>" dat += "<br><br>"
if(update_file) info << infos if(update_file) info << infos
@@ -1141,9 +1141,25 @@ var/global/floorIsLava = 0
if(2) if(2)
var/ref_mob = "\ref[M]" var/ref_mob = "\ref[M]"
return "<b>[key_name(C, link, name, highlight_special)](<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>)</b>" return "<b>[key_name(C, link, name, highlight_special)](<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>)</b>"
if(3)
var/ref_mob = "\ref[M]"
return "<b>[key_name(C, link, name, highlight_special)](<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>)(<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>)</b>"
/proc/ishost(whom)
if(!whom)
return 0
var/client/C
var/mob/M
if(istype(whom, /client))
C = whom
if(istype(whom, /mob))
M = whom
C = M.client
if(R_HOST & C.holder.rights)
return 1
else
return 0
// //
// //
//ALL DONE //ALL DONE

View File

@@ -37,7 +37,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
if("stealth") rights |= R_STEALTH if("stealth") rights |= R_STEALTH
if("rejuv","rejuvinate") rights |= R_REJUVINATE if("rejuv","rejuvinate") rights |= R_REJUVINATE
if("varedit") rights |= R_VAREDIT if("varedit") rights |= R_VAREDIT
if("everything","host","all") rights |= R_HOST if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_MENTOR)
if("sound","sounds") rights |= R_SOUNDS if("sound","sounds") rights |= R_SOUNDS
if("spawn","create") rights |= R_SPAWN if("spawn","create") rights |= R_SPAWN
if("mod") rights |= R_MOD if("mod") rights |= R_MOD

View File

@@ -3,7 +3,7 @@
//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE! //This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as") var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as")
/client/verb/adminhelp(msg as text) /client/verb/adminhelp()
set category = "Admin" set category = "Admin"
set name = "Adminhelp" set name = "Adminhelp"
@@ -15,8 +15,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(prefs.muted & MUTE_ADMINHELP) if(prefs.muted & MUTE_ADMINHELP)
src << "<font color='red'>Error: Admin-PM: You cannot send adminhelps (Muted).</font>" src << "<font color='red'>Error: Admin-PM: You cannot send adminhelps (Muted).</font>"
return return
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
return
adminhelped = 1 //Determines if they get the message to reply by clicking the name. adminhelped = 1 //Determines if they get the message to reply by clicking the name.
@@ -26,6 +25,17 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps//Go to hell src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps//Go to hell
**/ **/
var/msg
var/list/type = list ("Gameplay/Roleplay question", "Rule/Gameplay issue", "Bug report")
var/selected_type = input("Pick a category.", "Admin Help", null, null) as null|anything in type
if(selected_type)
msg = input("Please enter your message:", "Admin Help", null, null) as text
var/selected_upper = uppertext(selected_type)
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
return
//clean the input msg //clean the input msg
if(!msg) return if(!msg) return
@@ -91,11 +101,68 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(!mob) return //this doesn't happen if(!mob) return //this doesn't happen
var/ref_mob = "\ref[mob]" var/ref_mob = "\ref[mob]"
var/mentor_msg = "\blue <b><font color=red>HELP: </font>[get_options_bar(mob, 2, 1, 1, 0)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]" var/mentor_msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 0, 0, 1, 0)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
msg = "\blue <b><font color=red>HELP: </font>[get_options_bar(mob, 2, 1, 1)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]" var/dev_msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 3, 0, 1, 0)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
//send this msg to all admins msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 2, 1, 1)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
var/admin_number_afk = 0 var/admin_number_afk = 0
var/list/mentorholders = list()
var/list/debugholders = list()
var/list/adminholders = list()
for(var/client/X in admins) for(var/client/X in admins)
if(R_MENTOR & X.holder.rights && !(R_ADMIN & X.holder.rights)) // we don't want to count admins twice. This list should be JUST mentors
mentorholders += X
if(X.is_afk())
admin_number_afk++
if(R_DEBUG & X.holder.rights) // Looking for anyone with +Debug which will be admins, developers, and developer mentors
debugholders += X
if(!(R_ADMIN & X.holder.rights))
if(X.is_afk())
admin_number_afk++
if(R_ADMIN & X.holder.rights) // just admins here please
adminholders += X
if(X.is_afk())
admin_number_afk++
switch(selected_type)
if("Gameplay/Roleplay question")
if(mentorholders.len)
for(var/client/X in mentorholders) // Mentors get a message without buttons and no character name
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << mentor_msg
if(adminholders.len)
for(var/client/X in adminholders) // Admins get the full monty
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << msg
if("Rule/Gameplay issue")
if(adminholders.len)
for(var/client/X in adminholders) // Admins of course get everything in their helps
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << msg
if("Bug report")
if(debugholders.len)
for(var/client/X in debugholders)
if(R_ADMIN & X.holder.rights) // Admins get every button & special highlights in theirs
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << msg
else
if (R_DEBUG & X.holder.rights) // Just devs or devmentors get non-highlighted names, but they do get JMP and VV for their bug reports.
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << dev_msg
/*for(var/client/X in admins)
if((R_ADMIN|R_MOD|R_MENTOR) & X.holder.rights) if((R_ADMIN|R_MOD|R_MENTOR) & X.holder.rights)
if(X.is_afk()) if(X.is_afk())
admin_number_afk++ admin_number_afk++
@@ -104,19 +171,19 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(X.holder.rights == R_MENTOR) if(X.holder.rights == R_MENTOR)
X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.) X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.)
else else
X << msg X << msg*/
//show it to the person adminhelping too //show it to the person adminhelping too
src << "<font color='blue'>PM to-<b>Admins</b>: [original_msg]</font>" src << "<font color='blue'>PM to-<b>Staff ([selected_type])</b>: [original_msg]</font>"
var/admin_number_present = admins.len - admin_number_afk var/admin_number_present = admins.len - admin_number_afk
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.") log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
if(admin_number_present <= 0) if(admin_number_present <= 0)
if(!admin_number_afk) if(!admin_number_afk)
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!No admins online!!") send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)] - !!No admins online!!")
else else
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!All admins AFK ([admin_number_afk])!!") send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)] - !!All admins AFK ([admin_number_afk])!!")
else else
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)]") send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)]")
feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return return

View File

@@ -43,7 +43,7 @@
if(!istype(C,/client)) if(!istype(C,/client))
if(holder) src << "<font color='red'>Error: Private-Message: Client not found.</font>" if(holder) src << "<font color='red'>Error: Private-Message: Client not found.</font>"
else adminhelp(msg) //admin we are replying to left. adminhelp instead else src << "<font color='red'>Error: Private-Message: Client not found. They may have lost connection, so try using an adminhelp!</font>"
return return
//get message text, limit it's length.and clean/escape html //get message text, limit it's length.and clean/escape html
@@ -53,7 +53,7 @@
if(!msg) return if(!msg) return
if(!C) if(!C)
if(holder) src << "<font color='red'>Error: Admin-PM: Client not found.</font>" if(holder) src << "<font color='red'>Error: Admin-PM: Client not found.</font>"
else adminhelp(msg) //admin we are replying to has vanished, adminhelp instead else src << "<font color='red'>Error: Private-Message: Client not found. They may have lost connection, so try using an adminhelp!</font>"
return return
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP)) if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))

View File

@@ -9,8 +9,12 @@
log_admin("[key_name(src)] : [msg]") log_admin("[key_name(src)] : [msg]")
var/color = "adminsay"
if(ishost(usr))
color = "headminsay"
if(check_rights(R_ADMIN,0)) if(check_rights(R_ADMIN,0))
msg = "<span class='adminsay'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, 1)]</EM> (<a href='?_src_=holder;adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>" msg = "<span class='[color]'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, 1)]</EM> (<a href='?_src_=holder;adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
for(var/client/C in admins) for(var/client/C in admins)
if(R_ADMIN & C.holder.rights) if(R_ADMIN & C.holder.rights)
C << msg C << msg

View File

@@ -20,6 +20,7 @@
msg = "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]" msg = "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
for(var/client/C in admins) for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
if(C.prefs.toggles & CHAT_PRAYER) if(C.prefs.toggles & CHAT_PRAYER)
C << msg C << msg
usr << "Your prayers have been received by the gods." usr << "Your prayers have been received by the gods."
@@ -30,9 +31,13 @@
/proc/Centcomm_announce(var/text , var/mob/Sender , var/iamessage) /proc/Centcomm_announce(var/text , var/mob/Sender , var/iamessage)
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
msg = "\blue <b><font color=orange>CENTCOMM[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]" msg = "\blue <b><font color=orange>CENTCOMM[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
admins << msg for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg
/proc/Syndicate_announce(var/text , var/mob/Sender) /proc/Syndicate_announce(var/text , var/mob/Sender)
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
msg = "\blue <b><font color=crimson>ILLEGAL:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]" msg = "\blue <b><font color=crimson>ILLEGAL:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
admins << msg for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg

View File

@@ -230,7 +230,7 @@
if(drone_only && !istype(S,/mob/living/silicon/robot/drone)) if(drone_only && !istype(S,/mob/living/silicon/robot/drone))
continue continue
else if(istype(S , /mob/living/silicon/ai)) else if(istype(S , /mob/living/silicon/ai))
message_start = "<i><span class='game say'>[name], <a href='byond://?src=\ref[S];track2=\ref[S];track=\ref[src];trackname=[html_encode(speaker.name)]'><span class='name'>[speaker.name]</span></a>" message_start = "<i><span class='game say'>[name], <a href='byond://?src=\ref[S];track2=\ref[S];track=\ref[speaker];trackname=[html_encode(speaker.name)]'><span class='name'>[speaker.name]</span></a>"
else if (!S.binarycheck()) else if (!S.binarycheck())
continue continue

View File

@@ -499,7 +499,8 @@
if (!( AM.anchored )) if (!( AM.anchored ))
var/t = get_dir(src, AM) var/t = get_dir(src, AM)
if (istype(AM, /obj/structure/window)) if (istype(AM, /obj/structure/window))
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) var/obj/structure/window/W = AM
if(W.is_full_window())
for(var/obj/structure/window/win in get_step(AM,t)) for(var/obj/structure/window/win in get_step(AM,t))
now_pushing = 0 now_pushing = 0
return return

View File

@@ -147,7 +147,8 @@
if (!( AM.anchored )) if (!( AM.anchored ))
var/t = get_dir(src, AM) var/t = get_dir(src, AM)
if (istype(AM, /obj/structure/window)) if (istype(AM, /obj/structure/window))
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) var/obj/structure/window/W = AM
if(W.is_full_window())
for(var/obj/structure/window/win in get_step(AM,t)) for(var/obj/structure/window/win in get_step(AM,t))
now_pushing = 0 now_pushing = 0
return return

View File

@@ -436,7 +436,8 @@
else else
if (pulling) if (pulling)
if (istype(pulling, /obj/structure/window)) if (istype(pulling, /obj/structure/window))
if(pulling:ini_dir == NORTHWEST || pulling:ini_dir == NORTHEAST || pulling:ini_dir == SOUTHWEST || pulling:ini_dir == SOUTHEAST) var/obj/structure/window/W = pulling
if(W.is_full_window())
for(var/obj/structure/window/win in get_step(pulling,get_dir(pulling.loc, T))) for(var/obj/structure/window/win in get_step(pulling,get_dir(pulling.loc, T)))
stop_pulling() stop_pulling()
if (pulling) if (pulling)

View File

@@ -507,23 +507,6 @@ var/list/ai_verbs_default = list(
src << "\red System error. Cannot locate [html_decode(href_list["trackname"])]." src << "\red System error. Cannot locate [html_decode(href_list["trackname"])]."
return return
else if (href_list["faketrack"])
var/mob/target = locate(href_list["track"]) in mob_list
var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list
if(A && target)
A.cameraFollow = target
A << text("Now tracking [] on camera.", target.name)
if (usr.machine == null)
usr.machine = usr
while (src.cameraFollow == target)
usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)."
sleep(40)
continue
return
return return
/mob/living/silicon/ai/meteorhit(obj/O as obj) /mob/living/silicon/ai/meteorhit(obj/O as obj)

View File

@@ -594,7 +594,8 @@ var/list/robot_verbs_default = list(
if (!AM.anchored) if (!AM.anchored)
var/t = get_dir(src, AM) var/t = get_dir(src, AM)
if (istype(AM, /obj/structure/window)) if (istype(AM, /obj/structure/window))
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) var/obj/structure/window/W = AM
if(W.is_full_window())
for(var/obj/structure/window/win in get_step(AM,t)) for(var/obj/structure/window/win in get_step(AM,t))
now_pushing = 0 now_pushing = 0
return return

View File

@@ -167,7 +167,7 @@
stacktypes = list( stacktypes = list(
/obj/item/stack/sheet/metal = 50, /obj/item/stack/sheet/metal = 50,
/obj/item/stack/sheet/plasteel = 10, /obj/item/stack/sheet/plasteel = 10,
/obj/item/stack/sheet/rglass = 50, /obj/item/stack/sheet/glass/reinforced = 50,
/obj/item/stack/rods = 50 /obj/item/stack/rods = 50
) )
@@ -188,7 +188,7 @@
stacktypes = list( stacktypes = list(
/obj/item/stack/sheet/metal = 50, /obj/item/stack/sheet/metal = 50,
/obj/item/stack/sheet/glass = 50, /obj/item/stack/sheet/glass = 50,
/obj/item/stack/sheet/rglass = 50, /obj/item/stack/sheet/glass/reinforced = 50,
/obj/item/stack/cable_coil = 50, /obj/item/stack/cable_coil = 50,
/obj/item/stack/rods = 15, /obj/item/stack/rods = 15,
/obj/item/stack/tile/plasteel = 15 /obj/item/stack/tile/plasteel = 15
@@ -217,7 +217,7 @@
M.amount = 50 M.amount = 50
src.modules += M src.modules += M
var/obj/item/stack/sheet/rglass/cyborg/R = new /obj/item/stack/sheet/rglass/cyborg(src) var/obj/item/stack/sheet/glass/reinforced/cyborg/R = new (src)
R.amount = 50 R.amount = 50
src.modules += R src.modules += R
@@ -400,7 +400,7 @@
stacktypes = list( stacktypes = list(
/obj/item/stack/sheet/wood = 1, /obj/item/stack/sheet/wood = 1,
/obj/item/stack/sheet/mineral/plastic = 1, /obj/item/stack/sheet/mineral/plastic = 1,
/obj/item/stack/sheet/rglass = 5, /obj/item/stack/sheet/glass/reinforced = 5,
/obj/item/stack/tile/wood = 5, /obj/item/stack/tile/wood = 5,
/obj/item/stack/rods = 15, /obj/item/stack/rods = 15,
/obj/item/stack/tile/plasteel = 15, /obj/item/stack/tile/plasteel = 15,

View File

@@ -79,7 +79,8 @@
if (!( AM.anchored )) if (!( AM.anchored ))
var/t = get_dir(src, AM) var/t = get_dir(src, AM)
if (istype(AM, /obj/structure/window)) if (istype(AM, /obj/structure/window))
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) var/obj/structure/window/W = AM
if(W.is_full_window())
for(var/obj/structure/window/win in get_step(AM,t)) for(var/obj/structure/window/win in get_step(AM,t))
now_pushing = 0 now_pushing = 0
return return

View File

@@ -350,7 +350,8 @@
if (!( AM.anchored )) if (!( AM.anchored ))
var/t = get_dir(src, AM) var/t = get_dir(src, AM)
if (istype(AM, /obj/structure/window)) if (istype(AM, /obj/structure/window))
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) var/obj/structure/window/W = AM
if(W.is_full_window())
for(var/obj/structure/window/win in get_step(AM,t)) for(var/obj/structure/window/win in get_step(AM,t))
now_pushing = 0 now_pushing = 0
return return

View File

@@ -41,7 +41,8 @@
if (!( AM.anchored )) if (!( AM.anchored ))
var/t = get_dir(src, AM) var/t = get_dir(src, AM)
if (istype(AM, /obj/structure/window)) if (istype(AM, /obj/structure/window))
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) var/obj/structure/window/W = AM
if(W.is_full_window())
for(var/obj/structure/window/win in get_step(AM,t)) for(var/obj/structure/window/win in get_step(AM,t))
now_pushing = 0 now_pushing = 0
return return

View File

@@ -50,7 +50,7 @@ var/list/solars_list = list()
S.glass_type = /obj/item/stack/sheet/glass S.glass_type = /obj/item/stack/sheet/glass
S.anchored = 1 S.anchored = 1
S.loc = src S.loc = src
if(S.glass_type == /obj/item/stack/sheet/rglass) //if the panel is in reinforced glass if(S.glass_type == /obj/item/stack/sheet/glass/reinforced) //if the panel is in reinforced glass
health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to
update_icon() update_icon()
@@ -248,7 +248,7 @@ var/list/solars_list = list()
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
return 1 return 1
if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass)) if(istype(W, /obj/item/stack/sheet/glass))
var/obj/item/stack/sheet/S = W var/obj/item/stack/sheet/S = W
if(S.use(2)) if(S.use(2))
glass_type = W.type glass_type = W.type

View File

@@ -235,7 +235,7 @@
possible_spawns += /obj/item/stack/sheet/metal possible_spawns += /obj/item/stack/sheet/metal
possible_spawns += /obj/item/stack/sheet/plasteel possible_spawns += /obj/item/stack/sheet/plasteel
possible_spawns += /obj/item/stack/sheet/glass possible_spawns += /obj/item/stack/sheet/glass
possible_spawns += /obj/item/stack/sheet/rglass possible_spawns += /obj/item/stack/sheet/glass/reinforced
possible_spawns += /obj/item/stack/sheet/mineral/phoron possible_spawns += /obj/item/stack/sheet/mineral/phoron
possible_spawns += /obj/item/stack/sheet/mineral/gold possible_spawns += /obj/item/stack/sheet/mineral/gold
possible_spawns += /obj/item/stack/sheet/mineral/silver possible_spawns += /obj/item/stack/sheet/mineral/silver

View File

@@ -633,10 +633,9 @@ var/list/liftable_structures = list(\
#define R_SPAWN 4096 #define R_SPAWN 4096
#define R_MOD 8192 #define R_MOD 8192
#define R_MENTOR 16384 #define R_MENTOR 16384
#define R_HOST 32768
#define R_MAXPERMISSION 16384 //This holds the maximum value for a permission. It is used in iteration, so keep it updated. #define R_MAXPERMISSION 32768 //This holds the maximum value for a permission. It is used in iteration, so keep it updated.
#define R_HOST 65535
//Preference toggles //Preference toggles
#define SOUND_ADMINHELP 1 #define SOUND_ADMINHELP 1

View File

@@ -20,6 +20,7 @@ em {font-style: normal; font-weight: bold;}
.adminobserver {color: #996600; font-weight: bold;} .adminobserver {color: #996600; font-weight: bold;}
.admin {color: #386aff; font-weight: bold;} .admin {color: #386aff; font-weight: bold;}
.adminsay {color: #9611D4; font-weight: bold;} .adminsay {color: #9611D4; font-weight: bold;}
.headminsay {color: #5A0A7F; font-weight: bold;}
.name { font-weight: bold;} .name { font-weight: bold;}

View File

@@ -48,7 +48,7 @@
M.amount = 50 M.amount = 50
src.modules += M src.modules += M
var/obj/item/stack/sheet/rglass/G = new /obj/item/stack/sheet/rglass(src) var/obj/item/stack/sheet/glass/reinforced/G = new (src)
G.amount = 50 G.amount = 50
src.modules += G src.modules += G

View File

@@ -170,7 +170,7 @@ proc/check_craftlathe_recipe(var/list/param_recipe)
CRAFT_ITEMS += new/datum/craftlathe_item("METAL","Metal",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/metal) CRAFT_ITEMS += new/datum/craftlathe_item("METAL","Metal",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/metal)
CRAFT_ITEMS += new/datum/craftlathe_item("R METAL","Reinforced Metal",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/r_metal) CRAFT_ITEMS += new/datum/craftlathe_item("R METAL","Reinforced Metal",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/r_metal)
CRAFT_ITEMS += new/datum/craftlathe_item("GLASS","Glass",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/glass) CRAFT_ITEMS += new/datum/craftlathe_item("GLASS","Glass",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/glass)
CRAFT_ITEMS += new/datum/craftlathe_item("R GLASS","Reinforced Glass",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/rglass) CRAFT_ITEMS += new/datum/craftlathe_item("R GLASS","Reinforced Glass",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/glass/reinforced)
CRAFT_ITEMS += new/datum/craftlathe_item("GOLD","Gold",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/gold) CRAFT_ITEMS += new/datum/craftlathe_item("GOLD","Gold",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/gold)
CRAFT_ITEMS += new/datum/craftlathe_item("SILVER","Silver",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/silver) CRAFT_ITEMS += new/datum/craftlathe_item("SILVER","Silver",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/silver)
CRAFT_ITEMS += new/datum/craftlathe_item("DIAMOND","Diamond",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/diamond) CRAFT_ITEMS += new/datum/craftlathe_item("DIAMOND","Diamond",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/diamond)

File diff suppressed because it is too large Load Diff