- Сейчас я Вам расскажу, как создать Авторынок как на Diamond City v.3.4
- Приступим.
Создаем саму сис-му:
enum vInfo // Для массива { vOwned, // Занята машина - 1, свободна - 0 vOwner[MAX_PLAYER_NAME], // Владелец vModel, // ИД Float: vPosX, // Координата спауна на авторынке X Float: vPosY, // Координата спауна на авторынке Y Float: vPosZ, // Координата спауна на авторынке Z Float: vAngle, // Координата спауна на авторынке Angle vColorOne, // Цвет 1 vColorTwo, // Цвет 2 vLock, // Замок vValue, // Цена Float: vParkX, // Координата спауна парка X Float: vParkY, // Координата спауна парка Y Float: vParkZ, // Координата спауна парка Z Float: vParkAngle, // Координата спауна парка Angle } new CarsInfo[MAX_BUYABLE_CARS][vInfo]; // Массив new BuyableCar[MAX_BUYABLE_CARS]; // Вместо идов каров forward LoadBuyableCars(); // Подгрузка каров из файла new CarFinding[MAX_PLAYERS]; // Для GPS поиска кара

Затем ко всем дефайнам добавляем:
#define MAX_BUYABLE_CARS 154 // Кол-во машин

в public OnPlayerEnterVehicle
if(vehicleid <= MAX_BUYABLE_CARS) { SetVehicleParamsForPlayer(vehicleid, playerid, 0, CarsInfo[vehicleid-1][vLock]); } SetVehicleParamsForPlayer(vehicleid, playerid, 0, LOCKEDVEH[vehicleid]);

Если у Вас нет этого паблика(public OnPlayerEnterVehicle), то создайте его, сейчас покажу как у Вас должно получиться.
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) { if(vehicleid <= MAX_BUYABLE_CARS) { SetVehicleParamsForPlayer(vehicleid, playerid, 0, CarsInfo[vehicleid-1][vLock]); } return 1; }

в if(newstate == PLAYER_STATE_DRIVER) добавляем:
new newcar = GetPlayerVehicleID(playerid);

и
if(newcar <= MAX_BUYABLE_CARS) { if(CarsInfo[buycar][vOwned] == 0) { format(string, sizeof string, "<< Этот транспорт продаётся >>\n\nСтоимость: $%d", CarsInfo[buycar][vValue]); ShowPlayerDialog(playerid,51,DIALOG_STYLE_MSGBOX,"Транспорт продаётся", string,"Купить","Отмена"); } }

в public CheckStatus() добавляем: это все идет в for(new i=0; i<GetMaxPlayers(); i++)
new vehicle;

и
if(vehicle <= MAX_BUYABLE_CARS) { if(CarsInfo[vehicle-1][vLock] == 1) { format(String,sizeof(String),"~r~locked"); } else if(CarsInfo[vehicle-1][vLock] == 0) { format(String,sizeof(String),"~w~unlocked"); } TextDrawSetString(LockStatus[i], String); TextDrawHideForPlayer(i, LockStatus[i]); TextDrawShowForPlayer(i, LockStatus[i]); }

в public OnPlayerLogin(playerid,password[]) добавляем:
if(PlayerInfo[playerid][pCarKey] != -1 && strcmp(sendername, CarsInfo[PlayerInfo[playerid][pCarKey]][vOwner], true) == 0) { } else { if(PlayerInfo[playerid][pCarKey] != -1) { PlayerInfo[playerid][pCarKey] = -1; } }

в public OnPropUpdate() добавляем:
idx = 0; while (idx < sizeof(CarsInfo)) { new coordsstring[256]; format(coordsstring, sizeof(coordsstring), "%d,%s,%d,%f,%f,%f,%f,%d,%d,%d,%d,%f,%f,%f,%f\n", CarsInfo[idx][vOwned], CarsInfo[idx][vOwner], CarsInfo[idx][vModel], CarsInfo[idx][vPosX], CarsInfo[idx][vPosY], CarsInfo[idx][vPosZ], CarsInfo[idx][vAngle], CarsInfo[idx][vColorOne], CarsInfo[idx][vColorTwo], CarsInfo[idx][vLock], CarsInfo[idx][vValue], CarsInfo[idx][vParkX], CarsInfo[idx][vParkY], CarsInfo[idx][vParkZ], CarsInfo[idx][vParkAngle]); if(idx == 0) { file2 = fopen("Diamond/cars.cfg", io_write); } else { file2 = fopen("Diamond/cars.cfg", io_append); } fwrite(file2, coordsstring); idx++; fclose(file2); }

Добавляем команды в public OnPlayerCommandText(playerid, cmdtext[])
if(strcmp(cmd, "/asellcar", true) == 0) { if(PlayerInfo[playerid][pAdmin] != 5) { return 1; } GetPlayerName(playerid, sendername, sizeof(sendername)); new vid; vid = GetPlayerVehicleID(playerid); if(IsPlayerInAnyVehicle(playerid)) { CarsInfo[vid-1][vOwned] = 0; CarsInfo[vid-1][vColorOne] = -1; CarsInfo[vid-1][vColorTwo] = -1; CarsInfo[vid-1][vParkX] = 0.0; CarsInfo[vid-1][vParkY] = 0.0; CarsInfo[vid-1][vParkZ] = 0.0; CarsInfo[vid-1][vParkAngle] = 0.0; CarsInfo[vid-1][vLock] = 0; UnLockCar(vid); strmid(CarsInfo[vid-1][vOwner], "-", 0, strlen("-"), 255); TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid); SetTimerEx("CarHack", 3000, false, "i", playerid); SendClientMessage(playerid, COLOR_LIGHTRED, "Вы только-что продали транспорт!"); DestroyVehicle(BuyableCar[vid-1]); BuyableCar[vid-1] = CreateVehicle(CarsInfo[vid-1][vModel], CarsInfo[vid-1][vPosX], CarsInfo[vid-1][vPosY], CarsInfo[vid-1][vPosZ], CarsInfo[vid-1][vAngle], CarsInfo[vid-1][vColorOne], CarsInfo[vid-1][vColorTwo], -1); return 1; } else return SendClientMessage(playerid, COLOR_GREY, "Ошибка: Вы должны находится в транспорте."); } if(strcmp(cmd, "/setprice", true) == 0) { if(IsPlayerConnected(playerid)) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD2, "Diamond City: /setprice [price]"); return 1; } new intid; intid = strval(tmp); if (PlayerInfo[playerid][pAdmin] >= 5) { format(string, sizeof(string), "Diamond City: Цена изменена на $%d.", intid); SendClientMessage(playerid, COLOR_GRAD1, string); CarsInfo[GetPlayerVehicleID(playerid)-1][vValue] = intid; } else { SendClientMessage(playerid, COLOR_GRAD1, "Недостаточно прав для использования команды."); } } return 1; } if(strcmp(cmd, "/mv", true) == 0) { GetPlayerName(playerid, playername, sizeof(playername)); if(PlayerInfo[playerid][pCarKey] != -1 && strcmp(playername, CarsInfo[PlayerInfo[playerid][pCarKey]][vOwner], true) == 0) { ShowPlayerDialog(playerid,52,DIALOG_STYLE_LIST,"Управление транспортом"," - Открыть/Закрыть\n - Продать\n - Припарковать\n - Перекрасить\n - GPS (Узнать местонахождение)","Далее","Выход"); } else { SendClientMessage(playerid,COLOR_GREY, "Ошибка: У вас нет машины."); return 1; } }

К команде /setname добавляем:
new carkey = PlayerInfo[giveplayerid][pCarKey]; if (carkey != -1) { strmid(CarsInfo[carkey][vOwner], newname, 0, strlen(newname), 255); OnPropUpdate(); }

Ко всем диалогам, добавляем:
else if(dialogid == 51) { new vid = GetPlayerVehicleID(playerid); new buycar = vid-1; if(response) { if(PlayerInfo[playerid][pCarKey] == -1) { if(CarsInfo[buycar][vOwned] == 0) { if(GetSRVMoney(playerid) >= CarsInfo[buycar][vValue]) { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { CarsInfo[buycar][vOwned] = 1; PlayerInfo[playerid][pCarKey] = buycar; new sendername[MAX_PLAYER_NAME]; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(CarsInfo[buycar][vOwner], sendername, 0, strlen(sendername), 255); GiveMoney(playerid,-CarsInfo[buycar][vValue]); TogglePlayerControllable(playerid, 1); SendClientMessage(playerid, COLOR_LIGHTRED, "Вы только-что купили транспорт!"); SendClientMessage(playerid, COLOR_LAWNGREEN, "Подсказка: Используйте /mv для управления транспортом."); } } else { SendClientMessage(playerid, COLOR_GREY, "Ошибка: У вас нет столько денег."); TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid); SetTimerEx("CarHack", 3000, false, "i", playerid); return 1; } } } else { SendClientMessage(playerid, COLOR_GREY, "Ошибка: У вас уже есть транспорт."); TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid); SetTimerEx("CarHack", 3000, false, "i", playerid); return 1; } } else { TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid); SetTimerEx("CarHack", 3000, false, "i", playerid); return 1; } } else if(dialogid == 52) { if(response) { if(listitem == 0) { new sendername[MAX_PLAYER_NAME]; GetPlayerName(playerid, sendername, sizeof(sendername)); if(PlayerInfo[playerid][pCarKey] != -1 && strcmp(sendername, CarsInfo[PlayerInfo[playerid][pCarKey]][vOwner], true) == 0) { new Float: X, Float: Y, Float: Z; GetVehiclePos(PlayerInfo[playerid][pCarKey]+1, X, Y, Z); if(PlayerToPoint(10.0, playerid, X, Y, Z)) { if(CarsInfo[PlayerInfo[playerid][pCarKey]][vLock] == 0) { CarsInfo[PlayerInfo[playerid][pCarKey]][vLock] = 1; GameTextForPlayer(playerid, "~r~locked", 5000, 6); PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0); LockCar(PlayerInfo[playerid][pCarKey]+1); return 1; } else if(CarsInfo[PlayerInfo[playerid][pCarKey]][vLock] == 1) { CarsInfo[PlayerInfo[playerid][pCarKey]][vLock] = 0; GameTextForPlayer(playerid, "~g~unlocked", 5000, 6); PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0); UnLockCar(PlayerInfo[playerid][pCarKey]+1); return 1; } } else return SendClientMessage(playerid, COLOR_GREY, "Ошибка: Вы слишком далеко от машины."); } } else if(listitem == 1) { new sendername[MAX_PLAYER_NAME]; GetPlayerName(playerid, sendername, sizeof(sendername)); if(PlayerInfo[playerid][pCarKey] != -1 && strcmp(sendername, CarsInfo[PlayerInfo[playerid][pCarKey]][vOwner], true) == 0) { if(IsPlayerInVehicle(playerid,PlayerInfo[playerid][pCarKey]+1)) { GiveMoney(playerid, CarsInfo[PlayerInfo[playerid][pCarKey]][vValue]); CarsInfo[PlayerInfo[playerid][pCarKey]][vOwned] = 0; CarsInfo[PlayerInfo[playerid][pCarKey]][vColorOne] = -1; CarsInfo[PlayerInfo[playerid][pCarKey]][vColorTwo] = -1; CarsInfo[PlayerInfo[playerid][pCarKey]][vParkX] = 0.0; CarsInfo[PlayerInfo[playerid][pCarKey]][vParkY] = 0.0; CarsInfo[PlayerInfo[playerid][pCarKey]][vParkZ] = 0.0; CarsInfo[PlayerInfo[playerid][pCarKey]][vParkAngle] = 0.0; CarsInfo[PlayerInfo[playerid][pCarKey]][vLock] = 0; UnLockCar(PlayerInfo[playerid][pCarKey]+1); strmid(CarsInfo[PlayerInfo[playerid][pCarKey]][vOwner], "-", 0, strlen("-"), 255); TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid); SetTimerEx("CarHack", 3000, false, "i", playerid); SendClientMessage(playerid, COLOR_LIGHTRED, "Вы только-что продали свой транспорт!"); DestroyVehicle(BuyableCar[PlayerInfo[playerid][pCarKey]]); BuyableCar[PlayerInfo[playerid][pCarKey]] = CreateVehicle(CarsInfo[PlayerInfo[playerid][pCarKey]][vModel], CarsInfo[PlayerInfo[playerid][pCarKey]][vPosX], CarsInfo[PlayerInfo[playerid][pCarKey]][vPosY], CarsInfo[PlayerInfo[playerid][pCarKey]][vPosZ], CarsInfo[PlayerInfo[playerid][pCarKey]][vAngle], CarsInfo[PlayerInfo[playerid][pCarKey]][vColorOne], CarsInfo[PlayerInfo[playerid][pCarKey]][vColorTwo], -1); PlayerInfo[playerid][pCarKey] = -1; return 1; } else return SendClientMessage(playerid, COLOR_GREY, "Ошибка: Вы должны находится в своём транспорте."); } else { SendClientMessage(playerid, COLOR_GREY, "Ошибка: У вас уже есть транспорт."); TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid); SetTimerEx("CarHack", 3000, false, "i", playerid); return 1; } } else if(listitem == 2) { new sendername[MAX_PLAYER_NAME]; GetPlayerName(playerid, sendername, sizeof(sendername)); if(PlayerInfo[playerid][pCarKey] != -1 && strcmp(sendername, CarsInfo[PlayerInfo[playerid][pCarKey]][vOwner], true) == 0) { if(IsPlayerInVehicle(playerid,PlayerInfo[playerid][pCarKey]+1)) { new Float: X, Float: Y, Float: Z, Float: A; GetVehiclePos(PlayerInfo[playerid][pCarKey]+1, X, Y, Z); GetVehicleZAngle(PlayerInfo[playerid][pCarKey]+1, A); CarsInfo[PlayerInfo[playerid][pCarKey]][vParkX] = X; CarsInfo[PlayerInfo[playerid][pCarKey]][vParkY] = Y; CarsInfo[PlayerInfo[playerid][pCarKey]][vParkZ] = Z; CarsInfo[PlayerInfo[playerid][pCarKey]][vParkAngle] = A; DestroyVehicle(BuyableCar[PlayerInfo[playerid][pCarKey]]); BuyableCar[PlayerInfo[playerid][pCarKey]] = CreateVehicle(CarsInfo[PlayerInfo[playerid][pCarKey]][vModel], CarsInfo[PlayerInfo[playerid][pCarKey]][vParkX], CarsInfo[PlayerInfo[playerid][pCarKey]][vParkY], CarsInfo[PlayerInfo[playerid][pCarKey]][vParkZ], CarsInfo[PlayerInfo[playerid][pCarKey]][vParkAngle], CarsInfo[PlayerInfo[playerid][pCarKey]][vColorOne], CarsInfo[PlayerInfo[playerid][pCarKey]][vColorTwo], -1); SendClientMessage(playerid, COLOR_LIGHTRED, "Diamond City: Вы успешно припарковали свой транспорт."); EngineCar[PlayerInfo[playerid][pCarKey]+1] = 0; } else return SendClientMessage(playerid, COLOR_GREY, "Ошибка: Вы не в вашей машине."); } } else if(listitem == 3) { new sendername[MAX_PLAYER_NAME]; GetPlayerName(playerid, sendername, sizeof(sendername)); if(PlayerInfo[playerid][pCarKey] != -1 && strcmp(sendername, CarsInfo[PlayerInfo[playerid][pCarKey]][vOwner], true) == 0) { if(IsPlayerInVehicle(playerid,PlayerInfo[playerid][pCarKey]+1)) { ShowPlayerDialog(playerid,53,DIALOG_STYLE_LIST,"Перекраска"," - Цвет 1\n - Цвет 2","Выбрать","Отмена"); } else return SendClientMessage(playerid, COLOR_GREY, "Ошибка: Вы не в вашей машине."); } } else if(listitem == 4) { new sendername[MAX_PLAYER_NAME]; GetPlayerName(playerid, sendername, sizeof(sendername)); if(PlayerInfo[playerid][pCarKey] != -1 && strcmp(sendername, CarsInfo[PlayerInfo[playerid][pCarKey]][vOwner], true) == 0) { if(CarFinding[playerid] == 0) return CarFinding[playerid] = 1; else if(CarFinding[playerid] == 1) { CarFinding[playerid] = 0; DisablePlayerCheckpoint(playerid); return 1; } } } } else { return 1; } } else if(dialogid == 53) { if(response) { if(listitem == 0) return ShowPlayerDialog(playerid,54,DIALOG_STYLE_INPUT,"Перекраска","Введите ID цвета","Выбрать","Отмена"); else if(listitem == 1) return ShowPlayerDialog(playerid,55,DIALOG_STYLE_INPUT,"Перекраска","Введите ID цвета","Выбрать","Отмена"); } else return 1; } else if(dialogid == 54) { if(response) { new color; color = strval(inputtext); if(!strlen(inputtext)) return ShowPlayerDialog(playerid,54,DIALOG_STYLE_INPUT,"Перекраска","Введите ID цвета","Выбрать","Отмена"); format(string, sizeof(string), "Вы изменили цвет машины 1 на: %d.", color); SendClientMessage(playerid, COLOR_LIGHTRED, string); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); CarsInfo[PlayerInfo[playerid][pCarKey]][vColorOne] = color; ChangeVehicleColor(PlayerInfo[playerid][pCarKey]+1, CarsInfo[PlayerInfo[playerid][pCarKey]][vColorOne], CarsInfo[PlayerInfo[playerid][pCarKey]][vColorTwo]); } else return 1; } else if(dialogid == 55) { if(response) { new color; color = strval(inputtext); if(!strlen(inputtext)) return ShowPlayerDialog(playerid,55,DIALOG_STYLE_INPUT,"Перекраска","Введите ID цвета","Выбрать","Отмена"); format(string, sizeof(string), "Вы изменили цвет машины 2 на: %d.", color); SendClientMessage(playerid, COLOR_LIGHTRED, string); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); CarsInfo[PlayerInfo[playerid][pCarKey]][vColorTwo] = color; ChangeVehicleColor(PlayerInfo[playerid][pCarKey]+1, CarsInfo[PlayerInfo[playerid][pCarKey]][vColorOne], CarsInfo[PlayerInfo[playerid][pCarKey]][vColorTwo]); } else return 1; } else if(dialogid == 56) return 1;

Создаем: Если у Вас есть, добавляем без форварда и паблика
forward OnVehicleStreamIn(vehicleid, forplayerid);

и
public OnVehicleStreamIn(vehicleid, forplayerid) { if(vehicleid <= MAX_BUYABLE_CARS) { SetVehicleParamsForPlayer(vehicleid, forplayerid, 0, CarsInfo[vehicleid-1][vLock]); } SetVehicleParamsForPlayer(vehicleid, forplayerid, 0, LOCKEDVEH[vehicleid]); return 1; }

в public OnVehicleSpawn(vehicleid) добавляем:
if(vehicleid <= MAX_BUYABLE_CARS) { if(CarsInfo[vehicleid-1][vOwned] == 1) { ChangeVehicleColor(vehicleid, CarsInfo[vehicleid-1][vColorOne], CarsInfo[vehicleid-1][vColorTwo]); } }

в public OnGameModeInit добавляем:
for(new c = 0; c < sizeof(CarsInfo); c++) { if((CarsInfo[c][vParkX] == 0.0 && CarsInfo[c][vParkY] == 0.0 && CarsInfo[c][vParkZ] == 0.0 && CarsInfo[c][vParkAngle] == 0.0) || CarsInfo[c][vOwned] == 0) { BuyableCar[c] = CreateVehicle(CarsInfo[c][vModel], CarsInfo[c][vPosX], CarsInfo[c][vPosY], CarsInfo[c][vPosZ], CarsInfo[c][vAngle], -1, -1, -1); } else if(CarsInfo[c][vParkX] != 0.0 && CarsInfo[c][vParkY] != 0.0 && CarsInfo[c][vParkZ] != 0.0 && CarsInfo[c][vParkAngle] != 0.0 && CarsInfo[c][vOwned] == 1) { BuyableCar[c] = CreateVehicle(CarsInfo[c][vModel], CarsInfo[c][vParkX], CarsInfo[c][vParkY], CarsInfo[c][vParkZ], CarsInfo[c][vParkAngle], CarsInfo[c][vColorOne], CarsInfo[c][vColorTwo], -1); } if(CarsInfo[c][vOwned] == 0) { CarsInfo[c][vLock] = 0; } LOCKEDVEH[c+1] = CarsInfo[c][vLock]; }

