Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

Система заправок для SA-MP

Дек
7
1
Пользователь
Ниже пэпэ шнене уже все написано ведь нах вам урок шнене ков можно сразу написать код пэпэ
#define MAX_FUEL_STATIONS 20

enum FuelStationInfo {
bool:fsExists,
fsOwner[MAX_PLAYER_NAME],
fsPrice,
fsEarnings,
Float:fsPosX,
Float:fsPosY,
Float:fsPosZ,
fsPickup,
Text3D:fsLabel,
fsFuelAmount
}

new FuelStations[MAX_FUEL_STATIONS][FuelStationInfo];
new PlayerRefueling[MAX_PLAYER_NAME] = {-1, ...};

CMD:createfuelstation(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, COLOR_RED, "У вас нет доступа!");

new price;
if(sscanf(params, "d", price)) return SendClientMessage(playerid, COLOR_WHITE, "Используйте: /createfuelstation [цена за литр]");

for(new i = 0; i < MAX_FUEL_STATIONS; i++)
{
if(!FuelStations[fsExists])
{
GetPlayerPos(playerid, FuelStations[fsPosX], FuelStations[fsPosY], FuelStations[fsPosZ]);

FuelStations[fsExists] = true;
format(FuelStations[fsOwner], MAX_PLAYER_NAME, "Государство");
FuelStations[fsPrice] = price;
FuelStations[fsEarnings] = 0;
FuelStations[fsFuelAmount] = 10000;

FuelStations[fsPickup] = CreateDynamicPickup(1650, 23, FuelStations[fsPosX], FuelStations[fsPosY], FuelStations[fsPosZ]);

new label[128];
format(label, sizeof(label), "[АЗС #%d]\nВладелец: %s\nЦена: $%d/литр\nТопливо: %d л.", i, FuelStations[fsOwner], FuelStations[fsPrice], FuelStations[fsFuelAmount]);

FuelStations[fsLabel] = CreateDynamic3DTextLabel(label, COLOR_YELLOW, FuelStations[fsPosX], FuelStations[fsPosY], FuelStations[fsPosZ] + 0.5, 10.0);

SendClientMessage(playerid, COLOR_GREEN, "Заправка создана!");
SaveFuelStation(i);
return 1;
}
}

SendClientMessage(playerid, COLOR_RED, "Достигнут лимит заправок!");
return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(PRESSED(KEY_SECONDARY_ATTACK))
{
for(new i = 0; i < MAX_FUEL_STATIONS; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, FuelStations[fsPosX], FuelStations[fsPosY], FuelStations[fsPosZ]))
{
if(FuelStations[fsFuelAmount] <= 0) return SendClientMessage(playerid, COLOR_RED, "На заправке нет топлива!");

ShowFuelDialog(playerid, i);
return 1;
}
}
}
return 1;
}

ShowFuelDialog(playerid, stationid)
{
new string[256];
format(string, sizeof(string), "АЗС #%d\nВладелец: %s\nЦена за литр: $%d\n\nДоступно топлива: %d л.\nВаши деньги: $%d\n\nВведите количество литров для заправки:", stationid, FuelStations[stationid][fsOwner], FuelStations[stationid][fsPrice], FuelStations[stationid][fsFuelAmount], GetPlayerMoney(playerid));

ShowPlayerDialog(playerid, DIALOG_FUEL, DIALOG_STYLE_INPUT, "Заправка автомобиля", string, "Заправить", "Отмена");

PlayerRefueling[playerid] = stationid;
return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_FUEL)
{
if(!response)
{
PlayerRefueling[playerid] = -1;
return 1;
}

new stationid = PlayerRefueling[playerid];
if(stationid == -1) return 1;

if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "Вы должны быть в транспортном средстве!");

new liters = strval(inputtext);
if(liters < 1 || liters > 1000) return SendClientMessage(playerid, COLOR_RED, "Введите от 1 до 1000 литров!");

if(FuelStations[stationid][fsFuelAmount] < liters)
{
SendClientMessage(playerid, COLOR_RED, "На заправке недостаточно топлива!");
return ShowFuelDialog(playerid, stationid);
}

new cost = liters * FuelStations[stationid][fsPrice];
if(GetPlayerMoney(playerid) < cost)
{
SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
return ShowFuelDialog(playerid, stationid);
}

new vehicleid = GetPlayerVehicleID(playerid);
VehicleFuel[vehicleid] += liters;
if(VehicleFuel[vehicleid] > 100) VehicleFuel[vehicleid] = 100;

GivePlayerMoney(playerid, -cost);
FuelStations[stationid][fsEarnings] += cost;
FuelStations[stationid][fsFuelAmount] -= liters;

UpdateFuelStationLabel(stationid);

new msg[128];
format(msg, sizeof(msg), "Вы заправили %d литров за $%d. Бак: %d%%", liters, cost, VehicleFuel[vehicleid]);
SendClientMessage(playerid, COLOR_GREEN, msg);

if(strcmp(FuelStations[stationid][fsOwner], "Государство") != 0) SaveFuelStation(stationid);

PlayerRefueling[playerid] = -1;
return 1;
}
return 0;
}

CMD:buyfuelstation(playerid, params[])
{
for(new i = 0; i < MAX_FUEL_STATIONS; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, FuelStations[fsPosX], FuelStations[fsPosY], FuelStations[fsPosZ]))
{
if(strcmp(FuelStations[fsOwner], "Государство") != 0) return SendClientMessage(playerid, COLOR_RED, "Эта заправка уже продана!");

if(GetPlayerMoney(playerid) < 1000000) return SendClientMessage(playerid, COLOR_RED, "Недостаточно денег! Цена: $1,000,000");

GivePlayerMoney(playerid, -1000000);
format(FuelStations[fsOwner], MAX_PLAYER_NAME, PlayerName(playerid));
FuelStations[fsEarnings] = 0;

UpdateFuelStationLabel(i);
SaveFuelStation(i);

SendClientMessage(playerid, COLOR_GREEN, "Поздравляем! Вы купили эту заправку!");
return 1;
}
}

SendClientMessage(playerid, COLOR_RED, "Вы не у заправки!");
return 1;
}

UpdateFuelStationLabel(stationid)
{
new label[128];
format(label, sizeof(label), "[АЗС #%d]\nВладелец: %s\nЦена: $%d/литр\nДоход: $%d\nТопливо: %d л.", stationid, FuelStations[stationid][fsOwner], FuelStations[stationid][fsPrice], FuelStations[stationid][fsEarnings], FuelStations[stationid][fsFuelAmount]);

UpdateDynamic3DTextLabelText(FuelStations[stationid][fsLabel], COLOR_YELLOW, label);
}

SaveFuelStation(stationid)
{
new filename[64];
format(filename, sizeof(filename), "FuelStations/%d.ini", stationid);

new INI:file = INI_Open(filename);

INI_SetTag(file, "fuelstation_data");
INI_WriteBool(file, "Exists", FuelStations[stationid][fsExists]);
INI_WriteString(file, "Owner", FuelStations[stationid][fsOwner]);
INI_WriteInt(file, "Price", FuelStations[stationid][fsPrice]);
INI_WriteInt(file, "Earnings", FuelStations[stationid][fsEarnings]);
INI_WriteFloat(file, "PosX", FuelStations[stationid][fsPosX]);
INI_WriteFloat(file, "PosY", FuelStations[stationid][fsPosY]);
INI_WriteFloat(file, "PosZ", FuelStations[stationid][fsPosZ]);
INI_WriteInt(file, "FuelAmount", FuelStations[stationid][fsFuelAmount]);

INI_Close(file);
}

LoadFuelStations()
{
for(new i = 0; i < MAX_FUEL_STATIONS; i++)
{
new filename[64];
format(filename, sizeof(filename), "FuelStations/%d.ini", i);

if(!fexist(filename)) continue;

INI_ParseFile(filename, "LoadFuelStation_%s", .bExtra = true, .extra = i);

if(FuelStations[fsExists])
{
FuelStations[fsPickup] = CreateDynamicPickup(1650, 23, FuelStations[fsPosX], FuelStations[fsPosY], FuelStations[fsPosZ]);
UpdateFuelStationLabel(i);
}
}
printf("[SYSTEM] Загружено %d заправок", GetFuelStationsCount());
}

CMD:fuelstats(playerid)
{
new count = 0;
for(new i = 0; i < MAX_FUEL_STATIONS; i++)
{
if(strcmp(FuelStations[fsOwner], PlayerName(playerid), true) == 0)
{
count++;
SendClientMessageEx(playerid, COLOR_YELLOW, "АЗС #%d - Доход: $%d, Топливо: %d л.", i, FuelStations[fsEarnings], FuelStations[fsFuelAmount]);
}
}

if(count == 0) SendClientMessage(playerid, COLOR_RED, "У вас нет заправок!");

return 1;
}

CMD:buyfuel(playerid, params[])
{
new stationid, amount;
if(sscanf(params, "dd", stationid, amount)) return SendClientMessage(playerid, COLOR_WHITE, "Используйте: /buyfuel [ID] [кол-во]");

if(!FuelStations[stationid][fsExists]) return SendClientMessage(playerid, COLOR_RED, "Такой заправки нет!");

if(strcmp(FuelStations[stationid][fsOwner], PlayerName(playerid), true) != 0) return SendClientMessage(playerid, COLOR_RED, "Вы не владелец этой заправки!");

new cost = amount * 50;
if(GetPlayerMoney(playerid) < cost) return SendClientMessage(playerid, COLOR_RED, "Недостаточно денег!");

GivePlayerMoney(playerid, -cost);
FuelStations[stationid][fsFuelAmount] += amount;
UpdateFuelStationLabel(stationid);

SendClientMessageEx(playerid, COLOR_GREEN, "Вы закупили %d литров топлива за $%d", amount, cost);

return 1;
}

Пэпэ Шнене фа надеюсь вам это поможет пэпэ всем пока шнене
 
Сверху