Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском по разделу, ответ на него, вероятно, уже есть.
Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.
Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).
Благодарность выражаем в личке или же ставим плюсик в историю репутации. Подобные посты будут удаляться.
По квесту сквад портуется в определенную точку. Иногда все нормально, иногда из сквада портуется только лидер. Как сделать чтобы сквад всегда телепортировался полностью? Как заставить непися подойти к ГГ и воспроизвести анимацию (удар прикладом)?
Позаимствовал из СГМ функцию "НПС плохо видят ночью"
-- 'Контроль зрения НПС. function control_eye_range_fov(object) if in_time_interval(21,5) then if object:range()>30 then object:set_range(30) end if object:fov()>90 then object:set_fov(90) end else if object:range()<ReadEyeRange(object:section()) then object:set_range(ReadEyeRange(object:section())) end if object:fov()<ReadEyeFov(object:section()) then object:set_fov(ReadEyeFov(object:section())) end end end
-- 'Контроль зрения НПС. function ReadEyeRange(section) local ltx = system_ini() if ltx:line_exist(section,"eye_range") then return ltx:r_float(section,"eye_range") else return 100 end end function ReadEyeFov(section) local ltx = system_ini() if ltx:line_exist(section,"eye_fov") then return ltx:r_float(section,"eye_fov") else return 160 end end
Вызывается все это из функции motivator_binder:update(delta).
Функция действует. Проверял на разных модах. Сбоев не заметил.
Проблема в том, что функция действует на всех сталкеров. Возникло желание некоторых НПС из этой функции вывести.
Хочу добавить в конфиг сквада строку, например night_vision = true. Неписи из сквада, в секции которого есть такая строка, под функцию попадать не должны. Желательна поддержка кондлиста.
Как нужно изменить функцию control_eye_range_fov(object)?
local se_obj = alife():object(object:id()) if se_obj and se_obj.group_id ~= 65535 then local squad = alife():object(se_obj.group_id) if squad then local night_vision = xr_logic.parse_condlist(squad,"night_vision", "night_vision", utils.cfg_get_string(system_ini(), squad:section_name(), "night_vision", squad, false, "", "false")) if xr_logic.pick_section_from_condlist( db.actor, squad, night_vision ) == "true" then return end end end
З.Ы. По уму, лучше сделать отдельную ИИ схему и поставить проверку кондлиста на эвалуатор.
Сообщение отредактировал makdm - Вторник, 24.04.2018, 10:15
За совет спасибо. Идея работает. Так же пришел в голову ещё один вариант. Ввести новые параметры. Такие, например:
night_eye_range = 60 night_eye_fov = 120
Добавлять их в спавн-секцию НПС.
Две дополнительные функции
function ReadNightEyeRange(section) local ltx = system_ini() if ltx:line_exist(section,"night_eye_range") then return ltx:r_float(section,"night_eye_range") else return 30 end end function ReadNightEyeFov(section) local ltx = system_ini() if ltx:line_exist(section,"night_eye_fov") then return ltx:r_float(section,"night_eye_fov") else return 90 end end
Функция установки зрения примет вид
-- 'Контроль зрения НПС. function control_eye_range_fov(object) if in_time_interval(21,5) then if object:range()>ReadNightEyeRange(object:section()) then object:set_range(ReadNightEyeRange(object:section())) end if object:fov()>ReadNightEyeFov(object:section()) then object:set_fov(ReadNightEyeFov(object:section())) end else if object:range()<ReadEyeRange(object:section()) then object:set_range(ReadEyeRange(object:section())) end if object:fov()<ReadEyeFov(object:section()) then object:set_fov(ReadEyeFov(object:section())) end end end
Этот способ то же работает. Правда, без кондлиста. Но можно создать дополнительные секции НПС с улучшенным зрением.
В связи с этим возникли два вопроса.
1. Какой вариант меньше нагрузит движок? Вариант с добавлением в секцию сквада или вариант с параметрами в спавн-секции?
2. Существует функция create_squad_member, добавляющая НПС в уже существующий сквад. А есть ли функция, удаляющая НПС из существующего сквада? Вызываемая из рестриктора. Что то вроде
В некоторых модах видел, что моделька ГГ меняется (в катсценах) в зависимости от пары шлем-броня: То есть одет стальной шлем и Заря - в игре видим соответствующею модельку ГГ. Как это делается?
моделька ГГ меняется (в катсценах) в зависимости от пары шлем-броня: То есть одет стальной шлем и Заря - в игре видим соответствующею модельку ГГ. Как это делается?
В принципе, можно сделать так.
1. Создать несколько спавн-секций сталкера для кат-сцены с разными визуалами. Под разные комбинации щлем-костюм. 2. Перед стартом кат-сцены проверить, какие костюм и шлем надеты на ГГ. Выбрать секцию с подходящим визуалом и заспавнить её.
Всем привет. Обнаружил у себя баг - деньги ушли в минус, когда нанимал проводника, так ещё и достижение состоятельный клиент выдалось. Второй баг - как-то выдалось достижение охотник за артефактами (искатель), при входе в лаб8икс, врде видел фикс, но не могу найти. И последнее - почему борода покупает F2000, если в конфигах торговли чётко написано - не покупать. Искал по конфигам и скриптам - не нашёл.
sergej5500, по первому вопросу, то всё нужно делать в биндере НПС, в файле xr_motivator.script
1. В методе function motivator_binder:net_spawn(sobject) после строк: if not self.object:alive() then self.object:death_sound_enabled(false)
release_body_manager.get_release_body_manager():moving_dead_body(self.object) ---НЕ ЗАБЫТЬ УБРАТЬ return true end
пишите: local section = self.object:section() local ini = system_ini() self.night_eye_range = utils.cfg_get_number( ini, section, "night_eye_range", self.object, false, nil ) or 30 self.night_eye_fov = utils.cfg_get_number( ini, section, "night_eye_fov ", self.object, false, nil ) or 90
2. В методе function motivator_binder:update(delta) после строки: if object_alive then
пишите self:control_eye_range_fov()
3. Добавляете свой метод в биндер. Для этого, например, перед строкой function motivator_binder:update(delta) пишите:
function motivator_binder:control_eye_range_fov() local game_hours = level.get_time_hours() if game_hours < 5 or game_hours >= 21 then if self.object:range() > self.night_eye_range then self.object:set_range( self.night_eye_range ) end if self.object:fov() > self.night_eye_fov then self.object:set_fov( self.night_eye_fov ) end return end if self.object:range() < self.night_eye_range then self.object:set_range( self.night_eye_range ) end if self.object:fov() < self.night_eye_fov then self.object:set_fov( self.night_eye_fov ) end end
По второму вопросу: Такую функцию не имеет смысла писАть, так как у симуляционных НПС секции могут совпадать и кого удалять будет непонятно. Для удаления нужен id объекта, его можно получить по story_id Так что используйте функцию remove_npc
Всем привет! Возможно ли сделать проверку на предмет у техника, например если у техника не будет артефакта "Золотой рыбки", он не сделает ту или иную модификацию.