<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multitheftauto.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Misyukov</id>
	<title>Multi Theft Auto: Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multitheftauto.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Misyukov"/>
	<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/wiki/Special:Contributions/Misyukov"/>
	<updated>2026-04-08T00:07:34Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=RU/Element_tree&amp;diff=54240</id>
		<title>RU/Element tree</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=RU/Element_tree&amp;diff=54240"/>
		<updated>2018-03-29T15:12:50Z</updated>

		<summary type="html">&lt;p&gt;Misyukov: динамеческую -&amp;gt; динамическую&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Tre.png|frame|Дерево элементов]]&lt;br /&gt;
MTA использует так называемое ''дерево элементов'' для хранения всех элементов, которые существуют на сервере и клиенте. Это напрямую связано с набором запущенных [[RU/Resources|ресурсов]] и XML-устройством их map-файлов, хотя все можно изменить скриптово прямо во время их работы.&lt;br /&gt;
&lt;br /&gt;
Если вы знакомы с понятием ''деревьев'' в информатике, понять это не составит труда. Если же нет, представьте себе это в качестве генеалогического древа, за тем лишь исключением, что все имеют только по одному родителю. Каждый [[RU/Element|элемент]] имеет ''родительский'' элемент.&lt;br /&gt;
&lt;br /&gt;
Все элементы, создаваемые внутри скриптов или через .map-файлы, являются дочерними элементами ресурса, которому они принадлежат. Таким образом, большинство элементов (за исключением [[client]]'ов) существуют только внутри ресурсов и уничтожаются сразу по остановке ресурса-родителя.&lt;br /&gt;
&lt;br /&gt;
==Элементы дерева==&lt;br /&gt;
* '''root''': (корень) Он располагается в самом начале дерева - все элементы являются по отношении к этому элементу дочерними (или потомками).&lt;br /&gt;
* '''resource''': Это различные дочерние элементы root элемента - по одному на каждый ''запущенный'' ресурс. Этот элемент называется ''resource root'' (корень ресурса). Его ID содержит имя ресурса.&lt;br /&gt;
* '''map''': Каждый элемент ресурса содержит как минимум один map-элемент (карту), представляющий либо &amp;quot;.map&amp;quot;-файл ресурса, либо содержащий элементы, созданные скриптами (это называется ''динамической'' картой). Их ID содержат названия файлов-карт или ''dynamic'' в случае, если карта динамическая.&lt;br /&gt;
** Файлы карт могут содержать некоторые другие [[RU/Element|элементы]] с таким же успехом как и неограниченное количество своих собственных.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
Это пример серверного дерева, выведенного в XML от запущенного сервера.&lt;br /&gt;
''Пожалуйста, заметьте, что в некоторых местах для целей обзора оно укорочено.''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;root&amp;gt;&lt;br /&gt;
	&amp;lt;console/&amp;gt;&lt;br /&gt;
	&amp;lt;player dontRespawn=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;player dontRespawn=&amp;quot;false&amp;quot; lastSpawnarea=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;resource id=&amp;quot;resourcebrowser&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;resource id=&amp;quot;ajax&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;resource id=&amp;quot;resourcemanager&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;resource id=&amp;quot;spawnmanager&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;resource id=&amp;quot;mapmanager&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;resource id=&amp;quot;runcode&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;resource id=&amp;quot;fr&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;map id=&amp;quot;dynamic&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;vehicle/&amp;gt;&lt;br /&gt;
		&amp;lt;/map&amp;gt;&lt;br /&gt;
	&amp;lt;/resource&amp;gt;&lt;br /&gt;
	&amp;lt;resource id=&amp;quot;elementbrowser&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;resource id=&amp;quot;assault&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;map id=&amp;quot;dynamic&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;team/&amp;gt;&lt;br /&gt;
			&amp;lt;team/&amp;gt;&lt;br /&gt;
			&amp;lt;blip/&amp;gt;&lt;br /&gt;
			&amp;lt;marker/&amp;gt;&lt;br /&gt;
			&amp;lt;colshape/&amp;gt;&lt;br /&gt;
			&amp;lt;blip/&amp;gt;&lt;br /&gt;
			&amp;lt;blip/&amp;gt;&lt;br /&gt;
		&amp;lt;/map&amp;gt;&lt;br /&gt;
	&amp;lt;/resource&amp;gt;&lt;br /&gt;
	&amp;lt;resource id=&amp;quot;as-farm&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;map id=&amp;quot;dynamic&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;map id=&amp;quot;as-farm.map&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;spawngroup req=&amp;quot;&amp;quot; type=&amp;quot;attacker&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;spawnarea posY=&amp;quot;-8.3976354598999&amp;quot; posX=&amp;quot;20.182683944702&amp;quot; skins=&amp;quot;9&amp;quot; ... /&amp;gt;&lt;br /&gt;
			&amp;lt;/spawngroup&amp;gt;&lt;br /&gt;
			&amp;lt;spawngroup req=&amp;quot;&amp;quot; type=&amp;quot;attacker&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;spawnarea posY=&amp;quot;32.166355133057&amp;quot; posX=&amp;quot;-46.90763092041&amp;quot; skins=&amp;quot;9&amp;quot; ... /&amp;gt;&lt;br /&gt;
			&amp;lt;/spawngroup&amp;gt;&lt;br /&gt;
			&amp;lt;spawngroup req=&amp;quot;&amp;quot; type=&amp;quot;attacker&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;spawnarea posY=&amp;quot;35.214984893799&amp;quot; posX=&amp;quot;-33.486911773682&amp;quot; skins=&amp;quot;9&amp;quot; ... /&amp;gt;&lt;br /&gt;
			&amp;lt;/spawngroup&amp;gt;&lt;br /&gt;
			&amp;lt;spawngroup req=&amp;quot;&amp;quot; type=&amp;quot;attacker&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;spawnarea posY=&amp;quot;35.214984893799&amp;quot; posX=&amp;quot;-33.486911773682&amp;quot; skins=&amp;quot;9&amp;quot; ... /&amp;gt;&lt;br /&gt;
			&amp;lt;/spawngroup&amp;gt;&lt;br /&gt;
			&amp;lt;objective id=&amp;quot;first&amp;quot; type=&amp;quot;checkpoint&amp;quot; description=&amp;quot;Breach into the farm&amp;quot; ... /&amp;gt;&lt;br /&gt;
			&amp;lt;pickup type=&amp;quot;weapon&amp;quot; ... /&amp;gt;&lt;br /&gt;
		&amp;lt;/map&amp;gt;&lt;br /&gt;
	&amp;lt;/resource&amp;gt;&lt;br /&gt;
&amp;lt;/root&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Пояснение===&lt;br /&gt;
Это дерево состоит из некоторого количество элементов resource root, [[Element/Console|консоли сервера]] и двух элементов [[player]], которые являются непосредственными &amp;quot;детьми&amp;quot; элемета '''root'''. Все эти ресурсы в качестве дочернего элемента имеют ''динамическую карту'' (для большинства их она просто не показана). Она содержит элементы, динамически создаваемые ее ресурсом посредством скриптов, например, [[vehicle]] (транспорт). Если у ресурса еще есть и map-файл, то он тоже будет являться дочерним элементом и будет содержать в себе все элементы из .map-файла.&lt;br /&gt;
&lt;br /&gt;
Давайте присмотримся к ресурсу '''assault''': Он содержит одну единственную ''динамическую'' карту, которая в качестве дочерних элементов имеет 2 команды, 3 радарных метки, 1 маркер и 1 колшейп (colshape). Они и являются элементами, создаваемыми скриптово, например, маркер, колшейп и одна из меток возможно используются для обозначения цели.&lt;br /&gt;
&lt;br /&gt;
Функция ресурса ''as-farm'', напротив, быть картой мода '''assault'''. Динамическая карта пуста (хотя она тоже могла бы содержать элементы при условии существования скрипта), но имеется map-файл, названный 'as-farm.map', содержащий некоторое количество элементов. Среди них большинство - собственные (такие как spawngroup, spawnarea, objective), но есть также немного элементов, создаваемых MTA автоматически после загрузки карты (pickup). В скобках после типа элемента вы можете видеть данные, которые он содержит. Они идентичны атрибутам внутри этих самых элементов в .map-файле, а в то же время вы можете устанавливать и получать данные любых других элементов (напр. типа &amp;quot;player&amp;quot;, т.е. игроков) через [[setElementData]] и [[getElementData]].&lt;br /&gt;
&lt;br /&gt;
==Практическое применение==&lt;br /&gt;
Элементы могут иметь сколько угодно дочерних элементов. Это никоим образом напрямую не влияет на карту, но становится очень полезным в сочетании с системой скриптинга.&lt;br /&gt;
&lt;br /&gt;
===Присвоение элементам данных===&lt;br /&gt;
При вызове функции set... по отношении к узлу дерева элементов, она затронет каждый элемент внутри него (на котором она сработает).&lt;br /&gt;
&lt;br /&gt;
Таким образом, следующий код установит размер всех маркеров (единственный тип элементов, с которым функция setMarkerSize может работать), находящихся ниже root элемента на ''2.5''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
setMarkerSize ( getRootElement(), 2.5 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То же самое можно сделать с любым элементом, это не ограничено root элементом.&lt;br /&gt;
&lt;br /&gt;
===Map manager===&lt;br /&gt;
[[#Пример|Пример выше]] демонстрирует, как [[RU/Map manager|Map manager]] использует различные ресурсы. Ресурс 'assault' - мод, который управляет происходящим на сервере используя скрипты и, следовательно, посредством динамического создания элементов в дереве. При старте ресурса-карты мод получает [[RU:Resource|указатель ресурса]], ссылающийся на запустившийся ресурс - в данном случае это ''as-farm'' - из него вы можете запросить и сохранить элемент resource root. Используя данный элемент вкупе с такими функциями, как [[getElementsByType]], [[getElementData]] и различными другими, вы можете получить доступ к любой информации, загруженной в дерево через скрипты ресура-мода из файла 'as-farm.map'.&lt;br /&gt;
&lt;br /&gt;
Другая вещь, связанная с деревом элементов, которой следует уделить внимание - тот факт, что при смене карты вам не нужно удалять какие-либо созданные вами внутри ресурса-карты элементы, но вам '''нужно''' удалять элементы, созданные внутри ресурса-мода, '''если''' они специфичны карте (что возможно и будет применимо к таким, которые вы создали, базируясь на информации, прочитанной из .map-файлов ресурса-карты).&lt;br /&gt;
&lt;br /&gt;
==Element browser==&lt;br /&gt;
Вы можете запустить ресурс ''elementbrowser'', чтобы увидеть, как дерево элементов вашего сервера выглядит в данный момент. Просто запустите ресурс, в браузере зайдите на веб-страницу вашего сервера и выберите опцию ''Element browser'' в боковой панели (на данный момент только в firefox).&lt;br /&gt;
&lt;br /&gt;
[[Category:Понятия скриптинга]]&lt;br /&gt;
[[en:Element tree]]&lt;br /&gt;
[[es:Árbol de elementos]]&lt;/div&gt;</summary>
		<author><name>Misyukov</name></author>
	</entry>
</feed>