Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Система наблюдения SAMP-RP [Full Copy]

Статус
В этой теме нельзя размещать новые ответы.

Voorhis

Умник
Доброго времени суток пользователи портала.
Представляю вашему вниманию систему слежки с популярного проекта Samp-Rp.
Скрины:
Автор: Голубь
Автор вырезки: Voorhis

[✓] Присутствует также характеристика weaponshot
[✓] При нажатии `F` дается возможность управлять мышкой. Т.е. тоже самое управление как и кнопками, только мышкой.
[х] Отсутствие системы AFK. Т.е. в реконе не отображается статистика afk. Думаю не так уж и сложно будет вписать свою сис-му сюда.
Ну что же.. Приступим...


I Этап​
PHP:
#define 	getName(%1) PlayerInfo[%1][pName]

new Spectate[MAX_PLAYERS];
new SpecAd[MAX_PLAYERS];
new SpecID[MAX_PLAYERS];
new DisallowSpawn[MAX_PLAYERS];
new Float:SpecPlayer[MAX_PLAYERS][3];
new SpecPlayerInt[MAX_PLAYERS];
new SpecPlayerWorld[MAX_PLAYERS];
new Float:SpecPlayerAngle[MAX_PLAYERS];
new LastReconClick[MAX_PLAYERS][2];
new PlayerText:ReconPlayer[35],
    ReconBounds[MAX_PLAYERS][2],
    ReconSelect[MAX_PLAYERS],
    ReconSelectSub[MAX_PLAYERS];
new query[1024];
new NumberShotTarget[MAX_PLAYERS];
new TimeNumberShot[MAX_PLAYERS];
new TimeNumberShotTarget[MAX_PLAYERS];
new NumberShot[MAX_PLAYERS];
new AFKTime[MAX_PLAYERS];
new AFKTimeLast[MAX_PLAYERS];

stock Float:GetVehicleHP(vehicleid)
{
	new Float:vehhp;
	GetVehicleHealth(vehicleid, vehhp);
	return vehhp;
}
stock Float:GetPlayerHP(playerid)
{
	new Float:playhp;
	GetPlayerHealth(playerid, playhp);
	return playhp;
}
stock Float:GetPlayerARM(playerid)
{
	new Float:playarm;
	GetPlayerArmour(playerid, playarm);
	return playarm;
}

forward SpecPlayers(playerid);
public SpecPlayers(playerid)
{
	StartSpectate(playerid, SpecAd[playerid]);
}

stock StartSpectate(playerid, specid)
{
    DisallowSpawn[playerid] = 1;
	format(query, sizeof(query), "%s~n~ID: %d",getName(specid),specid);
    PlayerTextDrawSetString(playerid, ReconPlayer[6],query);
	if(IsPlayerInAnyVehicle(specid))
	{
		SetPlayerInterior(playerid,GetPlayerInterior(specid));
		SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(specid));
		TogglePlayerSpectating(playerid, 1);
		PlayerSpectateVehicle(playerid, GetPlayerVehicleID(specid));
	}
	else
	{
		SetPlayerInterior(playerid,GetPlayerInterior(specid));
		SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(specid));
		TogglePlayerSpectating(playerid, 1);
		PlayerSpectatePlayer(playerid, specid);
	}
	return true;
}

stock SubTextDelete(playerid)
{
	for(new i = 16; i < sizeof(ReconPlayer); i++)
		PlayerTextDrawHide(playerid, ReconPlayer[i]),DisableEnableReconButton(playerid, i, 0, 0);

    ReconSelectSub[playerid] = INVALID_TEXT_DRAW;

    DisableEnableReconButton(playerid, ReconSelect[playerid], 1);
	return 1;
}

stock StopSpectate(playerid)
{
	if(!Spectate[playerid]) return true;
	DisallowSpawn[playerid] = 0;
	if(SpecAd[playerid] != INVALID_PLAYER_ID) SpecID[SpecAd[playerid]] = 65535;
    SpecAd[playerid] = 65535;
    PlayerTextDrawHide(playerid, ReconPlayer[34]);
	TogglePlayerSpectating(playerid, 0);
	TogglePlayerControllable(playerid, true);

	for(new i = 0; i < sizeof(ReconPlayer); i++)
    	PlayerTextDrawHide(playerid, ReconPlayer[i]);

    for(new i = 7; i < sizeof(ReconPlayer); i++)
		DisableEnableReconButton(playerid, i, 0, 0);

    CancelSelectTextDraw(playerid);
    PlayerTextDrawSetString(playerid, ReconPlayer[5],"");
    PlayerTextDrawSetString(playerid, ReconPlayer[6],"");
	return true;
}

stock DisableEnableReconButton(playerid, button, enable, show = 1)
{
    PlayerTextDrawHide(playerid, ReconPlayer[button]);

	if(!enable)
	PlayerTextDrawBoxColor(playerid,ReconPlayer[button], 0x00000055);
	else
	PlayerTextDrawBoxColor(playerid,ReconPlayer[button], 0xD97700AA);

	if(show) PlayerTextDrawShow(playerid, ReconPlayer[button]);
	return 1;
}

PlayerText:CreateReconButton(playerid, Float:Xpos, Float:Ypos, button_text[])
{
	new PlayerText:txtInit;
	txtInit = CreatePlayerTextDraw(playerid,Xpos, Ypos, button_text);
	PlayerTextDrawBackgroundColor(playerid,txtInit, 0x000000AA);
	PlayerTextDrawFont(playerid,txtInit, 1);
	PlayerTextDrawLetterSize(playerid,txtInit, 0.200, 1.100);
	PlayerTextDrawColor(playerid,txtInit, 0xAAAAAAAA);
	PlayerTextDrawSetOutline(playerid,txtInit, 0);
	PlayerTextDrawAlignment(playerid,txtInit, 2);
	PlayerTextDrawSetProportional(playerid,txtInit, 1);
	PlayerTextDrawSetShadow(playerid,txtInit, 0);
	PlayerTextDrawUseBox(playerid,txtInit, 1);
	PlayerTextDrawBoxColor(playerid,txtInit, 0x00000055);
	PlayerTextDrawTextSize(playerid,txtInit, 11.000, 60.000);
	PlayerTextDrawSetSelectable(playerid, txtInit, 1);
	return txtInit;
}

new MaxSpeedCar[212] = {
		87,81,103,-1,73,91,-1,-1,-1,-1,-1,123,93,-1,-1,106,-1,-1,64,82,93,82,82,-1,75,-1,94,-1,
		-1,112,-1,-1,-1,-1,92,-1,85,-1,-1,93,-1,-1,-1,-1,62,90,-1,-1,-1,-1,-1,107,-1,-1,-1,-1,-1,-1,87,-1,-1,88 ,-1,79 ,-1,-1,
		87,87,79,-1,-1,61,-1,-1,82,96,-1,103,75,77,102,-1,-1,-1,-1,-1,-1,-1,-1,77,-1,82,78,-1,119,97,90,-1,-1,-1,-1,-1,119,119,-1,-1,99,92,-1,-1,-1,-1,
		-1,-1,-1,-1,87,87,91,-1,-1,88,95,-1,-1,-1,-1,87,82,-1,82,-1,-1,-1,90,93,87,96,-1,-1,-1,82,112,91,73,-1,81,82,79,-1,85,80,87,-1,-1,84,87,-1,-1,86,98,94,
		85,98,-1,-1,91,88,96,-1,-1,-1,-1,-1,-1,-1,87,87,-1,-1,87,85,88,-1,-1,-1,87,87,91,-1,90,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,82,-1,93,95,87,73,-1
};
II Этап​
PHP:
ReconPlayer[0] = CreatePlayerTextDraw(playerid,530.000000, 180.000000, "x");
	PlayerTextDrawBackgroundColor(playerid, ReconPlayer[0], 0x000000AA);
	PlayerTextDrawFont(playerid, ReconPlayer[0], 3);
	PlayerTextDrawLetterSize(playerid,ReconPlayer[0], 0.000000, 20.600000);
	PlayerTextDrawColor(playerid,ReconPlayer[0], 0xE1E1E1AA);
	PlayerTextDrawSetOutline(playerid,ReconPlayer[0], 1);
	PlayerTextDrawSetProportional(playerid,ReconPlayer[0], 1);
	PlayerTextDrawSetShadow(playerid,ReconPlayer[0], 2);
	PlayerTextDrawUseBox(playerid,ReconPlayer[0], 1);
	PlayerTextDrawBoxColor(playerid,ReconPlayer[0], 0x00000055);
	PlayerTextDrawTextSize(playerid,ReconPlayer[0], 640.000, 0.000000);
	ReconPlayer[1] = CreatePlayerTextDraw(playerid,529.000000, 179.000000, "x");
	PlayerTextDrawBackgroundColor(playerid,ReconPlayer[1], 0x000000AA);
	PlayerTextDrawFont(playerid,ReconPlayer[1], 3);
	PlayerTextDrawLetterSize(playerid,ReconPlayer[1], 0.000000, 20.600000);
	PlayerTextDrawColor(playerid,ReconPlayer[1], 0xE1E1E1AA);
	PlayerTextDrawSetOutline(playerid,ReconPlayer[1], 1);
	PlayerTextDrawSetProportional(playerid,ReconPlayer[1], 1);
	PlayerTextDrawSetShadow(playerid,ReconPlayer[1], 2);
	PlayerTextDrawUseBox(playerid,ReconPlayer[1], 1);
	PlayerTextDrawBoxColor(playerid,ReconPlayer[1], 0xAAAAAA33);
	PlayerTextDrawTextSize(playerid,ReconPlayer[1], 641.000000, 0.000000);
	ReconPlayer[2] = CreatePlayerTextDraw(playerid,0.000, 180.000, "x");
	PlayerTextDrawBackgroundColor(playerid,ReconPlayer[2], 0x000000AA);
	PlayerTextDrawFont(playerid,ReconPlayer[2], 3);
	PlayerTextDrawLetterSize(playerid,ReconPlayer[2], 0.000000, 18.540);
	PlayerTextDrawColor(playerid,ReconPlayer[2], 0xE1E1E1AA);
	PlayerTextDrawSetOutline(playerid,ReconPlayer[2], 1);
	PlayerTextDrawSetProportional(playerid,ReconPlayer[2], 1);
	PlayerTextDrawSetShadow(playerid,ReconPlayer[2], 2);
	PlayerTextDrawUseBox(playerid,ReconPlayer[2], 1);
	PlayerTextDrawBoxColor(playerid,ReconPlayer[2], 0x00000055);
	PlayerTextDrawTextSize(playerid,ReconPlayer[2], 70.000, 0.000000);
	ReconPlayer[3] = CreatePlayerTextDraw(playerid,0.000, 179.000, "x");
	PlayerTextDrawBackgroundColor(playerid,ReconPlayer[3], 0x000000AA);
	PlayerTextDrawFont(playerid,ReconPlayer[3], 3);
	PlayerTextDrawLetterSize(playerid,ReconPlayer[3], 0.000000, 18.746);
	PlayerTextDrawColor(playerid,ReconPlayer[3], 0xE1E1E1AA);
	PlayerTextDrawSetOutline(playerid,ReconPlayer[3], 1);
	PlayerTextDrawSetProportional(playerid,ReconPlayer[3], 1);
	PlayerTextDrawSetShadow(playerid,ReconPlayer[3], 2);
	PlayerTextDrawUseBox(playerid,ReconPlayer[3], 1);
	PlayerTextDrawBoxColor(playerid,ReconPlayer[3], 0xAAAAAA33);
	PlayerTextDrawTextSize(playerid,ReconPlayer[3], 71.000, 0.000000);
	ReconPlayer[4] = CreatePlayerTextDraw(playerid,535.000, 210.000, "~n~~g~::Level:~n~~g~::Warns:~n~~r~::Armour:~n~~r~::Health:~n~~b~::CarHP:~n~~b~::Speed:~n~~y~::Ping:~n~~y~::Ammo:~n~~p~::Shot:~n~~p~::TimeShot:~n~~g~::AFKTime:~n~~g~::Engine:");
	PlayerTextDrawBackgroundColor(playerid,ReconPlayer[4], 0x000000AA);
	PlayerTextDrawSetProportional(playerid,ReconPlayer[4], 1);
	PlayerTextDrawLetterSize(playerid,ReconPlayer[4], 0.200, 1.100);
	PlayerTextDrawColor(playerid,ReconPlayer[4], 0xFFFFFFAA);
	PlayerTextDrawFont(playerid,ReconPlayer[4], 1);
	PlayerTextDrawSetShadow(playerid,ReconPlayer[4], 2);
	PlayerTextDrawSetOutline(playerid,ReconPlayer[4], 1);
	PlayerTextDrawUseBox(playerid,ReconPlayer[4], 0);
	ReconPlayer[5] = CreatePlayerTextDraw(playerid,575.000, 210.000, " ");
	PlayerTextDrawBackgroundColor(playerid,ReconPlayer[5], 0x000000AA);
	PlayerTextDrawSetProportional(playerid,ReconPlayer[5], 1);
	PlayerTextDrawLetterSize(playerid,ReconPlayer[5], 0.200, 1.100);
	PlayerTextDrawColor(playerid,ReconPlayer[5], 0xFFFFFFAA);
	PlayerTextDrawFont(playerid,ReconPlayer[5], 1);
	PlayerTextDrawSetShadow(playerid,ReconPlayer[5], 2);
	PlayerTextDrawSetOutline(playerid,ReconPlayer[5], 1);
	PlayerTextDrawUseBox(playerid,ReconPlayer[5], 0);
	ReconPlayer[6] = CreatePlayerTextDraw(playerid,585.000000, 190.000000, " ");
	PlayerTextDrawBackgroundColor(playerid,ReconPlayer[6], 0x000000AA);
	PlayerTextDrawSetProportional(playerid,ReconPlayer[6], 1);
	PlayerTextDrawLetterSize(playerid,ReconPlayer[6], 0.300, 1.400);
	PlayerTextDrawColor(playerid,ReconPlayer[6], 0xFFFFFFAA);
	PlayerTextDrawFont(playerid,ReconPlayer[6], 1);
	PlayerTextDrawAlignment(playerid,ReconPlayer[6], 2);
	PlayerTextDrawSetShadow(playerid,ReconPlayer[6], 2);
	PlayerTextDrawSetOutline(playerid,ReconPlayer[6], 1);
	PlayerTextDrawUseBox(playerid,ReconPlayer[6], 0);
	ReconPlayer[7] = CreateReconButton(playerid,35.000, 195.000, "Change");
	ReconPlayer[8] = CreateReconButton(playerid,35.000, 212.000, "Check >>");
	ReconPlayer[9] = CreateReconButton(playerid,35.000, 229.000, "Drop >>");
	ReconPlayer[10] = CreateReconButton(playerid,35.000, 246.000, "Kick >>");
	ReconPlayer[11] = CreateReconButton(playerid,35.000, 263.000, "Warn");
	ReconPlayer[12] = CreateReconButton(playerid,35.000, 280.000, "Ban >>");
	ReconPlayer[13] = CreateReconButton(playerid,35.000, 297.000, "Stats >>");
	ReconPlayer[14] = CreateReconButton(playerid,35.000, 314.000, "Refresh");
	ReconPlayer[15] = CreateReconButton(playerid,35.000, 331.000, "Exit");
	ReconPlayer[16] = CreateReconButton(playerid,100.000, 212.000, "Check-GM");//Check >>
	ReconPlayer[17] = CreateReconButton(playerid,100.000, 229.000, "Check-GM2");//Check >>
	ReconPlayer[18] = CreateReconButton(playerid,100.000, 246.000, "Check-GMCar");//Check >>
	ReconPlayer[19] = CreateReconButton(playerid,100.000, 263.000, "ResetShot");//Check >>
	ReconPlayer[20] = CreateReconButton(playerid,100.000, 229.000, "Mute");//Drop >>
	ReconPlayer[21] = CreateReconButton(playerid,100.000, 246.000, "Slap");//Drop >>
	ReconPlayer[22] = CreateReconButton(playerid,100.000, 263.000, "Prison");//Drop >>
	ReconPlayer[23] = CreateReconButton(playerid,100.000, 280.000, "Freeze");//Drop >>
	ReconPlayer[24] = CreateReconButton(playerid,100.000, 297.000, "UnFreeze");//Drop >>
	ReconPlayer[25] = CreateReconButton(playerid,100.000, 246.000, "SKick");//Kick >>
	ReconPlayer[26] = CreateReconButton(playerid,100.000, 263.000, "Kick");//Kick >>
	ReconPlayer[27] = CreateReconButton(playerid,100.000, 280.000, "Ban");//Ban >>
	ReconPlayer[28] = CreateReconButton(playerid,100.000, 297.000, "SBan");//Ban >>
	ReconPlayer[29] = CreateReconButton(playerid,100.000, 314.000, "IBan");//Ban >>
	ReconPlayer[30] = CreateReconButton(playerid,100.000, 297.000, "Stats");//Stats >>
	ReconPlayer[31] = CreateReconButton(playerid,100.000, 314.000, "IWep");//Stats >>
	ReconPlayer[32] = CreateReconButton(playerid,100.000, 331.000, "GetIP");//Stats >>
	ReconPlayer[33] = CreateReconButton(playerid,100.000, 348.000, "Serial/S0b");//Stats >>
	ReconPlayer[34] = CreateReconButton(playerid,585.00, 350.00, "Help"); // Рекон клавиша
	
	LastReconClick[playerid][0] = 0;
	SpecID[playerid] = 65535;
	LastReconClick[playerid][1] = 0;
	AFKTimeLast[playerid] = 0;
	AFKTime[playerid] = 0;
	ReconSelect[playerid] = INVALID_TEXT_DRAW;
	ReconSelectSub[playerid] = INVALID_TEXT_DRAW;
	NumberShot[playerid] = 0;
	NumberShotTarget[playerid] = 0;
	DisallowSpawn[playerid] = 0;
	TimeNumberShot[playerid] = 0;
	TimeNumberShotTarget[playerid] = 0;
III Этап​
PHP:
if(IsPlayerConnected(playerid))
	{
		new Keys,ud,lr;
    	GetPlayerKeys(playerid,Keys,ud,lr);

		if(LastReconClick[playerid][0] != ud) LastReconClick[playerid][0] = 0;
		if(LastReconClick[playerid][1] != lr) LastReconClick[playerid][1] = 0;

		if(Spectate[playerid] && lr == KEY_LEFT && !LastReconClick[playerid][1])
		{
		    LastReconClick[playerid][1] = lr;
		    PlayerPlaySound(playerid, 1084, 0.0, 0.0, 0.0);
		    SubTextDelete(playerid);
		    DisableEnableReconButton(playerid, ReconSelect[playerid], 1);
		    return 1;
		}

		if(Spectate[playerid] && lr == KEY_RIGHT && !LastReconClick[playerid][1])
		{
		    LastReconClick[playerid][1] = lr;
		    PlayerPlaySound(playerid, 1084, 0.0, 0.0, 0.0);

		    if(ReconSelectSub[playerid] == INVALID_TEXT_DRAW)
	    	OnPlayerClickPlayerTextDraw(playerid, ReconPlayer[ReconSelect[playerid]]);
	    	else
	    	OnPlayerClickPlayerTextDraw(playerid, ReconPlayer[ReconSelectSub[playerid]]);

	    	return 1;
		}

		if(Spectate[playerid] && ud == KEY_UP && !LastReconClick[playerid][0])
		{
		    PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
			LastReconClick[playerid][0] = ud;
	    	if(ReconSelectSub[playerid] == INVALID_TEXT_DRAW)
	    	{
	    	    DisableEnableReconButton(playerid, ReconSelect[playerid], 0);
	    		if(ReconSelect[playerid] <= 7)
	    		{
	    		ReconSelect[playerid] = 15;
   				DisableEnableReconButton(playerid, ReconSelect[playerid], 1);
	   		 	}
	   		 	else
	   		 	{
	   		 	ReconSelect[playerid]--;
	    		DisableEnableReconButton(playerid, ReconSelect[playerid], 1);
	    		}
	    		return 1;
			}
			else
			{
			    DisableEnableReconButton(playerid, ReconSelectSub[playerid], 0);
				if(ReconSelectSub[playerid] <= ReconBounds[playerid][0])
				{
				ReconSelectSub[playerid] = ReconBounds[playerid][1];
   				DisableEnableReconButton(playerid, ReconSelectSub[playerid], 1);
				}
				else
				{
				ReconSelectSub[playerid]--;
   				DisableEnableReconButton(playerid, ReconSelectSub[playerid], 1);
				}
			}
		}
		if(Spectate[playerid] && ud == KEY_DOWN && !LastReconClick[playerid][0])
		{
		    PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
			LastReconClick[playerid][0] = ud;
	    	if(ReconSelectSub[playerid] == INVALID_TEXT_DRAW)
	    	{
	      	    DisableEnableReconButton(playerid, ReconSelect[playerid], 0);
	    		if(ReconSelect[playerid] >= 15)
	    		{
	    			ReconSelect[playerid] = 7;
    	 			DisableEnableReconButton(playerid, ReconSelect[playerid], 1);
	    		}
	    		else
	    		{
	    			ReconSelect[playerid]++;
	    			DisableEnableReconButton(playerid, ReconSelect[playerid], 1);
	    		}
	    		return 1;
			}
			else
			{
			    DisableEnableReconButton(playerid, ReconSelectSub[playerid], 0);
				if(ReconSelectSub[playerid] >= ReconBounds[playerid][1])
				{
				ReconSelectSub[playerid] = ReconBounds[playerid][0];
   				DisableEnableReconButton(playerid, ReconSelectSub[playerid], 1);
				}
				else
				{
				ReconSelectSub[playerid]++;
   				DisableEnableReconButton(playerid, ReconSelectSub[playerid], 1);
				}
			}
		}
	}
	if(Spectate[playerid] && SpecAd[playerid] != INVALID_PLAYER_ID) return PlayerTextDrawShow(playerid, ReconPlayer[34]);
