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

Malandrinus

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

    1 930
  • Регистрация

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

  • Дней в топе

    13
  • AMKoin

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

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

  1. karavan, Неписи уходят в онлайн/оффлайн по скриптовым правилам, не просто на основе некой галочки. Для этого в серверном классе сталкеров и кажется ещё монстров есть методы can_switch_online/can_switch_offline. Они периодически вызываются движком (примерно раз в секунду) и возвращают логическое значение, которое соответственно и говорит движку, можно или нет сменить состояние непися. Посмотри их, там имеется некая логика на основе в том числе наличия инфопорций и пр. Для неживых объектов движок опрашивает два серверных флажка, имеющих тот-же самый смысл. Их установить можно с помощью вызовов alife():set_switch_online(id, <true/false>) alife():set_switch_offline(id, <true/false>) Не проверял, но кажется тоже самое делают вызовы can_switch_online/can_switch_offline с логическим аргументом. Флажок опять же проверяется не для всех объектов. Для некоторых движок просто всегда возвращает находиться в онлайне или оффлайне вне зависимости от чего бы то ни было.
  2. Malandrinus

    [SoC] Вопросы по SDK

    ЙоЖеГ, Странно, я пробовал ранее этот шейдер, но свечения не получил. Хочу убедиться, что делаю всё верно: сконвертировал wpn_bolt_hud.ogf в *.model, загрузил в Actor Editor, там выбрал поверхность wpn_bolt_S, изменил параметр Shader на model\selflight, экспортировал модель в *.ogf. Больше ничего не трогал. Всё правильно делаю? Вот скрин из Actor Editor:
  3. Malandrinus

    [SoC] Вопросы по SDK

    amik, Пробовал, но он почему-то не даёт свечения. Это для меня тёмный лес =( Спасибо, попробую спросить у него. abramcumner, Ничего не поменялось. В самом SDK поверхность болта там, где и положено. Потом, эффект смещения зависит только от шейдера. Ставлю другой - возвращается на место. Кроме того, эффект возникает для любой другой поверхности. Болт - это был только для примера. Хорошо, ставлю вопрос иначе. Возьмём свечение, оно же точно есть в ТЧ? И как его в шейдере выставить? Вот скриншот из редактора шейдеров.
  4. Malandrinus

    [SoC] Вопросы по SDK

    Хочу сделать элемент худа светящимся. К примеру, хочу, чтобы светился болт в руке. Что делаю: 1. Перевожу конвертором файл wpn_bolt_hud.ogf в wpn_bolt_hud.object. 2. Открываю в Actor Editor. Нахожу поверхность wpn_bolt_S. Меняю шейдер этой поверхности с model\model на model\lightplanesself 3. Экспортирую обратно в *.ogf Имею такую картинку:
  5. Gun12, Точка останова для отладчика, иначе breakpoint. Это чтобы остановить в нужном месте программу, посмотреть что и как, затем продолжить дальше. Также при наличии отладчика обычно имеется возможность выполнять программу по шагам. В том SciTE, что идёт вместе с Lua, эти команды вынесены прямо на тулбар. А есть отладчик в рубордовском варианте или вообще нет, пока не понял. Artos, Зачем так усложнять? Первично то, что будет поддерживать интерес к этой теме. по большому счёту, кроме как применительно к пространству имён io понятие текущего каталога больше никак и не использовать. Кроме того, в стандартной библиотеке Lua такого и понятия не вводится явно, как нет и средств управления текущим каталогом. Я бы старался избегать использования каталога "по умолчанию" хотя бы в силу того, что он именно в игре неизвестно какой. Вместо этого, лучше использовать явно заданные абсолютные пути. В движке есть класс FS, который позволяет узнать все пути к каталогам игры. В полигоне я использовал текущий каталог, но мог бы вместо этого использовать класс FS, выяснить каталог со скриптами и использовать его полный путь вместо текущего пути "." (точка - текущий каталог). На тот момент использовать текущий путь казалось проще, кроме того на тот момент я вполне возможно не знал ещё, как пользоваться классом FS в полной мере, только и всего =) Gun12, т.е. для запуска надо нажать F5 или такую зелёную кнопочку со стрелочкой вправо на тулбаре, или из меню "Tools" выполнить команду "Go". Я правильно понял? =) а, с тех пор много воды утекло, и я уже выяснил, в чём была проблема. Вылет вызывало использование техники выдачи сообщения в лог get_console:execute("text"). Причём, что самое неприятное, вылет происходил не сразу, а позже, и иногда его не было. Поэтому я долго думал, что проблема в чём-то другом. Так что в общем проблемы нет, надо просто использовать вывод в произвольный файл через пространство имён io (благо в ЧН/ЗП оно уже есть). Это в общем и удобнее намного, поскольку можно выводить в разные файлы и в логе нет мусора. В модифицированном движке можно добавить нормальный вывод в лог (а не как побочную реакцию на ошибочную команду). Тоже будет работать.
  6. Artos, Эээ... два года как это уже сделал игра - это предметная область, которая даёт реальные задачи, решение которых и побуждает изучать Lua. Gun12, у меня просьба. Не мог бы ты завершить свой введение в SciTE и дополнить его краткой информацией о том, как можно запустить написанный скрипт. Вот ты написал: Написать где, в тексте документа? А почему консоль должна открыться? Что-то надо нажать? Попробуй представить себе, что аудитория нулевая и никаким сторонним багажом не обладает. И, если знаешь, то не мог бы подсказать уже для меня, как в рубордовской версии поставить точку останова?
  7. ziStam, В Notepad++ я для этой цели использую сортировку. Это меню TextFX -> TextFX Tools и там сверху группа команд "sorting". Одинаковые строки собираются в группы и сразу видно, что их не одна а больше. Если надо сделать такое во множестве файлов, то сначала файлы склеиваю. Обычно делаю это в Total Commander в два приёма. Сначала копирую файлы в отдельный каталог, переименовываю, заменяя имена на автонумерацию. Затем собираю в один инструментом скливания файлов из частей. Ну а дальше работаю с получившимся большим файлом в Notepad++. Может отдельные шаги можно сделать и проще, но думаю идею ты понял. Подобный подход удобен для массовой обработки, когда надо просмотреть очень много информации. В целом можно и проще. К примеру, просто ищешь в том-же Total Commander нужную секцию (если ты её знаешь), включив поиск "целого слова".
  8. В рубордовской версии SciTE так и не нашёл возможности ставить точки останова. Непонятно, как отлаживать программу. Кто-нибудь знает? Добавлено через 16 мин.: Artos, Извиняюсь, невнимательно читал. Я себе давно наладил тестовый полигон для запуска скриптов в игре без перезгарузки. Запуск в игре имеет свою ценность, поскольку скрипт тестируется именно там, где будет реально применяться. Gun12, Ощущаю себя исчадием модераторского ада ... Я не запрещал. Во-первых, я не могу ничего запретить, поскольку всего лишь куратор. Во-вторых, я сказал, что буду тереть бессмысленный флуд. То, что навалили здесь в самом начале, не содержало ни грамма информации, сплошное меряние ... редакторами. Добавлено через 15 мин.: Artos, А почему не хочешь сделать по-простому, с перебором диапазонов и проверкой на вхождение в них? На мой взгляд, это даже будет быстрее работать.
  9. Gun12, Я всё пытался понять, что же именно мне не нравится. После этого поста мысль наконец-то оформилась. Дело в том, что существенная часть подобных фишек создана и продвигается исходя из абсолютно ложной предпосылки, будто программисту нужна помощь при наборе программы. Отсюда появляются что-то вроде вставки даты или автозавершение блоковой синтаксической конструкции. Между тем, в реальной жизни программист проводит 9/10 времени отнюдь не создавая новый текст. Основное время занимает поиск ошибок, отладка, внесение изменений любого рода и с самыми разными целями: исправление, оптимизация, расширение возможностей и т.п. Часть "созидательных" фишек при этом бесполезны, часть - попросту будут мешать (в том числе и загромождая рабочее пространство). По-поводу end-ов. На самом деле мало-мальски опытному программисту не нужна помощь в завершении блоковых конструкций. Вот я к примеру выработал в себе привычку набивать первым делом пустую рамочную конструкцию уже очень давно. Руки пишут завершающую скобку или end просто на автомате. Я бы даже сказал, что попытки редактора сделать это за меня будут мне мешать, и я это по-любому отключу. Пока искал автоматический форматировщик текста Lua (так и не нашел, кстати) вдосталь начитался мнений типа "научись пользоваться табом и ентером, кретин, и не будет проблем с отступами". Примерно так и пишут, я не преувеличиваю. Между тем, я могу назвать как минимум три причины для использования такого инструмента: 1. Потеря форматирования при изменениях. Код может остаться корректным, но ручное проставление табуляций в километровом тексте может быть утомительно. 2. Возможность искать ошибки потерянных/отсутствующих скобок/завершителей. Такие ошибки легко вносятся при изменениях. Никакие инструменты этого не в состоянии предотвратить, а уже отформатированный код при этом даже в каком-то смысле скрывает ошибку. 3. Форматирование чужого кода. В реальной жизни приходится читать и использовать чужой код. В каком он может быть состоянии, не мне вам рассказывать. Исходя из сказанного, могу сформулировать перечень жизненно важных для программисткого редактора фишек: 1. Моноширинный шрифт 2. Подсветка синтаксиса 3. Поддержание текущей позиции табуляции 4. Изменение уровня табуляции фрагментов текста 5. Блоковое выделение (это обычно с зажатым Alt-ом) и операции с блоками - удаление, перемещение и пр. 6. Outlining (сворачивание текста) 7. Авторазметка (автоформатирование) текста по запросу Из этого перечня разве только п.3 относится к первичному набиванию текста и то имеет применение также и при редактировании. Остальное предназначено в основном для удобства работы с уже существующим кодом, в частности для лучшего его понимания. Вот этим программист и пользуется 90% всего времени. Остальное - вторично и стоит при первом знакомстве оставить за кадром. Добавлено через 51 мин.: Artos, Почему два? Возвращает индекс n, такой что "t[n] не равен nil, а t[n+1] равно nil". Т.е. такой, за которым идёт "дырка" в значениях. Одной вполне хватит. Однако, выходит так, что это правило не соблюдается для "таблиц, рождённых массивами". Т.е. к примеру в этом случае t = {1, 2, nil, 4} мы получим 4 в качестве длины. В принципе, это можно понять, если рассмотреть реализацию таблиц, описанную автором в статье The implementation of Lua 5.0. В каждой таблице есть часть "линейный массив" и часть"хэш-массив". При создании с помощью конструкции {a, b, c, d, e} очевидно всё попадает в часть линейного массива, а оператор длины видимо в этом случае оптимизирован и вместо перебора просто берёт длину массива. Если же создавать массив вразнобой, типа такого: t = {} t[4] = 4 t[2] = 2 t[1] = 1 то в этом случае элементы попадут в хэш-таблицу. Оператор длины сначала посмотрит линейную часть, ничего там не найдёт и затем уже начнёт перебирать оставшиеся элементы из хэш-части, а там уже чёстно найдёт разрыв в значениях и до индекса 4 не дойдёт. В общем всё логично, хотя и выглядит как недокументированная фича. Причём именно фича, а не баг, поскольку это даёт возможность таки перебирать элементы массива пусть и со значениями nil.
  10. Artos, Я рискну усомниться в жизнеспособности такой темы. Слишком узко. И какой ведь смысл? По идее, чтобы все отладочные методики были наконец-то собраны в одном месте. Так? Но там материала при всей полезности не больше чем на одну статью. Если этого до сих пор никто не сделал, то и при наличии такой темы всё равно никто не сделает. В теме будет в лучшем случае трёп не по теме, в худшем - просто уйдёт вниз за неактивностью.
  11. Эта ошибка никогда не связана с какими-либо файлами. Все файлы, которые движок сталкера пишет на диск, можно перечислить по пальцам одной руки: лог, сохранения, файл настроек. Что ещё забыл? Никаких проблем с ними ведь не возникает, не так ли? Проблема может быть в чём угодно. Такой вылет я видел много раз, и каждый раз причина была разная. Могу только предположить, что просто срабатывает общий механизм исключений, и где-то как-то передаётся код ошибки, который в ряде случаев видимо корректно не передаётся и остаётся каким-то: случайным или значением по умолчанию, что возможно соответствует вот этому сообщению. Ещё раз, это только предположения. Насчёт использования при решении проблем дампа или адреса вылета в стеке. Вообще-то можно использовать. Собственно, разработчики именно так и осуществляют поддержку. Им посылаешь дамп, где в том числе и эта информация - о месте вылета и прочее, содержимое регистров, стека, может сегментов данных, в зависимости от детальности дампа. У них есть эта же версия исполняемого файла и библиотек, причём с отладочными файлами и исходниками в придачу. Всё это вместе позволяет в точности восстановить момент вылета, увидеть функцию, где случился вылет и состояние окружения в этот момент. Увы, модостроителю большая часть этого богатства недоступна по причине отсутствия отладочных файлов *.pdb и тем паче исходников. При их отсутствии конечно место вылета всё равно есть и состояние окружения можно посмотреть, но понять что там и зачем уже не так просто. Сначала надо по сути делать реверсинг, что в общем непрактично для простой отладки банального вылета. Хотя как минимум один случай знаю из своей практики, когда так удалось забороть постоянный вылет.
  12. Artos, Вроде в общем случае никак. То что в Perl - это регулярные выражения, там возможностей гораздо больше. Была бы возможность заменить библиотеку в сталкере, можно было бы и регулярные выражения прикрутить. Библиотеки для Lua уже есть. С другой стороны есть ограниченная возможность делать такое в string.gsub. Там можно производить замену на один из вариантов, перечисленных в таблице. В этом случае найденный по шаблону элемент используется как ключ в таблице для получения значения, на которое заменяем. Не совсем то, что надо было, но именно при замене можно получить похожий эффект.
  13. Artos, Как мне помнится, не такая уж и куцая. Работа со стеком там в пространстве имён debug. По причине отсутствия этого пространства имён в версии сталкера этих возможностей там нет. Название языка Lua пишется именно так, с большой буквы. Это не аббревиатура, а имя собственное, означает на бразильском "Луна". Разработчики языка особенно настаивают именно на таком написании названия. Теоретически, поскольку Lua в составе сталкера сделан в виде динамической библиотеки, то можно пересобрать эту библиотеку из исходников и добавить туда то, чего не хватает.
  14. Artos, Не соглашусь по обоим пунктам. Это полная и в силу этого актуальная информация. Хотя разумеется полная лишь в том смысле, что там перечислено всё, что экспортировано. Конечно, описания там никакого, и потому называть это "help" было в каком-то смысле издевательством.
  15. Я всё же надеюсь, что здесь начнётся разговор про Lua. Пока говорим только про SciTE. Создаётся ощущение, что изучение Lua совершенно немыслимо без SciTE.
  16. Вот устанавливал себе SciTE по ссылкам с руборда. Сразу покритикую, пока не остыло: 1. Установщик требует прав администратора. На корпоративный компьютер поставить смог только частично и с бубном. Пришлось распаковывать установщик вручную, делать промежуточный командный файл с SET-ами и т.п. 2. Русская (как бы) версия имеет нелокализованный по умолчанию интерфейс. Как это изменить, не нашёл. 3. Настройки в виде текстового файла. Чтобы найти нужную опцию надо листать простыню из больше десятка страниц. Это шутка такая? 4. Окно About выглядит насмешкой, поскольку в нём собственно "о программе" нет ни слова 5. Мелочи, типа отсутствия на тулбаре кнопки поставить брейкпоинт, это вроде как и не недостатки, но смотря на п.3 (выше) это уже становится недостатком. 6. Да вот ещё, нет кнопочек закрытия на каждой вкладке. Очень неудобно.
  17. amik, Ты имеешь в виду структуру + локализацию? Слияние ничего не даст. Диалоги - это вообще по памяти копейки, да ещё и грузятся один раз за всю игру. Т.е. даже не просто один раз за загрузку, а один раз за запуск программы. Мне кажется, а ТЧ тоже анимации внешние для сталкеров, и только для монстров внедрённые в модель. Или ошибаюсь? С другой стороны, у меня есть подозрение, что здесь вопрос исключительно удобства, поскольку в памяти анимации для каждого визуала сидят отдельно, даже если одинаковые.
  18. Признаться, не думал, что так для всех важен редактор. Какое вообще отношение редактор имеет к языку? Lua же платформенно-независимый! Короче, от сего момента буду нещадно тереть любое упоминание о редакторах, не несущее конструктивной информации. Однако приветствуется: - перечисление дельных фишек конкретного редактора - приведение конкретной информации о настройках, ссылки на полезные мануалы, решение проблем и т.п. - вопросы в этом же ключе И повторяю вопрос. Знает ли кто, чем можно автоматически отформатировать Lua программу? Я не имею в виду поддержание текущего отступа, это тривиально. Я хочу как в Visual Studio, выделил фрагмент, нажал кнопочку, и мой фрагмент отформатирован. Причём, это не только красоты ради надо. Подобный инструмент безумно помогает искать потерянные/лишние концы блоков. Поскольку я потёр оригинальный пост break (погорячился, прошу прощения), то привожу ссылку на ру-борд-овский форум по SciTE здесь _http://forum.ru-board.com/topic.cgi?forum=5&topic=35160 потом, надеюсь, соберём всё в шапке
  19. Неоднократно поступали предложения создать тему для обсуждения Lua и вопросов, связанных с программированием на нём. Также регулярно возникают достаточно интересные дискуссии в теме "Справочник" а также в других темах, типа "Скриптование и спавн" или ковырялки. Народ говорит много интересного, но либо тема непрофильная (как справочник) и приходится это всё вычищать, либо интересное обсуждение уходит по треду далеко назад и скрывается за тоннами вопросов по конфигам и пр. Поэтому есть основания надеяться, что данная тема будет полезна. Здесь предлагается обсуждать язык Lua, его синтаксические особенности, производительность, приёмы использования стандартные и не очень. Также здесь предлагается постить примеры алгоритмов для решения разных достаточно общих задач, по возможности не сильно привязанных к игре. Естественно, поскольку форум пока ещё по сталкеру, привязки к игре не избежать. Также, полагаю именно здесь можно вести умные разговоры об оптимизации и всяких общих вещах, типа парадигм объектно-ориентированного программирования, обработки ошибок и технологий отладки скриптов, стиля оформления кода и "единственно правильного пути" в программировании, как вы его видите =)
  20. А вот же склероз! Колмогор делал на новые закладки, а на родные закладки инфопорции и так выдаются. Посмотри в теме справочника в посте про инфопорции.
  21. Shadows, через модификации движка. Колмогор ещё делал выдачу инфопорции по переходу на конкретную закладку. У статика прокрутки нет, на то он и статик. complex_mode кстати не отвечает за перенос, а только за то, чтобы работали вручную расставленные переносы.
  22. FANAT, ActivePerl - это среда выполнения для языка Perl, т.е. то, что надо для запуска acdc в случае, если он не скомпилирован, т.е. если ты пытаешься запустить файл с расширением *.pl. Если у тебя скомпилированный acdc, т.е. с расширением *.exe, то и его не надо.
  23. _Призрак_, Ты можешь получить это окно через MainInputReciever, когда оно уже открылось, но не можешь открыть штатными средствами.
  24. Gun12, Где я такое сказал? Artos, мне интересно, что ты будешь делать с этой функцией дальше. Вот ты проверил, что это массив. Но ведь это только говорит об упорядоченности ключей. А что насчёт значений? Ведь в качестве значений может быть что угодно: числа, строки, таблицы, пользовательские объекты. До какой степени ты будешь пытаться автоматизировать обработку?
  25. Gun12, Вообще говоря, перебор там таки есть, хотя и внутри операции размера. Эта операция для получения размера как раз и перебирает все элементы. Где-то я об этом в мануале читал. Хотя это разумеется не скриптовый перебор и не так уж затратно. Дальше, первая часть алгоритма так и не сможет определить наличие дырок в массиве в случае, как я приводил выше. В принципе не критично. Надо только не пользоваться ipairs и проверять на эти дырки при сохранении. Ну и наконец, идея с next целиком полагается на допущение, что при индексации часть таблицы с хешем проверяется после проверки части с линейным массивом. Иначе, как можно утверждать, что после последнего элемента массива идут элементы с хешем? А вдруг они в общей последовательности идут впереди? Понятно, что из общих соображения код сделан так, что сначала проверяется менее затратный линейный массив. Однако, при переборе ассоциативного массива в общем случае нельзя делать допущения о порядке элементов. Я обратил внимание, что модостроение вообще поощряет развитие хакерского склада мышления. Чтобы вы не обольщались этим утверждением, я считаю, что это совершенно губительно для нормального развития программиста.
×
×
  • Создать...