RU/Resource:Mapmanager: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(new page)
 
m (Reverted edits by Bonzo (talk) to last revision by Vincent)
 
(9 intermediate revisions by 6 users not shown)
Line 1: Line 1:
[[Category:RU/Resource]]
{{RU/Resource page}}
The map manager is a resource included in the MTA DM server suite. It offers commands, functions and events for the gamemodes to dynamically manage their maps. For example, when a race server needs to load different tracks for each race, instead of having all of them in the same resource as the main script, they can be stored in separate resources and then loaded simply with the "changeGamemodeMap" function when a new race starts.  
Map manager (менеджер карт) - ресурс, включенный в стандартный комплект поставки MTA DM сервера. Он предлагает команды, функции и события для модов, чтобы динамично распоряжаться их картами. Например, когда race-серверу нужно для каждой гонки подгружать новые треки, вместо того, чтобы хранить их все в одном ресурсе в качестве основного скрипта, они могут храниться в отдельных ресурсах и быть загруженными с помощью обычной функции "changeGamemodeMap" при старте новой гонки.  


Specifically, the map manager lists gamemodes/maps and manages gamemode/map loading. It applies certain map settings affecting the game world and sets ASE game type and map name rule values as well. It includes a web listing which autoupdates and highglights the current mode/map combination.
А именно, map manager хранит список всех модов/карт и управляет их загрузкой. То есть распространяется и на настройки текущей карты, затрагивает игровой мир и устанавливает тип игры и имя карты в ASE. Это включает в себя и веб-лист, который обновляется и пишет текущую комбинацию мода/карты.


==A simple tutorial==
==Простой туториал==
In this section we are going to continue the basic gamemode we created in the [[Scripting Introduction|Introduction to Scripting]]. We will add a simple map resource that only contains the spawnpoint data for the players, and load the data in the main script when the player needs to spawn.
В этой секции мы продолжим создавать простой мод, который начали во [[RU/Scripting Introduction|вступлении ко скриптингу]]. Мы добавим простой ресурс-карту, который будет содержать лишь спавны для игроков, и научимся подгружать данные в главный скрипт, когда игроку понадобится спавниться.


First of all, we make a folder under /Your MTA Server/mods/deathmatch/resources/, and name it "mymap". Then under /mymap/ directory, create a text file and name it "meta.xml", which is required for every resource.
Для начала, мы создадим папку в /путь-к-вашему-серверу/mods/deathmatch/resources/ и назовем ее "mymap". Затем, в папке /mymap/ создайте текстовый файл и назовите его "meta.xml", этот файл нужен каждому ресурсу без исключения.


Enter the following codes in the ''meta.xml'' file:
Вставьте следующий код в файл ''meta.xml'':
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<meta>
<meta>
Line 16: Line 16:
</meta>
</meta>
</syntaxhighlight>
</syntaxhighlight>
Note that this resource is "linked" to the main resource with the ''gamemodes=""'' tag, which contains the name of the main resource. In the ''map'' tag, it indicates the name of the .map file which contains the actual map data.
Заметьте, что этот ресурс "прикреплен" к главному ресурсу через тег ''gamemodes=""'', который содержит имя главного ресурса. В теге ''map'' указывается имя .map-файла, который и содержит сами данные карты.


Now let's create another text file under /mymap/ and name it "mymap.map", and enter the following codes:
Теперь создадим еще один файл внутри /mymap/ и назовем его "mymap.map", затем введем туда следующий код:
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<map>
<map>
Line 24: Line 24:
</map>
</map>
</syntaxhighlight>
</syntaxhighlight>
Note that "spawnpoint" is the type of the element, used in [[getElementsByType]] function; likewise, "id" is used in [[getElementByID]] function.  
Заметьте, что "spawnpoint" - тип элемента, используемый в функции [[getElementsByType]]; более того, "id" используется в функции [[getElementByID]].  


To load the map data, the main script needs access to the map resource itself. Now let's edit the script.lua file in "myserver" resource. Enter the following code:
Чтобы подгрузить данные карты, главному скрипту нужен доступ к ресурсу-карте как таковому. Теперь отредактируем файл script.lua в ресурсе "myserver". Введите следующий код:


