div 1 Опубликовано 21 Декабря 2023 Здравствуйте. Каким образом можно поднять живого npc над поверхностью локации? Для actor есть возможность изменять координаты через set_actor_position, для npc я такой функции не нашел... set_const_force применить к живому npc тоже нет возможности, так как у живого npc:get_physics_shell() == nil :( Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 21 Декабря 2023 (изменено) @Kirgudu не знаю почему, но не получилось даже с примером из m_netpk > readme_m_netpk.txt: У меня версия ТЧ 1.0004. Файлы из архива я разложил по папкам, дописал в конце функции start_game_callback в _g.script строку: m_netpk.attach(), тестирую так: Полный код функции test_abstract() из readme_m_netpk.txt скопировал в amk_mod.script, и вызываю ее из функции restore_sun(), где выводится сообщение от команды AMK TEAM при старте новой игры, но вентилятор не переносится Хотя условия "if sobj then" и "if pk:isOk() then" выполняются - я проверил. Пробовал еще второй вариант с установкой колбэка с функцией, что есть в коде, но тоже не помогло @Kirgudu , status для обоих вариантов тоже имеет значение true Как еще можно найти возможную причину? Изменено 21 Декабря 2023 пользователем div Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 21 Декабря 2023 (изменено) @Kirgudu ,вы про: Цитата Для уже существующих объектов в игре: требуется после задания изменений свойст объекта, перевести объект в оффлайн и обратно в онлайн, что модулем делается автоматически. Изменения вступят в силу в момент выхода объекта в онлайн. ? Я делал несколько тестов: вызывал функцию test_abstract() из бункера и возле Волка, так же после этого сохранялся и загружал это сохранение, но вентилятор все равно на месте... Возможно, я не совсем понимаю, что нужно сделать, чтобы изменить статус Изменено 21 Декабря 2023 пользователем div Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 (изменено) @Zander_driver ,@Kirgudu , у меня версия ТЧ 1.0004 работает стабильно, а с более новыми патчами иногда бывают вылеты В readme_m_netpk версия 1.0004 вроде подходит Цитата Заметки: - Версии нет-пакетов: ТЧ/ЧН/ЗП (SHoC/CS/SCoP), патч для ТЧ: 1.0004 и выше. 9 часов назад, Zander_driver сказал: Это не имеет никакого отношения к уводу объектов в оффлайн и затем в онлайн. то есть, переключить примерно так нужно: alife():set_switch_offline(obj.id, true) test_abstract() alife():set_switch_online(obj.id, false) ? 1 час назад, Kirgudu сказал: @div, нет, я писал про пункты 1), 2) и 3) чуть пониже процитированной строки. Понятно, значит нужно еще файл se_item.script проверить / изменить. Пока буду с этим разбираться, хочу спросить, если через m_netpk изменить position npc, чтобы он был выше поверхности карты и не стоял на каком-то объекте, его гравитация будет в ходе игры снижать, чтобы он опустился на поверхность, или же он застынет на измененных координатах и будет висеть в воздухе? Если первый вариант, то чтобы он завис в воздухе, менять координаты придется через update, как я понимаю? Изменено 22 Декабря 2023 пользователем div Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 @Zander_driver, у OGSR системные требования, как я понял, выше ТЧ 1.0004 даже на старом железе без тормозов работает. @Kirgudu, @Zander_driver, несколько раз перечитал readme_m_netpk, и если правильно понял, то менять статус объекта (или npc) online / offline не нужно? Отталкиваюсь от части: Цитата При спавне нового игрового объекта: изменения вступят в силу, как только мы выйдем из текущей скриптовой работы и управление вернется движку - он создаст объект и начнет записывать в него параметры. ... Для уже существующих объектов в игре: требуется после задания изменений свойст объекта, перевести объект в оффлайн и обратно в онлайн, что модулем делается автоматически. Изменения вступят в силу в момент выхода объекта в онлайн. или я не правильно понял эту часть? 1 Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 7 часов назад, Kirgudu сказал: Для NPC - скорее se_stalker.script у меня загвоздка еще с примером из readme, с перемещением trader_ventilyator_0000, как указано в test_abstract() Не совсем понял, как применить пункты 1), 2) и 3) из раздела "Как получить возможность менять абстрактную часть пакетов?" или trader_ventilyator к этому не имеет отношения? Если да, то я совсем не понимаю, почему после вызова test_abstract() не происходит перемещение вентилятора... Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 6 минут назад, Zander_driver сказал: А установить-запустить, пробовал? пробовал два раза, у меня перезагрузка системного сразу после запуска... Списал это на старое железо, позже, как разберусь с m_netpk, посмотрю по совету @mole venomous другие версии. Сейчас ищу проблему, почему даже тестовый пример из m_netpk у меня не работает... 1 Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 @Zander_driver, блок питания с запасом, кулер по тестам тоже держит температуру, скорее всего дело в процессоре, который старенький и еще видеокарты нет, так что отдувается за всех... Планировал обновить сборку, но с ситуацией на железо в предыдущее года желание отпало Скажите, пожалуйста, в чем может быть причина, что после вызова test_abstract(), код которого приведен в readme: Скрытый текст function test_abstract() --/ Переносим вентилятор из каморки Сидоровича на тумбочку в подвальчике деревни новичков (на Кордоне) local sobj = alife():object("trader_ventilyator_0000") --/ находим в игре серверный объект вентилятора if sobj then --/ нашли? local pk = get_netpk(sobj,0) --/ или m_netpk.net_cse_abstract(sobj) if pk:isOk() then local vPos = vector():set(-212.8,-22.28,-127.20) --/ координаты 'на тумбочке в подвальчике' local vDir = vector():set(0,3.14,0) --/ направление: 'лопастями от стены' --/ var-1: установка колбэка с таблицей local status = pk:setCallback( { position = vPos, direction = vDir } ) --[[ --/ var-2: установка колбэка с функцией local status = pk:setCallback( function(data) data.position = vPos --/ change property 'position' in 'cse_abstract' data.direction = vDir --/ change property 'direction' in 'cse_abstract' end ) --]] end end end вентилятор не меняет своего положения? Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 3 минуты назад, Zander_driver сказал: а какое железо если не секрет? Процессор Intel Pentium G3250, 4 ГБ DDR, 1 ТБ HDD Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 @Zander_driver возможно, если на чистой системе будет работать... У меня почему ТЧ стабильно работает только с патчем 1.0004, хотя пробовал разные по очереди ставить с переустановкой самой ТЧ... @Zander_driver, @Kirgudu, 2 часа назад, Kirgudu сказал: 5 часов назад, Zander_driver сказал: Но, что при этом отвалится в логике НПС? Любопытный вопрос, на который у меня нет ответа. Но памятуя о том, что в коде обслуживающем действия НПС, обращения к АИ-сетке встречаются на каждом шагу, подозреваю что будут проблемы. Тоже не знаю. Убирал флаги перехода в оффлайн у БТР, сбрасывал какие-то флаги у физ. объектов - проблем не было. НПС спавнить в воздухе в голову не приходило. У меня не как В se_stalker.script я дописал: if self.cb_netpk then self.cb_netpk(self, packet) end в нужное место... Скрытый текст function clear_useful_for_ai(sobj) local pk = get_netpk(sobj, 1) -- [m_netpk] прочитать нетпакет local data = pk:get() -- [m_netpk] вывести данные в таблицу data.object_flags = bit_xor(data.object_flags, 8) -- двоичное сравнение и сброс флага "интерактивно" на 0 (позиция 8 или 2^3 справа налево: …1xxx или …0xxx –> …0xxx) data.object_flags = bit_or(data.object_flags, 8) -- то же для поднятия флага при любых исходных значениях pk:set(data) -- [m_netpk] записать данные в нетпакет по измененной таблице end function test_abstract_npc() local sobj = alife():create("esc_unik_npc", vector():set(-218.20, -20.2, -145.63), 35362, 47) clear_useful_for_ai(sobj) if sobj then --/ нашли? local pk = get_netpk(sobj, 0) --/ или m_netpk.net_cse_abstract(sobj) if pk:isOk() then local vPos = vector():set(-218.20, -20.2 + 10, -145.63) local vDir = vector():set(0, 3.14, 0) --/ var-1: установка колбэка с таблицей local status = pk:setCallback( { position = vPos, direction = vDir } ) end end end Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 @Kirgudu, @Zander_driver, какие еще есть "подводные камни"? Условие 1) и 2) тоже выполнено, код вроде полный... P. S. @Kirgudu, спасибо Вам за код, изучаю... 28 минут назад, Kirgudu сказал: Имхо, технических сведений вполне достаточно, может просто не хватило внимательности при реализации. @Kirgudu, да, Вы правы, я se_physic не додумался правильно отредактировать в тот момент, сейчас поправил, работает... С npc правда пока код не работает, хотя se_stalker.script соответствует требованиям пунктов 1), 2) и 3) 1 час назад, div сказал: код (Скрыть) function clear_useful_for_ai(sobj) local pk = get_netpk(sobj, 1) -- [m_netpk] прочитать нетпакет local data = pk:get() -- [m_netpk] вывести данные в таблицу data.object_flags = bit_xor(data.object_flags, 8) -- двоичное сравнение и сброс флага "интерактивно" на 0 (позиция 8 или 2^3 справа налево: …1xxx или …0xxx –> …0xxx) data.object_flags = bit_or(data.object_flags, 8) -- то же для поднятия флага при любых исходных значениях pk:set(data) -- [m_netpk] записать данные в нетпакет по измененной таблице end function test_abstract_npc() local sobj = alife():create("esc_unik_npc", vector():set(-218.20, -20.2, -145.63), 35362, 47) clear_useful_for_ai(sobj) if sobj then --/ нашли? local pk = get_netpk(sobj, 0) --/ или m_netpk.net_cse_abstract(sobj) if pk:isOk() then local vPos = vector():set(-218.20, -20.2 + 10, -145.63) local vDir = vector():set(0, 3.14, 0) --/ var-1: установка колбэка с таблицей local status = pk:setCallback( { position = vPos, direction = vDir } ) end end end function clear_useful_for_ai(sobj) local pk = get_netpk(sobj, 1) -- [m_netpk] прочитать нетпакет local data = pk:get() -- [m_netpk] вывести данные в таблицу data.object_flags = bit_xor(data.object_flags, 8) -- двоичное сравнение и сброс флага "интерактивно" на 0 (позиция 8 или 2^3 справа налево: …1xxx или …0xxx –> …0xxx) data.object_flags = bit_or(data.object_flags, 8) -- то же для поднятия флага при любых исходных значениях pk:set(data) -- [m_netpk] записать данные в нетпакет по измененной таблице end function test_abstract_npc() local sobj = alife():create("esc_unik_npc", vector():set(-218.20, -20.2, -145.63), 35362, 47) clear_useful_for_ai(sobj) if sobj then --/ нашли? local pk = get_netpk(sobj, 0) --/ или m_netpk.net_cse_abstract(sobj) if pk:isOk() then local vPos = vector():set(-218.20, -20.2 + 10, -145.63) local vDir = vector():set(0, 3.14, 0) --/ var-1: установка колбэка с таблицей local status = pk:setCallback( { position = vPos, direction = vDir } ) end end end Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 я наверно не тот флаг снимаю data.object_flags = bit_xor(data.object_flags, 128) data.object_flags = bit_or(data.object_flags, 128) так же должно быть? Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 7 минут назад, Kirgudu сказал: Или так, наверное. Только что-то одно. Пробовал через bit_xor с bit_or и bit_and как Вы написали, но пока не дало результата... Копаю дальше... 6 минут назад, Zander_driver сказал: Для начала попробовать на совершенно простейшем объекте. Аптечке там Аптечки (II_MEDKI) в class_registrator.script у себя не нашел, и честно, не знаю как их там прописывать (знаний маловато для этого) Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 (изменено) @Zander_driver, класс есть, но в se_item.script нужно к чему обращаться? se_... Не к identity_immunities же? se_medkit? Изменено 22 Декабря 2023 пользователем div Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 @Zander_driver, он требует минимум if self.cb_netpk then self.cb_netpk(self, packet) end в методе STATE_Write... Просто я не знаю, что для аптечек нужно использовать в se_... Пробовал на костюме, там понятно что писать нужно в se_outfit:STATE_Write(packet) Подводя промежуточный итог, я заметил, что если использовать код: data.object_flags = bit_and(data.object_flags, bit_not(128)) -- сброс UsedAI_Locations вместо: data.object_flags = bit_xor(data.object_flags, 128) data.object_flags = bit_or(data.object_flags, 128) экзоскелет (exo_outfit) реально падает, в то время как вариант с xor + or он практически сразу же лежит на поверхности карты.... @Zander_driver, @Kirgudu,можно ли сказать в таком случае, что если каким-то образом зафиксировать data.object_flags, то костюм будет висеть в воздухе? Я так понимаю, смотреть в сторону update не стоит, нужен искать способ, как заморозить это значение? Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 @Kirgudu, а вес (массу) m_netpk для npc поменять нельзя, так же? Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 @Zander_driver, @Kirgudu, то есть, с npc проблема, что они анимацмей управляются? Хочешь npc, который над локацией, нужно как-то с анимацией это химичить? Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 22 Декабря 2023 @Zander_driver, нет возможности такую создать, или нет в игре? Я просто с анимациями в этой игре еще работал, но если принцип схож с общими правилами для разных игр, то должна быть родительская кость, которая определяет положение в пространстве... @Zander_driver, @Kirgudu, кстати, а вентилятор из примера спокойно зависает в воздухе без всяких изменений флагов, пока ГГ его не затронет... Скрытый текст 1 Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 23 Декабря 2023 (изменено) @Zander_driver, @Kirgudu, подскажите, ранее была информация, о том, что изменяет m_netpk можно менять по HEX значению. Я так понимаю, речь про смещение в памяти? Можно узнать, как вычислить это смещение? Хочу попробовать заморозить значение этой ячейки памяти через сторонние программы, и проверить, упадет тогда объект или нет? Изменено 23 Декабря 2023 пользователем div Поделиться этим сообщением Ссылка на сообщение
div 1 Опубликовано 23 Декабря 2023 @Zander_driver, нашел тему про X-Ray Extensions. Цитата Версии игры, поддерживаемые на данный момент:ТЧ (патч 1.0006): xrGame.dll, XR_3DA.exe, xrRender_R1/2 что-то с версиями как-то не везет... Цитата Прочитал из объекта тыщу разных чисел и сидишь разбираешься что есть что, для чего, и куда... я в 2014-16 году с этим наигрался. Я пытался найти ячейки в памяти отвечающие за значение координат объекта (например, obj:position().x), но не смотря на то, что искал через условия ">" и "<", так как это не целые числа, найти конкретную ячейку не получилось. Поделиться этим сообщением Ссылка на сообщение