@ProLua

Страница 78 из 307
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 представители, которые принимают форму предмета для того чтобы находится в мире

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 не ходят)

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

Snusmumriken
19.04.2017
11:34:42
а почему они стремные??
Ну ты почитай мои посты чуть выше : )

Страница 78 из 307