Давно я выкладывал систему взлома машин. Данная система более простая для игроков.
Эта система писалась на пустом моде поэтому не должно быть конфликтов с вашим модом
Старая тема: 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;
}
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);
}
PHP:
Iter_Remove(VEHICLES_IN_STREAM[forplayerid], vehicleid);
PHP:
Iter_Add(VEHICLES_IN_STREAM[forplayerid], vehicleid);
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);
}
PHP:
HACK_CAR_TD_GLOBAL();
Iter_Init(VEHICLES_IN_STREAM);
PHP:
if(HACK_CAR_DATA[playerid][H_CLICKED] == 1)
{
CLEAR_HACK_CAR(playerid);
}
PHP:
H_HACK_TD_PLAYER(playerid);
PHP:
CMD:hack(playerid, params[]) return HACK_CAR(playerid);
Обязательно выслушаю всех самых умных обитателей данного форума о том, как лучше надо было сделать (
Последнее редактирование: