Ilya
(и, возможно, выбрать для себя один из фреймворков, который и использовать в дальнейшем - чтобы не забивать каждый раз себе голову низкоуровневыми вещами - мне нравится middleclass)
Egor
@Snusmumriken можешь подсказать такую вешь, я чет смотрю на код и ...не могу понять как написать
function onActionLoop (action)
if action == "speedup" then
act1()
elseif action == "speeddown" then
act2()
end
end
Кусочек кода, функция принимает аргумент и внутри куча ифов, и происходит какое-то действие (не столь важно), как правильно написать так, чтобы эта функция была как либа, типа дефолт функция, НО чтобы как-то можно было от него "наследоваться", точнее расширять эти ифы?
Хотя можно просто вызвать в нужном месте эту функцию и рядом написать
onActionLoop(action)
if action == 'blah' then
blah1()
end
Snusmumriken
Шложна, чуть позднее
Snusmumriken
У меня считай что рейд в вове
Egor
Если что это бинды на кнопки, на управление транспортом. Но в идеале хотелось бы иметь возможность овверайдить эти if'ы, а тащить всю портянку ифов в майн файл, кажется слишком
Snusmumriken
local calls = {}
calls.blah = function() bla-bla end
calls.blablah = function() bla-bla end
if calls[action] then
calls[action](...)
end
Snusmumriken
Бабл накинул и айда строчить код
Ilya
https://github.com/kikito/middleclass#quick-look
fgntfg
Пиши бота для wow
Snusmumriken
Пиши бота для wow
Ну тут не совсем вов а path of exile, но суть примерно то же, ботов уже писал, правда торговых.
fgntfg
Poe ближе к Diablo же, не?
Snusmumriken
Ну да, но тут схожая система "рейдов". Только возможностей для паузы чуть-чуть больше.
Ilya
Ilya
Без https://mothereff.in/lua-minifier не обойтись ))
Ilya
Хм, или сразу компилить в luac...
Ilya
Там бинарники можно загружать? )
Egor
неа
Egor
пишешь в консольку в игре. и оно запускает код на твоей же машине)
Egor
можно локально делать реквайр, но твоим строением тогда не смогут воспользоваться другие игроки
Snusmumriken
Хм, или сразу компилить в luac...
Потеряешь совместимость со всеми виртуальными машинами кроме той, которой комплил. Луа 5.1.4 байткодно отличается от 5.1.5.
Egor
Egor
Snusmumriken
Добавить ещё одну функцию в calls
Snusmumriken
Оверрайдить уже сложнее.
Snusmumriken
Иф тут один, и чисто для проверки, есть ли такой action в принципе.
Egor
Оверрайдить уже сложнее.
calls.blah = function() print('not blah') end
if calls[action] then
calls[action]()
end
так вроде работает )
Snusmumriken
Мы переопределяем, но оно таки глобально переопределяется, назад вернуть проблематично.
Snusmumriken
Можно извратиться и для этого модуля написать отдельный коллбекер:
local this_calls = {}
this_calls.blah = blabla
-- при одинаковых именах, this_calls имеет
-- больший приоритет ибо упомянут первым
local f = this_calls[action] or calls[action]
if f then f(...) end
Snusmumriken
А ещё можно вот так:
local this_calls = setmetatable({}, {__index = calls})
this_calls.blah = blabla
if this_calls[action] then ...
Тогда недостающие ключи будут найдены в calls. И можно с чистым сердцем добавлять ключи.
Egor
А как можно извратиться, чтобы дополнить функцию? Если вообще такое возможно
Snusmumriken
function this_calls.blah(...)
calls.blah(...)
bla-bla
end
Snusmumriken
Это тупые-и-рабочие способы, но можно сделать на ооп.
Egor
Секунду, я кажется опять не так спросил, скину лучше мини код.
Snusmumriken
Технически, ты можешь изменить, например, глобальный print вот так вот:
local oldprint = print
local i = 0
print = function(...)
i = i + 1
oldprint(i, ...)
end
Тогда любой print будет печатать ещё и номер принта.
Snusmumriken
Любые функции можно так же переопределять. Но это извращения и не рекоммендуется.
Egor
--выполняется 30 раз в секунду
function onFlush()
local forward = Nav:compose... -- Дальше код для дефолтного поведения
end
И почти всегда, надо дополнить функцию onFlush используя внутренние локальные переменные.
Я бы на питоне сделал бы эти локальные переменные как атрибуты класса и юзал бы его как в варианте
```
function this_calls.blah(...)
calls.blah(...)
bla-bla
end
```
Snusmumriken
Рейд закончу и подумаю
Egor
Работал кто с lua-amalg - если да, то как его заставить читать автоматически все реквайры? или он так не умеет?
🐅🤦♂️
@Snusmumriken можешь подсказать такую вешь, я чет смотрю на код и ...не могу понять как написать
function onActionLoop (action)
if action == "speedup" then
act1()
elseif action == "speeddown" then
act2()
end
end
Кусочек кода, функция принимает аргумент и внутри куча ифов, и происходит какое-то действие (не столь важно), как правильно написать так, чтобы эта функция была как либа, типа дефолт функция, НО чтобы как-то можно было от него "наследоваться", точнее расширять эти ифы?
Хотя можно просто вызвать в нужном месте эту функцию и рядом написать
onActionLoop(action)
if action == 'blah' then
blah1()
end
Сделай ассоциативную таблицу типа
local actionMap = {
"speedup" = onSpeedup,
"speeddown" = function() end,
}
function onActionLoop(action)
actionMap[action]()
end
Egor
Can collect require'd Lua (and C) modules automatically. - хотя тут так сказано, что он может автоматом собирать
Egor
Egor
но не то что нужно -_- он пытается выполнить скрипт и не может, так как нет нужных модулей, так как вшиты в игру. -_-
Igor
Egor
А сколько идёт рейд в PoE ?;)
Highly Likely
Egor
Pavel
Пролейте каплю света на сыромяжный крестьянский вопрос - сколько можно заработать на луа в приличной компании
Эм... Кажется что pure lua 40-80 в зависимости от города.
Просто pure lua мало кому нужны.
Хочешь больше - учи си, sql, nosql, сетевой стек, учись делить в kubernetes, автоматизируй через всякие puppet и иже с ним, допиливай соседнюю админку на пыхе, осваивай dwh с clickstream итд итп....
Но в этот момент тебе будет в среднем все равно на чем писать. Ты будешь подбирать инструменты под задачи, учитывая конкретную экспертизу команды, наличие готовых библиотек
Pavel
Впрочем уверен ты это и сам знаешь
Serezha
Впрочем уверен ты это и сам знаешь
Это очевидно. Но вот для Мейла например Луа и Тарантул составляю большой кусок технологий, важный. А вилка такая же, как и для питонщиков, пыхеров в сотнях компаний по Москве. Вот что я хотел знать
Pavel
Pavel
Потому пыхарь от луашника мало отличается зп. Ибо в среднем они делают одинаковое со схожим стеком. Но на разных проектах.
Pavel
Любой хороший кодер быстро освоит луа. Особенно если в компании есть по ней экспертиза.
Вообще самое сложное сейчас - это тулинг. Имхо
Mark ☢️
самое сложное в луа - это привыкнуть что массивы с единицы
Mark ☢️
нет не так.
Mark ☢️
самое сложное — понять зачем они это сделали
Egor
я потратил когда первый раз заюзал массив, когда пытался получить данные, то долго мучался, почему nil ...
Lucky
Lucky
и задать, например, руками же mytable[0] = mystuff
Lucky
или mytable[-10] = my_other_stuff
Serezha
мешает отсутствие стокгольмского синдрома
Serezha
если ты пишешь на 10 языках и везде у тебя массивы с нуля то ломать себя ради одного - стремно
Lucky
Попустись болезлый
Serezha
Не хамите
Lucky
Это фича Lua
Lucky
Lucky
Другие люди менее чувствительные и воспринимают адекватно факт того, что мир не вертится вокруг них.
Serezha
ты гуманитарий чтоле?
Serezha
от зеро бейсед массивов перескочил ловко на какие то звездные материи
Lucky
А ты дурачок и не можешь написать зеро-базед итератор?
Lucky
Не можешь - посмотри в PiL
Snusmumriken
Если очень хочется, можно без особых проблем запилить [класс массивов стартующий с нуля], включая #, методы типа insert/len и всё прочее.
Snusmumriken
Я сам очень редко использую массивы. Я использую хеши или _списки_, где плевать с чего стартуем, с нуля или с единицы или с -1000. Есть условно "первый", "последний" и "следующий" с "предыдущим" элементы. Массивы объективно в бытовом кодинге практически никогда не нужны.
Lucky
Lucky
Я юзаю массивы, и у меня они ведут себя смирно. Не выделываются.
Snusmumriken
А ещё, можно сделать вот такую чудовищно страшную вещь:
for i = 0, #arr - 1 do
local v = arr[i + 1]
end
Не настолько красиво как с классами массивов, зато просто.
Lucky
Я пихал в ячейки с индексом от 0 и ниже всякие неизменные данные - очень удобно.