PDA

Просмотр полной версии : [Plugin] PHP for SA:MP



Daniel_Cortez
24.06.2013, 13:13
Данный плагин позволяет писать моды для SA:MP на языке PHP.
На данный момент поддерживаются все функции SA:MP 0.3x.

Способ возврата значений в некоторых функциях был изменён, чтобы не пришлось возвращать значения по ссылке.
Вместо этого функции будут возвращать массивы значений.
Пример:

GetPlayerPos($playerid)
вернёт [x => 0.0, y => 0.0, z => 0.0].

Язык PHP позволяет писать код намного проще и удобнее, чем на Pawn (например, не нужно преобразовывать типы данных, есть динамические массивы, ассоциативные массивы).
Кроме того в PHP много встроенных функций, для которых в Pawn вам понадобилось бы много лишних плагинов (MySQL, RegEx, FTP, файловые функции и т.д.).

Кроме того, в PHP есть ещё одно свойство: ООП (в то время, как Pawn - процедурно-ориентированный язык).
Специально для этого был создан специальный фреймворк, позволяющий беспрепятственно писать моды для SA:MP на PHP.

Пример кода на Pawn:

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 будет выглядеть так:

function OnPlayerConnect($playerid)
{
$playername = GetPlayerName($playerid);
SendClientMessageToAll(0xC4C4C4FF, "$playername присоединился к игре.");
return true;
}
Однако при использовании фреймворка код будет ещё проще:

Event::on('PlayerConnect', function($player)
{
SendClientMessageToAll(0xC4C4C4FF, $player->getName()." has joined the server.");
});
Эти особенности дают вам возможность идеально распределять свой труд при написании кода.

Кроме того, можно с лёгкостью добавлять в мод новые команды.
Вам всего лишь нужно будет добавить следующий код в любом месте вашего мода:

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 вам понадобится создавать массив

new gIsCheater[MAX_PLAYERS];
затем записывать информацию

gIsCheater[playerid] = 1;
и при выходе игрока с сервера стирать информацию

gIsCheater[playerid] = 0;

В PHP вам не понадобится создавать никаких массивов.
Просто возьмите экземпляр игрока $player и сохраните нужное свойство:

$player->isCheater = true;
При этом не нужно стирать информацию, т.к. при выходе игрока с сервера все его свойства будут очищаться автоматически.
Кроме того, хранимая информация может занимать гораздо более меньший объём памяти, чем в Pawn, т.к. в PHP памяти выделяется столько, сколько нужно в данный момент времени, а не столько, сколько нужно для хранения свойств всех игроков, которые могут быть даже не подключены.

Если хотите увидеть мод на PHP в действии, можете посмотреть данный пример:
https://github.com/Lapayo/SAMPHP/blob/master/server-folder/php/grandlarc/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/download/details.aspx?id=30679

С чего начать написание модов на PHP:
Создать папку "mygamemode" в папке "php".
В папке "mygamemode" создать файл "mygamemode.php", подключить в него "core/bootstrap.php" и начать создавать свой мод.
Добавить в server.cfg строку "samphpmode mygamemode".

Ссылки:
Для Debian/Ubuntu/Linux Mint x86/x86_64:
Плагин SAMPHP: http://www.sney.net/files/samphp-release-linux.zip
libphp5.so: http://www.sney.net/files/libphp5.so.zip
Для CentOS 5.9 x86/x86_64:
Плагин SAMPHP: http://www.sney.net/files/samphp-release-centos.zip
libphp5.so: http://www.sney.net/files/libphp5.so_centos.zip
Для Шindoшs:
Плагин SAMPHP: http://www.sney.net/files/samphp-release-windows.zip



Оригинал темы: http://forum.sa-mp.com/showthread.php?t=442302
Перевод: Daniel_Cortez (http://pro-pawn.ru/member.php?100-Daniel_Cortez)

Специально для Pro-Pawn.ru (http://www.pro-pawn.ru)
Копирование данной статьи на других ресурсах без разрешения автора запрещено!

Pr0C
24.06.2013, 15:13
Вот блин, а я тоже такую тему сделал) Придется удалить

Salvacore
13.11.2013, 01:55
В php не силён.

[ForD]
19.12.2013, 10:55
Вах,хоть и в php толком не шарю но смотря код я восхищаюсь,надо будет попробовать,однозначно.

Engineer
19.12.2013, 11:20
Хорошо, но не привычно.

XemyL
23.12.2013, 16:52
А что насчёт скорости выполнения этого кода?