В этой статье я хочу вам рассказать что означает MultiGameMode с точки зрения его разработчика, поделюсь опытом в разработке такого режима игры, а также покажу с чего можно начать разработку.
Что такое MultiGameMode?
Из названия можно догадаться, что MultiGameMode (сокр. MGM) это игровой режим, который Multi :) а именно тот, который собирает в себе много игровых режимов (обычно больше трёх). Существует несколько видов MGM:
- Арены (комнаты);
- Отдельные области карт с ивентами (да, и это тоже MGM).
В данной статье я не буду задевать второй вид MGM, так как он не столь интересен и прост в реализации.
Как начать разработку такого режима?
Как и все начинающие скриптеры в MTA:SA, вы можете скачать готовый режим и копаться в нём это самый простой и самый быстрый способ. Отличным примером для дальнейшей разработки может послужить Bonsai MGM:
Признаюсь, что свой MGM я начинал разрабатывать как раз с этого игрового режима. Позже, мой режим понёс глобальные изменения и стал быть похож на смесь таких серверов как Twisted Gamers и FFS Gaming. Почему смесь? Всё просто:
- Лобби игрового режима было схоже с сервереом Twisted Gamers (точнее было бы назвать не лобби, а бар);
- Оформление я также взял с сервера Twisted Gamers и переработал его, улучшая тем, что добавлял новые возможности.
- Движок игрового режима работал подобно серверу FFS Gaming (именно так задумывал автор Bonsai).
Собственно, первое моё лобби выглядело так:
В конце карты находился гараж, где игроки могли улучшать свой автомобиль, на котором участвовали в гонках (но я не продумал то, что до него бежать нужно было):
Мелкими шагами, спустя полгода, я наконец доработал свой MGM, реализовав первую версию. Он включал в себя 9 комнат:
- Комната для клановых матчей (запускать матчи можно было только с администратором);
- Дерби;
- Freeroam;
- Парашютизм;
- Гонки;
- DM - гонки выживания на скоростных трассах;
- Микс (все карты вместе);
- Шутер (стрельба ракетами из машин);
- Old School (то же, что и DM, только старые трассы).
Было всё достаточно неоптимизировано, но меня радовало то, что мой режим стал быть похож на другие MGM сервера и имел свою изюменку.
Теперь хотелось бы рассказать немного о движке, что пришлось мне дорабатывать, и от чего пришлось избавиться.
Во-первых каждая арена (или комната) в игровом режиме представляет из себя объект с определённым набором параметров: количество игроков, название, максимальное количество игроков, измерение комнаты. Всё очень похоже на OOP и всё работает на этих принципах.
Во-вторых сам движок игрового режима должен представлять из себя реализацию таких функций как:
- createMapStartCountDown, setMapStartCountdown управление отсчётом перед гонкой;
- getRandomMapForArena, mapStartUnfreeze, loadNewMap, randomMap, changeMap, startNewMap,
createMapPackage управление картами для арены: загрузка, запуск, замена и т.д.; - forceEndMap, forcedArenaNextmap принудительные функции для карт, на случай, когда нужно сменить карту быстро и без последствий;
- createFilePackage, cancelFileDownload, checkDownloadProgress подгрузка скриптов из карт, которые запускаются (здесь не забываем создать специальный ресурс Wrapper оболочка, которая не будет пропускать вредоносные функции из скриптов карт, например вывести в чат рекламу);
- sendLeftTime передаёт время карты;
- cleanArena чистка арены (сброс всех функций, которые были запущены с помощью карт);
- joinArena, leaveArena процесс входа / выхода игрока на арену;
Собственно здесь перечислено главное. Но что же мне пришлось дорабатывать?
- В игровом режиме от Bonsai совсем не была продумана интеграция карт с самим игровым режимом, ведь сейчас в картах могут быть и шейдеры и замена моделей с текстурами. Оболочка (Wrapper) все эти функции просто не пропускала;
- Музыка на картах. Здесь кому как: одни любят слушать на кажой карте свою музыку, другие любят слушать серверное радио. Я смешал всё. Игрок мог выбрать, слушать ли ему серверное радио (по умолчанию), либо слушать музыку с карт (да, это больше нагружает сервер, заставляет скачивать игрока музыку с картой. НО! Подумайте, ведь можно же музыку загружать не с картой и делать поточное прослушивание на подобие радио);
- Как и говорил ранее, мне пришлось переработать лобби. Теперь лобби представлено в виде карты, а не графики, куда спавнится игрок. На карте я создал блоки Colshape, при входе на которые, по нажатию кнопки, игрок может войти на арену. Оказалось, что сложностей здесь и не было, только реализация.
- Всё остальное мелочи, которые приходили в голову в процессе разработки. Их я перечислять не буду.
Спустя ещё полгода-год вышла вторая версия моего сервера 2.0, которая привела в шок разработчиков Twisted Gamers (что их и заставило выпустить неудачную версию сервера Phoenix 3.0). Во второй версии мне пришлось полностью автоматизировать арену клановых матчей, оптимизировать лобби (собрать схожие режимы в подкатегорию), добавить новую прокачку для машин, а также добавить новые режимы:
- Тестировщик карт;
- Тактик режим (перестрелка);
- Убить террористов (то же самое, что FFS Kill The President, но наоборот);
Кроме того, режим Freeroam был полностью схож с обычным режимом, даже панель F1 встроил. Выглядело всё примерно так:
Учитывайте то, что такой режим требует мощного хостинга, так как операции по загрузке карт затрачивают много памяти.
Вывод
Для создания MGM не требуется больших знаний программирования, требуется лишь находчивость, желание хотеть создавать новое, ну и конечно идея. Мой MGM построен на комнатах в разных измерениях, помните это и учитывайте везде.
Ссылки:
Bonsai MGM: https://forum.mtasa.com/topic/65844-final-bonsais-multigamemode-now-fully-uncompiled/