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'ы, а тащить всю портянку ифов в майн файл, кажется слишком
Egor
У меня считай что рейд в вове
в танка респекнись =) и стой на одном месте ) редко водя в нужные места
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
Egor
https://github.com/kikito/middleclass#quick-look
я конечно не уверен что смогу заюзать весь лимит в 10кб. кода, но хотелось бы поменьше тащить фреймворка
Snusmumriken
Пиши бота для wow
Ну тут не совсем вов а path of exile, но суть примерно то же, ботов уже писал, правда торговых.
fgntfg
Poe ближе к Diablo же, не?
Snusmumriken
Ну да, но тут схожая система "рейдов". Только возможностей для паузы чуть-чуть больше.
Egor
10кб кода? Что-то скромно.
может после релиза игры увеличат лимит )
Ilya
Без https://mothereff.in/lua-minifier не обойтись ))
Ilya
Хм, или сразу компилить в luac...
Ilya
Там бинарники можно загружать? )
Egor
неа
Egor
пишешь в консольку в игре. и оно запускает код на твоей же машине)
Egor
можно локально делать реквайр, но твоим строением тогда не смогут воспользоваться другие игроки
Snusmumriken
Хм, или сразу компилить в luac...
Потеряешь совместимость со всеми виртуальными машинами кроме той, которой комплил. Луа 5.1.4 байткодно отличается от 5.1.5.
Egor
local calls = {} calls.blah = function() bla-bla end calls.blablah = function() bla-bla end if calls[action] then calls[action](...) end
а расширять, как понимаю, просто добавить еще один нужный иф?
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
Мы переопределяем, но оно таки глобально переопределяется, назад вернуть проблематично.
это нормально, так как для каждого транспорта свой код пишется, и потом собирается в один файл и перегоняется в JSON
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 - если да, то как его заставить читать автоматически все реквайры? или он так не умеет?
Egor
Can collect require'd Lua (and C) modules automatically. - хотя тут так сказано, что он может автоматом собирать
Egor
но не то что нужно -_- он пытается выполнить скрипт и не может, так как нет нужных модулей, так как вшиты в игру. -_-
Egor
А сколько идёт рейд в PoE ?;)
Egor
Долго :-)
Да я понял ;)
Pavel
Пролейте каплю света на сыромяжный крестьянский вопрос - сколько можно заработать на луа в приличной компании
Эм... Кажется что pure lua 40-80 в зависимости от города. Просто pure lua мало кому нужны. Хочешь больше - учи си, sql, nosql, сетевой стек, учись делить в kubernetes, автоматизируй через всякие puppet и иже с ним, допиливай соседнюю админку на пыхе, осваивай dwh с clickstream итд итп.... Но в этот момент тебе будет в среднем все равно на чем писать. Ты будешь подбирать инструменты под задачи, учитывая конкретную экспертизу команды, наличие готовых библиотек
Pavel
Впрочем уверен ты это и сам знаешь
Serezha
Впрочем уверен ты это и сам знаешь
Это очевидно. Но вот для Мейла например Луа и Тарантул составляю большой кусок технологий, важный. А вилка такая же, как и для питонщиков, пыхеров в сотнях компаний по Москве. Вот что я хотел знать
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
Другие люди менее чувствительные и воспринимают адекватно факт того, что мир не вертится вокруг них.
Serezha
ты гуманитарий чтоле?
Serezha
от зеро бейсед массивов перескочил ловко на какие то звездные материи
Lucky
А ты дурачок и не можешь написать зеро-базед итератор?
Lucky
Не можешь - посмотри в PiL
Snusmumriken
Если очень хочется, можно без особых проблем запилить [класс массивов стартующий с нуля], включая #, методы типа insert/len и всё прочее.
Snusmumriken
Я сам очень редко использую массивы. Я использую хеши или _списки_, где плевать с чего стартуем, с нуля или с единицы или с -1000. Есть условно "первый", "последний" и "следующий" с "предыдущим" элементы. Массивы объективно в бытовом кодинге практически никогда не нужны.
Lucky
Я юзаю массивы, и у меня они ведут себя смирно. Не выделываются.
Snusmumriken
А ещё, можно сделать вот такую чудовищно страшную вещь: for i = 0, #arr - 1 do local v = arr[i + 1] end Не настолько красиво как с классами массивов, зато просто.
Lucky
Я пихал в ячейки с индексом от 0 и ниже всякие неизменные данные - очень удобно.