STALKER_Dragon 3 Опубликовано 24 Мая 2021 Поделиться Опубликовано 24 Мая 2021 Доброго времени суток. Задался тут вопросом: а что в сталкере происходит после смерти актора? Чисто теоретически, ничего не изменяется, можно даже сделать сделать проверку на смерть и какие-то действия NPC, если проверка вернула true. Из этого вытекает вопрос: а можно ли сделать респавн актора без загрузки сохранений? Покопавшись в скриптах, я выяснил, что за создание актора отвечают функции add_actor в файле db.script, a также скрипт actor_proxy.script. Кроме того, в мультиплеере респавн актора возможен. Как он там реализован? Применим ли этот механизм к синглу? Команды alife():release по отношению к актору, даже метвому, не работает. Что произойдет ,если скриптово удалить актора, а затем заспавнит по координатам? Ссылка на комментарий
naxac 2 421 Опубликовано 25 Мая 2021 Поделиться Опубликовано 25 Мая 2021 22 часа назад, STALKER_Dragon сказал(а): Что произойдет ,если скриптово удалить актора, а затем заспавнит по координатам? А что мешает проверить? Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Капрал Хикс 508 Опубликовано 25 Мая 2021 Поделиться Опубликовано 25 Мая 2021 Помогите разобраться, а то я забуксовал на ровном месте. Дано: скрипт использования предметов со звуками. Мне нужно следующее: при использовании определённого предмета и наличии двух инфопоршней проигрывать звук и выполнять функцию из другого скрипта, если поршней нет - не играть звук и спавнить предмет обратно в инвентарь (он съедобный, на классе антирада). Вот скрипт в упрощённом виде: Скрытый текст local tSound ={ cocacola = "scripts\\inv_drinking",item = "scripts\\inv_item" - предмет и звук для него } function using_items(obj) local sect = obj:section() local actor = db.actor if obj and tSound[obj:section()] then local snd = xr_sound.get_safe_sound_object(tSound[obj:section()]) if snd then snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 2.0) end end if obj then if sect == "item" then if has_alife_info("info_1") and - поршень 1 has_alife_info("info_2") then - поршень 2 script.final_action() - выполнить функцию из другого скрипта end else amk.spawn_item_in_inv("item") - спавн обратно в инвентарь end end end Сейчас без наличия инфопоршней предмет просто "съедается" и звук всё равно проигрывается.... Ссылка на комментарий
ARTLantist 14 Опубликовано 25 Мая 2021 Поделиться Опубликовано 25 Мая 2021 @Капрал Хикс убери end перед else, странно, что вылета нет, ибо их тут больше, чем надо, да и для else нет подходящего if. Если ты делаешь цепочку "если-иначе", то нужно писать так: if condition then action1 else action2 end Конечно у тебя предмет съедаться будет и не будет спавниться А на счёт проигрываемого звука: тебе его тоже нужно засунуть под проверку с инфопоршнями, ибо у тебя это выглядит так: если есть звук, то устанавливаем переменную и проигрываем этот звук. Тут же ожидать другого и невозможно) 1 Ссылка на комментарий
Купер 2 759 Опубликовано 26 Мая 2021 Поделиться Опубликовано 26 Мая 2021 (изменено) @Капрал Хикс, что-то наподобие такого. Не идеально, но должно сработать. Скрытый текст function using_items(obj) local sect = obj:section() local actor = db.actor if obj and tSound[sect] then local snd = xr_sound.get_safe_sound_object(tSound[sect]) --* раз уж выше кэшировали. if sect == "item" then --* отсекаем предмет по секции if has_alife_info("info1") and has_alife_info("info_2") then --* проверяем поршни script.final_action() -- выполнить функцию из другого скрипта snd:play_no_feedback(actor, sound_object.s2d, 0, vector(), 2.0) --* раз уж выше кешировали else amk.spawn_item_in_inv("item") --* иначе спавн обратно в инвентарь end else --* отрабатываем остальные элементы таблицы snd:play_no_feedback(actor, sound_object.s2d, 0, vector(), 2.0) --* раз уж выше кэшировали. end end end Вопрос к знатокам: 1. Насколько здесь необходимо вот это вот: local snd =... if snd then --* проверка на наличие звука??? snd:play_no_feedback() end 2. Потенциальную "дыру" при массовом использовании предметов и методе play_no_feedback только я вижу? play_at_pos с соответствующим обработчиком прерывания не разумнее ли использовать? Изменено 26 Мая 2021 пользователем Купер 1 Ссылка на комментарий
I am Dead 909 Опубликовано 28 Мая 2021 Поделиться Опубликовано 28 Мая 2021 Можно ли на OGSR Engine заблокировать какой либо слот по определённой функции не прибегая к db.actor.hide_weapon? Ссылка на комментарий
hArdplAyer22_22 0 Опубликовано 28 Мая 2021 Поделиться Опубликовано 28 Мая 2021 Вопрос к знатокам. Как очистить определенный инвентарный ящик по ID? То-есть, как, к примеру, определенным скриптом удалить все предметы из ящика в деревне новичков? Ссылка на комментарий
Manool 145 Опубликовано 28 Мая 2021 Поделиться Опубликовано 28 Мая 2021 (изменено) 2 часа назад, hArdplAyer22_22 сказал(а): Как очистить определенный инвентарный ящик по ID? Вот так можно - Скрытый текст function clear_box( box_id ) -- ID ящика, который нужно очистить for a = 1, 65535, 1 do local sobj = alife():object( a ) if sobj and sobj.parent_id == box_id then alife():release( sobj, true ) end end end Причём, неважно, в онлайне ящик или нет. Изменено 28 Мая 2021 пользователем Manool Объединённый Пак OGSR Engine Ссылка на комментарий
hetrikWHY 34 Опубликовано 30 Мая 2021 Поделиться Опубликовано 30 Мая 2021 Нужно сделать проверку на наличие детектора "Отклик" в руках. Это возможно? active_item:section() == "detector_simple" не работает, хотя active_item:section() == "wpn_pm" - вполне себе Игра: ЧН (с OGSM) UPD: active_item:clsid() == clsid.device_detector_simple и active_item:clsid() == clsid.detector_simple_s тоже не работают. Хотя например active_item:clsid() == clsid.wpn_pm_s проверку проходит Все эти device_detector_simple, detector_simple_s и wpn_pm_s взяты из m_netpk.ltx Ссылка на комментарий
_ХоЗаР_ 47 Опубликовано 31 Мая 2021 Поделиться Опубликовано 31 Мая 2021 @hetrikWHY В ЗП есть метод active_detector. Используется аналогично методу active_item. Думаю он есть и в ЧН.@Norman Eisenherz Давным - давно, (может пол года назад) Когда я переносил сортировку инвентаря из DMX мода на ЗП (Используя только оригинальный движкок, аля челенж такой). Я делал так. Окно на рендер отправлял в текущем вызове. В основном XML инвентаря убирал фон, и рендерил его из фейкового окна. Скрытый текст 6 ГБ ОЗУ DDR3 1098 мГц (Разносорт) Процессор Intel Xeon E5420 4/4 2.5 ГГц Видеокарта Gigabyte GeForce GT 240 512 МБ GDDR5 (Samsung) DirectX v10.1 Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 31 Мая 2021 Поделиться Опубликовано 31 Мая 2021 Привет! Задаю анимацию в path_look, проигрывается. Берём анимацию сидения на стуле. А как по высоте анимку подогнать под стул? Выходит что силячий нпс парит над стулом. Как ни ковырял координаты - все никак не выходит. Или высота строго задана в самой анимки и идёт отчёт высоты строго от вертекса на полу? Ссылка на комментарий
AndreySol 215 Опубликовано 1 Июня 2021 Поделиться Опубликовано 1 Июня 2021 @_Sk8_AsTeR_ Видимо проще подобрать стул под высоту анимации. 26.05.2021 в 05:21, Купер сказал(а): Потенциальную "дыру" А где ты ее увидел, эту дыру? Внутри play_no_feedback использует все то-же, что и play_at_pos, просто назначение ф-ций разное. Ссылка на комментарий
Купер 2 759 Опубликовано 1 Июня 2021 Поделиться Опубликовано 1 Июня 2021 (изменено) @AndreySol, отчасти гипотетическая, однако, вполне возможная ситуация: последовательное использование нескольких разно озвученных предметов + достаточная продолжительность самой озвучки. Что будет происходить со звуками? play_no_feedback работает же по принципу "выстрелил - забыл": если звук запущен, он будет в любом случае проигран до конца. Тот же play_at_pos, в свою очередь, позволяет проконтролировать наличие звука в игре. Т.е. что-то наподобие этого: --* если старый звук играл, прерываем его воспроизведение. if snd and snd:playing() then snd:stop() end --* далее по тексту: запускаем новый. Изменено 1 Июня 2021 пользователем Купер Ссылка на комментарий
AndreySol 215 Опубликовано 1 Июня 2021 Поделиться Опубликовано 1 Июня 2021 @Купер Ну так используй каждую ф-цию по назначению - и все будет как надо. Ведь play_no_feedback для того и создана, чтоб запустить воспроизведение и забыть. И еще раз - загляни в исходники, в реализацию обоих ф-ций, сразу поймешь что и как... Ссылка на комментарий
Купер 2 759 Опубликовано 1 Июня 2021 Поделиться Опубликовано 1 Июня 2021 @AndreySol, и я там увижу вполне очевидные вещи . Это больше к @Капрал Хикс-у на предмет обдумывания о целесообразности использования. @_ХоЗаР_, active_detector - нема такого в ЧН. 1 Ссылка на комментарий
Капрал Хикс 508 Опубликовано 1 Июня 2021 Поделиться Опубликовано 1 Июня 2021 1 час назад, Купер сказал(а): на предмет обдумывания о целесообразности использования. Пока вполне подходит при употреблении многих предметов за раз. Ссылка на комментарий
phalcor 59 Опубликовано 6 Июня 2021 Поделиться Опубликовано 6 Июня 2021 Добрый день! Есть ли простой метод определить condition оружия для серверного объекта? Что-то аналогичное клиентскому методу obj:condition() Движок - ОП 2.1 Ссылка на комментарий
AndreySol 215 Опубликовано 6 Июня 2021 Поделиться Опубликовано 6 Июня 2021 @phalcor Использовать модуль для работы с нет-пакетами от Artos'а, к примеру. Там все просто. 1 Ссылка на комментарий
phalcor 59 Опубликовано 6 Июня 2021 Поделиться Опубликовано 6 Июня 2021 (изменено) @AndreySol Теоретически да. Делаю так: Скрытый текст function ph_test_netpk() local item, cl_sid, sect, pk, data for i = 1, 65534 do -- Ищем вообще все существующие объекты в игре item = alife():object(i) --получаем серверный объект if item then cls_id = item:clsid() sect=item:section_name() if iAmWeapon[cls_id] and config:line_exist(sect, "ammo_class") then --НЕТ-ПАКЕТЫ pk = get_netpk( item, 1 ) if pk and pk:isOk() then data = pk:get() log("К="..data.condition) end end end end --for log("It's OK!") end Однако получаю вылет вот такой: Скрытый текст [06.06.21 16:42:30.497] [LUA] SCRIPT RUNTIME ERROR [06.06.21 16:42:30.497] [LUA] z:\op21-repack\gamedata\scripts\m_netpk.script:1231: attempt to index local 'uppk' (a nil value) [06.06.21 16:42:30.497] [06.06.21 16:42:30.497] FATAL ERROR [06.06.21 16:42:30.497] [06.06.21 16:42:30.497] [error]Expression : fatal error [06.06.21 16:42:30.497] [error]Function : CScriptEngine::lua_error [06.06.21 16:42:30.497] [error]File : script_engine.cpp [06.06.21 16:42:30.497] [error]Line : 79 [06.06.21 16:42:30.497] [error]Description : <no expression> [06.06.21 16:42:30.497] [error]Arguments : LUA error: z:\op21-repack\gamedata\scripts\m_netpk.script:1231: attempt to index local 'uppk' (a nil value) Изменено 6 Июня 2021 пользователем phalcor Ссылка на комментарий
vader_33 136 Опубликовано 6 Июня 2021 Поделиться Опубликовано 6 Июня 2021 @phalcor так попробуйте local tbl = netpacket:get(item) local cond = tbl.condition Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти