summaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authorPilzAdam <pilzadam@minetest.net>2013-08-03 01:58:29 +0200
committerPilzAdam <pilzadam@minetest.net>2013-08-03 03:22:14 +0200
commit45589fae58157c8a66c640a1db5795a42a86fc1c (patch)
treeaafb4d39b821e2bff4d590a25b982cd4228b9657 /src/script
parent5e433fa913cc21d4d3c9ba1ef341c3c7aedc128c (diff)
downloadminetest-45589fae58157c8a66c640a1db5795a42a86fc1c.tar.gz
minetest-45589fae58157c8a66c640a1db5795a42a86fc1c.tar.bz2
minetest-45589fae58157c8a66c640a1db5795a42a86fc1c.zip
Add replacements to schematics
Diffstat (limited to 'src/script')
-rw-r--r--src/script/lua_api/luaapi.cpp40
1 files changed, 38 insertions, 2 deletions
diff --git a/src/script/lua_api/luaapi.cpp b/src/script/lua_api/luaapi.cpp
index 0d4c7da7b..929aa40d0 100644
--- a/src/script/lua_api/luaapi.cpp
+++ b/src/script/lua_api/luaapi.cpp
@@ -808,7 +808,26 @@ int ModApiBasic::l_register_decoration(lua_State *L)
dschem->flags = getflagsfield(L, index, "flags", flagdesc_deco_schematic);
dschem->rotation = (Rotation)getenumfield(L, index,
"rotation", es_Rotation, ROTATE_0);
-
+
+ lua_getfield(L, index, "replacements");
+ if (lua_istable(L, -1)) {
+ int i = lua_gettop(L);
+ lua_pushnil(L);
+ while (lua_next(L, i) != 0) {
+ // key at index -2 and value at index -1
+ lua_rawgeti(L, -1, 1);
+ std::string replace_from = lua_tostring(L, -1);
+ lua_pop(L, 1);
+ lua_rawgeti(L, -1, 2);
+ std::string replace_to = lua_tostring(L, -1);
+ lua_pop(L, 1);
+ dschem->replacements[replace_from] = replace_to;
+ // removes value, keeps key for next iteration
+ lua_pop(L, 1);
+ }
+ }
+ lua_pop(L, 1);
+
lua_getfield(L, index, "schematic");
if (!read_schematic(L, -1, dschem, getServer(L))) {
delete dschem;
@@ -888,7 +907,7 @@ int ModApiBasic::l_create_schematic(lua_State *L)
}
-// place_schematic(p, schematic, rotation)
+// place_schematic(p, schematic, rotation, replacement)
int ModApiBasic::l_place_schematic(lua_State *L)
{
DecoSchematic dschem;
@@ -906,6 +925,23 @@ int ModApiBasic::l_place_schematic(lua_State *L)
dschem.rotation = rot;
+ if (lua_istable(L, 4)) {
+ int index = 4;
+ lua_pushnil(L);
+ while (lua_next(L, index) != 0) {
+ // key at index -2 and value at index -1
+ lua_rawgeti(L, -1, 1);
+ std::string replace_from = lua_tostring(L, -1);
+ lua_pop(L, 1);
+ lua_rawgeti(L, -1, 2);
+ std::string replace_to = lua_tostring(L, -1);
+ lua_pop(L, 1);
+ dschem.replacements[replace_from] = replace_to;
+ // removes value, keeps key for next iteration
+ lua_pop(L, 1);
+ }
+ }
+
if (!dschem.filename.empty()) {
if (!dschem.loadSchematicFile()) {
errorstream << "place_schematic: failed to load schematic file '"