Перейти к содержимому
  • 0
MisterFunny01

Как получить данные конфига?

Вопрос

Мне надо чтобы данные конфига можно было использовать в коде. 

player = “MisterFunny01”

А этот конфиг надо считать и вставить в код

допустим event.pull(“touch”, 1, 1, и тут надо вставить player из конфига

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Предлагаю своё решение.

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

С синтаксисом Луа. Что, согласитесь, выглядит приятно. И не надо запятые ставить, как в таблице сериализованной.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чтобы не изобретать велосипедов, проще всего будет хранить конфиг в виде луа-таблицы:

 

{
  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 часа назад, 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 мне больше по душе, но почему бы и не попробовать сделать как-то иначе?

Изменено пользователем Asior

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо вам. Просто я закопался. Я не знаю Lua. И я не хочу юзать чужой софт. Я хочу писать все сам. спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@MisterFunny01

17 часов назад, MisterFunny01 сказал:

спасибо вам. Просто я закопался. Я не знаю Lua. И я не хочу юзать чужой софт. Я хочу писать все сам. спасибо

А вот бы на твоем месте бы поучил луа, а не бросаться писать свой код, как я сейчас об этом желею и планирую поучить луа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
28.12.2018 в 19:58, ECS сказал:

player = "MisterSosister"

 

28.12.2018 в 19:58, ECS сказал:

name

Словил косяк, ну да ладно, все равно спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...