diff options
author | sapier <Sapier at GMX dot net> | 2013-03-07 23:22:54 +0000 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2013-03-11 19:27:13 -0400 |
commit | eb90c3d92dac8a04019ccca875a9162739ddd7f1 (patch) | |
tree | a711e2ce9988c4b4560cb849838c8c502b6d38dc /src/scriptapi_craft.cpp | |
parent | 6a1670dbc31cc0e44178bbd9ad34ff0d5981a060 (diff) | |
download | minetest-eb90c3d92dac8a04019ccca875a9162739ddd7f1.tar.gz minetest-eb90c3d92dac8a04019ccca875a9162739ddd7f1.tar.bz2 minetest-eb90c3d92dac8a04019ccca875a9162739ddd7f1.zip |
Move l_get_all_craft_recipes to scriptapi_craft
Diffstat (limited to 'src/scriptapi_craft.cpp')
-rw-r--r-- | src/scriptapi_craft.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/scriptapi_craft.cpp b/src/scriptapi_craft.cpp index 617bb86a3..183eeb840 100644 --- a/src/scriptapi_craft.cpp +++ b/src/scriptapi_craft.cpp @@ -379,3 +379,76 @@ int l_get_craft_recipe(lua_State *L) } return 1; } + +// get_all_craft_recipes(result item) +int l_get_all_craft_recipes(lua_State *L) +{ + char tmp[20]; + int input_i = 1; + std::string o_item = luaL_checkstring(L,input_i); + IGameDef *gdef = get_server(L); + ICraftDefManager *cdef = gdef->cdef(); + CraftInput input; + CraftOutput output(o_item,0); + std::vector<CraftDefinition*> recipes_list = cdef->getCraftRecipes(output, gdef); + if (recipes_list.empty()) + { + lua_pushnil(L); + return 1; + } + // Get the table insert function + lua_getglobal(L, "table"); + lua_getfield(L, -1, "insert"); + int table_insert = lua_gettop(L); + lua_newtable(L); + int table = lua_gettop(L); + for(std::vector<CraftDefinition*>::const_iterator + i = recipes_list.begin(); + i != recipes_list.end(); i++) + { + CraftOutput tmpout; + tmpout.item = ""; + tmpout.time = 0; + CraftDefinition *def = *i; + tmpout = def->getOutput(input, gdef); + if(tmpout.item.substr(0,output.item.length()) == output.item) + { + input = def->getInput(output, gdef); + lua_pushvalue(L, table_insert); + lua_pushvalue(L, table); + lua_newtable(L); + int k = 0; + lua_newtable(L); + for(std::vector<ItemStack>::const_iterator + i = input.items.begin(); + i != input.items.end(); i++, k++) + { + if (i->empty()) continue; + sprintf(tmp,"%d",k); + lua_pushstring(L,tmp); + lua_pushstring(L,i->name.c_str()); + lua_settable(L, -3); + } + lua_setfield(L, -2, "items"); + setintfield(L, -1, "width", input.width); + switch (input.method) + { + case CRAFT_METHOD_NORMAL: + lua_pushstring(L,"normal"); + break; + case CRAFT_METHOD_COOKING: + lua_pushstring(L,"cooking"); + break; + case CRAFT_METHOD_FUEL: + lua_pushstring(L,"fuel"); + break; + default: + lua_pushstring(L,"unknown"); + } + lua_setfield(L, -2, "type"); + if(lua_pcall(L, 2, 0, 0)) + script_error(L, "error: %s", lua_tostring(L, -1)); + } + } + return 1; +} |