aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/scriptapi.cpp73
-rw-r--r--src/scriptapi_craft.cpp73
-rw-r--r--src/scriptapi_craft.h1
3 files changed, 74 insertions, 73 deletions
diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp
index 04af4eb22..f95f5a29d 100644
--- a/src/scriptapi.cpp
+++ b/src/scriptapi.cpp
@@ -1000,79 +1000,6 @@ static int l_notify_authentication_modified(lua_State *L)
return 0;
}
-// get_craft_recipes(result item)
-static 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;
-}
-
// rollback_get_last_node_actor(p, range, seconds) -> actor, p, seconds
static int l_rollback_get_last_node_actor(lua_State *L)
{
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;
+}
diff --git a/src/scriptapi_craft.h b/src/scriptapi_craft.h
index 2e209d4ae..f28989fd9 100644
--- a/src/scriptapi_craft.h
+++ b/src/scriptapi_craft.h
@@ -33,6 +33,7 @@ extern "C" {
/*****************************************************************************/
int l_register_craft(lua_State *L);
int l_get_craft_recipe(lua_State *L);
+int l_get_all_craft_recipes(lua_State *L);
int l_get_craft_result(lua_State *L);
/*****************************************************************************/