RU/Resource:Mapmanager: 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|ru}}
{{RU/Resource page}}
{{RU/Resource page}}
Менеджер карты - скрипт для MTASA. А точнее, это команды, функции и события для управления сервером. Например, когда в гонках надо загрузить различные объекты, вместо того, чтобы записывать все их в главном файле, они могут быть сохранены в отдельных файлах и затем загружены с функцией "changeGamemodeMap" в начале гонки.  
{{Resource page}}
Map manager (менеджер карт) - ресурс, включенный в стандартный комплект поставки MTA DM сервера. Он предлагает команды, функции и события для модов, чтобы динамично распоряжаться их картами. Например, когда race-серверу нужно для кадой гонки подгружать новые треки, вместо того, чтобы хранить их все в одном ресурсе в качестве основного скрипта, они могут храниться в отдельных ресурсах и быть заграженными с помощью обычной функции "changeGamemodeMap" при старте новой гонки.  


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


== Туториал ==
==Простой туториал==
Здесь мы продолжим создание основного мода, который мы создали в [[RU/Scripting_Introduction|Введение в скриптинг]]. Мы создадим простую карту, которая содержит только точку респавна. И сделаем загрузку данных в главном скрипте, когда игрок хочет респавнится.
В этой секции мы продолжим создавать простой мод, который начали во [[RU/Scripting Introduction|вступлении ко скриптингу]]. Мы добавим простой ресурс-карту, который будет содержать лишь спавны для игроков, и научимся подгружать данные в главный скрипт, когда игроку понадобится спавниться.


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


Вводим следующий текст в файл ''meta.xml'':
Вставьте следующий код в файл ''meta.xml'':
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<meta>
<meta>
Line 17: Line 17:
</meta>
</meta>
</syntaxhighlight>
</syntaxhighlight>
Этот скрипт "связан" с главным скриптом отмеченным в "gamemodes = """. В строке "mapуказывается имя .map файла, который содержит данные карты.
Заметьте, что этот ресурс "прикреплен" к главному ресурсу через тег ''gamemodes=""'', который содержит имя главного рсеурса. В теге ''map'' указывается имя .map-файла, который и содержит сами данные карты.


Теперь создадим еще один текстовый файл в директории /mymap/, назовем его "mymap.map" и введем данный текст:
Теперь создадим еще один файл внутри /mymap/ и назовем его "mymap.map", затем введем туда следующий код:
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<map>
<map>
Line 25: Line 25:
</map>
</map>
</syntaxhighlight>
</syntaxhighlight>
Также элемент "spawnpoint" используется в функции [[getElementsByType]]; а элемент "id" в функции [[getElementByID]].  
Заметьте, что "spawnpoint" - тип элемента, используемый в функции [[getElementsByType]]; более того, "id" используется в функции [[getElementByID]].  


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


<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 36: Line 36:
addEventHandler("onGamemodeMapStart", getRootElement(), loadMap)
addEventHandler("onGamemodeMapStart", getRootElement(), loadMap)
</syntaxhighlight>
</syntaxhighlight>
В основном "onGamemodeMapStart" дает нам возможность ввести ("startedMap"), раньше мы вводили ("mapRoot").
В основном, событие "onGamemodeMapStart" дает нам контроль над картой ("startedMap"), которую мы использовали для добычи контроля над ресурсом, содержащим карту ("mapRoot").


При вводе мы можем получить информацию о точках респавна. Функция joinHandler () в файле script.lua, вместо того, чтобы определить x, y и z, мы можем использовать данные карты:
Имея контроль над ресурсом, мы можем добыть информацию о spawnpoint'ах (респавнах). Взгляните на функцию joinHandler() в script.lua, вместо того, чтобы указывать x, y и z, мы можем использовать данные карты следующим образом:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
function joinHandler()
function joinHandler()
Line 53: Line 53:
end
end
</syntaxhighlight>
</syntaxhighlight>
Теперь ты можешь запустить сервер с данным модом, введя команду:
Теперь можно запустить мод через консоль сервера, введя следующую команду:


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


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


