Вы задаёте интересующий вас вопрос и тот, кто может вам на него ответить, пишет свой ответ. Правила темы:
1. Прежде чем задать вопрос, желательно прочитать все предыдущие страницы темы. Даже если вы не найдете там нужного ответа - я уверен, вы узнаете много нового. Второй вариант - воспользоваться поиском по ключевому слову.
2. Вы можете задавать вопросы, только непосредственно касающиеся создания модификаций и редактирования файлов игры
3. Личные вопросы не допускаются
4. Отвечать на вопросы желательно достаточно развернуто, задевая все аспекты касающиеся конкретного вопроса
5. Отвечать вы можете только в том случае если уверены в правильности ответа, если не знаете - просто не отвечайте. Авторы неправильных, вводящих в заблуждение ответов будут наказываться.
6.Соблюдайте грамотность и правильность построения вопросов и ответов, во избежание их удаления. "Спасибо / пожалуйста / не знаю" и прочие односложные и не несущие смысловой нагрузки сообщения, будут удаляться немедленно, а их авторы - наказываться.
Основная цель темы - помочь новичкам-модостроителям, второстепенная - свести на нет тенденцию создания новых тем по каждому интересующему новичков вопросу.
Занялся адаптацией нано-брони с пультом (автор monnoroch) под OGSE 0.6.9.3 Все функции работают за исключением маскировки (невидимости)
Столкнулся с вылетом attempt to perform arithmetic on field 'tormoz' (a nil value) Благодаря Frankenshtayn, вылет поборол добавлением в db.script строки tormoz = 0 Теперь вылет attempt to index global 'IAmAMonster' (a nil value) Как понимаю в
Для адаптации к ОГСЕ этого костюма с работающей функцией невидимости, нужно еще адаптировать скрипты meceniy_* из Солянки + другие связанные скрипты + связанные конфиги, иначе невидимости не добиться.. Все упоминания о make_inviz, db.tormoz и пр. присутствующие в скриптах монороха имеют отсылки именно к соответствующим скриптам/функциям из Солянки.. В ОГСЕ ничего этого нет и не было. Функция невидимости костюма от Моннороха изначально были завязана именно на уже готовые функции невидимости маскхалата от meceniy.. Как-то так, в общем.. Непростая это задача
Вы ленивы, следовательно вы изобретательны.. (Граф Де Гиш)
uzznick, Могу предположить одно - ты пытаешься сделать все это на чистом ТЧ, не используя скрипты АМК... Поэтому у тебя такой и вылет. Дело в том, что в чистом ТЧ нет таких штуковин как IAmAMonster и IAmAStalker, они зарегистрированы\прописаны в АМК поэтому пробуй свою строку
Код
if object_all and (IAmAMonster[object_all:clsid()] or IAmAStalker[object_all:clsid()]) and object_all:alive() then
привести в такой вид:
Код
if object_all and (IsMonster(object_all) or IsStalker(object_all)) and object_all:alive() then
Имеется персонаж, у него есть логика, в ней куча путей,
Разбей эту "кучу" на такую же "кучу схем" в логике и с сигналами в веях, т.е. что бы непись отрабатывал не "две длинные", а пяток "коротких" схем. Ну, склонна логика обновляться у непися при смене режима аллайфа с "off" на "on", когда непись возвращается в начало неотработанной схемы. Т.е. непись не будет так далеко "возвращаться назад" в случае "туда-сюда видимость".
Сообщение отредактировал Korpus - Воскресенье, 15.03.2015, 00:35
Привет Саш, проблема возникает когда начинается боевка, нпс рассредоточиваются и воюют где им вздумается)), а когда гг уходит от них далеко, начинается хаос. Те что были рядом идут куда нужно, а тот(те) что далеко топает в начальную точку, так же происходит и в конце пути, дошел, гг нет рядом топает в начало... Самое непонятное для меня, это то, что допустим у нпс 8 путей, он доходит до 7, и не пройдя 8(поршен не выдан еще!) топает к первому((((.
ЦитатаKorpus ()
Разбей эту "кучу
Да я так и делал, потому что глюков много, если длинные пути делать, по этому там караван задействовал, а потом опять пути, чтобы хоть как-то убрать глюки... Только вот сигналы не пробовал ставить в пути...
Сообщение отредактировал Х_и_м_и_к - Воскресенье, 15.03.2015, 08:39
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
Привет, я уже подумывал об этом, сам начинаю замечать что нпс(ы) спавненые в аль.спавне лучше пашут)). У меня толпа неписей которые должны топать с боевками через всю локацию, и вот во время боев, они то и замыкают... Просто скриптовых проще налепить)))))), но если по другому никак то видимо придется через аль. спавн. Обидно конечно. уже столько всего на лепил, к стати удаление придется тоже переделывать, потому что как я заметил (скриптовые и аль.спавновые) разными функциями удаляются... Спасибо за совет, буду пробовать.