IV Этап​
PHP:
if(Spectate[playerid] && PlayerInfo[playerid][pAdmin] > 1)
	{
	    if(ReconPlayer[7] == playertextid) return SubTextDelete(playerid),ShowPlayerDialog(playerid, 114, DIALOG_STYLE_INPUT, " ", "Введите ID", "OK", "Закрыть");
        else if(ReconPlayer[8] == playertextid)
        {
            DisableEnableReconButton(playerid, ReconSelect[playerid], 0);

            for(new i = 16; i < sizeof(ReconPlayer); i++)
    		PlayerTextDrawHide(playerid, ReconPlayer[i]);

            for(new i = 16; i < 20; i++)
    		PlayerTextDrawShow(playerid, ReconPlayer[i]);

    		ReconBounds[playerid][0] = 16;
    		ReconBounds[playerid][1] = 19;

    		ReconSelectSub[playerid] = ReconBounds[playerid][0];
    		DisableEnableReconButton(playerid, ReconSelectSub[playerid], 1);
        }
        else if(ReconPlayer[9] == playertextid)
        {
            DisableEnableReconButton(playerid, ReconSelect[playerid], 0);

            for(new i = 16; i < sizeof(ReconPlayer); i++)
    		PlayerTextDrawHide(playerid, ReconPlayer[i]);

            for(new i = 20; i < 25; i++)
    		PlayerTextDrawShow(playerid, ReconPlayer[i]);

    		ReconBounds[playerid][0] = 20;
    		ReconBounds[playerid][1] = 24;

    		ReconSelectSub[playerid] = ReconBounds[playerid][0];
    		DisableEnableReconButton(playerid, ReconSelectSub[playerid], 1);
        }
        else if(ReconPlayer[10] == playertextid)
        {
            DisableEnableReconButton(playerid, ReconSelect[playerid], 0);

            for(new i = 16; i < sizeof(ReconPlayer); i++)
    			PlayerTextDrawHide(playerid, ReconPlayer[i]);

			PlayerTextDrawShow(playerid, ReconPlayer[25]);
			PlayerTextDrawShow(playerid, ReconPlayer[26]);

			ReconBounds[playerid][0] = 25;
    		ReconBounds[playerid][1] = 26;

    		ReconSelectSub[playerid] = ReconBounds[playerid][0];
    		DisableEnableReconButton(playerid, ReconSelectSub[playerid], 1);

        }
        else if(ReconPlayer[12] == playertextid)
        {
            DisableEnableReconButton(playerid, ReconSelect[playerid], 0);

            for(new i = 16; i < sizeof(ReconPlayer); i++)
    		PlayerTextDrawHide(playerid, ReconPlayer[i]);

            for(new i = 27; i < 30; i++)
    		PlayerTextDrawShow(playerid, ReconPlayer[i]);

    		ReconBounds[playerid][0] = 27;
    		ReconBounds[playerid][1] = 29;

    		ReconSelectSub[playerid] = ReconBounds[playerid][0];
    		DisableEnableReconButton(playerid, ReconSelectSub[playerid], 1);
        }
        else if(ReconPlayer[13] == playertextid)
        {
            DisableEnableReconButton(playerid, ReconSelect[playerid], 0);

            for(new i = 16; i < sizeof(ReconPlayer); i++)
    		PlayerTextDrawHide(playerid, ReconPlayer[i]);

            for(new i = 30; i < 34; i++)
    		PlayerTextDrawShow(playerid, ReconPlayer[i]);

    		ReconBounds[playerid][0] = 30;
    		ReconBounds[playerid][1] = 33;

    		ReconSelectSub[playerid] = ReconBounds[playerid][0];
    		DisableEnableReconButton(playerid, ReconSelectSub[playerid], 1);
        }
		else if(ReconPlayer[11] == playertextid) return SubTextDelete(playerid),ShowPlayerDialog(playerid,117,DIALOG_STYLE_INPUT,"Варн","'	Введите причину		'","Варн","Выход");
        else if(ReconPlayer[14] == playertextid) return SubTextDelete(playerid),StartSpectate(playerid,SpecAd[playerid]);
		else if(ReconPlayer[15] == playertextid) return SubTextDelete(playerid),CallLocalFunction("OnPlayerCommandText", "is", playerid, "/re OFF");
		else if(ReconPlayer[16] == playertextid)
		{
			new Float:boomx, Float:boomy, Float:boomz;
			GetPlayerPos(SpecAd[playerid],boomx, boomy, boomz);
			return CreateExplosion(boomx, boomy , boomz-8.9, 5, 0.5);
		}
		else if(ReconPlayer[17] == playertextid) return SetPlayerHealth(SpecAd[playerid], GetPlayerHP(SpecAd[playerid])-10.0);
		else if(ReconPlayer[18] == playertextid) return SetVehicleHealth(GetPlayerVehicleID(SpecAd[playerid]), GetVehicleHP(GetPlayerVehicleID(SpecAd[playerid]))-10.0);
		else if(ReconPlayer[19] == playertextid)
		{
		    TimeNumberShotTarget[SpecAd[playerid]] = 0;
		    TimeNumberShot[SpecAd[playerid]] = 0;
		}
		else if(ReconPlayer[20] == playertextid)
		{
		    format(query, sizeof(query), "/mute %d 5",SpecAd[playerid]);
			return CallLocalFunction("OnPlayerCommandText", "is", playerid, query);
		    //return SCM(playerid,COLOR_GREY,"Произошла ошибка. Бан чата не выдался");
		}
		else if(ReconPlayer[21] == playertextid)
		{
		    format(query, sizeof(query), "/slap %d",SpecAd[playerid]);
			return CallLocalFunction("OnPlayerCommandText", "is", playerid, query);
		}
		else if(ReconPlayer[22] == playertextid)
		{
		    format(query, sizeof(query), "/prison %d",SpecAd[playerid]);
			return CallLocalFunction("OnPlayerCommandText", "is", playerid, query);
		}
		else if(ReconPlayer[23] == playertextid)
		{
		    format(query, sizeof(query), "/freeze %d",SpecAd[playerid]);
			return CallLocalFunction("OnPlayerCommandText", "is", playerid, query);
		}
		else if(ReconPlayer[24] == playertextid)
		{
		    format(query, sizeof(query), "/unfreeze %d",SpecAd[playerid]);
			return CallLocalFunction("OnPlayerCommandText", "is", playerid, query);
		}
		else if(ReconPlayer[25] == playertextid)
		{
		    SubTextDelete(playerid);
		    format(query, sizeof(query), "/skick %d",SpecAd[playerid]);
			return CallLocalFunction("OnPlayerCommandText", "is", playerid, query);
		}
		else if(ReconPlayer[26] == playertextid) return SubTextDelete(playerid),ShowPlayerDialog(playerid,116,DIALOG_STYLE_INPUT,"Кик","'		Введите причину		'","Кикнуть","Выход");
		else if(ReconPlayer[27] == playertextid) return SubTextDelete(playerid),ShowPlayerDialog(playerid,118,DIALOG_STYLE_INPUT,"Бан","'		Введите причину		'","Бан","Выход");
        else if(ReconPlayer[28] == playertextid) return SubTextDelete(playerid),ShowPlayerDialog(playerid,119,DIALOG_STYLE_INPUT,"Бан","'		Введите причину		'","Бан","Выход");
        else if(ReconPlayer[29] == playertextid) return SubTextDelete(playerid),ShowPlayerDialog(playerid,120,DIALOG_STYLE_INPUT,"Бан","'		Введите причину		'","Бан","Выход");
		else if(ReconPlayer[30] == playertextid)
		{
		    SubTextDelete(playerid);
		    format(query, sizeof(query), "/getstats %d",SpecAd[playerid]);
			return CallLocalFunction("OnPlayerCommandText", "is", playerid, query);
		}
		else if(ReconPlayer[31] == playertextid)
		{
		    SubTextDelete(playerid);
		    format(query, sizeof(query), "/iwep %d",SpecAd[playerid]);
			return CallLocalFunction("OnPlayerCommandText", "is", playerid, query);
		}
		else if(ReconPlayer[32] == playertextid)
		{
		    SubTextDelete(playerid);
		    format(query, sizeof(query), "/getip %d",SpecAd[playerid]);
			return CallLocalFunction("OnPlayerCommandText", "is", playerid, query);
		}
		else if(ReconPlayer[33] == playertextid)
		{
		    SubTextDelete(playerid);
		    format(query, sizeof(query), "/getserial %d",SpecAd[playerid]);
			return CallLocalFunction("OnPlayerCommandText", "is", playerid, query);
		}
	    else if(playertextid == ReconPlayer[34])
	    {
			new reconstr[2800];
	    	strcat(reconstr,"{009933}Level:{FFFFFF} Лвл | Количество exp / Кол. exp необходимое для получения след. лвл\n");
	    	strcat(reconstr,"{009933}Warns:{FFFFFF} Количество варнов\n{C0C0C0}\tЕсли число не отрицательное, то у игрока нет варнов, но они были раньше\n");
	    	strcat(reconstr,"{009933}Armour:{FFFFFF} Броня\n{009933}Health:{FFFFFF} Здоровье\n{009933}CarHP:{FFFFFF} Здоровье машины\n{C0C0C0}\tТолько если игрок в транспорте,иначе значение будет 0\n");
	    	strcat(reconstr,"{009933}Speed:{FFFFFF} Скорость транспорта / Макс. Скорость транспорта\n{C0C0C0}\tТолько если игрок в транспорте\n");
	    	strcat(reconstr,"{009933}Ping:{FFFFFF} Пинг\n");
	    	strcat(reconstr,"{009933}Ammo:{FFFFFF} Количество патронов на клиенте | Количество патронов на сервере\n{C0C0C0}\tТо что оображается игроку | Реальнок количество патронов\n");
	    	strcat(reconstr,"{C0C0C0}\tПоказывает патроны оружия, которое у игрока в данный момент в руках\n");
	    	strcat(reconstr,"{009933}Shot:{FFFFFF} Количество выстрелов / Количество попаданий | Процент попаданий\n");
	    	strcat(reconstr,"{C0C0C0}\tСервер подсчитывает количество выстрелов сделанных игроком, пока он онлайн\n\tНа глаз можно определить, использует ли игрок AIM\n");
	    	strcat(reconstr,"{009933}TimeShot:{FFFFFF} Количество выстрелов / Количество попаданий | Процент попаданий\n");
	    	strcat(reconstr,"{C0C0C0}\tТоже самое, что предыдущая строка, но счетчик обнуляется каждые 10 минут\n\tВ меню Recon можно обнулить в любой момент - \"ResetShot\"\n");
            strcat(reconstr,"{009933}AFKTime:{FFFFFF} Время игры и время проведенее в афк\n");
			strcat(reconstr,"{009933}Engine:{FFFFFF} ON - Двигатель включен / OFF - Выключен / - Не в машине");
			return ShowPlayerDialog(playerid,17012,0,"Help",reconstr,"Закрыть","");
    	}
	}
V Этап​
PHP:
	if(SpecID[playerid] != INVALID_PLAYER_ID)
    if(Spectate[SpecID[playerid]] == 1 && SpecAd[SpecID[playerid]] == playerid)
	{
		GameTextForPlayer(SpecID[playerid], "~r~~n~PLAYER DISCONNECT", 5000, 4);
		ShowPlayerDialog(SpecID[playerid], 115, DIALOG_STYLE_MSGBOX, "Игрок вышел", "Игрок, за которым вы наблюдали вышел из игры.\nЖелаете отключить Recon?", "Да", "Нет");
        DisallowSpawn[playerid] = 1;
	}
	if(SpecAd[playerid] != 65535)
  	{
		SpecID[SpecAd[playerid]] = 65535;
		SpecAd[playerid] = 65535;
  	}
    SpecID[playerid] = 65535;
VI Этап​
PHP:
if(DisallowSpawn[playerid])
	{
	    DisallowSpawn[playerid] = 0;
		TogglePlayerSpectating(playerid, 1);
		return 0;
	}
	if(Spectate[playerid])
    {
		Spectate[playerid] = 0;
		SetPlayerPos(playerid,SpecPlayer[playerid][0],SpecPlayer[playerid][1],SpecPlayer[playerid][2]);
		SetPlayerInterior(playerid,SpecPlayerInt[playerid]);
		SetPlayerVirtualWorld(playerid,SpecPlayerWorld[playerid]);
		SetPlayerFacingAngle(playerid, SpecPlayerAngle[playerid]);
		PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0);
		SetPlayerHealth(playerid, 255.0);
		return 1;
    }
