RU/Element tree: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
{{translate}}
{{translate}}
В MTA используется так называемое ''Дерево элементов'', которое содержит все элементы, расположенные на сервере и клиенте. ИThis is directly related to the set of running [[resources]] and their map files' XML layout, although it can be changed at run-time by scripts.
В MTA используется так называемое ''Дерево элементов'', которое содержит все элементы, расположенные на сервере и клиенте. Это непосредственно связано с расположением работающих [[ресурсов]] и XML файлов карт, хотя может быть изменено во время работы с помощью скриптов.


Если вы знакомы с компьютерным понятием ''Дерево''(ветка, куст и т.д.), то вам будет легче разобраться. Если вы не понимаете, о чем речь, то ''Дерево элементов'' можно представить как ''Семейное дерево'' - в нём каждый человек имеет родителя. Так же и здесь. Каждый [[элемент]] имеет своего ''родителя''.
Если вы знакомы с компьютерным понятием ''Дерево''(ветка, куст и т.д.), то вам будет легче разобраться. Если вы не понимаете, о чем речь, то ''Дерево элементов'' можно представить как ''Семейное дерево'' - в нём каждый человек имеет родителя. Так же и здесь. Каждый [[элемент]](в дальнейшем потомок) имеет своего ''родителя''.


Все элементы, которые созданы внутри скриптов или файлов карт, являются потомками ресурса, которому они пренадлежат. По этому, большинство элементов (за исключением [[клиент]]ских) существуют только во время работы ресурсов и перестают работать при остановке этих ресурсов.
Все элементы, которые созданы внутри скриптов или файлов карт, являются потомками ресурса, которому они принадлежат. По этому, большинство элементов (за исключением [[клиент]]ских) существуют только во время работы ресурсов и перестают работать при остановке этих ресурсов.


