RU/Resource:Mapmanager: Difference between revisions

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


А именно, map manager хранит список всех модов/карт и управляет их загрузкой. То есть распространяется и на настройки текущей карты, затрагивает игровой мир и устанавливает тип игры и имя карты в ASE. Это включает в себя и веб-лист, который обновляется и пишет текущую комбинацию мода/карты.
==Простой туториал==
В этой секции мы продолжим создавать простой мод, который начали во [[RU/Scripting Introduction|вступлении ко скриптингу]]. Мы добавим простой ресурс-карту, который будет содержать лишь спавны для игроков, и научимся подгружать данные в главный скрипт, когда игроку понадобится спавниться.
Для начала, мы создадим папку в /путь-к-вашему-серверу/mods/deathmatch/resources/ и назовем ее "mymap". Затем, в папке /mymap/ создайте текстовый файл и назовите его "meta.xml", этот файл нужен каждому ресурсу без исключения.
Вставьте следующий код в файл ''meta.xml'':
<syntaxhighlight lang="xml">
<meta>
  <info type="map" gamemodes="myserver"/>
  <map src="mymap.map"/>
</meta>
</syntaxhighlight>
Заметьте, что этот ресурс "прикреплен" к главному ресурсу через тег ''gamemodes=""'', который содержит имя главного ресурса. В теге ''map'' указывается имя .map-файла, который и содержит сами данные карты.
Теперь создадим еще один файл внутри /mymap/ и назовем его "mymap.map", затем введем туда следующий код:
<syntaxhighlight lang="xml">
<map>
  <spawnpoint id="spawnpoint1" posX="1959.5487060547" posY="-1714.4613037109" posZ="18" rot="63.350006103516" model="0"/>
</map>
</syntaxhighlight>
Заметьте, что "spawnpoint" - тип элемента, используемый в функции [[getElementsByType]]; более того, "id" используется в функции [[getElementByID]].
Чтобы подгрузить данные карты, главному скрипту нужен доступ к ресурсу-карте как таковому. Теперь отредактируем файл script.lua в ресурсе "myserver". Введите следующий код:
<syntaxhighlight lang="lua">
function loadMap(startedMap)
mapRoot = getResourceRootElement(startedMap)
end
addEventHandler("onGamemodeMapStart", getRootElement(), loadMap)
</syntaxhighlight>
В целом, событие "onGamemodeMapStart" дает нам контроль над картой ("startedMap"), которую мы использовали для добычи контроля над ресурсом, содержащим карту ("mapRoot").
Имея контроль над ресурсом, мы можем добыть информацию о spawnpoint'ах (респавнах). Взгляните на функцию joinHandler() в script.lua - вместо того, чтобы указывать x, y и z, мы можем использовать данные карты следующим образом:
<syntaxhighlight lang="lua">
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
</syntaxhighlight>
Теперь можно запустить мод через консоль сервера, введя следующую команду:
'''gamemode myserver mymap'''
==Использование==
Чтобы использовать map manager, ваши ресурсы для начала должны быть отмечены как моды и карты.
Вам придется пометить '''ресурс-мод''' соответствующим type в его info-теге:
<syntaxhighlight lang="xml"><info description="A gamemode" type="gamemode" /></syntaxhighlight>
'''Ресурс-карту''' нужно пометить ''type="map"'', а вдобавок еще и ''gamemodes'', где требуется перечислить все совместимые с ней ресурсы-моды через запятую, но ''без пробелов''.
<syntaxhighlight lang="xml"><info description="A gamemode map" type="map" gamemodes="ctv,koth" /></syntaxhighlight>
Одновременно могут быть загружены только один мод и одна карта.
==Опциональные атрибуты ресурсов==
Все эти атрибуты включаются в тег 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)
==Экспортированные функции==
<syntaxhighlight lang="lua">bool changeGamemode ( resource newGamemode, [ resource mapToLoadWith ] )</syntaxhighlight>
Меняет мод на новый, опционально указав начальную карту для него (по умолчанию загрузится без карты).
<syntaxhighlight lang="lua">bool changeGamemodeMap ( resource newMap, [ resource gamemodeToChangeTo ] )</syntaxhighlight>
Меняет карта мода на новую, опционально указав мод, на который придется переключиться для ее запуска (по умолчанию загрузится на текущем моде).
<syntaxhighlight lang="lua">table getGamemodes ( )</syntaxhighlight>
Выдаст таблицу всех указателей ресурсов-модов.
<syntaxhighlight lang="lua">table getGamemodesCompatibleWithMap ( resource theMap )</syntaxhighlight>
Выдаст таблицу указателей совместимых ресурсов-модов.
<syntaxhighlight lang="lua">table getMaps ( )</syntaxhighlight>
Выдаст таблицу указателей всех ресурсов-карт.
<syntaxhighlight lang="lua">table getMapsCompatibleWithGamemode ( [ resource theGamemode ] )</syntaxhighlight>
Выдаст таблицу указателей совместимых ресурсов-карт. Если gamemode не указан, вернет все карты, которые не совместимы ни с одним из модов.
<syntaxhighlight lang="lua">resource getRunningGamemode ( )</syntaxhighlight>
Выдаст указатель работающего в данный момент ресурса-мода.
<syntaxhighlight lang="lua">resource getRunningGamemodeMap ( )</syntaxhighlight>
Выдаст указатель ресурса-карты работающего в данный момент мода.
<syntaxhighlight lang="lua">bool isGamemode ( resource theGamemode )</syntaxhighlight>
Определяет является ли ресурс модом.
<syntaxhighlight lang="lua">bool isGamemodeCompatibleWithMap ( resource theGamemode, resource theMap )</syntaxhighlight>
Определяет совместим ли мод с картой или нет.
<syntaxhighlight lang="lua">bool isMap ( resource theMap )</syntaxhighlight>
Определяет является ли ресурс картой или нет.
<syntaxhighlight lang="lua">bool isMapCompatibleWithGamemode ( resource theMap, resource theGamemode )</syntaxhighlight>
Определяет совместима ли карта с модом или нет.
<syntaxhighlight lang="lua">bool stopGamemode ( )</syntaxhighlight>
Останавливает текущие мод и карту.
<syntaxhighlight lang="lua">bool stopGamemodeMap ( )</syntaxhighlight>
Stop the current GM map.
Останавливает текущую карту.
==Срабатывающие события==
''(Для всех этих событий, "source" - root element (корневой элемент) ресурса.)''
<syntaxhighlight lang="lua">onGamemodeStart ( resource startedGamemode )</syntaxhighlight>
Срабатывает при старте мода.
<syntaxhighlight lang="lua">onGamemodeStop ( resource stoppedGamemode )</syntaxhighlight>
Срабатывает перед остановкой мода.
<syntaxhighlight lang="lua">onGamemodeMapStart ( resource startedMap )</syntaxhighlight>
Срабатывает перед стартом карты на моде.
<syntaxhighlight lang="lua">onGamemodeMapStop ( resource stoppedMap )</syntaxhighlight>
Срабатывает перед остановкой карты на моде.
==Поддерживаемые настройки карт==
Следующие настройки из [[settings system|регистра]] применяются map manager'ом при старте карты:
<br>'''gamespeed''' [number]: Скорость игры на данной карте.
<br>'''gravity''' [number]: Гравитация на данной карте.
<br>'''time''' [string of the form '''hh:mm''']: Время на данной карте.
<br>'''weather''' [number]: ID погоды на данной карте.
<br>'''waveheight''' [number]: Высота волн на данной карте.
<br>'''locked_time''' [boolean]: Остановит ли менеджер время на карте или нет.
<br>'''minplayers''' [number]: Необходимый минимум игроков для старта карты.
<br>'''maxplayers''' [number]: Допустимый максимум игроков на карте.
[[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]: Допустимый максимум игроков на карте.