Доступ к архиву

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

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

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

Урок По Созданию Npc Для Sa-Mp 0.3

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

underworker

Специалист
Запись бота в файл.
Этот бот можно использовать для бомжатников, он будет ездить по городу по записанному вами пути и может возить новичков в АШ например.
В первую очередь для использования NPC в игре необходимо записать его схему перемещения в файл.
Запустите сервер с любым гейм модом и с подключенным фильтрскриптом
npc_record, теперь залогинтесь как администратор [/rcon login ****]. Для записи бота используются три команды:
/vrecord <filename> Начинает запись пути транспорта в указанный файл.
/ofrecord <filename> Начинает запись пути пешехода в указанный файл.
/stoprecord - Остонавливает запущенную запись.

В этом уроке мы сделаем запись транспорта.
И так доберитесь до любово транспорта, залезте в него, и наберите команду для записи
/vrecord mynpc (где mynpc мы указываем имя файла с записью).

Теперь покатайтесь по городу после чего остановите запись командой /stoprecord.
Закройте игру и идите в папку scriptfiles, там должен появится файл mynpc.rec



Теперь переместите этот файл в <папка sa-mp сервера>/npcmodes/recordings/
Сделали? Отлично!!! мы только что записали путь NPC и поместили запись в необходимую папку.

Подключение NPC
Вы возможно обратили внимание на скрипты в папке npcmodes это "mini" скрипты они управляют поведением NPC.
Теперь мы зделаем "mini" скрипт для управления нашим NPC.
Откройте Pawno создайте новый файл, очистите все что там есть и вставьте этот код:

PHP:
#define RECORDING "mynpc" //Имя файла с записью без расширения.
#define RECORDING_TYPE 1 //Тип записи: 1 на транспорте, и 2 пешком

#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 пишком
Здесь мы ставим тип нашей записи, если запись была на транспорте ставим 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 после его спавна.

Теперь сохраните ваш скрипт как mynpc.pwn в папку <папка sa-mp сервера>/npcmodes/ и скомпилируйте.
Если компилирование прошло успешно переходите к следующему шагу, если нет то убедитесь что вы не компилируете программой pawno старой версии.

Подключение вашего NPC
После предидущих шагов мы получили файл с записью NPC (mynpc.rec) и mini скрипт управляющий NPC(mynpc.amx).
Теперь нам необходимо подключить всё это в наш гейммод или фильтр скрипт, для этого необходимо пользоватся функцией ConnectNPC
ConnectNPC("Dave","mynpc");
Функция имеет 2 параметра:
"Dave" - этот параметр позволяет дать нашему NPC имя.
"mynpc" - это имя нашего mini скрипта (mynpc.amx) который мы зделали раньше.

Теперь вы знаете новую функцию ConnectNPC которая подключает NPC к игре из гейммода или фильтрскрипта.


PHP:
public OnGameModeInit()
{
print("my gamemode");
ConnectNPC("MyFirstNPC","mynpc");
return 1;
}
Или, если вы добавляете NPC в filterscript...
PHP:
public OnFilterScriptInit()
{
print("my filterscript");
ConnectNPC("MyFirstNPC","mynpc");
return 1;
}

Теперь так как мы создали нашего NPC на транспорте нам нужно создать для него этот транспорт.
Если ваш NPC не использует транспорт то вы можете пропустить этот шаг!

PHP:
new MyFirstNPCVehicle; //Global variable!
public OnGameModeInit()
{
print("my gamemode");
ConnectNPC("MyFirstNPC","mynpc");
MyFirstNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
return 1;
}
Или, если вы добавляете NPC в filterscript...
PHP:
new MyFirstNPCVehicle; //Global variable!
public OnFilterScriptInit()
{
print("my filterscript");
ConnectNPC("MyFirstNPC","mynpc");
MyFirstNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
return 1;
}
Заметьте что фактическое положение транспорта не имеет значения, так как транспорт будет телепортирован к месту начала пути NPC!!!
Только перед тем как начать игру и проверить вашего нового NPC, нам нужно поместить его в транспорт для этого используем OnPlayerSpawn...
Если ваш NPC не использует транспорт то вы можете пропустить этот шаг!

PHP:
public OnPlayerSpawn(playerid)
{
    if(IsPlayerNPC(playerid)) //Проверяет: существует ли игрок(NPC).
    {
        new npcname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, npcname, sizeof(npcname)); //Получает имя игрока (NPC).
        if(!strcmp(npcname, "MyFirstNPC", true)) //Проверяет если имя MyFirstNPC.
        {
            PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); //Помещает NPC в транспорт, который мы создали выше.
        }
        return 1;
    }
    //Место функциям для остольных игроков.
    return 1;
}

Теперь компилируйте ваш гейммод или фильтр скрипт, и начинайте играть, идите к тому месту где вы записывали своего NPC и радуйтесь вашему первому боту.

Текст перевел с английского и отредактировал:
maxim polipovich
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу