Jump to content

хз точно как описать. Поиск элемента в дереве?


Arisu

Recommended Posts

есть дерево элементов (примерно начеркал) (речь идет не об xml-файле, а о дереве элементов в мта, то, что можно увидеть через ресурс elementbrowser)

<root> 
  <gamemode> 
    <pickup> 
      <marker type=corona /> 
    </pickup 
  </gamemode> 
  <marker type=cylinder /> 
</root> 

как можно определить, например, что gamemode является родителем (parent), прямо или косвенно, для marker type=corona и НЕ является родителем для marker type=cylinder? есть ли для этого функция?

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

Link to comment

серверный:

local list = getElementsByType( "vehicle", getResourceRootElement() ) 

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

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

setElementData( vehicle, "owner", "название ресурса", false ) 

потом, когда нужно, просто будет проверять

if getElementData( vehicle, "owner" ) == "название ресурса" then  
    -- какие-то действия  
end 

При создании тачки в ресурсе, ей тоже нужно делать такую пометку (setElementData).

Link to comment

Можно не присваивать пометку всем тачкам, а присвоить её лишь корню ресурса.

Третий (опциональный) параметр getElementData() таким образом сделает за нас всю работу, ибо он сам ищет дату у parent'a, если не находит у child'a.

По идее, должно быть верно.

Link to comment

По вертикали в цикле берем каждого следующего родителя и сравниваем с нужным, что-то типо этого:

  
function isParent ( element, parent ) 
  element = getElementParent ( element ) 
  while ( element ~= getRootElement() ) do 
    if ( element == parent ) then 
      return true 
    end 
    element = getElementParent ( element ) 
  end 
  return false 
end 
  

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...