Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6

Тема: PHP for SA:MP

  1. #1
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±

    PHP for SA:MP

    Данный плагин позволяет писать моды для 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(playeridnamesizeof(name));
        
    format(stringsizeof(string), "%s присоединился к игре."name);
        
    SendClientMessageToAll(0xC4C4C4FFstring);
        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:
    1. Скачать комплект (см. ссылки ниже).
    2. Извлечь в папку.
    3. Скопировать содержимое папки "server-folder" в папку с вашим сервером.
    4. В server.cfg прописать "plugins samphp" и "gamemode0 empty"
    5. Если на сервере возникнет ошибка "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:
    1. Скачать комплект (см. ссылки ниже).
    2. Извлечь в папку.
    3. Скопировать содержимое папки "server-folder" в папку с вашим сервером.
    4. В server.cfg прописать "plugins samphp" и "gamemode0 empty"
    5. При необходимости установить библиотеки Visual C++
      http://www.microsoft.com/de-de/downl....aspx?id=30679

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

    Ссылки:


    Оригинал темы: http://forum.sa-mp.com/showthread.php?t=442302
    Перевод: Daniel_Cortez
    Специально для Pro-Pawn.ru
    Копирование данной статьи на других ресурсах без разрешения автора запрещено!
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  2. 3 пользователя(ей) сказали cпасибо:
    DesmoNd (02.02.2014) Salvacore (13.11.2013) Unreal (17.08.2016)
  3. #2
    Аватар для Pr0C
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.03.2013
    Адрес
    Украина
    Сообщений
    37
    Репутация:
    19 ±
    Вот блин, а я тоже такую тему сделал) Придется удалить
     PHP
    PHP код:
    class Message extend Controller {
    public function 
    showMessage() {
    $this->load->helper('litemessage');
    $this->litemessage->type('info');
    $this->litemessage->text('Добро пожаловать на портал!');
    $this->litemessage->send();
    }
    }
    ?> 

  4. #3
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    В php не силён.

  5. Пользователь сказал cпасибо:
    Unreal (02.11.2014)
  6. #4
    Аватар для [ForD]
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.11.2013
    Адрес
    Свердловская обл.
    Сообщений
    688
    Репутация:
    103 ±
    Вах,хоть и в php толком не шарю но смотря код я восхищаюсь,надо будет попробовать,однозначно.
    PAWN Compiler делает то, что вы приказали ему сделать, а не то, что вы хотели, чтобы он сделал..

    25% времени в программировании уходит на размышления о том, что пользователь может сделать не так.[HR]/Брайан Хьюмс/





    #FIXSAMP

  7. 2 пользователя(ей) сказали cпасибо:
    Mr_David (19.12.2013) Unreal (02.11.2014)
  8. #5
    Аватар для Engineer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    28.11.2013
    Сообщений
    5
    Репутация:
    2 ±
    Хорошо, но не привычно.

  9. #6
    Аватар для XemyL
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.11.2013
    Сообщений
    22
    Репутация:
    25 ±
    А что насчёт скорости выполнения этого кода?

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •