
grinchfox
15.04.2017
20:37:48
ну, просто у меня уже есть поле с классом, которое кладется при сериализации, а так получится что мне придется придумать надкласс

Snusmumriken
15.04.2017
20:40:30
Ну, я сериализую для передачи по сети по типам:
Список снарядов:
{
'123123' = {type = 'laser', pos = {10, 20}, vec = {.32, -.64}, len = 3},
'456456' = {type = 'bullet', pos = {10, 20}, vec = {.22, 32}, spd = 6}
}
На обратной стороне, фабрика вызывает создание снаряда заданного типа (класс), и указывает статы, если не существует.

grinchfox
15.04.2017
20:40:58
да, у меня то же самое
у меня есть своя объектная библиотека с наследованием

Google

grinchfox
15.04.2017
20:41:38
при сериализации я отправляю таблицу объекта и имя класса
при десериализации я создаю класс по имени и заполняю свойствами

Snusmumriken
15.04.2017
20:42:44
Ну, сам объект может иметь больше полей, например методы (destroy, clone, collidewith).
Просто дописываешь ему метод tostring и fromstring.

grinchfox
15.04.2017
20:42:56
методы в __index

Snusmumriken
15.04.2017
20:43:10
А, да, такое норм.
Можно ещё сам класс пересылать, кстати.

grinchfox
15.04.2017
20:43:25
стандартные свойства тоже в __index
в таблице экземпляра только свойства экземпляра
мне кажется в таком случае всетаки проще наследованием

Snusmumriken
15.04.2017
20:44:49
Главное - не делать сложных классов, с переписанными методами.
А в типе той же еды - просто дописываешь в __index - табличку соответствующего типа еды, а в __index "класса" типа еды - класс еды. На деле проще чем кажется.
Главное - организовать классы типов еды максимально гибко, шоб если нет каких-то методов а только статы - было всё равно заебок.

grinchfox
15.04.2017
20:47:17
у предметов есть еще entity представители, которые принимают форму предмета для того чтобы находится в мире

The Dude
15.04.2017
22:13:57

Google

grinchfox
15.04.2017
22:14:16
жаль что это так

The Dude
15.04.2017
22:14:53
Правдиво и смешно.
Это действительно смешно и уникально, что такой проект держался на одном гении, образно говоря.

grinchfox
15.04.2017
22:29:06
мне скорее обидно за то, что патронов нет
по крайней мере я так понял патроны это библиотеки

Рома
16.04.2017
15:57:33
Mike Paul все ещё коммитит в luaJit, есть ещё патроны

Snusmumriken
16.04.2017
16:19:27
Будут, но не очень много.

Vlad
16.04.2017
18:37:46
как получить побитное представление файла или вообще информации?
или есть где описания таких процессов, с перегонкой туда\обратно информации

