Если бы ГГ был прописан к действующим кланам, то как бы двигался сюжет? Пусть бы ГГ вступил в клан обычных бандитов, да любой сталкер почёл за удовольствие его грохнуть. Поэтому Николай ввёл группировку actor_bandits, к которой сталкеры нейтральны. А у нас идея нагло и цинично менять костюмы и имитировать членство в группировке.

Значит нам надо определить, что надето на ГГ.
Определяемся. Голый ГГ - сталкер, Если надет novice_outfit или stalker_outfit - тоже.
Если надет svoboda_light_outfit или svoboda_heavy_outfit - Свободовец.
Если надет dolg_outfit или dolg_heavy_outfit - Долговец
и так далее.
После того как мы определились какой броник соответствует какому клану можно писать свои функции. В папке скриптов создаём пустой файл perehod.script В нем создаём функцию analisis_outfit.

function analisis_outfit()

--Теперь надо узнать, что надето на ГГ
local outfit_now = db.actor:item_in_slot(7)

--Чего там на нём? Выясняем:
if (outfit_now ~= nil) then --если не голый

--если костюм новичка или комбез сталкера
if outfit_now:section() == "novice_outfit" or outfit_now:section() == "stalker_outfit" then

--изменяем клан для ГГ
actor_stalker() -- см ниже
elseif
outfit_now:section() == "svoboda_light_outfit" or outfit_now:section() == "svoboda_heavy_outfit" then actor_svoboda() -- см ниже
elseif
outfit_now:section() == "dolg_outfit" or outfit_now:section() == "dolg_heavy_outfit" then
actor_dolg() -- см ниже

--и так перебираем все костюмы кланов, вызывая функцию присвоения членства ГГ в соответствующем клане.
--в конце идёт "в противном случае" - если не один костюм из перебираемых не соответствует надетому. Пусть в этом случае clan - сталкер.

else
actor_stalker() -- см ниже
end
end
end

Дальше пошли функции принятия ГГ в кланы:

--Приём в сталкеры
function actor_stalker()
db.actor:set_character_community("stalker",0,0)
sgm_functions.write_variable("stat_community","stalker")
end

--Приём в Свободу
function actor_svoboda()
db.actor:set_character_community("svoboda",0,0)
sgm_functions.write_variable("stat_community","svoboda")
end

--Приём в Долг
function actor_dolg()
db.actor:set_character_community("dolg",0,0)
sgm_functions.write_variable("stat_community","dolg")
end

--И далее, сколько кланов анализируется. Откуда берётся перечень броников? Из \configs\misc\outfit.ltx. А названия группировок? Из \configs\creatures\game_relations.ltx.
Итак. Мы сделали функцию анализа броника и несколько функций перевода ГГ в клан, соответствующий бронику. А как их запускать? Все функции "быстрого реагирования" запускаются из различных апдейтов. Апдейты несколько десятков раз в минуту обновляют ситуацию в игре.
Мы прицепимся к биндеру актёра. Открываем scripts\bind_stalker.script
Ищем функцию function actor_binder:update(delta) и в самый конец функции перед последним end
вводим вызов соей функции анализа. Здесь надо учесть, что вызов функции из другого файла предваряется именем файла, где содержится функция. Разделяется имя файла и имя функции точкой. Значит наш вызов будет выглядеть в теле апдейта так:

-- загрузка мода(постоянное обновление)
if mod_update() then
sgm_loader.sigerous_mod_main()
end
perehod. analisis_outfit()
end

Всё, тестируем, что получилось
Маленькие хитрости:
Если мы хотим, чтобы у сталкеров проверялся ешё и экзоскелет, то мы должны изменить строчку анализа:

if outfit_now:section() == "novice_outfit" or outfit_now:section() == "stalker_outfit" or outfit_now:section() == "exo_outfit" then

Однако есть ведь и проапгрейженные броники, и чего , все их вставлять в анализ?
Есть чудесная функция find_in_string(строка,фрагмент) она позволяет найти в строке фрагмент, если он есть и возвращает true, если нашла фрагмент и false, если нет.
Попробуем её использовать в анализе.
Смотрим на костюмы Долга. И в тот и в другой входит фрагмент "dolg" Значит, если в названии костюма мы найдём строчку "dolg" мы однозначно попадём на долговские костюмы. Значит строчку

outfit_now:section() == "dolg_outfit" or outfit_now:section() == "dolg_heavy_outfit" then

можно заменить так:

find_in_string(outfit_now:section(), "dolg") then