Adding admin verb to load templates(maps) during runtime. (#7674)

This commit is contained in:
Mykhailo Bykhovtsev
2020-01-27 12:51:49 -08:00
committed by Matt Atlas
parent f64bddfd64
commit 7b07d8f2e0
16 changed files with 33829 additions and 119 deletions
+4 -4
View File
@@ -244,10 +244,10 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
name = "Janitorial supplies"
contains = list(/obj/item/reagent_containers/glass/bucket,
/obj/item/mop,
/obj/item/caution,
/obj/item/caution,
/obj/item/caution,
/obj/item/caution,
/obj/item/clothing/suit/caution,
/obj/item/clothing/suit/caution,
/obj/item/clothing/suit/caution,
/obj/item/clothing/suit/caution,
/obj/item/storage/bag/trash,
/obj/item/device/lightreplacer,
/obj/item/reagent_containers/spray/cleaner,
+159 -104
View File
@@ -6,6 +6,7 @@
log_admin("[key_name(usr)] has left build mode.",admin_key=key_name(usr))
M.client.buildmode = 0
M.client.show_popup_menus = 1
M.verbs -= /verb/load_template_verb
for(var/obj/effect/bmode/buildholder/H)
if(H.cl == M.client)
qdel(H)
@@ -13,7 +14,7 @@
log_admin("[key_name(usr)] has entered build mode.",admin_key=key_name(usr))
M.client.buildmode = 1
M.client.show_popup_menus = 0
M.verbs += /verb/load_template_verb
var/obj/effect/bmode/buildholder/H = new/obj/effect/bmode/buildholder()
var/obj/effect/bmode/builddir/A = new/obj/effect/bmode/builddir(H)
A.master = H
@@ -23,15 +24,19 @@
C.master = H
var/obj/effect/bmode/buildquit/D = new/obj/effect/bmode/buildquit(H)
D.master = H
var/obj/effect/bmode/template/E = new/obj/effect/bmode/template(H)
E.master = H
H.builddir = A
H.buildhelp = B
H.buildmode = C
H.buildquit = D
H.load_template = E
M.client.screen += A
M.client.screen += B
M.client.screen += C
M.client.screen += D
M.client.screen += E
H.cl = M.client
/obj/effect/bmode//Cleaning up the tree a bit
@@ -51,67 +56,69 @@
/obj/effect/bmode/builddir
icon_state = "build"
screen_loc = "NORTH,WEST"
Click()
switch(dir)
if(NORTH)
set_dir(EAST)
if(EAST)
set_dir(SOUTH)
if(SOUTH)
set_dir(WEST)
if(WEST)
set_dir(NORTHWEST)
if(NORTHWEST)
set_dir(NORTH)
return 1
/obj/effect/bmode/builddir/Click()
switch(dir)
if(NORTH)
set_dir(EAST)
if(EAST)
set_dir(SOUTH)
if(SOUTH)
set_dir(WEST)
if(WEST)
set_dir(NORTHWEST)
if(NORTHWEST)
set_dir(NORTH)
return 1
/obj/effect/bmode/buildhelp
icon = 'icons/misc/buildmode.dmi'
icon_state = "buildhelp"
screen_loc = "NORTH,WEST+1"
Click()
switch(master.cl.buildmode)
if(1)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button = Construct / Upgrade</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button = Deconstruct / Delete / Downgrade</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button + ctrl = R-Window</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button + alt = Airlock</span>")
to_chat(usr, "")
to_chat(usr, "<span class='notice'>Use the button in the upper left corner to</span>")
to_chat(usr, "<span class='notice'>change the direction of built objects.</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(2)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Set object type</span>")
to_chat(usr, "<span class='notice'>Middle Mouse Button on buildmode button= On/Off object type saying</span>")
to_chat(usr, "<span class='notice'>Middle Mouse Button on turf/obj = Capture object type</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj = Place objects</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button = Delete objects</span>")
to_chat(usr, "")
to_chat(usr, "<span class='notice'>Use the button in the upper left corner to</span>")
to_chat(usr, "<span class='notice'>change the direction of built objects.</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(3)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Select var(type) & value</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Set var(type) & value</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Reset var's value</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(4)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Select</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Throw</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
return 1
/obj/effect/bmode/buildhelp/Click()
switch(master.cl.buildmode)
if(1)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button = Construct / Upgrade</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button = Deconstruct / Delete / Downgrade</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button + ctrl = R-Window</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button + alt = Airlock</span>")
to_chat(usr, "")
to_chat(usr, "<span class='notice'>Use the button in the upper left corner to</span>")
to_chat(usr, "<span class='notice'>change the direction of built objects.</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(2)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Set object type</span>")
to_chat(usr, "<span class='notice'>Middle Mouse Button on buildmode button= On/Off object type saying</span>")
to_chat(usr, "<span class='notice'>Middle Mouse Button on turf/obj = Capture object type</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj = Place objects</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button = Delete objects</span>")
to_chat(usr, "")
to_chat(usr, "<span class='notice'>Use the button in the upper left corner to</span>")
to_chat(usr, "<span class='notice'>change the direction of built objects.</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(3)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Select var(type) & value</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Set var(type) & value</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Reset var's value</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(4)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Select</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Throw</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
return 1
/obj/effect/bmode/buildquit
icon_state = "buildquit"
screen_loc = "NORTH,WEST+3"
screen_loc = "NORTH,WEST+4"
Click()
togglebuildmode(master.cl.mob)
return 1
/obj/effect/bmode/buildquit/Click()
togglebuildmode(master.cl.mob)
return 1
/obj/effect/bmode/buildholder
density = 0
@@ -121,6 +128,7 @@
var/obj/effect/bmode/buildhelp/buildhelp = null
var/obj/effect/bmode/buildmode/buildmode = null
var/obj/effect/bmode/buildquit/buildquit = null
var/obj/effect/bmode/template/load_template = null
var/atom/movable/throw_atom = null
/obj/effect/bmode/buildholder/Destroy()
@@ -136,70 +144,78 @@
cl = null
return ..()
/obj/effect/bmode/template
icon_state = "load_template"
screen_loc = "NORTH,WEST+2"
/obj/effect/bmode/template/Click()
load_template(usr)
return 1
/obj/effect/bmode/buildmode
icon_state = "buildmode1"
screen_loc = "NORTH,WEST+2"
screen_loc = "NORTH,WEST+3"
var/varholder = "name"
var/valueholder = "derp"
var/objholder = /obj/structure/closet
var/objsay = 1
Click(location, control, params)
var/list/pa = params2list(params)
/obj/effect/bmode/buildmode/Click(location, control, params)
var/list/pa = params2list(params)
if(pa.Find("middle"))
switch(master.cl.buildmode)
if(2)
objsay=!objsay
if(pa.Find("middle"))
switch(master.cl.buildmode)
if(2)
objsay=!objsay
if(pa.Find("left"))
switch(master.cl.buildmode)
if(1)
master.cl.buildmode = 2
src.icon_state = "buildmode2"
if(2)
master.cl.buildmode = 3
src.icon_state = "buildmode3"
if(3)
master.cl.buildmode = 4
src.icon_state = "buildmode4"
if(4)
master.cl.buildmode = 1
src.icon_state = "buildmode1"
if(pa.Find("left"))
switch(master.cl.buildmode)
if(1)
master.cl.buildmode = 2
src.icon_state = "buildmode2"
if(2)
master.cl.buildmode = 3
src.icon_state = "buildmode3"
if(3)
master.cl.buildmode = 4
src.icon_state = "buildmode4"
if(4)
master.cl.buildmode = 1
src.icon_state = "buildmode1"
else if(pa.Find("right"))
switch(master.cl.buildmode)
if(1)
return 1
if(2)
objholder = text2path(input(usr,"Enter typepath:" ,"Typepath","/obj/structure/closet"))
if(!ispath(objholder))
else if(pa.Find("right"))
switch(master.cl.buildmode)
if(1)
return 1
if(2)
objholder = text2path(input(usr,"Enter typepath:" ,"Typepath","/obj/structure/closet"))
if(!ispath(objholder))
objholder = /obj/structure/closet
alert("That path is not allowed.")
else
if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0))
objholder = /obj/structure/closet
alert("That path is not allowed.")
else
if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0))
objholder = /obj/structure/closet
if(3)
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
if(3)
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0))
return 1
var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference")
if(!thetype) return 1
switch(thetype)
if("text")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", "value") as text
if("number")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", 123) as num
if("mob-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as mob in mob_list
if("obj-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
if("turf-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world
return 1
master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0))
return 1
var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference")
if(!thetype) return 1
switch(thetype)
if("text")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", "value") as text
if("number")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", 123) as num
if("mob-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as mob in mob_list
if("obj-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
if("turf-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world
return 1
/proc/build_click(var/mob/user, buildmode, params, var/obj/object)
var/obj/effect/bmode/buildholder/holder = null
@@ -297,3 +313,42 @@
if(holder.throw_atom)
holder.throw_atom.throw_at(object, 10, 1)
log_admin("[key_name(usr)] threw [holder.throw_atom] at [object]",admin_key=key_name(usr))
/verb/load_template_verb()
set name = "Load Template"
set category = "Special Verbs"
if(!usr)
return
load_template(usr)
/proc/load_template(var/mob/user)
if(!user)
return
if(!check_rights(R_SPAWN))
return
var/list/templates
try
templates = json_decode(return_file_text("config/templates_list.json"))
catch(var/exception/ej)
log_debug("Warning: Could not load the templates config as templates_list.json is missing - [ej]")
return
if(!templates || !templates["templates_list"] || templates["templates_folder"] == "")
return
var/turf/T = get_turf(user)
var/name = input(user, "Which template would you like to load?", "Load Template", null) as null|anything in templates["templates_list"]
if (!name || !T)
return
var/datum/map_template/maploader = new (templates["templates_folder"] + name, name)
if (!maploader)
log_debug("Error, unable to load maploader in proc load_template!")
return
var/centered = input(user, "Do you want template to load as center or Edge?", "Load Template", null) as null|anything in list("Center", "Edge")
maploader.load(T, centered == "Center" ? TRUE : FALSE)
log_and_message_admins("[key_name_admin(user)] has loaded template [name].", user, T)
+10 -10
View File
@@ -48,8 +48,8 @@
SSmachinery.setup_template_powernets(cables)
/datum/map_template/proc/load_new_z()
var/x = round(world.maxx/2)
var/y = round(world.maxy/2)
var/x = round(world.maxx / 2)
var/y = round(world.maxy / 2)
var/list/bounds = maploader.load_map(file(mappath), x, y, no_changeturf = TRUE)
if(!bounds)
@@ -60,32 +60,32 @@
//initialize things that are normally initialized after map load
initTemplateBounds(bounds)
log_game("Z-level [name] loaded at at [x],[y],[world.maxz]")
log_game("Z-level [name] loaded at [x], [y], [world.maxz]")
/datum/map_template/proc/load(turf/T, centered = FALSE)
if(centered)
T = locate(T.x - round(width/2) , T.y - round(height/2) , T.z)
T = locate(T.x - round(width / 2) , T.y - round(height / 2) , T.z)
if(!T)
return
if(T.x+width > world.maxx)
if(T.x + width > world.maxx)
return
if(T.y+height > world.maxy)
if(T.y + height > world.maxy)
return
var/list/bounds = maploader.load_map(file(mappath), T.x, T.y, T.z, cropMap=TRUE)
var/list/bounds = maploader.load_map(file(mappath), T.x, T.y, T.z, cropMap=TRUE, no_changeturf = TRUE)
if(!bounds)
return
//initialize things that are normally initialized after map load
initTemplateBounds(bounds)
log_game("[name] loaded at at [T.x],[T.y],[T.z]")
log_game("[name] loaded at [T.x], [T.y], [T.z]")
return TRUE
/datum/map_template/proc/get_affected_turfs(turf/T, centered = FALSE)
var/turf/placement = T
if(centered)
var/turf/corner = locate(placement.x - round(width/2), placement.y - round(height/2), placement.z)
var/turf/corner = locate(placement.x - round(width / 2), placement.y - round(height / 2), placement.z)
if(corner)
placement = corner
return block(placement, locate(placement.x+width-1, placement.y+height-1, placement.z))
return block(placement, locate(placement.x + width-1, placement.y + height-1, placement.z))
+11
View File
@@ -0,0 +1,11 @@
{
"templates_folder": "maps/templates/",
"templates_list":
[
"sol.dmm",
"syndicate_base.dmm",
"syndicate_shuttle.dmm",
"asteroid_outpost.dmm",
"pra.dmm"
]
}
+42
View File
@@ -0,0 +1,42 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
# balance
# admin
# backend
# security
# refactor
#################################
# Your name.
author: PoZe
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Added new admin verb inside of Special Verbs called Load Template. It appears when you press Toggle Build Mode. This verb allows admins to load template maps into their current coordinates."
- rscadd: "Added button to Build Mode buttons UI for load template."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+402
View File
@@ -0,0 +1,402 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/simulated/floor,
/area/derelict)
"b" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 8
},
/turf/simulated/floor,
/area/derelict)
"c" = (
/turf/simulated/wall/shuttle/dark/corner/underlay{
icon_state = "wall3";
dir = 5
},
/area/derelict)
"d" = (
/turf/space,
/area/space)
"e" = (
/turf/simulated/wall/shuttle/dark/cardinal,
/area/derelict)
"f" = (
/turf/simulated/wall/shuttle/dark/corner/underlay{
icon_state = "wall3";
dir = 9
},
/area/derelict)
"g" = (
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/turf/simulated/wall/shuttle/dark/cardinal{
dir = 4;
icon_state = "diagonalWall3"
},
/turf/simulated/wall/shuttle/dark/corner{
icon_state = "wall3";
dir = 6
},
/area/derelict)
"h" = (
/obj/structure/table/standard,
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/area/derelict)
"i" = (
/obj/structure/computerframe,
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/area/derelict)
"j" = (
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/turf/simulated/wall/shuttle/dark/cardinal{
icon_state = "diagonalWall3"
},
/turf/simulated/wall/shuttle/dark/corner{
icon_state = "wall3";
dir = 10
},
/area/derelict)
"k" = (
/obj/machinery/door/airlock/maintenance_hatch,
/turf/simulated/floor,
/area/derelict)
"l" = (
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/area/derelict)
"m" = (
/obj/structure/bed/chair/office/bridge{
icon_state = "bridge";
dir = 4
},
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/area/derelict)
"n" = (
/obj/structure/grille,
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced{
icon_state = "rwindow";
dir = 1
},
/obj/machinery/door/firedoor,
/turf/simulated/floor,
/area/derelict)
"o" = (
/obj/machinery/portable_atmospherics/canister/air,
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/area/derelict)
"p" = (
/obj/structure/grille,
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/turf/simulated/floor,
/area/derelict)
"q" = (
/obj/structure/table/standard,
/obj/item/fossil/shell,
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/area/derelict)
"r" = (
/obj/machinery/porta_turret/xray,
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/effect/floor_decal/industrial/warning/full,
/turf/simulated/floor/tiled/dark,
/area/derelict)
"s" = (
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/grille,
/obj/structure/window/reinforced{
dir = 4
},
/turf/simulated/floor,
/area/derelict)
"t" = (
/obj/machinery/floodlight,
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/area/derelict)
"u" = (
/obj/structure/grille,
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/machinery/door/firedoor,
/turf/simulated/floor,
/area/derelict)
"v" = (
/turf/simulated/floor,
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 8
},
/turf/simulated/wall/shuttle/dark/cardinal{
dir = 8;
icon_state = "diagonalWall3"
},
/area/derelict)
"w" = (
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/turf/simulated/wall/shuttle/dark/cardinal{
dir = 6;
icon_state = "diagonalWall3"
},
/turf/simulated/wall/shuttle/dark/corner{
icon_state = "wall3";
dir = 5
},
/area/derelict)
"x" = (
/obj/machinery/constructable_frame,
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/area/derelict)
"y" = (
/turf/simulated/floor/shuttle{
icon_state = "floor4"
},
/turf/simulated/wall/shuttle/dark/cardinal{
dir = 8;
icon_state = "diagonalWall3"
},
/turf/simulated/wall/shuttle/dark/corner{
icon_state = "wall3";
dir = 9
},
/area/derelict)
"z" = (
/turf/simulated/wall/shuttle/dark/corner/underlay{
icon_state = "wall3";
dir = 6
},
/area/derelict)
"A" = (
/turf/simulated/wall/shuttle/dark/corner/underlay{
icon_state = "wall3";
dir = 10
},
/area/derelict)
"B" = (
/turf/simulated/floor,
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 8
},
/turf/simulated/wall/shuttle/dark/cardinal{
icon_state = "diagonalWall3"
},
/area/derelict)
(1,1,1) = {"
d
d
d
v
k
e
e
e
e
B
d
d
d
"}
(2,1,1) = {"
d
d
d
e
a
e
q
h
t
e
d
d
d
"}
(3,1,1) = {"
d
d
f
e
k
e
h
l
l
e
A
d
d
"}
(4,1,1) = {"
b
v
e
g
l
o
h
l
l
w
e
B
b
"}
(5,1,1) = {"
c
e
e
h
l
l
l
l
l
x
e
e
z
"}
(6,1,1) = {"
d
c
e
h
l
l
l
l
l
x
e
z
d
"}
(7,1,1) = {"
d
d
e
i
l
l
r
l
l
h
e
d
d
"}
(8,1,1) = {"
d
d
e
i
l
l
l
l
l
h
e
d
d
"}
(9,1,1) = {"
d
d
e
j
m
l
l
l
m
y
e
d
d
"}
(10,1,1) = {"
d
d
c
e
i
l
m
l
i
e
z
d
d
"}
(11,1,1) = {"
d
d
d
e
h
l
i
l
h
e
d
d
d
"}
(12,1,1) = {"
d
d
d
c
n
p
p
s
u
z
d
d
d
"}
@@ -0,0 +1,12 @@
@echo off
cd ../../maps/templates
for /R %%f in (*.dmm) do copy "%%f" "%%f.backup"
cls
echo All dmm files in the maps/templates directory have been backed up.
echo Now you can make your changes...
echo ---
echo Remember to run mapmerge.bat just before you commit your changes!
echo ---
pause
+11
View File
@@ -0,0 +1,11 @@
cd ../../maps/templates
for f in *.dmm; do
cp -- "$f" "${f%.dmm}.dmm.backup"
done
echo "All dmm files in the maps/templates directory have been backed up."
echo "Now you can make your changes."
echo "---"
echo "Remember to run mapmerge.sh just before you commit your changes!"
echo "---"
+1 -1
View File
@@ -1,2 +1,2 @@
pygit2==0.26.0
pygit2==1.0.1
bidict==0.13.1