Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Создание и управление NPC

Статус
В этой теме нельзя размещать новые ответы.

WorPlav

Умник
Автор - (оф. форум Sa-Mp)
Перевод с английского на русский осуществлён мной - WorPlav​

Слова автора:"Я пройдусь по созданию NPC от начала до конца. Всё над чем я работал."

Запись файла воспроизведения
Для начала мы должны записать файл воспроизведения, чтобы задействовать нашего NPC. Запустите сервер с любым модом, затем авторизируйтесь как RCON администратор(Напишите:"/rcon login <ваш rcon пароль>"), не забудьте добавить filterscript npc_record (Напишите:"/rcon loadfs npc_record").

Итак, есть 3 основных команды для записи:
  • /vrecord <имя_файла> - Начинает записывать путь транспорта в указанный вами файл.
  • /ofrecord <имя_файла> - Начинает записывать пройденый путь пешком в указаный вами файл.
  • /stoprecord - Останавливает любую из приведённых выше записей.

В этом мануале мы будем записывать путь на транспорте, для этого возьмем транспорт и напишем /vrecord mynpc (Напоминаю, вы должны быть авторизированы под RCON).
Не много поездите и когда вы закончите напишите - /stoprecord.
Закройте игру и перейдите в папку sciptfiles в папке с вашим модом, там должен быть файл под названием - mynpc.rec. Переместите его <Папка с вашим модом>/npcmodes/recordings/>
Сделали? Молодцы, превосходно! Сейчас вы записали путь для вашего NPC и переместили его в нужную папку.

Управление NPC
В папке npcmods по стандарту у вас множество различных скриптов, это автономные "мини" скрипты для управления вашим NPC.
Что же, давайте создадим еще один но уже своими руками!
Создайте новый .pwn файл и замените всё содержимое следующим..
PHP:
#define RECORDING "mynpc" //This is the filename of your recording without the extension.
#define RECORDING_TYPE 1 //1 for in vehicle and 2 for on foot.

#include <a_npc>
main(){}
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);

#if RECORDING_TYPE == 1
  public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
  public OnNPCExitVehicle() StopRecordingPlayback();
#else
  public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
#endif
Всё это выглядит немного странно, поэтому я разберу каждую строку по буквам.
PHP:
#define RECORDING "mynpc"
Здесь мы добавляем файл записи но без разрешения .rec

PHP:
#define RECORDING_TYPE 1
Здесь мы ставим тип нашей записи, если запись была на транспорте ставим 1, если пешком ставим 2.

PHP:
#include <a_npc>
Здесь мы добавляем инклуд с функциями NPC.

PHP:
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
OnRecordingPlaybackEnd - callback входящий в библиотеку NPC.
Эта строка повторяет воспроизведения, записанного файла (mynpc)

PHP:
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Эта строка запустит воспроизведение после того как NPC окажется в транспорте.

PHP:
public OnNPCExitVehicle() StopRecordingPlayback();
Эта строка останавливает воспроизведение, если NPC по какой либо причине окажется вне транспорта.

PHP:
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Строка запустит NPC после его спавна.

Это очень легко, правда? Сейчас сохраните ваш "mini" скрипт как "mynpc.pwn" в папку <папка с сервером/npcmodes/> и скомпилируйте его.
Если компилирование прошло успешно, то приступайте к следующем шагу. Если нет, то проверьте не компилируйте ли вы старым pawno, ведь функция добавлена в samp 0.3 или же вы пропустили скобку\двоеточие.

Подключаем NPC
Что же, мы имеем файл с записью, наш "мини" скрипт, теперь нам нужно подключить всё это в наш мод.
Открывайте ваш мод, самое время обратится к функции ConnectNPC и судя по названию функция подключает вашего NPC к моду.
Давайте изучим параметры этой функции и их назначение...
PHP:
ConnectNPC("Dave","mynpc");
  • "Dave" - Первый параметр это "Ник" бота. С помощью этого вы сможете определить NPC, и применить какие-то действия к нему.
  • "mynpc" - Это имя файла (без разрешения) вашего "мини"скрипта созданного ранее

С вашими новыми знаниями функций NPC, давайте попробуем добавить NPC при запуске вашего мода.
PHP:
public OnGameModeInit()
{
  ConnectNPC("WorPlav","mynpc");
  return 1;
}
Теперь, раз уж мы создали путь для бота в транспорте, мы должны сделать сам транспорт для бота, в котором он будет ездить.
Примерно так будет выглядеть OnGameModeInit после добавления NPC...
PHP:
new WorPlavVehicle; //Глобальная переменная! Можно добавить ко всем new
public OnGameModeInit()
{
  ConnectNPC("WorPlav","mynpc");
  WorPlavVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
  return 1;
}
Если вы создадите транспорт это не значит, что бот сядет в него, для этого нужно проделать следующее.
Я сделал это используя OnPlayerSpawn...

Примечание: Если ваш NPC не в транспорте, а пешком, то вы можете пропустить этот шаг.
PHP:
public OnPlayerSpawn(playerid)
{
  if(IsPlayerNPC(playerid)) //Сканируем или это NPC
  {
    new npcname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, npcname, sizeof(npcname)); //Узнаём имя NPC
    if(!strcmp(npcname, "WorPlav", true)) //Проверка на то, что имя NPC это WorPlav
    {
      PutPlayerInVehicle(playerid, WorPlavVehicle, 0); //Засовываем NPC в транспорт
    }
    return 1;
  }
  return 1;
}
Теперь компилируйте ваш мод и идите в игру.
Идите на то место, где вы заставили NPC ездить и если он там есть и двигается, то я вас поздравляю - вы создали вашего первого NPC.
Если что-то не работает разместите в этой теме и создатель темы поможет вам.
Так же, если у вас возникли какие-либо вопросы вы так же можете задать их сюда.

[HR][/HR]
Как благодарность за перевод не обидьте меня ;)
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу