Вы задаёте интересующий вас вопрос и тот, кто может вам на него ответить, пишет свой ответ. Правила темы:
1. Прежде чем задать вопрос, желательно прочитать все предыдущие страницы темы. Даже если вы не найдете там нужного ответа - я уверен, вы узнаете много нового. Второй вариант - воспользоваться поиском по ключевому слову.
2. Вы можете задавать вопросы, только непосредственно касающиеся создания модификаций и редактирования файлов игры
3. Личные вопросы не допускаются
4. Отвечать на вопросы желательно достаточно развернуто, задевая все аспекты касающиеся конкретного вопроса
5. Отвечать вы можете только в том случае если уверены в правильности ответа, если не знаете - просто не отвечайте. Авторы неправильных, вводящих в заблуждение ответов будут наказываться.
6.Соблюдайте грамотность и правильность построения вопросов и ответов, во избежание их удаления. "Спасибо / пожалуйста / не знаю" и прочие односложные и не несущие смысловой нагрузки сообщения, будут удаляться немедленно, а их авторы - наказываться.
Основная цель темы - помочь новичкам-модостроителям, второстепенная - свести на нет тенденцию создания новых тем по каждому интересующему новичков вопросу.
if object_all and (IsMonster(object_all) or IsStalker(object_all)) and object_all:alive() then
Вылета нет, но и невидимости для живых нет. Вероятно надо ковырять тут
--[[------------------------------------------------------------------------------------------------ База данных живых онлайновых объектов, зон и рестрикторов, актёра Чугай Александр --------------------------------------------------------------------------------------------------]]
function add_obj( obj ) if IsStalker(obj) then creature[obj:id()] = true elseif IsMonster(obj) then creature[obj:id()] = false end end
function del_obj( obj ) --ASSERT(obj:clsid() ~= -1, "obj:clsid() ~= -1 [%s]", obj:name()) storage[obj:id()] = nil creature[obj:id()] = nil for id,npc in pairs(storage) do if npc.enemy and npc.enemy:id() == obj:id() then npc.enemy = nil end end end
function add_deadman( obj, backup ) if obj then if not dead_bodies[obj:id()] then dead_bodies[obj:id()] = obj:id() end return true elseif backup then if not dead_bodies[backup:id()] then dead_bodies[backup:id()] = backup:id() end return true else return false end end
function remove_deadman() for k,v in pairs(dead_bodies) do if v ~= 0 then local obj = level.object_by_id(v) if obj then if xrs_ai then xrs_ai.npc_death_callback(obj) end obj:iterate_inventory(recheck, obj) dead_bodies[k] = 0 break end else dead_bodies[k] = nil end end end
function protected_loot(object, backup) death_manager.drop_manager(object, backup):create_release_item() end
function remove_delayed() for k,v in pairs(delayed) do if v ~= 0 then local obj = level.object_by_id(v) if obj then local storage_npc = storage[obj:id()] if storage_npc then if storage_npc.death then xr_logic.issue_event(obj, storage_npc.death, "death_callback", obj, obj) end if storage_npc.active_section then xr_logic.issue_event(obj, storage_npc[storage_npc.active_scheme], "death_callback", obj, obj) end sr_territory.issue_event(obj, "death_callback", obj, obj) smart_terrain.on_death(obj:id()) local drop, err_msg = pcall(protected_loot,obj,obj) if not drop then log1("ERROR: DB remove_delayed pcall FAIL "..obj:name().." reason: "..tostring(err_msg)) db.actor:give_game_news(game.translate_string("deadman_fail_warning_text"), "ui\\ui_iconsTotal", Frect():set(498,47,83,47),7000, 20000) end if rx_ai then rx_ai.npc_death(obj,obj) end obj:set_patrol_extrapolate_callback(nil) obj:set_callback(callback.hit, nil) obj:set_callback(callback.death, nil) db.add_deadman(obj, obj) delayed[k] = 0 break else if not ogse.is_quest_npc(obj) then s_obj = alife():object(v) if s_obj then alife():release(s_obj, true) end delayed[k] = 0 break end delayed[k] = 0 end end else delayed[k] = nil end end end
if item == nil then return end local s_obj = alife():object(item:id()) if not s_obj then return end
local section = s_obj:section_name()
if remove_this_shit_immediately[section] then local s_obj = alife():object(item:id()) if s_obj then alife():release(s_obj, true) end return false end
if string.find(section,"arena") then return false end
if string.find(npc:name(), "aem_") then return false end
if string.find(section,"af_") then if ogse.art_accesible(item) then return true else local community = npc:character_community() if community == "bandit" and math.random() > 0.5 then return true end alife():release(s_obj, true) return false end end
if string.find(section,"wpn_binoc") or string.find(section,"binocular") or string.find(section,"hand_radio") or string.find(section,"device_pda") or string.find(section,"kolbasa_a") or string.find(section,"vodka_a") or string.find(section,"psy_helmet_a") or string.find(section,"bread_a") or string.find(section,"guitar") or string.find(section,"yad") or string.find(section,"device_torch") or string.find(section,"wpn_knife") then alife():release(s_obj, true) return false end
if string.find(section,"grenade_f1") then if math.random() > 0.8 then return true else alife():release(s_obj, true) return false end end
if string.find(section,"medkit") then if math.random() > 0.95 then return true else alife():release(s_obj, true) return false end end
if string.find(section,"wpn_") and not string.find(section,"scope") and not string.find(section,"addon") and not string.find(section,"zf4") and not string.find(section,"_sil") and not string.find(section,"grenade_launcher") and item:condition() > 0.90 then if math.random(1,100) > 40 then item:unload_magazine() end if death_manager.rare_item and death_manager.rare_item[section] and death_manager.rare_item[section] == true then item:set_condition(math.random(65,95)/100) else item:set_condition(math.random(death_manager.damage_boundaries(npc))/100) end end
end
function add_zone( zone ) zone_by_name[zone:name()] = zone add_obj( zone ) end
function del_zone( zone ) zone_by_name[zone:name()] = nil del_obj( zone ) end
function add_sl( sl ) sl_by_name[sl:name()] = sl add_obj( sl ) end
function del_sl( sl ) sl_by_name[sl:name()] = nil del_obj( sl ) end
function add_actor( obj ) actor = obj actor_proxy:net_spawn( obj ) add_obj( obj ) end
function del_actor() del_obj( actor ) actor_proxy:net_destroy() actor = nil end
function add_heli(obj) heli[obj:id()] = obj end function del_heli(obj) heli[obj:id()] = nil end
--Туррели
function add_turret(obj) turret[obj:id()] = obj -- нах не надо, но пусть будет. add_obj(obj) end
function del_turret(obj) turret[obj:id()] = nil del_obj(obj) end
-- Транспорт
function add_car(obj) cars[obj:id()] = obj end
function del_car(obj) cars[obj:id()] = nil end
-- Регистрация всех квестовых зон на локации function register_all_quest_zones() for id=1,65535 do local obj = alife():object(id) if obj then if obj:section_name() == "smart_terrain" then add_quest_zone( obj ) end end end end
function add_smart_terrain( obj ) smart_terrain_by_id[obj.id] = obj end
function del_smart_terrain( obj ) smart_terrain_by_id[obj.id] = nil end
function add_quest_zone( obj ) quest_zones[obj:name()] = obj.id end
function del_quest_zone( obj ) quest_zones[obj:name()] = nil end
Выделенное вставил для предотвращения вылета db.tormoz Похоже этот tormoz и не работает.
Цитатаromale ()
Непростая это задача
В целом всё работает, за исключением невидимости для врагов. Эффекты при включении невидимости срабатывают, хотя визуал не прозрачный. Применена текстура воды (как в солянке), а как таковой прозрачности нет. Похоже дело в модели. Как добавить модели прозрачность? В НС+DMX и Adapted_nano_suit_Crysis. Прозрачность модели есть. Мне нужно добавить прозрачность для модели СЕВА.
Есть ещё задачи: При одевании нано-брони снимался фонарь. Если изменить режим костюма (а по факту сам костюм) при включенном ночном виденье, то получаю вылет ogse_night_vision.script:378: attempt to index local 'nv_slot' (a nil value)
Сообщение отредактировал uzznick - Понедельник, 16.03.2015, 20:36
makdm, невероятно! Монстры не видят! Но, НПС (кордон/вояки) видят и не жалеют.
Вообще не понял как сработала невидимость для монстров. В НС+DMX именно: db.make_inviz = false db.not_inviz = false db.tell_90_inviz = false db.tell_finish_inviz = false
Подготовил и протестировал прозрачную модель костюма (для режима от 3 лица) В основном осталось разобраться с невидимостью для НПС.
Сообщение отредактировал uzznick - Понедельник, 16.03.2015, 20:34
Привет всем! Сколько нужно прописывать флагов во вновь введенном маршруте вертолёта, если он должен патрулировать, например кордон, от Акима до блок поста, вдоль дороги, хватит трёх или через определённый промежуток? При простом патрулировании, без стрельбы по ГГ, просто облёт
Теперь по бронетехнике: Был БТР и стрелял пулеметом, теперь появился танк, как сделать что бы он стрелял со ствола, например wpn_rpg_7_grenade и пулеметом с башни (как вертушка), и если возможно, как настроить точку вылета снаряда
Всем привет, можно ли отправить нпс(а) подальше от гг после диалога с ним, через определенный промежуток времени(с помощью таймера) В настоящее время нпс сидит в присутствии гг и пьет водку(так нужно по сюжету) делает это, находясь в последней схеме путей.
Вот логика нпс(а)
[logic] active = walker danger = danger_condition combat_ignore = combat_ignore
Привет, я немного неточно изложил суть проблемы, сцена такая, нпс притопал на место где его встретили гг и еще один перс, нпс уселся рядом, гг начал с ним диалог, после диалога, желательно чтобы нпс ушел, но не сразу, а по истечении какого-то времени, т.е через таймер выставить время его ухода, такое возможно? Да гг при этом, не должен ни куда отходить.
Сообщение отредактировал Х_и_м_и_к - Суббота, 21.03.2015, 22:19
Х_и_м_и_к, тут смотря как смотреть твою сцену и чего задумал. Можно использовать
Код
on_actor_dist_ge = 10.5 | walker@3
--- В присутствии ГГ он на месте, а когда ГГ отошёл от него на 10.5 м, то этот непись отправился в другой путь. Также лучше использовать условие, которое было в диалоге, после которого закрылся диалог give_info, и тогда получится, пока ГГ с ним не поговорил, он никуда не пойдёт, и после их диалога, ГГ пошёл своей дорогой, а непись своей. Получится так:
Код
on_actor_dist_ge = 10.5 | {+info, который выдался в диалоге} walker@3
Цитата
через таймер выставить время его ухода
Таймеры:
on_timer = <number>|<название_схемы> - срабатывает через number миллисекунд после включения схемы. on_game_timer = <number>|<название_схемы> – срабатывает через number секунд игрового времени, после включения схемы.
Можно попробовать так:
Код
on_timer = 10000 | {+info, который выдался в диалоге} walker@3
хотя не уверен, т.к. таймеры в логике не айс, они хороши для рестрикторов. Ещё таймеры можно использовать в путях way_поинтах К примеру, непись делает патрулирование, когда дошел до определенной точки, остановился, ждёт, пока отработает таймер и идет дальше.
Вот такой пример из народной соли, где патрулируют в лагере Отшельника и останавливаются в 3 точках делая паузу.
На данный момент, ситуация такая. Я добавил еще один путь, из диалога выдается поршен(для включения этого пути), но нпс сидит на месте, так как в схеме
Все теперь уходит , спасибо осталось теперь с таймером разобраться... Теперь и таймер работает! Все вопрос снят...
--------------------------------------------- Есть еще один вопрос, почему при использовании схемы караван, нпс временами глючат? Если рядом пара персов, то вроде бы все нормально работает, а если 6 или 8 то один обязательно подвисает, приходится подходить к нему и говорить с ним, только тогда он опять начинает работать... вот
Х_и_м_и_к, если непись спавнится скриптом, и ввиду его отупизма, лучше сразу загнать в гулаг, а конкретных неписей со сложной логикой, лучше делать в all.spawn. Влияет всё, вплоть до некачественной АИ сетки. Вот посмотри, как делали когда-то в нар.соли охранников Витамина на Радаре. Несколько раз помню играл, и не было с ними косяков, по крайней мере у меня.
[9090] ; cse_abstract properties section_name = stalker name = radar_svoboda_reyd1 position = 576.033142089844,-52.8505744934082,-420.248352050781 direction = 0,0,0
Привет, я уже подумывал об этом, сам начинаю замечать что нпс(ы) спавненые в аль.спавне лучше пашут)). У меня толпа неписей которые должны топать с боевками через всю локацию, и вот во время боев, они то и замыкают... Просто скриптовых проще налепить)))))), но если по другому никак то видимо придется через аль. спавн. Обидно конечно. уже столько всего на лепил, к стати удаление придется тоже переделывать, потому что как я заметил (скриптовые и аль.спавновые) разными функциями удаляются... Спасибо за совет, буду пробовать.
Х_и_м_и_к, В all.spawn неписей тоже не трудно создавать, главное первого, а далее только меняешь номера. Единственно, что без НИ никуда, но этого стоит. Также логику отдельно выводи в скрипт, чтобы можно было редактировать её без НИ.
p.s. В нар.соли ещё такой момент: У многих были проблемы с Боцманом на Генераторах, когда тот зависал во время отключении антенн.
[1688] ; cse_abstract properties section_name = stalker_sakharov name = generators_udav position = -102.665512084961,37.5169563293457,-465.242248535156 direction = 0,0,0
- то он отключит антенны в оффлайне и никуда ходить не нужно.
Цитата
потому что как я заметил (скриптовые и аль.спавновые) разными функциями удаляются
Можно удалить по разному, просто в алл.спавне созданных неписей можно удалить, используя его имя, либо поставить флаги, как у Болотного доктора в нычке Стрелка, и удалить его просто, забрав обратно условие его появления. %-info%
Как здорово быть тёртым сталкером! Не бояться каждого шороха, оружия не носить с собой много!
Сообщение отредактировал dimak - Понедельник, 23.03.2015, 09:42
Согласен, просто было все готово, решил по тестить, и упс! Оказывается вылезли две проблемы, 1) нпс в оффлайне уходили в первую точку вальк... 2) В схеме караван, случаются глюки, если под опытных больше двух... Сегодня переделал скриптовых персов в альспавн, вот мои наблюдения, теперь нпс в оффлайне доходят до последней точки, и остаются там как и положено!!!(правда в путях и логике пришлось делать правки, как мне подсказали раньше, с помощью сигнала) Первая проблема снята, а вот караван не любит большую толпу под опытных(((( , нпс(ам) нужно постоянно давать пинков, только тогда все пашет... Еще раз спасибо за совет
Приветствую Всех. Подскажите пожалуйста, в каком файле находятся инфопоршни для повторяющихся заданий из файла "task_manager.ltx"? В частности меня интересует инфопоршн для задания Бармена "Убить военнослужащего".
Привет Всем! Вопросы по д all.spawn Добавляю новую секцию в alife_l01_escape.ltx, компилирую в новый , меняются секции По уроку dimak переписываю в Сяк скрипте function add_new_escape_100() add_new_lc(9100,1608,"На Кордон","info_way100a") end в alife_l03_agroprom.ltx получаем секцию
[1608]
; cse_abstract properties section_name = level_changer name = exit_to_escape_100 position = 191.247650146484, 0.246494874358177, -240.076904296875 direction = 0, 0.800000011920929, -0.0007999999797903 id = 65535 version = 118 script_version = 6 spawn_id = 1608