rendered paste body#include <a_samp>
#include <dudb>
#define xFILExDOESxNOTxEXISTS "__FILEDOESNOTEXISTS__"
#define STAT_EXT ".stat"
#define STAT_DIR "statystyki/"
new Text:PlayerTextDraw[200];
enum Float:Pos{ Float:sX,Float:sY,Float:sZ };
new Float:SavedPos[MAX_PLAYERS][Pos];
new PMVEH[200];
new Paliwo[700];
new PaliwoGlobalne=1000;
forward PosCheck();
forward ProcessFuelEnd(playerid);
forward RespawnVehicle(vid);
public OnGameModeInit(){
for(new x=0;x<200;x++){
PlayerTextDraw[x] = Text:TextDrawCreate(7.0, 270.0, " ");
TextDrawFont(PlayerTextDraw[x], 1);
TextDrawSetShadow(PlayerTextDraw[x], 1);
TextDrawSetOutline(PlayerTextDraw[x], 0);
TextDrawAlignment(PlayerTextDraw[x], 0);
TextDrawLetterSize(PlayerTextDraw[x], 0.4, 0.8);
}
for(new g=0;g<749;g++){SetVehicleToRespawn(g);}
SetTimer("PosCheck", 100, true);
return true;}
public PosCheck(){
new Float:SpeedX;
new Float:Z;
new Float:X;
new Float:Y;
new s[256];
for(new g=0;g<200;g++)if(IsPlayerConnected(g)){
s = "";
GetPlayerPos(g, X, Y, Z);
SpeedX = floatsqroot(floatadd(floatadd(floatpower(floatabs(floatsub(X,SavedPos[ g ][ sX ])),2),floatpower(floatabs(floatsub(Y,SavedPos[ g ][ sY ])),2)),floatpower(floatabs(floatsub(Z,SavedPos[ g ][ sZ ])),2)));
if(!strcmp(GetStat(Split(PlayerName(g), "metrow")), xFILExDOESxNOTxEXISTS, false))SetStat(Split(PlayerName(g), "metrow"), "0");
new GSta = todec(GetStat(Split(PlayerName(g), "metrow")));
new intstr[256];
format(intstr, 256, "%.0f", SpeedX);
SetStat(Split(PlayerName(g), "metrow"), tostr(GSta+todec(intstr)));
if(IsPlayerInAnyVehicle(g)){
if(SpeedX > 300.0)SpeedX = 0.0;
format(s, sizeof(s), "~b~Predkosc : %.0f KM/H", floatmul(SpeedX, 12));
new modelid = GetVehicleModel(GetPlayerVehicleID(g));
if(!IsPlane(modelid))if(modelid != 481 && modelid != 509 && modelid != 510){
if( SavedPos[ g ][ sZ ] > Z)
Paliwo[GetPlayerVehicleID(g)] -= (floatround(SpeedX) / 8);
else
Paliwo[GetPlayerVehicleID(g)] -= (floatround(SpeedX) / 6);
} else {
if( SavedPos[ g ][ sZ ] > Z)
Paliwo[GetPlayerVehicleID(g)] -= (floatround(SpeedX) / 18);
else
Paliwo[GetPlayerVehicleID(g)] -= (floatround(SpeedX) / 16);
}
new Float:HealthV;
GetVehicleHealth(GetPlayerVehicleID(g), HealthV);
HealthV = floatsub(HealthV, 250.0);
if(HealthV < 1)HealthV = 0;
if(HealthV > 350)format(s, sizeof(s), "%s_~n~~g~Zycie Auta ~w~:~g~ %.0f %%", s, (HealthV/750)*100);
if(HealthV < 350 && HealthV > 100)format(s, sizeof(s), "%s_~n~~y~Zycie Auta ~w~:~y~ %.0f %%", s, (HealthV/750)*100);
if(HealthV < 100)format(s, sizeof(s), "%s_~n~~r~Zycie Auta ~w~: ~r~%.0f %%", s, (HealthV/750)*100);
if(HealthV > 1000)format(s, sizeof(s), "%s_~n~~g~Zycie Auta ~w~: ~r~Nieskonczone (pozostalo %.0fd)", s, HealthV-1000.0);
TextDrawSetString(PlayerTextDraw[g],s);
if(!IsPlane(GetVehicleModel(GetPlayerVehicleID(g)))){
if(Paliwo[GetPlayerVehicleID(g)] > 0)format(s, sizeof(s), "%s_~n~~w~Paliwo ~w~:~w~ %d %%", s, (Paliwo[GetPlayerVehicleID(g)]*100)/PaliwoGlobalne);
else format(s, sizeof(s), "%s_~n~~w~Paliwo ~w~:~w~ 0", s);
TextDrawSetString(PlayerTextDraw[g],s);
if(Paliwo[GetPlayerVehicleID(g)] < 1){
GameTextForPlayer(g, "~r~Koniec ~w~Paliwa.", 1000, 5);
TogglePlayerControllable(g, 0);
SetTimerEx("ProcessFuelEnd", 1500, 0, "d", g);
SetTimerEx("RespawnVehicle", 40000, 0, "d", GetPlayerVehicleID(g));
}
}
if(Paliwo[GetPlayerVehicleID(g)] < 100 && Paliwo[GetPlayerVehicleID(g)] > 80){
GameTextForPlayer(g, "~r~Paliwo sie konczy!~n~~w~Zatankuj.", 1000, 5);
}
} else TextDrawHideForPlayer(g, PlayerTextDraw[g]);
SavedPos[ g ][ sX ] = X;
SavedPos[ g ][ sY ] = Y;
SavedPos[ g ][ sZ ] = Z;
}
return 1;
}
GetStat(type[]){
if(!fexist(Split(STAT_DIR, Encode(type), STAT_EXT))){
new No[256];
No = xFILExDOESxNOTxEXISTS;
return No;
}
new File:fh = fopen(Split(STAT_DIR, Encode(type), STAT_EXT), io_readwrite);
new result[256];
fread(fh, result);
fclose(fh);
new Decoded[256];
Decoded = Decode(result);
return Decoded;
}
Split(s1[], s2[], s3[]=""){
new rxx[256];
format(rxx, 256, "%s%s%s", s1, s2, s3);
return rxx;
}
stock PlayerName(playerid) {
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
return name;
}
SetStat(type[], value[]){
fremove(Split(STAT_DIR, Encode(type), STAT_EXT));
new File:fh = fopen(Split(STAT_DIR, Encode(type), STAT_EXT), io_write);
fwrite(fh,Encode(value));
fclose(fh);
return true;
}
todec(str[]){
return strval(str);
}
tostr(int){
new st[256];
format(st, 256, "%d", int);
return st;
}
IsPlane(model)
{
switch(model)
{
case 460:return 1;
case 464:return 1;
case 476:return 1;
case 511:return 1;
case 512:return 1;
case 513:return 1;
case 519:return 1;
case 520:return 1;
case 539:return 1;
case 553:return 1;
case 577:return 1;
case 592:return 1;
case 593:return 1;
case 417:return 1;
case 425:return 1;
case 447:return 1;
case 465:return 1;
case 469:return 1;
case 487:return 1;
case 488:return 1;
case 497:return 1;
case 501:return 1;
case 548:return 1;
case 563:return 1;
}
return 0;
}
Encode(str[]){
new result[256];
set(result, str);
for(new g=0;g<strlen(str);g++){
if(str[g] > 64 && str[g] < 122){
result[g] = str[g];
} else if(str[g] == 122){
result[g] = 65;
}
}
for(new x=0;x<strlen(result)*2;x++){
if(result[x] > 67)
result = CharInject(result, x, result[x]-2);
else
result = CharInject(result, x, (result[x]+56)-2);
x++;
}
return result;
}
Decode(str[]){
new result[256];
set(result, str);
for(new x=0;x<strlen(result);x++){
result = DeleteChar(result, x+1);
}
result[(strlen(str)/2)]='\0';
new result2[256];
set(result2, result);
for(new g=0;g<strlen(result2);g++){
if(result2[g] > 65 && result2[g] < 123){
result[g] = result2[g]-1;
} else if(result2[g] == 65){
result[g] = 122;
}
}
return result;
}
CharInject(strx[], pos, inject){
new str[256];
set(str, strx);
for(new g=pos;g<strlen(str);g++){
str[g+1] = strx[g];
}
str[pos] = inject;
return str;
}
DeleteChar(strx[], pos){
new str[256];
set(str, strx);
for(new g=pos;g<strlen(str);g++){
str[g] = strx[g+1];
}
str[strlen(str)] = '\0';
return str;
}
public OnPlayerStateChange(playerid, newstate, oldstate){
if(newstate == PLAYER_STATE_DRIVER){TextDrawShowForPlayer(playerid, PlayerTextDraw[playerid]);}
return true;}
public ProcessFuelEnd(playerid){
TogglePlayerControllable(playerid, 1);
new Vehid = GetPlayerVehicleID(playerid);
RemovePlayerFromVehicle(playerid);
for(new g=0;g<200;g++)
SetVehicleParamsForPlayer(Vehid,g,0,1);
return true;
}
public RespawnVehicle(vid){
SetVehicleToRespawn(vid);
return true;}
public OnVehicleSpawn(vehicleid){
Paliwo[vehicleid] = PaliwoGlobalne;
for(new g=0;g<200;g++)if(PMVEH[g]!=vehicleid)
SetVehicleParamsForPlayer(vehicleid,g,0,0);
return true;}