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

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

 
 
1 час назад, imcrazyhoudini сказал:

soQuiet попробуй убрать строку:
    check_outfit.update()

Тот скрипт скорее всего за что-то другое отвечает, наверное с Борова скрипт брал, он там другую функцию несёт в себе.

Строчку убрал, появилась другая проблема.
 

Спойлер

[error]Expression    : FATAL ERROR
[error]Function      : CScriptEngine::lua_pcall_failed
[error]File          : D:\a\OGSR-Engine\OGSR-Engine\ogsr_engine\COMMON_AI\script_engine.cpp
[error]Line          : 75
[error]Description   : [CScriptEngine::lua_pcall_failed]: ....l.k.e.r. shadow of chernobyl\gamedata\scripts\_g.script:188: bump# for texture [%s] not found

Глянул в скрипте ogsr - на момент вызова в онлайне, нет ни одного ствола с нужными текстурами рук, и тут я запыхтел что-то.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

soQuiet что-то помню такое, бампы есть к перчаткам? Их нужно ещё в textures.ltx зарегистрировать. На динамике мод запускаешь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
19 минут назад, imcrazyhoudini сказал:

soQuiet что-то помню такое, бампы есть к перчаткам? Их нужно ещё в textures.ltx зарегистрировать. На динамике мод запускаешь?

Бампы то есть, вытащил для проверки из Точки невозврата, а вот насчёт динамики, я насколько помню в последним билде ОГСР-а на Гитхабе убрали возможность выбора динамики и статики, он вроде автоматом R3 запускает.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

soQuiet если ласт билд то да, R4 только, ну ты в textures.ltx зарегистрируй бампы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
15 минут назад, imcrazyhoudini сказал:

soQuiet если ласт билд то да, R4 только, ну ты в textures.ltx зарегистрируй бампы.

а по textures.ltx такие дела, тоже код из Точки брал, чтоб вообще проверить на работоспособность.

photo_2025-10-19_21-12-10.jpg

photo_2025-10-19_21-11-18.jpg

photo_2025-10-19_21-13-28.jpg

в последних билдах полезный bat-файл появился - convert_textures_ltx.


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

текстуры не подменяются на разных костюмах, а пытаешься полностью снять броню и ловишь вылет.


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

Странная тема, либо скрипт не работает, либо я косякнул где-то.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

soQuiet а у тебя оружие какое вообще?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
34 минуты назад, imcrazyhoudini сказал:

soQuiet а у тебя оружие какое вообще?

Оружейка Gunslinger WP (И classic-версию пробовал, и полноценную)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

soQuiet надо посмотреть какие текстуры указаны, в classic версии вроде одна версия текстур.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Проблема такая - не работают гулаги монстров на локации, что бы я ни делал.
Локация - мертвый город из билдов, но использующий файлы 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 примерно тоже самое, генеральные лагеря с монстрами на локации работают нормально, а вот с людьми - так себе, тоже проблемы есть

Изменено пользователем РСФСР
криво вставил

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

РСФСР 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
24 минуты назад, Yara сказал:

РСФСР 

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

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


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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
5 часов назад, РСФСР сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

РСФСР 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
1 час назад, Yara сказал:

РСФСР 

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

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

freedom        = experienced, veteran, master

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

РСФСР 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
34 минуты назад, Yara сказал:

РСФСР 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Есть простая логика:

Спойлер

[remark]
target = nil
anim = look_side
meet = no_meet
on_signal = anim_end | walker

Проблема - он не отыгрывает всю анимацию, просто секунду-две постоит и пойдёт в walker, почему?

Спойлер

        look_side    = {    prop    = { maxidle = 1,
                                    sumidle = 1,
                                    rnd = 100 },
                        into    = nil,
                        out        = nil,
                        idle    = {    [0]    = "chasovoy_2" },
                        rnd        = nil},

Спойлер

    look_side = {weapon = "unstrapped",
                movement = move.stand,
                mental = anim.free,
                bodystate = move.standing,
                animstate = "stand",
                animation = "look_side"
            },

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
5 часов назад, РСФСР сказал:

нпс тоже должны спавнятся по тому же инфо, которое включает смарт

Они его займут, но через некоторое время - связано с обновлениями в скриптах.

Можно поискать в скриптах имя нужной группировки, может есть какие-то проверки - а может опять лишний end / нужная зпт / незакрытые кавычки и т.п.

5 часов назад, РСФСР сказал:

Смарт и без заспавненных рядом привязанных нпс не заполняется со временем.

Для проверки - создать рядом респавнер с нужными нпс.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
5 минут назад, Yara сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

РСФСР 

Всё так, желательно сравнить папку scripts мода с оригинальной, посмотреть изменения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
В 23.10.2025 в 11:31, imcrazyhoudini сказал:

soQuiet надо посмотреть какие текстуры указаны, в classic версии вроде одна версия текстур.

в плане?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу