Перейти к контенту

[SoC] Ковыряемся в файлах


Рекомендуемые сообщения

10 минут назад, Змея сказал:

ну как же нет.

Ну и что? Это просто игнорирование боя. Почему когда игнор отключается, они начинают стрелять? Так не должно быть. До этого нет никаких функций, которые поссорили бы ГГ с этими НПСами. Даже если не ранить их до этого и никак не задевать, все равно начинают палить по игроку при переходе в эту секцию. 

Ссылка на комментарий

Ну подумалось - раз игнор прописан, значит неписи враждебные))

Цитата

Так не должно быть

Ну да...тут у меня как раз написаны зачатки логики приблизительно такого же плана. Игнор прописан, чтобы неписи игнорили мутантов при разговоре с ГГ.

При переключении в другую секцию они естественно не проявляют агрессии к ГГ. Хотя вояки))

А нельзя как-нибудь через ХРЕ узнать, не получают ли неписи хит от ГГ или какого-либо предмета в инвентаре ГГ? Единственное - что на ум пришло...

А убери для теста игнор...Так же будут вести себя?

Изменено пользователем Змея
Ссылка на комментарий

Вот и меня назрел вопрос. Появилась нужда немного изменить готовый квест в НЛС. Суть такая: мы приходим к НПС, у которого я заранее прописал айтем (ПДА) в профиле, который выпадет с него, если его убить. Но если договориться с ним мирно, получить с него все награды, наводки на тайники и убить, ПДА у него в инвентаре останется при смерти. То есть он может дать наводку на тайник, где лежит этот же ПДА и у него в инвентаре будет этот ПДА, это не есть хорошо... Хотелось бы узнать, можно ли сделать как-нибудь удаление айтема при получении поршня мирного договора?

Ссылка на комментарий

Для ЗП как-то такое делал, не знаю, прокатит ли с ТЧ, не проверял, поменял лишь название для функции получения непися по стори айди:

function remove_npc_object(actor, npc, p)
	local npc = level_object_by_sid(tonumber(p[1]))
	local item = npc:object(p[2])
	if npc and item then
		alife():release(alife():object(item:id()), true)
	end
end

Тести.

Изменено пользователем Overfirst
  • Нравится 1

Ранее был известен под ником BoBaH_671.

Ссылка на комментарий
В 08.08.2018 в 06:29, Змея сказал:

конечно попробуй

Результат тот же. Поршень "дружбы" не выдаётся почему-то(смотрел через расширенный _g.script).

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий

@Houdini_one, а в моём варианте логике поршень дружбы и не выдавался...Он удалялся при обиде несмотря на то, был выдан или нет. Как и удалялся поршень обиды...

А по поводу выдачи сам понимаешь - нужно таки писать нормальную функцию. Я конечно в скриптах не понимаю - но такое впечатление, что функция одноразовая...То есть - одел норм костюмчик - хорошо. Снял его - до свиданья...

Ссылка на комментарий
4 часа назад, Змея сказал:

одноразовая

На апдейте стоит же.

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий
11 минут назад, Змея сказал:

Без комментариев

Смотри, поправил функцию:


function check_outfit_last_day() 
local outfit = db.actor:item_in_slot(6) 
if outfit then 
if outfit:section() == "last_day_outfit" then 
       db.actor:give_info_portion("swa_last_day_friend")
       db.actor:disable_info_portion("swa_last_day_enemy")
else 
       db.actor:give_info_portion("swa_last_day_enemy")
       db.actor:disable_info_portion("swa_last_day_friend") 
end
return true 
end
return false 
end


Снимаю костюм, надеваю другой - стреляют, надеваю нужный - стреляют, выхожу из алайфа и захожу снова - не стреляют, всё ок. Но, косяк в том, что когда на мне нет костюма(в свитере я) они не стреляют. Начинают стрелять когда я в другом костюме. Как это поправить?

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий

@Houdini_one, Попробуйте проверку таким образом (те добавить функцию апдейта к Вашему файлу скрипта):


function update()
	if not exo_checked then
		db.actor:set_fastcall(check_outfit_last_day, db.actor)
		exo_checked = true
	end
end

function check_outfit_last_day()
	local outfit = db.actor:get_current_outfit()
	if outfit and outfit:section() == "last_day_outfit" then
		if has_alife_info("swa_last_day_enemy") then
			db.actor:disable_info_portion("swa_last_day_enemy")
		end
		db.actor:give_info_portion("swa_last_day_friend")
	else
		if has_alife_info("swa_last_day_friend") then
			db.actor:disable_info_portion("swa_last_day_friend")
		end
		db.actor:give_info_portion("swa_last_day_enemy")
	end