Ты должен отметить '''gamemode''' правильным типом:
Вам придется пометить '''ресурс-мод''' соответствующим type в его info-теге:
<syntaxhighlight lang="xml"><info description="A gamemode" type="gamemode" /></syntaxhighlight>
<syntaxhighlight lang="xml"><info description="A gamemode" type="gamemode" /></syntaxhighlight>


'''Карта''' тоже нуждается в элементе ''type="map"'', также элемент ''gamemodes'' показывает моды с которыми он совместим ''без пробелов''.
'''Ресурсы-карту''' нужно пометить ''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>


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


==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] (whether map/gm changes are enabled) (default: true)
Line 95: Line 95:
'''*mapmanager.ASE''' [boolean] (whether the manager will set ASE gametype / mapname) (default: true)
'''*mapmanager.ASE''' [boolean] (whether the manager will set ASE gametype / mapname) (default: 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).
Changes the gamemode to a new one, optionally specifying an initial map for it (will load without a map by default).
Line 126: Line 126:
Determines if a map is compatible with a gamemode or not.
Determines if a map is compatible with a gamemode or not.


==Fired events==
==Срабатывающие события==
''(For all these events, "source" is the resource's root element.)''
''(For all these events, "source" is the resource's root element.)''
<syntaxhighlight lang="lua">onGamemodeStart ( resource startedGamemode )</syntaxhighlight>
<syntaxhighlight lang="lua">onGamemodeStart ( resource startedGamemode )</syntaxhighlight>
Line 137: Line 137:
Fired before a GM map is stopped.
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:
The following settings from the [[settings system|registry]] are applied by the map manager when a map is started:
<br>'''gamespeed''' [number]: The map's game speed.
<br>'''gamespeed''' [number]: The map's game speed.

Revision as of 13:46, 13 May 2012

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] (whether map/gm changes are enabled) (default: true)

*mapmanager.ASE [boolean] (whether the manager will set ASE gametype / mapname) (default: true)

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

bool changeGamemode ( resource newGamemode, [ resource mapToLoadWith ] )

Changes the gamemode to a new one, optionally specifying an initial map for it (will load without a map by default).

bool changeGamemodeMap ( resource newMap, [ resource gamemodeToChangeTo ] )

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).

table getGamemodes ( )

Returns a table of all gamemode resource pointers.

table getGamemodesCompatibleWithMap ( resource theMap )

Returns a table of compatible gamemode resource pointers.

table getMaps ( )

Returns a table of all map resource pointers.

table getMapsCompatibleWithGamemode ( [ resource theGamemode ] )

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.

resource getRunningGamemode ( )

Returns the currently running gamemode's resource pointer.

resource getRunningGamemodeMap ( )

Returns the currently running GM map's resource pointer.

bool isGamemode ( resource theGamemode )

Determines if a resource is a gamemode or not.

bool isGamemodeCompatibleWithMap ( resource theGamemode, resource theMap )

Determines if a gamemode is compatible with a map or not.

bool isMap ( resource theMap )

Determines if a resource is a map or not.

bool isMapCompatibleWithGamemode ( resource theMap, resource theGamemode )

Determines if a map is compatible with a gamemode or not.

bool stopGamemode ( )

Stops the current gamemode and its map.

bool stopGamemodeMap ( )

Stop the current GM map. Determines if a map is compatible with a gamemode or not.

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

(For all these events, "source" is the resource's root element.)

onGamemodeStart ( resource startedGamemode )

Fired before a gamemode starts.

onGamemodeStop ( resource stoppedGamemode )

Fired before a gamemode is stopped.

onGamemodeMapStart ( resource startedMap )

Fired before a GM map starts.

onGamemodeMapStop ( resource stoppedMap )

Fired before a GM map is stopped.

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

The following settings from the registry are applied by the map manager when a map is started:
gamespeed [number]: The map's game speed.
gravity [number]: The map's gravity.
time [string of the form hh:mm]: The map's time.
weather [number]: The map's weather ID.
waveheight [number]: The map's wave height.
locked_time [boolean]: Whether the set time will be frozen by the manager or not.
minplayers [number]: The required minimum number of players to start the map.
maxplayers [number]: The allowed maximum number of players to start the map.