mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-17 13:12:37 +00:00
* Adding the ability to load the configuration of custom maps. (#71277) ## About The Pull Request By default, all custom maps are assigned one standard configuration. This option rather limits the possibilities for creating custom levels. For example, you can not use multilevel maps, because with this configuration will always be loaded only one level. With this PR I want to provide the ability to load a configuration file for a custom map similar to the standard map.json configs.  ## Why It's Good For The Game Allows administrators to flexibly configure custom maps. For example for events, etc. ## Changelog 🆑 admin: Adding the ability to load the configuration of custom maps /🆑 Co-authored-by: twilightwanderer <twilightwanderer@ users.noreply.github.com> Co-authored-by: san7890 <the@ san7890.com> * Adding the ability to load the configuration of custom maps. Co-authored-by: twilightwanderer <88540658+twilightwanderer@users.noreply.github.com> Co-authored-by: twilightwanderer <twilightwanderer@ users.noreply.github.com> Co-authored-by: san7890 <the@ san7890.com>
136 lines
5.0 KiB
Plaintext
136 lines
5.0 KiB
Plaintext
/client/proc/forcerandomrotate()
|
|
set category = "Server"
|
|
set name = "Trigger Random Map Rotation"
|
|
var/rotate = tgui_alert(usr,"Force a random map rotation to trigger?", "Rotate map?", list("Yes", "Cancel"))
|
|
if (rotate != "Yes")
|
|
return
|
|
message_admins("[key_name_admin(usr)] is forcing a random map rotation.")
|
|
log_admin("[key_name(usr)] is forcing a random map rotation.")
|
|
SSmapping.maprotate()
|
|
|
|
/client/proc/adminchangemap()
|
|
set category = "Server"
|
|
set name = "Change Map"
|
|
var/list/maprotatechoices = list()
|
|
for (var/map in config.maplist)
|
|
var/datum/map_config/virtual_map = config.maplist[map]
|
|
var/mapname = virtual_map.map_name
|
|
if (virtual_map == config.defaultmap)
|
|
mapname += " (Default)"
|
|
|
|
if (virtual_map.config_min_users > 0 || virtual_map.config_max_users > 0)
|
|
mapname += " \["
|
|
if (virtual_map.config_min_users > 0)
|
|
mapname += "[virtual_map.config_min_users]"
|
|
else
|
|
mapname += "0"
|
|
mapname += "-"
|
|
if (virtual_map.config_max_users > 0)
|
|
mapname += "[virtual_map.config_max_users]"
|
|
else
|
|
mapname += "inf"
|
|
mapname += "\]"
|
|
|
|
maprotatechoices[mapname] = virtual_map
|
|
var/chosenmap = tgui_input_list(usr, "Choose a map to change to", "Change Map", sort_list(maprotatechoices)|"Custom")
|
|
if (isnull(chosenmap))
|
|
return
|
|
|
|
if(chosenmap == "Custom")
|
|
message_admins("[key_name_admin(usr)] is changing the map to a custom map")
|
|
log_admin("[key_name(usr)] is changing the map to a custom map")
|
|
var/datum/map_config/virtual_map = new
|
|
|
|
var/map_file = input("Pick file:", "Map File") as null|file
|
|
if(isnull(map_file))
|
|
return
|
|
|
|
if(copytext("[map_file]", -4) != ".dmm")//4 == length(".dmm")
|
|
to_chat(src, span_warning("Filename must end in '.dmm': [map_file]"))
|
|
return
|
|
|
|
if(fexists("_maps/custom/[map_file]"))
|
|
fdel("_maps/custom/[map_file]")
|
|
if(!fcopy(map_file, "_maps/custom/[map_file]"))
|
|
return
|
|
// This is to make sure the map works so the server does not start without a map.
|
|
var/datum/parsed_map/M = new (map_file)
|
|
if(!M)
|
|
to_chat(src, span_warning("Map '[map_file]' failed to parse properly."))
|
|
return
|
|
|
|
if(!M.bounds)
|
|
to_chat(src, span_warning("Map '[map_file]' has non-existant bounds."))
|
|
qdel(M)
|
|
return
|
|
|
|
qdel(M)
|
|
var/config_file = null
|
|
var/list/json_value = list()
|
|
var/config = tgui_alert(usr,"Would you like to upload an additional config for this map?", "Map Config", list("Yes", "No"))
|
|
if(config == "Yes")
|
|
config_file = input("Pick file:", "Config JSON File") as null|file
|
|
if(isnull(config_file))
|
|
return
|
|
if(copytext("[config_file]", -5) != ".json")
|
|
to_chat(src, span_warning("Filename must end in '.json': [config_file]"))
|
|
return
|
|
if(fexists("data/custom_map_json/[config_file]"))
|
|
fdel("data/custom_map_json/[config_file]")
|
|
if(!fcopy(config_file, "data/custom_map_json/[config_file]"))
|
|
return
|
|
if (virtual_map.LoadConfig("data/custom_map_json/[config_file]", TRUE) != TRUE)
|
|
to_chat(src, span_warning("Failed to load config: [config_file]. Check that the fields are filled out correctly. \"map_path\": \"custom\" and \"map_file\": \"your_map_name.dmm\""))
|
|
return
|
|
json_value = list(
|
|
"version" = MAP_CURRENT_VERSION,
|
|
"map_name" = virtual_map.map_name,
|
|
"map_path" = virtual_map.map_path,
|
|
"map_file" = virtual_map.map_file,
|
|
"shuttles" = virtual_map.shuttles,
|
|
"traits" = virtual_map.traits,
|
|
"job_changes" = virtual_map.job_changes,
|
|
"library_areas" = virtual_map.library_areas,
|
|
)
|
|
else
|
|
virtual_map = load_map_config()
|
|
virtual_map.map_name = input("Choose the name for the map", "Map Name") as null|text
|
|
if(isnull(virtual_map.map_name))
|
|
virtual_map.map_name = "Custom"
|
|
|
|
var/shuttles = tgui_alert(usr,"Do you want to modify the shuttles?", "Map Shuttles", list("Yes", "No"))
|
|
if(shuttles == "Yes")
|
|
for(var/s in virtual_map.shuttles)
|
|
var/shuttle = input(s, "Map Shuttles") as null|text
|
|
if(!shuttle)
|
|
continue
|
|
if(!SSmapping.shuttle_templates[shuttle])
|
|
to_chat(usr, span_warning("No such shuttle as '[shuttle]' exists, using default."))
|
|
continue
|
|
virtual_map.shuttles[s] = shuttle
|
|
|
|
json_value = list(
|
|
"version" = MAP_CURRENT_VERSION,
|
|
"map_name" = virtual_map.map_name,
|
|
"map_path" = CUSTOM_MAP_PATH,
|
|
"map_file" = "[map_file]",
|
|
"shuttles" = virtual_map.shuttles,
|
|
)
|
|
|
|
// If the file isn't removed text2file will just append.
|
|
if(fexists(PATH_TO_NEXT_MAP_JSON))
|
|
fdel(PATH_TO_NEXT_MAP_JSON)
|
|
text2file(json_encode(json_value), PATH_TO_NEXT_MAP_JSON)
|
|
|
|
if(SSmapping.changemap(virtual_map))
|
|
message_admins("[key_name_admin(usr)] has changed the map to [virtual_map.map_name]")
|
|
SSmapping.map_force_chosen = TRUE
|
|
fdel("data/custom_map_json/[config_file]")
|
|
else
|
|
var/datum/map_config/virtual_map = maprotatechoices[chosenmap]
|
|
message_admins("[key_name_admin(usr)] is changing the map to [virtual_map.map_name]")
|
|
log_admin("[key_name(usr)] is changing the map to [virtual_map.map_name]")
|
|
if (SSmapping.changemap(virtual_map))
|
|
message_admins("[key_name_admin(usr)] has changed the map to [virtual_map.map_name]")
|
|
SSmapping.map_force_chosen = TRUE
|