Форум Pawn.Wiki - Воплоти мечту в реальность!: Создание NPC для SA-MP - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

  • (3 Страниц) +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Урок ]
Создание NPC для SA-MP
Оценка: ***** 2 Голосов

#1
Пользователь офлайн   Romzes 

  • ( ^_^ )
  • Вставить ник
  • Раскрыть информацию
Создание и подключение NPC (ботов) в SA-MP

Пошаговое руководство: запись пути, mini-скрипт и подключение бота к гейммоду




Шаг 1. Запись пути NPC в файл

Прежде чем использовать NPC в игре, нужно записать его маршрут передвижения в файл.

Запустите сервер с любым гейммодом и подключённым фильтрскриптом npc_record, затем залогиньтесь как администратор:
/rcon login ****


Для записи бота используются три команды:

  • /vrecord <filename> — начинает запись пути транспорта в указанный файл.
  • /ofrecord <filename> — начинает запись пути пешехода в указанный файл.
  • /stoprecord — останавливает запущенную запись.


В этом уроке мы запишем путь транспорта.

1. Сядьте в любой транспорт и наберите команду записи:
/vrecord mynpc

(где mynpc — имя файла записи)

2. Покатайтесь по городу, после чего остановите запись:
/stoprecord


3. Закройте игру и зайдите в папку scriptfiles — там должен появиться файл mynpc.rec.

4. Переместите этот файл в:
<папка sa-mp сервера>/npcmodes/recordings/


Цитата

Готово! Вы записали путь NPC и поместили запись в нужную папку.





Шаг 2. Подключение NPC (mini-скрипт)

В папке npcmodes находятся "mini"-скрипты — они управляют поведением NPC. Теперь создадим такой скрипт для нашего бота.

Откройте Pawno, создайте новый файл, очистите его и вставьте этот код:

#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


Разбор кода построчно:

  • #define RECORDING "mynpc" — имя записанного файла, без расширения .rec
  • #define RECORDING_TYPE 1 — тип записи: 1 — на транспорте, 2 — пешком
  • #include <a_npc> — инклюд с функциями для работы с NPC
  • OnRecordingPlaybackEnd() — колбэк библиотеки NPC; эта строка зацикливает воспроизведение записи (mynpc)
  • OnNPCEnterVehicle(...) — запускает воспроизведение записи, когда NPC оказывается в транспорте
  • OnNPCExitVehicle() — останавливает воспроизведение, если NPC покидает транспорт
  • OnNPCSpawn() — запускает воспроизведение записи после спавна NPC (для пешеходного типа)


Сохраните скрипт как mynpc.pwn в папку:
<папка sa-mp сервера>/npcmodes/


...и скомпилируйте его.

Важно: если компиляция не проходит — убедитесь, что вы не используете старую версию Pawno.




Шаг 3. Подключение NPC к гейммоду

После предыдущих шагов у нас есть:
  • файл записи пути — mynpc.rec
  • mini-скрипт управления NPC — mynpc.amx


Теперь подключим всё это в гейммод или фильтрскрипт с помощью функции ConnectNPC:

ConnectNPC("Dave", "mynpc");


Параметры функции:
  • "Dave" — имя нашего NPC
  • "mynpc" — имя mini-скрипта (mynpc.amx)


Пример для гейммода:
public OnGameModeInit()
{
    print("my gamemode");
    ConnectNPC("MyFirstNPC", "mynpc");
    return 1;
}


Пример для фильтрскрипта:
public OnFilterScriptInit()
{
    print("my filterscript");
    ConnectNPC("MyFirstNPC", "mynpc");
    return 1;
}





Создание транспорта для NPC

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

Гейммод:
new MyFirstNPCVehicle; //Глобальная переменная!

public OnGameModeInit()
{
    print("my gamemode");
    ConnectNPC("MyFirstNPC", "mynpc");
    MyFirstNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
    return 1;
}


Фильтрскрипт:
new MyFirstNPCVehicle; //Глобальная переменная!

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 передвигается пешком — этот шаг можно пропустить.

Перед запуском нужно поместить NPC в транспорт через OnPlayerSpawn:

public OnPlayerSpawn(playerid)
{
    if(IsPlayerNPC(playerid)) //Проверяет, является ли игрок NPC.
    {
        new npcname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, npcname, sizeof(npcname)); //Получаем имя NPC.

        if(!strcmp(npcname, "MyFirstNPC", true)) //Проверяем имя.
        {
            PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); //Сажаем NPC в транспорт.
        }
        return 1;
    }

    //Код для остальных игроков.
    return 1;
}





Готово!

Скомпилируйте гейммод или фильтрскрипт и запустите игру. Отправляйтесь туда, где вы записывали путь NPC, и наслаждайтесь своим первым ботом!

Сообщение отредактировал Romzes: 19 июня 2026 - 14:04

8

#2
Пользователь офлайн   Jizzi 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
Спасибки +
0

#3
Пользователь офлайн   Dj_White_Rise 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Не грузится бот. Несколько уроков перепробовал. Нету его на сервере и все.
0

#4
Пользователь офлайн   Romzes 

  • ( ^_^ )
  • Вставить ник
  • Раскрыть информацию
А ты в server.cfg менял значения maxnpc на больше?
1

#5
Пользователь офлайн   Dj_White_Rise 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Уже разобрался. Такой вопрос: "Как поменять скин у стоячего или ходячего бота?"
0

#6
Пользователь офлайн   DeM 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
юзай SetSpawnInfo вроде :16:
или же SetPlayerSkin(playerid, 277);//227- ид скина

Сообщение отредактировал DeM: 26 января 2012 - 13:00

0

#7
Пользователь офлайн   CoolDark 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
А этими ботами можно управлять? Ну делать чтоб они атаковали кого нибудь или ходили за игроком?
0

#8
Пользователь офлайн   Dj_White_Rise 

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияCoolDark (26 января 2012 - 13:43) писал:

А этими ботами можно управлять? Ну делать чтоб они атаковали кого нибудь или ходили за игроком?


Нельзя. Им указан маршрут.

Такой вопрос: Везде поставил проверки, но бот выходит секунд через 10, как включается сервер.
0

#9
Пользователь офлайн   CoolDark 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDj_White_Rise (26 января 2012 - 19:18) писал:

Нельзя. Им указан маршрут.

А в MTA можно управлять. Там куча функций по ботам. :DDDD
0

#10
Пользователь офлайн   Romzes 

  • ( ^_^ )
  • Вставить ник
  • Раскрыть информацию
Сампу к мта еще рости и рости. Но в сампе все равно круче как по мне...
0

Поделиться темой:


  • (3 Страниц) +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика