diff options
author | PilzAdam <pilzadam@minetest.net> | 2013-08-03 01:58:29 +0200 |
---|---|---|
committer | PilzAdam <pilzadam@minetest.net> | 2013-08-03 03:22:14 +0200 |
commit | 45589fae58157c8a66c640a1db5795a42a86fc1c (patch) | |
tree | aafb4d39b821e2bff4d590a25b982cd4228b9657 /src/script | |
parent | 5e433fa913cc21d4d3c9ba1ef341c3c7aedc128c (diff) | |
download | minetest-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.cpp | 40 |
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 '" |