Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Создание Npc Для Sa-Mp 0.3 - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

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

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

[ Урок ]
Создание Npc Для Sa-Mp 0.3
Оценка: ***** 1 Голосов

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

  • © Pawn-Wiki.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 создайте новый файл, очистите все что там есть и вставьте этот код:
#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 пишком

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

#include <a_npc>

Инклюд с функциями NPC.

public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);

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

public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);

Эта строка запустит воспроизведение после того как NPC окажется в транспорте.

public OnNPCExitVehicle() StopRecordingPlayback();

Эта строка остоновит воспроизведение, если NPC по какой либо причине окажется вне транспорта.

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 к игре из гейммода или фильтрскрипта.

public OnGameModeInit()
{
print("my gamemode");
ConnectNPC("MyFirstNPC","mynpc");
return 1;
}

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


Теперь так как мы создали нашего NPC на транспорте нам нужно создать для него этот транспорт.
Если ваш NPC не использует транспорт то вы можете пропустить этот шаг!
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...
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 не использует транспорт то вы можете пропустить этот шаг!
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

Сообщение отредактировал Mike: 19 Январь 2012 - 14:24

4

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

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

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

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

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

  • © Pawn-Wiki.Ru
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
А ты в server.cfg менял значения maxnpc на больше?
1

Сказали спасибо 1:
PETPO 

#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 

  • © Pawn-Wiki.Ru
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Сампу к мта еще рости и рости. Но в сампе все равно круче как по мне...
0

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


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

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