mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-19 14:12:55 +00:00
## About The Pull Request 123 changed files and multiple crashes after writing broken regex, I replaced most remains of direct spans with macros. This cleans up the code and makes it easier to work with in general, see justification for the original PR. I also fixed a bunch of broken and/or unclosed spans here too. I intentionally avoided replacing spans with multiple classes (in most cases) and spans in the middle of strings as it would impact readability (in my opinion at least) and could be done later if required. ## Why It's Good For The Game Cleaner code, actually using our macros, fixes borked HTML in some places. See original PR. ## Changelog Nothing player-facing
92 lines
3.9 KiB
Plaintext
92 lines
3.9 KiB
Plaintext
/datum/buildmode_mode/map_export
|
|
key = "mapexport"
|
|
use_corner_selection = TRUE
|
|
/// Variable with the flag value to understand how to treat the shuttle zones.
|
|
var/shuttle_flag = SAVE_SHUTTLEAREA_DONTCARE
|
|
/// Variable with a flag value to indicate what should be saved (for example, only objects or only mobs).
|
|
var/save_flag = ALL
|
|
|
|
/datum/buildmode_mode/map_export/change_settings(client/builder)
|
|
var/static/list/options = list(
|
|
"Object Saving" = SAVE_OBJECTS,
|
|
"Mob Saving" = SAVE_MOBS,
|
|
"Turf Saving" = SAVE_TURFS,
|
|
"Area Saving" = SAVE_AREAS,
|
|
"Space Turf Saving" = SAVE_SPACE,
|
|
"Object Property Saving" = SAVE_OBJECT_PROPERTIES,
|
|
)
|
|
var/what_to_change = tgui_input_list(builder, "What export setting would you like to toggle?", "Map Exporter", options)
|
|
if (!what_to_change)
|
|
return
|
|
save_flag ^= options[what_to_change]
|
|
to_chat(builder, span_notice("[what_to_change] is now [save_flag & options[what_to_change] ? "ENABLED" : "DISABLED"]."))
|
|
|
|
/datum/buildmode_mode/map_export/show_help(client/builder)
|
|
to_chat(builder, span_purple(examine_block(
|
|
"[span_bold("Select corner")] -> Left Mouse Button on obj/turf/mob\n\
|
|
[span_bold("Set export options")] -> Right Mouse Button on buildmode button"))
|
|
)
|
|
|
|
/datum/buildmode_mode/map_export/handle_selected_area(client/builder, params)
|
|
var/list/listed_params = params2list(params)
|
|
var/left_click = listed_params.Find("left")
|
|
|
|
//Ensure the selection is actually done
|
|
if(!left_click)
|
|
to_chat(builder, span_warning("Invalid selection."))
|
|
return
|
|
|
|
//If someone somehow gets build mode, stop them from using this.
|
|
if(!check_rights(R_DEBUG))
|
|
message_admins("[ckey(builder)] tried to run the map save generator but was rejected due to insufficient perms.")
|
|
to_chat(builder, span_warning("You must have +ADMIN rights to use this."))
|
|
return
|
|
//Emergency check
|
|
if(get_dist(cornerA, cornerB) > 60 || cornerA.z != cornerB.z)
|
|
var/confirm = tgui_alert(builder, "Are you sure about this? Exporting large maps may take quite a while.", "Map Exporter", list("Yes", "No"))
|
|
if(confirm != "Yes")
|
|
return
|
|
|
|
if(cornerA == cornerB)
|
|
return
|
|
|
|
INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(_save_map), cornerA, cornerB, save_flag, shuttle_flag)
|
|
|
|
/// A guard variable to prevent more than one map export process from occurring at the same time.
|
|
GLOBAL_VAR_INIT(map_writing_running, FALSE)
|
|
/// Hey bud don't call this directly, it exists so we can invoke async and prevent the buildmode datum being qdel'd from halting this proc
|
|
/proc/_save_map(turf/cornerA, turf/cornerB, save_flag, shuttle_flag)
|
|
if(!check_rights(R_DEBUG))
|
|
message_admins("[ckey(usr)] tried to run the map save generator but was rejected due to insufficient perms.")
|
|
to_chat(usr, span_warning("You must have +ADMIN rights to use this."))
|
|
return
|
|
if(GLOB.map_writing_running)
|
|
to_chat(usr, span_warning("Someone is already running the generator! Try again in a little bit."))
|
|
return
|
|
|
|
to_chat(usr, span_warning("Saving, please wait..."))
|
|
GLOB.map_writing_running = TRUE
|
|
|
|
//I put this before the actual saving of the map because it likely won't log if it crashes the fucking server
|
|
log_admin("Build Mode: [key_name(usr)] is exporting the map area from [AREACOORD(cornerA)] through [AREACOORD(cornerB)]")
|
|
|
|
//oversimplified for readability and understandibility
|
|
|
|
var/minx = min(cornerA.x, cornerB.x)
|
|
var/miny = min(cornerA.y, cornerB.y)
|
|
var/minz = min(cornerA.z, cornerB.z)
|
|
|
|
var/maxx = max(cornerA.x, cornerB.x)
|
|
var/maxy = max(cornerA.y, cornerB.y)
|
|
var/maxz = max(cornerA.z, cornerB.z)
|
|
|
|
//Step 1: Get the data (This can take a while)
|
|
var/dat = write_map(minx, miny, minz, maxx, maxy, maxz, save_flag, shuttle_flag)
|
|
|
|
//Step 2: Write the data to a file and give map to client
|
|
var/date = time2text(world.timeofday, "YYYY-MM-DD_hh-mm-ss")
|
|
var/file_name = sanitize_filename(tgui_input_text(usr, "Filename?", "Map Exporter", "exported_map_[date]"))
|
|
send_exported_map(usr, file_name, dat)
|
|
to_chat(usr, span_green("The map was successfully saved!"))
|
|
GLOB.map_writing_running = FALSE
|