-
Число публикаций
1 644 -
Регистрация
-
Последнее посещение
-
Дней в топе
31 -
AMKoin
16,816 [Подарить AMKoin]
Весь контент пользователя Kirgudu
-
[SoC] Ковыряемся в файлах
Kirgudu ответил на тему форума автора Halford в Скрипты / конфиги / движок
@Balavnik этот метод возвращает любой серверный объект, вне зависимости от наличия или отсутствия родителя. -
Обновление от 2025-03-01 Исправлена критическая ошибка: при активном показе на худе отладочной информации (по умолчанию клавиша "K") получение любого хита приводило к полному зависанию функционала Инструмента. Такая ошибка наблюдалась на платформе ОП-2.2, однако могла воспроизводиться и на других. Обновлены все конструкторы и готовые комплекты.
-
Я не большой знаток ЗП, может там и есть специализированные методы работы с поясом. Но в ТЧ и ЧН я действовал бы одним из следующих двух способов (подойдёт и для ЗП, конечно, но может на этой платформе существует более простой подход). Способ простой, но ресурсоёмкий. В модуле bind_artefact в методе artefact_binder:update() проверять, есть ли родитель у клиентского объекта артефакта (функция obj:parent()) и равен ли он id актора. Если да, запускается скрипт, определяющий наличие предметов на поясе с помощью спавна невидимого объекта-разделителя (легко ищется поиском по форуму). Если id одного из предметов совпадает с id артефакта, update которого сейчас работает - прибавляем счётчик времени на поясе и сохраняем значение в свойствах артефакта (net-пакет или pstor объекта). Способ посложнее, но с на порядок меньшей нагрузкой на движок. Когда артефакт может у нас появиться на поясе или быть удалённым из него, точнее, какие сопутствующие события мы можем отследить? Первое, что приходит в голову - это on_item_take и on_item_drop. Второе - это когда предмет уже в инвентаре, но мы перемещаем его между собственно рюкзаком и поясом. Это отследить без модификаций движка сложно, но у нас есть событие закрытия инвентаря, а для надёжности можно добавить проверку и при открытии. Так вот, при этих четырёх событиях мы запускаем функцию проверки предметов на поясе, упомянутую в способе первом, и для всех найденных на нём артефактов активируем счётчик времени, а для тех, что были на поясе ранее, но теперь убраны - деактивируем. Данные об активации счётчика времени и значение самого счётчика можно сохранять в свойствах самих артефактов по факту их перемещения в/из пояса, а прибавлять счётчик - всё в том же методе artefact_binder:update() конкретных артефактов.
-
@aka_sektor 5-6 тыс. в месяц, вряд ли что-то изменилось. Мур летом подробно описывал в своём объявлении. Многовато, конечно, для регулярных трат не на себя. Надеюсь, месяц-другой мы в этот раз компенсировали совместными усилиями. А на будущее рекомендую таки разместить на постоянной основе объяву с предложением о поддержке сайта. Ничего плохого в этом, как мне кажется, нет.
-
Обновление Инструмента от 2025-02-08 1. В подразделе Персонажи раздела Объекты добавлена возможность создать раненого НПС. 2. Во всех разделах всем текстовым полям, предполагающим ввод только целых или дробных чисел, добавлен автофильтр, не позволяющий вводить другие символы. Обновлены все конструкторы и готовые комплекты. Хранилище прежнее, ссылка в шапке темы. Приятного использования!
-
[SoC] Ковыряемся в файлах
Kirgudu ответил на тему форума автора Halford в Скрипты / конфиги / движок
@Balavnik по информации из этого конфига движок создает в памяти свою табличку соответствия числовых значений story_id их строковым синонимам и помещает её в публичный класс story_ids, таким образом ты получаешь возможность использовать в скриптах и конфигах не только числа, но и элементы перечисления, например: alife():story_object(192) равно alife():story_object(story_ids.gar_exit_to_agroprom_01) -
@Pavel_2000 в ЧН и ЗП колбэк bind_crow.crow_binder:death_callback вполне себе работает. В ТЧ - наверное, подключать примерно аналогичный биндер.
-
Налицо ошибка объявления переменной. В таком виде движок ничего не знает о том, что sil_items - это таблица, и считает, что это простая переменная, значение по умолчанию которой - nil. Индексировать действительно нечего. Чтобы исправить ситуацию, достаточно в первой строке написать так: то есть присвоить начальные значения переменным явным образом.
-
Удивительно, но это уже пятнадцатый новый год, который я буду встречать здесь. Кто бы мог подумать в далёком уже 2011 году, что я смогу и - главное! - захочу провести на форуме столь долгий срок, однако это произошло. Форум, вы, его авторы и случайные читатели, спрашивающие и отвечающие, старожилы и новички, ушедшие, увы, в память и только написавшие первый пост - все за эти годы стали мне вторым домом, уходить надолго из которого не хочется совершенно. Так пусть у каждого из жителей этого дома жизнь в наступающем году будет полная чаша! И пусть новый путь, который с наступлением полуночи у каждого из вас, смею надеяться, начнётся (в чём бы он ни выражался) - пусть этот путь будет добрым! С новым 2025 годом!
- 29 ответов
-
- 21
-
-
-
Понятно. Это те же яйца, только сбоку. В SRP взяли тот функционал, что я описал выше, и перенесли в настройки группировок. Так действительно удобней, поскольку для небольшого редактирования достаточно изменить только вынесенный в файлы конфиг группировки, а не пересобирать all.spawn, в котором находятся настройки смартов. Но по своему действию и та и эта реализации практически идентичны: оба параметра влияют на построение путей отрядов при войне группировок. Единственное, чтобы заработал вариант SRP, потребуются ещё и сопутствующие изменения в симуляционных скриптах, на ванильном ЧН не взлетит.
-
@ZeeK точно ничего не перепутал, есть пример? Насколько я помню, в классическом ЧН нет такого параметра у группировок. Есть параметр forbidden_point у смартов, который влияет на построение пути отрядов в войне группировок (да, можно запретить посещение точки отрядами определённой группировки), но это smart_terrain и sim_board.
-
@Pavel_2000 если со всеми проверками "на дурака", то примерно так: function delete_af(actor, npc, p) if type(p) == "table" then -- проверяем, что параметр передан и имеет табличный тип local story_id = p[1] -- присваиваем story_id из параметра if type(story_id) == "string" then -- но если передана строка, то story_id = tonumber(story_id) or story_ids[story_id] -- пробуем превратить строку в число или получить числовой story_id из штатного перечисления по его наименованию end if type(story_id) == "number" and story_id > 0 then -- проверяем, что story_id найден, имеет числовой тип и больше нуля local lc = alife():story_object(story_id) -- ищем объект по story_id if lc ~= nil then -- проверяем, что объект найден alife():release(lc, true) -- производим удаление объекта end end end end Использовать так: %=delete_af(af_mahovik_1)% или так: %=delete_af(111)% Это, разумеется, сильно избыточный вариант, который полностью исключает вылет, если передано что-то не то. Но если уверен в том, что пишешь в логике, скрипт можно и сократить.
-
Потому что так написан движок. Метод серверного объекта :name() существует, а метод того же объекта :id() - нет, вместо него числовое свойство .id. На это тебе даже лог намекает: И если в данном случае ты напишешь log1(""..wpn.id), то будет тебе счастье.
-
S.T.A.L.K.E.R. 2: Сердце Чернобыля - Предрелизная тема
Kirgudu ответил на тему форума автора
LeonserGT в S.T.A.L.K.E.R. 2: Сердце Чернобыля
И если с момента появления предоплаченной игры в доступе прошло не более 14 дней. -
[SoC] Ковыряемся в файлах
Kirgudu ответил на тему форума автора Halford в Скрипты / конфиги / движок
В ЧН и ЗП, а также в модифицированных движках или расширителях. В оригинальном ТЧ нет поддержки методов IO. -
@monk я в скриптах подсказал и сделал что мог, проверил: story_id назначается как надо, ошибок нет. Однако после присвоения story_id там действительно идёт сбой логики. Вот я и подумал: может, Васяну ты в процессе своих экспериментов что-то в профиле нахимичил, спец. логику, флаги или ещё что-либо, что позволяет ему такое улучшение игнорировать (в хорошем смысле). Я такого не помню, но я-то как раз только в скрипты и лез, оставляя остальное на тебя.
-
У серверного объекта position является свойством, а не методом (функцией). Выполнение будет приводить к ошибке, как у тебя, тогда как правильное написание будет таким: if zone and zone:inside(obj.position) then
-
Если только m_timers от того же Артоса на OGSR переделать... Вот только зачем? 5 лет назад уже был предложен простой и действенный способ подменить хранилище se_stor Артоса на вариант из OGSR, при этом не меняя ни строчки кода в использующих хранилище скриптах. Внутри модуля таймеров вызываются глобальные GetVar и SetVar, которые можно подменить ровно таким же способом. @Stalkersof ничего сложного в работе с таблицами в OGSR нет, информации достаточно даже той, что представлена в официальном Wiki. Вот такой код выполнится без ошибок (проверил только что за 5 минут): local xvars = get_stored_vars() xvars.items_podobral = {} xvars.items_podobral[1] = { section = "111", rang = 1 } xvars.items_podobral[2] = { section = "222", rang = 2 } xvars.items_podobral[3] = { section = "333", rang = 3 } Но далее надо помнить, что любые таблицы в хранилище размещаются не как таблицы, а как значения с типом "userdata", даже сразу после первичного присвоения. То есть по сформированной выше таблице, например, не получится итерироваться: for k,v in pairs(xvars.items_podobral) do -- do something end такой код вызовет ошибку вида «"userdata" не является таблицей». Не получится использовать table.insert и table.remove, не выйдет посчитать кол-во элементов #xvars.items_podobral и так далее, то есть совершить любое действие, которое доступно для стандартных таблиц. Чтобы работать с таблицей, записанной в хранилище, необходимо её сначала конвертировать в понятный для lua вид: local t = xvars.items_podobral() -- выполнить одноименный метод -- после выполнения переменная t содержит в себе стандартную таблицу Но вот если требуется переприсвоить какой-то элемент таблицы, это можно сделать посредством прямого доступа, без конвертирования: xvars.items_podobral[2] = "новое строковое значение" В общем, всё необходимое описано на оф. ресурсе. Сверх этого рассказать что-то сложно. Пробуй, экспериментируй.
-
Поделиться текстом ошибки в голову, видимо, не приходит? Какая ещё, в таком случае, требуется подсказка, если она уже дана?
-
@Stalkersof вылет может быть и не связан с приведённым кодом, по крайней мере я в нём ошибки не вижу. А пример уже давали ранее, целый набор функций для работы с этим хранилищем:
-
@Stalkersof можно использовать SCRIPT_VARS_STORAGE
-
Скорее всего в использованном модуле m_netpk. Предположу, что взята версия от 2017 года, что выкладывалась тут неоднократно, в том числе мной, а эксперименты проводятся на платформе ЧН или ЗП (но не ТЧ). Есть в ней один авторский недосмотр: для класса net_se_actor использован конструктор function net_cse_alife_creature_actor:__init(obj,mode), вероятно взятый копипастом из предыдущего одноимённого класса. Попытка создать экземпляр класса net_se_actor (при чтении нет-пакета актора) очевидным образом должна завершиться ошибкой. Решение простое: классу net_se_actor должен соответствовать конструктор funstion net_se_actor:__init(obj,mode). Нужный код уже давно можно найти в разных модах (не помню, у кого первого заметил соотв. правку), а вот сделать аналогичную замену в теме "Сборочный цех" я почему-то забыл. Исправляюсь. Свежую версию m_netpk можно скачать здесь:
-
У меня работает: Chrome v130.0.6723.117 64bit.
-
@imcrazyhoudini скинь, конечно, но я доберусь до проверки не ранее, чем в воскресенье, и не гарантирую, что смогу помочь. Нет, чисто со скриптовой точки зрения я проверю, что, например, story_id присваивается правильно и существует далее. А вот с логикой не особо в ладах, вряд ли получится понять, что там может ломаться. С этим к другим специалистам.
-
Это же просто строки, если правильно помню. Как они могут давать вылет при определении типа? Но вообще интересный вопрос, надо будет поэкспериментировать как-нибудь.
УЧИМСЯ МОДДИНГУ
ИГРАЕМ В МОДЫ НА ТЧ
ИГРАЕМ В МОДЫ НА ЧН И ЗП
- [ЧН] 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
- ...и другие моды
ПОЛЕЗНОЕ И РАЗНОЕ