end

 

Нужно вписать вызов скриптовой функции в файле bind_stalker.script\function actor_binder:update(delta) таким образом - название_скрипта.update()

Ссылка на комментарий
7 часов назад, gam сказал:

таким образом

Спасибо, наконец-то всё работает как нужно!

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий

Всем привет ещё раз :) Стал интересен ещё один момент - как по поршню можно сделать какого-то определенного НПС (или даже целый гулаг) друзьями/врагами?

Ссылка на комментарий

Салют Строителям!!!:621:

 

@fastle, Можно так к примеру:

 

Становимся врагом:
xr_gulag.setGulagEnemy("Имя смарта", db.actor)  -- к примеру лагерь новичков "esc_lager"

 

Становимся нейтралом:
xr_gulag.setGulagNeutral("Имя смарта", db.actor)

  • Нравится 1
  • Полезно 2
Ссылка на комментарий

Ещё вопрос такой:
Можно как-то перенести из ЧН функцию которая отменяет задание? В ТЧ только его можно провалить и выполнить. И ещё можно как-то закрыть переходы до получения инфопоршня? Например в ЧН переход в подземелье НИИ через нору закрывался. Или это всё движок?

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий
1 час назад, Houdini_one сказал:

Можно как-то перенести из ЧН функцию которая отменяет задание?

Нет, т.к. в движке ТЧ нет необходимого состояния для задания. Т.е. нужно ковырять движок.

  • Согласен 1
  • Полезно 1
Ссылка на комментарий

Начал ловить странный вылет. Стабильный, подозреваю, что связан с анимацией и моделями НПС или мутанта, но скорее всего НПС. В логе из буфера только переполнение стека. Движок 1.0006 + X-Ray Extansions. Выкладываю что есть:
854ffc1d78041ab9240c83df929ae3e0.jpg

Скрытый текст

* Loading animations for stalker with visual actors\hero\stalker_novice
* Loading animations for stalker with visual actors\hero\stalker_novice
* Loading animations for stalker with visual actors\hero\stalker_novice
stack trace:

0023:00464E62 XR_3DA.exe, CKinematicsAnimated::LL_GetMotion()
0023:004689A1 XR_3DA.exe, CKinematicsAnimated::Bone_Calculate()

 

 

Изменено пользователем Graff46
Ссылка на комментарий

Адаптирую blowout mod 1.0:

 


Что правил(сначала оригинал, потом мои правки)
ogsm_funcs.script:

function __do_timer_action(select_string,params_string)

-- Начало алгоритма выброса --

-- 1. Настало время выброса.
    if select_string=="bl1" then
        if ogsm_surge then
            if (level.name() ~= "l03u_agr_underground") and (level.name() ~= "l08u_brainlab") and (level.name() ~= "l10u_bunker") and (level.name() ~= "l04u_labx18") and (level.name() ~= "l12u_sarcofag") and (level.name() ~= "l12u_control_monolith") and (level.name() ~= "l12_stancia") and (level.name() ~= "l12_stancia_2") then
                if sleep_manager and sleep_manager.is_sleep_active() then sleep_manager.stopper() end
                start_timer("bl2",1)
            else
                g_start_timer("bl1",0,1,0)
            end
        else
            g_start_timer("bl1",0,10,0)
        end
    end

 

function __do_timer_action(select_string,params_string)

-- Начало алгоритма выброса --

-- 1. Настало время выброса.
    if select_string=="bl1" then
        if ogsm_surge then
            if (level.name() ~= "l01_dead_city") and (level.name() ~= "l02_yantar") and (level.name() ~= "l03_bar") and (level.name() ~= "l05_military") and (level.name() ~= "l06_milrad") and (level.name() ~= "l07_radar") and (level.name() ~= "l08_generators") then
                if sleep_manager and sleep_manager.is_sleep_active() then sleep_manager.stopper() end
                start_timer("bl2",1)
            else
                g_start_timer("bl1",0,1,0)
            end
        else
            g_start_timer("bl1",0,10,0)
        end
    end

Как я понимаю, здесь указываются локации где выброс идти не будет. У меня пока что одна локация на которой будет идти, потом расширю.

ogsm_hideout.script:

