Malandrinus
Жители-
Число публикаций
1 930 -
Регистрация
-
Последнее посещение
-
Дней в топе
13 -
AMKoin
160 [Подарить AMKoin]
Весь контент пользователя Malandrinus
-
Справочник по функциям и классам
Malandrinus ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Monnoroch, я в своё время по использованию никакой разницы не нашёл, хотя думал, что "wq" означает что-то вроде "without quotes". Может просто терпения не хватило найти разницу. Однако обе функции совершенно точно убивают пробелы и табуляции, а в ltx файле не бывает многострочных параметров, так что прочитать с их помощью длинную строку не получится. Если нужна длинная строка надо использовать связку с xml и translate_string. -
Справочник по функциям и классам
Malandrinus ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Monnoroch, Это всего лишь строки. Всё, что между квадратными скобками - это строковый литерал. Игнорируются все специальные символы. Переносы строк, табуляции и пр. интерпретируются без всяких изменений. Собственно длинный комментарий: --[[ ... ]] - это на самом деле тот-же короткий, просто два минуса комментируют "длинную строку", заключённую между [[...]] В качестве открывающей и закрывающей скобок можно использовать также скобки вида [===[...]===], где количество знаков "равно" - это так называемый "уровень" строки. Нужно это с единственной целью включать в строки также и возможные последовательности ']]', ']=]' и т.д. Просто выбираете уровень, для которого закрывающая скобка уж точно в вашей строке не попадётся. Добавлено: Выше я не совсем понятно написал. Специальные символы игнорируются не в том смысле, что пропускаются, а в том смысле, что не разбивают длинную строку. Т.е. попросту попадают в строковый литерал без изменений. К примеру, здесь в приведённой строке: [[начало строки продолжение на новой строке продолжение на новой строке после символа табуляции]] будут два символа переноса и один символ табуляции, что можно было бы иначе сделать так: "начало строки\nпродолжение на новой строке\n\tпродолжение на новой строке после символа табуляции" -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Darien, hud:wnd():SetWidth(100) Я бы функцию примерно так написал. function my_hud() local hud1 = main_hud:GetCustomStatic("hud_wpn") or main_hud:AddCustomStatic("hud_wpn", true) local hud = main_hud:GetCustomStatic("p_hud_wpn") or main_hud:AddCustomStatic("p_hud_wpn", true) hud:wnd():SetWidth(100) hud:wnd():SetHeight(10) end -
Вообще-то объекты вовсе не обязательно различать по классу. Есть ещё куча способов отличать их друг от друга. Если классифицировать способы "по убыванию общности", то получится примерно так: 1. самое глобальное различие - по классу 2. менее глобально - по секции (с одним классом могут быть разные секции) 3. ещё менее глобально - по story_id или по id где-то между 2 и 3 лежит различие по наличию инфопоршена. Все прочие способы классификации сами уже классификации не поддаются =) Полагаю, если надо как-то различать аномалии, то в данном случае надо ввести дополнительное различие по секции или только по секции вместо классов. Не так уж много этих аномалий.
-
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Что за статья? Вот как раз после таких примеров и начинают все пихать всё в апдейт. Можно подумать, что в биндере нет других методов. Для начала, сам вопрос звучит странно. Что вообще значит "сделан через биндер"? Да ещё при этом требуется "одиночное выполнение". Это как? Я лично не понял, о чём идёт речь. Если требуется одиночное выполнение, то сперва надо выяснить, а по какому собственно поводу надо что-то выполнить, а уж потом выяснять, куда этот код помещать и как. Если, к примеру, мне что-то принципиально надо выполнить один раз в произвольный нужный мне момент времени, то я пользуюсь своим тестовым полигоном, что позволяет мне вообще не лезть в скрипты игры. Если надо привязать выполнение к некоему событию, то надо искать соответствующий колбек. Апдейт я чаще всего задействую для некоего отладочного мониторинга, когда надо что-то постоянно отслеживать. И то это можно сделать из под того же полигона с использованием fastcall-ов опять же не влезая в существующие скрипты. fastcall обычно не занят и его можно и навесить на актора и снять "со стороны". -
До определённого момента класса clsid не существует. В частности, его ещё нет в самом класс-регистраторе. Если проблема в этом, то надо добиться того, чтобы код инициализации сработал позднее. Добавил: Да, точно. Причина именно в этом. Вероятно поэтому в ТЧ функции типа IsMonster и реализованы так убого. В ЗП эту проблему решили как положено: код инициализации помещён в start_game_callback. Срабатывает не сразу, поэтому clsid уже существует.
-
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Gonarh, не может =) Период апдейта от 40 мс до 1 с. Это зависит от растояния. Чем дальше от актора, тем реже. Поскольку актор сам от себя близко, то его апдейт вызывается чаще всего, а именно с периодом 40 мс. Могут быть задержки в том числе и от слабого компа, но чаще не будет. Если надо чаще, то есть коллбек fastcall. Но там тоже частота не выше определённой. Разве что ты знаешь, где можно подкрутить частоту апдейтов. Я вполне допускаю, что это возможно. -
Разница есть, если my_class() создаёт новый объект. В этом случае self будет всякий раз новый. Добавлю свои пять копеек во флейм. Поддерживаю общее мнение насчёт невозможности совершенно новой разработки. Призывать мне верить не буду, в качестве аргумента могу предложить взглянуть на заглавную страницу нашего уважаемого портала в раздел "новости". Ещё могу предложить вспомнить о судьбе Netscape Navigator-а (если о таком кто-то ещё помнит). Его помнится на каком-то этапе тоже решили с нуля переписать. Байтораздирающее зрелище было =) По поводу переноса на новый движок. По-моему - это почти нереально. Со скриптами будет проблема в основном только с окошечной частью. Остальное вроде как не сильно изменилось. Но это же не всё. Есть ещё объекты из all.spawn, модели, анимации? Фактически - это будет новая разработка (см. выше). Однако, что вам на самом деле не хватает - это технического средства координации усилий. Я имею в виду кодовый репозитарий. Полно же халявных хостингов для того-же SVN, и пользоваться этим совсем не сложно.
-
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Green Stalker, Gun12, Darien, вы хоть понимаете, что апдейт актора вызывается 25 раз в секунду?! Как можно ставить туда действие, которое за игру сработает один раз? -
Прицеливание можно отловить по изменению device().fov ствол в активном слоте - db.actor:active_item() состояние - item:condition()
-
[CoP] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Kenny, это зашито в движок, как и весь диалог инвентаря. Не получится. Вроде как в ТЧ ещё была возможность получить активный диалог. Тогда можно попытаться прицепить к нему свои обработчики событий (хотя я не уверен, что это возможно. Похоже, никто этого не делал). Но в ЗП такой возможности нет вовсе. -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
level.spawn_phantom(vector) создаёт случайного фантомного монстра в указанной позиции. Монстр бежит к ГГ и добежав, исчезает. -
Shadowman, sapsan, крайне не рекомендуется пользоваться магическими числами, как это сделано в примере выше. Мне точно известно, что константы из класса/перечисления clsid отнюдь не постоянны. При добавлении в class_registrator новых сетов новые идентификаторы могут втыкаться в совершенно произвольное место и, таким образом, смещать существующие. Логики назначения я не понял, хотя, если честно, сильно и не искал. Не обязательно в этом случае, но это может стать причиной ошибок. И да, так проверять совершенно недопустимо. Надо примерно так, как это делается в функции IsMonster (в ЗП версии) local anomaly_classes = { [clsid.zone_electra_s] = true, -- <<== никаких магических чисел, только именованные константы !!!! [clsid.nogravity_zone] = true, и т.д. } function IsAnomaly(obj) return anomaly_classes[obj:clsid()] == true end Код понятнее, ошибок меньше и работает быстрее.
-
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Не понятно. Это насчёт звуков? Почему нельзя извлечь их из игровых архивов? -
Struck, не совсем понятно, что за текстура. Искал-искал, но так и не нашёл. Также не понятно, что требуется. Снять координаты отдельной иконки/картинки? Так это вроде и так можно сделать. Сначала подгоняем сетку, затем выделяем отдельную ячейку и меню "Правка -> Информация о выделении для XML" Я обратил внимание, что в ЗП появилось много новых размеров иконок. Если кому не лень, не могли бы составить списочек сочетаний? Я бы сделал небольшой апдейт с новыми предустановками для сетки.
-
[CoP] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Kirag, Так вроде у ствола может быть только один прицел/подствольник/глушитель. Это прописано в конфигах и в визуале. WodkaGT, да, действительно. Я малость отстал от жизни. Интересно, аддоны как и раньше исчезают при установке? -
Shadowman, Сравнивать таблицы можно, но без дополнительных усилий они сравниваются на равенство ссылок. Это означает, что равна таблица будет всегда и только самой себе. Чтобы сравнивать "по смыслу", надо вписать таблице мататаблицу с оператором сравнения. Как-то так: local t1 = {} lcoal t2 = {} log(tostring(t1 == t2)) -- вернёт false t1.a = 3 t2.a = 3 local mt = {} mt.__eq = function(op1, op2) return op1.a == op2.a -- сравниваем по содержанию end setmetatable(t1, mt) setmetatable(t2, mt) log(tostring(t1 == t2)) -- вернёт true Пример упрощённый, но рабочий. И надо понимать, что никакой выгоды по скорости я не имею. Просто сделал синтаксическую обёртку для своего кода сравнения.
-
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Но губами то шевелит, я помню. Ты тоже думаешь, что это смоделенный кусок того же уровня? Я попытался в all.spawn поискать, но тоже не нашёл. Моя мысль была, что это должно проявляться где-то в скриптах. Дополнение: Нашел я Сидора. Значит так. Телепорт отправляет ГГ на точку пути с именем "aes2_teleport_walk_exit_trader". Там в свою очередь стоит рестриктор. Имя его "aes2_space_restrictor_trader", координаты: -247.054550170898,-18.7832088470459,-134.401412963867 При попадании в него запускается звук и отыгрывается анимация у физического объекта с визуалом Сидора. Объект имеет имя "aes2_physic_object_0002". Секция "physic_object". Координаты: -244.721908569336,-18.7780876159668,-133.974792480469 story_id = 1118 Запуск анимации выполняется функцией xr_effects.set_sidorovich_animation -
[SoC] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Если кто помнит, на локации с ЧАЭС был момент, когда ГГ мотается по телепортам и его заносит к Сидору. Знает кто, как это реализовано? Это движковая фича или скриптовая? Не мог ведь актор перенестись на другую локацию, для этого загрузка нужна. Или таки переносился? -
Формат файла level.ai, в котором хранится сетка уровня, подразумевает, что она выровнена по координатам. Иначе быть просто не может. Если в двух словах, то там задаётся прямоугольный параллелелпипед (бокс), ограничивающий пространство сетки на уровне, задаётся шаг сетки по X и Z. Шаг по Y неявно определяется как высота бокса разделить на 65536. Само положение узла сетки задаётся как два целых числа: номер дискретного уровня по оси Y и упакованный номер ячейки на плоскости XZ. Т.е. на плоскости XZ ячейка сетки может быть только одним из элементов прямоугольной матрицы, строго ориентировнаной по осям X и Z. Вот что я не понимаю, это почему на картинке сетка не совпадает с осями координат? Или меня зрение подводит?
-
[CoP] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
кровоSTALKER, Попробуй так. Помещаешь это в actor_binder:net_spawn if level.name() == <имя уровня> then level.add_pp_effector(<имя постэффекта>, <какой-либо номер>, true) end -
Справочник по функциям и классам
Malandrinus ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Сегодня опишу пару мелких, но полезных классов. -
[CoP] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
Добрался до компа с игрой и проверил фишку со скриптом уровня. Не смотря на слухи, что из финальной версии это вырезали, фишка работает. Однако! 1. Это колбек на заход на уровень. Срабатывает при первом спавне ГГ на уровне и последующих заходах. Если сохраниться, то при загрузке НЕ выполнится. Так что для вышеозначенной задачи запуска эффектора не годится. Там надо, как я говорил раньше, использовать колбек на спавн из биндера актора. 2. В параметре script указывается не функция (как в большинстве случаев), а файл, точнее даже файлы через запятую. При запуске выполнится всё, что в файле в глобальной области а также функция main. Совершенно археологическая вещь в стиле билда 1935, но в общем, может быть полезно. -
Влад, поставь отладочные выводы в консоль и выяснишь, где торомозится. В твоём коде слишком много всего, кроме окна. Рекомендую воспользоваться моим тестовым полигоном, которой я описывал здесь. Отлаживать фрагменты кода станет проще.
-
[CoP] Ковыряемся в файлах
Malandrinus ответил на тему форума автора Halford в Скрипты / конфиги / движок
кровоSTALKER, а я не понял, что именно ты не понял. Вот дополнительная идея. Видел где-то, что можно зарегистрировать колбек непосредственно на уровень так. В файле level.ltx конкретного уровня прописываем: [level_script] script= <выполняемая при заходе на уровень функция> В своём скрипте вызываешь эффектор и ставишь ему зацикливание.
- [ЧН] 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
- ...и другие моды