Overf1rst 1 499 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 19 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Novik 21 Опубликовано 26 августа, 2020 Только что, AziatkaVictor сказал: Novik не хватает партиклов, откуда локация? Из тч в зп Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 926 Опубликовано 26 августа, 2020 Novik значит надо почистить в СДК локацию от партиклов, которых нету в ЗП, либо перенести партиклы из ТЧ в ЗП. Но, думаю, первое будет попроще... Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 956 Опубликовано 26 августа, 2020 Novik Либо заменить партиклы из ТЧ на аналоги из ЗП (при наличии таковых). К стати партикл мух насколько я помню еще из билдов пришел и в ЗП должен быть аналог. Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Novik 21 Опубликовано 26 августа, 2020 8 минут назад, AziatkaVictor сказал: Novik значит надо почистить в СДК локацию от партиклов, которых нету в ЗП, либо перенести партиклы из ТЧ в ЗП. Но, думаю, первое будет попроще... Спасибо!! теперь новый вылет Expression : fatal error Function : CInifile::r_string File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp Line : 513 Description : <no expression> Arguments : Can't find variable bound_rect in [level_map] Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Overf1rst 1 499 Опубликовано 26 августа, 2020 Проверь наличие level.ltx в папке с уровнем, в нём должна быть указанная секция и параметр. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Novik 21 Опубликовано 26 августа, 2020 4 минуты назад, Overfirst сказал: Проверь наличие level.ltx в папке с уровнем, в нём должна быть указанная секция и параметр. ; level script file [level_map] texture = ui\ui_map_escape x1 = -490.7 x2 = 504.8 z1 = -1081 z2 = 1114.2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Overf1rst 1 499 Опубликовано 26 августа, 2020 Это ТЧ файл, там это работает чутка по-другому. Ты же компилировал спавн, делал Make Game. В SDK папке с уровнем должен быть подходящий level.ltx под ЗП. В крайнем случае воткни содержимое этого же файла от ЧН локи: [map_usage] ver=1.0 [level_map] bound_rect = -335.000000,-630.000000,415.000000,870.000000 texture = map\map_escape Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Novik 21 Опубликовано 26 августа, 2020 Спасибо! А почему дома черные? что то не так с лайтмапами? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gerbys 7 Опубликовано 26 августа, 2020 (изменено) Сразу блок вопросов: 1. Как при начале новой игры автоматически вводить определённые консольные команды? (fov и тд) 2. Можно ли создавать аномалии по получении инфопоршня и как? 3. Как настроить простреливаемость кустов? (под кустами АИ сетка) 4. Как сделать, чтобы вороны летали не только над персонажем? 5. Как заставить НПС разжигать/тушить костры при входе/выходе из смарт-террейна? 6. Как "унять" иногда возникающую агрессию НПС на всех противников на локации? 7. Как реализовать плавные приседания? Изменено 26 августа, 2020 пользователем Gerbys Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 956 Опубликовано 27 августа, 2020 (изменено) 10 часов назад, Novik сказал: А почему дома черные? что то не так с лайтмапами? Именно. По хорошему нужна перекомпиляция локаций из ТЧ по простому можно подправить вручную лайтмапы: Спойлер Наша задача - чтобы в r1 и r2 не было некрасивых жутко черных теней. Работаем через программу paint.net (требует установленного .Net Framework v2.0), может и через фотошоп можно - не знаю. В папке с уровнем будем редактировать лайтмапы: lmap*_1.dds - снижаем контраст на 15 единиц и сохраняем в формате dxt5 без мипмапов lmap*_2.dds переделывать сложнее - задача сделать менее прозрачным. Пересохраняем как dds в формате R5G6B5, прозрачность исчезнет совсем. Открываем снова и меняем прозрачность с 255 до 30, затем снижаем контраст на 15 единиц, сохраняем в формате dxt5 без мипмапов А если еще проще можно взять готовые перекомпилы уровней ТЧ на ЗП. 9 часов назад, Gerbys сказал: Как при начале новой игры автоматически вводить определённые консольные команды? Спойлер Выполняете при старте игры код в любом удобном месте скриптов. local console = get_console() console:execute("комманда консоли") 9 часов назад, Gerbys сказал: Можно ли создавать аномалии по получении инфопоршня и как? Спойлер function create_anomaly( zone_name, zone_radius, position, lv, gv ) ----------------------------Создаём объект - аномалию---------------------------- local sobj = alife():create( zone_name, position, lv, gv ) local packet = net_packet() packet:w_begin( 0 ) -------------------------------------Читаем нет-пакет -------------------------- sobj:STATE_Write( packet ) packet:r_seek( 2 ) local game_vertex_id = packet:r_u16() local distance = packet:r_float() local direct_control = packet:r_s32() local level_vertex_id = packet:r_s32() local object_flags = packet:r_s32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local spawn_story_id = packet:r_s32() local shape_count = packet:r_u8() for i = 1,shape_count do local shape_type = packet:r_u8() if shape_type == 0 then local center = packet:r_vec3() local radius = packet:r_float() else local box = packet:r_matrix() end end local restrictor_type = packet:r_u8() local max_power = packet:r_float() local owner_id = packet:r_s32() local enabled_time = packet:r_u32() local disabled_time = packet:r_u32() local start_time_shift = packet:r_u32() local offline_interactive_radius = packet:r_float() local artefact_spawn_count = packet:r_u16() local artefact_position_offset = packet:r_s32() local last_spawn_time = packet:r_u8() ------------------------------------------Меняем данные пакета local new_center = vector():set( 0, 0, 0 ) owner_id = bit_not( 0 ) restrictor_type = 3 max_power = 0 offline_interactive_radius = 30 artefact_spawn_count = 32 last_spawn_time = 0 ------------------------------------------------Пишем в пакет packet:w_begin( 0 ) packet:w_u16( game_vertex_id ) packet:w_float( distance ) packet:w_s32( direct_control ) packet:w_s32( level_vertex_id ) packet:w_s32( object_flags ) packet:w_stringZ( custom_data ) packet:w_s32( story_id ) packet:w_s32( spawn_story_id ) packet:w_u8( 1 ) packet:w_u8( 0 ) packet:w_vec3( new_center ) packet:w_float( zone_radius ) packet:w_u8( restrictor_type ) packet:w_float( max_power ) packet:w_s32( owner_id ) packet:w_u32( enabled_time ) packet:w_u32( disabled_time ) packet:w_u32( start_time_shift ) packet:w_float( offline_interactive_radius ) packet:w_u16( artefact_spawn_count ) packet:w_s32( artefact_position_offset ) packet:w_u8( last_spawn_time ) packet:r_seek( 2 ) sobj:STATE_Read( packet, packet:w_tell() ) return sobj end 9 часов назад, Gerbys сказал: Как заставить НПС разжигать/тушить костры при входе/выходе из смарт-террейна? Спойлер Расскоментировать сооветствующий код в скрипте bind_campfire.script в функции campfire_binder:update(delta). При необходимости откорректировать. 9 часов назад, Gerbys сказал: Как настроить простреливаемость кустов? Спойлер Это свойства материала Factors->Shooting, чем меньше тем легче пробивается. 9 часов назад, Gerbys сказал: Как сделать, чтобы вороны летали не только над персонажем? Как реализовать плавные приседания? Спойлер Это вроде как только правками движка можно переделать. 9 часов назад, Gerbys сказал: Как "унять" иногда возникающую агрессию НПС на всех противников на локации? Спойлер Можно прописать развернутые условия в параметры combat_ignore_cond, combat_ignore_keep_when_attacked логики НПС. Изменено 27 августа, 2020 пользователем denis2000 1 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Novik 21 Опубликовано 27 августа, 2020 1 час назад, denis2000 сказал: А если еще проще можно взять готовые перекомпилы уровней ТЧ на ЗП. Где бы вот их взять)) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 956 Опубликовано 27 августа, 2020 18 минут назад, Novik сказал: Где бы вот их взять Начните хотя бы отсюда: Каталог локаций для Тень Чернобыля / Чистое Небо / Зов Припяти 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gerbys 7 Опубликовано 27 августа, 2020 5 часов назад, denis2000 сказал: Расскоментировать сооветствующий код в скрипте bind_campfire.script в функции campfire_binder:update(delta). При необходимости откорректировать. При расскоментировании ловлю вылет. Функция вот такая, ничего не менял: Спойлер function campfire_binder:update(delta) object_binder.update(self, delta) --[[ printf("campfire_update!!!") local kamp = xr_kamp.kamps[string.gsub(self.object:name(), "_campfire", "")] if kamp ~= nil and kamp.population > 0 then if self.campfire:is_on() then if (level.get_time_hours() >= 4 and level.get_time_hours() < 21) and level.get_time_minutes() >= campfire_timeout[self.object:name()] then printf("turning off campfire %s %s %s",tostring(level.get_time_hours() >= 6 and level.get_time_hours() < 21),tostring(self.population),tostring(campfire:is_on())) self.campfire:turn_off() printf("turning off campfire %s %s %s",tostring(level.get_time_hours() >= 6 and level.get_time_hours() < 21),tostring(self.population),tostring(campfire:is_on())) end else if (level.get_time_hours() < 4 or level.get_time_hours() >= 21) and level.get_time_minutes() >= campfire_timeout[self.object:name()] then printf("turning on campfire %s %s %s",tostring(level.get_time_hours() >= 6 and level.get_time_hours() < 21),tostring(self.population),tostring(campfire:is_on())) self.campfire:turn_on() end end else self.campfire:turn_off() end ]]-- end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
RobocatiK 96 Опубликовано 27 августа, 2020 (изменено) Посоветуйте движок для ЗП "Чтоб был", то есть никаких движковых изменений я делать не буду, но движок должен залечить старые раны X-Ray... (Кроме OpenXRay) Изменено 27 августа, 2020 пользователем RoboCat Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 956 Опубликовано 27 августа, 2020 Gerbys Приводите лог вылета! И содержимое файла после редактирования. Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 27 августа, 2020 Как сделать квест на убийство рандомного NPC, который шляется по всей зоне? Как заблокировать квест если у ГГ маленькая защита от чего либо? Как сделать квест по установке сканера? Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Arkada 428 Опубликовано 27 августа, 2020 5 минут назад, Igor_Misery сказал: Как сделать квест на убийство рандомного NPC, который шляется по всей зоне? Как заблокировать квест если у ГГ маленькая защита от чего либо? Как сделать квест по установке сканера? Вы можете сами загуглить эти вопросы в интернете? Вы можете посмотреть некоторые скрипты? Вы можете поискать аналоги квестов перед тем как написать сообщение? 1. Как сделать квест на убийство рандомного NPC, который шляется по всей зоне?Видео2. Как заблокировать квест если у ГГ маленькая защита от чего либо? Защита от разрыва? Защита от огня? Защита от радиации? Наверное это можно проверить скриптом, но не знаю как. 3.Посмотрите этот плейлист. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 27 августа, 2020 Только что, Winzor сказал: Вы можете сами загуглить эти вопросы в интернете? Вы можете посмотреть некоторые скрипты? Вы можете поискать аналоги квестов перед тем как написать сообщение? 1. Как сделать квест на убийство рандомного NPC, который шляется по всей зоне?Видео2. Как заблокировать квест если у ГГ маленькая защита от чего либо? Защита от разрыва? Защита от огня? Защита от радиации? Наверное это можно проверить скриптом, но не знаю как. 3.Посмотрите этот плейлист. Я все уроки Бориса по квестам пересмотрел. Он эксклюзив делал, а мне НПС, который спавнится по своей воле, не на вей поинтах, не на каверах,. Хотите - принимайте меня за идиота, но я ищу прежде, чем спрашивать. Ещё вопрос. Как у торговца сделать скидку, после выполнения квеста? Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
RobocatiK 96 Опубликовано 27 августа, 2020 (изменено) 38 минут назад, Igor_Misery сказал: Как у торговца сделать скидку, после выполнения квеста? [trader] buy_condition = trade_generic_buy sell_condition = trade_generic_sell buy_supplies = supplies_start discounts = {+space_restrictor} discount (В фигурных скобках ваш рестриктор) [discount] (К сожалению не знаю что тут указано...) buy = 1 sell = 0.9 Изменено 27 августа, 2020 пользователем RoboCat Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 27 августа, 2020 Только что, RoboCat сказал: buy = 1 sell = 0.9 Зато, я знаю, спасибо. Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Arkada 428 Опубликовано 27 августа, 2020 В 16.08.2020 в 14:41, denis2000 сказал: Крим 1. Правой кнопкой мыши на я ярлыке, выбрать свойства, закладка "ярлык", кнопка "Сменить значек...", кнопка "Обзор". 2. Разобрать xrengine.exe редактором ресурсов (например PE Explorer) и сменить иконку зашитую в нем. Дополнено 3 минуты спустя Да, правки движка (для своего мода такую правку переносил Winsor) или пересборка нетпакета актора (этот метод рекомендовал Hozar_2002). Чистый файл с правкой у меня остался: на основе оригинального файла из ЗП перенёс функцию из CoC. Больше никаких изменений. Скачать: https://yadi.sk/d/GHB0HKCA1nUm-g Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gerbys 7 Опубликовано 27 августа, 2020 6 часов назад, denis2000 сказал: Gerbys Приводите лог вылета! И содержимое файла после редактирования. Спойлер Error Reason: ---------------------------------------- xrEngine.exe caused BREAKPOINT in module "D:\Games\S.T.A.L.K.E.R. Call of Pripyat\bin\xrCore.dll" at 0023:00B571C8, xrDebug::backend()+168 byte(s) User Message: ---------------------------------------- Expression : !m_error_code Function : raii_guard::~raii_guard File : ..\xrServerEntities\script_storage.cpp Line : 748 Description : ...all of pripyat\gamedata\scripts\bind_campfire.script:47: attempt to call a nil value Спойлер function campfire_binder:update(delta) object_binder.update(self, delta) [[ printf("campfire_update!!!") local kamp = xr_kamp.kamps[string.gsub(self.object:name(), "_campfire", "")] if kamp ~= nil and kamp.population > 0 then if self.campfire:is_on() then if (level.get_time_hours() >= 4 and level.get_time_hours() < 21) and level.get_time_minutes() >= campfire_timeout[self.object:name()] then printf("turning off campfire %s %s %s",tostring(level.get_time_hours() >= 6 and level.get_time_hours() < 21),tostring(self.population),tostring(campfire:is_on())) self.campfire:turn_off() printf("turning off campfire %s %s %s",tostring(level.get_time_hours() >= 6 and level.get_time_hours() < 21),tostring(self.population),tostring(campfire:is_on())) end else if (level.get_time_hours() < 4 or level.get_time_hours() >= 21) and level.get_time_minutes() >= campfire_timeout[self.object:name()] then printf("turning on campfire %s %s %s",tostring(level.get_time_hours() >= 6 and level.get_time_hours() < 21),tostring(self.population),tostring(campfire:is_on())) self.campfire:turn_on() end end else self.campfire:turn_off() end ]] end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 956 Опубликовано 28 августа, 2020 Gerbys Вы неправильно расскоментировали код! 1. Нужно удалить открывающую скобку коментария: --[[ 2. И закрывающую: ]]-- 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gerbys 7 Опубликовано 28 августа, 2020 В 27.08.2020 в 10:23, denis2000 сказал: Можно прописать развернутые условия в параметры combat_ignore_cond, combat_ignore_keep_when_attacked логики НПС. Я имею ввиду не конкретных НПС, а вообще любых. Периодически происходят ситуации, когда неожиданно сталкеры подрываются (обычно после любого столкновения с врагом) и смотрят в сторону врагов через всю карту, и, как правило, так начинают себя вести все НПС одновременно, на всей карте начинается огромный замес. Дополнено 50 минуты спустя Как реализовать квест на закладку определённых вещей в один из тайников (ящиков), чтобы они потом исчезли и был включён инфопоршень. (Пример: берешь квест, тебе выдают вещи, которые ты должен заложить в тайник и вернуться за наградой.) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 884 Опубликовано 28 августа, 2020 1 час назад, Gerbys сказал: Я имею ввиду не конкретных НПС, а вообще любых. Периодически происходят ситуации, когда неожиданно сталкеры подрываются (обычно после любого столкновения с врагом) и смотрят в сторону врагов через всю карту, и, как правило, так начинают себя вести все НПС одновременно, на всей карте начинается огромный замес. А каким образом неписи заспавнены? Если сквадами, то таких проблем не должно быть. 1 час назад, Gerbys сказал: Как реализовать квест на закладку определённых вещей в один из тайников (ящиков), чтобы они потом исчезли и был включён инфопоршень. Проблема, видимо, в том, как сделать проверку, что предмет внутри ящика. function is_item_in_inventory_box(actor, npc, p) local inv_box = get_story_object(p[1]) local item_in_box = false local function compare_item(inv_box, item) if item:section() == p[2] then item_in_box = true end end inv_box:iterate_inventory_box(compare_item, inv_box) return item_in_box end =is_item_in_inventory_box(предмет:ящик) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты