Snusmumriken
Как мне дергать определенную строчку кода в луа?
lua_getglobal("myfuncname"); lua_pushstring(L, "myarg1"); lua_pushstring(L, "myarg2"); lua_call(L, 2, 0);
Snusmumriken
Вызывай функции.
Nikita
Вызывай функции.
Мне не такое требуется
Snusmumriken
"Вызов конкретной строчки" ты не можешь сделать.
Snusmumriken
Мне примерно такое нужно и тут вроде как без всяких массивов
А вот это делается довольно интересными способами.
Nikita
Прочитай мое первое сообщение
Nikita
Мне надо что бы текст отображался когда нажали на левую кнопку мыши
Snusmumriken
Ну что тебе можно посоветовать. Сделать архитектуру приложения с циклом обработки событий, влепить в эти события: 1. Всякие нажатия на кнопки, движения мыши 2. Таймеры И вешать обработчики на события, влияющие на сцену, допустим загоняешь в очередь событий набор фраз чтобы что-то сказать, и оно замечательно последовательно выводится, переключаясь по твоему обработчику нажатий кнопок мыши.
Snusmumriken
Если у тебя самописное двигло, ты сам должен знать, или спрашивать не "как сделать чтобы было пук-среньк" а "как организовать архитектуру моего движка".
Snusmumriken
Не знаю.
Snusmumriken
Конкретные структуры данных ты как-нибудь подберёшь, я даже не знаю на какой стороне ты работаешь.
Snusmumriken
Если кратко: в массив засунуть?
В качестве мыслей на подумать, вот тебе статья. https://habr.com/ru/post/427135/
Snusmumriken
В ней рассмотрено несколько подходов, например action list, они тоже могут тебе помочь. Просто набирайся образования, думай где это можно применить и так далее.
Snusmumriken
Мне примерно такое нужно и тут вроде как без всяких массивов
Вот это выглядит как будто Character.new возвращает табличку, с перегруженным __call-метаметодом, который принимает строчку, добавляя её в какой-то глобальный экшн-лист с собственным контекстом. Все строчки кода вызваны сразу и мгновенно, но где-то хранятся в каком-то списке, и из этого списка по очереди (событий) выдёргиваются и выводятся движком. Как именно оно устроено — на твоё усмотрение. Но у подобного подхода весьма ограниченная сложность. Тут не получится сделать нормальную вариативность.
Snusmumriken
#правила версия 0.0.1a 🚫 Запрещено: ▫️Спам, реклама ▫️Холивары, набросы, соцопросы ▫️Троллинг, буллинг и оскорбления ▫️NSFW и шок-контент ▫️Варез и поиск кряков ▫️Взлом игр ▫️GameGuardian-скрипты ▫️k3wl h@x0rz ⚠️ Внимание! ▫️Админ всегда прав! ▫️Не задавайте мета-вопросов в чате: https://nometa.xyz/ ▫️Так же, ознакомьтесь, пожалуйста, с тем, как правильно задавать вопросы: https://www.opennet.ru/docs/RUS/smart_question/ ▫️Помните: это НЕ чат технической поддержки! Здесь другие пользователи могут вам помочь (или нет) исходя из своего желания. ▫️Если хочется скинуть логи и код — заливаем на любой из сервисов а-ля "pastebin". В крайнем случае - ставим пакет wgetpaste и скармливаем их (логи или код) команде wgetpaste -r (либо на STDIN, либо путь до файла в качестве аргумента). Ссылку — сюда. ▫️Хочется показать кусок интерактивной shell-сессии — ставим asciinema, запускаем asciinema rec, делаем что нужно, выходим. Ссылку — сюда. ▫️Хочется показать скриншот — как правило, не нужно. Но если очень надо — Imgur. ▫️Хочется показать фото или видео с монитором, снятое на телефон — лучше сразу убиться об стену. ⚠️ Мы вам тут не филиал гугла! Поэтому: ▫️Прежде чем задать вопрос - сначала ищем ответ в поисковиках. Не получилось - формулируем вопрос максимально подробно с описанием всех своих действий и получаемых результатов. ☢️ Задаёшь вопрос, ответ на который есть в поисковиках (ddg.co, google.com, ya.ru) — получаешь warn (предупреждение). Два предупреждения — бан. Всё хорошо в меру. Не злоупотребляйте.
Кстати правила чот жесть, я старался такого избегать.
Snusmumriken
Внимательно читаем правила чата. Тут можно обсуждать всё, что связано с Lua: движки, фреймворки, библиотеки, модификации к играм. Можно размещать вакансии и искать работу. Срачи – нежелательны, но иногда допускаются в качестве исключения. Переход на личности/оскорбления – запрещен. Мат – в рамках разумного, без злоупотребления (тут дети). Особое положение для рекламоразмещателей и эйчаров: реклама того что не связано с программированием - вредна для вас же самих, бессмысленна и запрещена. К курсам по кодингу, кстати, тоже относится. Эйчарам — сначала писать админу (@Snusmumriken), после его модерации, объявление может быть опубликовано. Правильные вопросы отличаются следующими свойствами: 1. На хороший вопрос приятно отвечать; 2. Хорошой вопрос обладает полнотой информации, он не требует уточнений; 3. Ответ на хороший вопрос не располагается на первых страницах гугла (и на вторых, и на третьих тоже, даже если в третий раз поменять вопрос на более корректный); 4. Основной мотив хорошего вопроса - "как" а не "почему", так как "почему" - несложно нагуглить; 5. Примеры кода хорошо форматированы и вычищены, чтобы в нём было легко разобраться. Отправленное в чат - в моноширинном виде (выделить и нажать ctrl + shift + m, или обрамить тройными обратными апострофами "`"), большие участки кода оформлены ссылкой на pastebin.com или gist.github.com. Уточнение для тех кто в чате меньше суток: тут обитает бот, который удаляет сообщения совсем-совсем новичков со ссылками и репостами, в целях защиты от спама. Пишите код прямо в чат. Чаты-друзья: # https://t.me/ProLuaSnooze (флудильня) # https://t.me/love2d_ru (фреймворк LÖVE 2D) # https://t.me/CoronaRu (движок Corona SDK) # https://t.me/luainmoscow (конференции и митапы) # https://t.me/LuaLang (англ) Админы: # @Snusmumriken (добрый полицейский) # @DevNullSpirit (злой полицейский) # @AlexFails (средняя голова) Статьи: # https://habrahabr.ru/users/16tomatotonns/posts/ # https://habrahabr.ru/users/russdragon/posts/ # http://tylerneylon.com/a/learn-lua/ Библиотеки и менеджеры пакетов: # https://github.com/openresty/lua-nginx-module # https://luarocks.org/ # https://github.com/rjpcomputing/luaforwindows # https://luapower.com/ # http://lua-users.org/wiki/LibrariesAndBindings # https://github.com/kikito/middleclass Движки и фреймворки: # https://love2d.org/ # https://coronalabs.com/ # https://www.defold.com/ Конференции и митапы: # http://lua.moscow/ Полезные ссылки: # https://www.lua.org/ # http://luajit.org/ # http://lua-users.org/ Programming in Lua (4th edition, eng): # Купить: ## https://www.ozon.ru/context/detail/id/135559046/ # Спиратить: ## https://www.dropbox.com/s/ga2o7cksytun0qi/Programming%20in%20Lua%20-%20Roberto%20Ierusalimschy.pdf?dl=0
Ну типа эти мне казались в целом норм, хоть и графомански )
Snusmumriken
Нет, это я телеги накатал.
Snusmumriken
Соответственно, у твоего движка должен быть набор состояний: 1. Игровой процесс (текущая сцена с набором графона/спрайтов/текстов, список событий, вся-вся фигня относящаяся к игре) 2. Всякие менюшки, сейвы, внутриигровые менюхи, можно тоже сделать сценами Текущий потребитель событий ввода должен быть текущей активной сценой.
mva
https://codeberg.org/jouni/mpv_sponsorblock_minimal/pulls/6#issuecomment-266357
mva
🤦‍♂️
mva
как ещё можно доказать человеку что лучше иметь конфиг, чем заставлять юзеров хардкодить изменения опций прямо в исходнике?
Anonymous
А то потом случайно выяснится что вы опять пытаетесь заинжектить sol в готовую приложуху и проблемы не в компиляторе и не в sol'e
Добрый день, сделал как вы советовали, и наконец понял как решить данную проблему, еще раз благодарен.
Ivan
о господи, чё внешние ссылки нельзя кидать?
Ivan
add = function(...) local acc = 0 local arg = {...} for i = 1, #arg, 1 do print(arg[i]) acc = acc + arg[i] end return acc end co = coroutine.create(add) local mt = {} function mt.__call(a, b) return coroutine.resume(co, a, b) end tmp = {} setmetatable(tmp, mt) print(tmp(1, 4))
Ivan
почему, ошибка, что вызывается арифметическое действие на таблице
Ivan
на строке acc = acc + arg[i]
Ivan
откуда там таблица!?
Wsevolod
первый арг будет tmp
Wsevolod
Либо function mt:__call(a, b)
Ivan
Спасибо)
Anonymous
Здраствуйте, возможно ли использовать темплейты в юзертайпе?
Anonymous
template <typename T> T SomeClass::SetValue(T a, T b) { c = a; d = b; } lua.new_usertype < SomeClass >( _S( "C_SomeClass" ), ( std::string ) _S( "SetValue" ), &SomeClass::SetValue );
Anonymous
Я хочу сделать для разных типов данных одну функцию, чтобы было удобно работать, но перегрузку функции, и темплейты оно кушать не хочет.
Igor
@pro.cxx
Igor
Тебе сюда
Anonymous
Ты чатиком ошибся
Это как раз к луа относится
Igor
Это как раз к луа относится
Относиться-то относится, но конкретно с этим вопросом, шанс получить помощь выше именно в чате по Сишке
Aydar
А где чат по сишке?
@procxx там спроси, если по сишке есть отдельный - подскажут.
Александр
@procxx там спроси, если по сишке есть отдельный - подскажут.
очень прошу отправлять с такими вопросами в @supapro, а не в @procxx
Tony
Добрый вечер. Извиняюсь, что начинаю с проблемы, но очень уж капец какой-то. Есть у меня программа для КМ вычислений Quanty, по сути – интерпретатор LUA с большой узкоспецифической библиотекой. Есть код в нескольких файлах, который я вызываю в мастер-файле через dofile(). Первые три файла объявляют глобальные переменные, последний – главный кусок кода, который с этими глобальными переменными делает манипуляции, вычисления и сохраняет в соответствующие файлы. Выполнение последнего из этих файлов я пытаюсь взять в цикл. Но, судя по данным, что-то не так внутри этого кода, как будто некоторые переменные не обнуляются, а при каждом выполнении дополняются. Уже и прописал везде, где можно, local, но всё равно что-то где-то не так Вопроса два: 1) в статье про dofile написано: you may want to run the new chunk in a protected environment, to avoid unpleasant side effects when running the code . Каким образом это реализовать? 2) есть ли какая IDE для LUA, чтобы можно было увидеть, какая переменная локальная, какая глобальная, и что где происходит?
Wsevolod
Добрый вечер. Извиняюсь, что начинаю с проблемы, но очень уж капец какой-то. Есть у меня программа для КМ вычислений Quanty, по сути – интерпретатор LUA с большой узкоспецифической библиотекой. Есть код в нескольких файлах, который я вызываю в мастер-файле через dofile(). Первые три файла объявляют глобальные переменные, последний – главный кусок кода, который с этими глобальными переменными делает манипуляции, вычисления и сохраняет в соответствующие файлы. Выполнение последнего из этих файлов я пытаюсь взять в цикл. Но, судя по данным, что-то не так внутри этого кода, как будто некоторые переменные не обнуляются, а при каждом выполнении дополняются. Уже и прописал везде, где можно, local, но всё равно что-то где-то не так Вопроса два: 1) в статье про dofile написано: you may want to run the new chunk in a protected environment, to avoid unpleasant side effects when running the code . Каким образом это реализовать? 2) есть ли какая IDE для LUA, чтобы можно было увидеть, какая переменная локальная, какая глобальная, и что где происходит?
1) https://stackoverflow.com/a/16366750/8876743 2) вроде как LSP умеет
Wsevolod
сложно, но спасибо
Идея в том, чтобы дать коду из файла свободно читать из _G, но перехватывать запись в _G, что достигается через setmetatable(sandboxed_G, {__index = _G})
Wsevolod
Добрый вечер. Извиняюсь, что начинаю с проблемы, но очень уж капец какой-то. Есть у меня программа для КМ вычислений Quanty, по сути – интерпретатор LUA с большой узкоспецифической библиотекой. Есть код в нескольких файлах, который я вызываю в мастер-файле через dofile(). Первые три файла объявляют глобальные переменные, последний – главный кусок кода, который с этими глобальными переменными делает манипуляции, вычисления и сохраняет в соответствующие файлы. Выполнение последнего из этих файлов я пытаюсь взять в цикл. Но, судя по данным, что-то не так внутри этого кода, как будто некоторые переменные не обнуляются, а при каждом выполнении дополняются. Уже и прописал везде, где можно, local, но всё равно что-то где-то не так Вопроса два: 1) в статье про dofile написано: you may want to run the new chunk in a protected environment, to avoid unpleasant side effects when running the code . Каким образом это реализовать? 2) есть ли какая IDE для LUA, чтобы можно было увидеть, какая переменная локальная, какая глобальная, и что где происходит?
> чтобы можно было увидеть, какая переменная локальная, какая глобальная Можно логгировать через setmetatable(sandboxed_G, { __index = _G, __newindex = function(self, k, v) print("Setting "..k.." to "..inspect(v)) rawset(self, k, v) end })
Tony
а как вызвать эту функцию из ответа на StackOverflow? что есть эта env, как её передать в функцию?
Wsevolod
а как вызвать эту функцию из ответа на StackOverflow? что есть эта env, как её передать в функцию?
По идее пустая таблица, в которую запишется все то, что код в файле пишет в глобал
Tony
Tony
Highly Likely
Добрый вечер. Извиняюсь, что начинаю с проблемы, но очень уж капец какой-то. Есть у меня программа для КМ вычислений Quanty, по сути – интерпретатор LUA с большой узкоспецифической библиотекой. Есть код в нескольких файлах, который я вызываю в мастер-файле через dofile(). Первые три файла объявляют глобальные переменные, последний – главный кусок кода, который с этими глобальными переменными делает манипуляции, вычисления и сохраняет в соответствующие файлы. Выполнение последнего из этих файлов я пытаюсь взять в цикл. Но, судя по данным, что-то не так внутри этого кода, как будто некоторые переменные не обнуляются, а при каждом выполнении дополняются. Уже и прописал везде, где можно, local, но всё равно что-то где-то не так Вопроса два: 1) в статье про dofile написано: you may want to run the new chunk in a protected environment, to avoid unpleasant side effects when running the code . Каким образом это реализовать? 2) есть ли какая IDE для LUA, чтобы можно было увидеть, какая переменная локальная, какая глобальная, и что где происходит?
Lua*
Tony
Lua*
Виноват, новичок
Highly Likely
1) https://stackoverflow.com/a/16366750/8876743 2) вроде как LSP умеет
А ты уверен, что это то что ему нужно?
Wsevolod
А где вьізов функции?
Highly Likely
Кажется, дуфайл с локальными переменными внутри в _G никак не лезет
Highly Likely
Это неточно, конечно
Tony
А где вьізов функции?
вызывал с _G – попал в гиперлуп, вызывал с пустой таблицей – ругается на пустую таблицу
Highly Likely
Добрый вечер. Извиняюсь, что начинаю с проблемы, но очень уж капец какой-то. Есть у меня программа для КМ вычислений Quanty, по сути – интерпретатор LUA с большой узкоспецифической библиотекой. Есть код в нескольких файлах, который я вызываю в мастер-файле через dofile(). Первые три файла объявляют глобальные переменные, последний – главный кусок кода, который с этими глобальными переменными делает манипуляции, вычисления и сохраняет в соответствующие файлы. Выполнение последнего из этих файлов я пытаюсь взять в цикл. Но, судя по данным, что-то не так внутри этого кода, как будто некоторые переменные не обнуляются, а при каждом выполнении дополняются. Уже и прописал везде, где можно, local, но всё равно что-то где-то не так Вопроса два: 1) в статье про dofile написано: you may want to run the new chunk in a protected environment, to avoid unpleasant side effects when running the code . Каким образом это реализовать? 2) есть ли какая IDE для LUA, чтобы можно было увидеть, какая переменная локальная, какая глобальная, и что где происходит?
> chunk in a protected environment, to avoid unpleasant side effects when running the code Вот конкретно эта фраза про то, что стоит запускать дуфайл в сэндбоксе, чтобы клиентский код не мог никак повлиять на скрытый для него рантайм
Highly Likely
https://www.lua.org/pil/8.html Советую почитать вот от сюда и далее
Tony
или что бы этот код каждый раз запускался независимо от остальных итераций?
Highly Likely
Никогда
Highly Likely
Сорри за весьма бесполезный скорее всего ответ
Highly Likely
Но это правда так. Проще не использовать глобальные переменные в своем коде чтобы не плодить костылей позже :-)
Highly Likely
А так, да. Если есть глобальные переменные -- _ENV в помощь
Highly Likely
Я только не помню, ENV по-моему с 5.2 появился