shape1
shape2
shape3
shape4
shape7
shape8

Конвой игрока

  • Автор темы Autor
  • Дата начала

Статус
Закрыто для дальнейших ответов.
A

Autor

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

Ко всем new добавьте:

new convoy[MAX_PLAYERS];
new convoyTimer[MAX_PLAYERS];

В public OnPlayerConnect добавьте:

convoy[playerid] = -1;

В public OnPlayerDisconnect добавьте:

if(GetPlayerConvoy(playerid))
{
SendClientMessage(GetArrestID(playerid), -1, "Ваш конвой покинул сервер, вы свободны!");
TogglePlayerControllable(GetArrestID(playerid), 1);
ClearAnimations(GetArrestID(playerid));
ClearValue(playerid);
}

В конец мода:

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;
}

Команды (dc_cmd + sscanf):

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;
}

Куда-нибудь в начало мода (после #define можно) добавьте:

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));
}



sdgdfg.png

Автор:
 
Последнее редактирование:

Artifakt5059

Новичок
Пользователь
29.10.2016
1
1
0
Спасибо за такую прекрасную систему!

,Мне выдаёт ошибки помогите пожалуйста.

Вот ошибки

Код:
C:\Users\artif\Desktop\Delicious Role Play\gamemodes\RUTECH.pwn(37197) : error 017: undefined symbol "TurnPlayerFaceToPlayer"

C:\Users\artif\Desktop\Delicious Role Play\gamemodes\RUTECH.pwn(37210) : error 017: undefined symbol "TurnPlayerFaceToPlayer"

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

2 Errors.

Строки

(37197)

Код:
        TurnPlayerFaceToPlayer(playerID, playerid);
(37210)

Код:
        TurnPlayerFaceToPlayer(playerID, playerid);
 
Последнее редактирование модератором:

Mirex

Руководитель проекта
Команда портала
Гл.Администратор
Золотой
21.12.2013
2 512
3
550
0
29
definehost.ru
Скриптер
@Artifakt5059, в конец мода добавьте:

Код:
stock TurnPlayerFaceToPlayer(playerid,facingtoid)
{
    new Float:angle;
    new Float:misc = 5.0;
    new Float:x, Float:y, Float:z;
    new Float:ix, Float:iy, Float:iz;
    GetPlayerPos(facingtoid, x, y, z);
    GetPlayerPos(playerid, ix, iy, iz);
    angle = 180.0-atan2(ix-x,iy-y);
    angle += misc;
    misc *= -1;
    SetPlayerFacingAngle(playerid, angle+misc);
}
 

Aleksandr

Новичок
Пользователь
16.09.2014
300
13
0
помогите сделал чтобы писало игрок не в наручниках но неработает хоть одеты наручники всеровно пишет не в наручниках 

Код:
CMD:convoy(playerid, params[])
{
    new playerID;
    if(antiflood[playerid] > 0) return SendClientMessage(playerid, COLOR_WARNING,"Не флуди!");
    antiflood[playerid]++;
    if(PLAYER_DATA[playerid][data_LOGGED] == false) return SendClientMessage(playerid,COLOR_WARNING,"Вы не авторизованы на сервере!");
    if(!IsPlayerCops(playerid)) return SendClientMessage(playerid,COLOR_WARNING,"Вам недоступна данная команда!");
	if(sscanf(params,"i",playerID))
    return SendClientMessage(playerid, -1, "ИНФО: /convoy [ид игрока]");
    if(GetPVarInt(params[0],"PlayerCuffed") == 0)
	return SendClientMessage(playerid,COLOR_WARNING,"Игрок должен находиться в наручниках!");
    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;
}
 

Mirex

Руководитель проекта
Команда портала
Гл.Администратор
Золотой
21.12.2013
2 512
3
550
0
29
definehost.ru
Скриптер
@Aleksandr, покажите команду надевания наручников на игрока.

 

Aleksandr

Новичок
Пользователь
16.09.2014
300
13
0


Код:
CMD:cuff(playerid,params[])
{
if(antiflood[playerid] > 0) return SendClientMessage(playerid, COLOR_WARNING,"Не флуди!");
antiflood[playerid]++;
if(PLAYER_DATA[playerid][data_LOGGED] == false) return SendClientMessage(playerid,COLOR_WARNING,"Вы не авторизованы на сервере!");
if(!IsPlayerCops(playerid)) return SendClientMessage(playerid,COLOR_WARNING,"Вам недоступна данная команда!");
if(sscanf(params, "u", params[0])) return SendClientMessage(playerid,COLOR_WARNING,"Используйте: /cuff [ид]");
if(!IsPlayerConnected(params[0]))return  SendClientMessage(playerid,COLOR_WARNING,"Данного ID нет на сервере!");
if(PLAYER_DATA[params[0]][data_LOGGED] == false) return  SendClientMessage(playerid,COLOR_WARNING,"Данный игрок не прошел авторизацию!");
if(PLAYER_DATA[playerid][data_RANK] < 2 && PLAYER_DATA[playerid][data_MEMBER] != 8) return SendClientMessage(playerid,COLOR_WARNING,"Ваш ранг слишком мал для использования данной команды!");
new Float:x,Float:y,Float:z,str[145];
GetPlayerPos(params[0],x,y,z);
if(!PlayerToPoint(3.0, playerid, x,y,z)) return SendClientMessage(playerid,COLOR_WARNING,"Данный игрок слишком далеко от вас!");
if(GetPVarInt(params[0],"PlayerCuffed") == 1) return SendClientMessage(playerid,COLOR_WARNING,"Данный игрок уже в наручниках!");
SetPlayerSpecialAction(params[0], SPECIAL_ACTION_CUFFED);
SetPlayerAttachedObject(params[0],5,19418,6,0.020000,0.049999,-0.015000,-11.899997,-13.999941,-103.800086,1.110999,1.042000,1.934998);
SetPVarInt(params[0],"PlayerCuffed",1);
FreezePlayer(params[0]);
format(str,sizeof(str),"%s надел(а) наручники на %s",PLAYER_DATA[playerid][data_NAME],PLAYER_DATA[params[0]][data_NAME]);
ProxDetector(30.0, playerid, str,0xFF66CCFF,0xFF66CCFF,0xFF66CCFF,0xFF66CCFF,0xFF66CCFF);
return true;
}
 
Последнее редактирование модератором:

noname_idk

Гуру
Пользователь
19.07.2015
4 046
7
787
0
Скриптер
@Aleksandr, замените свою команду этой:

Код:
CMD:convoy(playerid, params[])
{
	new playerID;
	if(antiflood[playerid] > 0) return SendClientMessage(playerid, COLOR_WARNING,"Не флуди!");
	antiflood[playerid]++;
	if(PLAYER_DATA[playerid][data_LOGGED] == false) return SendClientMessage(playerid,COLOR_WARNING,"Вы не авторизованы на сервере!");
	if(!IsPlayerCops(playerid)) return SendClientMessage(playerid,COLOR_WARNING,"Вам недоступна данная команда!");
	if(sscanf(params,"i",playerID))
		return SendClientMessage(playerid, -1, "ИНФО: /convoy [ид игрока]");
	if(GetPVarInt(playerID,"PlayerCuffed") == 0)
		return SendClientMessage(playerid,COLOR_WARNING,"Игрок должен находиться в наручниках!");
	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;
} 
 

Florence_Sutener

Новичок
Пользователь
30.05.2022
3
0
0
Игрок
Такие ошибки:
E:\USER\Desktop\My Server\My server\gamemodes\danya.pwn(116125) : error 001: expected token: ")", but found "-rational value-"
E:\USER\Desktop\My Server\My server\gamemodes\danya.pwn(116125) : warning 215: expression has no effect
E:\USER\Desktop\My Server\My server\gamemodes\danya.pwn(116125) : error 001: expected token: ";", but found ")"
E:\USER\Desktop\My Server\My server\gamemodes\danya.pwn(116125) : error 029: invalid expression, assumed zero
E:\USER\Desktop\My Server\My server\gamemodes\danya.pwn(116125) : fatal error 107: too many error messages on one line

Compilation aborted.

Pawn compiler 3.10.8 Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.



CMD:convoy(playerid, params[])
{
if(!IsPlayerInPoliceTeam(playerid)) return SendClientMessage(playerid, 0x999999FF, "Вы не можете использовать это.");

new playerID;
if(sscanf(params,"i",playerid))
return SendClientMessage(playerid, -1, "Используйте: /convoy [id]");
if(!IsPlayerConnected(playerid))
return SendClientMessage(playerid, -1, "Такого игрока нет!");
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;
}


stock TurnPlayerFaceToPlayer(playerid,facingtoid)
{
new Float:angle;
new Float:misc = 5.0;
new Float:x, Float:y, Float:z;
new Float:ix, Float:iy, Float:iz;
GetPlayerPos(facingtoid, x, y, z);
GetPlayerPos(playerid, ix, iy, iz);
angle = 180.0-atan2(ix-x,iy-y);
angle += misc;
misc *= -1;
SetPlayerFacingAngle(playerid, angle+misc);
}


CMD:convoyoff(playerid, params[])
{
if(!GetPlayerEscort(playerid))
return SendClientMessage(playerid, -1, "Вы никого не конвоируете!");

new playerID = GetArrestid(playerid);
SendClientMessage(playerID, -1, "Ваш конвоир отпустил вас!");
SendClientMessage(playerid, -1, "Вы отпустили конвой!");
TogglePlayerControllable(playerID, 1);
ClearAnimations(playerID);
ClearValue(playerid);
return 1;
}
 
Статус
Закрыто для дальнейших ответов.