<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 35: Line 35:
addEventHandler("onGamemodeMapStart", getRootElement(), loadMap)
addEventHandler("onGamemodeMapStart", getRootElement(), loadMap)
</syntaxhighlight>
</syntaxhighlight>
Basically, the "onGamemodeMapStart" event gives us the handle of the map ("startedMap"), which we used to extract the handle of the resource containing the map ("mapRoot").
В целом, событие "onGamemodeMapStart" дает нам контроль над картой ("startedMap"), которую мы использовали для добычи контроля над ресурсом, содержащим карту ("mapRoot").


With the resource handle, we can extract the spawnpoint information from it. Look at the joinHandler() function in script.lua, instead of specifying x, y and z, we can use the map data as the following:
Имея контроль над ресурсом, мы можем добыть информацию о spawnpoint'ах (респавнах). Взгляните на функцию joinHandler() в script.lua - вместо того, чтобы указывать x, y и z, мы можем использовать данные карты следующим образом:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
function joinHandler()
function joinHandler()
Line 52: Line 52:
end
end
</syntaxhighlight>
</syntaxhighlight>
Now you may start the gamemode in the server console with the following command:
Теперь можно запустить мод через консоль сервера, введя следующую команду:


'''gamemode myserver mymap'''
'''gamemode myserver mymap'''


==Usage==
==Использование==
To use the map manager, your resources must first be marked as either gamemodes or maps.
Чтобы использовать map manager, ваши ресурсы для начала должны быть отмечены как моды и карты.


You have to tag the '''gamemode resource''' with the correct type in its info tag:
Вам придется пометить '''ресурс-мод''' соответствующим type в его info-теге:
<syntaxhighlight lang="xml"><info description="A gamemode" type="gamemode" /></syntaxhighlight>
<syntaxhighlight lang="xml"><info description="A gamemode" type="gamemode" /></syntaxhighlight>


'''Map resources''' also need the ''type="map"'' tag, plus a ''gamemodes'' tag listing the gamemode resources they're compatible with in a comma-separated list ''without spaces''.
'''Ресурс-карту''' нужно пометить ''type="map"'', а вдобавок еще и ''gamemodes'', где требуется перечислить все совместимые с ней ресурсы-моды через запятую, но ''без пробелов''.
<syntaxhighlight lang="xml"><info description="A gamemode map" type="map" gamemodes="ctv,koth" /></syntaxhighlight>
<syntaxhighlight lang="xml"><info description="A gamemode map" type="map" gamemodes="ctv,koth" /></syntaxhighlight>


There can be only one gamemode and one gamemode map loaded at once.
Одновременно могут быть загружены только один мод и одна карта.


==Optional resource attributes==
==Опциональные атрибуты ресурсов==
These attributes all go in the corresponding resource's info tag.
Все эти атрибуты включаются в тег info соответствующего ресурса.


'''name:''' A friendly name for your gamemode or map, to be displayed in the start messages or map listings instead of the filename.
'''name:''' "Дружелюбное" имя для вашего мода или карты, которое будет отображаться при их старте или в списках вместо имен файлов.


==Commands==
==Команды==
'''changemap newmap [newgamemode]''' (changes the gamemode map to a new one, optionally changing the gamemode as well)
'''changemap newmap [newgamemode]''' (меняет карту мода на новую, а опционально - и сам мод)


'''changemode newgamemode [newmap]''' (changes to a new gamemode, optionally starting a map with it)
'''changemode newgamemode [newmap]''' (меняет мод на новый, опционально стартуя карту вместе с ним)


'''gamemode newgamemode [newmap]''' (same as previous one)
'''gamemode newgamemode [newmap]''' (аналогично предыдущему)


'''stopmode''' (stops the current mode and mode map)
'''stopmode''' (останавливает текущие мод и карту)


'''stopmap''' (stops the current mode map)
'''stopmap''' (останавливает текущую карту)


'''maps [gamemode]''' (lists all maps in the server, optionally all maps compatible with a gamemode)
'''maps [gamemode]''' (выдает список всех карт на сервере, опционально - только совместимых с указанным модом)


