PDA

Просмотр полной версии : [Мануал] Система спидометра бензина, мили



Mist
25.07.2016, 21:13
Всем привет выкладываю свой спидометр копия Diamond, Автор Я Mist

Переменные:


new Text:speedusebox[MAX_PLAYERS];
new Text:namevehicle[MAX_PLAYERS];
new Text:fuelvehicle[MAX_PLAYERS];
new Text:speedvehicle[MAX_PLAYERS];
new Text:millagevehicle[MAX_PLAYERS];
new Text:healthvehicle[MAX_PLAYERS];
new Text:statusengine[MAX_PLAYERS];
new Text:statuslock[MAX_PLAYERS];
new Text:statuslamp[MAX_PLAYERS];
new speedtimer[MAX_PLAYERS];

enum TRANSPORT {
Float:trFuel,
Float:trMillage,
Float:trExpense,
Float:trHealth,
Float:trPosX,
Float:trPosY,
Float:trPosZ
};
new gTransport[MAX_VEHICLES][TRANSPORT];


OnGameModeInit()



ManualVehicleEngineAndLights();
for(new veh = 0; veh < MAX_VEHICLES; veh++) {
gTransport[veh][trFuel] = 50;
gTransport[veh][trExpense] = 0.1;
SetVehicleParamsEx(veh, false, false, false, false, false, false, false);
}


OnPlayerConnect(playerid)



speedusebox[playerid] = TextDrawCreate(606.000000, 357.625000, "usebox");
TextDrawLetterSize(speedusebox[playerid], 0.000000, 7.849999);
TextDrawTextSize(speedusebox[playerid], 425.500000, 0.000000);
TextDrawAlignment(speedusebox[playerid], 1);
TextDrawColor(speedusebox[playerid], 0);
TextDrawUseBox(speedusebox[playerid], true);
TextDrawBoxColor(speedusebox[playerid], 102);
TextDrawSetShadow(speedusebox[playerid], 0);
TextDrawSetOutline(speedusebox[playerid], 0);
TextDrawFont(speedusebox[playerid], 0);

namevehicle[playerid] = TextDrawCreate(428.500000, 346.500000, "Clower");
TextDrawLetterSize(namevehicle[playerid], 0.449999, 1.600000);
TextDrawAlignment(namevehicle[playerid], 1);
TextDrawColor(namevehicle[playerid], -1);
TextDrawSetShadow(namevehicle[playerid], 0);
TextDrawSetOutline(namevehicle[playerid], 1);
TextDrawBackgroundColor(namevehicle[playerid], 51);
TextDrawFont(namevehicle[playerid], 0);
TextDrawSetProportional(namevehicle[playerid], 1);

fuelvehicle[playerid] = TextDrawCreate(467.000000, 362.250000, "FUEL: 100L");
TextDrawLetterSize(fuelvehicle[playerid], 0.388999, 0.956876);
TextDrawAlignment(fuelvehicle[playerid], 1);
TextDrawColor(fuelvehicle[playerid], -1);
TextDrawSetShadow(fuelvehicle[playerid], 0);
TextDrawSetOutline(fuelvehicle[playerid], 1);
TextDrawBackgroundColor(fuelvehicle[playerid], 51);
TextDrawFont(fuelvehicle[playerid], 2);
TextDrawSetProportional(fuelvehicle[playerid], 1);

speedvehicle[playerid] = TextDrawCreate(450.500000, 372.750000, "SPEED: 170KM/H");
TextDrawLetterSize(speedvehicle[playerid], 0.388998, 0.956875);
TextDrawAlignment(speedvehicle[playerid], 1);
TextDrawColor(speedvehicle[playerid], -1);
TextDrawSetShadow(speedvehicle[playerid], 0);
TextDrawSetOutline(speedvehicle[playerid], 1);
TextDrawBackgroundColor(speedvehicle[playerid], 51);
TextDrawFont(speedvehicle[playerid], 2);
TextDrawSetProportional(speedvehicle[playerid], 1);

millagevehicle[playerid] = TextDrawCreate(455.500000, 395.500000, "MILLAGE: 0.00");
TextDrawLetterSize(millagevehicle[playerid], 0.388998, 0.956875);
TextDrawAlignment(millagevehicle[playerid], 1);
TextDrawColor(millagevehicle[playerid], -1);
TextDrawSetShadow(millagevehicle[playerid], 0);
TextDrawSetOutline(millagevehicle[playerid], 1);
TextDrawBackgroundColor(millagevehicle[playerid], 51);
TextDrawFont(millagevehicle[playerid], 2);
TextDrawSetProportional(millagevehicle[playerid], 1);

healthvehicle[playerid] = TextDrawCreate(459.000000, 383.687500, "HEALTH: 100");
TextDrawLetterSize(healthvehicle[playerid], 0.388998, 0.956875);
TextDrawAlignment(healthvehicle[playerid], 1);
TextDrawColor(healthvehicle[playerid], -1);
TextDrawSetShadow(healthvehicle[playerid], 0);
TextDrawSetOutline(healthvehicle[playerid], 1);
TextDrawBackgroundColor(healthvehicle[playerid], 51);
TextDrawFont(healthvehicle[playerid], 2);
TextDrawSetProportional(healthvehicle[playerid], 1);

statusengine[playerid] = TextDrawCreate(433.000000, 409.500000, "ENGINE");
TextDrawLetterSize(statusengine[playerid], 0.431499, 1.490623);
TextDrawAlignment(statusengine[playerid], 1);
TextDrawColor(statusengine[playerid], -1979184897);
TextDrawSetShadow(statusengine[playerid], 0);
TextDrawSetOutline(statusengine[playerid], 1);
TextDrawBackgroundColor(statusengine[playerid], 51);
TextDrawFont(statusengine[playerid], 2);
TextDrawSetProportional(statusengine[playerid], 1);

statuslock[playerid] = TextDrawCreate(501.500000, 409.500000, "LOCK");
TextDrawLetterSize(statuslock[playerid], 0.431499, 1.490623);
TextDrawAlignment(statuslock[playerid], 1);
TextDrawColor(statuslock[playerid], -1979184897);
TextDrawSetShadow(statuslock[playerid], 0);
TextDrawSetOutline(statuslock[playerid], 1);
TextDrawBackgroundColor(statuslock[playerid], 51);
TextDrawFont(statuslock[playerid], 2);
TextDrawSetProportional(statuslock[playerid], 1);

statuslamp[playerid] = TextDrawCreate(552.000000, 409.500000, "LAMP");
TextDrawLetterSize(statuslamp[playerid], 0.431499, 1.490623);
TextDrawAlignment(statuslamp[playerid], 1);
TextDrawColor(statuslamp[playerid], -1979184897);
TextDrawSetShadow(statuslamp[playerid], 0);
TextDrawSetOutline(statuslamp[playerid], 1);
TextDrawBackgroundColor(statuslamp[playerid], 51);
TextDrawFont(statuslamp[playerid], 2);
TextDrawSetProportional(statuslamp[playerid], 1);


OnPlayerStateChange(playerid, newstate, oldstate)



if(newstate == PLAYER_STATE_DRIVER) {
if(!enginenone(GetPlayerVehicleID(playerid))) {
new veh = GetPlayerVehicleID(playerid);
GetPlayerPos(playerid, gTransport[veh][trPosX], gTransport[veh][trPosY], gTransport[veh][trPosZ]);
TextDrawShowForPlayer(playerid, speedusebox[playerid]);
TextDrawShowForPlayer(playerid, namevehicle[playerid]);
TextDrawShowForPlayer(playerid, fuelvehicle[playerid]);
TextDrawShowForPlayer(playerid, speedvehicle[playerid]);
TextDrawShowForPlayer(playerid, millagevehicle[playerid]);
TextDrawShowForPlayer(playerid, healthvehicle[playerid]);
TextDrawShowForPlayer(playerid, statusengine[playerid]);
TextDrawShowForPlayer(playerid, statuslock[playerid]);
TextDrawShowForPlayer(playerid, statuslamp[playerid]);
speedtimer[playerid] = SetTimerEx("TransportUpdate", 300, true, "i", playerid);
}
}
else if(newstate == PLAYER_STATE_ONFOOT) {
TextDrawHideForPlayer(playerid, speedusebox[playerid]);
TextDrawHideForPlayer(playerid, namevehicle[playerid]);
TextDrawHideForPlayer(playerid, fuelvehicle[playerid]);
TextDrawHideForPlayer(playerid, speedvehicle[playerid]);
TextDrawHideForPlayer(playerid, millagevehicle[playerid]);
TextDrawHideForPlayer(playerid, healthvehicle[playerid]);
TextDrawHideForPlayer(playerid, statusengine[playerid]);
TextDrawHideForPlayer(playerid, statuslock[playerid]);
TextDrawHideForPlayer(playerid, statuslamp[playerid]);
KillTimer(speedtimer[playerid]);
}


OnPlayerKeyStateChange(playerid, newkeys, oldkeys)


else if(newkeys & 1) { // CTRL
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
new engine, lights, alarm, doors, bonnet, boot, objective;
new veh = GetPlayerVehicleID(playerid);
GetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, boot, objective);
if(engine == 0) {
SetVehicleParamsEx(veh, true, lights, alarm, doors, bonnet, boot, objective);
}
else {
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
}
if(gTransport[veh][trFuel] < 1.0) {
SendClientMessage(playerid, -1, "{FFFF00} [Информация] {FFFFFF}В вашем автомобиле нет бензина!");
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
}
if(gTransport[veh][trHealth] <= 350) {
SendClientMessage(playerid, -1, "{FFFF00} [Информация] {FFFFFF}Двигатель заглох! Вызовите механика /call (611)");
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
}
}
}
else if(newkeys & 4) { // ALT
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
new engine, lights, alarm, doors, bonnet, boot, objective;
new veh = GetPlayerVehicleID(playerid);
GetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, boot, objective);
if(lights == 0) {
SetVehicleParamsEx(veh, engine, true, alarm, doors, bonnet, boot, objective);
}
else {
SetVehicleParamsEx(veh, engine, false, alarm, doors, bonnet, boot, objective);
}
}
}


В конец мода



forward TransportUpdate(playerid);
public TransportUpdate(playerid) {
new veh = GetPlayerVehicleID(playerid);
new str[256];
GetVehicleHealth(veh, gTransport[veh][trHealth]);
format(str, sizeof(str), "~w~SPEED: ~g~%d~w~KM/H", SpeedVehicle(playerid));
TextDrawSetString(speedvehicle[playerid], str);
format(str, sizeof(str), "~w~FUEL: ~b~%d~w~L", floatround(gTransport[veh][trFuel]));
TextDrawSetString(fuelvehicle[playerid], str);
format(str, sizeof(str), "~w~MILLAGE: ~y~%.1f~w~KM", gTransport[veh][trMillage]);
TextDrawSetString(millagevehicle[playerid], str);
format(str, sizeof(str), "~w~HEALTH: ~p~%.0f~w~", gTransport[veh][trHealth]/10);
TextDrawSetString(healthvehicle[playerid], str);
new engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, boot, objective);

if(engine == 0) TextDrawSetString(statusengine[playerid], "~r~ENGINE");
else TextDrawSetString(statusengine[playerid], "~g~ENGINE");
if(lights == 0) TextDrawSetString(statuslamp[playerid], "~r~LAMP");
else TextDrawSetString(statuslamp[playerid], "~g~LAMP");
if(doors == 0) TextDrawSetString(statuslock[playerid], "~r~LOCK");
else TextDrawSetString(statuslock[playerid], "~g~LOCK");

if(GetPlayerDistanceFromPoint(playerid, gTransport[veh][trPosX], gTransport[veh][trPosY], gTransport[veh][trPosZ]) > 70.3) {
gTransport[veh][trMillage] += 0.1;
gTransport[veh][trFuel] -= gTransport[veh][trExpense];
GetPlayerPos(playerid, gTransport[veh][trPosX], gTransport[veh][trPosY], gTransport[veh][trPosZ]);
}
if(gTransport[veh][trFuel] < 1.0) {
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
}
if(gTransport[veh][trHealth] <= 350) {
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
}
/*
new Text:speedusebox[MAX_PLAYERS];
new Text:namevehicle[MAX_PLAYERS];
new Text:fuelvehicle[MAX_PLAYERS];
new Text:speedvehicle[MAX_PLAYERS];
new Text:millagevehicle[MAX_PLAYERS];
new Text:healthvehicle[MAX_PLAYERS];
new Text:statusengine[MAX_PLAYERS];
new Text:statuslock[MAX_PLAYERS];
new Text:statuslamp[MAX_PLAYERS];
*/
return 1;
}


Скрин:
http://ihost.pro-pawn.ru/image.php?di=55W6

HarrWe
26.07.2016, 21:11
Опять же как и во многих спидометрах бензин не будет отниматься когда в авто никого нету

TheMallard
28.07.2016, 12:01
Это не миля, а пробег.

ИМХО: спидометр хороший только у дудванса и стаге.

Battista
29.07.2016, 07:22
TextDraw кривые

Mist
29.07.2016, 11:22
Спасибо

Seviel
03.01.2017, 20:26
Хотите чтобы бензин тратился даже когда машина стоит или в ней нет водителя, вот возможное решение
Ко всем глобальным переменным:


new FuelFake[MAX_VEHICLES]; // - Называйте как хотите, а я так

Где заводится транспорт нужно добавить таймер


else if(newkeys & 1) { // CTRL
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
new engine, lights, alarm, doors, bonnet, boot, objective;
new veh = GetPlayerVehicleID(playerid);
GetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, boot, objective);
if(engine == 0) {
SetVehicleParamsEx(veh, true, lights, alarm, doors, bonnet, boot, objective);
}
else {
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
KillTimer(FuelFuck[veh]);
}
if(gTransport[veh][trFuel] < 1.0) {
SendClientMessage(playerid, -1, "{FFFF00} [Информация] {FFFFFF}В вашем автомобиле нет бензина!");
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
return true;
}
if(gTransport[veh][trHealth] <= 350) {
SendClientMessage(playerid, -1, "{FFFF00} [Информация] {FFFFFF}Двигатель заглох! Вызовите механика /call (611)");
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
return true;
}
FuelFuck[veh] = SetTimerEx("FuelUpdate", 60000, true, "i", veh);
}
}

в OnVehicleDeath

KillTimer(FuelFuck[veh]);
и конец мода


forward TransportUpdate(playerid);
public TransportUpdate(playerid) {
new veh = GetPlayerVehicleID(playerid);
gTransport[veh][trFuel] -= gTransport[veh][trExpense];
if(gTransport[veh][trFuel] < 1.0) {
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
KillTimer(FuelFuck[veh]);
}
return true;
}

Guldan
03.01.2017, 22:28
А не проще статус открыт/закрыт, вкл/выкл двигатель, сделать на кнопку

Mist
04.01.2017, 09:25
Хотите чтобы бензин тратился даже когда машина стоит или в ней нет водителя, вот возможное решение
Ко всем глобальным переменным:


new FuelFake[MAX_VEHICLES]; // - Называйте как хотите, а я так

Где заводится транспорт нужно добавить таймер


else if(newkeys & 1) { // CTRL
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
new engine, lights, alarm, doors, bonnet, boot, objective;
new veh = GetPlayerVehicleID(playerid);
GetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, boot, objective);
if(engine == 0) {
SetVehicleParamsEx(veh, true, lights, alarm, doors, bonnet, boot, objective);
}
else {
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
KillTimer(FuelFuck[veh]);
}
if(gTransport[veh][trFuel] < 1.0) {
SendClientMessage(playerid, -1, "{FFFF00} [Информация] {FFFFFF}В вашем автомобиле нет бензина!");
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
return true;
}
if(gTransport[veh][trHealth] <= 350) {
SendClientMessage(playerid, -1, "{FFFF00} [Информация] {FFFFFF}Двигатель заглох! Вызовите механика /call (611)");
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
return true;
}
FuelFuck[veh] = SetTimerEx("FuelUpdate", 60000, true, "i", veh);
}
}

в OnVehicleDeath

KillTimer(FuelFuck[veh]);
и конец мода


forward TransportUpdate(playerid);
public TransportUpdate(playerid) {
new veh = GetPlayerVehicleID(playerid);
gTransport[veh][trFuel] -= gTransport[veh][trExpense];
if(gTransport[veh][trFuel] < 1.0) {
SetVehicleParamsEx(veh, false, lights, alarm, doors, bonnet, boot, objective);
KillTimer(FuelFuck[veh]);
}
return true;
}


Спасибо

- - - Добавлено - - -


А не проще статус открыт/закрыт, вкл/выкл двигатель, сделать на кнопку

Там есть вкл и выкл двигателя, а так можно и сделать открытие дверей