Перейти к контенту

Nazgool

Жители
  • Число публикаций

    618
  • Регистрация

  • Последнее посещение

  • Дней в топе

    1
  • AMKoin

    37 [Подарить AMKoin]

Весь контент пользователя Nazgool

  1. Nazgool

    Скриптование

    Я не понимаю других языков кроме Lua. Но ты спрашивал про потоки и приостановку, а в lua сделать подобное можно только с помощью coroutine. Как не крути, а lua однопоточен.
  2. Nazgool

    Скриптование

    @-StalkMen-, http://www.amk-team.ru/forum/index.php?showtopic=7450&page=16#entry622983
  3. Nazgool

    Скриптование

    Разрешите высказать и своё мнение. Все помыслы что-то улучшить и оптимизировать конечно заслуживают уважения, но... Это того не стоит. Точнее усилия, затраченные для достижения сомнительного (ну может быть и несколько более производительного кода), ведущего за собой перестроение целой системы, более чем сомнительны. Программистам (не являясь таковым, но тем не менее мне тоже) режет глаза лишняя проверка, Тем более если перед этим уже проверялось. {=gulag_inactive(esc_lager)} section1, {+esc_infop1} section2 Прежняя запись предельно ясна и разжевана : {=gulag_inactive(esc_lager)} section1, {!gulag_inactive(esc_lager) +esc_infop1} section2 Но всё таки... Тут нужно определиться для чего(точнее будет сказать - кого) пишется код. Для железа первый вариант, конечно, предпочтительнее. Вне всяких сомнений. Но ведь даже тот-же программист, когда будет читать код через некоторое время, (ну программистам об этом известно), может и задержаться на этом участке кода, пока не сообразит, что же он сам тогда имел в виду. Поэтому с другой стороны, несколько инструкций, снова потраченных на эту же проверку, и при (уже давно доказанной) скорости Lua, не смогут сильно повлиять на конечный результат. Но сможет облегчить жизнь не только пользователю, но и самому программисту. Хотя, должен сказать, если новая система сможет выиграть хотя бы 10-15% производительности, то ... Интересно было бы посмотреть. Не больше.Сам бы заниматься таким не стал. Слишком накладно. Только если начиная от 30 а лучше 50 %. То может быть.
  4. , Ну да. У меня на тот момент как раз-то 6-й и стоял. Потому и поставился. Хотел сказать "Потому видать и поставился". но исходя из вышесказанного тобой, слово "видать" становится не актуальным ))
  5. Всяко случается. Это же Сталкер. Но у меня указанная тобой последовательность сразу поставилась. Из описания xrluafix
  6. Ну был когда-то и такой вариант функции. Да мало ли их у меня было? Тем более пару лет назад. Сейчас например пользуюсь такой : Всё зависит от целей, которые преследуются. Вот я писал для себя когда-то. Пришло время поделиться Там и что-то вроде примеров есть. Правда одну функцию так и не дописал, но она мне и не нужна была, да и сейчас не пользуюсь. https://yadi.sk/d/JnegzDX7ibqYw Можно посмотреть в как я использовал luaxml в файлах OGSE - ogse_musicbox.script, ui_safe.script, ... какие там ещё ... P.S. В принципе можно обойтись и без LuaXml_lib.dll. С необходимостью использования всех функций этой библиотеки в контексте сталкера я ещё не сталкивался. Достаточно в файл LuaXml.lua дописать три основные функции из dll-ки. Собственно я так и сделал.
  7. Использовать string.format в функции math.round это очень медленно. Более чем в два раза быстрее : function math.round (num, limit) local mul = math.pow(10, limit or 0) return math.floor(num * mul + 0.5) / mul end Хотя стоп. Снимается и извиняюсь. Это работает только в нормальном lua, а не в сталкеровском )) Да и функция toboolean достаточно специфична. Это я про ноль. А если nil на входе? Возвратит nil. Но это же не boolean, что подразумевает функция. Гораздо логичнее будет так : function toboolean(e) return not not e end
  8. Что сказать? Видимо строка разбирается в С, а не в lua. Ничего тут не сделаешь, кроме как переписывать в движке.
  9. Попробуй st:SetText([[vasya\new]]) Это конечно то же самое что и "vasya\\new", но SetTextComplexMode явно работает не так как в lua. Хотелось бы исключить все (нормальные) варианты.
  10. , Да также второй вариант печатает и в игре - 'vasya\new'. У меня по крайней мере. Правда стоит lua by RvP. Может и поэтому ???
  11. @BFG, попробую объяснить. Как известно спавнить из all.spawn можно по имени секции : alife():create(100) -- т.е. спавним секцию [100] Но после перекомпиляции all.spawn-а нумерация секций может измениться, поэтому никогда нельзя быть уверенным в том, что в секции (напр.) [100] останется то же самое содержимое. Поэтому нужен ID этой секции для спавна именно её, который и задется в 'spawn_id'. И по нему тоже можно спавнить : alife():create(какой-то_spawn_id) Тут нужно либо точно знать какой именно 'какой-то_spawn_id', либо узнать методом : alife():spawn_id('какой-то_story_id') В этом случае для секции, которую необходимо спавнить подобным образом, кроме 'spawn_id', нужно задавать и значение 'story_id' (которое нужно не забыть прописать в game_story_ids.ltx). Ну и теперь можно спавнить : local story_id = story_ids.какой_там_записан_ключ_в_game_story_ids local spawn_id = alife():spawn_id(story_id) local obj = alife():create(spawn_id)
  12. Nazgool

    X-Ray extensions

    , Это хорошо. Вот работаю я с uip, wx, и если рисую 300х300, то получаю квадрат. И не понимаю, с какой такой такой радости в сталкере это прямоугольник Нет, ну понимаю конечно. Это так...к слову сказал. Я сделал подобное скриптово. Но это очень сложно. Лучше всего конечно, если есть возможность, сделать это в движке.
  13. Nazgool

    X-Ray extensions

    Я не знаю как сейчас действует эта правка, возможно что-то уже изменили, но расскажу предысторию её появления и собственно как я с ней работал. Началось с того, что когда я делал в OGSE сейф, то работа остановилась из-за поворачивающегося диска с цифрами. Дело в том, что для поворота статика, в xml-описателе необходимо было применять свойство "heading=1". Но после его применения статик движково (не могу знать зачем это вообще было сделано) поджимается по ширине (справа и слева) на величину 16/10. Это значит следующее : при соотношении сторон 4/3 правильный круг становиться вытянутым по верткали овалом ; при соотношении сторон 16/9 вытянутым по горизонтали овалом ; и только при разрешении 16/10 сжатие статика посредством 'heading' (тоже 16/10) компенсировалось растяжением по ширине монитора, и круг оставался кругом. Поэтому Malandrinus ввел правку указанную Shadows. Но... Чтобы она работала для всех статиков, в xml-описателях необходимо для каждого статика, независимо от того нужно это или нет, прописывать "heading=1". Если UI рисуется скриптово (а также - при использовании xml - всех не статиков, которым нужно исправление соотношения), то для координат 'x' и 'width' нужно явно указывать эту поправку local WIDTH_FACTOR = get_static_rescale_factor() ... weel_button.width = 32 * WIDTH_FACTOR
  14. parse_func_params будет дергаться только тогда, когда определиться что функция имеет параметры, а не каждый цикл. Но если хочется, то можно записать и несколько по-другому, но более запутано что-ли ..... Ну тут уже на вкус и цвет. Как по мне, то простыня понятнее. Тогда уже нужно доделывать и инфопорции в этом стиле @Dennis_Chikin, Когда будет готово, перезалей xr_logic с новыми правками. А то не ясно, что ты изменил(изменишь) а что нет. В switch_to_section нужно кэшировать db.storage[npc:id()] В функции parse_func_params у меня используется шаблон '[^%s:]+' Я не проверял, поверил разработчикам lua на слово, но элемент '*' (звездочка) называют "прожорливым". Сначала считывается вся строка, а потом уже идет разбор. При '[^%s:]+' сразу идет разбор строки.
  15. try_switch_to_another_section можно сократить малость. Так код читать легче. Заодно и убрать вспомогательную функцию "cond_name" можно С parse_infop тоже особо ничего не сделаешь. Там вообще паттерн интересный - "([%-%+%~%=%!])([^%-%+%~%=%!%s]+)" Тут дело такое. Я поставил такой шаблон - "(%S)([^%-%+%~%=%!%s]+)" И вылетел. Но КАК !!! Короче. Первый паттерн продолжает чтение данных, если какой-то из захватов не был найден. Напр. есть запись - "+info1 info2 -info3" Будут прочитаны +info1 и -info3. info2 прочитан не будет, т.к. перед ним нет никакого знака. На самом деле это ошибка. И, считаю, такие записи нужно пресекать. Что и получилось при использовании шаблона "(%S)([^%-%+%~%=%!%s]+)" Еще не нашел где именно, но где-то нашлась запись 'npc_rank(novice)' без знака, которая разбилась на : sign - 'n' infop_name - 'pc_rank(novice)' что и привело к, необходимому имхо, вылету. Что и как нужно пока не знаю, поэтому оставил старый Ну и наконец вызов abort_syntax_error_in_cond(npc, section, field) - это шедевр. Передается 'npc', которого и в помине тут нет, а в функции abort_syntax_error_in_cond из ничего хотят получить id !? .... Ага Нашел где 'npc_rank(novice)' без знака (это в оригинале). Исправил и уже не вылетает )) Так что у себя однозначно ставлю шаблон "(%S)([^%-%+%~%=%!%s]+)"
  16. Nazgool

    Скриптование

    pick_section_from_condlist я пока сделал так (особо не вдавался в подробности) Ну а остальное нужно смотреть
  17. Nazgool

    Скриптование

    По видимому да Впрочем я сделал акцент именно на использовании элемента шаблона '%b'.
  18. Nazgool

    Скриптование

    Эка несуразность. Ну хорошо, вот придумали разрабы кондлист, в котором кондишены заключили в скобки, а экшены в проценты. Пока нормально. Но почему-то распарсивают 'find'-ом и 'sub'-ом. Первое что мне например пришло в голову - это паттерн '%b', который как раз и ищет строки заключенные в указанные символы. В результате можно записать проще и понятнее. Напр.
  19. Nazgool

    Общее фото

    Не, ну ладно я не выкладывал своё фото по, как казалось мне, каким-то практичным целям. Типа "А смысл?", "Ну что это изменит?", "Пустая трата траффика и времени" и т.д. Я уже, помнится, описывал и другие причины. Кто-то тут даже писал, что возможно шифруются от спецслужб. (От них не зашифруешься Да и свободному человеку шифроваться не пристало) Но вот ведь что меня переубедило. Сам-то заглядываю время от времени посмотреть. Интересно. И выходит что типа подглядываю через щелку? Некрасиво. В первую очередь перед самим собой стыдно как-то. Раскрывайтесь уже. Если стесняетесь, давайте по частям А там пойдет.
  20. Вот, черт возьми, как-то раньше и не приходилось сталкиваться. А тут выяснилось. В общем для тех, кто ещё не попадался на этом. Я всегда считал, что при работе со строками, подобные записи : x = s:match('pattern') -- и x = string.match(s, 'pattern') эквивалентны. Оказывается нет. В первом случае 's' обязана быть строкой. А во втором не обязательно. В функции 'string.match' (не проверял, но по ходу и в других должно быть также) производится попытка преобразования 's' в строку. Теперь использовать обращение к методу буду с осторожностью.
  21. @Карлан, По всей видимости @Starter, нужно это local str_time = os.date('%X') -- 22:49:11
  22. Nazgool

    Общее фото

    А ещё нужно всем символы отличия поставить. Чтобы сразу в глаза бросалось. Скажем одна звездочка - простяк, а три - обязательно обратите внимание. А также эполетов и аксельбантов налепить. Побольше. Иерархия и субординация знаете ли. Соблюдать и почитать нужно.
  23. Nazgool

    Скриптование

    Не медленнее чем у тебя. Даже быстрее. Т.е. для движка разницы нет. А теперь спроси у людей. Для них есть разница? Таблицы это основа языка. Скорость работы с ними - первый из плюсов lua. Не заслуженное обвинение.
×
×
  • Создать...