PDA

Просмотр полной версии : [Вопрос] Вопрос про NPC



MisT1K
06.07.2020, 19:34
Здравствуйте. Я записал маршрут для NPC поезда. NPC катается по трем городам и в каждом городе останавливается на 30 секунд. Скрипт в отдельном файле. Подскажите, пожалуйста, как оповестить игроков о прибытии поезда? Нужно с помощью перехватов как-то?


#include <a_npc>
main(){}

new stage;

public OnRecordingPlaybackEnd()
{
if(stage != 2) stage++;
else stage = 0;
SetTimer("Station", 30000, false);
}

public OnNPCEnterVehicle(vehicleid, seatid)
{
SetTimer("Station", 30000, false);
}

forward Station();
public Station()
{
switch(stage)
{
case 0:
{
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER, "lstosf");
}
case 1:
{
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER, "sftolv");
}
case 2:
{
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER, "lvtols");
}
}
return 1;
}

punkochel
07.07.2020, 11:00
Здравствуйте. Я записал маршрут для NPC поезда. NPC катается по трем городам и в каждом городе останавливается на 30 секунд. Скрипт в отдельном файле. Подскажите, пожалуйста, как оповестить игроков о прибытии поезда? Нужно с помощью перехватов как-то?


#include <a_npc>
main(){}

new stage;

public OnRecordingPlaybackEnd()
{
if(stage != 2) stage++;
else stage = 0;
SetTimer("Station", 30000, false);
}

public OnNPCEnterVehicle(vehicleid, seatid)
{
SetTimer("Station", 30000, false);
}

forward Station();
public Station()
{
switch(stage)
{
case 0:
{
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER, "lstosf");
}
case 1:
{
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER, "sftolv");
}
case 2:
{
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER, "lvtols");
}
}
return 1;
}


Я так понимаю функция public OnRecordingPlaybackEnd() вызывается когда поезд останавливается, поэтому алгоритм следующий:

public OnRecordingPlaybackEnd()
{
if(stage != 2) stage++;
else stage = 0;
SetTimer("Station", 30000, false);

foreach(new i:Player) {

if(IsPlayerInRangeOfPoint(playerid, Float:range, Float:x, Float:y, Float:z)) {

SendClientMessage(playerid, color, const message[]);
}
}
}

То есть, мы узнаем координаты где остановился поезд (можно просто создать их статически если остановок определенное количество), далее мы проверяем игроков на нахождение их в этом радиусе, если игрок находится в заданном радиусе - отправляем ему сообщение.

MisT1K
07.07.2020, 12:42
undefined symbol "foreach". Это же отдельный файл.

Pa4enka
08.07.2020, 01:18
#include <a_npc>
main(){}

new train_stage;

public OnRecordingPlaybackEnd()
{
train_stage = train_stage != 2 ? train_stage+1 : 0;
SetTimer("Station", 30000, false);
return true;
}

public OnNPCEnterVehicle(vehicleid, seatid)
{
SetTimer("Station", 30000, false);
return true;
}

forward Station();
public Station()
{
new train_city[] = {!"lstosf", !"sftolv", !"lvtols"};
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER, train_city[train_stage]);

return SendClientMessageToAll(-1, !"Поезд прибыл на станцию!")
}

MisT1K
11.07.2020, 19:53
#include <a_npc>
main(){}

new train_stage;

public OnRecordingPlaybackEnd()
{
train_stage = train_stage != 2 ? train_stage+1 : 0;
SetTimer("Station", 30000, false);
return true;
}

public OnNPCEnterVehicle(vehicleid, seatid)
{
SetTimer("Station", 30000, false);
return true;
}

forward Station();
public Station()
{
new train_city[] = {!"lstosf", !"sftolv", !"lvtols"};
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER, train_city[train_stage]);

return SendClientMessageToAll(-1, !"Поезд прибыл на станцию!")
}

undefined symbol "SendClientMessageToAll"

SteveStage
12.07.2020, 00:08
undefined symbol "SendClientMessageToAll"

В начале подключи инклуд a_samp:

#include <a_samp>

DeimoS
12.07.2020, 00:27
В начале подключи инклуд a_samp:

#include <a_samp>

Лучше уж тогда подключить конкретную нативку, если только она нужна.

SteveStage
12.07.2020, 02:44
Лучше уж тогда подключить конкретную нативку, если только она нужна.

Компилятор Zeex'а:

native SendClientMessageToAll(color, const message[]);

Стандартный компилятор:

native SendClientMessageToAll(color, message[]);