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; | ||||
| } | ||||
| 
 | ||||
| // 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) | ||||
| { | ||||
|  | ||||
| @ -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; | ||||
| } | ||||
|  | ||||
| @ -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); | ||||
| 
 | ||||
| /*****************************************************************************/ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user