RU/Resource:Mapmanager: Difference between revisions
OpenIDUser32 (talk | contribs) No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{RU/Resource page}} | {{RU/Resource page}} | ||
{{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"> | <syntaxhighlight lang="xml"> | ||
<meta> | <meta> | ||
Line 17: | Line 17: | ||
</meta> | </meta> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Заметьте, что этот ресурс "прикреплен" к главному ресурсу через тег ''gamemodes=""'', который содержит имя главного рсеурса. В теге ''map'' указывается имя .map-файла, который и содержит сами данные карты. | |||
Теперь создадим еще один | Теперь создадим еще один файл внутри /mymap/ и назовем его "mymap.map", затем введем туда следующий код: | ||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
<map> | <map> | ||
Line 25: | Line 25: | ||
</map> | </map> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Заметьте, что "spawnpoint" - тип элемента, используемый в функции [[getElementsByType]]; более того, "id" используется в функции [[getElementByID]]. | |||
Чтобы | Чтобы подгрузить данные карты, главному скрипту нужен доступ к ресурсу-карте как таковому. Теперь отредактируем файл script.lua в ресурсе "myserver". Введите следующий код: | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
Line 36: | Line 36: | ||
addEventHandler("onGamemodeMapStart", getRootElement(), loadMap) | addEventHandler("onGamemodeMapStart", getRootElement(), loadMap) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
В основном "onGamemodeMapStart" дает нам | В основном, событие "onGamemodeMapStart" дает нам контроль над картой ("startedMap"), которую мы использовали для добычи контроля над ресурсом, содержащим карту ("mapRoot"). | ||
Имея контроль над ресурсом, мы можем добыть информацию о 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, ваши ресурсы для начала должны быть отмечены как моды и карты. | ||
Вам придется пометить '''ресурс-мод''' соответствующим 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'', где требуется перечислить все совместимые с ним ресурсы-моды через запятую, но ''без пробелов''. | ||
<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> | ||
Одновременно могут быть загружены только один мод и одна карта. | |||
== | ==Опциональные атрибуты ресурсов== | ||
Все эти атрибуты включаются в тег info соответствующего ресурса. | |||
'''name:''' | '''name:''' "Дружелюбное" имя для вашего мода или карты, которое будет отображаться при их старте или в списках вместо имен файлов. | ||
== | ==Команды== | ||
'''changemap newmap [newgamemode]''' ( | '''changemap newmap [newgamemode]''' (меняет карту мода на новую, а опционально и сам мод) | ||
'''changemode newgamemode [newmap]''' ( | '''changemode newgamemode [newmap]''' (меняет мод на новый, опционально стартуя карту вместе с ним) | ||
'''gamemode newgamemode [newmap]''' ( | '''gamemode newgamemode [newmap]''' (аналогично предыдущему) | ||
'''stopmode''' ( | '''stopmode''' (останавливает текущие мод и карту) | ||
'''stopmap''' ( | '''stopmap''' (останавливает текущую карту) | ||
'''maps [gamemode]''' ( | '''maps [gamemode]''' (выдает список всех карт на сервере, опционально - только совместимых с указанным модом) | ||
'''gamemodes''' ( | '''gamemodes''' (выдает список модов) | ||
== | ==Настройки== | ||
'''*mapmanager.color''' [hex color string] ( | '''*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) | ||
== | ==Экспортированые функции== | ||
<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. | ||
== | ==Срабатывающие события== | ||
''(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. | ||
== | ==Поддерживаемые настройки карт== | ||
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.