RU/Resource:Mapmanager: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
No edit summary
m (Reverted edits by Bonzo (talk) to last revision by Vincent)
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{RU/Resource page}}
{{RU/Resource page}}
{{Resource page}}
Map manager (менеджер карт) - ресурс, включенный в стандартный комплект поставки MTA DM сервера. Он предлагает команды, функции и события для модов, чтобы динамично распоряжаться их картами. Например, когда race-серверу нужно для каждой гонки подгружать новые треки, вместо того, чтобы хранить их все в одном ресурсе в качестве основного скрипта, они могут храниться в отдельных ресурсах и быть загруженными с помощью обычной функции "changeGamemodeMap" при старте новой гонки.  
Map manager (менеджер карт) - ресурс, включенный в стандартный комплект поставки MTA DM сервера. Он предлагает команды, функции и события для модов, чтобы динамично распоряжаться их картами. Например, когда race-серверу нужно для кадой гонки подгружать новые треки, вместо того, чтобы хранить их все в одном ресурсе в качестве основного скрипта, они могут храниться в отдельных ресурсах и быть заграженными с помощью обычной функции "changeGamemodeMap" при старте новой гонки.  


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


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


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


Имея контроль над ресурсом, мы можем добыть информацию о spawnpoint'ах (респавнах). Взгляните на функцию joinHandler() в script.lua, вместо того, чтобы указывать x, y и z, мы можем использовать данные карты следующим образом:
Имея контроль над ресурсом, мы можем добыть информацию о spawnpoint'ах (респавнах). Взгляните на функцию joinHandler() в script.lua - вместо того, чтобы указывать x, y и z, мы можем использовать данные карты следующим образом:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
function joinHandler()
function joinHandler()
Line 63: Line 62:
<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>


Line 74: Line 73:


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


'''changemode newgamemode [newmap]''' (меняет мод на новый, опционально стартуя карту вместе с ним)
'''changemode newgamemode [newmap]''' (меняет мод на новый, опционально стартуя карту вместе с ним)
Line 86: Line 85:
'''maps [gamemode]''' (выдает список всех карт на сервере, опционально - только совместимых с указанным модом)
'''maps [gamemode]''' (выдает список всех карт на сервере, опционально - только совместимых с указанным модом)


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


==Настройки==
==Настройки==
'''*mapmanager.color''' [hex color string] (меняет цвет сообщений, выводимых mapmanager'ом) (по умолчанию: #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)


==Экспортированые функции==
==Экспортированные функции==
<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.
Останавливает текущую карту.


==Срабатывающие события==
==Срабатывающие события==
''(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.
Срабатывает перед остановкой карты на моде.


==Поддерживаемые настройки карт==
==Поддерживаемые настройки карт==
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]: Допустимый максимум игроков на карте.


[[en:Mapmanager]]
[[en:Mapmanager]]
[[it: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]: Допустимый максимум игроков на карте.