MisterFunny01 4 Опубликовано: 28 декабря, 2018 Мне надо чтобы данные конфига можно было использовать в коде. player = “MisterFunny01” А этот конфиг надо считать и вставить в код допустим event.pull(“touch”, 1, 1, и тут надо вставить player из конфига Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 29 декабря, 2018 Предлагаю своё решение. local f = io.open("/etc/program.cfg", "r") local content = f:read("*a") f:close() local cfg = {} assert(load(content, "=program.cfg", "t", cfg))() print(cfg.player) Соответствующий конфиг будет выглядеть тогда так: player = "Robot" robot = "Player" age = 39 alive = false С синтаксисом Луа. Что, согласитесь, выглядит приятно. И не надо запятые ставить, как в таблице сериализованной. 5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 904 Опубликовано: 28 декабря, 2018 Чтобы не изобретать велосипедов, проще всего будет хранить конфиг в виде луа-таблицы: { player = "MisterSosister", age = 1488 } Затем загружай его в проге и используй эти данные как угодно. Вчера же писал тебе в чат аналогичный вариант: local serialization = require("serialization") local event = require("event") local file = io.open("/config.txt", "r") local config = serialization.unserialize(file:read("*a")) file:close() while true do local eventData = {event.pull("touch")} if eventData[6] == config.name then --Ник валиден end end 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asior 586 Опубликовано: 28 декабря, 2018 (изменено) Так, я хз как реализовать это все, но давайте жрать кушать слона по кусочкам. Для начала надо вытащить из файла ник игрока. Не очень люблю такие страшные конструкции 3 часа назад, MisterFunny01 сказал: player = “MisterFunny01” Больше предпочитаю построчно считать и все. Но надо так надо. Смотрим справку на функцию: string.sub (s, i [, j]) Возвращает подстроку s, которая начинается от i и продолжается до j; i и j могут быть отрицательными. Если j отсутствует, то он считается равным -1 (что то же самое, что и длина строки). В частности, вызов string.sub(s,1,j) возвратит начало строки s длиной j, а string.sub(s, -i) возвратит окончание строки s длиной i. Если, после преобразования отрицательных индексов, i становится меньше 1, он корректируется до 1. Если j больше длины строки, он корректируется до этой длины. Если, после этих исправлений, i стал больше j, функция возвратит пустую строку. string.find (s, pattern [, init [, plain]]) Разыскивает первое совпадение с шаблоном pattern в строке s. Если совпадение найдено, то find возвращает индексы строки s, где место этого совпадения началось и закончилось; в противном случае, она возвращает значение nil. Третий, необязательный аргумент init определяет место, откуда нужно начинать поиск; его значение по умолчанию равно 1 и может быть отрицательным. Значение true в качестве четвертого, дополнительного аргумента plain отключает возможности поиска совпадения с шаблоном, так что функция делает простую операцию "поиска подстроки", как если бы в pattern не было символов, считающихся магическими. Обратите внимание, что если задан аргумент plain, то аргумент init также должен быть задан. string.len (s) Принимает строку и возвращает её длину. Пустая строка "" имеет длину 0. Вложенные нули считаются, так что длина строки "a\000bc\000" равна 5. Это все что нам надо! Добавим немного магии, и получим следующий код local file = io.open('config.txt', 'r') --открыть файл конфигурации local a = file:read() --считать 1 строчку a = string.sub(a, string.find(a, '"')+1, string.len(a)-1) --порезать и выкинуть лишнее, обновить данные file:close() --закрыть конфигурацию На выходе в получаем только твой ник. Первая часть решена. Поехали дальше. 3 часа назад, MisterFunny01 сказал: допустим event.pull(“touch”, 1, 1, и тут надо вставить player из конфига Я это не понимаю но похоже это сделано для проверки ника того кто нажал на экран. Тут все в разы проще, отлавливаем данные нажатия в массив и потом проверяем их из массива с данными. b = {event.pull('touch')} if b[6] == a then print('Нажатие разрешено!') else print('Ты кто такой еще?') end Как-то так. Конечно вариант предложенный ECS мне больше по душе, но почему бы и не попробовать сделать как-то иначе? Изменено 28 декабря, 2018 пользователем Asior 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MisterFunny01 Автор вопроса 4 Опубликовано: 28 декабря, 2018 спасибо вам. Просто я закопался. Я не знаю Lua. И я не хочу юзать чужой софт. Я хочу писать все сам. спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fronun 2 Опубликовано: 29 декабря, 2018 @MisterFunny01 17 часов назад, MisterFunny01 сказал: спасибо вам. Просто я закопался. Я не знаю Lua. И я не хочу юзать чужой софт. Я хочу писать все сам. спасибо А вот бы на твоем месте бы поучил луа, а не бросаться писать свой код, как я сейчас об этом желею и планирую поучить луа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MisterFunny01 Автор вопроса 4 Опубликовано: 14 января, 2019 28.12.2018 в 19:58, ECS сказал: player = "MisterSosister" 28.12.2018 в 19:58, ECS сказал: name Словил косяк, ну да ладно, все равно спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Мне надо чтобы данные конфига можно было использовать в коде.
player = “MisterFunny01”
А этот конфиг надо считать и вставить в код
допустим event.pull(“touch”, 1, 1, и тут надо вставить player из конфига
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах