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

Материал из Bully Multiplayer Wiki
Перейти к: навигация, поиск
Строка 10: Строка 10:
  
  
 +
<h3>meta.xml</h3>
 +
Файл Meta.xml является базовым, для любого ресурса.
 +
<div class="example_box"><syntaxhighlight lang="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>
 +
</syntaxhighlight><div>
 +
 +
Разберём строки по отдельности.
 +
 +
<div class="example_box"><syntaxhighlight lang="xml">
 +
<meta></meta>
 +
</syntaxhighlight><div>
 +
* Тег <meta> является обязательным для файла. (Обычный синтаксис XML)
 +
 +
<div class="example_box"><syntaxhighlight lang="xml">
 +
<info name="Freeroam" author="Bully Multiplayer Team" type="gamemode" version="1.0"/>
 +
</syntaxhighlight><div>
 +
* name - Название ресурса.
 +
* author - Автор ресурса.
 +
* type - Тип ресурса, script или gamemode. Если указан gamemode, то название ресурса будет установлено как имя игрового режима, и будет показываться в браузере серверов.
 +
* version - Версия ресурса.
 +
 +
<div class="example_box"><syntaxhighlight lang="xml">
 +
<script src="s_main.js" type="server" boot="true"/>
 +
</syntaxhighlight><div>
 +
* src - Расположение скрипта в директории ресурса.
 +
* type - Тип скрипта, client или server.
 +
* boot - Является ли данный файл ключевым. Если нет, то boot="true" можно даже не вставлять.
  
 
<h3>Создание своего скрипта.</h3>
 
<h3>Создание своего скрипта.</h3>
 
ы
 
ы
 
  
 
<h3>Добавление своего скрипта на сервер.</h3>
 
<h3>Добавление своего скрипта на сервер.</h3>
текст
+
Если вы уже написали полноценный ресурс
  
 
== Разница между серверной и клиентской стороной скрипта. ==
 
== Разница между серверной и клиентской стороной скрипта. ==

Версия 20:05, 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" можно даже не вставлять.

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

ы

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

Если вы уже написали полноценный ресурс

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

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

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

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

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

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

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

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

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

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