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

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

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

  1. Dennis Chikin

    Dennis Chikin Модератор

    238
    74
    3 мар 2019
    Мужской
    Код:
    local t1 = { --{ минимальный game_vertexes, максимальный game_vertexes, максимальный level_vertexes }
    [1]={0,251,595499},
    [2]={252,415,382663},
    [3]={416,702,437421},
    [4]={703,810,4932},
    [5]={811,1108,390125},
    [6]={1109,1167,7581},
    [7]={1168,1307,99539},
    [8]={1308,1437,67713},
    [9]={1438,1528,141471},
    [10]={1529,1544,8008},
    [11]={1545,1861,418268},
    [13]={1862,2116,227189},
    [14]={2117,2272,261219},
    [15]={2273,2401,477923},
    [16]={2402,2466,10672},
    [17]={2467,2516,3982},
    [19]={2517,2660,264577},
    [20]={2661,2791,8821},
    [22]={2792,2861,1049687},
    [23]={2862,2880,32341},
    [24]={2881,2885,377572},
    [25]={2886,2908,1790762},
    [26]={2909,2987,172637},
    [27]={2988,3027,61524},
    [28]={3028,3075,7865},
    [29]={3076,3152,752337},
    [30]={3153,3223,7776},
    [31]={3224,3323,166431},
    [32]={3324,3336,49127},
    [33]={3337,3581,528961},
    [34]={3582,3659,551769},
    [35]={3660,3699,1851251},
    [36]={3700,3747,1486320},
    [37]={3748,3770,487255},
    [38]={3771,3829,41001},
    [39]={3830,3850,6781},
    [40]={3851,4153,15294},
    [41]={4154,4475,1205118}
    }
    
    Код:
    local t2 = t1[ alife():level_id() ]
    local gg = game_graph()
    local pos, gvid, dist
    for lvid = 1, t2[3] do
      local min_dist = 100000000
      pos = level.vertex_position( lvid )
      for a = t2[1], t2[2] do
        dist = gg:vertex( a ):level_point():distance_to_sqr( pos )
        if dist < min_dist  then min_dist, gvid = dist, a end
      end
      -- здесь будет lvid и соответствующий ему gvid. Возможно. Кроме особо тяжких случаев.
    end
     
    Последнее редактирование: 4 окт 2019
    DrDron нравится это.
  2. Баба Яга

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

    137
    19
    13 апр 2019
    ..\gamedata\scripts\test.lua:1368:_attempt_to_call_method_'lebel_id'_(a_nil_value)
    думал опечатка в lebel - написал level теперь так
    ..\gamedata\scripts\test.lua:1368:_attempt_to_index_global_'t1'_(a_nil_value)

    1368 строка это строка из кода который ты дал, вот эта
    local t2 = t1[ alife():level_id() ]

    :cray:
     
  3. Dennis Chikin

    Dennis Chikin Модератор

    238
    74
    3 мар 2019
    Мужской
    level_id(), да.
    Таблицу и код скопировал прямо отсюда, исправив опечатку. Ничего не выдает, поскольку и не должен. Ну, можно сделать большой лог с принадлежностью всех без малого полутора миллионов вертексов Юпитера (36), например...
     
  4. Баба Яга

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

    137
    19
    13 апр 2019
    Можешь немного пояснить по коду который ты дал,
    вот строка из моей таблицы
    t = { 30822 = { -120.00, -18.00, -250.00 } }
    в которой
    lvid - это level_vertex_id
    vpos - это level.vertex_position(lvid)
    t = { lvid = { vpos.x, vpos.y, vpos.z } }
    хорошо, допусти t1 это моя таблица t, вот твой код
    Код:
    local t2 = t1[ alife():level_id() ]
    local gg = game_graph()
    local pos, gvid, dist
    for lvid = 1, t2[3] do -- что такое t2[3] ?
      local min_dist = 100000000
      pos = level.vertex_position( i ) -- откуда берётся i ?
      for a = t2[1], t2[2] do -- откуда взялось t[2] ?
      dist = gg:vertex( a ):level_point():distance_to_sqr( pos )
      if dist < min_dist  then min_dist, gvid = dist, a end
      end
      -- здесь будет lvid и соответствующий ему gvid. Возможно. Кроме особо тяжких случаев.
    end
    1) local t2 = t1[ alife():level_id() ] -- вернёт nill потому что alife():level_id() возвращает для Кордона 1, а у меня нет в таблице вертекса 1, у меня там всего 32 вертекса по кругу которые возле ГГ
    2) for lvid = 1, t2[3] do -- что такое t2[3] ? у меня нет такой ячейки в таблице
    pos = level.vertex_position( i ) -- откуда берётся "i" ? Может ты имел в виду -> pos = level.vertex_position( lvid ) ?
    3) если ты скопировал вот эту таблицу
    t = { lvid = { vpos.x, vpos.y, vpos.z }, { game_vertex } }
    то это та таблица которую я хочу получить, у меня нет game_vertex-ов
    вот мой код поиска верексов и занесение их в таблицу
    Код:
    local tbl_vrtx = {}
    
    
    -- шукаем все вертексов по заданному радиусу вокруг ГГ и заносим в таблицу вида -> 32087 = { 12.00, 18.00, -120.00 }
    function searchAllVertexForGG( col_vertex_on_location, radius )
      local pos = db.actor:position()
      local vpos
      local n = 0
      for i = 1, col_vertex_on_location do    -- для Кордона
        vpos = level.vertex_position(i)
        if vpos and vpos:distance_to_sqr(pos) < radius then
          n = n + 1
          log(i)
          tbl_vrtx[i] = { vpos.x, vpos.y, vpos.z } -- заносим в таблицу
        end
      end
      log("found %s vertexes", n)
    end
    
    -- searchAllVertexForGG( кол-во клеток на локации (number), радиус вокруг ГГ (number));
    -- 595499 - кол-во вертексов на Кордоне
    -- 5 - радиус вокруг ГГ
    searchAllVertexForGG( 595499, 5 )

     
  5. Dennis Chikin

    Dennis Chikin Модератор

    238
    74
    3 мар 2019
    Мужской
    В комментариях же в таблице написано - минимальный и максимальный game vertex и максимальный level vertex для каждой локации. получить можно только из СДК, ну или перебор на локации с 1 до 2 миллиарда с проверкой каждого на game_graph():valid_vertex_id( n ) и номер локации, получаемой через game_graph():vertex( n ):level_id()
    максимальный level_vertex - опять же перебором с выводом в лог - какой был последним до вылета - тот и максимальный.
     
  6. Баба Яга

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

    137
    19
    13 апр 2019
    :oops: Та я не увидел таблицу вообще ... Сейчас перечитал тему - уже увидел.
    Где взял табличку? :good:

    Вот тут в коде тоже ошибка ->
    Код:
    pos = level.vertex_position( i )
    должно быть, видимо ->
    Код:
    pos = level.vertex_position( lvid )
    или нет?

    Не только, можно ещё вот этой прогой посмотреть, правда только lvid - GraphViewer.

    2019-10-04_050306.jpg

    Увы, я тоже так думал, вот третьи сутки копаю - накопал много интересного, например то, что перебрать lvid не получится, будет вылет, а вот если по 100000 - 200000 с паузами - то можно, движок больше 300000 за раз не хавает - падает.
    А ещё накопал, что на локациях lvid-ы - дублируются, просмотри для интереса, например 580000 и 0 = равны по координатам :yes: Да ещё много чего накопал, но, думаю ты и так это знал.
    Короче, докопался я до того, что мне уже не нужен ни перебор ни gvid-ы уровня. За двое суток смог добиться того что мой скрипт отрабатывает почти мгновенно, а два дня назад было 12 секунд!!! Пилю инструмент дальше, а всё началось с укрытий от выброса... :)
    Ещё конечно, не готово - но кое-что есть, то что я и хотел, чтобы AI сетку было видно визуально, так намного проще назначать неписям укрытия. Это я так, просто делюсь информацией. Вот даже такую штуку увидел пока тестировал -> (ID кончились :8O:)

    FATAL ERROR

    [error]Expression : m_available_count
    [error]Function : CID_Generator<unsigned int,unsigned char,unsigned short,unsigned char,unsigned short,0,65534,256,65535,0>::tfGetID
    [error]File : e:\stalker\sources\trunk\xr_3da\xrgame\id_generator.h
    [error]Line : 92
    [error]Description : Not enough IDs :confused::confused::confused:

    А вот и наброски того что я хотел, если закончу писАть скрипт, то дело с укрытиями пойдёт намного быстрее
    [​IMG]

    Инструмент с интерактивным отображением сетки - делаю в первую очередь для себя, чтобы упростить процесс создания нормальных укрытий от выброса, так что критика, советы и рекомендации - пригодятся и принимаются. :drinks::stalkir:

     
    Последнее редактирование: 4 окт 2019
    DrDron и basil нравится это.
  7. Dennis Chikin

    Dennis Chikin Модератор

    238
    74
    3 мар 2019
    Мужской
    pos = level.vertex_position( lvid ) - да, так должно быть. Правил прямо здесь, и не увидел.
    По поводу переборов всего и вся - ну так обычно никто и не перебирает. Реальные задачи более конкретны, так что максимум - сотня итераций с сотней проверок в заранее известных границах.
     
  8. seruva

    seruva Новичок

    10
    0
    15 июл 2013
    Мужской
    Здравствуйте. Ведутся ли сейчас какие-либо работы по деетической соли, сделано ли все что намечалось, будет ли у диетсоли следующий патч ?
     
  9. Dennis Chikin

    Dennis Chikin Модератор

    238
    74
    3 мар 2019
    Мужской
    В процессе. Там еще делать и делать.
     
  10. Dennis Chikin

    Dennis Chikin Модератор

    238
    74
    3 мар 2019
    Мужской
    Требуется помощь зала.

    x16, доходим до финального рычага (по дороге можно всех врагов забить, рубильники подергать, кроме последнего), сохраняемся. Заходим в коридор перед дверью с контриком, тоже сохраняемся. А потом попеременно грузимся с этих сохранок/опционально делаем сохранку в районе одного из пультов на нижних этажах, с нее тоже грузимся. В общем, в разнобой со всех.
    Будет ли вылет? Примерно с десяток-другой итераций надо.
     

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