Создаем public LoadBuyableCars()
public LoadBuyableCars() { new arrCoords[15][64]; new strFromFile2[256]; new File: file = fopen("Diamond/cars.cfg", io_read); if (file) { new idx; while (idx < sizeof(CarsInfo)) { fread(file, strFromFile2); split(strFromFile2, arrCoords, ','); CarsInfo[idx][vOwned] = strval(arrCoords[0]); strmid(CarsInfo[idx][vOwner], arrCoords[1], 0, strlen(arrCoords[1]), 255); CarsInfo[idx][vModel] = strval(arrCoords[2]); CarsInfo[idx][vPosX] = floatstr(arrCoords[3]); CarsInfo[idx][vPosY] = floatstr(arrCoords[4]); CarsInfo[idx][vPosZ] = floatstr(arrCoords[5]); CarsInfo[idx][vAngle] = floatstr(arrCoords[6]); CarsInfo[idx][vColorOne] = strval(arrCoords[7]); CarsInfo[idx][vColorTwo] = strval(arrCoords[8]); CarsInfo[idx][vLock] = strval(arrCoords[9]); CarsInfo[idx][vValue] = strval(arrCoords[10]); CarsInfo[idx][vParkX] = floatstr(arrCoords[11]); CarsInfo[idx][vParkY] = floatstr(arrCoords[12]); CarsInfo[idx][vParkZ] = floatstr(arrCoords[13]); CarsInfo[idx][vParkAngle] = floatstr(arrCoords[14]); printf("Машина: [%d] | Модель: [%d] | Стоимость: [$%d] | Владелец: [%s]", idx, CarsInfo[idx][vModel], CarsInfo[idx][vValue], CarsInfo[idx][vOwner]); idx++; } fclose(file); } return 1; }

Если у Вас ошибки с SetVehicleParamsForPlayer, то добавте паблики:
new LOCKEDVEH[MAX_VEHICLES]; // Замок машины public LockCar(carid) { LOCKEDVEH[carid] = 1; for(new i = 0; i < GetMaxPlayers(); i++) { if(IsPlayerConnected(i)) { SetVehicleParamsForPlayer(carid,i,0,1); } } } public UnLockCar(carid) { LOCKEDVEH[carid] = 0; for(new i = 0; i < GetMaxPlayers(); i++) { if(IsPlayerConnected(i)) { SetVehicleParamsForPlayer(carid,i,0,0); } } }

Создаем в enum pInfo:
pCarKey,

Добавляем в public OnPlayerConnect(playerid)
PlayerInfo[playerid][pCarKey] = -1;

в public OneSecondTimer() Добавляем: именно в for(new i = 0; i < GetMaxPlayers(); i++)
if(CarFinding[i] == 1) { GetVehiclePos(PlayerInfo[i][pCarKey]+1, vX, vY, vZ); SetPlayerCheckpoint(i, vX, vY, vZ, 8.0); CP[i] = 0; }

В public OnPlayerRegister(playerid, password[]) добавляем:
dini_IntSet(string, "CarKey", PlayerInfo[playerid][pCarKey]);

В public OnPlayerSave(playerid) добавляем:
dini_IntSet(string, "CarKey", PlayerInfo[playerid][pCarKey]);

В public OnPlayerLogin(playerid,password[]) добавляем:
PlayerInfo[playerid][pCarKey] = dini_Int(string2,"CarKey");

И в public OnPlayerLogin(playerid,password[]) добавляем ко всем л:
PlayerInfo[playerid][pCarKey] = -1;

Вот и все, автор урока: sKeLeT(Lucky_Drug)
Файл с тачками:
