diff options
author | kwolekr <kwolekr@minetest.net> | 2015-01-15 16:20:05 -0500 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2015-01-15 16:48:56 -0500 |
commit | 9736548720a96c9c7f739edb0435d9ba4ad80652 (patch) | |
tree | 3f92b63d017e9baac042ed3837bbdf040d40c73f /src/script/lua_api/l_env.cpp | |
parent | 0330cec7ec55126c9cc441373cde1253bed895ee (diff) | |
download | minetest-9736548720a96c9c7f739edb0435d9ba4ad80652.tar.gz minetest-9736548720a96c9c7f739edb0435d9ba4ad80652.tar.bz2 minetest-9736548720a96c9c7f739edb0435d9ba4ad80652.zip |
Add ability to delete MapBlocks from map
Also add a Lua API and chatcommand for this
Diffstat (limited to 'src/script/lua_api/l_env.cpp')
-rw-r--r-- | src/script/lua_api/l_env.cpp | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index c8c1ca0e1..cd5d253ac 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -657,7 +657,8 @@ int ModApiEnvMod::l_clear_objects(lua_State *L) } // line_of_sight(pos1, pos2, stepsize) -> true/false, pos -int ModApiEnvMod::l_line_of_sight(lua_State *L) { +int ModApiEnvMod::l_line_of_sight(lua_State *L) +{ float stepsize = 1.0; GET_ENV_PTR; @@ -681,6 +682,37 @@ int ModApiEnvMod::l_line_of_sight(lua_State *L) { return 1; } +// delete_area(p1, p2) +// delete mapblocks in area p1..p2 +int ModApiEnvMod::l_delete_area(lua_State *L) +{ + GET_ENV_PTR; + + v3s16 bpmin = getNodeBlockPos(read_v3s16(L, 1)); + v3s16 bpmax = getNodeBlockPos(read_v3s16(L, 2)); + sortBoxVerticies(bpmin, bpmax); + + ServerMap &map = env->getServerMap(); + + MapEditEvent event; + event.type = MEET_OTHER; + + bool success = true; + for (s16 z = bpmin.Z; z <= bpmax.Z; z++) + for (s16 y = bpmin.Y; y <= bpmax.Y; y++) + for (s16 x = bpmin.X; x <= bpmax.X; x++) { + v3s16 bp(x, y, z); + if (map.deleteBlock(bp)) + event.modified_blocks.insert(bp); + else + success = false; + } + + map.dispatchEvent(&event); + lua_pushboolean(L, success); + return 1; +} + // find_path(pos1, pos2, searchdistance, // max_jump, max_drop, algorithm) -> table containing path int ModApiEnvMod::l_find_path(lua_State *L) @@ -849,6 +881,7 @@ void ModApiEnvMod::Initialize(lua_State *L, int top) API_FCT(get_gametime); API_FCT(find_node_near); API_FCT(find_nodes_in_area); + API_FCT(delete_area); API_FCT(get_perlin); API_FCT(get_perlin_map); API_FCT(get_voxel_manip); |