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

Капрал Хикс

Жители
  • Число публикаций

    1 180
  • Регистрация

  • Последнее посещение

  • Дней в топе

    3
  • AMKoin

    21,524 [Подарить AMKoin]

Капрал Хикс последний раз побеждал 10 Октября 2024

Капрал Хикс - автор самых популярных публикаций!

Баланс оценок

542

9 подписчиков

Звание

  • Звание
    РАЖДЁН ШТОП РУНИТЬ.

Недавние посетители профиля

13 716 просмотров профиля

Закладки

  1. Прозекторская
    Прозекторская

    А сейчас - даже не сельхозинвентарь, а, не побоюсь этого слова, посевная и уборочная техника для крупнотоннажного, так сказать, производства. Что, впрочем, не мешает исполнять на ней те же действия с теми же результатами, что и для граблей обыкновенных.

     

    local a = self:smart_terrain_accepts_obj( obj, b )
    где второй аргумент у нас, напоминаю - можно ли непися запускать в смарт.
    Уже замечательно для случая с disagreed. ;) Впрочем, если даже неписю предписано идти в конкретный смарт - счастья это особо не прибавляет, ибо:

    function se_smart_terrain:smart_terrain_accepts_obj( obj, obj_agreement )
        if obj_agreement == disagreed then return false    end
    
        if obj_agreement == agreed_exclusive or
          self.gulag:get_non_exclusive_population() < self.gulag.capacity_non_exclusive
        then
            local community, is_stalker = self:get_obj_community( obj )
    
            local smart_level_group = self:get_level_name()
            local npc_level_group = alife():level_name(game_graph():vertex(obj.m_game_vertex_id):level_id())
    
            if level_groups[smart_level_group] ~= level_groups[npc_level_group] then
                return false
            end
    
            if self.accepted_communities and not self.accepted_communities[community] then
                return false
            end
    
            if obj_agreement ~= agreed_exclusive and not self:check_preset( community, obj:rank(), self.gparams.preset_name ) then
                return false
            end
    
            if not xr_gulag.checkNpc( community, is_stalker, self.gparams.type, obj:rank(), obj ) then
                return false
            end
    
            return self.gulag:is_there_any_suitable_job(
                self:fill_npc_info( obj ), obj_agreement == agreed_exclusive )
    
        else return false
        end
    end

    Первая строка - прекрасна сама по себе.
    Следующая проверка - если неписю подходит любой смарт - проверяем ограничение на численность неписей, для которых подходит любой смарт. Если непись явно назначен именно в этот смарт, ЛИБО получил, наконец, разрешение идти в него - ограничение на численность неписей, которым подходит любой смарт, не проверяется. С точки зрения банальной эрудиции следует предположить, что все остальные проверки - действуют.

    Не помню, был ли в оригинальном ТЧ квест на принести уникальный пистолет от командира блокпоста, или он остался от билдов, но именно по этой причине выполнить его крайне проблематично как минимум уже в АМК. Ибо командир блокпоста может быть где угодно, но только не на блокпосту. Ибо банально не проходит все остальные проверки.


    А вот это - к вопросу о бандитах/наемниках/армейцев/монстрах в баре.

    local smart_level_group = self:get_level_name()
    local npc_level_group = alife():level_name(game_graph():vertex(obj.m_game_vertex_id):level_id())
    
    if level_groups[smart_level_group] ~= level_groups[npc_level_group] then
        return false
    end
    
    В начале скриптика присутствует такая табличка:
    local level_groups = {
        l01_escape = "group1",
        l02_garbage = "group1",
        l03_agroprom = "group1",
        l03u_agr_underground = "group1",
        l04_darkvalley = "group1",
        l04u_labx18 = "group1",
        l05_bar = "group1",
        l06_rostok = "group1",
        l07_military = "group1",
        l08_yantar = "group1",
        l08u_brainlab = "group1",
        l10_radar = "group1",
        l10u_bunker = "group1",
        l11_pripyat = "group1",
        l12_stancia = "group3",
        l12u_sarcofag = "group3",
        l12u_control_monolith = "group3",
        l12_stancia_2 = "group3"
    }


    В модах у нее появился комментарий "чтобы не ходили через бар", впрочем, являющийся, как правило, единственным изменением. Всякое разное же продолжило шастать через бар, материализуясь, как правило, либо у Арни, либо в бункере у Воронина, с результатом слегка предсказуемым.

     

    Как это работает, и что с этим делать?

    В предшествующих текстах, которые все равно никто не прочитал, и читать не будет, уже говорилось, что с момента появления непися/монстра, и далее - периодически, происходит перебор всех, то есть, абсолютно всех смартов на предмет согласия его принять. Какой согласился, и выдал максимальный приоритет - под тот и пойдет. То есть, появился, к примеру, в ТД, а приняли, к примеру, на Янтаре - пойдет на Янтарь. Передвигаются они по вершинкам, из одной в другую, и если такая, которая по пути, окажется, к примеру, в бункере Воронина - монстр/непись появится в бункере Воронина, если мы в этот момент в радиусе онлайна. А если прикрутить еще "оффлайн-боевку" или "офлайн-шмон" - эта "офлайн-боевка" того Воронина (или еще какого Арни) грохнет и без входа того тушканчика в онлайн. Аналогично, если путь будет через базу Свободы - снорки с кровососами будут сыпаться на головы свободовцам.
    Вот чтобы подобного казуса не произошло - либо надо убрать подобные пути, либо не пускать живность с ТД, кордонов и прочих болот ни на Янтарь, ни на Склады ни в прочие места, куда они пойдут через бар.
    То есть, Кордон-x18 должны иметь один ключ, а вот Росток и Янтарь - уже другой.
    Примерно так:

    local level_groups = {
        l01_escape = "1",
        l02_garbage = "1",
        l03_agroprom = "1",
        l03u_agr_underground = "1",
        l04_darkvalley = "1",
        l04u_labx18 = "1",
        l05_bar = "1",
        l06_rostok = "2",
        l07_military = "2",
        l08_yantar = "2",
        l08u_brainlab = "3",
        l10_radar = "2",
        l10u_bunker = "2",
        l11_pripyat = "2",
        l12_stancia = "2",
        l12u_sarcofag = "2",
        l12u_control_monolith = "2",
        l12_stancia_2 = "2"
    }

    Росток-Янтарь оставляем в одной группе с радаром и прочими припятями, потому что тот уголок, где у них остается путь, нам не мешает. Ну и не забыть всякие перещеры с лощинами добавить.

     

    Если мы не хотим, чтобы с конкретной локации кто-то уходил, и не пускать в не чужих - ставим отдельный, уникальный ключ.

    Кстати, на счет "убрать пути" (или их не прописать, или запретить монстрам/неписям ходить по вершинкам с определенным флагом, но разрешить захватываться в смарт на локации, куда пути нет - будет как раз знаменитый вылет по плотям в x16

     


  2. Прозекторская
    Прозекторская

     

     

    какой именно флаг за это отвечает?

    Если у нпс в аллспавне стоит такой флаг

    object_flags = 0xfffffff7

    то аномалии он видеть не будет.


×
×
  • Создать...