Overf1rst 1 496 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 18 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 924 Опубликовано 4 января, 2021 Policai а там как раз неровная поверхность. Можно сделать по типу wallmarks, но динамично? Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 951 Опубликовано 4 января, 2021 (изменено) 3 часа назад, AziatkaVictor сказал: Можно сделать по типу wallmarks, но динамично? Чисто теоретически, можно заспавнить в этом месте объект типа взрывчатки у которого волмарк взрыва не черное пятно explosion_marks, а капли крови и "взорвать". В месте "взрыва" останется ВРЕМЕННЫЙ волмарк нужной текстуры. 4 часа назад, Рыж сказал: Как сделать, чтоб аномалия электра отключилась Скриптом вызывать движковый метод, применительно к объекту-аномалии: object:disable_anomaly() это полностью отключит аномалию. Изменено 4 января, 2021 пользователем denis2000 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 924 Опубликовано 4 января, 2021 35 минут назад, denis2000 сказал: Чисто теоретически, можно заспавнить в этом месте объект типа взрывчатки у которого волмарк взрыва не черное пятно explosion_marks, а капли крови и "взорвать". В месте "взрыва" останется ВРЕМЕННЫЙ волмарк нужной текстуры. А можно подробнее? Что и где мне делать? Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 951 Опубликовано 4 января, 2021 AziatkaVictor Я же говорю - теоретически, сам не проверял. Пробуйте создать секцию объекта explosive_wallmark на базе класса S_EXPLO, там убрать все сопутствующие взрыву эффекты (партиклы, звуки, поражающий эффект и тд. и тп.) главное параметр wallmark_section = explosion_blood_marks - задающий секцию описывающую метку на месте взрыва. [explosion_blood_marks] wallmarks = wm\wm_blood_1 dist = 0.5 size = 0.6 max_count = 20 Затем заспавните этот объект и подорвите его: local s_obj = alife():create( "explosive_wallmark", ...position, ...level_vertex_id(), ...game_vertex_id() ) level.add_call( function () if s_obj.online then return true end end, function () level.object_by_id( s_obj.id ):explode(0) end ) И еще раз хочу обратить внимание, что метки после взрывов со временем исчезают. Поэтому метод сугубо костыльный и нетривиальный. 1 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WolfHeart 919 Опубликовано 5 января, 2021 (изменено) Столкнулся с забавной штуковиной... Никогда раньше не декомпилил и не собирал level.spawn с помощью ACDC, но все когда-то бывает впервые.? Декомпилил нормально, добавил недостающих секций и level.spawn разобрался без ошибок. Но вот собираться, не желает. Выдает ошибку: FATAL ERROR! Function: main::check_story_ids Line: 1875 Description: object esc_kpp_graph_point has same story id as esc_baza_graph_point () Гугл перевел: объект esc_kpp_graph_point имеет тот же идентификатор истории, что и esc_baza_graph_point. Вот эти две секции: Спойлер [717] ; cse_abstract properties section_name = graph_point name = esc_baza_graph_point position = -9.03432846069336, 0.565077006816864, 270.846282958984 direction = 0.00336900004185736, 0.00976600032299757, -3.30000002577435e-005 id = 65535 version = 128 script_version = 12 spawn_id = 0 ; cse_alife_graph_point properties location3 = 2 [719] ; cse_abstract properties section_name = graph_point name = esc_kpp_graph_point position = -155.893432617188, -29.7726764678955, -369.627166748047 direction = -0.0301619991660118, 0.000522000016644597, 0.042068000882864 id = 65535 version = 128 script_version = 12 spawn_id = 15273 ; cse_alife_graph_point properties location3 = 4 И я не понимаю, что в них одинакового? Где этот "одинаковый story id"? Изменено 5 января, 2021 пользователем WolfHeart AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Arkada 428 Опубликовано 5 января, 2021 (изменено) WolfHeart у обоих секций одинаковый ID. Измени на любой свободный ID. Изменено 5 января, 2021 пользователем liner Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Policai 1 323 Опубликовано 5 января, 2021 WolfHeart Баг распаковки Дим скорее всего, если не ошибаюсь мой Кордон? В нём нет графпоинтов с одинаковым айди., сказал бы что нужно, я бы скинул нужные файлы..)) Группа мода в VK Мод делался и тестировался на железе i5-11400, 32Гб ОЗУ, Radeon RX580 Разрешение 2560 х 1440. ВСЕ на максималке Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 5 января, 2021 17 минут назад, WolfHeart сказал: Никогда раньше не декомпилил и не собирал level.spawn с помощью ACDC, но все когда-то бывает впервые Просто интересно. А зачем нужно распаковывать level.spawn ? Можно просто распаковать all.spawn, добавить нужные секции, собрать. В чем фишка? Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WolfHeart 919 Опубликовано 5 января, 2021 19 минут назад, liner сказал: у обоих секций одинаковый ID. id = 65535, одинаков у всех секций. Это не то. 15 минут назад, Policai сказал: сказал бы что нужно, я бы скинул нужные файлы..)) Да Юр именно твой Кордон. Да самому как-то интересней. ? Но скорее всего придется к тебе обратится. 6 минут назад, makdm сказал: В чем фишка? А вот и не скажу. Попробуй сам догадаться. ? Это-же вроде твоя работа: Спойлер [sr_idle@control] on_info = {=actor_has_super_rank(actor_condition:max_walk_weight:inventory:max_weight:actor:jump_speed:80:70:6)} sr_sv@sv on_info2 = {=actor_has_rank(ui_cheat_main:ui_cheat_cop:add_cheat_spawn)} %=actor_is_tired(0.9)% [sr_sv@sv] END AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Arkada 428 Опубликовано 5 января, 2021 (изменено) 28 минут назад, WolfHeart сказал: id = 65535, одинаков у всех секций. Это не то. Вы думаете, например, что уникальный ник может оставаться уникальным если его используют несколько раз и несколько человек? Сомневаюсь, что вылетает не из-за одинаковых ID. Изменено 5 января, 2021 пользователем liner Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WolfHeart 919 Опубликовано 5 января, 2021 (изменено) 7 минут назад, liner сказал: Вы думаете, например, что уникальный ник может оставаться уникальным если его использовать несколько раз? id = 65535, на сколько я понимаю, это не story id, а максимальное их кол-во. Повторюсь, они во всех секциях и всех level.spawn, всех уровней одинаков. Изменено 5 января, 2021 пользователем WolfHeart AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 5 января, 2021 (изменено) 42 минуты назад, WolfHeart сказал: А вот и не скажу. Попробуй сам догадаться 42 минуты назад, WolfHeart сказал: Это-же вроде твоя работа Понятно. Античит решил отключить. Правда для этого необязательно лезть в all.spawn, а тем более в level.spawn Всё гораздо проще..... Успехов! Изменено 5 января, 2021 пользователем makdm Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WolfHeart 919 Опубликовано 5 января, 2021 Только что, makdm сказал: Античит решил отключить. Ну почему сразу отключить? Это не сама цель. Интересно понять как он работает. ? AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 5 января, 2021 1 минуту назад, WolfHeart сказал: Интересно понять как он работает Скрипты.... И только скрипты! Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WolfHeart 919 Опубликовано 5 января, 2021 (изменено) 13 минут назад, makdm сказал: Правда для этого необязательно лезть в all.spawn, а тем более в level.spawn Всё гораздо проще..... В all.spawn, я ничего не нашел, только в level.spawn каждого уровня. 10 минут назад, makdm сказал: Скрипты.... И только скрипты! А вот с этим горазда сложнее. Я с ними как-то не подружился. Да и поиск ничего не дал такого, что как-то указывало на нужное и понятное мне. Дополнено 4 минуты спустя Тезка, ты хоть на ушко на свисти, в каком скрипте искать, может и разберусь что к чему.? Изменено 5 января, 2021 пользователем WolfHeart AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 5 января, 2021 (изменено) 18 минут назад, WolfHeart сказал: что как-то указывало на нужное и понятное мне. Здесь все просто. Скрипт вычисляет менялось ли какое-то значение из установленных по дефолту разрабами Сталкера параметров игры. Если менялось - игрок читерит. Сразу вылет на рабочий стол. Вот и вся наука.... Дополнено 7 минуты спустя 18 минут назад, WolfHeart сказал: ты хоть на ушко на свисти, в каком скрипте искать, может и разберусь что к чему Начни со скриптов в файле xr_conditions.script Функции actor_has_super_rank и actor_has_rank Изменено 5 января, 2021 пользователем makdm 1 1 Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WolfHeart 919 Опубликовано 5 января, 2021 (изменено) 9 минут назад, makdm сказал: Скрипт вычисляет менялось ли какое-то значение из установленных по дефолту разрабами Сталкера параметров игры. Это понятно, вот только не все параметры он контролирует. Некоторые можно менять и вылета нет. Значит он контролирует какие-то определенные параметры, а не все. Из этого следует, что эти параметры, как-то должны в нем прописываться. Так вот поиск ничего не дал такого что-бы указывало на нужные мне параметры. Да и вообще, я же говорю, туго у меня со скриптами. Ну да ладно, поковыряюсь еще, может и разберусь, что к чему. Дополнено 1 минуту спустя 9 минут назад, makdm сказал: Начни со скрипта в файле xr_effects,script Функция actor_has_super_rank А вот за наводку спасибо! Изменено 5 января, 2021 пользователем WolfHeart AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 5 января, 2021 4 минуты назад, WolfHeart сказал: А вот за наводку спасибо! Я там файл поправил. Не промахнись!!!! 1 Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WolfHeart 919 Опубликовано 5 января, 2021 13 минут назад, makdm сказал: Функции actor_has_super_rank и actor_has_rank Е нет в xr_effects.script. Она есть только в xr_conditions.script и в xr_motivator.script Дополнено 0 минут спустя 4 минуты назад, makdm сказал: Я там файл поправил. Не промахнись!!!! Ага, увидел уже. AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Hunter 2 506 Опубликовано 6 января, 2021 makdm понапридумывают античиты, а нам потом ковыряйся) Благодарствую, давно искал) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Сергей Шубин 21 Опубликовано 6 января, 2021 Добрый вечер. Присоединил к Зову Припяти Кордон от Чистого Неба. Убедился, что НПС не "открывают двери" (на базе сталкеров). Уткнулись в неё лбом. Спойлер -- Вызывается на апдейте НПС -- пробегается по всем дверям и пытается открыть те, которые находятся рядом с НПС -- возвращает список дверей, которую открыл данный НПС function try_to_open_door(npc) if true then return {} end local opened_doors = {} local npc_position = npc:position() for id,position in pairs(db.level_doors) do if npc_position:distance_to_sqr(position) <= 9 then if db.storage[id].ph_door ~= nil then local action = db.storage[id].ph_door.door_action if action.st.not_for_npc == false and action.st.closed == true then --printf("OPEN DOOR") action:use_callback() opened_doors[id] = true end end end end return opened_doors end function try_to_close_door(npc, doors) if true then return {} end local npc_position = npc:position() local closed_doors = {} for id, v in pairs(doors) do if npc_position:distance_to_sqr(db.level_doors[id]) > 9 then if db.storage[id].ph_door ~= nil then local action = db.storage[id].ph_door.door_action if action.st.not_for_npc == false and action.st.closed ~= true then --printf("CLOSE DOOR") action:use_callback() closed_doors[id] = true end end end end return closed_doors end В учебнике Хована по этому вопросу сказано. Закоментировать строки if true then return {} end. Так и сделал. Двери заработали. Затем возник вопрос. А почему, собственно, в обоих функциях проверка на true. Не сделали ли разработчики Зова Припяти ошибку? Для теста поправил код на такой. Чисто чтобы посмотреть, что будет. Спойлер -- Вызывается на апдейте НПС -- пробегается по всем дверям и пытается открыть те, которые находятся рядом с НПС -- возвращает список дверей, которую открыл данный НПС function try_to_open_door(npc) if not true then return {} end local opened_doors = {} local npc_position = npc:position() for id,position in pairs(db.level_doors) do if npc_position:distance_to_sqr(position) <= 9 then if db.storage[id].ph_door ~= nil then local action = db.storage[id].ph_door.door_action if action.st.not_for_npc == false and action.st.closed == true then --printf("OPEN DOOR") action:use_callback() opened_doors[id] = true end end end end return opened_doors end function try_to_close_door(npc, doors) if true then return {} end local npc_position = npc:position() local closed_doors = {} for id, v in pairs(doors) do if npc_position:distance_to_sqr(db.level_doors[id]) > 9 then if db.storage[id].ph_door ~= nil then local action = db.storage[id].ph_door.door_action if action.st.not_for_npc == false and action.st.closed ~= true then --printf("CLOSE DOOR") action:use_callback() closed_doors[id] = true end end end end return closed_doors end Все заработало без всякого закоментирования. Вопрос знатокам скриптования, не допустили ли создатели Зова Припяти ошибку, которая осталась незамеченной? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 6 января, 2021 4 часа назад, Сергей Шубин сказал: Вопрос знатокам скриптования, не допустили ли создатели Зова Припяти ошибку, которая осталась незамеченной? Здесь все правильно. Ошибки нет. Просто изначально функция try_to_open_door(npc) планировалась для НПС, которые не входят в сквады. Но после того как в ЗП все НПС были переведены в сквады, то необходимость в этой функции отпала. Поэтому и её закомментировали таким хитрым способом: if true then return {} end Т.е. функция вообще ничего не вычисляла, а сразу возвращала пустую таблицу. В ЗП открытие дверей при приближении НПС к дверям реализовано в движке. 1 1 Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 7 января, 2021 З.Ы. В моде Припять Точка Отсчета я использовал эти функции., прописав их в биндер монстров. Для того чтобы кровососы, бюреры и контролеры могли открывать двери в помещениях. В логике этих монстров просто добавлен дополнительный параметр can_open_door = true Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Сергей Шубин 21 Опубликовано 7 января, 2021 9 часов назад, makdm сказал: Здесь все правильно. Ошибки нет. Просто изначально функция try_to_open_door(npc) планировалась для НПС, которые не входят в сквады. Но после того как в ЗП все НПС были переведены в сквады, то необходимость в этой функции отпала. Поэтому и её закомментировали таким хитрым способом: if true then return {} end Т.е. функция вообще ничего не вычисляла, а сразу возвращала пустую таблицу. В ЗП открытие дверей при приближении НПС к дверям реализовано в движке. В СГМ 2.2 неписи (бандиты) на базе сталкеров были сквадовые. И так же долбили двери лбом. Движку на этих неписей было плевать. Правда, дверь была прописана как физ.объект. Причина была в этом? Что дверь как объект? Спойлер [272] ; cse_abstract properties section_name = physic_object name = esc_stalker_base_door_1 position = -4.29534292221069, 0.646252989768982, 267.440795898438 direction = 0, 0, 0 version = 124 script_version = 8 ; cse_alife_object properties game_vertex_id = 2070 level_vertex_id = 25 object_flags = 0xffffff3a custom_data = <<END [collide] ignore_static [logic] cfg = scripts\escape\esc_stalker_base_door_1.ltx END ; cse_visual properties visual_name = dynamics\door\door_old_wood_120x240_01 ; cse_ph_skeleton properties ; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 924 Опубликовано 7 января, 2021 Всем привет. Хочу поставить метку, подобную той, которой помечают места в ЗП. Но хочу сделать это через логику, нашел секцию, но как я понял, она либо работает только на ТЧ, либо я что-то делаю не так... Сама секция: [sr_mapspot@start] hint = esc_dead_hint location = crcl_big Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты