-
Число публикаций
618 -
Регистрация
-
Последнее посещение
-
Дней в топе
1 -
AMKoin
37 [Подарить AMKoin]
Весь контент пользователя Nazgool
-
@Kirgudu, "А ларчик просто открывался" . Спасибо. Можно ещё запилить "Справочное руководство" по функциям. У меня процентов на 60 оно уже сделано. Материала полезного куча. Но это может быть достаточно долго. Можно было бы постепенно добавлять информацию, но она раствориться по страницам. Не создавать же отдельную тему? Да и редактировать, если что, у меня нет возможности. Подумаю. В зависимости от того, как организовано - можно и создать. Есть же "справочник по функциям и классам" по движку. А можно - и в имеющуюся - не так уж часто туда что-то постится, чтобы потерялось. dc
-
@Desertir, дружище, я не случайно привел цитату Являясь как бы скриптером, я не могу себе позволить упускать даже мелких деталей, поскольку, сам понимаешь, такие мелочи могут кардинально изменять код. Поэтому вышеприведённую цитату я воспринимаю буквально (как задачу). А она звучит как разделение по пробелам (вернее пробельным символам). Поэтому, в данном контексте, разделение %S+ точнее подходит под определение задачи. Под другую цитату решение может быть совершенно другим. Чувак, кто ищет - тот всегда найдет. Как еще можно назвать тему "Язык Lua. Общие вопросы программирования.", чтобы было понятнее о чем там идет речь. Если почитать хотя бы последнюю страницу, то 3-й пост с краю будет то, что нужно. И в подпись добавлять бесполезно. Я не часто отмечаюсь постами. Так что быстрее всё-таки найти в теме. Да и в шапку забивать подобные вещи должен кто-то из руководства, который посчитает информацию достойной этого. З.Ы. пожалуйста.
-
@mumie, https://yadi.sk/d/4EUvTWhzdnAve Глава 21.3 "Шаблоны". Я зря что-ли столько времени убил на это руководство? На любителя. Я, например, использую %S+. Но в данном случае не до жиру )
-
В смысле lua5.1.dll ? Программу (UI) запускает wlua.exe для версии lua 5.1, которая линкуется с либой lua5.1.dll. Вот их и нужно "подружить".
-
Добавлю, что мало ли в каких модулях может понадобиться работать с менеджером объекта. Не объявлять в начале каждого из них локальную. А так менеджер всегда под рукой в поле sm.
-
Да, такое решение и напрашивается. Только остается узнать, - когда этот фейковый объект перестанет быть нужен, и его можно будет удалить? Ведь неизвестно сколько еще модулей, использующих этот объект, могут быть подключены в будущем. Объектов же больше чем много. Не хранить же их все в фейках.
-
@abramcumner, Но в итоге всё равно делаем то же самое. Поэтому первой строкой перед кодом не помешает поставить коммент И код будет читаться намного быстрее, т.к. уже знаешь чего от него ожидать. А вообще - уже веселее. Код фигня. Главное коммент )) Шучу ессестно. Ну, как минимум, пытаюсь )
-
Согласен. Это и многое другое всё-таки нужно было упомянуть в Да ну его. @Desertir, Возможно. Смотря откуда "рефрактор" растет ))
-
Вроде сам никому ничего не говорил, да и мне тоже, но после прочтения последних страниц не ловко как-то. Особенно от того, что курильщики-то со стажем. Нет, это конечно понятно. Вы это давно уже выс..., ой, съели, так что как жевать уже знаете. Но не у всех же ещё зубы выросли. Но уже ведь пытаются грызть. И пусть некоторые пока ещё не понимают(по не опытности) всех преимуществ новых решений, но ковыряния или "рефакторинг" (да называйте это как угодно) являются не плохим полигоном. Кто в чем разобрался - то для него и лучшее. Со временем разберуться и в другом. Будет возможность сравнивать, делать выводы. Вчерашний код сегодня самому покажется дерьмокодом. А прекрасный сегодняшний, завтра может показаться хуже вчерашнего. Указывать на ошибки конечно нужно. Но принимать\не принимать - это уже как захочется. Многие ли слушали родителей в детстве? В общем...хотелось написать о многом...да ну его. Настроение ни к черту после всего этого.
-
Ответ : Коды OGSE уже доступны. Посмотри как там всё устроено.
-
@Dennis_Chikin, Да при чем тут наносекунды? for i = ... специально придуман для обхода правильных массивов. Оператор ... как раз и создаёт такой массив. Если что, на первой же "дырке" цикл прекратиться (в оригинале это сделано через if (arg ~= nil) ... break). Кстати pairs не годится для этой функции. Он читает всё, т.е. и nil-ы. @Desertir, Ага. Я использую быстрые таймеры (быстрые - это в смысле без анализа множества результатов, вычисления среднестатистического значения и прочей ерунды) local function call_timer(tab, name) local timer = {timer = profile_timer(), name = name or ''} function timer:start() self.timer:start() return self end function timer:stop(msg) self.timer:stop() self:print(msg) return self end function timer:point(name) self:stop("POINT '"..(name or '').."'"):start() end function timer:print(msg) print("TIMER '"..self.name.."' > "..(msg or 'STOP')..' > TIME = '..self.timer:time()) end return timer end debug.timer = setmetatable({}, {__call = call_timer}) Тут у меня подключена Lua by RvP, но это не обязательно. Функция print тоже переписана. И использую local t1 = debug.timer('timer_1'):start() ... t1:point('1') -- если нужно ... t1:point('N') -- если нужно ... t1:stop() -- тут в лог пишется
-
@Dennis_Chikin, А почему for i, v in ipairs ? for i = start, end, step do раза в два быстрее. Ну на одну строку больше будет ?
-
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Давеча написал вариант с перестроением таблицы. Использование функций библиотеки table вроде как и наглядно показывает принцип работы, но с другой стороны само использование функций несёт накладные расходы. От них можно отказаться в пользу увеличения производительности кода. Как то так : math.randomseed(os.time()) local t = {1,2,3,4,5,6,7,8,9,10} t_used = 0 function get_my_rnd(tab) t_used = (t_used == 5 and 0 or t_used) + 1 local index = math.random(t_used, #tab) local value = tab[index] tab[t_used], tab[index] = value, tab[t_used] return value end get_my_rnd(t) ... -
@Murarius, Вот потому и занимался PiL, что нужно хотя бы пытаться писать правильно, а "как всегда" оно само получиться. Т.к. (по аналогии выходит) если писать "как всегда", то в итоге получим "плохо" Я всегда был за! усовершенствование кода. Только с этим делом нужно не переусердствовать. "Выпиливать " целый день код, который работает от силы несколько раз, или даёт минимальный положительный эффект - неразумно. Разве что личная неприязнь к "простыням" или моральное удовлетворение от красивого кода (я в этом числе ) ). @Dennis_Chikin, В любом случае, я (например) за. +1.
-
Рефакторинг: _g.script
Nazgool ответил на тему форума автора Dennis_Chikin в Скрипты / конфиги / движок
@Struck, Гонятся за скоростью может и нет большого смысла. Как тут говорили, - при загрузке смысла нет, да и во многом другом. Но если можно написать быстро (действительно быстро), то почему этого не сделать? Ну например если из показанного тобой кода максимально убрать вызовы функций (как затратных средств), то можно практически вдвое сократить время выполнения начальной функции function compare_part(a, local x = #a < #b a, b = x and a or b, not x and a or b -- теперь 'a' - всегда будет минимальной строкой, 'b' - максимальной return b:sub(1, #a) == a end Вроде и не нужна особо эта функция, а на душе приятно от двойной скорости. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Всё. Надоело мне писать PiL. Примеры исправил. Можно копировать. Оформил...всем всё равно не угодишь. Кто хочет - тот под себя переделает. C API редактировать не хочу. Может сделает тот, кому это действительно нужно. https://yadi.sk/d/4EUvTWhzdnAve -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Таки да. На лету делал. Исправил. Начал приводить в порядок черновик. Оформляю, исправляю. Это ещё более утомительно, но дело идёт. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Ого, сколько тут всего произошло. Читать все коды тоже не буду. Предложу свой вариант. Все условия задачи не читал, но ... Каждый поиск случайного числа можно производить в любой момент, т.е. не обязательно все пять вызовов в одном каком-то потоке. Сделал по принципу перестроения таблицы. math.randomseed(os.time()) local t = {1,2,3,4,5,6,7,8,9,10} t_used = 0 function get_my_rnd(tab) if t_used == 5 then return end t_used = t_used + 1 local a = math.random(t_used, #tab) table.insert(t,1,table.remove(tab,a)) end get_my_rnd(t) get_my_rnd(t) get_my_rnd(t) get_my_rnd(t) get_my_rnd(t) Для повторного использования просто сбросить t_used в ноль. В общем тут количество вариантов напрямую зависит от способа использования. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Так, друзья, во-первых всех с наступающим Новым Годом. А во-вторых - я не уверен, что Новогодние праздники будут благотворно собствовать мыслительной деятельности. Да и проблемы с попаданием по клавишам обеспечены. Поэтому, приурочивая к Новому Году, выложу черновик. C API пока не осилил (нет ни малейшего желания за личной ненадобностью). Всё остальное пока руками не трогать! Как я уже сказал - черновик. Оформлением, ошибками, перекрестными ссылками и всем прочим займусь ... как только так сразу. Читать по любому гораздо удобнее чем из pdf. Да и нормальный поиск всегда в помощь. Хотя и оформление пока никакое, но ничто не мешает каждому под личные нужды изменить шрифт или что-то другое в PiL3.css. https://yadi.sk/d/hWk932zBdjHnz -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Это хорошо. Спасибо. Но я уже половину сделал. И на данный момент с копированием примеров проблема. Нет, их HTML всё копируется замечательно. Но при сканировании через ABBYY, я поставил основной язык русский (перевод-то русский), поэтому не факт, что, например, символ 'a' в коде может быть английский. Наверняка он был расценен как русская 'a'. Да подобных казусов не мало. Английская буква 'l' (L) вполне часто становится цифрой '1', буква 'О' - цифрой 0 и т.д. Вручную правлю потихоньку Позже, может быть, скопирую скрипты из последней ссылки. А книга всё-таки бесценная. Вроде я в Lua как и не новичок, но... короче чайник всё равно. Kirgudu, Murarius Спасибо за поддержку. Дело утомительное, но вижу, что хоть кому-то пригодиться. Это придаёт некоторых сил. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@Solomon753, Да, это стоящая книга. Тем более что Lua 5.2. описан. Пригодится. 186 Мб !!! Это не дело. Я его через ABBYY в html перегнал. Будет где-то 1 Мб. Правда "благодаря качеству" ошибок не мало. Придётся ручками. Так что, если духа хватит, скоро приведу в нормальный вид. -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
@Struck, Тут вроде уже всё выяснили, а ты снова предлагаешь некое решение. "Никакое". makdm уже сказал как решать подобную проблему. Интересно, чем разумное согласие Kirgudu, вызвало негодование layMod в его оценке сообщения? stalk9r, Объектов mobile_binder действительно может быть великое множество. Чтобы проверить переменную, тебе нужно получить конкретный объект mobile_binder. Способов хватает, так что найдёшь. Напр level.object_by_id(id), alife():object(sect or id)... В общем дерзай. Ну или в конце концов можно поступить железобетонно (если объект один). Вот тут добавить : function mobile_binder:__init( obj ) super( obj ) _G.my_mobile_binder = self И теперь в любом месте можешь узнать состояние переменной initialized : local what = _G.my_mobile_binder.initialized _G для наглядности. Чтобы было видно откуда ноги растут. -
"сталкер умер", "Моё мнение", "умер - не умер"... Чтобы Сталкер умер, его нужно переплюнуть. Делают красивую графику, делают много локаций, делают много оружия, делают геймплей...да чего только не делают. Но всё это совместить никому ещё не удалось. Либо "туннель", либо нудота статическая. А надоел Сталкер потому, что когда выбираешь, - "Во что поиграть?", выбираешь из лучшего. Ничего атмосфернее Сталка пока ещё нет. Вот и выбираешь. И играешь. Снова и снова. Ну вроде как и надоедает(???). До следующего раза. А все остальные "классные" игры - практически одноразовые.
- 14 162 ответа
-
- 11
-
- мод
- s.t.a.l.k.e.r.
-
(и еще 5 )
Отмечено тегом:
-
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@Solomon753, В Lua нет стандартных способов работы с дисплеем. Разве что через os.execute, но это для тех, кто хорошо знаком с CMD. А так - необходимо подключать сторонние библиотеки. Lua однопоточен. Поэтому ни о каком "параллельном вычислении" в coroutine нее может быть и речи. Принцип сoroutine заключается в возможности выполнения определённого блока программы (перевод основного потока программы на этот участок кода), которая при некоторых условиях может приостанавливаться, передавая управление обратно основному потоку, с дальнейшей возможностью возобновить выполнение потока с момента его предыдущей остановки. Кроме того - основной поток может обрабатывать возвращаемые из сoroutine данные, и в любой момент возобновлять выполнение сoroutine, передавая в него новые данные, которые могут влиять(изменять) порядок работы функции, являющейся телом сoroutine. Это очень мощный инструмент, но увы, как я уже говорил, однопоточный. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@Solomon753, Ты видимо не понимаешь как работает цикл while. Давай по шагам вот с таким кодом: function OnEvent(event, arg) if (event == "MOUSE_BUTTON_PRESSED" and arg == 1) then while true do Sleep(delay) if not IsMouseButtonPressed(1) then break end MoveMouseRelative(x, y) end end end 1. Нажимается ЛКМ 2. После проверки if (event == "MOUSE_BUTTON_PRESSED" and arg == 1) then... NOTE: На данный момент IsMouseButtonPressed(1) возвратит false, т.к. ещё нее прошло N миллисекунд. 3. Запускается цикл while NOTE: В этоже время, по видимому, происходит выстрел 4. Производится задержка Sleep(delay) 54 миллисекунды. За это время отдача изменяет координаты X.Y Также этого времени вполне достаточно для того, чтобы IsMouseButtonPressed(1) показывала реальное положение кнопки. 5. Если на данный момент ЛКМ ещё нажата, то проверка - if not IsMouseButtonPressed(1) then - будет отрицательна. Переходим к пункту 6. Если же на данный момент ЛКМ отпущена, то if not IsMouseButtonPressed(1) then сработает и цикл прекратиться. NOTE: Максимум продлится ещё на один цикл до нового вызова Sleep(delay), за время которого произойдёт переключение из состояния "нажатая" в "отпущеная" (или наоборот) 6. А значит вызывается MoveMouseRelative(x, y) - и координаты восстанавливаются И цикл начинается снова с пункта 3. Вот же она эта проверка - if not IsMouseButtonPressed(1) then. Находится в теле блока. Так уж lua устроена. Не пойму я эту API, почему за время Sleep(delay) т.е. 54 , не успевает переключаться состояние кнопок. Какое тогда время для этого нужно?
- [ЧН] OGSM CS 1.8 CE Fixes
- [ЧН] HARDWARMOD 3.2
- [ЗП] The Long Road
- [ЧН] New vision of War
- [ЧН] Old Good Stalker Mod - Clear Sky
- [ЗП] Unofficial Patch
- [ЗП] Смерти вопреки
- [ЗП] Контракт на хорошую жизнь
- [ЗП] Shoker Weapon Mod 2.1
- [ЗП] Hardcore pack for SGM 2.2
- [ЗП] Контракт Синдиката
- [ЗП] Клондайк 2.0
- ...и другие моды