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

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

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

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

по созданию NPC для sa-mp 0.3

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

Bob_Marley

Компетентный
Доброго времени суток "www.Pawno-Info.ru"​

Запись бота в файл.
В первую очередь для использования 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
Автор:wiki.pawno-info.ru (Не реклама)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу