#lua
Вопрос:
Я пытаюсь создать API для мода computercraft, в котором вы можете указать имя элемента, и он будет искать словарь и создавать элемент для вас. В то время как я получил его для создания предмета после того, как вы передадите ему массив. У меня возникли проблемы с возможностью загрузки рецептов из отдельного файла.
У меня есть несколько файлов, в каждом из которых есть куча двумерных таблиц, которые я хочу импортировать в другую программу, по одной таблице на строку. так что в основном
файл1
itemA = {{"a","b","c"},{"d","e","f"},{"g","h","i"}}
itemB = {{"j","k","l"},{"m","n","o"},{"p","q","r"}}
файл2
itemA = {{"a","b","c"},{"d","e","f"},{"g","h","i"}}
itemC = {{"j","k","l"},{"m","n","o"},{"p","q","r"}}
Чего я хочу, так это чтобы, когда я прочитаю это по строкам, вы получили структуру таблицы, которая в основном
recipies = {itemA = {{"a","b","c"},{"d","e","f"},{"g","h","i"}}, itemB = {{"j","k","l"},{"m","n","o"},{"p","q","r"}}}
Также необходимо проверить идентичный рецепт на случай, если несколько словарей содержат один и тот же рецепт для одного и того же товара
У меня нет большого опыта работы со строками на любом языке, но я не знаю, как удаленно обойти это в Lua.
Комментарии:
1. Кажется, я что-то упустил. В вашем ожидаемом результате, куда вы
itemC
пошли? Вы просто хотите объединить несколько словарей файлов в один большой, без дубликатов? Можете ли вы изменить формат своих файлов, например, вместо глобальногоitemA
размещения их в таблице, а затем возврата всей таблицы?2. в основном itemA будет названием определенного предмета, который я хочу создать, например, minecraft:torch или minecraft:crafting_table. Я хочу обнаружить дублирование, потому что каждый файл будет представлять другой мод. итак, ваниль-это базовая игра, computetercraft-это рецепты, добавленные через мод computercraft. ect
3. Вы пытаетесь загрузить его на черепаху? Файл уже в черепахе, и вы просто хотите взять рецепт из файла? как пример
turtleCraft(recipes.BoneMeal)
?4. Ну, я хочу иметь метод, который захватывает весь словарь, но да. Вот к чему я стремлюсь
Ответ №1:
Так что это должно быть довольно хорошим решением. Просто вы просто хотите открыть файл txt и отменить его сериализацию. Это превращает его из строки обратно в таблицу, которую затем можно проиндексировать
При fs.open()
этом вы открываете файл с определенной целью. Это "r"
говорит о том, что это открыто только для чтения. Вот некоторые из других вариантов, которые можно использовать в зависимости от того, что вы хотите сделать
-- Open the text file which currently has all of the recipes in a table
local recipes = textutils.unserialize(fs.open("recipes.txt", "r"))
-- We use textutils.unserialize() to change the text from a string to a table
local running = true
-- Setup an infinite loop
while running do
io.write("Enter a recipe name to craft or type 'EXIT' to exitn")
-- Getting the user input
choice = io.read()
-- If the user types 'EXIT' then stop the program
if choice == "EXIT" then
break
end
-- Craft the recipe
turtleCraft(recipe.ItemA)
end
Некоторые другие, похоже, говорят о безопасности, но если это используется для компьютерных игр, то на самом деле это вообще не проблема. Используете ли вы хитрую черепаху и команду ремесла или как вы добиваетесь мастерства с помощью стола?
Я также должен добавить, что таблицы будут настроены следующим образом
{
itemA = {
{"a","b","c"},
{"d","e","f"},
{"g","h","i"}
},
itemB = {
{"j","k","l"},
{"m","n","o"},
{"p","q","r"}
}
}
Конечно, формат не имеет особого значения, но ключевого recipes
слова там не было бы.
https://computercraft.info/wiki/Fs.list
Эта ссылка также может оказаться полезной, она демонстрирует способ просмотра каждого файла в каталоге. Однако в настоящее время у меня нет способа проверить это.
В последнее время я много возился с компьютерным ремеслом. Не забудьте пометить свои вопросы и вопросы о будущем ComputerCraft
тегом, чтобы их было легче увидеть людям, желающим напрямую ответить на вопросы lua на основе компьютерных технологий