Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском по разделу, ответ на него, вероятно, уже есть.
Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.
Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).
Благодарность выражаем в личке или же ставим плюсик в историю репутации. Подобные посты будут удаляться.
Да хотелось бы сделать на постоянку, хуже точно не будет от этого... в сдк то без проблем любая работа, а вот писанина кроме него в конфигах и скриптах для меня напрягающая..))) просто пока делать нечего больше, кроме доп квестов, а чтоб их делать нужно подготовить всё для тестирования не напрягающего, решил заняться автосохранениями... я прошёл через это когда делал первую версию, за 5 квестов я вписал в мозг наглухо на какой локации и какая травинка в какую сторону шевелиться..)))) проходя одно и тоже по 200 раз... С 1-2 шаговыми квестами одиночными без проблем. собрал в сдк отдельный спавн для локи, и доводи до ума, я так и делал, а вот линейки затрагивающие 4-5 локаций и имеющие хотябы 5-6 ходов это для меня смерть..((( как пример, я угробил квест длинный на Лиманск, чтоб его получить нужны 3 локации, лиманск янтарь и бар, я дошёл до него, но мне его не выдают, тупо не выходит диалог. хотя квест работал без проблем, и я тупо незнаю в каком месте я похерил линейку, а так как знаю весь мод наизусть, за 2 года то, просто тупо забывал сохраняться. и нет возможности откатиться и проверять всю цепочку изначально. там же была проблема не критичная и раньше, закрытие квеста не срабатывало, забирал предмет. но сообщение на следующий шаг не срабатывало, отдать предмет заказчику, НО, оно срабатывало когда уходил с локации , после перехода... Это я и пытался исправить. в итоге похерил всю линию...((( А что там и как у меня сделано я уже тупо не помню..
Сообщение отредактировал Policai - Пятница, 07.02.2020, 12:36
Policai, Здравствуйте, вообщем - то попробуйте в файле bind_stalker.script заменить строчку get_console():execute("dump_infos") (если есть, если что то просто ищите строчку if not self.loaded then и после нее втыкайте следующее) на:
Код
if self.last_level_name and self.last_level_name ~= level.name() then local p = {} p[1] = tostring(level.name()) xr_effects.scenario_autosave(db.actor,nil,p) end self.last_level_name = level.name()
Сам я еще не тестировал код, ибо нету двух лок, но в теории работать должно, поправьте если не работает.
Сообщение отредактировал Hozar_2002 - Пятница, 07.02.2020, 14:46
Проверка в игре показала, что звук не воспроизводится. Хотел разобраться сам, но толком нормальной инструкции по этому. Подскажите, почему звук не работает?
Есть такая строчка, закоментил и вместо неё дописал... работает , но маленько не то Антон. Во первых создаётся 2 сохранения, autosave и второе имя локации куда переходишь... И они оба перезаписываются. Нахожусь в тёмной долине, перехожу в Тёмную лощину, заменяется имя - autosave с новым временем и создаётся имя - Тёмная лощина... перехожу обратно в долину, опять перезаписывается имя - autosave и появляется имя - Тёмная долина, опять перехожу в лощину, она перезаписывается, тоесть удаляется предыдущая версия сохранения и появляется новая с новым временем... тут походу никак без спейса..((
Policai, Тогда попробуйте заменить ту бурду что выше предложил на это
if self.last_level_name and self.last_level_name ~= level.name() then local s_date = game.translate_string(level.name()) s_date = AddTextDigit(s_date, level.get_time_days()) s_date = s_date .. " - " s_date = AddTextDigit(s_date, level.get_time_hours()) s_date = s_date .. " - " s_date = AddTextDigit(s_date, level.get_time_minutes())
if IsImportantSave() then local save_param = user_name().." - ".. s_date get_console():execute("save "..save_param) end end self.last_level_name = level.name()
И в конц файла добавьте
Код
function AddTextDigit(str, dig) if (dig > 9) then str = str .. dig else str = str .. "0" .. dig end return str end
Пытаюсь тут сделать новую схему для НПС. Хочу сделать так, чтобы она срабатывала в том случае, если рядом с НПС находится какой-либо объект или мутант. В моде "Связь Времён" подсмотрел следующий код, проверяющий наличие рядом с неписем артефакта:
Цитата
function evaluator_look_for_art:check_item( v ) local obj = v:object() if isArtefact( obj ) then local s_obj = alife():object( obj:id() ) if s_obj then local parent_id = s_obj.parent_id if ( parent_id == nil or parent_id == 65535 ) then if self.object:see( obj ) then if obj:position():distance_to_sqr( self.object:position() ) < 20 * 20 then if self.object:accessible( obj:level_vertex_id() ) then self.st.target_art = obj self.st.vertex_position = obj:position() if self.object:object( "detector_elite" ) == nil then alife():create( "detector_elite", vector(), 0, 0, self.object:id() ) self.st.spawn_detector = true end return true end end end end end end return false end
Однако чуть позже меня предупредили, что парсинг всех 65535 объектов нагружает игру. Так ли это на самом деле? Есть ли альтернативные пути создания такой проверки?
Сообщение отредактировал Lektorrr - Пятница, 07.02.2020, 16:03
Lektorrr, 1. В данном коде нет проверки всего диапазона идентификаторов объектов, в этом коде объект передается в функцию из другой функции этого же скрипта, а точнее evaluator_look_for_art:evaluate проверяются объекты находившиеся в поле зрения НПС и о которых он еще "помнит":
Код
for o in self.object:memory_visible_objects() do if self:check_item( o ) then return true end end
Как видно использован движковый метод memory_visible_objects, возвращающий список таких объектов.
2. Да если заниматься проверкой всего диапазона идентификаторов объектов, тем более постоянно, то движек только этот и будет делать - нагрузка нереальная.
Сообщение отредактировал denis2000 - Пятница, 07.02.2020, 21:06
можно один раз при старте отобрать объекты, которые следует проверять в update
В оригинале разрабами специально для таких целей предусмотрен файл DB.script. Нужно внести в него свои необходимые таблицы и помещать в них ссылку на объекты при переходе объекта в онлайн. Тогда у вас всегда будет доступ как к серверной так и к клиентской части объекта. Сами ссылки на объекты помещать в таблицы из биндеров этих объектов. И удалять их оттуда же. В различных ситуациях ( а они в основном связаны с онлайновыми объектами, так как видеть игроку что творится за кадром не интересно ) достаточно будет перебрать нужную таблицу объектов. Никаких тормозов при этом в игре не будет. Например, когда я писал скрипт атаки турели, то в логику турели, можно было вписать в качестве цели не только actor или all, но и monster и stalker. В этом случае объекты брались из соответствующих таблиц из файла db.script и турель точно "валила" онлайновые объекты. Никаких переборов 65535 объектов, чтобы выбрать сталкеров или монстров, не было.
Если обозначить смарт как укрытие, то будут ли НПС задействовать в нём уже имеющиеся работы и анимпоинты во время выброса, или нужно расставлять отдельные для этого пути (_surge_1_walk...)?