Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском по разделу, ответ на него, вероятно, уже есть.
Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.
Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).
Благодарность выражаем в личке или же ставим плюсик в историю репутации. Подобные посты будут удаляться.
Есть ли способ через скрипты менять маску смарт-террейна
Нет, такого метода в движке не предусмотрено или в справочнике lua_help.script его не приведено.
ЦитатаAurelio ()
Установить маску отдельно для сталкеров какой-либо группировки пока не получается.
От чего же, это несложно, более того, в ТЧ это было сделано некоторым мутантам (например контролерам). Ко всему прочему террейн у мобов или НПС может иметь несколько масок:
Код
[controller_terrain] 255,000,255,255 010,001,255,255 ;Разрешено ходить по опасным местам на янтаре 014,001,255,255 ;Разрешено ходить по опасным местам на радаре 016,001,255,255 ;Разрешено ходить по опасным местам на припяти
Вот есть секция сталкеров:
Код
[stalker]
В которой есть параметр (например в таком виде):
Код
terrain = stalker_terrain
Который стало быть ссылается на другую секцию:
Код
[stalker_terrain] 255,000,255,255
Значит можно сделать и секцию:
Код
[dolg]:stalker
В которой можно прописать параметр:
Код
terrain = dolg_terrain
Который ссылается соответсвенно на:
Код
[dolg_terrain] 255,255,000,255
Теперь вы спавните долговцев (всех или на конкретном уровне или в конкретных группах или строго конкретных НПС) наследуя секцию dolg, а не stalker:
Код
[jup_b207_duty_security_squad_leader]:dolg ... community = dolg
Сообщение отредактировал denis2000 - Понедельник, 06.05.2019, 12:36
Нет, такого метода в движке не предусмотрено или в справочнике lua_help.script его не приведено.
Я вот тоже не нашел. И вообще в скриптах работу с маской встретил только в 2 файлах (sim_squad_scripted.script и smart_terrain.script). Во втором скрипте файл smart_terrain_masks.ltx используется только для проверки наличия в нем маски при инициализации смарта. А вот во втором интереснее
-- setup location types local location_types = {} do -- to localize below local locations_ini = ini_file("misc\\smart_terrain_masks.ltx")
local function itr(section) local a,key,val = locations_ini:r_line_ex(section,0,"","") location_types[key] = key end
locations_ini:section_for_each(itr) end
При инициализации сквада
function sim_squad_scripted:init_squad() .......... self:set_location_types_section("squad_terrain") self:set_location_types_section("stalker_terrain") ..........
и при апдейте (флажок need_to_reset_location_masks устанавливается в true при загрузке в методе sim_squad_scripted:STATE_Read(packet, size))
if self.need_to_reset_location_masks then self:set_location_types() self.need_to_reset_location_masks = false end
Методы set_location_types и set_location_types_section
function sim_squad_scripted:set_location_types_section (section) local location = location_types[section] if (location) then self:add_location_type(location) end end
function sim_squad_scripted:set_location_types(new_smart_name) self:clear_location_types()
local old_target = self.assigned_target_id and db.smart_terrain_by_id[self.assigned_target_id] if (old_target) then self:set_location_types_section(old_target:name()) end
if (new_smart_name) then self:set_location_types_section(new_smart_name) else for id,se_obj in pairs(db.smart_terrain_by_id) do local props_base = se_obj.props and se_obj.props["base"] if (props_base and tonumber(props_base) ~= 0) then self:set_location_types_section(se_obj:name()) end end end end
А вот вызываемый add_location_type(location) в файле почему-то отсутствует, хотя вызывается из self, и это не способствует пониманию всей этой конструкции.
Цитатаdenis2000 ()
От чего же, это несложно
Ну я так и задавал, как под спойлером написано, но что-то не взлетело. Реакцию на изменение маски удалось получить только меняя stalker_terrain. Вот пример с контролером - 255,000,255,255 должна разрешать доступ во все смарты локаций 0, 2 и 3, так? А маски 010,001,255,255 014,001,255,255 016,001,255,255 должны разрешить доступ в смарты 10, 14 и 16 с локации 1? Или же все смарты локации 1, находящиеся на уровнях 10, 14 и 16 (Янтарь, Радар, Приять судя по комментариям)?
Здравствуйте! Снова возник вопрос. Хочу сделать чтобы мутант при смерти взрывался, нанося урон. Например как в народной солянке зомби которые взрывались. Но хочу сделать на сталкер зп. На пример возьмём тушкана при убийстве которого он будет взрываться и наносить гг урон в некотором радиусе. Объясните пожалуйста только понятно, чтобы я мог сделать это и с другими мутантами, если это возможно. Заранее спасибо за ответ!
возьмём тушкана при убийстве которого он будет взрываться и наносить гг урон в некотором радиусе. Объясните пожалуйста только понятно, чтобы я мог сделать это и с другими мутантами, если это возможно.
С любым мутантом это вряд ли получится. А с мутантом, выполняющем работу в смарте, это вполне возможно.
Прописываете в логику.
on_death = death
[death] on_info = %=suicide_detonate%
В xr_effects.scripts
function suicide_detonate(actor,obj) alife():create("suicide_bomb",vector():set(obj:position()),obj:level_vertex_id(),obj:game_vertex_id()) level.add_call( function() if get_story_object("suicide_bomb") ~= nil then return true end end, function() expl_obj = get_story_object("suicide_bomb") expl_obj:explode(0) end ) if xr_conditions.object_exist(nil,nil,{"suicide_bomb"}) then xr_effects.destroy_object(actor,npc,{"story","suicide_bomb"}) end end
denis2000, там объектов 30к... Я эту локацию сначала декомпилировал, внёс правки и начал компилировать. Тут он выдал, что нету этих лодов. Я свои правки скопировал, ещё раз эту локацию декомпилировал чтобы лоды получить, заменил сверку своими правками, попробовал снова скомпилировать - опять без лодов. Лоды создаются или вручную в SDK, или при декомпиляции уровня. Вот и проблема: при тех настройках батника, которые я ранее показывал когда про проблему написал, должны создаваться лоды (ключ -with_lods), тем более я много раз с такими настройками декомпилил локации и везде лоды были. А в этот раз они просто не создаются. Но вот делать лоды вручную для каждого из 30000 объектов сами понимаете, только сумасшедший возьмётся.
Сообщение отредактировал Prostomod - Понедельник, 06.05.2019, 21:49
Prostomod, Что то ты выдумываешь! 30к лод объектов, ты серьезно? Предел сдк 124 лод обьекта, с правками немного больше, но до 512 еще ни кто не дотягивал.
скат, вот если бы не ваше сообщение, в жизни бы не решил проверить папку с объектами уровня. Да, я ошибся, извиняюсь перед вами. 30к - количество всего объектов, а лод-объектов всего лишь 87 (немало, но не так уж и много, можно и вручную)... Меня больше волнует тот факт, что декомпилятор их автоматом не создал.
Сообщение отредактировал Prostomod - Понедельник, 06.05.2019, 22:12
Поставил очаг радиациина на локацию через sdk, как только туда заходишь происходит безлоговый вылет... Так же со всемы аномалиями, за исключением гравитационных. Ничего не прописывал. Стоит еще STCoP Weapon Pack 2.9.09 и Hd Models, может в них дело?
И еще, я заспавнил мутантов через смарт тиррейн, но они все бегут на другой смарт тиррейн со сталкерами, на ГГ не реагириют. Как сделать так чтобы они спавнились, но ходили рядом со своим спавном и нападали на ГГ.
а лод-объектов всего лишь 87 (немало, но не так уж и много, можно и вручную)
87 LOD объектов - это мелочь! Создадите ЛОДы для всех 30К и SDK перестанет стартовать нормально.
ЦитатаProstomod ()
Меня больше волнует тот факт, что декомпилятор их автоматом не создал.
Ну не смогла, не смогла (возможная причина - левел создан инструментарием отличным от оригинального GSC). Можете обратиться к разработчику, может он пофиксит.
ЦитатаProstomod ()
Но вот делать лоды вручную для каждого из 30000 объектов сами понимаете, только сумасшедший возьмётся.
Какие же маньяки по вашему левел дизайнеры GSC? Они все это "в ручную" делали!
ЦитатаAurelio ()
Ну я так и задавал, как под спойлером написано, но что-то не взлетело. Реакцию на изменение маски удалось получить только меняя stalker_terrain.
Да проблема в том, что меняем для НПС, а наблюдаем за сквадом. Это совершенно разные объекты для движка.
ЦитатаAurelio ()
Я вот тоже не нашел
Почему? Ниже как раз приводите много интересного из того что нашли: 1. Движковый метод add_location_type(location), который как раз и предназначен для на значения объекту необходимого параметра тип локации. (см. lua_help.script) 2. Метод add_location_type(location) заявлен только для объектов класса cse_alife_online_offline_group, то есть только для сквадов! (см. lua_help.script) 3. При инициализации сквадам задается location_type строго из файла misc\smart_terrain_masks.ltx из секций [squad_terrain] и [stalker_terrain] (замечю, что в оригинале ЗП фигурирует только [stalker_terrain]). 4. Динамически переназначается location_type при выборе цели для сквада в методе sim_squad_scripted:set_location_types. Если цель смарт-террейн, то location_type из секции [stalker_terrain], плюс из секции с именем старого смарта, плюс из секции с именем нового смарта. Если цель сквада не смарт, а ГГ или другой сквад, то location_type из секции [squad_terrain], плюс все секции с именем смарт-террейна, которые имеют параметр "base" в своих настройках (simulation_objects_props.ltx)
Сообщение отредактировал denis2000 - Вторник, 07.05.2019, 11:28
Какую логику дать нпсам (их двое), чтобы они следовали за главарём?
У вас точно ЗП? Или вы ТЧ гоняете? Вообще-то в ЗП все НПС входят в сквад. Сквад имеет командира. Куда командир туда и остальные НПС, входящие в сквад. Вопрос из области непоняток.