Как написать свой скрипт? Введение. — различия между версиями

Материал из Bully Multiplayer Wiki
Перейти к: навигация, поиск
Строка 57: Строка 57:
  
 
* Шаг 1. Загружаем ресурс (папка с содержимым, скрипты, meta.xml и т.п) в директорию /resources.
 
* Шаг 1. Загружаем ресурс (папка с содержимым, скрипты, meta.xml и т.п) в директорию /resources.
* Шаг 2. Добавляем '''<resource src="имя ресурса"/>''' в "конфиг" сервера, server.xml.
+
* Шаг 2. Добавляем '''<resource src="имя ресурса"/>''' в "конфиг" сервера, [[server.xml]].
 
* Шаг 3. Запускаем/перезагружаем сервер.
 
* Шаг 3. Запускаем/перезагружаем сервер.
  

Версия 20:09, 19 мая 2016

Содержание

Создание рабочего скрипта.

Для начала мы постараемся разобрать, что нам необходимо для создания рабочего скрипта, шаг за шагом.

Где хранятся все скрипты?

Все скрипты хранятся непосредственно в папке ресурса, а те в свою очередь, в директории /resources.

Пример: /home/user/bullymp_linux/resources


meta.xml

Файл Meta.xml является базовым, для любого ресурса.

<meta>
	<info name="Freeroam" author="Bully Multiplayer Team" type="gamemode" version="1.0"/>
 
	<script src="s_config.js" type="server"/>
	<script src="s_playerModels.js" type="server"/>
	<script src="s_vehicleModels.js" type="server"/>
	<script src="s_commandManager.js" type="server"/>
	<script src="s_commands.js" type="server"/>
	<script src="s_events.js" type="server"/>
	<script src="s_startup.js" type="server"/>
	<script src="s_utility.js" type="server"/>
	<script src="s_main.js" type="server" boot="true"/>
</meta>

Разберём строки по отдельности.

<meta></meta>
  • Тег <meta> является обязательным для файла. (Обычный синтаксис XML)
<info name="Freeroam" author="Bully Multiplayer Team" type="gamemode" version="1.0"/>
  • name - Название ресурса.
  • author - Автор ресурса.
  • type - Тип ресурса, script или gamemode. Если указан gamemode, то название ресурса будет установлено как имя игрового режима, и будет показываться в браузере серверов.
  • version - Версия ресурса.
<script src="s_main.js" type="server" boot="true"/>
  • src - Расположение скрипта в директории ресурса.
  • type - Тип скрипта, client или server.
  • boot - Является ли данный файл ключевым. Если нет, то boot="true" можно даже не вставлять.

Создание своего скрипта.

ы

Добавление своего скрипта на сервер.

Если вы уже написали полноценный ресурс, самое время поставить его на сервер.

  • Шаг 1. Загружаем ресурс (папка с содержимым, скрипты, meta.xml и т.п) в директорию /resources.
  • Шаг 2. Добавляем <resource src="имя ресурса"/> в "конфиг" сервера, server.xml.
  • Шаг 3. Запускаем/перезагружаем сервер.

Разница между серверной и клиентской стороной скрипта.

В роли клиента выступает непосредственно запущенное приложение модификации, что и является одним из главных отличий от сервера. Так же именно сервер является "синхронизатором", т.е. именно он передаёт клиенту информацию о позиции других игроков, транспорта и т.п.

Один из наглядных примеров: graphics.drawRect() невозможно вызвать на сервере, т.к. данная функция рисует на экране прямоугольник. У сервера нет таких возможностей, как и экрана. Он передаёт на клиентскую сторону соответствующий "скрипт", который уже может её вызывать (на клиенте).

Клиент не способен выполнять функции относящиеся к серверу, т.к. по факту им не является. Создание транспорта должно его зарегистрировать на сервере, именно по этому попытавшись создав транспорт на клиенте, сервер его удалит при любых взаимодействиях, т.к. его "не существует".

Привязка функций к определенным событиям.

Полноценный игровой режим или же небольшой скрипт редко может обойтись без событий.

Для чего это необходимо? Например вы планируете выдавать игроку 100$ за каждого избитого противника. Вам необходимо выполнять вашу функцию при событии onPlayerKnockedOut, что бы игрок получил награду.

Сервер
function knockedOut(player,attacker) {
	if (!!player && !!attacker) {
		//Здесь уже код выдаёт деньги игроку attacker
 		//Ко всему, у игрока player можно их снять
	}
}

Функция есть, но сама собой она не вызовется. Именно для этого используется eventHandlers.add().

Сервер
eventHandlers.add("onPlayerKnockedOut", knockedOut);
Теперь функция knockedOut() будет вызываться после события onPlayerKnockedOut.