Snusmumriken
16.04.2017
18:53:45
file = io.open('/path/to/file.ext', 'rb')
binary_data = file:read'*all'
Ну, типа вот.
Запись аналогична:
file = io.open('/path/to/file.ext', 'wb')
file:write(binary_data)
io.open абсолютно идентичен соответствующим сишным командам.
Если хочешь перевести в биты:
function toBits(char)
char = char:byte()
local t={} -- will contain the bits
while char > 0 do
local rest = char % 2
t[#t+1]=rest
char = (char - rest) / 2
end
-- octet normalisation
for i = 1, 8 - #t % 8 do table.insert(t, 0) end
return table.concat(t)
end
bit_data = binary_data:gsub('.', toBits)
Как-то так.
На выходе получится куча нулей и единиц.
Хе.
> print(toBits'q')
01000111
> print(toBits'3')
00110011
> print(toBits'Я')
1111100100000000
Не совсем правильно, надо подумать на этот счёт.

Vlad
16.04.2017
20:22:49
кстати когда мы передаем от джейсона данные они по сути являются чем? таблицей?

Рома
16.04.2017
21:11:08
строкой, инфа 100%

Vlad
16.04.2017
21:12:14
и как вобще воспринимать что то такое
local OrWisheGor = ...
если написал грубо говоря
посреди поля
ну в плане что просто где то, это не как результат и тд тп, просто такое выражение
, что будет идти в переменную, и будет ли?
типа вот если так, что будет в переменных, есть ли вообще в таких случаях зависимость от расположения и все в таком духе
local OrWisheGor = ...
function bogofunkcija1()
-- content
end
function bogofunkcija2()
-- content
end
--more functions
--more function
--more function
local indeec = ...

Рома
16.04.2017
21:18:20
три точечки интересуют? так это просто аргументы функции, как arguments в js
интересно, а как получается текст черненький в перемешку с голубеньким? в телеграме есть выбор цветов?
OrWisheGor и indeec это первый переданный аргумент, получается

Vlad
16.04.2017
21:19:49
где то просто видел что вне функций таким макаром можна получать какие то базовые аргументы типа путей или чего то такого

Рома
16.04.2017
21:22:53
вот лежит файлик с контентом "arg = ..."
мы его открываем обычным io.open, io.read, получаем строку source_code с содержимым
а потом его эвалюэйтим!
fn = loadstring source_code
потом часто надо окружение этой функции задать: setfenv fn, {a: 1, b: 'типа глобальные переменные'}
и чтобы вызвать, мы fn(123)
и arg из самого начала становится 123
понятненько?
ради интереса заглянул в исполняемый lua скрипт, там нет таких троеточий, а аргументы принимаются в глобальную переменную arg

Vlad
16.04.2017
21:42:34
кстати насчет тех путей что мне скидывали ранее, даже там у меня косяки, и толком ничего не работает

Google

Vlad
16.04.2017
21:44:32
потому как там в путях идет не сам пакет а именно среда

Рома
16.04.2017
21:46:21
может подскажу что?

Vlad
16.04.2017
21:50:09
там типа так
local p = arg[0]:match'(.*[\\/])'..'?.lua;' -- выуживаем из arg[0] - путь к запускаемому файлу
package.path = p..package.path -- добавляем в пути
а в целом все равно беда бедная

Рома
16.04.2017
21:55:22
путь явно неверно берется
он там относительный! во как
если я из этой папки его запущу, то там путь будет никакой, лучше юзать для пути lfs или ещё как-то
динамически менять package.path - признак быдлокодинга, разве нет?

Vlad
16.04.2017
21:58:18
ну там у меня суть в том что бы не прописывать при рекваирах полные пути, а как то обрезать по максимуму но что б при этом оно работало
мне не особо улыбается писать трактаты типа
C:\\bla\\blabla\\blablalba\\file.lua
при том что если такое куда то переедет то нужно самому внутри переписывать все пути под то место куда все переехало

Рома
16.04.2017
21:58:43
у меня такой луа патх в bashrc:
export LUA_PATH="./?.lua;$HOME/.lua/lib/?.lua"
вот эта ./?.lua часть как раз грузит файлы относительно текущей папки
тогда возможно lfs.currentdir() поможет
да нет, точно, надо дописать в package.path относительный путь! только тут другая беда - на винде черточки неправильно повернуты, так что надо дописывать путь в зависимости от системы

Alexander
16.04.2017
22:02:50
"неправильно повернуты" ?

Vlad
16.04.2017
22:06:25
да че черточки шморточки там бы еще ладно но там вещь в том что все равно ищет файлы в корневой папке среды, а не проекта, тобишь по сути там ничего не меняется

Рома
16.04.2017
22:16:15
корневая папка среды это что такое?

Vlad
16.04.2017
22:16:37
типа откуда пускается луа консоль

Рома
16.04.2017
22:17:10
а надо какой путь?
странная проблема
если у тебя либы лежат в корневая_папка_проекта/a/b/c/d, сделай переменную, если лень писать
prefix = "a/b/c/d/"
и потом require prefix .. 'script'
при том, что в package.path есть '.\'
или свой реквай сделать:
r = require
require = (path) -> — прости, я только мунскрипт умею
r 'a/b/c/d/' .. path
в package.path есть '.\?.lua' такое

Vlad
16.04.2017
22:21:34
я хочу катать отдельно вне зависимости от расположения консоли, что б код и среда
были там где им удобно, но при этом что б не было проблем с запуском

Google

Рома
16.04.2017
22:22:16
require = (path) ->
f = io.open path .. '.lua', 'r'
loadstring(f\read '*a')()
ща

Vlad
16.04.2017
22:23:59
просто когда я воткнул ее в папку с проектом то проблем как таковых перестало быть. но там тоже такая штука что среда должна располагаться чуть ли не с самого верху что б просто при необходимости забуриватся в папки и подпапки, но там даже в таком случае вылазят проблемы с путями

Рома
16.04.2017
22:28:14
ладно, вот у меня все луа либы хранятся в ~/.lua/lib, у других людей в других местах, на виндовсе тем более
храни все твои зависимотсти там, где lua ожидает их найти, и никаких проблем не должно быть, верно?
а вот такие проблемы это явно нарушение задумки тех, кто придумывал все эти пути и загрузки скриптов

Vlad
16.04.2017
22:30:13
оки, я просто воткнул и там большая часть проблем отпала но просто интересно с такой стороны посмотреть, но видимо слишком геморно делать реализацию проектов и среды отдельно, при этом что б пути в файлах прокта адаптировались к изменениям расположения

Admin
ERROR: S client not available

Vlad
16.04.2017
22:30:44
в такой вот структуре вылазят проблемы с запросом либ из папки

Group Butler [beta]
17.04.2017
12:39:00
Добро пожаловать в чат pro.lua, Sarvar! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Snusmumriken
17.04.2017
14:22:54

Vlad
17.04.2017
18:16:39
тут это
кто как реализовывал свои простые преобразователи чисел из системы в систему?

Roman
17.04.2017
18:18:06
на олимпиаде в 10 классе на ФО ДОС Вильнюс 1986 BASIC

Snusmumriken
17.04.2017
18:18:33
Ну, в целом, это довольно просто.

Vlad
17.04.2017
18:19:11
у меня тут пока вылезло что то такое
local function ost8( num )
local base = 8 -- base of number
local divident = num -- number what we divide
local remainder = 0 -- remainder from the divident
local result = {} -- results table
local count = 1 -- counter for number of numbers
while(true) do
if(divident < base) then
result[count] = divident;
break;
end
remainder = divident % base
divident = divident / base
divident = divident - (divident % 1)
result[count] = remainder
count = count + 1
end
local End = ""
for i = #result, 1, -1 do
End = End .. math.floor(result[i])
end
print( End )
end

Snusmumriken
17.04.2017
18:19:29
Сложно. Пиши универсальный преобразователь.
Хотя да, похоже на истину, просто меняешь базу.
И можешь прогонять по словарю:
end = end .. map[result[i]], где map - [0, 1, 2, 3, ... 9, 'A', 'B', 'C', .. , 'Z'].

Vlad
17.04.2017
18:20:23
там только в 16 я докидывал пачку ифов на вставку букав

Snusmumriken
17.04.2017
18:21:13
Зачем if когда можно словарь?

Vlad
17.04.2017
18:21:25
никогда не слышал

Snusmumriken
17.04.2017
18:21:44
Загоняем в него 32, получаем L.
Это map в моём примере.
> [0, 1, 2, 3, ... 9, 'A', 'B', 'C', .. , 'Z']

Vlad
17.04.2017
18:27:05
а можно подробнее чепочем там с этим словарем?
а то нипанятна, я так как страдаю то прогоняю ифами результат если найдено соответствие то вставляю в таблицу результатов соответствующее значение

Google


Snusmumriken
17.04.2017
18:36:28
function dec2any(num, base)
local char, insert, floor = string.char, table.insert, math.floor
local map = {}
-- Динамическое заполнение, ну да пофиг
for i = 0, 9 do insert(map, i) end
for i = ('A'):byte(), ('Z'):byte() do insert(map, char(i)) end
local out = {}
while num > 0 do
num, d = floor(num / base), num % base + 1
insert(out, 1, map[d])
end
return table.concat(out)
end
function any2dec(num, base)
num = tostring(num):gsub('^0+', '')
-- опять динамическое заполнение, сколько можно?
local map = {}
for i = 0, 9 do map[tostring(i)] = i end
for i = ('A'):byte(), ('Z'):byte() do map[string.char(i)] = i - 55 end
local out = 0
local i = #num
for n in num:gmatch'.' do
i = i - 1
out = out + map[n:upper()] * base ^ i
end
return out
end
Эта фигня переводит десятичку во что угодно и что угодно в десятичку, до 36-системы (потому что словарь на 36 символов). Расширим кол-во символов - получим произвольную систему счисления.
А, правда эта фигня нормально работает с реальными числами. Но с целыми положительными работает только так.
Хех, алё, кому универсальный конвертер между системами счисления? :3
Меняя map, кстати, можно менять символы для представления чисел. Ну, то есть можно кодировать число в`╥╧╦┴╤ ▄╠┼╦╘╥╔╞╔╦┴├╔╤ └╓╬┘╚ ╟╒┬┼╥╬╔╩`, где каждый символ - число. Правда, было бы неплохо ещё кодировать-раскодировать бинарку. Но бинарная фигня у меня тоже есть (перевод десятички в бинарное представление и обратно, с заполнением хвоста нулями, шоб можно было фиксировать количество байт под число, мутил для своих протоколов)


Group Butler [beta]
18.04.2017
13:08:59
Добро пожаловать в чат pro.lua, Galina! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.
Добро пожаловать в чат pro.lua, Ruslan! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Galina
19.04.2017
11:30:52
Можно ли размещать вакансии?

Snusmumriken
19.04.2017
11:31:08
Ох, в идеале - использовать для этого HeadHunter.

Galina
19.04.2017
11:31:23
Там уже все есть)

Snusmumriken
19.04.2017
11:31:28
Потому что тут всё таки обсуждение всяких стрёмных программистских штук.

Disinterpreter
19.04.2017
11:31:33
А вы предложите работу на Lua? :D

Galina
19.04.2017
11:31:46
Верно)
Вот боюсь постить, потому что понимаю, что обсуждаются программистские штуки, но Lua на hh не ходят)

Ruslan
19.04.2017
11:33:13

Galina
19.04.2017
11:33:53
Наверное, для hr. Но мне нужны хорошие ребята ???

Snusmumriken
19.04.2017
11:34:42