Перейти к содержанию

РСФСР

Разработчики
  • Публикаций

    115
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные РСФСР


  1. В 02.11.2025 в 03:06, Счастливчик сказал:

    Здравствуйте уважаемые разработчики!

    Разработка проекта идет или отложена на неопределенный срок? И какие есть новости по модификации?

    Идет, не волнуйся.
    Большие новости будут в ближайшие несколько месяцев, как закончим один из этапов

    • Лайк 4
    • Мастер! 2
    • Спасибо 1

  2. 5 минут назад, Yara сказал:

    Я так понимаю, у тебя работает gulag_deadcity.script и ещё подключен gulag_deadcity2.script? Если да, то может функции в них перебивают друг друга - load_states / checkStalker / checkMonster.

    Так про лагеря упрощенные речь, они же используют скрипт gulag_general.script а не эти, разве нет?


  3. 34 минуты назад, Yara сказал:

    РСФСР 

    Если нпс привязан к смарту, у которого нет работ или его communities отличается от группировки нпс, то он будет бродить по уровню. Те, что расставлены через сдк заспавнятся в любом случае, а вот через зонки [respawn] - только, если есть свободные места в смарте и подходит communities.

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


  4. 1 час назад, Yara сказал:

    РСФСР 

    Если не менялся smart_terrain_params.script, то используется smart_terrain_presets.ltx, а эти general_ устаревшие хвосты с билдов.

    везде killer        = experienced, veteran, master

    freedom        = experienced, veteran, master

    Да и гулаги с наемниками нормально работают

    а вот в генеральные не хотят


  5. 2 часа назад, Yara сказал:

    Лишний end всё поломал.

    да, так и есть

    А не подскажешь еще с проблемой - не работают генеральные лагеря на этой же локации если в них прописаны свобода или наемники. Они даже не спавнятся если их поставить в редакторе с припиской к смарту. Если поменять на долг или сталкеров - то все работает..
     

    Спойлер

    [l09_deadcity]
    stalker        = experienced, veteran, master
    csky        = experienced, veteran, master
    monolith    = experienced, veteran
    killer        = experienced, veteran, master
    ecolog        = experienced, veteran
    dolg        = experienced, veteran, master
    freedom        = experienced, veteran, master
    bandit        = experienced, veteran, master
    zombied        = novice, experienced, veteran, master

     


  6. 24 минуты назад, Yara сказал:

    РСФСР 

    Добавить уровень в level_groups (smart_terrain.script).

    давно добавлен..
        l09_deadcity = "group1",
    и в level_groups в xr_gulag.script
     


    Дополнено 3 минуты спустя
    1 час назад, imcrazyhoudini сказал:

    РСФСР  Интереса ради можно было бы отключить скрипт оригинальный и оставить лишь твой, изменится ли что. 

    пробовал, удалял оригинальное население, скрипты с логикой и оставлял лишь один максимально простой смарт с кровососом - все бестолку.
    Даже на новом с нуля уровне таких проблем небыло...


  7. 33 минуты назад, imcrazyhoudini сказал:

    РСФСР вэйпоинты нормально подписаны?

    Вообще ещё была утилита от лашников вроде которая позволяла отслеживать работает смарт или нет.

    да - имя смарта_home_1 - имя смарта_home_2


    Дополнено 24 минуты спустя

    Пытался еще в это жуткое скриптовое месиво вписывать или же переделывать по образцу - ничего не выходило, только эти смарты переставали дополнительно работать и все
     

    Спойлер

    --------------------------------------------------------------------------
    -- Stuff
    --------------------------------------------------------------------------
    function printf() end

    --------------------------------------------------------------------------
    -- Member counts
    --------------------------------------------------------------------------
    local bandits_kamp_count = 6

    --------------------------------------------------------------------------
    -- States
    --------------------------------------------------------------------------


    --------------------------------------------------------------------------
    -- General
    --------------------------------------------------------------------------
    local t = {}
    local gulags = {cit_bandits = {comm = {"bandit"}},
                    cit_killers = {comm = {"killer"}},
                    cit_beasts  = {comm = false}}

    -- Job -------------------------------------------------------------------
    function load_job(sj, gname, type, squad, groups)
        local g = gulags[type]
        if g then
            g.job(sj, gname, type, squad, groups)
        end
    end

    -- State -----------------------------------------------------------------
    function check_state_stub(gulag)
        return 0
    end

    function load_states(gname, type)
        local g = gulags[type]

        if g then
            return g.state or check_state_stub
        end

        return nil
    end
            
    -- Dynamic ltx -----------------------------------------------------------
    function load_ltx(gname, type)
        local g = gulags[type]
        if g then
            return g.ltx
        end

        return nil
    end

    -- Check communities -----------------------------------------------------
    local function checkCommon(npc_community, gulag_type, npc_rank, se_obj, stalker)
        local g = gulags[gulag_type]
        if g then
            if g.comm then
                if type(g.comm) == "function" then
                    return g.comm(npc_community, gulag_type, npc_rank, se_obj, stalker)
                end
                if type(g.comm) == "boolean" then
                    return g.comm == stalker
                end

                local i, v = 0, 0
                for i, v in pairs(g.comm) do
                    if npc_community == v then
                        return true
                    end
                end
                if i > 0 then
                    return false
                end
            end
            return true
        end
        return false
    end

    function checkStalker(npc_community, gulag_type, npc_rank, se_obj)
        return checkCommon(npc_community, gulag_type, npc_rank, se_obj, true)
    end

    function checkMonster(npc_community, gulag_type, npc_rank, se_obj)
        return checkCommon(npc_community, gulag_type, npc_rank, se_obj, false)
    end


    --------------------------------------------------------------------------
    -- Gulags
    --------------------------------------------------------------------------
    local combat_ignore = "combat_ignore_cond = {=cit_combat_ignore(cit_actor_is_free)}\n" --=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}, {=enemy_gulag(cit_kanaliz1:cit_kanaliz2:cit_kanaliz3:cit_rat_kanaliz1:cit_rat_kanaliz2)}\n"
    local combat_ignore2 = "combat_ignore_cond  = {=cit_combat_ignore(cit_actor_out_killers_base)}\n" --=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}, {=enemy_gulag(cit_kanaliz1:cit_kanaliz2:cit_kanaliz3:cit_rat_kanaliz1:cit_rat_kanaliz2)}\n"

    --------------------------------------------------------------------------
    -- Killers
    --------------------------------------------------------------------------
    -- Predicates ------------------------------------------------------------
    function k_predicate_l(data)
        return data.profile_name == "cit_killer_leader"
    end

    function k_predicate_e(data)
        return data.profile_name == "cit_killer_exo"
    end

    function k_predicate_es(data)
        return data.profile_name == "cit_killer_exo_sniper"
    end

    function k_predicate_v(data)
        return data.profile_name == "cit_killer_veteran"
    end

    function k_predicate_g(data)
        return data.profile_name == "cit_killer_general"
    end

    -- Jobs ------------------------------------------------------------------
    gulags.cit_killers.job = function(sj, gname, type, squad, groups)
        local i, v, j = 0, 0, 0
        local prior, pred, gr = 0, 0, 0
        local ltx = ""

        ltx = ltx.."[danger_killers]\n" ..
                   "ignore_distance        = 50\n" ..
                   "danger_inertion_time   = 60000\n" ..
                   "danger_expiration_time = 40000\n"

        -- leader
        t = { section = "logic@" .. gname .. "_leader",
            idle = 0,
            prior = 16, state = {0},
            squad = squad, group = groups[6],
            in_rest = "cit_jail_restr,cit_kanaliz_sr_in", out_rest = "",
            predicate = k_predicate_l
        }
        table.insert(sj, t)

        ltx = ltx.."[logic@" .. gname .. "_leader]\n" ..
                   "active          = patrol@" .. gname .. "_leader_attack\n" ..
                   "combat_ignore   = combat_ignore\n" ..

                   "[patrol@" .. gname .. "_leader_attack]\n" ..
                   "path_walk           = leader_attack_walk\n" ..
                   "path_look           = leader_attack_look\n" ..
                   "commander           = true\n" ..
                   "show_spot           = false\n" ..
                   "on_info             = {+cit_heli_end} patrol@" .. gname .. "_leader\n" ..
                   "soundgroup          = cit_killers_leader_sg\n" ..
                   --"danger              = danger_killers\n" ..
                   combat_ignore ..
                   --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n" ..

                   "[patrol@" .. gname .. "_leader]\n" ..
                   "path_walk           = leader_walk\n" ..
                   "path_look           = leader_look\n" ..
                   "commander           = true\n" ..
                   "show_spot           = false\n" ..
                   --"on_info             = {+cit_jail_guard2_talk_to_guard1 -cit_heli_end} patrol@" .. gname .. "_leader_attack\n" ..
                   "soundgroup          = cit_killers_leader_sg\n" ..
                   --"danger              = danger_killers\n" ..
                   combat_ignore
                   --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"

        -- leader guards
        for i = 1, 2 do
            t = { section = "logic@" .. gname .. "_leader_guard" .. i,
                idle = 0,
                prior = 15, state = {0},
                squad = squad, group = groups[6],
                in_rest = "cit_jail_restr,cit_kanaliz_sr_in", out_rest = "",
                predicate = k_predicate_e
            }
            table.insert(sj, t)

            ltx = ltx.."[logic@" .. gname .. "_leader_guard" .. i .. "]\n" ..
                       "active          = patrol@" .. gname .. "_base_patrol" .. i .. "_attack\n" ..
                       "combat_ignore   = combat_ignore\n" ..

                       "[patrol@" .. gname .. "_base_patrol" .. i .. "_attack]\n" ..
                       "path_walk           = leader_attack_walk\n" ..
                       "path_look           = leader_attack_look\n" ..
                       "formation           = line\n" ..
                       "show_spot           = false\n" ..
                       "on_info             = {+cit_heli_end} patrol@" .. gname .. "_base_patrol" .. i .. "\n" ..
                       "soundgroup          = " .. gname .. "_leader_sg\n" ..
                       --"danger              = danger_killers\n" ..
                       combat_ignore ..
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n" ..

                       "[patrol@" .. gname .. "_base_patrol" .. i .. "]\n" ..
                       "path_walk           = leader_walk\n" ..
                       "path_look           = leader_look\n" ..
                       "formation           = line\n" ..
                       "show_spot           = false\n" ..
                       "soundgroup          = " .. gname .. "_leader_sg\n" ..
                       --"danger              = danger_killers\n" ..
                       combat_ignore
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
        end

        -- jail guard
        t = { section = "logic@" .. gname .. "_jail_guard",
            idle = 0,
            prior = 2, state = {0}, -- 13
            squad = squad, group = groups[5],
            in_rest = "cit_jail_restr,cit_kanaliz_sr_in", out_rest = "",
                    online = "{-cit_map_give}",
            predicate = k_predicate_v
        }
        table.insert(sj, t)

        ltx = ltx.."#include \"scripts\\cit\\cit_jail_guard1.ltx\"\n"

        -- base guard
        t = { section = "logic@" .. gname .. "_base_guard",
            idle = 0,
            prior = 12, state = {0}, -- 12
            squad = squad, group = groups[6],
            in_rest = "cit_jail_restr,cit_kanaliz_sr_in", out_rest = "",
                    online = "{-cit_map_give}",
            predicate = k_predicate_v
        }
        table.insert(sj, t)

        ltx = ltx.."#include \"scripts\\cit\\cit_jail_guard2.ltx\"\n"

        -- base patrol
        t = { section = "logic@" .. gname .. "_base_patrol",
            idle = 0,
            prior = 11, state = {0},
            squad = squad, group = groups[6],
            in_rest = "cit_selmag_up_floor_restr,cit_kanaliz_sr_in", out_rest = "",
                    online = "{-cit_map_give}",
            predicate = k_predicate_v
        }
        table.insert(sj, t)

        ltx = ltx.."[logic@" .. gname .. "_base_patrol]\n" ..
                    "active          = camper@" .. gname .. "_base_patrol\n" ..
                    "combat_ignore   = combat_ignore\n" ..

                    "[camper@" .. gname .. "_base_patrol]\n" ..
                    "path_walk           = base_patrol_walk\n" ..
                    "path_look           = base_patrol_look\n" ..
                    "radius              = 12\n" ..
                    "no_retreat          = true\n" ..
                    "heli_hunter         = {+cit_heli_start -cit_heli_end}\n" ..
                    --"danger              = danger_killers\n" ..
                    --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                    combat_ignore
                    --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"

        -- snipers
        for i = 1, 4 do
            t = { section = "logic@" .. gname .. "_sniper" .. i,
                idle = 0,
                prior = 11, state = {0},
                squad = squad, group = groups[8],
                in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                        online = "{-cit_map_give}",
                predicate = k_predicate_es
            }
            table.insert(sj, t)

            ltx = ltx.."[logic@" .. gname .. "_sniper" .. i .. "]\n" ..
                       "active              = camper@" .. gname .. "_sniper" .. i .. "\n" ..
                       "combat_ignore       = combat_ignore\n" ..

                       "[camper@" .. gname .. "_sniper" .. i .. "]\n" ..
                       "path_walk                   = sniper" .. i .. "_walk\n" ..
                       "path_look                   = sniper" .. i .. "_look\n" ..
                       "sniper                      = true\n" ..
                       "def_state_campering         = threat\n" ..
                       "def_state_campering_fire    = threat_sniper_fire\n" ..
                       --"danger                      = danger_bandits\n" ..
                       combat_ignore
                       --"combat_ignore_cond          = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
        end

        -- walkers between kamps
        local start_kamp = {1, 2}
        local kamp_change = {{2, 3, 1}, {4, 3, 2}}
        local delays = {{18, 30, 20}, {25, 40, 20}}
        local d, kc = 0, 0

        for i = 1, 2 do
            t = { section = "logic@" .. gname .. "_free" .. i .. "_in_kamp",
                idle = 0,
                prior = 100 + i, state = {0}, -- 9
                squad = squad, group = groups[9],
                in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                        online = "{-cit_map_give}",
                predicate = k_predicate_e
            }
            table.insert(sj, t)

            d = delays
            kc = kamp_change
            ltx = ltx.."[logic@" .. gname .. "_free" .. i .. "_in_kamp]\n" ..
                       "active          = walker@" .. gname .. "_free" .. i .. "_to_kamp" .. start_kamp .. "\n" ..
                       "combat_ignore   = combat_ignore\n"

            for j, v in pairs(kc) do
                ltx = ltx.."[walker@" .. gname .. "_free" .. i .. "_to_kamp" .. j .. "]\n" ..
                           "path_walk           = near_kamp" .. j .. "_walk\n" ..
                           "path_look           = kamp" .. j .. "\n" ..
                           "def_state_moving1   = patrol\n" ..
                           "def_state_moving2   = patrol\n" ..
                           "def_state_moving3   = patrol\n" ..
                           "on_signal           = arrived | kamp@" .. gname .. "_free" .. i .. "_in_kamp" .. j .. "\n" ..
                           "danger              = danger_killers\n" ..
                           combat_ignore ..
                           --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n" ..

                           "[kamp@" .. gname .. "_free" .. i .. "_in_kamp" .. j .. "]\n" ..
                           "center_point        = kamp" .. j .. "\n" ..
                           "def_state_moving    = patrol\n" ..
                           "on_timer            = " .. d[j] .. "000 | walker@" .. gname .. "_free" .. i .. "_to_kamp" .. v .. "\n" ..
                           "soundgroup          = " .. gname .. "_kamp" .. j .. "_sg\n" ..
                           combat_ignore2
                           --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
            end
        end

        -- patrols in kamp
        prior = {3, 5, 7}
        delays = {25, 30, 60}
        local kamps, k = {3, 2, 4}, 0
        for i, v in pairs({2, 1, 1}) do
            k = kamps
            for j = 1, v do
                t = { section = "logic@" .. gname .. "_kamp" .. k .. "_patrol",
                    idle = 0,
                    prior = prior, state = {0},
                    squad = squad, group = groups[k],
                    in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                            online = "{-cit_map_give}",
                    predicate = k_predicate_g
                }
                table.insert(sj, t)
            end

            ltx = ltx.."[logic@" .. gname .. "_kamp" .. k .. "_patrol]\n" ..
                       "active          = patrol@" .. gname .. "_kamp" .. k .. "_patrol\n" ..
                       "combat_ignore   = combat_ignore\n" ..

                       "[patrol@" .. gname .. "_kamp" .. k .. "_patrol]\n" ..
                       "path_walk           = kamp" .. k .. "_patrol_walk\n" ..
                       --"path_look           = kamp" .. k .. "\n" ..
                       "formation           = line\n" ..
                       "on_signal           = arrived | kamp@" .. gname .. "_kamp" .. k .. "_patrol\n" ..
                       combat_ignore2 ..
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n" ..
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n" ..

                       "[kamp@" .. gname .. "_kamp" .. k .. "_patrol]\n" ..
                       "center_point        = kamp" .. k .. "\n" ..
                       "on_timer            = " .. delays .. "000 | patrol@" .. gname .. "_kamp" .. k .. "_patrol\n" ..
                       "soundgroup          = " .. gname .. "_kamp" .. k .. "_sg\n" ..
                       combat_ignore2
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
        end

        -- free stalkers
        delays = {{90, 120}, {120, 100}, {75, 90}}
        for i = 1, 3 do
            t = { section = "logic@" .. gname .. "_free_stalker" .. i,
                idle = 0,
                prior = 1, state = {0}, --14
                squad = squad, group = groups[5],
                in_rest = "cit_jail_restr,cit_kanaliz_sr_in", out_rest = "",
                        online = "{-cit_map_give}",
                predicate = k_predicate_v
            }
            table.insert(sj, t)

            d = delays
            ltx = ltx.."[logic@" .. gname .. "_free_stalker" .. i .. "]\n" ..
                       "active          = kamp@" .. gname .. "_free_stalker" .. i .. "_kamp5_begin\n" ..
                       "combat_ignore   = combat_ignore\n" ..

                       "[kamp@" .. gname .. "_free_stalker" .. i .. "_kamp5_begin]\n" ..
                       "center_point        = kamp5\n" ..
                       "on_info             = {+cit_heli_scene_start} camper@" .. gname .. "_free_stalker" .. i .. "_attack %=hit_npc(1201:bip01_spine:0:0.1)%\n" ..
                       "soundgroup          = " .. gname .. "_kamp5_sg\n" ..
                       "combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n" ..

                       "[camper@" .. gname .. "_free_stalker" .. i .. "_attack]\n" ..
                       "path_walk           = free_stalker" .. i .. "_attack_walk\n" ..
                       "path_look           = free_stalker" .. i .. "_attack_look\n" ..
                       --"no_retreat          = true\n" ..
                       "radius              = 8\n" ..
                       "def_state_moving    = assault\n" ..
                       "def_state_campering = hide\n" ..
                       "heli_hunter         = true\n" .. --{+cit_heli_start} true, false\n" ..
                       "on_info             = {+cit_heli_end} walker@" .. gname .. "_free_stalker" .. i .. "\n" ..
                       combat_ignore ..
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n" ..

                       "[walker@" .. gname .. "_free_stalker" .. i .. "]\n" ..
                       "path_walk           = free_stalker" .. i .. "_walk\n" ..
                       "path_look           = free_stalker" .. i .. "_look\n" ..
                       "def_state_moving1   = patrol\n" ..
                       "def_state_moving2   = patrol\n" ..
                       "def_state_moving3   = patrol\n" ..
                       "on_timer            = " .. d[2] .. "000 | kamp@" .. gname .. "_free_stalker" .. i .. "_kamp5\n" ..
                       --"on_info             = {+cit_jail_guard1_close_door -cit_button_broken} kamp@" .. gname .. "_free_stalker" .. i .. "_kamp5\n" ..
                       --"on_info2            = {+cit_heli_start -cit_heli_end} walker@" .. gname .. "_free_stalker" .. i .. "_attack\n" ..
                       combat_ignore ..
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n" ..

                       "[kamp@" .. gname .. "_free_stalker" .. i .. "_kamp5]\n" ..
                       "center_point        = kamp5\n" ..
                       "on_timer            = " .. d[1] .. "000 | walker@" .. gname .. "_free_stalker" .. i .. "\n" ..
                       --"on_info             = {+cit_heli_start -cit_heli_end} walker@" .. gname .. "_free_stalker" .. i .. "_attack\n" ..
                       --"on_info2            = {+cit_jail_doctor_leave -cit_heli_end} walker@" .. gname .. "_free_stalker" .. i .. "_attack\n" ..
                       "soundgroup          = " .. gname .. "_kamp5_sg\n" ..
                       combat_ignore
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
        end

        -- kamps
        prior = {2, 4, 1, 6}
        pred = {k_predicate_v, k_predicate_v, k_predicate_g, k_predicate_v}
        for i, v in pairs({2, 2, 2, 1}) do
            for j = 1, v do
                t = { section = "logic@" .. gname .. "_kamp" .. i,
                    idle = 0,
                    prior = prior, state = {0},
                    squad = squad, group = groups,
                    in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                            online = "{-cit_map_give}",
                    predicate = pred
                }
                table.insert(sj, t)
            end

            ltx = ltx.."[logic@" .. gname .. "_kamp" .. i .. "]\n" ..
                       "active          = kamp@" .. gname .. "_kamp" .. i .. "\n" ..
                       "combat_ignore   = combat_ignore\n" ..

                       "[kamp@" .. gname .. "_kamp" .. i .. "]\n" ..
                       "center_point        = kamp" .. i .. "\n" ..
                       "def_state_moving    = run\n" ..
                       "soundgroup          = " .. gname .. "_kamp" .. i .. "_sg\n" ..
                       --"danger              = danger_killers\n" ..
                       combat_ignore2
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
        end

        -- gate guards
        pred = {k_predicate_e, k_predicate_v}
        for i = 1, 2 do
            t = { section = "logic@" .. gname .. "_gate2_guard" .. i,
                idle = 0,
                prior = 8, state = {0},
                squad = squad, group = groups[9 + i],
                in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                        online = "{-cit_map_give}",
                predicate = pred
            }
            table.insert(sj, t)

            ltx = ltx.."[logic@" .. gname .. "_gate2_guard" .. i .. "]\n" ..
                       "active          = walker@" .. gname .. "_gate2_guard" .. i .. "\n" ..
                       "combat_ignore   = combat_ignore\n" ..

                       "[walker@" .. gname .. "_gate2_guard" .. i .. "]\n" ..
                       "path_walk           = gate2_guard" .. i .. "_walk\n" ..
                       "path_look           = gate2_guard" .. i .. "_look\n" ..
                       "soundgroup          = cit_gate2_sg\n" ..
                       combat_ignore2
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
        end

        -- road patrols
        for i = 1, 3 do
            t = { section = "logic@" .. gname .. "_road_patrol" .. i,
                idle = 0,
                prior = 10, state = {0},
                squad = squad, group = groups[7],
                in_rest = "cit_selmag_up_floor_restr,cit_kanaliz_sr_in", out_rest = "",
                        online = "{-cit_map_give}",
                predicate = k_predicate_v
            }
            table.insert(sj, t)

            ltx = ltx.."[logic@" .. gname .. "_road_patrol" .. i .. "]\n" ..
                       "active          = walker@" .. gname .. "_road_patrol" .. i .. "\n" ..
                       "combat_ignore   = combat_ignore\n" ..
    --[[
                       "[camper@" .. gname .. "_road_patrol" .. i .. "]\n" ..
                       "path_walk           = road_patrol" .. i .. "_walk\n" ..
                       "path_look           = road_patrol" .. i .. "_look\n" ..
                       "no_retreat          = true\n" ..
                       "radius              = 25\n" ..
    --]]
                       "[walker@" .. gname .. "_road_patrol" .. i .. "]\n" ..
                       "path_walk           = road_patrol" .. i .. "_walk\n" ..
                       "path_look           = road_patrol" .. i .. "_look\n" ..
                       "def_state_moving1   = patrol\n" ..
                       "def_state_moving2   = patrol\n" ..
                       "def_state_moving3   = patrol\n" ..

                       "heli_hunter         = {+cit_heli_start -cit_heli_end}\n" ..
                       --"danger              = danger_killers\n" ..
                       combat_ignore
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
        end

        gulags.cit_killers.ltx = ltx
    end


    --------------------------------------------------------------------------
    -- Bandits
    --------------------------------------------------------------------------
    -- Predicates ------------------------------------------------------------
    function b_predicate_vb(data)
        return data.profile_name == "cit_bandit_veteran_best"
    end

    function b_predicate_v(data)
        return data.profile_name == "cit_bandit_veteran"
    end

    function b_predicate_g(data)
        return data.profile_name == "cit_bandit_general"
    end

    function b_predicate_d(data)
        return data.profile_name == "cit_bandit_drunk"
    end

    -- Jobs ------------------------------------------------------------------
    gulags.cit_bandits.job = function(sj, gname, type, squad, groups)
        local i, v, j = 0, 0, 0
        local prior, pred, gr = 0, 0, 0
        local ltx = ""

        ltx = ltx.."[danger_bandits]\n" ..
                   "ignore_distance = 30\n"

        -- leader
        t = { section = "logic@" .. gname .. "_leader",
            idle = 0,
            prior = 17, state = {0},
            squad = squad, group = groups[6],
            in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
            predicate = b_predicate_vb
        }
        table.insert(sj, t)

        ltx = ltx.."[logic@" .. gname .. "_leader]\n" ..
                   "active              = walker@" .. gname .. "_leader\n" ..
                   "combat_ignore       = combat_ignore\n" ..

                   "[walker@" .. gname .. "_leader]\n" ..
                   "path_walk           = leader_walk\n" ..
                   "path_look           = leader_look\n" ..
                   --"danger              = danger_bandits\n" ..
                   combat_ignore2
                   --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                   --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"

        -- leader guards
        for i, v in pairs({16, 15}) do
            t = { section = "logic@" .. gname .. "_leader_guard" .. i,
                idle = 0,
                prior = v, state = {0},
                squad = squad, group = groups[6],
                in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                        online = "{-cit_map_give}",
                predicate = b_predicate_vb
            }
            table.insert(sj, t)

            ltx = ltx.."[logic@" .. gname .. "_leader_guard" .. i .. "]\n" ..
                       "active              = walker@" .. gname .. "_leader_guard" .. i .. "\n" ..
                       "combat_ignore       = combat_ignore\n" ..

                       "[walker@" .. gname .. "_leader_guard" .. i .. "]\n" ..
                       "path_walk           = leader_guard" .. i .. "_walk\n" ..
                       "path_look           = leader_guard" .. i .. "_look\n" ..
                       --"danger              = danger_bandits\n" ..
                       combat_ignore2
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
        end

        -- walkers between kamps
        local start_kamp = {1, 3, 4}
        local kamp_change = {{3, 2, 4, 1}, {1, 4, 2, 3}, {3, 4, 1, 2}}
        local delays = {{20, 30, 22, 28}, { 25, 10, 14, 12}, {11, 17, 19, 24}}
        local d, kc = 0, 0

        for i = 1, 3 do
            t = { section = "logic@" .. gname .. "_free" .. i .. "_in_kamp",
                idle = 0,
                prior = 9, state = {0},
                squad = squad, group = groups[11],
                in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                        online = "{-cit_map_give}",
                predicate = b_predicate_v
            }
            table.insert(sj, t)

            d = delays
            kc = kamp_change
            ltx = ltx.."[logic@" .. gname .. "_free" .. i .. "_in_kamp]\n" ..
                       "active          = walker@" .. gname .. "_free" .. i .. "_to_kamp" .. start_kamp .. "\n" ..
                       "combat_ignore   = combat_ignore\n"
            for j, v in pairs(kc) do
                ltx = ltx.."[walker@" .. gname .. "_free" .. i .. "_to_kamp" .. j .. "]\n" ..
                           "path_walk           = near_kamp" .. j .. "_walk\n" ..
                           "path_look           = kamp" .. j .. "\n" ..
                           "def_state_moving1   = patrol\n" ..
                           "def_state_moving2   = patrol\n" ..
                           "def_state_moving3   = patrol\n" ..
                           "on_signal           = arrived | kamp@" .. gname .. "_free" .. i .. "_in_kamp" .. j .. "\n" ..
                           --"danger              = danger_bandits\n" ..
                           combat_ignore ..
                           --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n" ..
                           --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n" ..

                           "[kamp@" .. gname .. "_free" .. i .. "_in_kamp" .. j .. "]\n" ..
                           "center_point        = kamp" .. j .. "\n" ..
                           "def_state_moving    = patrol\n" ..
                           "on_timer            = " .. d[j] .. "000 | walker@" .. gname .. "_free" .. i .. "_to_kamp" .. v .. "\n" ..
                           "soundgroup          = " .. gname .. "_kamp" .. j .. "_sg\n" ..
                           --"danger              = danger_bandits\n" ..
                           combat_ignore2
                           --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                           --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
            end
        end

        -- patrols in kamp
        prior = {9, 2, 6}
        local kamps, k = {1, 2, 4}, 0
        delays = {40, 120, 60}
        for i, v in pairs({2, 1, 1}) do
            k = kamps
            for j = 1, v do
                t = { section = "logic@" .. gname .. "_kamp" .. k .. "_patrol",
                    idle = 0,
                    prior = prior, state = {0},
                    squad = squad, group = groups[k],
                    in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                            online = "{-cit_map_give}",
                    predicate = b_predicate_v
                }
                table.insert(sj, t)
            end

            ltx = ltx.."[logic@" .. gname .. "_kamp" .. k .. "_patrol]\n" ..
                       "active      = patrol@" .. gname .. "_kamp" .. k .. "_patrol\n" ..
                       "combat_ignore   = combat_ignore\n" ..

                       "[patrol@" .. gname .. "_kamp" .. k .. "_patrol]\n" ..
                       "path_walk  = kamp" .. k .. "_patrol_walk\n" ..
                       --"path_look  = kamp" .. k .. "\n" ..
                       "formation  = line\n" ..
                       "on_signal  = arrived | kamp@" .. gname .. "_kamp" .. k .. "_patrol\n" ..
                       --"danger              = danger_bandits\n" ..
                       combat_ignore2 ..
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n" ..
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n" ..

                       "[kamp@" .. gname .. "_kamp" .. k .. "_patrol]\n" ..
                       "center_point        = kamp" .. k .. "\n" ..
                       "on_timer            = " .. delays .. "000 | patrol@" .. gname .. "_kamp" .. k .. "_patrol\n" ..
                       "soundgroup          = " .. gname .. "_kamp" .. k .. "_sg\n" ..
                       --"danger              = danger_bandits\n" ..
                       combat_ignore2
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
        end

        -- kamps
        prior = {8, 2, 4, 5}
        for i, v in pairs({2, 1, 1, 2}) do
            for j = 1, v do
                t = { section = "logic@" .. gname .. "_kamp" .. i,
                    idle = 0,
                    prior = prior, state = {0},
                    squad = squad, group = groups,
                    in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                            online = "{-cit_map_give}",
                    predicate = b_predicate_g
                }
                table.insert(sj, t)
            end

            ltx = ltx.."[logic@" .. gname .. "_kamp" .. i .. "]\n" ..
                       "active          = kamp@" .. gname .. "_kamp" .. i .. "\n" ..
                       "combat_ignore   = combat_ignore\n" ..

                       "[kamp@" .. gname .. "_kamp" .. i .. "]\n" ..
                       "center_point        = kamp" .. i .. "\n" ..
                       "def_state_moving    = run\n" ..
                       "soundgroup          = " .. gname .. "_kamp" .. i .. "_sg\n" ..
                       --"danger              = danger_bandits\n" ..
                       combat_ignore2
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
        end

        -- base guards
        pred = {b_predicate_vb, b_predicate_v}
        for i, v in pairs({13, 14}) do
            t = { section = "logic@" .. gname .. "_base_guard" .. i,
                idle = 0,
                prior = v, state = {0},
                squad = squad, group = groups[7],
                in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                        online = "{-cit_map_give}",
                predicate = pred
            }
            table.insert(sj, t)

            ltx = ltx.."[logic@" .. gname .. "_base_guard" .. i .. "]\n" ..
                       "active          = walker@" .. gname .. "_base_guard" .. i .. "\n" ..
                       "combat_ignore   = combat_ignore\n" ..

                       "[walker@" .. gname .. "_base_guard" .. i .. "]\n" ..
                       "path_walk           = base_guard" .. i .. "_walk\n" ..
                       --"path_look           = base_guard" .. i .. "_look\n" ..
                       --"danger              = danger_bandits\n" ..
                       combat_ignore2
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                       --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
        end

        -- patrol in center
        for i = 1, 2 do
            t = { section = "logic@" .. gname .. "_center_patrol",
                idle = 0,
                prior = 10, state = {0},
                squad = squad, group = groups[8],
                in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                        online = "{-cit_map_give}",
                predicate = b_predicate_v
            }
            table.insert(sj, t)
        end

        ltx = ltx.."[logic@" .. gname .. "_center_patrol]\n" ..
                   "active      = patrol@" .. gname .. "_center_patrol\n" ..
                   "combat_ignore   = combat_ignore\n" ..

                   "[patrol@" .. gname .. "_center_patrol]\n" ..
                   "path_walk  = center_patrol_walk\n" ..
                   --"path_look  = center_patrol_look\n" ..
                   "formation  = line\n" ..
                   "soundgroup          = " .. gname .. "_center_patrol_sg\n" ..
                   --"danger              = danger_bandits\n" ..
                   combat_ignore
                   --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                   --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"

        -- gate guards
        prior = {12, 7}
        pred = {b_predicate_vb, b_predicate_v}
        gr = {10, 9}
        for i, v in pairs({3, 2}) do
            for j = 1, v do
                t = { section = "logic@" .. gname .. "_gate" .. i .. "_guard" .. j,
                    idle = 0,
                    prior = prior, state = {0},
                    squad = squad, group = groups[gr],
                    in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                            online = "{-cit_map_give}",
                    predicate = pred
                }
                table.insert(sj, t)

                ltx = ltx.."[logic@" .. gname .. "_gate" .. i .. "_guard" .. j .. "]\n" ..
                           "active      = walker@" .. gname .. "_gate" .. i .. "_guard" .. j .. "\n" ..
                           "combat_ignore   = combat_ignore\n" ..

                           "[walker@" .. gname .. "_gate" .. i .. "_guard" .. j .. "]\n" ..
                           "path_walk  = gate" .. i .. "_guard" .. j .. "_walk\n" ..
                           "path_look  = gate" .. i .. "_guard" .. j .. "_look\n" ..
                           "soundgroup          = cit_gate" .. i .. "_sg\n" ..
                           combat_ignore2
                           --"combat_ignore_cond  = {=fighting_actor -cit_actor_out_killers_base}, {=check_fighting(1200)}\n"
                           --"combat_ignore_cond  = {=fighting_actor -cit_actor_is_free}, {=check_fighting(1200)}\n"
            end
        end

        -- drunken
        for i = 1, 2 do
            t = { section = "logic@" .. gname .. "_drunken" .. i,
                idle = 0,
                prior = 1, state = {0},
                squad = squad, group = groups[12],
                in_rest = "cit_selmag_restr,cit_kanaliz_sr_in", out_rest = "",
                        online = "{-cit_map_give}",
                predicate = b_predicate_d
            }
            table.insert(sj, t)

            ltx = ltx.."[logic@" .. gname .. "_drunken" .. i .. "]\n" ..
                       "active          = walker@" .. gname .. "_drunken" .. i .. "\n" ..
                       "combat_ignore   = combat_ignore\n" ..

                       "[walker@" .. gname .. "_drunken" .. i .. "]\n" ..
                       "path_walk           = drunken" .. i .. "_walk\n" ..
                       --"path_look           = drunken" .. i .. "_look\n"..
                       "def_state_moving1   = walk\n" ..
                       "def_state_moving2   = walk\n" ..
                       "def_state_moving3   = walk\n" ..
                       "combat_ignore_cond  = always\n"
        end

        gulags.cit_bandits.ltx = ltx
    end


    --------------------------------------------------------------------------
    -- Beasts
    --------------------------------------------------------------------------
    -- Predicates ------------------------------------------------------------

    -- Jobs ------------------------------------------------------------------
    gulags.cit_beasts.job = function(sj, gname, type, squad, groups)
        local ltx = ""

        -- Проверяем наличие моб_хом.
        local i = 1
        while level.patrol_path_exists(gname .. "_home_" .. i) do
            -- Необходимо вычитать количество работ из названия точки пути.
            local way_name = gname .. "_home_" .. i
            local ptr = patrol(way_name)
            local wp_prop = utils.parse_waypoint_data(way_name, ptr:flags(0), ptr:name(0))
            local job_count = 10
            if wp_prop.count ~= nil then
                job_count = wp_prop.count
            end

            for i = 1, job_count do
                -- добавляем должность
                t = { section = "logic@" .. way_name,
                    idle = 0,
                    prior = 1, state = {0}, squad = squad, group = groups[1],
                    position_threshold = 20,
                    in_rest = "", out_rest = gname .. "_restr"
                }
                table.insert(sj, t)
            end

            -- добавляем описание должности в лтх.
            local job_ltx = "[logic@" .. way_name .. "]\n" ..
                            "active = mob_home@" .. way_name .. "\n" ..

                            "[mob_home@" .. way_name .. "]\n" ..
                            "path_home = home_" .. i .. "\n"

            ltx = ltx..job_ltx
            i = i + 1
        end

        gulags.cit_beasts.ltx = ltx
    end

     


  8. Проблема такая - не работают гулаги монстров на локации, что бы я ни делал.
    Локация - мертвый город из билдов, но использующий файлы gulag_deadcity.ltx и gulag_deadcity.script которые остались в финалке. Тамошние гулаги работают, но так как они записаны малопонятными мне скриптовыми методами, без использования gulag_deadcity.ltx(он полностью пустой) то я просто создал gulag_deadcity2.ltx и gulag_deadcity2.script и вписал монстров привычным образом. На другой локации где точно такая же ситуация - это все работает.
    лтх и скрипт в gulag_tasks.ltx и xr_gulag.script зарегестрированы
     

    Спойлер


    [logic@cit_bloodsucker_domik_day]
    active = mob_home@cit_bloodsucker_domik_day

    [mob_home@cit_bloodsucker_domik_day]
    path_home = home_1
    home_min_radius = 10
    home_max_radius = 20

    [logic@cit_bloodsucker_domik_night]
    active = mob_home@cit_bloodsucker_domik_night

    [mob_home@cit_bloodsucker_domik_night]
    path_home = home_2
    home_min_radius = 20
    home_max_radius = 40


     

    [logic@cit_burers_okraina_day]
    active = mob_home@cit_burers_okraina_day

    [mob_home@cit_burers_okraina_day]
    path_home = home_1
    home_min_radius = 10
    home_max_radius = 20

    [logic@cit_burers_okraina_night]
    active = mob_home@cit_burers_okraina_night

    [mob_home@cit_burers_okraina_night]
    path_home = home_2
    home_min_radius = 20
    home_max_radius = 40

     

    [logic@cit_poltergeist_skotoblok1]
    active = mob_home@cit_poltergeist_skotoblok1

    [mob_home@cit_poltergeist_skotoblok1]
    path_home = home_1
    home_min_radius = 20
    home_max_radius = 40

    [logic@cit_poltergeist_skotoblok2]
    active = mob_home@cit_poltergeist_skotoblok2

    [mob_home@cit_poltergeist_skotoblok2]
    path_home = home_1
    home_min_radius = 20
    home_max_radius = 40

    [logic@cit_poltergeist_gorkom]
    active = mob_home@cit_poltergeist_gorkom

    [mob_home@cit_poltergeist_gorkom]
    path_home = home_1
    home_min_radius = 20
    home_max_radius = 40

     

    [logic@cit_rat_kanaliz1_day]
    active = mob_home@cit_rat_kanaliz1_day

    [mob_home@cit_rat_kanaliz1_day]
    path_home = home_1
    home_min_radius = 10
    home_max_radius = 20

    [logic@cit_rat_kanaliz1_night]
    active = mob_home@cit_rat_kanaliz1_night

    [mob_home@cit_rat_kanaliz1_night]
    path_home = home_2
    home_min_radius =

    20
    home_max_radius = 40

     

    [logic@cit_rat_kanaliz2_day]
    active = mob_home@cit_rat_kanaliz2_day

    [mob_home@cit_rat_kanaliz2_day]
    path_home = home_1
    home_min_radius = 10
    home_max_radius = 20

    [logic@cit_rat_kanaliz2_night]
    active = mob_home@cit_rat_kanaliz2_night

    [mob_home@cit_rat_kanaliz2_night]
    path_home = home_2
    home_min_radius = 20
    home_max_radius = 40

    Спойлер

    local t = {}

    function load_job(sj, gname, type, squad, groups)

        if type == "cit_bloodsucker_domik" then
            t = { section = "logic@cit_bloodsucker_domik_day",
                idle = 0,
                prior = 5, state = {2},
                online = false,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_bloodsucker_domik_day",
                idle = 0,
                prior = 5, state = {0},
                online = true,
                in_rest = "", out_rest = "cit_bloodsucker_domik_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_bloodsucker_domik_night",
                idle = 0,
                prior = 5, state = {1},
                online = true,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
        end

        if type == "cit_burers_okraina" then
            t = { section = "logic@cit_burers_okraina_day",
                idle = 0,
                prior = 5, state = {2},
                online = false,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_burers_okraina_day",
                idle = 0,
                prior = 5, state = {2},
                online = false,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_burers_okraina_day",
                idle = 0,
                prior = 5, state = {0},
                online = true,
                in_rest = "", out_rest = "cit_burers_okraina_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_burers_okraina_day",
                idle = 0,
                prior = 5, state = {0},
                online = true,
                in_rest = "", out_rest = "cit_burers_okraina_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_burers_okraina_night",
                idle = 0,
                prior = 5, state = {1},
                online = true,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_burers_okraina_night",
                idle = 0,
                prior = 5, state = {1},
                online = true,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
        end

        if type == "cit_poltergeist_skotoblok1" then
            t = { section = "logic@cit_poltergeist_skotoblok1",
                idle = 0,
                prior = 5, state = {0},
                online = false,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_poltergeist_skotoblok1",
                idle = 0,
                prior = 5, state = {1},
                online = true,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_poltergeist_skotoblok1",
                idle = 0,
                prior = 5, state = {2},
                online = false,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
        end

        if type == "cit_poltergeist_skotoblok2" then
            t = { section = "logic@cit_poltergeist_skotoblok2",
                idle = 0,
                prior = 5, state = {0},
                online = false,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_poltergeist_skotoblok2",
                idle = 0,
                prior = 5, state = {1},
                online = true,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_poltergeist_skotoblok2",
                idle = 0,
                prior = 5, state = {2},
                online = false,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
        end

        if type == "cit_poltergeist_gorkom" then
            t = { section = "logic@cit_poltergeist_gorkom",
                idle = 0,
                prior = 5, state = {0},
                online = false,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_poltergeist_gorkom",
                idle = 0,
                prior = 5, state = {1},
                online = true,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_poltergeist_gorkom",
                idle = 0,
                prior = 5, state = {2},
                online = false,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_poltergeist_gorkom",
                idle = 0,
                prior = 5, state = {0},
                online = false,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_poltergeist_gorkom",
                idle = 0,
                prior = 5, state = {1},
                online = true,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_poltergeist_gorkom",
                idle = 0,
                prior = 5, state = {2},
                online = false,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
        end

        if type == "cit_rat_kanaliz1" then
            t = { section = "logic@cit_rat_kanaliz1_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz1_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz1_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz1_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz1_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz1_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz1_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz1_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz1_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz1_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz1_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz1_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz1_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz1_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz1_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz1_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz1_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz1_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
        end

        if type == "cit_rat_kanaliz2" then
            t = { section = "logic@cit_rat_kanaliz2_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz2_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz2_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz2_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz2_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz2_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz2_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz2_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz2_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz2_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_day",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = "cit_rat_kanaliz2_out"
            }
            table.insert(sj, t)
            t = { section = "logic@cit_rat_kanaliz2_night",
                idle = 0,
                prior = 5, state = {1},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
        end

    end


    function load_states(gname, type)
        if type == "cit_bloodsucker_domik" then
        return function(gulag)
                    local actor = db.actor
                            if not actor then
                               return gulag.state
                end
                if not has_alife_info("cit_map_give") then
                        return 2 -- offline
                elseif level.get_time_hours() >= 5 and level.get_time_hours() <= 21 then
                        return 0  -- день
            else
                        return 1  -- ночь
                    end
                end
            end

        if type == "cit_burers_okraina" then
        return function(gulag)
                    local actor = db.actor
                            if not actor then
                               return gulag.state
                end
                if not has_alife_info("cit_map_give") then
                        return 2 -- offline
                elseif level.get_time_hours() >= 5 and level.get_time_hours() <= 21 then
                        return 0  -- день
            else
                        return 1  -- ночь
                    end
                end
            end

        if type == "cit_poltergeist_skotoblok1" then
        return function(gulag)
                    local actor = db.actor
                            if not actor then
                               return gulag.state
                end
                if not has_alife_info("cit_map_give") then
                        return 2 -- offline
                elseif level.get_time_hours() >= 5 and level.get_time_hours() <= 21 then
                        return 0  -- день offline
            else
                        return 1  -- ночь
                    end
                end
            end

        if type == "cit_poltergeist_skotoblok2" then
        return function(gulag)
                    local actor = db.actor
                            if not actor then
                               return gulag.state
                end
                if not has_alife_info("cit_map_give") then
                        return 2 -- offline
                elseif level.get_time_hours() >= 5 and level.get_time_hours() <= 21 then
                        return 0  -- день offline
            else
                        return 1  -- ночь
                    end
                end
            end

        if type == "cit_poltergeist_gorkom" then
        return function(gulag)
                    local actor = db.actor
                            if not actor then
                               return gulag.state
                end
                if not has_alife_info("cit_map_give") then
                        return 2 -- offline
                elseif level.get_time_hours() >= 5 and level.get_time_hours() <= 21 then
                        return 0  -- день offline
            else
                        return 1  -- ночь
                    end
                end
            end

        if type == "cit_rat_kanaliz1" then
            return function(gulag)
                if db.actor ~= nil then
                    if ( level.get_time_hours() >= 5 and level.get_time_hours() <= 22 ) then
                        return 0  -- день
                    else
                        return 1  -- ночь
                    end
                else
                    return gulag.state
                end
            end
        end

        if type == "cit_rat_kanaliz2" then
            return function(gulag)
                if db.actor ~= nil then
                    if ( level.get_time_hours() >= 5 and level.get_time_hours() <= 22 ) then
                        return 0  -- день
                    else
                        return 1  -- ночь
                    end
                else
                    return gulag.state
                end
            end
        end


    end

    --------------------------------------------------------------------------
    -- Dynamic ltx
    --------------------------------------------------------------------------
    function load_ltx(gname, type)
        return nil
    end

    function checkStalker(npc_community, gulag_type, npc_rank, se_obj)
        end
         return false
    end

    function checkMonster(npc_community, gulag_type)

        if gulag_type == "cit_bloodsucker_domik" then
                return npc_community == "bloodsucker"
        end

        if gulag_type == "cit_burers_okraina" then
                return npc_community == "burer"
        end

        if gulag_type == "cit_poltergeist_skotoblok1" then
            return npc_community == "poltergeist"
        end

        if gulag_type == "cit_poltergeist_skotoblok2" then
            return npc_community == "poltergeist"
        end

        if gulag_type == "cit_poltergeist_gorkom" then
            return npc_community == "poltergeist"
        end

        if gulag_type == "cit_rat_kanaliz1" then
            return npc_community == "rat"
        end

        if gulag_type == "cit_rat_kanaliz2" then
            return npc_community == "rat"
        end
        
        return false
    end

    Спойлер

    [l09_deadcity]
    stalker        = experienced, veteran, master
    csky        = experienced, veteran, master
    monolith    = experienced, veteran, master
    killer        = experienced, veteran, master
    ecolog        = experienced, veteran
    dolg        = experienced, veteran, master
    freedom        = experienced, veteran, master
    bandit        = experienced, veteran, master
    zombied        = novice, experienced, veteran, master

    boar        =    normal, strong
    bloodsucker    =    normal, strong
    flesh        =    normal, strong
    dog        =    normal, strong
    pseudodog    =    normal, strong
    zombie        =    normal, strong
    controller    =    normal, strong
    chimera        =    normal, strong
    fracture    =    normal, strong
    tushkano    =    weak, normal, strong
    rat        =    weak, normal, strong
    snork        =    weak, normal
    poltergeist    =    weak, normal, strong
    burer        =    weak, normal
    giant        =    weak, normal
    pseudo_gigant   =    weak, normal
    fracture    =    weak, normal

    в general_lair.ltx и general_lager.ltx примерно тоже самое, генеральные лагеря с монстрами на локации работают нормально, а вот с людьми - так себе, тоже проблемы есть


  9. 1 час назад, Yara сказал:

    В 2016 так:

    выделить все объекты, затем в меню Edit -> Group. Выделить созданную группу, в меню Modify -> Center Pivot (чтобы пивот был относительно объектов, а не нулевых координат). После нужных операций - выделить группу и Edit -> Ungroup.

    Подобное можно проделать в сдк.

    работает, но не полностью - объекты передвигаю, но при экспорте в объекты - все сбрасывается.
    Я передвигаю обычно объекты выделяя их грани\вертексы или полигоны целиком чтоб ничего не сбрасывалось, группа же распадается если попытаться выделить полигоны например - выделяются только полигоны одного объекта...


    Дополнено 27 минуты спустя

    Ааа, Freeze Transform сохраняет трансформацию..


  10. 3 часа назад, macron сказал:

    Так ты выложи ACDC-сборку уже готовую к распаковке. У кого перл работает, проверят. Только даже с рабочим перлом обычно возникает куча ошибок при первых запусках, каких-нибудь недостающих классов в инишках или ошибок в конфигах...

    Вот, закинул левел спаун и папку с конфигами из билда
    https://disk.yandex.ru/d/H9K_Kfok_xc2SA


  11. 11 минут назад, Bowsette сказал:

    В рамках пост НГ посиделок могу повспоминать чьё-нибудь особенного  относительно того билда который щупал, сколько лет то назад?  6-ть что-ли.

      Скрыть контент

     

    На тот момент это был самый близкий порт на ТЧ графоуни из дилда в саркофаге 2004 года с E3.

    (но графон затем дотянул SA 0.8 и а через исходники натягал грандрендеринг мод т.е те кто ради особого шейдера могут сразу идти см. грандрендеринг)
    Те кто ради каких-то ремейков лок в билдо русле, в теории если бы все локи бы расширились как Агропром и так вплоть до ЧАЭС, то наверно игра стоила бы свеч, обновленный Агропром ощущался как мини-опенворлд с A-life ситуациями. (но это тяжелый проект даже для команды True Stalker или Дезовейвов)
    ______________________

    Какие проблемы с проектом PL

    1) расширение лок на старом двигле (хотя такое уже принято пилить на open-xray см. Живую Зону и True)

    2) затворническое нежелания расширят команду 
    3) пучина лагодрома, ловли ошибок + оптимизация (малыми силами причина пункт 2.)

    4) неспособность выдать билдо-эстетику как у заглохшего дилдо-мода 1984, ну как получается в теории PL это расширенный билдо ТЧ, который типа с обновленными участками лок, которые лучше чем в эстетике того самого 1984 не преподнесешь, а лучше чтобы лучше чем там.

    В соотношение сторон 4:3 конечно же.

    _c0be2fec024d152828d65646e833b453.jpeg

    В теории это помогло бы заскочить на рельсы донатного проекта по образцу чела из SOC upd и засветившись подтянуть еще людей(ну или обновить железо и ускорить через это все что можно ускорить).

    BTTS (обратно в сталкера) достаточно близко подобрались в этой сфере билдо пердолинга к сути как это должно ощущаться  т.е он более перспективный ( из выборки похожих проектов) даже не смотря на то что его пока  подморозили, когда его разморозят он все равно обгонит очередной раз.

    ____________________

    Можете посмотреть как преуспел какой-нибудь SOC UPD на фоне затянувшегося PZ и PL ворвавшись просто как орешник и скоростными темпами перерабатывающий в одно рыло столько лок подряд, да еще урвав себе под шумок Припять "Живой Зоны" как один из первых проектов кто её преподнесёт максимально графонисто, время спустя он уже натаскает ассетов на тему всех энергоблоков ЧАЭС из разных времён многие из которых уже и позабылись. Счастье PL что этот чел не фигачит сугубо в билдо стилистике, и горе PZ т.к очень близко по смыслу того каким в идеале мог бы стать PZ, если не терять темпов.

    Если бы автор SOC UPD ухватился за билдоту, он бы наверняка на каком-нибудь open-xray выдал бы такого 1984, который бы затмил все вот эти долгие посиделки.

    _8299a41271087eea588194e303f39c82.jpeg _34bf69d6772703020f4a259865c1be65.jpeg


     

    тема конечно холиварна, но себя достойна ( как в старые добрые времена на gameru.net)

    это не совсем тсс-проект, ибо используется только стилистика билдов 2004 года, текстуры и некоторые модели. в первую очередь травы и деревьев. Билдолок там не вижу, как  и прочих атрибутов сталкера.
    Еще не видел работы с тсс-освещением в помещениях - sun-источников света, которые используются в ПЛ и ОЛР 3.0

     

    ss_admin_10-11-22_11-24-23_(l02_garbage).jpg

    ss_user_01-04-25_22-20-24_(l04_darkvalley).jpg

    • Лайк 5

  12. 11 часов назад, Счастливчик сказал:

    С наступившим Вас уважаемые разработчики 2025 годом!
    Хотел узнать, ведется ли разработка проекта и как много осталось сделать?
    А то смотрю давно новостей не было

    Ведется, готово половина где-то

    • Лайк 1
    • Мастер! 1
    • Хабар 3

  13. Цитата

    Убран просчет RGB и Sun компонентов освещения и оставлен только Hemi

    правильно понимаю, что в бета-версии это не исправлено?
    Неужели так сложно не вырезать это а хотя бы галочку оставить на включение выключение?

    • Клоун 1

  14. как вписать сюда четвертое оффлайновое состояние, чтобы были в нем до получения одного инфо и переходили в него после получения другого?

        if type == "смарт" then        
            return function (gulag)
                    for k,v in pairs(gulag.Object) do
                        if v ~= true and v:best_enemy() ~= nil then
                               gulag.alarm_start = game.get_game_time()
                               return 2 -- тревога
                        end
                    end        
            
                    if gulag.alarm_start == nil or
                        game.get_game_time():diffSec(gulag.alarm_start) > 300 then
                        if level.get_time_hours() >= 6 and level.get_time_hours() <= 22 then
                            return 0  -- день
                        else
                            return 1  -- ночь
                        end
                    else
                        return 2
                    end
            end
        end