Overf1rst 1 503 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 19 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
RicoNRT 253 Опубликовано Суббота в 19:00 Всем привет. Подскажите пожалуйса, как это исправить? Не понимаю, из-за чего это может быть Спойлер Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано Воскресенье в 09:03 как подствольнику дальность полета и скорость менять, файл то нашел, ковырял все равно ничего не меняться просто когда есть топ оружие, хотелось бы чтоб все было топ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 978 Опубликовано Воскресенье в 09:53 sosiska23 grenade_vel в конфиге подствольника. Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано Воскресенье в 10:05 denis2000 поставил 1000, гранаты летят также Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Бессмертный 2 Опубликовано Воскресенье в 10:20 (изменено) Пытаюсь повторить в ЗП интро-катсцену из ЧН с пролетом камеры, но при запуске игры у камеры почему-то "сбиваются" координаты и она воспроизводит полет совсем в другом месте. Если это поможет, то анимацию камеры взял из ЧН (сцена из интро, где камера пролетает по комнате, в которой находятся Шрам, Лебедев и Каланча). Локация Болота (вся геометрия уровня полностью взята из оригинала). При этом в СДК при импорте анимации камеры, она ее проигрывает корректно, там, где нужно. Но в игре почему-то стартует совсем в другом месте. В чем может быть проблема? Изменено Воскресенье в 10:21 пользователем Бессмертный Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 978 Опубликовано Воскресенье в 10:47 (изменено) sosiska23 Причины: 1. Меняли не там 2. Новую игру не начинали Бессмертный Анимация камеры может проигрывается в двух режимах: в глобальных координатах и относительных. Проверяйте в каких сделана сама анимация и как ее проигрываете. Изменено Воскресенье в 10:50 пользователем denis2000 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано Воскресенье в 10:51 denis2000 Спойлер [wpn_addon_grenade_launcher]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "weapons\addons\grenade_launcher" ; option for Level Editor class = WP_GLAUN cform = skeleton visual = dynamics\weapons\wpn_upgrade\wpn_grenade_launcher.ogf description = st_grenade_launcher_descr $prefetch = 32 cost = 2000 inv_name = st_grenade_launcher inv_name_short = st_grenade_launcher inv_weight = 1.3 inv_grid_width = 2 inv_grid_height = 1 inv_grid_x = 18 inv_grid_y = 0 grenade_vel = 1000 ;55 новую игру начинал, тогда где менять? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Бессмертный 2 Опубликовано Воскресенье в 10:51 (изменено) 39 минут назад, denis2000 сказал: sosiska23 Причины: 1. Меняли не там 2. Новую игру не начинали Бессмертный Анимация камеры может проигрывается в двух режимах: в глобальных координатах и относительных. Проверяйте в каких сделана сама анимация и как ее проигрываете. Благодарю. Есть понимание, чем отличаются эти режимы? И как определить, в каком режиме сделана анимация, и в каком режиме я ее проигрываю? Изменено Воскресенье в 11:27 пользователем Бессмертный Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 978 Опубликовано Воскресенье в 12:21 (изменено) 1 час назад, sosiska23 сказал: тогда где менять? В актуальной секции подствольника, для вашей пушки. Где она и как называется известно только вам! Бессмертный Чем отличаются режимы: 1. Режим в глобальных координатах - анимация проигрывается в координатах относительно "глобального" нуля координат на локации (0,0,0). Движковый метод level.add_cam_effector2 2. Режим в относительных координатах - анимация проигрывается относительно текущей точки координат камеры. Движковый метод level.add_cam_effector. Как отличить в каких координатах записана анимация - загрузить ее в SDK и посмотреть, если камера анимирована возле нуля координат, то она относительная, а если анимация расположена далеко в стороне, в конкретном месте локации, то абсолютная. Изменено Воскресенье в 12:33 пользователем denis2000 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sosiska23 0 Опубликовано Воскресенье в 12:54 denis2000 подствольник находиться в weapons.ltx, там все slinser launcher и grenade_launcher я поменял параметры, где подствольник может быть еще прописан? в конфигах пушки параметров подствольника я не нашел Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Бессмертный 2 Опубликовано Воскресенье в 13:06 40 минут назад, denis2000 сказал: В актуальной секции подствольника, для вашей пушки. Где она и как называется известно только вам! Бессмертный Чем отличаются режимы: 1. Режим в глобальных координатах - анимация проигрывается в координатах относительно "глобального" нуля координат на локации (0,0,0). Движковый метод level.add_cam_effector2 2. Режим в относительных координатах - анимация проигрывается относительно текущей точки координат камеры. Движковый метод level.add_cam_effector. Как отличить в каких координатах записана анимация - загрузить ее в SDK и посмотреть, если камера анимирована возле нуля координат, то она относительная, а если анимация расположена далеко в стороне, в конкретном месте локации, то абсолютная. Как понял из вашего объяснения, камера работает в глобальных (абсолютных) координатах. Посмотрел в СДК ЧН, координаты камеры и там, и в СДК ЗП совпадают. В СДК обеих частей все проигрывается корректно. Как изменить метод проигрывания, чтобы она срабатывала там же, где в СДК? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 978 Опубликовано Воскресенье в 14:17 (изменено) 5 часов назад, Бессмертный сказал: Как изменить метод проигрывания, чтобы она срабатывала там же, где в СДК? За метод проигрывания отвечают разные движковые функции (приводил выше). Если вы используете логику sr_cutscene то там есть специальный параметр: global_cameffect = true 5 часов назад, sosiska23 сказал: в конфигах пушки параметров подствольника я не нашел Параметр grenade_launcher_name Изменено Воскресенье в 18:47 пользователем denis2000 1 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pavel2000 34 Опубликовано 23 часа назад Как сильно нагружают игру spacerestrictor'ы с логикой? Т.е стоит ли удалять рестрикторы ориг зп во имя оптимизации(если что я про квестовые, которые ждут что либо)? Такой-же вопрос к smart cover'ам. «Если долго мучиться, что-нибудь получится» Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 298 Опубликовано 21 час назад Pavel2000 если чего-либо много наспавнить, то будет лагать. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Sidorovich 6 Опубликовано 21 час назад На что влияет значение "switch_factor" в файле alife.ltx? Сделать больше - что изменится? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
StrawFlux 1 146 Опубликовано 20 часов назад Sidorovich Участвует в формуле расчета минимального расстояния, при котором объект переходит в онлайн и максимального расстояния, при котором объект переходит в офлайн. Сделаешь больше, разница между m_online_distance и m_offline_distance соответственно будет больше, кароче лучше не трогать. Спойлер 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Conserva 21 Опубликовано 14 часов назад Такая проблема: хотел я объединить возможность отрезания частей мутантов со спавном Сидоровича (конечно, не с нуля: использовал мод Мясник и файлы для спавна торговца). Знаю, проблема не нова, но искать референсы, как по мне, долговато. Сами-то они по отдельности работают, но при объединении, то есть в скрипте bind_monster, игра либо вылетает, либо торговец спавнится, но отрезать монстрам части уже нельзя. И нет, я не просто заменял скрипт на другой, а именно правил внутри (этакий франкенштейн). Корень проблемы я знаю, а именно то, что в функции bind(obj) для торговца local new_binder = generic_object_binder(obj) заменяется на local new_binder = trader_object_binder(obj), но как решить этот недуг у меня уже котелок не варит. Буду благодарен тем, у кого IQ больше, чему меня. Спойлер Только измененные моменты: function generic_object_binder:death_callback(victim, who) (По сути, в функции оригинальный код, но в конце добавляется это) --' Подключим колбэк юзанья, для возможности снятия частей монстров self:exist_use() end --' Поддержка юзанья частей монстров '------------------------------------------------------------------------------- function generic_object_binder:exist_use() local ini = system_ini() if ini:line_exist(self.object:section(), "Spawn_Inventory_Item_Section") then local conf = ini:r_string(self.object:section(), "Spawn_Inventory_Item_Section") local items = {} for s in string.gfind(conf, "%s*([^,]+)%s*") do table.insert(items, s) end self.item = items[1] if self.item and system_ini():section_exist(self.item) then self.item_count = tonumber(items[2]) or 1 self:set_use(ini) end end end function generic_object_binder:set_use(ini) --//определяем и устанавливаем надпись юза local character_use = (ini:r_string(self.object:section(), "character_use")) or "monstr_character_use" self.object:set_tip_text(character_use) --// устанавливаем каллбэк self.object:set_callback(callback.use_object, self.on_use, self) --// устанавливаем озвучку юза self.sound_use = sound_object("material\\dead-body\\collide\\hithard0"..tostring(math.random(1, 6)).."hl") if not self.use then self.use = true end end function generic_object_binder:on_use(obj, who) --// спавним в инвентарь юзающего, части монстра for i=1, self.item_count do alife():create(self.item, who:position(), who:level_vertex_id(), who:game_vertex_id(), who:id()) end --// отключаем каллбэк self.object:set_callback(callback.use_object, nil) --// убираем надпись юза self.object:set_tip_text("") self.use = false --// дадим небольшой хит по телу трупа local ini = system_ini() local h = hit() h.draftsman = self.object h.type = hit.fire_wound h.direction = vector():set(0,1,0) h:bone( (ini:r_string(self.object:section(), "bone_impuls_abscission")) or "bip01_spine" ) h.power = 1 h.impulse = ( (ini:r_u32(self.object:section(), "impuls_abscission")) or 100 ) self.object:hit(h) --// производим озвучку юза self.sound_use:play_at_pos(self.object, self.object:position(), sound_object.s3d) end --'----------------------------------------------------------------------------------------------------------------------- function generic_object_binder:save(packet) (По сути, в функции оригинальный код, но в конце добавляется это) --------- use ----------- packet:w_bool(self.use) ------------------------- end function generic_object_binder:load(reader) (По сути, в функции оригинальный код, но в конце добавляется это) ---------- use ----------- self.use = reader:r_bool() if self.use then self:exist_use() end ------------------------- end Спойлер ----------------------------------------------------------------------------------- -- Sidor etc binding ----------------------------------------------------------------------------------- function bind(obj) local new_binder = trader_object_binder(obj) obj:bind_object(new_binder) end ------------------------------------------------------------------------------------ class "trader_object_binder" (object_binder) function trader_object_binder:__init(obj) super(obj) self.loaded = false end function trader_object_binder:reload(section) object_binder.reload(self, section) end function trader_object_binder:reinit() object_binder.reinit(self) db.storage[self.object:id()] = { } self.st = db.storage[self.object:id()] end function trader_object_binder:update(delta) object_binder.update(self, delta) -- јпдейт торговли if self.object:clsid() == clsid.script_trader then trade_manager.update(self.object) end local st = db.storage[self.object:id()] if st ~= nil and st.active_scheme ~= nil then xr_logic.try_switch_to_another_section(self.object, st[st.active_scheme], db.actor) end if self.st.active_section ~= nil then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "update", delta) end end function trader_object_binder:net_spawn(sobject) if not object_binder.net_spawn(self, sobject) then return false end local on_offline_condlist = db.storage[self.object:id()] and db.storage[self.object:id()].overrides and db.storage[self.object:id()].overrides.on_offline_condlist if on_offline_condlist ~= nil then xr_logic.pick_section_from_condlist(db.actor, self.object, on_offline_condlist) end if not self.object:alive() then return true end if alife():object(self.object:id()) == nil then return false end db.add_obj(self.object) if self.object:clsid() == clsid.script_trader then self.object:set_trader_global_anim("idle_spinka") smart_terrain.setup_gulag_and_logic_on_spawn( self.object, self.st, sobject, modules.stype_trader, self.loaded) end return true end function trader_object_binder:net_destroy() xr_sound.stop_sounds_by_id(self.object:id()) local st = db.storage[self.object:id()] if st and st.active_scheme then xr_logic.issue_event(self.object, st[st.active_scheme], "net_destroy") end if db.offline_objects[self.object:id()] then db.offline_objects[self.object:id()].level_vertex_id = self.object:level_vertex_id() db.offline_objects[self.object:id()].active_section = db.storage[self.object:id()].active_section end db.del_obj(self.object) db.storage[self.object:id()] = nil object_binder.net_destroy(self) end function trader_object_binder:net_save_relevant() return true end function trader_object_binder:save(packet) set_save_marker(packet, "save", false, "trader_object_binder") object_binder.save(self, packet) xr_logic.save_obj(self.object, packet) if self.object:clsid() == clsid.script_trader then trade_manager.save(self.object, packet) end set_save_marker(packet, "save", true, "trader_object_binder") end function trader_object_binder:load(reader) self.loaded = true set_save_marker(reader, "load", false, "trader_object_binder") object_binder.load(self, reader) xr_logic.load_obj(self.object, reader) if self.object:clsid() == clsid.script_trader then trade_manager.load(self.object, reader) end set_save_marker(reader, "load", true, "trader_object_binder") end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mawrak 663 Опубликовано 13 часов назад (изменено) Sidorovich StrawFlux switch_distance можно менять спокойно, это просто увеличит\уменьшит радиус спавна НПС в онлайн. Conserva а что вообще за скрипт для спавна Сидировича? Что он делает? Мне казалось восстановить Сидоровича гораздо проще - https://modfaq.ru/Восстановление_Сидоровича Изменено 11 часов назад пользователем Mawrak 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 978 Опубликовано 13 часов назад Conserva Не пытайтесь все утоптать в один биндер сделайте для Сидоровича отдельный: Для мутантов правки в bind_monster.script, для Сидора в bind_trader.script. В секции Сидора поставьте script_binding = bind_trader.bind 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
стрелок_2009 7 Опубликовано 9 часов назад А как добавить оружию возможность улучшить его у техника? А то создал уникальный ствол а как добавить апгрейды не знаю, по идее по анологии с броне, но в каких конкретно файлах? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
golosgo 0 Опубликовано 9 часов назад (изменено) Ребят всем привет, я хочу начать свой путь в моддинг, скажите пожалуйста где мне найти информацию о том как мне собрать сборку X-Ray 1.6.02, исходный код движка игры, для работы над модификациями S.T.A.L.K.E.R. Call of Pripyat (так же буду не против если подскажете где можно найти исходник движка Clear Sky), я хочу сделать свой первый мод на чистую оригинальную версию игры, буду благодарен за помощь. p.s. я мог немного не понятно задать вопрос ибо, я честно не знаю как его задать, задал как смог) Изменено 9 часов назад пользователем golosgo Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pavel2000 34 Опубликовано 7 часов назад golosgo https://ap-pro.ru/forums/26-rabota-s-sdk/ 1)устанавливаете нужный вам sdk 2)ищите в интернете гайды и уроки как ими пользоваться 3)Изучаете 4)Начинаете свой путь в модинг (при появлении вопросов пишете сюда) 2 часа назад, golosgo сказал: исходный код движка игры это для супер прошаренных программистов, скорее всего вам нужно распаковать оригинальные ресурсы игры в этом вам поможет Дополнено 4 минуты спустя стрелок_2009 вроде в этих inventory_upgrades.ltx и stalkers_upgrade_info.ltx 1 «Если долго мучиться, что-нибудь получится» Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты