mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-29 18:40:42 +00:00
cl coiax add: Bartenders can now rename the generic area "Bar" to the bar name of their choice with the use of their bar sign. This will rename air alarms, doors and APCs, so everyone knows what you're calling your bar this shift. (The bar sign chosen is also now a statistic that's tracked!) /cl Metastation now only has one bar sign. Bar signs start blank. Bar signs no longer require bartender ID to repair. Emagging now only sets the bar sign (and bar name) to the Syndi Cat, rather than changing the Barsign to syndicate access only and making them impossible to repair. Only machinery that is normally renamed when the area is renamed will have their name changed, this means only doors originally called "Bar" will be renamed. Area renames are split into separate procs, so we can use their renaming of machinery features.
239 lines
7.5 KiB
Plaintext
239 lines
7.5 KiB
Plaintext
#define AREA_ERRNONE 0
|
|
#define AREA_STATION 1
|
|
#define AREA_SPACE 2
|
|
#define AREA_SPECIAL 3
|
|
|
|
/obj/item/areaeditor
|
|
name = "area modification item"
|
|
icon = 'icons/obj/items_and_weapons.dmi'
|
|
icon_state = "blueprints"
|
|
attack_verb = list("attacked", "bapped", "hit")
|
|
var/fluffnotice = "Nobody's gonna read this stuff!"
|
|
var/in_use = FALSE
|
|
|
|
/obj/item/areaeditor/attack_self(mob/user)
|
|
add_fingerprint(user)
|
|
. = "<BODY><HTML><head><title>[src]</title></head> \
|
|
<h2>[station_name()] [src.name]</h2> \
|
|
<small>[fluffnotice]</small><hr>"
|
|
switch(get_area_type())
|
|
if(AREA_SPACE)
|
|
. += "<p>According to the [src.name], you are now in an unclaimed territory.</p>"
|
|
if(AREA_SPECIAL)
|
|
. += "<p>This place is not noted on the [src.name].</p>"
|
|
. += "<p><a href='?src=[REF(src)];create_area=1'>Create or modify an existing area</a></p>"
|
|
|
|
|
|
/obj/item/areaeditor/Topic(href, href_list)
|
|
if(..())
|
|
return TRUE
|
|
if(!usr.canUseTopic(src))
|
|
usr << browse(null, "window=blueprints")
|
|
return TRUE
|
|
if(href_list["create_area"])
|
|
if(in_use)
|
|
return
|
|
in_use = TRUE
|
|
create_area(usr)
|
|
in_use = FALSE
|
|
updateUsrDialog()
|
|
|
|
//Station blueprints!!!
|
|
/obj/item/areaeditor/blueprints
|
|
name = "station blueprints"
|
|
desc = "Blueprints of the station. There is a \"Classified\" stamp and several coffee stains on it."
|
|
icon = 'icons/obj/items_and_weapons.dmi'
|
|
icon_state = "blueprints"
|
|
fluffnotice = "Property of Nanotrasen. For heads of staff only. Store in high-secure storage."
|
|
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
|
var/list/image/showing = list()
|
|
var/client/viewing
|
|
var/legend = FALSE //Viewing the wire legend
|
|
|
|
|
|
/obj/item/areaeditor/blueprints/Destroy()
|
|
clear_viewer()
|
|
return ..()
|
|
|
|
|
|
/obj/item/areaeditor/blueprints/attack_self(mob/user)
|
|
. = ..()
|
|
if(!legend)
|
|
var/area/A = get_area()
|
|
if(get_area_type() == AREA_STATION)
|
|
. += "<p>According to \the [src], you are now in <b>\"[html_encode(A.name)]\"</b>.</p>"
|
|
. += "<p><a href='?src=[REF(src)];edit_area=1'>Change area name</a></p>"
|
|
. += "<p><a href='?src=[REF(src)];view_legend=1'>View wire colour legend</a></p>"
|
|
if(!viewing)
|
|
. += "<p><a href='?src=[REF(src)];view_blueprints=1'>View structural data</a></p>"
|
|
else
|
|
. += "<p><a href='?src=[REF(src)];refresh=1'>Refresh structural data</a></p>"
|
|
. += "<p><a href='?src=[REF(src)];hide_blueprints=1'>Hide structural data</a></p>"
|
|
else
|
|
if(legend == TRUE)
|
|
. += "<a href='?src=[REF(src)];exit_legend=1'><< Back</a>"
|
|
. += view_wire_devices(user);
|
|
else
|
|
//legend is a wireset
|
|
. += "<a href='?src=[REF(src)];view_legend=1'><< Back</a>"
|
|
. += view_wire_set(user, legend)
|
|
var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500)
|
|
popup.set_content(.)
|
|
popup.open()
|
|
onclose(user, "blueprints")
|
|
|
|
|
|
/obj/item/areaeditor/blueprints/Topic(href, href_list)
|
|
if(..())
|
|
return
|
|
if(href_list["edit_area"])
|
|
if(get_area_type()!=AREA_STATION)
|
|
return
|
|
if(in_use)
|
|
return
|
|
in_use = TRUE
|
|
edit_area()
|
|
in_use = FALSE
|
|
if(href_list["exit_legend"])
|
|
legend = FALSE;
|
|
if(href_list["view_legend"])
|
|
legend = TRUE;
|
|
if(href_list["view_wireset"])
|
|
legend = href_list["view_wireset"];
|
|
if(href_list["view_blueprints"])
|
|
set_viewer(usr, "<span class='notice'>You flip the blueprints over to view the complex information diagram.</span>")
|
|
if(href_list["hide_blueprints"])
|
|
clear_viewer(usr,"<span class='notice'>You flip the blueprints over to view the simple information diagram.</span>")
|
|
if(href_list["refresh"])
|
|
clear_viewer(usr)
|
|
set_viewer(usr)
|
|
|
|
attack_self(usr) //this is not the proper way, but neither of the old update procs work! it's too ancient and I'm tired shush.
|
|
|
|
/obj/item/areaeditor/blueprints/proc/get_images(turf/T, viewsize)
|
|
. = list()
|
|
for(var/turf/TT in range(viewsize, T))
|
|
if(TT.blueprint_data)
|
|
. += TT.blueprint_data
|
|
|
|
/obj/item/areaeditor/blueprints/proc/set_viewer(mob/user, message = "")
|
|
if(user && user.client)
|
|
if(viewing)
|
|
clear_viewer()
|
|
viewing = user.client
|
|
showing = get_images(get_turf(user), viewing.view)
|
|
viewing.images |= showing
|
|
if(message)
|
|
to_chat(user, message)
|
|
|
|
/obj/item/areaeditor/blueprints/proc/clear_viewer(mob/user, message = "")
|
|
if(viewing)
|
|
viewing.images -= showing
|
|
viewing = null
|
|
showing.Cut()
|
|
if(message)
|
|
to_chat(user, message)
|
|
|
|
/obj/item/areaeditor/blueprints/dropped(mob/user)
|
|
..()
|
|
clear_viewer()
|
|
legend = FALSE
|
|
|
|
|
|
/obj/item/areaeditor/proc/get_area()
|
|
var/turf/T = get_turf(usr)
|
|
var/area/A = T.loc
|
|
return A
|
|
|
|
/obj/item/areaeditor/proc/get_area_type(area/A = get_area())
|
|
if(A.outdoors)
|
|
return AREA_SPACE
|
|
var/list/SPECIALS = list(
|
|
/area/shuttle,
|
|
/area/centcom,
|
|
/area/asteroid,
|
|
/area/tdome,
|
|
/area/wizard_station,
|
|
/area/hilbertshotel,
|
|
/area/hilbertshotelstorage
|
|
)
|
|
for (var/type in SPECIALS)
|
|
if ( istype(A,type) )
|
|
return AREA_SPECIAL
|
|
return AREA_STATION
|
|
|
|
/obj/item/areaeditor/blueprints/proc/view_wire_devices(mob/user)
|
|
var/message = "<br>You examine the wire legend.<br>"
|
|
for(var/wireset in GLOB.wire_color_directory)
|
|
message += "<br><a href='?src=[REF(src)];view_wireset=[wireset]'>[GLOB.wire_name_directory[wireset]]</a>"
|
|
message += "</p>"
|
|
return message
|
|
|
|
/obj/item/areaeditor/blueprints/proc/view_wire_set(mob/user, wireset)
|
|
//for some reason you can't use wireset directly as a derefencer so this is the next best :/
|
|
for(var/device in GLOB.wire_color_directory)
|
|
if("[device]" == wireset) //I know... don't change it...
|
|
var/message = "<p><b>[GLOB.wire_name_directory[device]]:</b>"
|
|
for(var/Col in GLOB.wire_color_directory[device])
|
|
var/wire_name = GLOB.wire_color_directory[device][Col]
|
|
if(!findtext(wire_name, WIRE_DUD_PREFIX)) //don't show duds
|
|
message += "<p><span style='color: [Col]'>[Col]</span>: [wire_name]</p>"
|
|
message += "</p>"
|
|
return message
|
|
return ""
|
|
|
|
/obj/item/areaeditor/proc/edit_area()
|
|
var/area/A = get_area()
|
|
var/prevname = "[A.name]"
|
|
var/str = stripped_input(usr,"New area name:", "Area Creation", "", MAX_NAME_LEN)
|
|
if(!str || !length(str) || str==prevname) //cancel
|
|
return
|
|
if(length(str) > 50)
|
|
to_chat(usr, "<span class='warning'>The given name is too long. The area's name is unchanged.</span>")
|
|
return
|
|
|
|
rename_area(A, str)
|
|
|
|
to_chat(usr, "<span class='notice'>You rename the '[prevname]' to '[str]'.</span>")
|
|
log_game("[key_name(usr)] has renamed [prevname] to [str]")
|
|
A.update_areasize()
|
|
interact()
|
|
return TRUE
|
|
|
|
//Blueprint Subtypes
|
|
|
|
/obj/item/areaeditor/blueprints/cyborg
|
|
name = "station schematics"
|
|
desc = "A digital copy of the station blueprints stored in your memory."
|
|
icon = 'icons/obj/items_and_weapons.dmi'
|
|
icon_state = "blueprints"
|
|
fluffnotice = "Intellectual Property of Nanotrasen. For use in engineering cyborgs only. Wipe from memory upon departure from the station."
|
|
|
|
/proc/rename_area(a, new_name)
|
|
var/area/A = get_area(a)
|
|
var/prevname = "[A.name]"
|
|
set_area_machinery_title(A, new_name, prevname)
|
|
A.name = new_name
|
|
if(A.firedoors)
|
|
for(var/D in A.firedoors)
|
|
var/obj/machinery/door/firedoor/FD = D
|
|
FD.CalculateAffectingAreas()
|
|
A.update_areasize()
|
|
return TRUE
|
|
|
|
|
|
/proc/set_area_machinery_title(area/A, title, oldtitle)
|
|
if(!oldtitle) // or replacetext goes to infinite loop
|
|
return
|
|
for(var/obj/machinery/airalarm/M in A)
|
|
M.name = replacetext(M.name,oldtitle,title)
|
|
for(var/obj/machinery/power/apc/M in A)
|
|
M.name = replacetext(M.name,oldtitle,title)
|
|
for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/M in A)
|
|
M.name = replacetext(M.name,oldtitle,title)
|
|
for(var/obj/machinery/atmospherics/components/unary/vent_pump/M in A)
|
|
M.name = replacetext(M.name,oldtitle,title)
|
|
for(var/obj/machinery/door/M in A)
|
|
M.name = replacetext(M.name,oldtitle,title)
|
|
//TODO: much much more. Unnamed airlocks, cameras, etc.
|