==Дерево элементов==
==Дерево элементов==
* '''root'''(корень): Это самый главный начальный элемент - корень. Все элементы - потомки этого элемента.
* '''root'''(корень): Это самый главный начальный элемент - корень. Все элементы - потомки этого элемента.
* '''resource'''(ресурсы): Это прямой потомок корня, с одним для каждого запущенным ресурсом. Его так же можно назвать ''корень ресурсов''. Its ID holds the name of the resource.
* '''resource'''(ресурсы): Это прямой потомок корня, с одним для каждого запущенным ресурсом(ресурсов может быть множество). Его так же можно назвать ''корень ресурса''. Его ID номер - это название ресурса.
* '''map'''(карта): Каждый элемент ресурса содержит по крайней мере один элемент карты - это так называемые ".map" файлы в ресурсах or the one containing the elements created by scripts (this is called the ''dynamic'' map). Their IDs contain the maps' filenames, or ''dynamic'' for the dynamic map.
* '''map'''(карта): Каждый элемент ресурса может содержать по крайней мере один элемент карты - это так называемые ".map" файлы в ресурсах или же карта может быть создана скриптом - тогда такие карты называются ''динамическая''кими. Их ID номера содержат название карт, или дополнительно ''dynamic'' для динамических карт.
** Файлы карт могут содержать Map files can contain a number of other [[element]]s as well as an unlimited number of custom elements.
** Файлы карт могут содержать различное число [[элемент]ов.


==Пример==
==Пример==

Revision as of 16:47, 17 May 2011

Warning.png This page requires local translation. If page will remain not translated in reasonable period of time it would be deleted.
After translating the page completely, please remove the ‎{{translate}}‎ tag from the page.

В MTA используется так называемое Дерево элементов, которое содержит все элементы, расположенные на сервере и клиенте. Это непосредственно связано с расположением работающих ресурсов и XML файлов карт, хотя может быть изменено во время работы с помощью скриптов.

Если вы знакомы с компьютерным понятием Дерево(ветка, куст и т.д.), то вам будет легче разобраться. Если вы не понимаете, о чем речь, то Дерево элементов можно представить как Семейное дерево - в нём каждый человек имеет родителя. Так же и здесь. Каждый элемент(в дальнейшем потомок) имеет своего родителя.

Все элементы, которые созданы внутри скриптов или файлов карт, являются потомками ресурса, которому они принадлежат. По этому, большинство элементов (за исключением клиентских) существуют только во время работы ресурсов и перестают работать при остановке этих ресурсов.

Дерево элементов

  • root(корень): Это самый главный начальный элемент - корень. Все элементы - потомки этого элемента.
  • resource(ресурсы): Это прямой потомок корня, с одним для каждого запущенным ресурсом(ресурсов может быть множество). Его так же можно назвать корень ресурса. Его ID номер - это название ресурса.
  • map(карта): Каждый элемент ресурса может содержать по крайней мере один элемент карты - это так называемые ".map" файлы в ресурсах или же карта может быть создана скриптом - тогда такие карты называются динамическаякими. Их ID номера содержат название карт, или дополнительно dynamic для динамических карт.
    • Файлы карт могут содержать различное число [[элемент]ов.

Пример

Этот пример для серверной стороны, который делает дамп дерева сервера в XML файл во время его работы. Просим заметить, что в некоторых местах имеются сокращения ради краткости обзора функции.

<root>
	<console/>
	<player dontRespawn="false"/>
	<player dontRespawn="false" lastSpawnarea=""/>
	<resource id="resourcebrowser"/>
	<resource id="ajax"/>
	<resource id="resourcemanager"/>
	<resource id="spawnmanager"/>
	<resource id="mapmanager"/>
	<resource id="runcode"/>
	<resource id="fr">
		<map id="dynamic">
			<vehicle/>
		</map>
	</resource>
	<resource id="elementbrowser"/>
	<resource id="assault">
		<map id="dynamic">
			<team/>
			<team/>
			<blip/>
			<marker/>
			<colshape/>
			<blip/>
			<blip/>
		</map>
	</resource>
	<resource id="as-farm">
		<map id="dynamic"/>
		<map id="as-farm.map">
			<meta>
				<author/>
				<version/>
				<name/>
				<description/>
			</meta>
			<spawngroup req="" type="attacker">
				<spawnarea posY="-8.3976354598999" posX="20.182683944702" skins="9" ... />
			</spawngroup>
			<spawngroup req="" type="attacker">
				<spawnarea posY="32.166355133057" posX="-46.90763092041" skins="9" ... />
			</spawngroup>
			<spawngroup req="" type="attacker">
				<spawnarea posY="35.214984893799" posX="-33.486911773682" skins="9" ... />
			</spawngroup>
			<spawngroup req="" type="attacker">
				<spawnarea posY="35.214984893799" posX="-33.486911773682" skins="9" ... />
			</spawngroup>
			<objective id="first" type="checkpoint" description="Breach into the farm" ... />
			<pickup type="weapon" ... />
		</map>
	</resource>
</root>

Пояснение

This tree consists of a number of resource root elements, the server console and two player elements, that are direct children of the root element. All these resources have a dynamic map as child element (it is just not shown for most of them). These contain the elements that are created dynamically by this resource using scripts, for example a vehicle. If the resource has a map file, it is also a child element, itself containing all the elements in the .map file.

Let's have a closer look at the assault resource: This contains just one dynamic map that has 2 teams, 3 blips, 1 marker and 1 colshape as child elements. These are the elements that are created by the script, for example the marker, the colshape and one of the blips are probably used for the objective.

The as-farm resource's function on the contrary is to be a map for the assault gamemode. The dynamic map is empty (it could contain elements if there was a script in it though), while there is a map called 'as-farm.map', that contains a number of elements. These are mostly custom elements (like spawngroup, spawnarea, objective) but also a few elements that MTA creates automactically after loading the map (like pickup). In the brackets after the element type, you can see the element data it contains. These are identical with the attributes the .map file contains within these elements, while you can also set and get element data for any other elements (e.g. players) with setElementData and getElementData.

Pratical application

Elements can have as many children as they like. This does not directly affect the map in any way, but it comes in to its own when combined with the scripting system.

Setting data for elements

If you call a set... function on a node of the element tree, the function will affect every element within it (that it can work on).

So, the following code would set the size of every marker (the only type of element the setMarkerSize function can work on) that is below the root element to 2.5.

setMarkerSize ( getRootElement(), 2.5 )

The same can be done on any element, it is not restricted to the root element.

Менеджер карт

The example above shows the way the map manager uses different resources. The 'assault' resource is the gamemode, that manages what happens on the server using scripts and thus by creating elements in the tree dynamically. When a map resource is started, the gamemode receives a resource pointer referring to the started resource - in this case as-farm - from which you can retrieve and store the resource root element. Using this element in conjunction with functions like getElementsByType, getElementData and various others, you can access any of the information that was loaded into the tree from the 'as-farm.map'-file through scripts in the gamemode resource.

Another thing that has to be considered related to the tree of elements is the fact that when you change the map, you don't have to remove any elements you created within the map resource, while you do have to remove elements that are created within the gamemode resource, if they are specific to the map (which will be probably the case for those items you create based on information read from the map resource's .map files).

Element browser

You can start the resource elementbrowser to see a live view of the element tree on your server. Just start the resource and browser to your server's web page and choose the Element browser option in the sidebar (firefox only currently).