VII Этап​
PHP:
	if(newkeys & KEY_SECONDARY_ATTACK && Spectate[playerid])
	{
	    DisableEnableReconButton(playerid, ReconSelect[playerid], 0);
	    return SelectTextDraw(playerid, 0xD97700AA);
	}
    if(newkeys & KEY_SPRINT && Spectate[playerid])
	{
	    PlayerPlaySound(playerid, 1084, 0.0, 0.0, 0.0);

		if(ReconSelectSub[playerid] == INVALID_TEXT_DRAW)
	    OnPlayerClickPlayerTextDraw(playerid, ReconPlayer[ReconSelect[playerid]]);
	    else
	    OnPlayerClickPlayerTextDraw(playerid, ReconPlayer[ReconSelectSub[playerid]]);

	    return 1;
	}
VIII Этап​
PHP:
if(Spectate[playerid] && SpecAd[playerid] != INVALID_PLAYER_ID)
{
	new tttgtg;
	tttgtg = GetPlayerAmmo(SpecAd[playerid]);
	new Float:health;
	GetVehicleHealth(GetPlayerVehicleID(SpecAd[playerid]),health);
	new Float:hppp;
	new Float:aermor;
	GetPlayerArmour(SpecAd[playerid],aermor);
	GetPlayerHealth(SpecAd[playerid],hppp);
	new Float:onepercent = NumberShot[SpecAd[playerid]]/100;
	new percentshot = floatround(onepercent)*NumberShotTarget[SpecAd[playerid]];
	new Float:tonepercent = TimeNumberShot[SpecAd[playerid]]/100;
	new tpercentshot = floatround(tonepercent)*TimeNumberShotTarget[SpecAd[playerid]];
	new engines[5], maxspeed[6];
	if(PlayerInfo[SpecAd[playerid]][pAFK] >= 3) // Вписывайте свою афк проверку
	{
		format(query, sizeof(query), "%s~n~ID: %d  ~r~AFK",getName(SpecAd[playerid]),SpecAd[playerid]);
		PlayerTextDrawSetString(playerid, ReconPlayer[6],query);
	}
	else
	{
		format(query, sizeof(query), "%s~n~ID: %d",getName(SpecAd[playerid]),SpecAd[playerid]);
		PlayerTextDrawSetString(playerid, ReconPlayer[6],query);
	}
	if(GetPlayerState(SpecAd[playerid]) != PLAYER_STATE_DRIVER) engines = "-", maxspeed = "0";
	else if(GetPlayerState(SpecAd[playerid]) == PLAYER_STATE_DRIVER)
	{
		GetVehicleParamsEx(GetPlayerVehicleID(SpecAd[playerid]),engine,lights,alarm,doors,bonnet,boot,objective);
		if(engine == 1) engines = "ON";
		else engines = "OFF";
		switch(GetPlayerState(SpecAd[playerid]))
		{
			case 2: 
			{
				format(maxspeed, sizeof(maxspeed), "%d", MaxSpeedCar[GetVehicleModel(GetPlayerVehicleID(SpecAd[playerid]))-400]);
			}
		}
	}
	format(query, sizeof(query), "~n~%d : %d / %d~n~%d~n~%.0f~n~%.0f~n~%.0f~n~%d / %s~n~%d~n~%d : %d~n~%d / %d : %d%%~n~%d / %d : %d%%~n~%d : %d~n~%s",
	PlayerInfo[SpecAd[playerid]][pLevel], PlayerInfo[SpecAd[playerid]][pExp], (PlayerInfo[SpecAd[playerid]][pLevel]+1)*4, PlayerInfo[SpecAd[playerid]][pWarns], aermor,hppp,health,SpeedVehicle(SpecAd[playerid]),maxspeed,GetPlayerPing(SpecAd[playerid]),tttgtg,0,NumberShot[SpecAd[playerid]],NumberShotTarget[SpecAd[playerid]],percentshot,TimeNumberShot[SpecAd[playerid]],TimeNumberShotTarget[SpecAd[playerid]],tpercentshot,AFKTime[SpecAd[playerid]],AFKTimeLast[SpecAd[playerid]],engines);
	PlayerTextDrawSetString(playerid, ReconPlayer[5],query);
}
IX Этап​
)]
PHP:
case 114:
		{
			if(!response) return 1;
			if(SpecAd[playerid] != INVALID_PLAYER_ID) SpecID[SpecAd[playerid]] = 65535;
			SpecAd[playerid] = 65535;
			new mess[40];format(mess, sizeof(mess), "/re %s",inputtext);CallLocalFunction("OnPlayerCommandText", "is", playerid, mess);
		}
		case 115: StopSpectate(playerid);	
		case 116:
        {
			if(response){new mess[40];format(mess, sizeof(mess), "/kick %d %s",SpecAd[playerid],inputtext);CallLocalFunction("OnPlayerCommandText", "is", playerid, mess);}
		}
		case 117:
        {
			if(response){new mess[40];format(mess, sizeof(mess), "/warn %d %s",SpecAd[playerid],inputtext);CallLocalFunction("OnPlayerCommandText", "is", playerid, mess);}
		}
		case 118:
        {
			if(response){new mess[40];format(mess, sizeof(mess), "/ban %d %s",SpecAd[playerid],inputtext);CallLocalFunction("OnPlayerCommandText", "is", playerid, mess);}
		}
		case 119:
        {
			if(response){new mess[40];format(mess, sizeof(mess), "/sban %d %s",SpecAd[playerid],inputtext);CallLocalFunction("OnPlayerCommandText", "is", playerid, mess);}
		}
		case 120:
        {
			if(response){new mess[40];format(mess, sizeof(mess), "/iban %d %s",SpecAd[playerid],inputtext);CallLocalFunction("OnPlayerCommandText", "is", playerid, mess);}
		}
