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

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

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

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

Мануал Система взлома машин v2.0

Salery

Изучающий
Пользователь
Регистрация
27 Ноя 2016
Сообщения
542
Лучшие ответы
0
Репутация
243
Награды
2


Давно я выкладывал систему взлома машин. Данная система более простая для игроков.
Эта система писалась на пустом моде поэтому не должно быть конфликтов с вашим модом​

Старая тема: https://pawno-info.ru/showthread.php?t=302366

Что требуется для работы:

1. foreach
2. streamer
3. По возможности можно использовать CRP и отказаться от FixText

Описание: Взломать 50/50 - взломает машину с вероятностью в 50%. Кнопка "Взломать" взломает с вероятностью в 100 %. Советую добавить какие нибудь ресурсы типа отнятие отмычек.
Перейдем к коду.

MAX_PLAYERS - Максимальное кол-во игроков, которых будет обрабатывать сервер
MAX_VEHICLES - Максимальное кол-во машин

К переменным

PHP:
new Iterator:VEHICLES_IN_STREAM[MAX_PLAYERS]<MAX_VEHICLES>;

new Text:hHack_TD[5];

new PlayerText:hHack_PTD[MAX_PLAYERS];

enum HACK_CAR_DATA_ENUN
{
	H_TIMER,
	H_CAR_ID,
	H_CLICKED,
	H_TIMER_TICK,
	H_CAR
}
new HACK_CAR_DATA[MAX_PLAYERS][HACK_CAR_DATA_ENUN];
в низ мода

PHP:
stock HACK_CAR(HID)
{
    if(!GET_RADIUS_CAR(HID, 2)) return SendClientMessage(HID, 0xFF0000FF,"Рядом с вами нет машины");
    HACK_CAR_DATA[HID][H_CAR] = GET_RADIUS_CAR(HID, 2);

    new ENGINE,LIGHTS,ALARM,DOORS,BONNET,BOOT,OBJECTIVE;

	GetVehicleParamsEx(HACK_CAR_DATA[HID][H_CAR], ENGINE, LIGHTS, ALARM, DOORS, BONNET, BOOT, OBJECTIVE);

	if(DOORS == 0) return SendClientMessage(HID, 0xFF0000FF,"Данная машина открыта");
	return SHOW_HACK_CAR_TD(HID);
}

@_HACK_CAR_TIMER(HID);
@_HACK_CAR_TIMER(HID)
{
    HACK_CAR_DATA[HID][H_TIMER_TICK] --;
	new IDX[11];
	format(IDX, 11, FixText("таймер:_%d"), HACK_CAR_DATA[HID][H_TIMER_TICK]);
	PlayerTextDrawSetString(HID, hHack_PTD[HID], IDX);
    if(!GET_RADIUS_CAR_ID(HID, HACK_CAR_DATA[HID][H_CAR]))
    {
        SendClientMessage(HID, 0xFF0000FF,"Машина слишком далеко от вас");
        CLEAR_HACK_CAR(HID);
    }
    else if(HACK_CAR_DATA[HID][H_TIMER_TICK] == 1)
    {
	    new ENGINE,LIGHTS,ALARM,DOORS,BONNET,BOOT,OBJECTIVE;

		GetVehicleParamsEx(HACK_CAR_DATA[HID][H_CAR], ENGINE, LIGHTS, ALARM, DOORS, BONNET, BOOT, OBJECTIVE);
		SetVehicleParamsEx(HACK_CAR_DATA[HID][H_CAR], ENGINE, LIGHTS, ALARM, 0, BONNET, BOOT, OBJECTIVE);
		SendClientMessage(HID, 0x5ACF9EFF, "Вы успешно взломали машину");
        CLEAR_HACK_CAR(HID);
    }
}

stock GET_RADIUS_CAR_ID(HID, CAR) // вернет машину в радиусе по ид
{
	new Float:P_X, Float:P_Y, Float:P_Z;
    GetVehiclePos(CAR, P_X, P_Y, P_Z);
    if(IsPlayerInRangeOfPoint(HID, 2, P_X, P_Y, P_Z))
    {
        return 1;
	}
	return 0;
}

stock SHOW_HACK_CAR_TD(HID)
{
	for(new H = 0; H < sizeof hHack_TD; H ++)
	{
	    TextDrawShowForPlayer(HID, hHack_TD[H]);
	}
	PlayerTextDrawShow(HID, hHack_PTD[HID]);
	new IDX[11];
	format(IDX, 11, FixText("таймер:_%d"), HACK_CAR_DATA[HID][H_TIMER_TICK]);
	PlayerTextDrawSetString(HID, hHack_PTD[HID], IDX);
	HACK_CAR_DATA[HID][H_CLICKED] = 1;
	SelectTextDraw(HID, 0xCF5A75FF);
	return true;
}

stock CLEAR_HACK_CAR(HID)
{
	if(HACK_CAR_DATA[HID][H_CLICKED] == 1)
	{
	    SendClientMessage(HID, 0xFF0000FF, "Взлом машины был остановлен");
	    KillTimer(HACK_CAR_DATA[HID][H_TIMER]);
	    HACK_CAR_DATA[HID][H_TIMER] = -1;
		HACK_CAR_DATA[HID][H_CAR_ID] = -1;
	    HACK_CAR_DATA[HID][H_TIMER_TICK] = HACK_CAR_DATA[HID][H_CLICKED] = 0;

		for(new H = 0; H < sizeof hHack_TD; H ++)
		{
		    TextDrawHideForPlayer(HID, hHack_TD[H]);
		}
		PlayerTextDrawHide(HID, hHack_PTD[HID]);
		new IDX[11];
		format(IDX, 11, FixText("таймер:_0"));
		PlayerTextDrawSetString(HID, hHack_PTD[HID], IDX);
		CancelSelectTextDraw(HID);
	}
	return true;
}

stock HACK_CAR_TD_GLOBAL()
{
	hHack_TD[0] = TextDrawCreate(381.6667, 195.6518, "LD_SPAC:white"); // пусто
	TextDrawTextSize(hHack_TD[0], 67.0000, 14.0000);
	TextDrawAlignment(hHack_TD[0], 1);
	TextDrawColor(hHack_TD[0], -1084136961);
	TextDrawBackgroundColor(hHack_TD[0], 255);
	TextDrawFont(hHack_TD[0], 4);
	TextDrawSetProportional(hHack_TD[0], 0);
	TextDrawSetShadow(hHack_TD[0], 0);

	hHack_TD[1] = TextDrawCreate(381.6667, 210.8527, "LD_SPAC:white"); // пусто
	TextDrawTextSize(hHack_TD[1], 67.0000, 14.0000);
	TextDrawAlignment(hHack_TD[1], 1);
	TextDrawColor(hHack_TD[1], 545637631);
	TextDrawBackgroundColor(hHack_TD[1], 255);
	TextDrawFont(hHack_TD[1], 4);
	TextDrawSetProportional(hHack_TD[1], 0);
	TextDrawSetShadow(hHack_TD[1], 0);
	TextDrawSetSelectable(hHack_TD[1], true);

	hHack_TD[2] = TextDrawCreate(381.6667, 226.4537, "LD_SPAC:white"); // пусто
	TextDrawTextSize(hHack_TD[2], 67.0000, 14.0000);
	TextDrawAlignment(hHack_TD[2], 1);
	TextDrawColor(hHack_TD[2], 545637631);
	TextDrawBackgroundColor(hHack_TD[2], 255);
	TextDrawFont(hHack_TD[2], 4);
	TextDrawSetProportional(hHack_TD[2], 0);
	TextDrawSetShadow(hHack_TD[2], 0);
	TextDrawSetSelectable(hHack_TD[2], true);

	hHack_TD[3] = TextDrawCreate(390.6667, 214.4741, FixText("взломать_50/50")); // пусто
	TextDrawLetterSize(hHack_TD[3], 0.1420, 0.8077);
	TextDrawAlignment(hHack_TD[3], 1);
	TextDrawColor(hHack_TD[3], -1);
	TextDrawBackgroundColor(hHack_TD[3], 255);
	TextDrawFont(hHack_TD[3], 2);
	TextDrawSetProportional(hHack_TD[3], 1);
	TextDrawSetShadow(hHack_TD[3], 0);

	hHack_TD[4] = TextDrawCreate(399.3334, 229.4074, FixText("взломать")); // пусто
	TextDrawLetterSize(hHack_TD[4], 0.1420, 0.8077);
	TextDrawAlignment(hHack_TD[4], 1);
	TextDrawColor(hHack_TD[4], -1);
	TextDrawBackgroundColor(hHack_TD[4], 255);
	TextDrawFont(hHack_TD[4], 2);
	TextDrawSetProportional(hHack_TD[4], 1);
	TextDrawSetShadow(hHack_TD[4], 0);
}

stock H_HACK_TD_PLAYER(HID)
{
	hHack_PTD[HID] = CreatePlayerTextDraw(HID,398.3334, 199.1259, FixText("таймер:_60")); // пусто
	PlayerTextDrawLetterSize(HID, hHack_PTD[HID], 0.1420, 0.8077);
	PlayerTextDrawAlignment(HID, hHack_PTD[HID], 1);
	PlayerTextDrawColor(HID, hHack_PTD[HID], -1);
	PlayerTextDrawBackgroundColor(HID, hHack_PTD[HID], 255);
	PlayerTextDrawFont(HID, hHack_PTD[HID], 2);
	PlayerTextDrawSetProportional(HID, hHack_PTD[HID], 1);
	PlayerTextDrawSetShadow(HID, hHack_PTD[HID], 0);
}
stock FixText(string[]) {
    new result[256];
    for(new i=0; i < 256; i++) {
        switch(string[i]) {
        case 'а':result[i] = 'a';
        case 'А':result[i] = 'A';
        case 'б':result[i] = '—';
        case 'Б':result[i] = 'Ђ';
        case 'в':result[i] = 'ў';
        case 'В':result[i] = '‹';
        case 'г':result[i] = '™';
        case 'Г':result[i] = '‚';
        case 'д':result[i] = 'љ';
        case 'Д':result[i] = 'ѓ';
        case 'е':result[i] = 'e';
        case 'Е':result[i] = 'E';
        case 'ё':result[i] = 'e';
        case 'Ё':result[i] = 'E';
        case 'ж':result[i] = '›';
        case 'Ж':result[i] = '„';
        case 'з':result[i] = 'џ';
        case 'З':result[i] = '€';
        case 'и':result[i] = 'њ';
        case 'И':result[i] = '…';
        case 'й':result[i] = 'њ';
        case 'Й':result[i] = '…';
        case 'к':result[i] = 'k';
        case 'К':result[i] = 'K';
        case 'л':result[i] = 'ћ';
        case 'Л':result[i] = '‡';
        case 'м':result[i] = 'Ї';
        case 'М':result[i] = 'M';
        case 'н':result[i] = '®';
        case 'Н':result[i] = '*';
        case 'о':result[i] = 'o';
        case 'О':result[i] = 'O';
        case 'п':result[i] = 'Ј';
        case 'П':result[i] = 'Њ';
        case 'р':result[i] = 'p';
        case 'Р':result[i] = 'P';
        case 'с':result[i] = 'c';
        case 'С':result[i] = 'C';
        case 'т':result[i] = '¦';
        case 'Т':result[i] = 'Џ';
        case 'у':result[i] = 'y';
        case 'У':result[i] = 'Y';
        case 'ф':result[i] = '?';
        case 'Ф':result[i] = 'Ѓ';
        case 'х':result[i] = 'x';
        case 'Х':result[i] = 'X';
        case 'ц':result[i] = '*';
        case 'Ц':result[i] = '‰';
        case 'ч':result[i] = '¤';
        case 'Ч':result[i] = 'Ќ';
        case 'ш':result[i] = 'Ґ';
        case 'Ш':result[i] = 'Ћ';
        case 'щ':result[i] = 'Ў';
        case 'Щ':result[i] = 'Љ';
        case 'ь':result[i] = '©';
        case 'Ь':result[i] = '’';
        case 'ъ':result[i] = 'ђ';
        case 'Ъ':result[i] = '§';
        case 'ы':result[i] = 'Ё';
        case 'Ы':result[i] = '‘';
        case 'э':result[i] = 'Є';
        case 'Э':result[i] = '“';
        case 'ю':result[i] = '«';
        case 'Ю':result[i] = '”';
        case 'я':result[i] = '¬';
        case 'Я':result[i] = '•';
        default:result[i]=string[i];
        }
    }
    return result;
}

stock GET_RADIUS_CAR(HID, RAD) // вернет машину в радиусе
{
	new Float:P_X, Float:P_Y, Float:P_Z;
	foreach(new i: VEHICLES_IN_STREAM[HID])
	{
	    GetVehiclePos(i, P_X, P_Y, P_Z);
	    if(IsPlayerInRangeOfPoint(HID, RAD, P_X, P_Y, P_Z))
	    {
            return i;
	    }
	}
	return 0;
}
В OnPlayerDisconnect

PHP:
	if(Iter_Count(VEHICLES_IN_STREAM[playerid]) != 0) Iter_Clear(VEHICLES_IN_STREAM[playerid]);
	if(HACK_CAR_DATA[playerid][H_CLICKED] == 1)
	{
	    CLEAR_HACK_CAR(playerid);
	}
В OnVehicleStreamOut

PHP:
Iter_Remove(VEHICLES_IN_STREAM[forplayerid], vehicleid);
в OnVehicleStreamIn

PHP:
Iter_Add(VEHICLES_IN_STREAM[forplayerid], vehicleid);
в OnPlayerClickTextDraw

PHP:
	if(clickedid == hHack_TD[1])
	{
	    if(HACK_CAR_DATA[playerid][H_TIMER_TICK] != 0) return true;
		switch(random(2))
		{
			case 0:
			{
			    SendClientMessage(playerid, 0xFF0000FF, "Вам не удалось взломать машину");
			    CLEAR_HACK_CAR(playerid);
			}
			case 1:
			{
			    SendClientMessage(playerid, 0x5AA8CFFF, "Начался взлом машины");
			    HACK_CAR_DATA[playerid][H_TIMER_TICK] = 60;
			    HACK_CAR_DATA[playerid][H_TIMER] = SetTimerEx("@_HACK_CAR_TIMER", 1000, true, "d", playerid);
			}
		}
	}
	else if(clickedid == hHack_TD[2])
	{
	    if(HACK_CAR_DATA[playerid][H_TIMER_TICK] != 0) return true;
	    SendClientMessage(playerid, 0x5AA8CFFF, "Начался взлом машины");
	    HACK_CAR_DATA[playerid][H_TIMER_TICK] = 60;
	    HACK_CAR_DATA[playerid][H_TIMER] = SetTimerEx("@_HACK_CAR_TIMER", 1000, true, "d", playerid);
	}
    else if(_:clickedid == INVALID_TEXT_DRAW)
    {
        if(HACK_CAR_DATA[playerid][H_CLICKED] != 1) return true;
        CLEAR_HACK_CAR(playerid);
    }
В OnGameModeInit

PHP:
    HACK_CAR_TD_GLOBAL();

    Iter_Init(VEHICLES_IN_STREAM);
В OnPlayerDeath

PHP:
	if(HACK_CAR_DATA[playerid][H_CLICKED] == 1)
	{
	    CLEAR_HACK_CAR(playerid);
	}
В OnPlayerConnect

PHP:
H_HACK_TD_PLAYER(playerid);
Вызов команды на примере DC_CMD

PHP:
CMD:hack(playerid, params[]) return HACK_CAR(playerid);
В итоге получаем это


Обязательно выслушаю всех самых умных обитателей данного форума о том, как лучше надо было сделать (
 
Последнее редактирование:
Сверху Снизу