Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском по разделу, ответ на него, вероятно, уже есть.
Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.
Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).
Благодарность выражаем в личке или же ставим плюсик в историю репутации. Подобные посты будут удаляться.
Здравствуйте. Произошел небольшой затык, никак не могу с ним разобраться, прошу помощи здесь. Каким образом можно изменить состояние стартового снаряжения в ванильной ЗП ? Под состоянием имеется ввиду полоска изношенности.
Добрый вечер. У меня проблема с AtmosFear 3: Если в начале новой игры актор спавнится на jupiter_underground (и как я понимаю на любой другой подземной локации), то при попытке загрузить квиксейв/перейти на другую локацию игра вылетает с логом:
Expression : !m_error_code Function : raii_guard::~raii_guard File : ..\xrServerEntities\script_storage.cpp Line : 748 Description : ...stalkerzp_new\gamedata\scripts\level_weathers.script:459: bad argument #1 to 'find' (string expected, got nil)
У кого-то есть догадки как это фиксить?
UPD: В общем, единственное решение, которое мне удалось найти - в файле game_maps_single в секции jupiter_underground в строке weathers вместо "indoor_ambient" вписать "atmosfear"
Возможно кому-то пригодится...
Сообщение отредактировал molodoy_chelovek - Понедельник, 15.07.2019, 22:08
Неписи все равно пропадают, когда уходят за пределы смарта.
Тогда можно попробовать несквадовых НПС. С соответствующей правкой логики. Этим смарты по барабану. Но объем файла логики в этом случае ограничен.
Или переключать НПС между смартами. НПС должен работать в смарте, который ближе всего к нему в данный момент. Пример - сквад Ковальского при эвакуации из Припяти. Они последовательно переходят через 5 или 6 смартов и в каждом выполняют работу.
Хотелось бы увидеть строку, на которую указывает лог - 459. И строки выше и ниже.
function WeatherManager:set_state_as_string(ss) --self.debugMessages[7]:SetText(ss) self.state={} local laststring for lvlstring in string.gmatch(ss,"[^;]+") do laststring=lvlstring end
local i,j,grname,curs,nexs=string.find(laststring,"([^=]+)=([^,]+),([^,]+)") <----- ошибка связана с этой строкой if not grname then abort("WeatherManager:set_state_as_string: malformed state string. "..ss) end --local lvl_name=self:unpack_level(lvl) local current_state=self:unpack_state(curs) local next_state=self:unpack_state(nexs) local graph_name=self:unpack_graph_name(grname) local graph=self:get_graph_by_name(graph_name) self.curr_weather=current_state self.next_weather=current_state if graph==nil then -- Старая сохранёнка? Будем считать что на этом уровне - статическая погода else --self.debugMessages[11]:SetText("loaded string="..laststring) --self.debugMessages[12]:SetText("self.state["..graph_name.."]={current_state="..current_state..",next_state="..next_state..",graph_name="..graph_name..",graph=}") self.state[graph_name]={current_state=current_state,next_state=next_state,graph_name=graph_name,graph=graph} end end
Сообщение отредактировал molodoy_chelovek - Понедельник, 15.07.2019, 20:07
1) У меня пропадают трупы нпс. Я понимаю, что игра просто их отчищает, но можно ли сделать так, чтобы игра не удаляла все трупы, а оставляла их.
2) Хотел сделать что-то типа страшного момента в лаборатории. Игрок поворачивается и видит через металлическую сетку, как кровосос ест труп сталкера, вопрос - какую надо прописать логику мутанту, чтобы он был бессмертным, не реагировал на нпс и игрока и стоял на одном месте!
можно ли сделать так, чтобы игра не удаляла все трупы, а оставляла их.
В спавн секции нужного сталкера назначить ему story_id.
ЦитатаVOVASIKVAIS ()
какую надо прописать логику мутанту, чтобы он был бессмертным, не реагировал на нпс и игрока и стоял на одном месте
Чтобы не реагировал на игрока, нужно в активную схему добавить combat_ignore_cond = true. С бессмертием немного сложнее. В bind_monster.script в метод update нужно добавить:
Код
local st = db.storage[self.object:id()] local invulnerability = utils.cfg_get_string(st.ini, st.active_section, "invulnerable", self.object, false, "", nil)
if invulnerability ~= nil then local condlist = xr_logic.parse_condlist(self.object, st.active_section, "invulnerable", invulnerability) local invulnerable = xr_logic.pick_section_from_condlist(db.actor, self.object, condlist) == "true" if self.object:invulnerable() ~= invulnerable then self.object:invulnerable(invulnerable) end end
После этого в активной схеме логики монстра добавить invulnerable = true.
Вызываю такую функцию из логики npc (из работы смарта, то есть)
function switch_offline(actor,npc) if npc then alife():set_switch_offline (npc:id(), true) alife():set_switch_online (npc:id(), false) alife():set_interactive (npc:id(), false) sg_thoughts_message(nil,nil,{'npc [' .. tostring(npc:id()) .. '] must be offline'}) end end
Функция отрабатывает, находит npc, но он не переходит в оффлайн - всё так же стоит и выполняет свою работу.
Чего я не учел?
P.S. До этого с другим npc всё отрабатывало как надо.
function switch_squad_offline(actor, obj, p) local story_id = p[1]
if story_id == nil then abort("Wrong squad identificator [NIL] in switch_squad_offline function") end local squad = get_story_squad(story_id) if squad == nil then return end
for k in squad:squad_members() do local npc = alife():object(k.id) if npc ~= nil then