forked from Mirrorlandia_minetest/minetest
Move l_get_all_craft_recipes to scriptapi_craft
This commit is contained in:
parent
6a1670dbc3
commit
eb90c3d92d
@ -1000,79 +1000,6 @@ static int l_notify_authentication_modified(lua_State *L)
|
|||||||
return 0;
|
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
|
// rollback_get_last_node_actor(p, range, seconds) -> actor, p, seconds
|
||||||
static int l_rollback_get_last_node_actor(lua_State *L)
|
static int l_rollback_get_last_node_actor(lua_State *L)
|
||||||
{
|
{
|
||||||
|
@ -379,3 +379,76 @@ int l_get_craft_recipe(lua_State *L)
|
|||||||
}
|
}
|
||||||
return 1;
|
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;
|
||||||
|
}
|
||||||
|
@ -33,6 +33,7 @@ extern "C" {
|
|||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
int l_register_craft(lua_State *L);
|
int l_register_craft(lua_State *L);
|
||||||
int l_get_craft_recipe(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);
|
int l_get_craft_result(lua_State *L);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
Loading…
Reference in New Issue
Block a user