'''gamemodes''' (lists all gamemodes)
'''gamemodes''' (выдает список всех модов)


==Settings==
==Настройки==
'''*mapmanager.color''' [hex color string] (changes the mapmanager's output messages' color) (default: #E1AA5A)
'''*mapmanager.color''' [hex color string] (меняет цвет сообщений, выводимых mapmanager'ом) (по умолчанию: #E1AA5A)


'''*mapmanager.messages''' [boolean] (whether map/gm changes are enabled) (default: true)
'''*mapmanager.messages''' [boolean] (включена ли смена карт/модов) (по умолчанию: true)


'''*mapmanager.ASE''' [boolean] (whether the manager will set ASE gametype / mapname) (default: true)
'''*mapmanager.ASE''' [boolean] (будет ли менеджер устанавливать в ASE тип игры / имя карты) (по умолчанию: true)


==Exported functions==
==Экспортированные функции==
<syntaxhighlight lang="lua">bool changeGamemode ( resource newGamemode, [ resource mapToLoadWith ] )</syntaxhighlight>
<syntaxhighlight lang="lua">bool changeGamemode ( resource newGamemode, [ resource mapToLoadWith ] )</syntaxhighlight>
Changes the gamemode to a new one, optionally specifying an initial map for it (will load without a map by default).
Меняет мод на новый, опционально указав начальную карту для него (по умолчанию загрузится без карты).
<syntaxhighlight lang="lua">bool changeGamemodeMap ( resource newMap, [ resource gamemodeToChangeTo ] )</syntaxhighlight>
<syntaxhighlight lang="lua">bool changeGamemodeMap ( resource newMap, [ resource gamemodeToChangeTo ] )</syntaxhighlight>
Changes the GM map to a new one, optionally specifying a gamemode to change to before loading it (will load with the current gamemode by default).
Меняет карта мода на новую, опционально указав мод, на который придется переключиться для ее запуска (по умолчанию загрузится на текущем моде).
<syntaxhighlight lang="lua">table getGamemodes ( )</syntaxhighlight>
<syntaxhighlight lang="lua">table getGamemodes ( )</syntaxhighlight>
Returns a table of all gamemode resource pointers.
Выдаст таблицу всех указателей ресурсов-модов.
<syntaxhighlight lang="lua">table getGamemodesCompatibleWithMap ( resource theMap )</syntaxhighlight>
<syntaxhighlight lang="lua">table getGamemodesCompatibleWithMap ( resource theMap )</syntaxhighlight>
Returns a table of compatible gamemode resource pointers.
Выдаст таблицу указателей совместимых ресурсов-модов.
<syntaxhighlight lang="lua">table getMaps ( )</syntaxhighlight>
<syntaxhighlight lang="lua">table getMaps ( )</syntaxhighlight>
Returns a table of all map resource pointers.
Выдаст таблицу указателей всех ресурсов-карт.
<syntaxhighlight lang="lua">table getMapsCompatibleWithGamemode ( [ resource theGamemode ] )</syntaxhighlight>
<syntaxhighlight lang="lua">table getMapsCompatibleWithGamemode ( [ resource theGamemode ] )</syntaxhighlight>
Returns a table of compatible map resource pointers. If the gamemode is left blank, it returns all maps which aren't compatible with any gamemode.
Выдаст таблицу указателей совместимых ресурсов-карт. Если gamemode не указан, вернет все карты, которые не совместимы ни с одним из модов.
<syntaxhighlight lang="lua">resource getRunningGamemode ( )</syntaxhighlight>
<syntaxhighlight lang="lua">resource getRunningGamemode ( )</syntaxhighlight>
Returns the currently running gamemode's resource pointer.
Выдаст указатель работающего в данный момент ресурса-мода.
<syntaxhighlight lang="lua">resource getRunningGamemodeMap ( )</syntaxhighlight>
<syntaxhighlight lang="lua">resource getRunningGamemodeMap ( )</syntaxhighlight>
Returns the currently running GM map's resource pointer.
Выдаст указатель ресурса-карты работающего в данный момент мода.
<syntaxhighlight lang="lua">bool isGamemode ( resource theGamemode )</syntaxhighlight>
<syntaxhighlight lang="lua">bool isGamemode ( resource theGamemode )</syntaxhighlight>
Determines if a resource is a gamemode or not.
Определяет является ли ресурс модом.
<syntaxhighlight lang="lua">bool isGamemodeCompatibleWithMap ( resource theGamemode, resource theMap )</syntaxhighlight>
<syntaxhighlight lang="lua">bool isGamemodeCompatibleWithMap ( resource theGamemode, resource theMap )</syntaxhighlight>
Determines if a gamemode is compatible with a map or not.
Определяет совместим ли мод с картой или нет.
<syntaxhighlight lang="lua">bool isMap ( resource theMap )</syntaxhighlight>
<syntaxhighlight lang="lua">bool isMap ( resource theMap )</syntaxhighlight>
Determines if a resource is a map or not.
Определяет является ли ресурс картой или нет.
<syntaxhighlight lang="lua">bool isMapCompatibleWithGamemode ( resource theMap, resource theGamemode )</syntaxhighlight>
<syntaxhighlight lang="lua">bool isMapCompatibleWithGamemode ( resource theMap, resource theGamemode )</syntaxhighlight>
Determines if a map is compatible with a gamemode or not.
Определяет совместима ли карта с модом или нет.
<syntaxhighlight lang="lua">bool stopGamemode ( )</syntaxhighlight>
<syntaxhighlight lang="lua">bool stopGamemode ( )</syntaxhighlight>
Stops the current gamemode and its map.
Останавливает текущие мод и карту.
<syntaxhighlight lang="lua">bool stopGamemodeMap ( )</syntaxhighlight>
<syntaxhighlight lang="lua">bool stopGamemodeMap ( )</syntaxhighlight>
Stop the current GM map.
Stop the current GM map.
Determines if a map is compatible with a gamemode or not.
Останавливает текущую карту.


==Fired events==
==Срабатывающие события==
''(For all these events, "source" is the resource's root element.)''
''(Для всех этих событий, "source" - root element (корневой элемент) ресурса.)''
<syntaxhighlight lang="lua">onGamemodeStart ( resource startedGamemode )</syntaxhighlight>
<syntaxhighlight lang="lua">onGamemodeStart ( resource startedGamemode )</syntaxhighlight>
Fired before a gamemode starts.
Срабатывает при старте мода.
<syntaxhighlight lang="lua">onGamemodeStop ( resource stoppedGamemode )</syntaxhighlight>
<syntaxhighlight lang="lua">onGamemodeStop ( resource stoppedGamemode )</syntaxhighlight>
Fired before a gamemode is stopped.
Срабатывает перед остановкой мода.
<syntaxhighlight lang="lua">onGamemodeMapStart ( resource startedMap )</syntaxhighlight>
<syntaxhighlight lang="lua">onGamemodeMapStart ( resource startedMap )</syntaxhighlight>
Fired before a GM map starts.
Срабатывает перед стартом карты на моде.
<syntaxhighlight lang="lua">onGamemodeMapStop ( resource stoppedMap )</syntaxhighlight>
<syntaxhighlight lang="lua">onGamemodeMapStop ( resource stoppedMap )</syntaxhighlight>
Fired before a GM map is stopped.
Срабатывает перед остановкой карты на моде.


==Supported map settings==
==Поддерживаемые настройки карт==
The following settings from the [[settings system|registry]] are applied by the map manager when a map is started:
Следующие настройки из [[settings system|регистра]] применяются map manager'ом при старте карты:
<br>'''gamespeed''' [number]: The map's game speed.
<br>'''gamespeed''' [number]: Скорость игры на данной карте.
<br>'''gravity''' [number]: The map's gravity.
<br>'''gravity''' [number]: Гравитация на данной карте.
<br>'''time''' [string of the form '''hh:mm''']: The map's time.
<br>'''time''' [string of the form '''hh:mm''']: Время на данной карте.
<br>'''weather''' [number]: The map's weather ID.
<br>'''weather''' [number]: ID погоды на данной карте.
<br>'''waveheight''' [number]: The map's wave height.
<br>'''waveheight''' [number]: Высота волн на данной карте.
<br>'''locked_time''' [boolean]: Whether the set time will be frozen by the manager or not.
<br>'''locked_time''' [boolean]: Остановит ли менеджер время на карте или нет.
<br>'''minplayers''' [number]: The required minimum number of players to start the map.
<br>'''minplayers''' [number]: Необходимый минимум игроков для старта карты.
<br>'''maxplayers''' [number]: The allowed maximum number of players to start the map.
<br>'''maxplayers''' [number]: Допустимый максимум игроков на карте.


[[it:Map manager]]
[[en:Mapmanager]]
[[it:Mapmanager]]

Latest revision as of 03:06, 1 April 2016

Map manager (менеджер карт) - ресурс, включенный в стандартный комплект поставки MTA DM сервера. Он предлагает команды, функции и события для модов, чтобы динамично распоряжаться их картами. Например, когда race-серверу нужно для каждой гонки подгружать новые треки, вместо того, чтобы хранить их все в одном ресурсе в качестве основного скрипта, они могут храниться в отдельных ресурсах и быть загруженными с помощью обычной функции "changeGamemodeMap" при старте новой гонки.

А именно, map manager хранит список всех модов/карт и управляет их загрузкой. То есть распространяется и на настройки текущей карты, затрагивает игровой мир и устанавливает тип игры и имя карты в ASE. Это включает в себя и веб-лист, который обновляется и пишет текущую комбинацию мода/карты.

Простой туториал

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

Для начала, мы создадим папку в /путь-к-вашему-серверу/mods/deathmatch/resources/ и назовем ее "mymap". Затем, в папке /mymap/ создайте текстовый файл и назовите его "meta.xml", этот файл нужен каждому ресурсу без исключения.

Вставьте следующий код в файл meta.xml:

<meta>
   <info type="map" gamemodes="myserver"/>
   <map src="mymap.map"/>
</meta>

Заметьте, что этот ресурс "прикреплен" к главному ресурсу через тег gamemodes="", который содержит имя главного ресурса. В теге map указывается имя .map-файла, который и содержит сами данные карты.

Теперь создадим еще один файл внутри /mymap/ и назовем его "mymap.map", затем введем туда следующий код:

<map>
   <spawnpoint id="spawnpoint1" posX="1959.5487060547" posY="-1714.4613037109" posZ="18" rot="63.350006103516" model="0"/>
</map>

Заметьте, что "spawnpoint" - тип элемента, используемый в функции getElementsByType; более того, "id" используется в функции getElementByID.

Чтобы подгрузить данные карты, главному скрипту нужен доступ к ресурсу-карте как таковому. Теперь отредактируем файл script.lua в ресурсе "myserver". Введите следующий код:

function loadMap(startedMap)
	mapRoot = getResourceRootElement(startedMap)
end

addEventHandler("onGamemodeMapStart", getRootElement(), loadMap)

В целом, событие "onGamemodeMapStart" дает нам контроль над картой ("startedMap"), которую мы использовали для добычи контроля над ресурсом, содержащим карту ("mapRoot").

Имея контроль над ресурсом, мы можем добыть информацию о spawnpoint'ах (респавнах). Взгляните на функцию joinHandler() в script.lua - вместо того, чтобы указывать x, y и z, мы можем использовать данные карты следующим образом:

function joinHandler()
	local spawn = getElementsByType("spawnpoint", mapRoot)
	local x,y,z,r
	for key, value in pairs(spawn) do
		x = getElementData(value, "posX")
		y = getElementData(value, "posY")
		z = getElementData(value, "posZ")
		r = getElementData(value, "rot")
	end
	spawnPlayer(source, x, y, z)
	fadeCamera(source, true)
end

Теперь можно запустить мод через консоль сервера, введя следующую команду:

gamemode myserver mymap

Использование

Чтобы использовать map manager, ваши ресурсы для начала должны быть отмечены как моды и карты.

Вам придется пометить ресурс-мод соответствующим type в его info-теге:

<info description="A gamemode" type="gamemode" />

Ресурс-карту нужно пометить type="map", а вдобавок еще и gamemodes, где требуется перечислить все совместимые с ней ресурсы-моды через запятую, но без пробелов.

<info description="A gamemode map" type="map" gamemodes="ctv,koth" />

Одновременно могут быть загружены только один мод и одна карта.

Опциональные атрибуты ресурсов

Все эти атрибуты включаются в тег info соответствующего ресурса.

name: "Дружелюбное" имя для вашего мода или карты, которое будет отображаться при их старте или в списках вместо имен файлов.

Команды

changemap newmap [newgamemode] (меняет карту мода на новую, а опционально - и сам мод)

changemode newgamemode [newmap] (меняет мод на новый, опционально стартуя карту вместе с ним)

gamemode newgamemode [newmap] (аналогично предыдущему)

stopmode (останавливает текущие мод и карту)

stopmap (останавливает текущую карту)

maps [gamemode] (выдает список всех карт на сервере, опционально - только совместимых с указанным модом)

gamemodes (выдает список всех модов)

Настройки

*mapmanager.color [hex color string] (меняет цвет сообщений, выводимых mapmanager'ом) (по умолчанию: #E1AA5A)

*mapmanager.messages [boolean] (включена ли смена карт/модов) (по умолчанию: true)

*mapmanager.ASE [boolean] (будет ли менеджер устанавливать в ASE тип игры / имя карты) (по умолчанию: true)

Экспортированные функции

bool changeGamemode ( resource newGamemode, [ resource mapToLoadWith ] )

Меняет мод на новый, опционально указав начальную карту для него (по умолчанию загрузится без карты).

bool changeGamemodeMap ( resource newMap, [ resource gamemodeToChangeTo ] )

Меняет карта мода на новую, опционально указав мод, на который придется переключиться для ее запуска (по умолчанию загрузится на текущем моде).

table getGamemodes ( )

Выдаст таблицу всех указателей ресурсов-модов.

table getGamemodesCompatibleWithMap ( resource theMap )

Выдаст таблицу указателей совместимых ресурсов-модов.

table getMaps ( )

Выдаст таблицу указателей всех ресурсов-карт.

table getMapsCompatibleWithGamemode ( [ resource theGamemode ] )

Выдаст таблицу указателей совместимых ресурсов-карт. Если gamemode не указан, вернет все карты, которые не совместимы ни с одним из модов.

resource getRunningGamemode ( )

Выдаст указатель работающего в данный момент ресурса-мода.

resource getRunningGamemodeMap ( )

Выдаст указатель ресурса-карты работающего в данный момент мода.

bool isGamemode ( resource theGamemode )

Определяет является ли ресурс модом.

bool isGamemodeCompatibleWithMap ( resource theGamemode, resource theMap )

Определяет совместим ли мод с картой или нет.

bool isMap ( resource theMap )

Определяет является ли ресурс картой или нет.

bool isMapCompatibleWithGamemode ( resource theMap, resource theGamemode )

Определяет совместима ли карта с модом или нет.

bool stopGamemode ( )

Останавливает текущие мод и карту.

bool stopGamemodeMap ( )

Stop the current GM map. Останавливает текущую карту.

Срабатывающие события

(Для всех этих событий, "source" - root element (корневой элемент) ресурса.)

onGamemodeStart ( resource startedGamemode )

Срабатывает при старте мода.

onGamemodeStop ( resource stoppedGamemode )

Срабатывает перед остановкой мода.

onGamemodeMapStart ( resource startedMap )

Срабатывает перед стартом карты на моде.

onGamemodeMapStop ( resource stoppedMap )

Срабатывает перед остановкой карты на моде.

Поддерживаемые настройки карт

Следующие настройки из регистра применяются map manager'ом при старте карты:
gamespeed [number]: Скорость игры на данной карте.
gravity [number]: Гравитация на данной карте.
time [string of the form hh:mm]: Время на данной карте.
weather [number]: ID погоды на данной карте.
waveheight [number]: Высота волн на данной карте.
locked_time [boolean]: Остановит ли менеджер время на карте или нет.
minplayers [number]: Необходимый минимум игроков для старта карты.
maxplayers [number]: Допустимый максимум игроков на карте.