diff options
-rw-r--r-- | data/scripts/default.lua | 199 | ||||
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/content_tool.cpp | 68 | ||||
-rw-r--r-- | src/content_tool.h | 24 | ||||
-rw-r--r-- | src/game.cpp | 3 | ||||
-rw-r--r-- | src/scriptapi.cpp | 97 | ||||
-rw-r--r-- | src/server.cpp | 13 | ||||
-rw-r--r-- | src/server.h | 3 |
8 files changed, 307 insertions, 101 deletions
diff --git a/data/scripts/default.lua b/data/scripts/default.lua index eda7cd25e..d0479d90d 100644 --- a/data/scripts/default.lua +++ b/data/scripts/default.lua @@ -113,6 +113,205 @@ end minetest.register_globalstep(on_step) +minetest.register_tool("WPick", { + image = "tool_woodpick.png", + basetime = 2.0, + dt_weight = 0, + dt_crackiness = -0.5, + dt_crumbliness = 2, + dt_cuttability = 0, + basedurability = 50, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("STPick", { + image = "tool_stonepick.png", + basetime = 1.5, + dt_weight = 0, + dt_crackiness = -0.5, + dt_crumbliness = 2, + dt_cuttability = 0, + basedurability = 100, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("SteelPick", { + image = "tool_steelpick.png", + basetime = 1.0, + dt_weight = 0, + dt_crackiness = -0.5, + dt_crumbliness = 2, + dt_cuttability = 0, + basedurability = 300, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("MesePick", { + image = "tool_mesepick.png", + basetime = 0, + dt_weight = 0, + dt_crackiness = 0, + dt_crumbliness = 0, + dt_cuttability = 0, + basedurability = 1337, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("WShovel", { + image = "tool_woodshovel.png", + basetime = 2.0, + dt_weight = 0.5, + dt_crackiness = 2, + dt_crumbliness = -1.5, + dt_cuttability = 0.3, + basedurability = 50, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("STShovel", { + image = "tool_stoneshovel.png", + basetime = 1.5, + dt_weight = 0.5, + dt_crackiness = 2, + dt_crumbliness = -1.5, + dt_cuttability = 0.1, + basedurability = 100, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("SteelShovel", { + image = "tool_steelshovel.png", + basetime = 1.0, + dt_weight = 0.5, + dt_crackiness = 2, + dt_crumbliness = -1.5, + dt_cuttability = 0.0, + basedurability = 300, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("WAxe", { + image = "tool_woodaxe.png", + basetime = 2.0, + dt_weight = 0.5, + dt_crackiness = -0.2, + dt_crumbliness = 1, + dt_cuttability = -0.5, + basedurability = 50, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("STAxe", { + image = "tool_stoneaxe.png", + basetime = 1.5, + dt_weight = 0.5, + dt_crackiness = -0.2, + dt_crumbliness = 1, + dt_cuttability = -0.5, + basedurability = 100, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("SteelAxe", { + image = "tool_steelaxe.png", + basetime = 1.0, + dt_weight = 0.5, + dt_crackiness = -0.2, + dt_crumbliness = 1, + dt_cuttability = -0.5, + basedurability = 300, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("WSword", { + image = "tool_woodsword.png", + basetime = 3.0, + dt_weight = 3, + dt_crackiness = 0, + dt_crumbliness = 1, + dt_cuttability = -1, + basedurability = 50, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("STSword", { + image = "tool_stonesword.png", + basetime = 2.5, + dt_weight = 3, + dt_crackiness = 0, + dt_crumbliness = 1, + dt_cuttability = -1, + basedurability = 100, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("SteelSword", { + image = "tool_steelsword.png", + basetime = 2.0, + dt_weight = 3, + dt_crackiness = 0, + dt_crumbliness = 1, + dt_cuttability = -1, + basedurability = 300, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) +minetest.register_tool("", { + image = "", + basetime = 0.5, + dt_weight = 1, + dt_crackiness = 0, + dt_crumbliness = -1, + dt_cuttability = 0, + basedurability = 50, + dd_weight = 0, + dd_crackiness = 0, + dd_crumbliness = 0, + dd_cuttability = 0, +}) + +--[[ +minetest.register_tool("horribletool", { + image = "lava.png", + basetime = 2.0 + dt_weight = 0.2 + dt_crackiness = 0.2 + dt_crumbliness = 0.2 + dt_cuttability = 0.2 + basedurability = 50 + dd_weight = -5 + dd_crackiness = -5 + dd_crumbliness = -5 + dd_cuttability = -5 +}) +--]] + local TNT = { -- Maybe handle gravity and collision this way? dunno physical = true, diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0f6c567c3..85060ac70 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -94,7 +94,6 @@ configure_file( ) set(common_SRCS - content_tool.cpp tooldef.cpp nodedef.cpp luaentity_common.cpp diff --git a/src/content_tool.cpp b/src/content_tool.cpp deleted file mode 100644 index 0cdce8e91..000000000 --- a/src/content_tool.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* -Minetest-c55 -Copyright (C) 2011 celeron55, Perttu Ahola <celeron55@gmail.com> - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#include "content_tool.h" -#include "tooldef.h" - -void content_tool_init(IWritableToolDefManager *mgr) -{ - mgr->registerTool("WPick", - ToolDefinition("tool_woodpick.png", - ToolDiggingProperties(2.0, 0,-0.5,2,0, 50, 0,0,0,0))); - mgr->registerTool("STPick", - ToolDefinition("tool_stonepick.png", - ToolDiggingProperties(1.5, 0,-0.5,2,0, 100, 0,0,0,0))); - mgr->registerTool("SteelPick", - ToolDefinition("tool_steelpick.png", - ToolDiggingProperties(1.0, 0,-0.5,2,0, 300, 0,0,0,0))); - mgr->registerTool("MesePick", - ToolDefinition("tool_mesepick.png", - ToolDiggingProperties(0, 0,0,0,0, 1337, 0,0,0,0))); - mgr->registerTool("WShovel", - ToolDefinition("tool_woodshovel.png", - ToolDiggingProperties(2.0, 0.5,2,-1.5,0.3, 50, 0,0,0,0))); - mgr->registerTool("STShovel", - ToolDefinition("tool_stoneshovel.png", - ToolDiggingProperties(1.5, 0.5,2,-1.5,0.1, 100, 0,0,0,0))); - mgr->registerTool("SteelShovel", - ToolDefinition("tool_steelshovel.png", - ToolDiggingProperties(1.0, 0.5,2,-1.5,0.0, 300, 0,0,0,0))); - mgr->registerTool("WAxe", - ToolDefinition("tool_woodaxe.png", - ToolDiggingProperties(2.0, 0.5,-0.2,1,-0.5, 50, 0,0,0,0))); - mgr->registerTool("STAxe", - ToolDefinition("tool_stoneaxe.png", - ToolDiggingProperties(1.5, 0.5,-0.2,1,-0.5, 100, 0,0,0,0))); - mgr->registerTool("SteelAxe", - ToolDefinition("tool_steelaxe.png", - ToolDiggingProperties(1.0, 0.5,-0.2,1,-0.5, 300, 0,0,0,0))); - mgr->registerTool("WSword", - ToolDefinition("tool_woodsword.png", - ToolDiggingProperties(3.0, 3,0,1,-1, 50, 0,0,0,0))); - mgr->registerTool("STSword", - ToolDefinition("tool_stonesword.png", - ToolDiggingProperties(2.5, 3,0,1,-1, 100, 0,0,0,0))); - mgr->registerTool("SteelSword", - ToolDefinition("tool_steelsword.png", - ToolDiggingProperties(2.0, 3,0,1,-1, 300, 0,0,0,0))); - mgr->registerTool("", - ToolDefinition("tooldef.hand.png", - ToolDiggingProperties(0.5, 1,0,-1,0, 50, 0,0,0,0))); -} - diff --git a/src/content_tool.h b/src/content_tool.h deleted file mode 100644 index c7f14be31..000000000 --- a/src/content_tool.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -Minetest-c55 -Copyright (C) 2011 celeron55, Perttu Ahola <celeron55@gmail.com> - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -class IWritableToolDefManager; - -// Add default tools to manager -void content_tool_init(IWritableToolDefManager *mgr); - diff --git a/src/game.cpp b/src/game.cpp index ae45e5146..6c75863c0 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -49,7 +49,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "main.h" // For g_settings #include "content_mapnode.h" // For content_mapnode_init #include "tooldef.h" -#include "content_tool.h" // Default tools #include "content_mapnode.h" // Default nodes /* @@ -646,8 +645,6 @@ void the_game( // Fill node feature table with default definitions content_mapnode_init(tsrc, nodedef); - // Set default tool definitions - content_tool_init(tooldef); /* Create server. diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index 7b9a89f57..1bfe337ea 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -35,6 +35,7 @@ extern "C" { //#include "luna.h" #include "luaentity_common.h" #include "content_sao.h" // For LuaEntitySAO +#include "tooldef.h" /* TODO: @@ -141,8 +142,8 @@ v3f readFloatPos(lua_State *L, int index) static int l_register_entity(lua_State *L) { const char *name = luaL_checkstring(L, 1); - luaL_checktype(L, 2, LUA_TTABLE); infostream<<"register_entity: "<<name<<std::endl; + luaL_checktype(L, 2, LUA_TTABLE); // Get minetest.registered_entities lua_getglobal(L, "minetest"); @@ -196,9 +197,99 @@ static int l_register_globalstep(lua_State *L) return 0; /* number of results */ } +#if 0 +// Clear all registered tools +// deregister_tools() +static int l_deregister_tools(lua_State *L) +{ + infostream<<"deregister_tools"<<std::endl; + + // Get server from registry + lua_getfield(L, LUA_REGISTRYINDEX, "minetest_server"); + Server *server = (Server*)lua_touserdata(L, -1); + // And get the writable tool definition manager from the server + IWritableToolDefManager *tooldef = + server->getWritableToolDefManager(); + + tooldef->clear(); + + return 0; /* number of results */ +} +#endif + +// register_tool(name, {lots of stuff}) +static int l_register_tool(lua_State *L) +{ + const char *name = luaL_checkstring(L, 1); + infostream<<"register_tool: "<<name<<std::endl; + luaL_checktype(L, 2, LUA_TTABLE); + + // Get server from registry + lua_getfield(L, LUA_REGISTRYINDEX, "minetest_server"); + Server *server = (Server*)lua_touserdata(L, -1); + // And get the writable tool definition manager from the server + IWritableToolDefManager *tooldef = + server->getWritableToolDefManager(); + + int table = 2; + + ToolDefinition def; + + lua_getfield(L, table, "image"); + if(lua_isstring(L, -1)) + def.imagename = lua_tostring(L, -1); + lua_pop(L, 1); + + lua_getfield(L, table, "basetime"); + def.properties.basetime = lua_tonumber(L, -1); + lua_pop(L, 1); + + lua_getfield(L, table, "dt_weight"); + def.properties.dt_weight = lua_tonumber(L, -1); + lua_pop(L, 1); + + lua_getfield(L, table, "dt_crackiness"); + def.properties.dt_crackiness = lua_tonumber(L, -1); + lua_pop(L, 1); + + lua_getfield(L, table, "dt_crumbliness"); + def.properties.dt_crumbliness = lua_tonumber(L, -1); + lua_pop(L, 1); + + lua_getfield(L, table, "dt_cuttability"); + def.properties.dt_cuttability = lua_tonumber(L, -1); + lua_pop(L, 1); + + lua_getfield(L, table, "basedurability"); + def.properties.basedurability = lua_tonumber(L, -1); + lua_pop(L, 1); + + lua_getfield(L, table, "dd_weight"); + def.properties.dd_weight = lua_tonumber(L, -1); + lua_pop(L, 1); + + lua_getfield(L, table, "dd_crackiness"); + def.properties.dd_crackiness = lua_tonumber(L, -1); + lua_pop(L, 1); + + lua_getfield(L, table, "dd_crumbliness"); + def.properties.dd_crumbliness = lua_tonumber(L, -1); + lua_pop(L, 1); + + lua_getfield(L, table, "dd_cuttability"); + def.properties.dd_cuttability = lua_tonumber(L, -1); + lua_pop(L, 1); + + tooldef->registerTool(name, def); + + return 0; /* number of results */ +} + static const struct luaL_Reg minetest_f [] = { {"register_entity", l_register_entity}, {"register_globalstep", l_register_globalstep}, + //{"deregister_tools", l_deregister_tools}, + {"register_tool", l_register_tool}, {NULL, NULL} }; @@ -581,6 +672,10 @@ void scriptapi_export(lua_State *L, Server *server) assert(lua_checkstack(L, 20)); infostream<<"scriptapi_export"<<std::endl; StackUnroller stack_unroller(L); + + // Store server as light userdata in registry + lua_pushlightuserdata(L, server); + lua_setfield(L, LUA_REGISTRYINDEX, "minetest_server"); // Register global functions in table minetest lua_newtable(L); diff --git a/src/server.cpp b/src/server.cpp index ca00ed29d..ee5e301f1 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -43,7 +43,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "scriptapi.h" #include "nodedef.h" #include "tooldef.h" -#include "content_tool.h" // For content_tool_init #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")" @@ -987,9 +986,6 @@ Server::Server( infostream<<"m_nodemgr="<<m_nodemgr<<std::endl; - // Initialize default tool definitions - content_tool_init(m_toolmgr); - // Initialize default node definitions content_mapnode_init(NULL, m_nodemgr); @@ -4240,6 +4236,15 @@ ITextureSource* Server::getTextureSource() return NULL; } +IWritableToolDefManager* Server::getWritableToolDefManager() +{ + return m_toolmgr; +} +IWritableNodeDefManager* Server::getWritableNodeDefManager() +{ + return m_nodemgr; +} + v3f findSpawnPos(ServerMap &map) { //return v3f(50,50,50)*BS; diff --git a/src/server.h b/src/server.h index 4b17887e8..0354abbd9 100644 --- a/src/server.h +++ b/src/server.h @@ -490,6 +490,9 @@ public: virtual IToolDefManager* getToolDefManager(); virtual INodeDefManager* getNodeDefManager(); virtual ITextureSource* getTextureSource(); + + IWritableToolDefManager* getWritableToolDefManager(); + IWritableNodeDefManager* getWritableNodeDefManager(); private: |