1. Для общения на форуме, в чате или личной переписке наличие аватара ОБЯЗАТЕЛЬНО!

НС2016 ("диетическая" ветка)

Тема в разделе "Диетическая Солянка 2016", создана пользователем Dennis Chikin, 4 мар 2019.

  1. Баба Яга

    Баба Яга Ветеран

    137
    19
    13 апр 2019
    Блин, и как быть? Как прописать тогда неписю путь к центру укрытия?
    НС2016 ("диетическая" ветка)
    P.S. Блин, да быть такого не может, чтобы нельзя было скриптово прописать НПСу путь от точки (входа) до точки укрытия (центра), или нельзя?... Неписи же находят сами двери.
     
    Последнее редактирование: 25 сен 2019
  2. Dennis Chikin

    Dennis Chikin Модератор

    253
    78
    3 мар 2019
    Мужской
    Неписи ходят по сетке. По связям между вертексами. Если связи нет - не ходят. Никак.
    добавил проверку доступности центра - если центр недостпуен, вход тоже должен игнорироваться.
    blowout_scheme.script

    Если не поможет - просто убирать таким убежищам центр и коммунити, оставляя доступными только актору.
     
  3. Баба Яга

    Баба Яга Ветеран

    137
    19
    13 апр 2019
    Ща потестю.
    P.S. Тоже самое как на моём предыдущем скриншёте, зашёл в первые двери и стал возле стенки ВНЕ укрытия, но получается. он решил что CENTER - доступен, значит он может туда зайти? Почему не заходит? Но теперь ещё и солдафон прибежал... ппц... А тебе не проще с нуля написать нормальный скрипт чем переделывать?
    P.S.S. Заспавнил в центр укрытия сталков - они спокойно нашли выход из дома и пошли бродить по деревне - так почему-же они не могут зайти в центр если могут выйти? Значит клетки связаны и всё ок? Выходит - что-то в скрипте? Я хз короче. :mda:

    P.S.S.S. Рылся в скрипте, предположительно бочина тут:
    но я не знаю как исправить...
    Код:
    function action_runtohide:execute()
        action_base.execute( self )
        local npc = self.object
        local blowout = amk.load_variable( "blowout", -1 )
        if self.st.hide == nil then return end
    
        if self.st.lvid and self.st.lvid ~= self.st.hide.center
          and level.vertex_position( self.st.lvid ):distance_to( npc:position() ) < 3 then
            self.st.lvid = self.st.hide.center
            utils.send_to_nearest_accessible_vertex( npc, self.st.lvid )
        end
    
        if ( self.st.need_run or self.sprinttime < time_global() or blowout >= 3 ) and self.nosprint
          and self.ttchst < time_global() then
            self.ttchst = time_global() + 2000
            state_mgr.set_state( npc, "sprint" )
            self.nosprint = false
        elseif npc:best_enemy() and npc:see( npc:best_enemy() ) and self.ttchst < time_global() then
            self.ttchst=time_global() + 4000
            state_mgr.set_state( npc, "assault_fire", nil, nil, { look_object = npc:best_enemy() } )
            self.nosprint = true
        end
    
        if self.kicktime < time_global() then
            self.kicktime=time_global() + 2000
            local vid = level.vertex_in_direction(
                npc:level_vertex_id(), level.vertex_position( self.st.lvid ):sub( npc:position() ), 30 )
            if level.vertex_position( vid ):distance_to( npc:position() ) > 29 then
                utils.send_to_nearest_accessible_vertex( npc, vid )
            else utils.send_to_nearest_accessible_vertex( npc, self.st.lvid )
            end
        end
    end
    Добавил в 2-ух местах -> and v.community == comm, теперь никто кроме сталков не прибегает в укрытия для сталков, там проверка какая-то странная, mindist = 1000000, а расстояние до укрытия всегда будет меньше. Вот эта проверка ничего не решает на самом деле выходит -> if ( ( dist + dist_factor ) < mindist ) and npc:accessible( c ) а вот если в неё добавить ещё и -> and v.community == comm -> тогда решает. Короче посмотри, можно ли так вообще, я пометил места комментом -- ТУТ
    Код:
    function nearest_hide( npc )
        local mindist = 1000000
        local hide, dist, lvid, c
        local comm = npc:character_community()
        local pos = npc:position()
    
        local dist_factor = 0
    
        for i, v in ipairs( t_hides ) do
            c = v.center
            if c then
                if v.community == comm then dist_factor = 0
                else dist_factor = 120
                end
    
                dist = level.vertex_position( c ):distance_to( pos )
          
          
          local fuckmyworld
          if dist >= 0 then
            fuckmyworld = tostring(dist)
          else
            fuckmyworld = tostring(type(dist))
          end
          get_console():execute("load ~>>>>>> dist = ".. fuckmyworld )
          
                
          if ( ( dist + dist_factor ) < mindist ) and npc:accessible( c ) and v.community == comm then -- ТУТ
                    mindist = dist
                    lvid = c
                    hide = v
                    log( "info", "nearest_hide, lvid: %s (%s)", lvid, npc:name() )
                end
            
                for ii, vv in ipairs( v.entrances ) do
                    dist = level.vertex_position( vv ):distance_to( pos )
                    if ( ( dist + dist_factor ) < mindist ) and npc:accessible( vv )
                      and npc:accessible( c ) and v.community == comm then -- ТУТ
                        mindist = dist
                        lvid = vv
                        log( "info", "nearest_hide, entrance: %s:%s (%s)", lvid, c, npc:name() )
                        hide = v    -- на случай, если укрытие дальше
                    end            -- уже известного, но вход ближе
                end
            end
        end
        return hide, lvid, mindist
    end
     
    Последнее редактирование: 26 сен 2019
    Black Wolf нравится это.
  4. Black Wolf

    Black Wolf Сталкер

    49
    3
    4 мар 2019
    Мужской
    Пройдя "Диету" до конца я так и не понял что хотел донести автор до игрока ,но пройдя ОП я понимаю что мы все взрослеем ,многое понятно из того что мы мучались и двигались к цели ,ценой своих нервов и ведь в конце сам стрелок своим диалогом поясняет что он устал от зоны и хочет обычной семейной жизни в дали стрельбищ .Да можно сказать что это всего лишь игра но игра которая дает понять что виртуальный мир и зона будет всегда а реальная жизнь заканчивается.Итог посыла понятен мол хватит шариться по зоне ибо ты все заработал и всем все доказал ,пора возвращаться в реальность.
    Так я заканчиваю свой путь в модо-строе и становлюсь наблюдателем и пользователем (игроком обычным) всех модов по сталкеру.

    By Arhara
    Думаю он так бы и сказал

    UPD:Затон дерьмо
     

    Вложения:

    Последнее редактирование: 27 сен 2019
  5. Dennis Chikin

    Dennis Chikin Модератор

    253
    78
    3 мар 2019
    Мужской
    А если выделенных убежищ на локации совсем нет? Просто надо подобрать dist_factor =, чтобы в чужие не лезли при наличии своих. 120, очевидно, для патрульных не хватило. Ну, пробуем 200.

    mindist = 1000000 в начале - да, заведомо больше, чем может быть вообще. Потом ищем то, что ближе.
    Почему не идут внутрь - буду смотреть.
     
  6. Баба Яга

    Баба Яга Ветеран

    137
    19
    13 апр 2019
    Кажется я таки разобрался в чём дело, 4 дня воюю с этим делом, и с моими минимальными знаниями в скриптах сталкера - тяжеловато без помощи со стороны...
    Денис, на скриншёте ниже я нарисовал причину. Подробнее:
    вот есть у нас клетка - она же level_vertex_id, дело в том, что её размеры могут быть 3х3 метра, так вот, когда НПС бежит в укрытие то в скрипте стоит условие, что если он достиг КРАЯ клетки с любой стороны - то всё, он дальше не идёт, а останавливается на этом краю клетки. Вот и вся причина. Но ведь у клетки есть координаты углов? Их как-то можно узнать? Нужно отправлять НПС в заданную точку ВНУТРИ клетки и всё. Это где-то надо подправить в скрипте, но я не знаю где и не знаю вообще как это делается. Предположительно можно сделать вот как: в таблице укрытий есть параметр center, так вот это не центр укрытия как я думал, а просто ID клетки, и в некоторых проблемных укрытиях, там где клетка выходит за стены дома например, добавить параметр типа POS_NPC - позицию нпс внутри клетки, а в схеме добавить условие, типа, если есть в таблице параметр POS_NPC - то отправляем нпс не просто к краю клетки а по заданным координатам, если нету в таблице такого параметра, то всё как и раньше было. Вот например, в погребе, там маленькие клеточки, и для него не нужно новый параметр, а вот в домах в деревне, есть клетки на весь дом и в них входит несколько комнат и веранда. Денис, в любом случае, если не будешь это делать - это твоё дело, но помоги мне по возможности:
    1) как узнать координаты углов клетки?
    2) как отправить нпс по заданным координатам внутри клетки?
    2019-09-28_191801.jpg
     
  7. Dennis Chikin

    Dennis Chikin Модератор

    253
    78
    3 мар 2019
    Мужской
    Нет вертексов 3x3. Все - 0.7

    Есть места БЕЗ вертексов. Тогда попытка снять координаты будет показывать какой-нибудь "наиболее подходящий".
    Ставим test_tools, из загруженной игры -> меню, f9, и смотрим, как меняются цифирки. Если не меняется - значит, здесь нету, ну и пытаемся нащупать границы.
    Либо, опять же, через СДК.

    Но, блин, я не знаю, как с ним бороться, чтоб не падал по каждому чиху.
     
  8. Баба Яга

    Баба Яга Ветеран

    137
    19
    13 апр 2019
    Погоди, получается что АИ сетка есть, а вертексов на ней не поставили? Я правильно понял? :( Трындец...
    Поможешь с СДК? Мне бы ссылок почитать поучиться, знаешь где? Я бы порасставлял вертексы где надо, или может я вообще не то пишу? Я уже запутался совсем, что такое нода, сетка, клетка. вертекс - как это всё связано междк собой?...
    А какой СДК надо для ТЧ? 4-ый?
     
  9. Dennis Chikin

    Dennis Chikin Модератор

    253
    78
    3 мар 2019
    Мужской
    Это все к Базилю. Он на этом псевдособаку съел, и псисобакой закусил.
    Нода-клетка-вертекс - одно и тоже. Сетка - совокупность этих самых клеток. И, да, в 146% модов на 146% локаций сетка с дырками. Во-первых, так физические препятствия для монстров/неписей организуют, чтоб не ходили через стены/столбы/деревья, а во-вторых, в большинстве тех же помещений они нафиг не нужны, ибо нечего неписям там делать.
     
    Последнее редактирование: 28 сен 2019
  10. Dennis Chikin

    Dennis Chikin Модератор

    253
    78
    3 мар 2019
    Мужской
    Не, нормального непися "дефектором" не назовут...
    Мало того, что он на анимациях вис, мало того, что логика глючная, так он еще и вылетает при выбросе, если выбрался с Агропрома... Мда...

    Вообще не там.
    Снайпер с блокпоста бегает в деревню от выброса, потому что единственная разрешенная ему точка 81734 для него недоступна. Не может туда путь найти.
     
    Последнее редактирование модератором: 29 сен 2019

Поделиться этой страницей