Данный плагин позволяет писать моды для SA:MP на языке PHP.
На данный момент поддерживаются все функции SA:MP 0.3x.
Способ возврата значений в некоторых функциях был изменён, чтобы не пришлось возвращать значения по ссылке.
Вместо этого функции будут возвращать массивы значений.
Пример:
PHP код:
GetPlayerPos($playerid)
вернёт [x => 0.0, y => 0.0, z => 0.0].
Язык PHP позволяет писать код намного проще и удобнее, чем на Pawn (например, не нужно преобразовывать типы данных, есть динамические массивы, ассоциативные массивы).
Кроме того в PHP много встроенных функций, для которых в Pawn вам понадобилось бы много лишних плагинов (MySQL, RegEx, FTP, файловые функции и т.д.).
Кроме того, в PHP есть ещё одно свойство: ООП (в то время, как Pawn - процедурно-ориентированный язык).
Специально для этого был создан специальный фреймворк, позволяющий беспрепятственно писать моды для SA:MP на PHP.
Пример кода на Pawn:
PHP код:
public OnPlayerConnect(playerid)
{
// получить имя игрока и вывести всем игрокам сообщение о его подключении
new name[MAX_PLAYER_NAME+1], string[24+MAX_PLAYER_NAME+1];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof(string), "%s присоединился к игре.", name);
SendClientMessageToAll(0xC4C4C4FF, string);
return 1;
}
Тот же код на PHP будет выглядеть так:
PHP код:
function OnPlayerConnect($playerid)
{
$playername = GetPlayerName($playerid);
SendClientMessageToAll(0xC4C4C4FF, "$playername присоединился к игре.");
return true;
}
Однако при использовании фреймворка код будет ещё проще:
PHP код:
Event::on('PlayerConnect', function($player)
{
SendClientMessageToAll(0xC4C4C4FF, $player->getName()." has joined the server.");
});
Эти особенности дают вам возможность идеально распределять свой труд при написании кода.
Кроме того, можно с лёгкостью добавлять в мод новые команды.
Вам всего лишь нужно будет добавить следующий код в любом месте вашего мода:
PHP код:
CommandText::register(['/vehicle', '/v', '/veh'], function($player, $params) {
$pos = $player->getPos();
$facing = $player->getFacingAngle();
$vehicle = Vehicle::create($params, $pos->x, $pos->y, $pos->z, $facing);
$player->putInVehicle($vehicle);
});
Данная функция будет автоматически вызываться каждый раз, когда игрок на сервере будет вводить команды "/vehicle", "/v" и "/veh".
Сначала в коде идёт получение позиции и угла поворота игрока, затем функция создаст машину прямо перед игроком и поместит в неё самого игрока.
Также в Pawn нужно создавать много переменных и массивов, чтобы хранить информацию об игроках.
С использованием фреймворка на PHP задача заметно упрощается.
Например, нужно сохранить информацию о том, использует ли игрок читы.
В Pawn вам понадобится создавать массив
PHP код:
new gIsCheater[MAX_PLAYERS];
затем записывать информацию
PHP код:
gIsCheater[playerid] = 1;
и при выходе игрока с сервера стирать информацию
PHP код:
gIsCheater[playerid] = 0;
В PHP вам не понадобится создавать никаких массивов.
Просто возьмите экземпляр игрока $player и сохраните нужное свойство:
PHP код:
$player->isCheater = true;
При этом не нужно стирать информацию, т.к. при выходе игрока с сервера все его свойства будут очищаться автоматически.
Кроме того, хранимая информация может занимать гораздо более меньший объём памяти, чем в Pawn, т.к. в PHP памяти выделяется столько, сколько нужно в данный момент времени, а не столько, сколько нужно для хранения свойств всех игроков, которые могут быть даже не подключены.
Если хотите увидеть мод на PHP в действии, можете посмотреть данный пример:
https://github.com/Lapayo/SAMPHP/blo...c/gamemode.php
Данный скрипт работает примерно так же, как и мод Grandlarc (который можно найти в примерах в папке gamemodes), однако имеет гораздо более простой и понятный код.
Установка:
Linux:
- Скачать комплект (см. ссылки ниже).
- Извлечь в папку.
- Скопировать содержимое папки "server-folder" в папку с вашим сервером.
- В server.cfg прописать "plugins samphp" и "gamemode0 empty"
- Если на сервере возникнет ошибка "missing libphp5.so", см. пункт "Установка libphp5.so"
Установка libphp5.so:
1-й способ:
1. Скопировать файл libphp5.so (из скачанного архива с плагином) в /usr/local/lib
2. Запустить ldconfig (на CentOS 5.9: "/sbin/ldconfig /usr/local/lib")
2-й способ:
1. Установить libxml2-dev и другие сборочные пакеты, такие как gcc и заголовочные файлы.
2. Запустить "install_libphp.sh" с правами root (скачивает, компилирует и устанавливает libphp5.so)
Windows:
- Скачать комплект (см. ссылки ниже).
- Извлечь в папку.
- Скопировать содержимое папки "server-folder" в папку с вашим сервером.
- В server.cfg прописать "plugins samphp" и "gamemode0 empty"
- При необходимости установить библиотеки Visual C++
http://www.microsoft.com/de-de/downl....aspx?id=30679
С чего начать написание модов на PHP:
- Создать папку "mygamemode" в папке "php".
- В папке "mygamemode" создать файл "mygamemode.php", подключить в него "core/bootstrap.php" и начать создавать свой мод.
- Добавить в server.cfg строку "samphpmode mygamemode".
Ссылки:
Оригинал темы: http://forum.sa-mp.com/showthread.php?t=442302
Перевод: Daniel_Cortez
Копирование данной статьи на других ресурсах без разрешения автора запрещено!