Arisu Posted February 11, 2011 Share Posted February 11, 2011 есть дерево элементов (примерно начеркал) (речь идет не об 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
MX_Master Posted February 11, 2011 Share Posted February 11, 2011 серверный: local list = getElementsByType( "vehicle", getResourceRootElement() ) так получим список всех тачек текущего ресурса в виде таблицы. Далее можешь сравнить ИД тачки с теми, что в списке. Но если много тачек, такие сравнения будут отнимать у серва какое-то время. как второй вариант можно при старте ресурса найти таким образом все тачки этого ресурса и добавить в их данные пометку, которая бы обозначала, что эта тачка из такого ресурса. Допустим, при старте мода мы нашли список всех наших тачек. Потом циклом пройдемся по нему и каждой тачке добавим новый пункт в данных setElementData( vehicle, "owner", "название ресурса", false ) потом, когда нужно, просто будет проверять if getElementData( vehicle, "owner" ) == "название ресурса" then -- какие-то действия end При создании тачки в ресурсе, ей тоже нужно делать такую пометку (setElementData). Link to comment
Antibird Posted February 11, 2011 Share Posted February 11, 2011 Можно не присваивать пометку всем тачкам, а присвоить её лишь корню ресурса. Третий (опциональный) параметр getElementData() таким образом сделает за нас всю работу, ибо он сам ищет дату у parent'a, если не находит у child'a. По идее, должно быть верно. Link to comment
lil Toady Posted February 11, 2011 Share Posted February 11, 2011 По вертикали в цикле берем каждого следующего родителя и сравниваем с нужным, что-то типо этого: 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
Arisu Posted February 11, 2011 Author Share Posted February 11, 2011 Это готовая функция, или ее допиливать надо? В принципе, на взгляд такую и надо. Спасибо) Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now