RayTwitty 491 Опубликовано 8 Июля 2013 Есть такой вопрос. В созданном скриптовом классе, на стадии __finalize обязательно следует всем переменным класса присваивать nil или уборщик сам уберет? В примерах смотрел, везде по-разному. Где-то делают, где-то нет. Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 3 Декабря 2014 (изменено) http://www.amk-team.ru/forum/index.php?showtopic=11584&p=896785 Один я тут цикл не вижу? Попробуй: local delay = 54 -- задержка между выстрелами local x, y = 0, 50 local LEFT_BTN = 1 -- ЛКМ EnablePrimaryMouseButtonEvents(true) -- видимо включение событий function OnEvent(event, arg) if event == "MOUSE_BUTTON_PRESSED" and arg == LEFT_BTN then while IsMouseButtonPressed(LEFT_BTN) do Sleep(delay) MoveMouseRelative(x, y) end end endЕсли я всё правильно наванговал, то должно сработать. Изменено 3 Декабря 2014 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 3 Декабря 2014 Оператор while разумное решение, уже думал на этим, только именно к циклу его нужно приделатьwhile это и есть цикл. Зачем его ещё куда-то приделывать? Код-то тестил, который я выше привел? Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 4 Декабря 2014 (изменено) В API не упоминается что вместо номера кнопки можно переменную поставитьЗато в луа упоминается. Работать не хочет не из-за этого. Выводи в лог на экран что-нибудь (вроде там функция была), проверь вообще идет ли выполнение кода внутри цикла. Изменено 4 Декабря 2014 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 4 Декабря 2014 (изменено) Но что странно, консоль приняла код на загрузку в мышь, про ошибки молчит.Дык синтаксических ошибок нет, чего ему ругаться? local delay = 54 -- задержка между выстрелами local x, y = 0, 50 local LEFT_BTN = 1 -- ЛКМ local is_pressed = false EnablePrimaryMouseButtonEvents(true) function OnEvent(event, arg) if arg == LEFT_BTN then if event == "MOUSE_BUTTON_PRESSED" then is_pressed = true start_cycle() elseif event == "MOUSE_BUTTON_RELEASED" then is_pressed = false end end end function start_cycle() while is_pressed do Sleep(delay) MoveMouseRelative(x, y) end endПробуй так. Изменено 4 Декабря 2014 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 4 Декабря 2014 (изменено) @Nazgool, а, ну раз так, значит да, без апдейта или других, постоянно вызывающихся методов, никак не сделать. А их судя по всему нет, если я правильно прочитал тот мануал. Изменено 4 Декабря 2014 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 16 Июня 2015 (изменено) Столкнулся с необходимостью сравнить две переменные типа userdataВ сталкере юзердаты так нельзя сравнивать. копаю gui классы из луа и там возникла в этом потребностьНе уверен, что именно это тебе нужно, но попробуй нечто вроде tostring(CUIStatic) == tostring(CUIStatic). Изменено 16 Июня 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 21 Августа 2015 (изменено) Вопрос следующего характера - как в Lua можно грамотно экранировать символ "\"? Чтобы при совпадении с "n" не получался символ перехода на следующую строку ("\n"). Это нужно например в окнах с режимом ComplexMode. Пока сделал такой вариант string.gsub(s, "\\", "/")но, наверно можно придумать что-то поизящнее... Изменено 21 Августа 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 21 Августа 2015 т.е. есть типа строки yes\no?Да. если они более менее статичныДанные не статичны, а постоянно меняются. На самом деле оказалось, что внутри режима ComplexMode, идет поиск символа "\\n". Пробовал заменить его на символ с одним слешем - в итоге в строке его вообще не оказалось. Видимо, остается просто использовать мой первый вариант. Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 21 Августа 2015 (изменено) @Desertir, да тут наверно уже вопрос не Lua, а чисто сталкерских заморочек и парсинга строки в режиме ComplexMode.http://www.lua.org/cgi-bin/demoprint("vasya\new")||\/ vasya ew print("vasya\\new")||\/ vasya\new Второй вариант работает нормально в Lua, но в сталкере он также расценивается как перенос на следующую строку. Так что видимо ничего лучше обратного слеша не придумать в моем случае. Изменено 21 Августа 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 21 Августа 2015 (изменено) Да также второй вариант печатает и в игре - 'vasya\new'.В окне (статике) в режиме ComplexMode? st = CUIStatic() st:Init(0, 0, 1024, 768) st:SetText("vasya\\new") st:SetTextComplexMode(true) get_hud():AddDialogToRender(st) Правда стоит lua by RvP. Может и поэтому ???Не могу знать, но не думаю что как-то влияет это расширение. Изменено 21 Августа 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 21 Августа 2015 @Nazgool,st:SetText([[vasya\new]]) ||\/ vasya ew st:SetText([[vasya\\new]]) ||\/ vasya\ ew Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 30 Января 2016 (изменено) Необходимо вызвать функцию для объекта, сама функция сохранена в виде строки, например: -- обычный вызов actor:name() -- то что я хочу func = "name" actor:<<func>>()либо как-то сохранять ссылку на метод без использования строки... Пока наколхозил такое: function call_string(obj, method, ...) local args = {...} return loadstring("return function(obj, args) return obj:"..method.."(unpack(args)) end")()(obj, args) endвозможно ли сделать лучше? Изменено 30 Января 2016 пользователем RayTwitty Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 31 Января 2016 t = {["A"] = "a", ["B"] = "b", ["C"] = "c", ["D"] = "d"} for k, v in pairs(t) do print(k.." "..v) endПеребор элементов идет в рандомном порядке, отчего так? Юзать ipairs очень неудобно, так как работает похоже только с числовыми ключами: t = {[1] = "a", [2] = "b", [3] = "c", [4] = "d"} for i, v in ipairs(t) do print(v) end Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 31 Января 2016 (изменено) next, через который работает pairs, не гарантирует никакого порядка.Ну это-то я читал, вопрос был больше о том, почему так странно реализовано?.. Зачем нужен порядок? И чем не угодил ipairs?На практике у меня там несколько вложенных таблиц, поэтому и порядок обработки важен. Если делать через ipairs, структура таблиц будет крайне убога. Изменено 31 Января 2016 пользователем RayTwitty Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 31 Января 2016 (изменено) Может тебя надо получить список ключей и отсортировать их предварительно. А может тебе какая-то другая структура данных нужна.Причем тут сортировка и другие структуры данных? Я вообще-то уже всё сказал и показал - какая таблица и что надо сделать - последовательно перебрать ключи A,B,C,D в этой таблице. upd: t = {[1] = {["A"] = "a"}, [2] = {["B"] = "b"}, [3] = {["C"] = "c"}, [4] = {["D"] = "d"}} for i, tabl in ipairs(t) do for k, v in pairs(tabl) do print(k.." "..v) end endЕсли только так, но выглядит ужасно. Изменено 31 Января 2016 пользователем RayTwitty Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 31 Января 2016 (изменено) @Charsi, с A,B,C,D конечно работает, но название ключей в реальности могут быть какие угодно, поэтому сортировка может изменить порядок. Детальный разбор вопроса показал, что сделать нормально никак нельзя. Если бы ключ был объектом или таблицей, в котором лежал бы его номер, тогда наверно и pairs работал нормально, а ipairs вообще стал не нужен: local t = {sequence = {"first", "123", "qwerty"}, ["first"] = 2332, ["123"] = "rutr", ["qwerty"] = 999} for i, v in ipairs(t.sequence) do print(v, t[v]) end Изменено 31 Января 2016 пользователем RayTwitty Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 31 Января 2016 (изменено) Если ключ это объект или таблица, то в table.sort вторым аргументом можно передать функцию, реализующую упорядочивание таких ключей.Да даже если ключи простые строки - не упорядочишь ты их так, как было изначально, если конечно не будешь парсить документ и смотреть какой ключ за каким шел. Номера ключей надо где-то хранить в любом случае. Изменено 31 Января 2016 пользователем RayTwitty Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 4 Февраля 2016 Возможно кто-нибудь в курсе, как правильно называется следующая функция: function clamp(n, min, max) if n < min then return max elseif n > max then return min else return n end endПока обозвал clamp, но обычно clamp это запрет выхода за диапазон, а у меня значение идет по кругу. Не хочется путаться в дальнейшем с названиями. Поделиться этим сообщением Ссылка на сообщение
RayTwitty 491 Опубликовано 4 Июня 13.05.2024 в 05:48, Zander_driver сказал: Были ли они в оригинальном движке ТЧ, честно говоря не помню. Если были, то их должно быть возможно найти тут. Только для мировой модели объекта - play_cycle. В случае с НПС/монстрами play_cycle практически бесполезен, так как перебивается движком или другими скриптовыми схемами. Подходит по сути только для неживых объектов. Для худа оружия (hud_item) проиграть анимацию на оригинальном движке нельзя. 1 1 Поделиться этим сообщением Ссылка на сообщение