Overf1rst 1 499 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 19 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Arkada 428 Опубликовано 18 августа, 2020 Как решить данную проблему? Добавил функцию, которая выводит на центр экрана текст. После нескольких заданных секунд текст должен исчезать, но он не исчезает и остаётся навсегда. Спойлер правки в _G function SetHudMsg(msg,n) msg = tostring(msg) local hud = get_hud() if (hud) then hud:AddCustomStatic("not_enough_money_mine", true) hud:GetCustomStatic("not_enough_money_mine"):wnd():TextControl():SetTextST(msg) end bind_stalker.ShowMessageTime = time_global() + n*1000 end правки в bind_stalker в функции reinit ShowMessageTime = nil function actor_binder:reinit() ... local function check_hud_msg() if (ShowMessageTime) then local hud = get_hud() if (hud) then local custom_static = hud:GetCustomStatic("not_enough_money_mine") if custom_static ~= nil and time_global() > ShowMessageTime then hud:RemoveCustomStatic("not_enough_money_mine") ShowMessageTime = nil end end end return false end конец функции Или может я неправильно вызываю? if math.random(1,100) <= (Probability*100) then ... else SetHudMsg(game.translate_string("st_cant_cut_monster_part"),5) end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 18 августа, 2020 Вызов функций через рестриктор Спойлер Логика [sr_idle@control_6_1] on_game_timer = 30 | sr_idle@control_6_2 %=add_cs_text_no_blink(st_sidorovich_text)% [sr_idle@control_6_2] on_game_timer = 60 | sr_idle@control_7 %=del_cs_text_no_blink% Сами функции function add_cs_text_no_blink(actor, npc, p) if p[1] then local hud = get_hud() local cs_text = hud:GetCustomStatic("text_on_screen_center_no_blink") if cs_text then hud:RemoveCustomStatic("text_on_screen_center_no_blink") end hud:AddCustomStatic("text_on_screen_center_no_blink", true) cs_text = hud:GetCustomStatic("text_on_screen_center_no_blink") cs_text:wnd():TextControl():SetText(game.translate_string(p[1])) end end function del_cs_text_no_blink(actor, npc) local hud = get_hud() cs_text = hud:GetCustomStatic("text_on_screen_center_no_blink") if cs_text then hud:RemoveCustomStatic("text_on_screen_center_no_blink") end end Вызов функции из функции Спойлер function add_and_remove_cs_text( text_center, cs_time ) local hud = get_hud() hud:HideActorMenu() local cs_text = hud:GetCustomStatic( "text_on_screen_center" ) if cs_text then hud:RemoveCustomStatic( "text_on_screen_center" ) end hud:AddCustomStatic( "text_on_screen_center", true ) cs_text = hud:GetCustomStatic( "text_on_screen_center" ) cs_text:wnd():TextControl():SetText( text_center ) local timer_text = time_global() + cs_time level.add_call( function () if timer_text < time_global() then return true end end, function () get_hud():RemoveCustomStatic( "text_on_screen_center" ) end ) end 1 1 Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Doloremque 527 Опубликовано 18 августа, 2020 Хочу добавить рюкзаки в мод. В теории представляю себе это так Создать предмет - рюкзак ( на основе чего лучше сделать, пока не знаю) При использовании\надевания рюкзака нам дается +20кг, второй тип рюкзака дает +35кг Когда надеваем другой тип рюкзака, старый просто спавнится в инвентарь, то есть можно обойтись без введения нового слота под рюкзак Проблема в написании скрипта, пробовал писать - lua нихера не знаю, выходит шляпа) Поможете? Я работаю на ганслингере, думаю если под чистый зп делать, то адаптировать долго не придется Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Сергей Шубин 21 Опубликовано 19 августа, 2020 9 часов назад, detoxe сказал: Создать предмет - рюкзак ( на основе чего лучше сделать, пока не знаю) Если не редактировать движок, то есть следующие возможности влиять на грузоподъемность ГГ. 1. Бустер - энергетик. Выпили его, грузоподъемность повысилась. Для рюкзака в принципе подходит. Время действия ограничено. 2. Костюм. У костюма есть параметр, влияющий на переносимый вес. Тут можно сделать примерно так. Использовали вы свой рюкзак. Прошла подмена бронекостюма через скрипт на похожий костюм с повышенной грузоподъемностью. Будут сложности с переносом апгрейдов с костюма на костюм. 3. Артефакт, влияющий на вес. Рюкзак, который можно поставить в слот. Зато никаких дополнительных проблем. Выберите один из вариантов и пробуйте. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Arkada 428 Опубликовано 19 августа, 2020 22 минуты назад, Сергей Шубин сказал: Если не редактировать движок, то есть следующие возможности влиять на грузоподъемность ГГ. 1. Бустер - энергетик. Выпили его, грузоподъемность повысилась. Для рюкзака в принципе подходит. Время действия ограничено. 2. Костюм. У костюма есть параметр, влияющий на переносимый вес. Тут можно сделать примерно так. Использовали вы свой рюкзак. Прошла подмена бронекостюма через скрипт на похожий костюм с повышенной грузоподъемностью. Будут сложности с переносом апгрейдов с костюма на костюм. 3. Артефакт, влияющий на вес. Рюкзак, который можно поставить в слот. Зато никаких дополнительных проблем. Выберите один из вариантов и пробуйте. Лучше создать новый слот в инвентаре, если делаете глобальный проект, то точно придётся редактировать движок. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 19 августа, 2020 ДА! Наконец-то я разобрался с этим идиотским спавном, у меня снова вопрос. Я для CoC сделал тайники, а они не работают, я написал здесь, потому-что на CoC вопросницу никто не заходит. Я обыскиваю тайник, а он не засчитывается, на игроке появляется метка "Личный Ящик". Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 953 Опубликовано 19 августа, 2020 (изменено) detoxe 1. Для чего вы это хотите сделать? Фича ради фичи? Инвентарь ГГ - это и есть рюкзак и фичи ограничения объема или веса рюкзака давно реализованы! Если фича не нацелена на реализм (что сужает круг играющих в мод) или не на удобство игрока (на что вам скажут спасибо) или новые интересные механики (сменные рюкзаки сами по себе не механика, а вот использование сменных рюкзаков для игрового процесса - это механика). 2. Если реализовывать подобное, то сразу стоит ставить планку на редактирование движка дабы не плодить скриптовые костыли. 3. Теперь по методам предложенными Сергей Шубин: а. Бустер - чрезвычайно просто, но мимо по причине ограничения времени действия. б. Слот костюма - очень просто, но опять мимо, по причине не логичности действия - от костюма не должно зависеть наличие или количество рюкзаков, поскольку проверять и управлять слотами костюма не тривиальная задача. в. Костюм - сложнее, но есть возможность логичной реализации если сделать у всех костюмов два (или более) дополнительных апгрейда (не доступных механикам, а устанавливаемым чисто скриптово) которые будут увеличивать вес на соответствующее значение. Реализация плана в: 1. Рюкзаки - это предметы на классе ПДА, использование которых будет обрабатываться скриптом, который и будет ставить/убирать нужные апгрейды на костюм в слоте, помещая освободившийся рюкзак в виде предмета в инвентарь. 2. Скрипт должен постоянно мониторить костюм в слоте и при его смене автоматически переносить апгрейды со "старого" костюма на "новый". 3. Нужно отредактировать скрипт апгрейда/ремонта механиков для того, чтобы указывалась правильная причина отказа механиков делать такие апгрейды (типа надписи: вы сами управляете этими функциями посредством использования рюкзаков). Изменено 19 августа, 2020 пользователем denis2000 1 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
svi_042 285 Опубликовано 19 августа, 2020 Доброго дня. При реализации катсцены столкнулся со следующей проблемой. При переключении одной секции на другую (с другими камерами, кусок логики под спойлером) на долю секунды камера переключается на point, и только после этого переключается на cam_effector. Есть какой-то вариант СРАЗУ переключаться на cam_effector, минуя point'ы? Потому что очень сильно страдает целостность сцены. Спойлер [sr_cutscene@cam_1] point = vco_mission_01_actor_walk look = vco_mission_01_actor_look global_cameffect = true enable_ui_on_end = false outdoor = true cam_effector = vco_mission_01_cam_01 on_signal = cameff_end | sr_cutscene@cam_2 [sr_cutscene@cam_2] point = vco_mission_01_actor_walk look = vco_mission_01_actor_look global_cameffect = true enable_ui_on_end = false outdoor = true cam_effector = vco_mission_01_cam_02 on_signal = cameff_end | sr_cutscene@cam_3 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 953 Опубликовано 19 августа, 2020 (изменено) svi_042 1. А если сделать сцену с применением одной камеры, которая в определенный момент быстро перескочит в новую точку при грамотной реализации анимации камеры? Нужно пробовать на практике. 2. Точки (point, look) - это начальное положение камеры они должны быть в соответствующих местах и совпадать с нулевой точкой анимации (хотя и это не гарантирует быструю склейку сцены). 3. Обычно при реализации схемы с двумя пролетами между ними делают секцию с перебивкой (например с затемнением) которая скрывает огрехи работы скрипта. PS: Я в одном моде делал в виде перебивки титры, получалось аристократически-кинематографически (как у Маяковского) так делают многие игры и фильмы. Изменено 19 августа, 2020 пользователем denis2000 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
svi_042 285 Опубликовано 19 августа, 2020 denis2000 , в одном месте есть перебивка затемнением, да, но камер суммарно 10 штук, и они по большей степени идут последовательно. Можно сказать, такие требования-с. Похоже, придётся мастырить вэй-поинты в начальных точках каждой анимации и последовательно скакать в них, чтоб не было столь заметно. Жаль. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Overf1rst 1 499 Опубликовано 19 августа, 2020 @svi_042, используйте камерные таблицы из cam_effector_sets.script. Имя таблицы будет служить значением cam_effector в логике. В этом скрипте и функционал склейки есть, и возможность производить всякие действия при старте нужной камеры. Примеры, опять же, в этом самом скрипте. Там же есть и условия включения камер. 55 минут назад, denis2000 сказал: 1. А если сделать сцену с применением одной камеры, которая в определенный момент быстро перескочит в новую точку при грамотной реализации анимации камеры? Нужно пробовать на практике. В своё время пробовал делать перескок - затея не из приятных (если делать средствами Level Editor). ? 55 минут назад, denis2000 сказал: 2. Точки (point, look) - это начальное положение камеры они должны быть в соответствующих местах и совпадать с нулевой точкой анимации (хотя и это не гарантирует быструю склейку сцены). В ванильном сталкере, кажется, FOV актора и FOV камер в сценах не совпадают. В любом случае, так лучше не делать, поскольку идеальных переходов точно не получить при таком варианте реализации. 1 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 19 августа, 2020 Вылеты, я ваш рот... FATAL ERROR [error]Expression : cross_table().header().level_guid() == level_graph().header().guid() [error]Function : CAI_Space::load [error]File : ai_space.cpp [error]Line : 113 [error]Description : cross_table doesn't correspond to the AI-map stack trace: 001B:002224D1 xrCore.dll, xrDebug::fail() 001B:0339E215 xrGame.dll, CDialogHolder::operator=() 001B:75FFF8E4 CRYPT32.dll, CryptUpdateProtectedState() Дополнено 1 минуту спустя А, и ещё у меня после правок спавна на ГГ вечно стоит метка "Место для сна", она привязана к ГГ, а не к камере, это можно подтвердить, включив demo_record Дополнено 21 минуты спустя Как на эксклюзивного персонажа ставить метку, типо на Бороде, Кардане и Т.Д. стоят определенные метки их так-сказать "профессий". Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WolfHeart 924 Опубликовано 19 августа, 2020 2 часа назад, Igor_Misery сказал: FATAL ERROR [error]Expression : cross_table().header().level_guid() == level_graph().header().guid() [error]Function : CAI_Space::load [error]File : ai_space.cpp [error]Line : 113 [error]Description : cross_table doesn't correspond to the AI-map Вот твой вылет: 1 вариант AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 19 августа, 2020 (изменено) Создал на локации смарт-террейн, и никак не могу привязать к нему граф-поинт, как только перематываю список террейнов всё намертво зависает, а если покликать то и мышка зависнет. Изменено 19 августа, 2020 пользователем Igor_Misery Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gerbys 7 Опубликовано 19 августа, 2020 Всем привет! Следующий вопрос имеется: противники НПС игнорируют ГГ на дальних дистанциях. Попробовал менять дальность стрельбы у всего оружия, игрался с параметрами visibility, но по итогу случилось следующее - все НПС начинают агрится друг на друга через всю локацию, но на ГГ им также пофиг как и раньше. Локация новая, так что даже думал насчёт проблем с smart террейнами или путями НПС. Надеюсь сможете помочь, вроде вопрос не сложный, тем не менее на сайтах модостроя я ответа не нашёл. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 953 Опубликовано 19 августа, 2020 Gerbys А попробуйте в файле xr_combat_ignore.script вместо: se_obj.position:distance_to_sqr(se_enemy.position) > 900 then вписать: se_obj.position:distance_to_sqr(se_enemy.position) > 10000 then 2 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Overf1rst 1 499 Опубликовано 19 августа, 2020 6 часов назад, Igor_Misery сказал: Как на эксклюзивного персонажа ставить метку, типо на Бороде, Кардане и Т.Д. стоят определенные метки их так-сказать "профессий". Параметр level_spot в секции logic. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Arkada 428 Опубликовано 19 августа, 2020 Как выяснить clsid монстра? if (функция проверки clsid монстра) == clsid.dog_s, например, then ... end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Overf1rst 1 499 Опубликовано 19 августа, 2020 if monster:clsid() == clsid.dog_s then end 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gerbys 7 Опубликовано 19 августа, 2020 3 часа назад, denis2000 сказал: Gerbys А попробуйте в файле xr_combat_ignore.script вместо: se_obj.position:distance_to_sqr(se_enemy.position) > 900 then вписать: se_obj.position:distance_to_sqr(se_enemy.position) > 10000 then Спасибо! В целом помогло... Дополнено 10 минуты спустя Вопрос по месту для сна на новой локе. Всё сделал по инструкции, есть надпись "Спать" в этом месте в игре, но при нажатии ничего не происходит Дополнено 36 минуты спустя Ещё вопрос. Необходимо сделать сквад враждебным после получения определённого инфопоршня. Однако через условия в relationship в настройках сквада этого сделать не получается.. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Сергей Шубин 21 Опубликовано 19 августа, 2020 (изменено) 1 час назад, Gerbys сказал: Ещё вопрос. Необходимо сделать сквад враждебным после получения определённого инфопоршня. Однако через условия в relationship в настройках сквада этого сделать не получается.. Как - то так. on_info = {+zat_b103_merc_fight} %=set_squad_goodwill(zat_b103_lost_merc_squad1:enemy)% relationship кондлист не поддерживает. 1 час назад, Gerbys сказал: Всё сделал по инструкции, есть надпись "Спать" в этом месте в игре, но при нажатии ничего не происходит Видимо, не все. Функция засыпания. Спойлер function sleep(actor, npc) local sleep_zones = { "zat_a2_sr_sleep", "jup_a6_sr_sleep", "pri_a16_sr_sleep", "actor_surge_hide_2" } for k,v in pairs(sleep_zones) do if utils.npc_in_zone(db.actor, db.zone_by_name[v]) then ui_sleep_dialog.sleep() give_info("sleep_active") end end end Изменено 19 августа, 2020 пользователем Сергей Шубин 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gerbys 7 Опубликовано 19 августа, 2020 35 минут назад, Сергей Шубин сказал: Видимо, не все. Функция засыпания. Спасибо, со сквадом получилось! А по функции у меня вот так, и всё равно не спит: Спойлер function sleep(actor, npc) local sleep_zones = { "raz_sleep_1" "zat_a2_sr_sleep", "jup_a6_sr_sleep", "pri_a16_sr_sleep", "actor_surge_hide_2" } for k,v in pairs(sleep_zones) do if utils.npc_in_zone(db.actor, db.zone_by_name[v]) then ui_sleep_dialog.sleep() give_info("sleep_active") end end end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Сергей Шубин 21 Опубликовано 19 августа, 2020 2 минуты назад, Gerbys сказал: А по функции у меня вот так, и всё равно не спит: Проверь, правильно ли прописана зона raz_sleep_1 в алл.спавн. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gerbys 7 Опубликовано 19 августа, 2020 2 минуты назад, Сергей Шубин сказал: Проверь, правильно ли прописана зона raz_sleep_1 в алл.спавн. Я пользуюсь Level эдитором Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Сергей Шубин 21 Опубликовано 19 августа, 2020 5 минут назад, Gerbys сказал: Я пользуюсь Level эдитором Тогда покажи, как выглядит секция зоны сна. В алл.спавн или в эдиторе. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты