Проблемы нужно решать по мере их появления.
Писал мод, появилась идея сделать такси npc, который мог останавливаться возле игрока.
Бот в автомобиле просто двигался по заданному маршруту, но если возле автомобиля находился игрок, бот останавливался на некоторое время, чтобы игрок успел сесть в авто. Покопался в wiki, ничего похожего не нашел.
К делу. Пришел к более-менее оптимальному варианту.
Суть: Из скрипта отправляется сообщение к боту => У бота срабатывает паблик и он выполняет определенные функции.
Код. Запускаем таймер, определяющий положение игроков относительно автомобиля робота:
Quote
public OnFilterScriptInit()
{
SetTimer("DetectStop",1500,1); //Время - полтора секунды
ConnectNPC("Taxi","taxi"); //подключаю бота
Taxi = CreateVehicle(420,2063.5691,-1800.6869,1473.9557, 0.0, 0, 0, 5000); //автомобиль бота
return 1;
}
Не буду описывать все функции скрипта: спавн бота, настройка скинов и т.п.
Теперь нужно придумать определенный код, при получении которого бот будет выполнять определенные действия.
Есть небольшой минус - если этот код отправит в чат один из игроков, бот сработает.
Так что нужно придумать код посложнее. В нашем случае - bot-taxi-pause15465465er5asg1b45
Паблик, вызываемый таймером:
Quote
forward DetectStop();
public DetectStop()
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
if((!IsPlayerInVehicle(i,Taxi))&&(!IsPlayerNPC(i)))
{
new Float:vehx, Float:vehy, Float:vehz;
GetVehiclePos(Taxi, vehx, vehy, vehz);
if(IsPlayerInRangeOfPoint(i, 5.0, vehx, vehy, vehz))
{
SetVehicleVelocity(Taxi,0.0, 0.0, 0.0);
SendClientMessage(taxid,0x000000,"bot-taxi-pause15465465er5asg1b45");//Вот этот код =)
}
}
}
}
Тут суть такая. Если один из игроков находится возле авто, отправляется код боту.
Теперь бот:
Quote
new stop=0;
public OnClientMessage(color, text[])
{
if((strfind(text,"bot-taxi-pause15465465er5asg1b45") != -1)&&(stop==0)) PauseRecordingPlayback(); SetTimer("Resume",8500,0); stop=1;
}
forward Resume();
publicResume()
{
if(stop==1)
{
ResumeRecordingPlayback();
stop=0;
}
}
Небольшое описание к написанному выше. Пришлось ввести переменную stop, чтобы скрипт работал правильно.
Если бот получает наш код, воспроизведение останавливается и ставится таймер, по истечению которого возобновится воспроизведение бота. Переменная stop лишь дает возможность определенное время не обрабатывать полученный код.
Вот вроде бы и все. Если есть вопросы - пишите