function is_in_specific_zone(npc)
    if npc_in_zone(npc,"l01_escape",-256,-246,-137,-132,-25,-20) or        -- Бункер Сидора
       npc_in_zone(npc,"l03_agroprom",-198.31,-195.66,85.4,96.54,2,5.3) or    -- Вагон дезертира
       npc_in_zone(npc,"l04_darkvalley",30,50,-60,-25,-4,0) or            -- Тюрьма в Темной долине
       npc_in_zone(npc,"l05_bar",123,140,18,30,-6,0) or                 -- Бар
       npc_in_zone(npc,"l05_bar",118,121,34,41,-4,1) or                 -- Охранник Бара
       npc_in_zone(npc,"l05_bar",149,158,67,74,0,4) or                 -- Приемная Арни
       npc_in_zone(npc,"l05_bar",136,168,73,134,-22,-10) or            -- Арена
       npc_in_zone(npc,"l05_bar",208,234,120,139,-6,2) or                -- База Долга
       npc_in_zone(npc,"l06_rostok",-90,-87,125,151,0,6) or             -- Блокпост наемников
       npc_in_zone(npc,"l07_military",-27,-16,-33,-14,-9,0) or             -- База Свободы
       npc_in_zone(npc,"l08_yantar",23,40,-282,-269,-16,0) or            -- Бункер ученых
       npc_in_zone(npc,"l08_yantar",-265,-22,-218,-6,-20,-11) or            -- Кишка
       npc_in_zone(npc,"l11_pripyat",-16,-2,188,204,-5,0) then            -- Подвал ДК
        return true
    end
    return false
end

function is_in_hide(npc)
    if npc_in_zone(npc,"l01_escape",-211,-198,-132,-125,-23,-20) or     -- Подвал 1 в лагере новичков
       npc_in_zone(npc,"l01_escape",-216,-209,-133,-120,-24,-20) or     -- Подвал 2 в лагере новичков
       npc_in_zone(npc,"l02_garbage",-112,-57,-6,25,-9,90) or        -- Ангар на Свалке
       npc_in_zone(npc,"l05_bar",206,213,50,68,0,4) or            -- Магазин Петренко
       npc_in_zone(npc,"l06_rostok",-285,-235,78,112,-7,0) or         -- Тоннель Фримена
       npc_in_zone(npc,"l10_radar",639,664,167,189,-45,-37) or         -- Секретная база Монолита
       npc_in_zone(npc,"l10_radar",86.73,153,-27,-21.70,-10,-4.6) or     -- Вход в бункер
       npc_in_zone(npc,"l11_pripyat",-18,-12,58,83,-6,-3) or        -- Подземный переход
       npc_in_zone(npc,"l11_pripyat",167,173,58,83,-6,-3) or        -- Подземный переход
       npc_in_zone(npc,"l11_pripyat",-24,55,116,122,-4,0) then        -- Канализация
        return true
    else
        local hide = get_nearest_hide(npc)
        if hide then
            if utils.npc_in_zone(npc, hide.obj) then
                return true
            end
        end
    end
    return false
end

 

function is_in_specific_zone(npc)
    end
function is_in_hide(npc)
end

 

Вот тут какие-то специфические зоны, не совсем понимаю + какие-то числа, тоже не совсем понимаю... Решил удалить всё.

 

function first_run()

------------------
-- Escape Hides --
------------------

-- Бункер Сидора
spawn_restrictor("l01_escape", vector():set(-249.9,-24.8,-134.4), 10136, 7, "fake_", 3)
-- Лагерь новичков
spawn_restrictor("l01_escape", vector():set(-206.5,-22.53,-128.1), 46582, 58, "stalker", 3)
spawn_restrictor("l01_escape", vector():set(-211.4,-23.17,-129.5), 41963, 59, "stalker", 3)
-- Ферма
spawn_restrictor("l01_escape", vector():set(-8.4,0.64,258.3), 268724, 183, "stalker", 4)
-- Заброшенный дом рядом с Лисом
spawn_restrictor("l01_escape", vector():set(133.0,0.22,339.5), 437657, 232, "stalker_bandit", 3)
-- АТП
spawn_restrictor("l01_escape", vector():set(109.9,-7.48,7.7), 411371, 118, "stalker_bandit", 5)
-- Блокпост
spawn_restrictor("l01_escape", vector():set(-119.7,-30.04,-386.4), 133789, 27, "military", 4)
spawn_restrictor("l01_escape", vector():set(-140.7,-29.68,-361.2), 109717, 18, "military", 4)
-- Мельница
spawn_restrictor("l01_escape", vector():set(13.3,2.7,98.7), 290783, 92, "military", 3)

-------------------
-- Garbage Hides --
-------------------

-- Ангар - восточная часть
spawn_restrictor("l02_garbage", vector():set(-61.6,0.75,9.1), 135489, 330, "stalker", 6)
-- Изгородь
spawn_restrictor("l02_garbage", vector():set(66.5,0.6,144.9), 237602, 364, "bandit", 2)
-- Ангар - западная часть
spawn_restrictor("l02_garbage", vector():set(-102.9,0.44,11.9), 110339, 328, "bandit", 6)

--------------------
-- Agroprom Hides --
--------------------

-- Строение в районе Крота
spawn_restrictor("l03_agroprom", vector():set(16.8,0,14), 256750, 693, "stalker_bandit_military", 6)
-- Убежище Крота
spawn_restrictor("l03_agroprom", vector():set(39.9,2.5,-10.5), 278041, 693, "stalker", 6)
-- Казармы у подземелья
spawn_restrictor("l03_agroprom", vector():set(-158.2,1.1,-151.2), 79088, 693, "military", 5)
-- Казармы у НИИ
spawn_restrictor("l03_agroprom", vector():set(-153.3,1.1,-166.6), 84356, 693, "military", 5)
-- Строение у НИИ
spawn_restrictor("l03_agroprom", vector():set(-179.9,0,-187.6), 56704, 693, "military", 6)
-- НИИ Агропром
spawn_restrictor("l03_agroprom", vector():set(-145.6,0,-200.9), 92513, 693, "military", 6)

----------------------
-- Darkvalley Hides --
----------------------

-- Строения над входом в Х18
spawn_restrictor("l04_darkvalley", vector():set(146.3,0.22,-263.2), 345170, 813, "bandit_military_dolg", 15)
spawn_restrictor("l04_darkvalley", vector():set(128.1,0.14,-294), 325149, 813, "bandit_military_dolg", 7)
-- Ферма
spawn_restrictor("l04_darkvalley", vector():set(-135.1,0.97,-511), 22718, 813, "stalker", 8)
-- Бензоколонка
spawn_restrictor("l04_darkvalley", vector():set(101.5,0.7,-7.7), 297166, 813, "stalker_", 6)
-- Подвал рядом с ямой
spawn_restrictor("l04_darkvalley", vector():set(34.3,-2.93,-0.7), 216848, 813, "bandit_dolg", 4)
-- Элеватор
spawn_restrictor("l04_darkvalley", vector():set(-7,0.11,-57.4), 165893, 813, "bandit", 4)
-- Комната Борова
spawn_restrictor("l04_darkvalley", vector():set(39.2,4.54,-84), 223238, 813, "bandit", 5)
-- Холл
spawn_restrictor("l04_darkvalley", vector():set(37.1,0.375,-66.5), 220567, 813, "bandit", 5)
-- Над тюрьмой
spawn_restrictor("l04_darkvalley", vector():set(40.6,1.01,-31.5), 225406, 813, "bandit", 7)

---------------
-- Bar Hides --
---------------

-- Бункер на заставе
spawn_restrictor("l05_bar", vector():set(214.2,-1.57,-18.9), 52736, 1233, "stalker_dolg", 3)
-- Иди своей дорогой, сталкер...
spawn_restrictor("l05_bar", vector():set(178.5,0.09,49.0), 44766, 1233, "stalker_dolg", 6)
-- Магазин Петренко
spawn_restrictor("l05_bar", vector():set(210.0,0.42,61.6), 51205, 1233, "dolg", 5)
-- База Долга
spawn_restrictor("l05_bar", vector():set(224.0,-5.26,130.9), 56342, 1233, "fake_", 8)
-- Предбанник Арены
spawn_restrictor("l05_bar", vector():set(142.8,0.09,93.1), 38428, 1233, "stalker_dolg", 6)
-- Строения у Бара
spawn_restrictor("l05_bar", vector():set(112.7,0.097,68.6), 33337, 1233, "stalker_dolg", 6)
spawn_restrictor("l05_bar", vector():set(144.9,-0.012,40.6), 38939, 1233, "stalker_dolg", 6)
-- Бар
spawn_restrictor("l05_bar", vector():set(131.6,-4.83,23.8), 36240, 1233, "fake_", 10)

------------------
-- Rostok Hides --
------------------

-- Блокпост наемников
spawn_restrictor("l06_rostok", vector():set(-88.9,0,137.2), 46715, 1311, "stalker_dolg_killer_ecolog", 2)
spawn_restrictor("l06_rostok", vector():set(-82.6,1.95,156.8), 48150, 1311, "stalker_dolg_killer_ecolog", 3)
-- Ангар с пси-зоной
spawn_restrictor("l06_rostok", vector():set(-191.8,0,130.9), 28448, 1311, "stalker_dolg_killer_ecolog", 6)
-- Тоннель Фримена
spawn_restrictor("l06_rostok", vector():set(-280,-6,109.2), 1769, 1311, "ecolog", 3)
-- Засады наемников
spawn_restrictor("l06_rostok", vector():set(-242.9,0,140), 12634, 1311, "killer", 2)
spawn_restrictor("l06_rostok", vector():set(-228.2,0.13,141.4), 19047, 1311, "killer", 2)
spawn_restrictor("l06_rostok", vector():set(-250.6,1.43,14), 9490, 1311, "killer", 2)

--------------------
-- Military Hides --
--------------------

-- База Долга
spawn_restrictor("l07_military", vector():set(-191.8,-13,39.9), 133097, 1546, "dolg", 4)
-- Деревня кровососов
spawn_restrictor("l07_military", vector():set(-228.9,-21.78,196.7), 102257, 1546, "freedom", 4)
-- Стоянка нейтралов
spawn_restrictor("l07_military", vector():set(-71.4,-16.83,242.9), 240966, 1546, "stalker", 3)
-- Барьер
spawn_restrictor("l07_military", vector():set(84.7,-7,341.6), 382116, 1546, "freedom", 3)
-- Хутор Павлика
spawn_restrictor("l07_military", vector():set(-190.4,-16,371), 134714, 1546, "killer_freedom", 4)
-- Штаб Свободы
spawn_restrictor("l07_military", vector():set(-21.7,-4.12,-23.8), 285439, 1546, "fake_", 6)
-- Казармы
spawn_restrictor("l07_military", vector():set(9.1,-7.28,16.1), 316470, 1546, "freedom", 6)
spawn_restrictor("l07_military", vector():set(57.4,-8.054,16.8), 356438, 1546, "freedom", 6)
-- Кухня
spawn_restrictor("l07_military", vector():set(-77,-11.34,30.1), 235657, 1546, "freedom", 6)

------------------
-- Yantar Hides --
------------------

-- Бункер ученых
spawn_restrictor("l08_yantar", vector():set(31.5,-11.68,-272.3), 54643, 1459, "fake_", 6)

-----------------
-- Radar Hides --
-----------------

-- Секретная база Монолита
spawn_restrictor("l10_radar", vector():set(650.955,-43.887,182.48), 226701, 1868, "dolg_freedom_stalker_military_monolith", 7)
-- Вход в бункер
spawn_restrictor("l10_radar", vector():set(147.35,-9.277,-24.21), 52689, 1868, "dolg_freedom_stalker_military_monolith", 4)
-- Казармы на Радаре
spawn_restrictor("l10_radar", vector():set(33.6,-3.38,-42), 21487, 1868, "dolg_freedom_stalker_military_monolith", 4)

-------------------
-- Pripyat Hides --
-------------------

-- Подземная автостоянка
spawn_restrictor("l11_pripyat", vector():set(85.4,-7.39,20.3), 196856, 2269, "stalker_military_freedom_dolg_killer", 15)
-- Сберкасса
spawn_restrictor("l11_pripyat", vector():set(60.2,-1.74,33.6), 172091, 2269, "stalker_military_freedom_dolg_killer", 4)
-- Милиция
spawn_restrictor("l11_pripyat", vector():set(-35.7,-1.68,34.3), 63044, 2269, "stalker_military_freedom_dolg_killer", 6)
-- Сельхозуправление
spawn_restrictor("l11_pripyat", vector():set(-51.1,0,140), 48522, 2269, "stalker_military_freedom_dolg_killer", 12)
-- Подвал Дома культуры
spawn_restrictor("l11_pripyat", vector():set(-5.6,-5.169,193.2), 95262, 2269, "fake_", 6)
-- Подземные переходы
spawn_restrictor("l11_pripyat", vector():set(-15.4,-5.55,69.3), 83833, 2269, "stalker_military_freedom_dolg_killer", 3)
spawn_restrictor("l11_pripyat", vector():set(170.8,-5.55,69.3), 253270, 2269, "stalker_military_freedom_dolg_killer", 3)
-- Канализация
spawn_restrictor("l11_pripyat", vector():set(19.6,-3.634,121.1), 125990, 2269, "stalker_military_freedom_dolg_killer", 2)

end

 

function first_run()

------------------
-- Swamp Hides --
------------------

-- Дом Доктора
spawn_restrictor("l04_swamp", vector():set(192.7744140625,2.8159973621368,-39.758411407471), 370218, 198, "stalker", 5)

end
 

Вот тут вроде как устанавливаются укрытия для всех. Удалил все, оставил тестовый.

function evaluator_blowout:evaluate()
    if not self.object:best_enemy() and 
       db.Flag2==1 and db.Dead2==0 and 
       not (level.name()=="l11_pripyat" and self.object:character_community() == "monolith") and
       not is_in_hide(self.object) and not is_in_specific_zone(self.object) then
        self.st.blowout = true
    else
        self.st.blowout = false
    end
    return self.st.blowout == true
end

function evaluator_blowout:evaluate()
    if not self.object:best_enemy() and 
       db.Flag2==1 and db.Dead2==0 and 
       not (level.name()=="l08_generators" and self.object:character_community() == "monolith") and
       not is_in_hide(self.object) and not is_in_specific_zone(self.object) then
        self.st.blowout = true
    else
        self.st.blowout = false
    end
    return self.st.blowout == true
end

Тут тоже не особо понимаю, просто сменил локацию.

ogsm_surge.script:
 

function hit_actor()

local psy_hit = hit()
psy_hit.direction = vector():set(0,0,0)
psy_hit.impulse = 0
psy_hit.draftsman = db.actor

if level.name() == "l01_escape" then
    psy_hit.power = 0.0005
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)
end

if level.name() == "l02_garbage" then
    psy_hit.power = 0.0008
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)
end

if level.name() == "l03_agroprom" then
    psy_hit.power = 0.001
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)
end

if level.name() == "l04_darkvalley" then
    psy_hit.power = 0.0012
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)
end

if level.name() == "l05_bar" then
    psy_hit.power = 0.0015
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)
end

if level.name() == "l06_rostok" then
    psy_hit.power = 0.002
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)
end

if level.name() == "l08_yantar" then
    psy_hit.power = 0.003
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)
    psy_hit.power = 0.0001
      psy_hit.type = hit.shock
    db.actor:hit(psy_hit)
end

if level.name() == "l07_military" then
    psy_hit.power = 0.005
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)
    psy_hit.power = 0.0002
      psy_hit.type = hit.shock
    db.actor:hit(psy_hit)
end

if level.name() == "l10_radar" then
    psy_hit.power = 0.008
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)
    psy_hit.power = 0.0004
    psy_hit.type = hit.shock
    db.actor:hit(psy_hit)
end

if level.name() == "l11_pripyat" then
    psy_hit.power = 0.01
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)
    psy_hit.power = 0.0007
    psy_hit.type = hit.shock
    db.actor:hit(psy_hit)
end

end

 

function hit_actor()

local psy_hit = hit()
psy_hit.direction = vector():set(0,0,0)
psy_hit.impulse = 0
psy_hit.draftsman = db.actor

if level.name() == "l04_swamp" then
    psy_hit.power = 0.15
    psy_hit.type = hit.radiation
    db.actor:hit(psy_hit)
    psy_hit.power = 0.15
    psy_hit.type = hit.shock
    db.actor:hit(psy_hit)
end

end


Ну тут понятно - наносится урон при выбросе вне укрытия. Убрал лишние, добавил своё.
 

function proceed_art_spawn(section, count)

local lv

local level_vertexes={
l01_escape = {lvid=595580, gvid=44},
l02_garbage = {lvid=384039, gvid=265},
l03_agroprom = {lvid=438379, gvid=693},
l04_darkvalley = {lvid=392517, gvid=813},
l05_bar = {lvid=99538, gvid=1233},
l06_rostok = {lvid=69283, gvid=1311},
l07_military = {lvid=915663, gvid=1546},
l08_yantar = {lvid=141470, gvid=1438},
l10_radar = {lvid=796328, gvid=1868},
l11_pripyat = {lvid=295965, gvid=2269}
}

if level.name() == "l07_military" or level.name() == "l10_radar" then lv = 200000 + math.random(-100000,100000)
else lv = math.random(level_vertexes[level.name()]["lvid"]) end

local gv = level_vertexes[level.name()]["gvid"]

for ind = 1, count do
    alife():create(section, level.vertex_position(lv), lv, gv)
end

end
 

function spawn_arts()
local level_name = level.name()

if level_name ==  "l01_escape" then
    proceed_art_spawn("af_medusa", 1)
    proceed_art_spawn("af_vyvert", 1)
    proceed_art_spawn("af_blood", 1)
    proceed_art_spawn("af_electra_sparkler", 1)
end

if level_name ==  "l02_garbage" or level_name ==  "l03_agroprom" then
    proceed_art_spawn("af_cristall_flower", 1)
    proceed_art_spawn("af_gravi", 1)
    proceed_art_spawn("af_rusty_thorn", 1)
    proceed_art_spawn("af_mincer_meat", 1)
end

if level_name ==  "l04_darkvalley" then
    proceed_art_spawn("af_dummy_glassbeads", 1)
    proceed_art_spawn("af_electra_flash", 1)
    proceed_art_spawn("af_fuzz_kolobok", 1)
    proceed_art_spawn("af_fireball", 1)
end

if level_name ==  "l05_bar" or level_name ==  "l06_rostok" then
    proceed_art_spawn("af_dummy_pellicle", 1)
    proceed_art_spawn("af_ameba_slime", 1)
    proceed_art_spawn("af_soul", 1)
    proceed_art_spawn("af_rusty_kristall", 1)
end

if level_name ==  "l07_military" then 
    proceed_art_spawn("af_dummy_battery", 1)
    proceed_art_spawn("af_rusty_sea-urchin", 1)
    proceed_art_spawn("af_electra_moonlight", 1)
    proceed_art_spawn("af_ameba_slug", 1)
end

if level_name ==  "l08_yantar" then
    proceed_art_spawn("af_dummy_battery", 1)
    proceed_art_spawn("af_dummy_dummy", 1)
    proceed_art_spawn("af_night_star", 1)
    proceed_art_spawn("af_gold_fish", 1)
end

if level_name ==  "l10_radar" then
    proceed_art_spawn("af_dummy_spring", 1)
    proceed_art_spawn("af_rusty_sea-urchin", 1)
    proceed_art_spawn("af_electra_moonlight", 1)
    proceed_art_spawn("af_ameba_mica", 1)
end

if level_name ==  "l11_pripyat" then
    proceed_art_spawn("af_dummy_spring", 1)
    proceed_art_spawn("af_night_star", 1)
    proceed_art_spawn("af_dummy_glassbeads", 1)
    proceed_art_spawn("af_fuzz_kolobok", 1)
end
 
end

 

function proceed_art_spawn(section, count)

local lv

local level_vertexes={
l04_swamp = {lvid=370218, gvid=198}
}

if level.name() == "l01_dead_city" or level.name() == "l02_yantar" then lv = 200000 + math.random(-100000,100000)
else lv = math.random(level_vertexes[level.name()]["lvid"]) end

local gv = level_vertexes[level.name()]["gvid"]

for ind = 1, count do
    alife():create(section, level.vertex_position(lv), lv, gv)
end

end


-- Вызов спавна артефактов для каждого уровня
function spawn_arts()
local level_name = level.name()

if level_name ==  "l04_swamp" then
    proceed_art_spawn("af_lil_sun", 1)
end
 
end

 

Тут как понимаю, спавнятся артефакты. Удалил лишнее. В строке if level.name() == "l01_dead_city" or level.name() == "l02_yantar" then lv = 200000 + math.random(-100000,100000) поменял локации, но не понимаю что означает функция.


 

 

function update_surge()
local level_name = level.name()
if (level_name ~= "l03u_agr_underground") and (level_name ~= "l08u_brainlab") and (level_name ~= "l10u_bunker") and (level_name ~= "l04u_labx18") and (level_name ~= "l12u_sarcofag") and (level_name ~= "l12u_control_monolith") and (level_name ~= "l12_stancia") and (level_name ~= "l12_stancia_2") then

db.FlagEsc = 0

if level_name == "l01_escape" then
    if actor_in_zone(-211,-198,-132,-125,-23,-20) == 1 or            -- Подвал 1 в лагере новичков
       actor_in_zone(-256,-246,-137,-132,-25,-20) == 1 or            -- Бункер Сидора
       actor_in_zone(-216,-209,-133,-120,-24,-20) == 1 then        -- Подвал 2 в лагере новичков
        db.FlagEsc = 1
    end
end

if level_name == "l02_garbage" then
    if actor_in_zone(-112,-57,-6,25,-9,90) == 1 then            -- Ангар на Свалке
        db.FlagEsc = 1
    end
end

if level_name == "l03_agroprom" then
    if actor_in_zone(-198.31,-195.66,85.4,96.54,2,5.3) == 1 then    -- Вагон дезертира
        db.FlagEsc = 1
    end
end

if level_name == "l04_darkvalley" then
    if actor_in_zone(30,50,-60,-25,-4,0) == 1 then                -- Тюрьма в Темной долине
        db.FlagEsc = 1
    end
end

if level_name == "l05_bar" then
    if actor_in_zone(123,140,18,30,-6,0) == 1 or                 -- Бар
       actor_in_zone(206,213,50,68,0,4) == 1 or                 -- Магазин Петренко
       actor_in_zone(149,158,67,74,0,4) == 1 or                 -- Приемная Арни
       actor_in_zone(136,168,73,134,-22,-10) == 1 or            -- Арена
       actor_in_zone(208,234,120,139,-6,2) == 1 then            -- База Долга
        db.FlagEsc = 1
    end
end

if level_name == "l06_rostok" then
    if actor_in_zone(-90,-87,125,151,0,6) == 1 or                -- Блокпост наемников
       actor_in_zone(-285,-235,78,112,-7,0) == 1 then            -- Тоннель Фримена
        db.FlagEsc = 1
    end
end

if level_name == "l07_military" then
    if actor_in_zone(-27,-16,-33,-14,-9,0) == 1 then             -- База Свободы
        db.FlagEsc = 1
    end
end

if level_name == "l08_yantar" then
    if actor_in_zone(23,40,-282,-269,-16,0) == 1 or                -- Бункер ученых
       actor_in_zone(-265,-22,-218,-6,-20,-11) == 1 then            -- Кишка
        db.FlagEsc = 1
    end
end

if level_name == "l10_radar" then
    if actor_in_zone(639,664,167,189,-45,-37) == 1 or            -- Секретная база Монолита
       actor_in_zone(86.73,153,-27,-21.70,-10,-4.6) == 1 then        -- Вход в бункер
        db.FlagEsc = 1
    end
end

if level_name == "l11_pripyat" then
    if actor_in_zone(-18,-12,58,82,-6,-3) == 1 or                 -- Подземный переход
       actor_in_zone(167,173,58,83,-6,-3) == 1 or                 -- Подземный переход
       actor_in_zone(-16,-2,188,204,-5,0) == 1 or                -- Подвал ДК
       actor_in_zone(-24,55,116,122,-4,0) == 1 then                -- Канализация
        db.FlagEsc = 1
    end
end


for k,v in pairs(ogsm_hideout.restrictor_list) do
    local obj = level.object_by_id(v.id)
    if obj and utils.npc_in_zone(db.actor, obj) then
        db.FlagEsc = 1
    end
end

if db.Dead2 == 1 and db.FlagEsc == 0 then
    g_R_Vibros:Run()
    hit_actor()
    play_sounds()
    level.add_pp_effector("dead_zone.ppe", 1001, false)
    level.set_pp_effector_factor(1001, 0.2)
end

if db.FlagEsc == 1 then
    g_R_Vibros:Stop()
end

end
end

 

function update_surge()
local level_name = level.name()
if (level_name() ~= "l01_dead_city") and (level_name() ~= "l02_yantar") and (level_name() ~= "l03_bar") and (level_name() ~= "l05_military") and (level_name() ~= "l06_milrad") and (level_name() ~= "l07_radar") and (level_name() ~= "l08_generators") then

db.FlagEsc = 0

--if level_name == "l01_escape" then
--    if actor_in_zone(-211,-198,-132,-125,-23,-20) == 1 or            -- Подвал 1 в лагере новичков
--       actor_in_zone(-256,-246,-137,-132,-25,-20) == 1 or            -- Бункер Сидора
--       actor_in_zone(-216,-209,-133,-120,-24,-20) == 1 then        -- Подвал 2 в лагере новичков
--        db.FlagEsc = 1
--    end
--end
end


for k,v in pairs(ogsm_hideout.restrictor_list) do
    local obj = level.object_by_id(v.id)
    if obj and utils.npc_in_zone(db.actor, obj) then
        db.FlagEsc = 1
    end
end

if db.Dead2 == 1 and db.FlagEsc == 0 then
    g_R_Vibros:Run()
    hit_actor()
    play_sounds()
    level.add_pp_effector("dead_zone.ppe", 1001, false)
    level.set_pp_effector_factor(1001, 0.2)
end

if db.FlagEsc == 1 then
    g_R_Vibros:Stop()
end

end
end

Здесь... Наверное, зоны в которых выбросы не могут быть вызваны, тоже самое с локациями. Зоны - убрал, локации - поменял.
Вот и всё. Надеюсь, вы дочитали) В игре вот такое(смотрите фото):
Что не так сделал?
Ссылка на файлы(оригинал и правки): https://yadi.sk/d/pWDJ8xF53aAHvJ

ss_houdini_08_12_18_21_27_09_l04_swamp.j

Изменено пользователем Houdini_one

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий
В 12.08.2018 в 14:12, Houdini_one сказал:

Можно как-то перенести из ЧН функцию которая отменяет задание?

И ещё можно как-то закрыть переходы до получения инфопоршня?

Как уже выше сказали, именно "отменить" нельзя, но если не принципиально - то просто провалить его, выдав\выполнив заранее прописанную в условиях задания инфо-порцию\ф-цию.

"Закрыть" переход в общем не сложно - сложно сделать так, чтоб ГГ не мог пройти через отключенный переход. А то за ними обычно край локации\террейна, со всеми вытекающими...

Ссылка на комментарий
1 час назад, AndreySol сказал:

сложно сделать так, чтоб ГГ не мог пройти через отключенный переход

Телепорт в подземелье с мутантами - не?

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...