X Этап​
PHP:
	if(hittype == BULLET_HIT_TYPE_PLAYER)
	if(IsPlayerStreamedIn(hitid, playerid))
	if(GetPlayerARM(hitid) <= 0.0 && GetPlayerHP(hitid) > 0.0) NumberShotTarget[playerid]++,TimeNumberShotTarget[playerid]++;

	if(hittype == BULLET_HIT_TYPE_VEHICLE)
	if(IsVehicleStreamedIn(hitid, playerid))
	if(GetVehicleHP(hitid) > 0.0)
	TimeNumberShotTarget[playerid]++,NumberShotTarget[playerid]++;

	NumberShot[playerid]++;
	TimeNumberShot[playerid]++;
XI Этап. Завершение​
PHP:
CMD:recon(playerid, params[])
{
	if(PlayerInfo[playerid][pAdmin] < 2) return 1;
	if(!strcmp(params,"OFF",true) && Spectate[playerid]) return StopSpectate(playerid);
	if(!Spectate[playerid] && !strcmp(params,"OFF",true)) return SendClientMessage(playerid, COLOR_GREY, "Вы не в режиме наблюдения!");
	if(sscanf(params, "u",params[0]))
	{
	    if(SpecAd[playerid] != INVALID_PLAYER_ID) SpecID[SpecAd[playerid]] = 65535;
    	SpecAd[playerid] = 65535;
		if(!Spectate[playerid])
		{
			GetPlayerPos(playerid,SpecPlayer[playerid][0],SpecPlayer[playerid][1],SpecPlayer[playerid][2]);
			SpecPlayerInt[playerid] = GetPlayerInterior(playerid);
			SpecPlayerWorld[playerid] = GetPlayerVirtualWorld(playerid);
			GetPlayerFacingAngle(playerid, SpecPlayerAngle[playerid]);
		}
		ReconSelect[playerid] = 7;
		ReconSelectSub[playerid] = INVALID_TEXT_DRAW;

		for(new i = 7; i < sizeof(ReconPlayer); i++)
		DisableEnableReconButton(playerid, i, 0, 0);

		for(new i = 0; i < 16; i++)
		PlayerTextDrawShow(playerid, ReconPlayer[i]);

		DisableEnableReconButton(playerid, ReconSelect[playerid], 1);

		Spectate[playerid] = 1;
		TogglePlayerSpectating(playerid, 1);
		return 1;
	}
	if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, COLOR_GREY, "Игрок не найден");
	if(PlayerInfo[params[0]][pAdmin] > 0) return SendClientMessage(playerid, COLOR_GREY, "Наблюдение за администрацией запрещено!");
	if(SpecID[params[0]] != 65535) return SendClientMessage(playerid, COLOR_GREY, "Этот игрок уже под наблюдением");
	if(!Spectate[playerid])
	{
		GetPlayerPos(playerid,SpecPlayer[playerid][0],SpecPlayer[playerid][1],SpecPlayer[playerid][2]);
		SpecPlayerInt[playerid] = GetPlayerInterior(playerid);
		SpecPlayerWorld[playerid] = GetPlayerVirtualWorld(playerid);
		GetPlayerFacingAngle(playerid, SpecPlayerAngle[playerid]);
	}
	if(SpecAd[playerid] != INVALID_PLAYER_ID) SpecID[SpecAd[playerid]] = 65535;
	SpecAd[playerid] = 65535;
	SpecAd[playerid] = params[0];
	SpecID[params[0]] = playerid;
	ReconSelect[playerid] = 7;
	ReconSelectSub[playerid] = INVALID_TEXT_DRAW;

	for(new i = 7; i < sizeof(ReconPlayer); i++)
		DisableEnableReconButton(playerid, i, 0, 0);

	for(new i = 0; i < 16; i++)
		PlayerTextDrawShow(playerid, ReconPlayer[i]);

	DisableEnableReconButton(playerid, ReconSelect[playerid], 1);
	Spectate[playerid] = 1;
	SetTimerEx("SpecPlayers", 100, false, "i", playerid);
	return 1;
}
ALTX:recon("/ку", "/re");

Найдете ошибки - пишите в теме. По мере возможности исправлю всё.
Автор: Голубь
Автор вырезки: Voorhis
​
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу