Всем хай нашёл нормальную систему конвоя когда игрок идет за конвоиром а не телепортируется
в системе учли если кто-то из 2-ух игроков покинет сервер а также вход конвоира в интерьер.

ко всем new
[code]new convoy[MAX_PLAYERS];
new convoyTimer[MAX_PLAYERS];[/code]

OnPlayerConnect
[code]convoy[playerid] = -1;[/code]
OnPlayerDisconnect
[code]if(GetPlayerConvoy(playerid))
{
SendClientMessage(GetArrestID(playerid), -1, «Ваш конвой покинул сервер, вы свободны!»);
TogglePlayerControllable(GetArrestID(playerid), 1);
ClearAnimations(GetArrestID(playerid));
ClearValue(playerid);
}[/code]

в конец модика
[code]forward ConvoyTimer(playerid, playerID);
public ConvoyTimer(playerid, playerID)
{
if(!IsPlayerConnected(playerID))
{
SendClientMessage(playerid, -1, «Игрок которого вы конвоировали покинул сервер!»);
ClearValue(playerid);
return 1;
}
if(IsPlayerInAnyVehicle(playerID))
{
SendClientMessage(playerid, -1, «Ваш заключенный в машине, конвой остановлен!»);
TogglePlayerControllable(playerID, 1);
ClearValue(playerid);
return 1;
}
if(GetPlayerVirtualWorld(playerID) != GetPlayerVirtualWorld(playerid) || GetPlayerInterior(playerID) != GetPlayerInterior(playerid))
{
new Float:xp, Float:yp, Float:zp, Float:ap;
GetPlayerPos(playerid, xp,yp,zp);
GetPlayerFacingAngle(playerid, ap);
SetPlayerPos(playerID, xp,yp,zp);
SetPlayerInterior(playerID, GetPlayerInterior(playerid));
SetPlayerVirtualWorld(playerID, GetPlayerVirtualWorld(playerid));
TogglePlayerControllable(playerID, 0);
return 1;
}
new Float:dis = GetDistancePlayer(playerID, playerid);
if(dis < 0.95) { TogglePlayerControllable(playerID, 0); TurnPlayerFaceToPlayer(playerID, playerid); } else if(dis > 10.0)
{
SendClientMessage(playerID, -1, «Ваш конвой ушел слишком далеко, вы свободны!»);
SendClientMessage(playerid, -1, «Вы ушли слишком далеко, конвой отпущен!»);
TogglePlayerControllable(playerID, 1);
ClearAnimations(playerID);
ClearValue(playerid);
}
else
{
TogglePlayerControllable(playerID, 1);
TurnPlayerFaceToPlayer(playerID, playerid);
ApplyAnimation(playerID,»ped»,»WALK_civi»,6.0,1,1,1,1,0,1);
}
return 1;
}
stock GetPlayerConvoy(playerid)
{
return (convoy[playerid] > -1) ? 1 : 0;
}
stock GetArrestID(playerid)
{
return (convoy[playerid] > -1) ? convoy[playerid] : -1;
}
stock ClearValue(playerid)
{
KillTimer(convoyTimer[playerid]);
convoy[playerid] = -1;
}[/code]

к дц:симди
[code]CMD:convoyoff(playerid, params[])
{
if(!GetPlayerConvoy(playerid))
return SendClientMessage(playerid, -1, «Вы никого не конвоируете!»);

new playerID = GetArrestID(playerid);
SendClientMessage(playerID, -1, «Ваш конвоир вас отпустил, вы свободны!»);
SendClientMessage(playerid, -1, «Вы отпутили конвой!»);
TogglePlayerControllable(playerID, 1);
ClearAnimations(playerID);
ClearValue(playerid);
return 1;
}
CMD:convoy(playerid, params[])
{
new playerID;
if(sscanf(params,»i»,playerID))
return SendClientMessage(playerid, -1, «ИНФО: /convoy [ид игрока]»);
if(!IsPlayerConnected(playerid))
return SendClientMessage(playerid, -1, «Этот игрок оффлайн!»);
if(playerID == playerid)
return SendClientMessage(playerid, -1, «Вы указали свой ID»);
if(IsPlayerInAnyVehicle(playerid))
return SendClientMessage(playerid, -1, «Вы не можете вести конвой с машины!»);
if(IsPlayerInAnyVehicle(playerID))
return SendClientMessage(playerid, -1, «Вы не можете взять под конвой когда игрок в машине!»);
if(GetDistancePlayer(playerid, playerID) > 1.5)
return SendClientMessage(playerid, -1, «Игрок далеко!»);

new player[MAX_PLAYER_NAME], giveplayer[MAX_PLAYER_NAME], s[144];
GetPlayerName(playerid, player, sizeof(player));
GetPlayerName(playerID, giveplayer, sizeof(giveplayer));
convoyTimer[playerid] = SetTimerEx(«ConvoyTimer», 1000, true, «ii», playerid, playerID);
convoy[playerid] = playerID;
format(s,sizeof(s),»Вы установили конвой за %s», giveplayer);
SendClientMessage(playerid, -1, s);
format(s,sizeof(s),»%s установил за вами конвой», player);
SendClientMessage(playerID, -1, s);
return 1;
}[/code]

если у тя такой баг
[code]error 017: undefined symbol «GetDistancePlayer[/code]
после дефайнов пиши
[code]stock Float:GetDistancePlayer(player1, player2)
{
new Float:coord[3][2];
GetPlayerPos(player1,coord[0][0],coord[1][0],coord[2][0]);
GetPlayerPos(player2,coord[0][1],coord[1][1],coord[2][1]);
return floatsqroot(floatpower(floatabs(floatsub(coord[0][1],coord[0][0])),2)
+floatpower(floatabs(floatsub(coord[1][1],coord[1][0])),2)
+floatpower(floatabs(floatsub(coord[2][1],coord[2][0])),2));
}[/code]

автор купер
спасибки за внимаш

От danilasar

Это я

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *