Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Исправленый и доработанный Бензин v.2

Статус
В этой теме нельзя размещать новые ответы.

DimaBDV

Умник
Префикс мануал добавьте, а то мне недоступен
Ребят, когда я ставил к себе Бензин v.2 мягко говоря е***ся с YSI и самим кодом.
Использовалась система ZCMD
Теперь переделанный код:
1. Подготовка
Сначало, в верх мода
PHP:
#include <ZCMD>
Далее, ко всем new
PHP:
new Text:FuelDraw[MAX_PLAYERS]; 
new Text:SpeedDraw[MAX_PLAYERS];//bonus 
new Text:HealthDraw[MAX_PLAYERS];//bonus 
new FuelCar[MAX_VEHICLES];
Затем, в OnGameModeInt() в самый низ
PHP:
SetTimer("SecondTimer",1000,1); 
SetTimer("FuelSys",60000,1); 
for(new i=0; i < MAX_VEHICLES; i++) { 
     SetVehicleParamsEx(i,false,false,false,false,false,false,false); 
     FuelCar[i] = 50; 
     if(i == MAX_VEHICLES) {break;} 
}
И добавим команду включения / выключения движка (командой и кнопкой)

В любое место мода (не в паблик и не в калбек!)
PHP:
CMD:en(playerid) 
{ 
    new string[60]; 
    new vid = GetPlayerVehicleID(playerid); 
    new engine,lights,alarm,doors,bonnet,boot,objective; 
    engine = 0; 
    GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective); 
    if(IsPlayerInVehicle(playerid,vid)) 
    { 
        if(engine == 0) 
        { 
            SetVehicleParamsEx(vid,1,1,alarm,doors,bonnet,boot,objective); 
            format(string, sizeof(string), "*%s заводит двигатель.", GetPlayerNameEx(playerid));//у кого на это ругается можите удалить 
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,0,0);//у кого на это ругается можите удалить 
        } 
        if(engine == 1) 
        { 
            SetVehicleParamsEx(vid,0,0,alarm,doors,bonnet,boot,objective); 
            format(string, sizeof(string), "*%s глушит двигатель.", GetPlayerNameEx(playerid));//у кого на это ругается можите удалить 
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,0,0);//у кого на это ругается можите удалить 
        } 
         
        
    } 
        return 1; 
}
а так же в public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
PHP:
if (newkeys == 512) 
{ 
    return cmd_en(playerid); 
} 
return 1; 
}
если переменная
PHP:
if (newkeys == 512)
используется, значит в неё просто засунуть
PHP:
return cmd_en(playerid);
И ещё при коннекте добавим текстдравы(я не стал их дорабатывать, со временем, но они немного нагружают серв)
PHP:
public OnPlayerConnect(playerid) 
{ 
    HealthDraw[playerid] = TextDrawCreate(15.0,280.0," "); 
    TextDrawColor(HealthDraw[playerid],0xF5DEB3AA); 
    TextDrawFont(HealthDraw[playerid],1); 
    TextDrawSetShadow(HealthDraw[playerid],0); 
    TextDrawSetOutline(HealthDraw[playerid],1); 
    TextDrawShowForPlayer(playerid,HealthDraw[playerid]); 

    FuelDraw[playerid] = TextDrawCreate(15.0,292.0," "); 
    TextDrawColor(FuelDraw[playerid],0xF5DEB3AA); 
    TextDrawFont(FuelDraw[playerid],1); 
    TextDrawSetShadow(FuelDraw[playerid],0); 
    TextDrawSetOutline(FuelDraw[playerid],1); 
    TextDrawShowForPlayer(playerid,FuelDraw[playerid]); 

    SpeedDraw[playerid] = TextDrawCreate(15.0,304.0," "); 
    TextDrawColor(SpeedDraw[playerid],0xF5DEB3AA); 
    TextDrawFont(SpeedDraw[playerid],1); 
    TextDrawSetShadow(SpeedDraw[playerid],0); 
    TextDrawSetOutline(SpeedDraw[playerid],1); 
    TextDrawShowForPlayer(playerid,SpeedDraw[playerid]); 

}
2. И собственно сама система бензика (её тело)

Вопервых, таймер, который можно оптимизировать (он и нагружает серв, исправлю со временем), это приборная панелька :)
PHP:
forward SecondTimer(); 
public SecondTimer () { 
     new Float:speed_x,Float:speed_y,Float:speed_z,Float:final_speed,speed_string[256],final_speed_int;//vehicleid, 
     new Float:vehicle_health,final_vehicle_health,health_string[256],str3[128]; 
for(new i=0;i<GetMaxPlayers();i++) 
{ 
     if(GetPlayerVehicleID(i) != 0) { 
          GetVehicleVelocity(GetPlayerVehicleID(i),speed_x,speed_y,speed_z); 
          final_speed = floatsqroot(((speed_x*speed_x)+(speed_y*speed_y))+(speed_z*speed_z))*250.666667; 
          final_speed_int = floatround(final_speed,floatround_round); 
          format(speed_string,256,"Speed: %i kh/h",final_speed_int); 
          TextDrawSetString(SpeedDraw[i], speed_string); 
          GetVehicleHealth(GetPlayerVehicleID(i),vehicle_health); 
          final_vehicle_health = floatround(floatround(vehicle_health - 250)/ 7.5); 
          format(health_string,256,"Health: %i HP", final_vehicle_health); 
          TextDrawSetString(HealthDraw[i], health_string); 
          format(str3,sizeof(str3),"Fuel: %i L",FuelCar[GetPlayerVehicleID(i)]); 
          TextDrawSetString(FuelDraw[i],str3); 
for(new h=0; h != MAX_VEHICLES; h++) //если бензы нет то и далеко неуедем :) ну разве что до ближайшей заправки
    { 
        if(FuelCar[h] == 0) 
        { 
            SetVehicleParamsEx(h,false,false,false,false,false,false,false); 
        } 
    } 
     } 
     else { 
          TextDrawSetString(SpeedDraw[i], " "); 
          TextDrawSetString(HealthDraw[i], " "); 
          TextDrawSetString(FuelDraw[i], " "); 
     }
 
} 
}
Далее, система опустошения бака :)
PHP:
forward FuelSys(); 
public FuelSys () 
{ 
    for(new i=0; i != MAX_VEHICLES; i++) 
    { 
        if(CheckEngine(i) && FuelCar[i] != 0) 
        { 
            FuelCar[i]--; 
        } 
    } 
}
И естественно проверочка на включенный движок (какж без неё)
PHP:
stock CheckEngine(veh) { 
    new engine,lights,alarm,doors,bonnet,boot,objective; 
    GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective); 
    if(engine) { 
        return 1; 
    } 
    return 0; 
}
PHP:
#include <a_samp> 
#include <ZCMD> 
#pragma tabsize 0 

new Text:FuelDraw[MAX_PLAYERS]; 
new Text:SpeedDraw[MAX_PLAYERS];//bonus 
new Text:HealthDraw[MAX_PLAYERS];//bonus 
new FuelCar[MAX_VEHICLES]; 

public OnGameModeInit() 
{ 
SetTimer("SecondTimer",1000,1); 
SetTimer("FuelSys",60000,1); 
ManualVehicleEngineAndLights(); 
for(new i=0; i < MAX_VEHICLES; i++) { 
     SetVehicleParamsEx(i,false,false,false,false,false,false,false); 
     FuelCar[i] = 50; 
     if(i == MAX_VEHICLES) {break;} 
} 

} 

CMD:en(playerid) 
{ 
    new string[60]; 
    new vid = GetPlayerVehicleID(playerid); 
    new engine,lights,alarm,doors,bonnet,boot,objective; 
    engine = 0; 
    GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective); 
    if(IsPlayerInVehicle(playerid,vid)) 
    { 
        if(engine == 0) 
        { 
            SetVehicleParamsEx(vid,1,1,alarm,doors,bonnet,boot,objective); 
            format(string, sizeof(string), "*%s заводит двигатель.", GetPlayerNameEx(playerid));//у кого на это ругается можите удалить 
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,0,0);//у кого на это ругается можите удалить 
        } 
        if(engine == 1) 
        { 
            SetVehicleParamsEx(vid,0,0,alarm,doors,bonnet,boot,objective); 
            format(string, sizeof(string), "*%s глушит двигатель.", GetPlayerNameEx(playerid));//у кого на это ругается можите удалить 
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,0,0);//у кого на это ругается можите удалить 
        } 
         
        
    } 
        return 1; 
} 

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) 
{ 
if (newkeys == 512) // 2 yoi ea eiiiee 
{ 
    return cmd_en(playerid); 
} 
return 1; 
} 


public OnPlayerConnect(playerid) 
{ 
    HealthDraw[playerid] = TextDrawCreate(15.0,280.0," "); 
    TextDrawColor(HealthDraw[playerid],0xF5DEB3AA); 
    TextDrawFont(HealthDraw[playerid],1); 
    TextDrawSetShadow(HealthDraw[playerid],0); 
    TextDrawSetOutline(HealthDraw[playerid],1); 
    TextDrawShowForPlayer(playerid,HealthDraw[playerid]); 

    FuelDraw[playerid] = TextDrawCreate(15.0,292.0," "); 
    TextDrawColor(FuelDraw[playerid],0xF5DEB3AA); 
    TextDrawFont(FuelDraw[playerid],1); 
    TextDrawSetShadow(FuelDraw[playerid],0); 
    TextDrawSetOutline(FuelDraw[playerid],1); 
    TextDrawShowForPlayer(playerid,FuelDraw[playerid]); 

    SpeedDraw[playerid] = TextDrawCreate(15.0,304.0," "); 
    TextDrawColor(SpeedDraw[playerid],0xF5DEB3AA); 
    TextDrawFont(SpeedDraw[playerid],1); 
    TextDrawSetShadow(SpeedDraw[playerid],0); 
    TextDrawSetOutline(SpeedDraw[playerid],1); 
    TextDrawShowForPlayer(playerid,SpeedDraw[playerid]); 

} 
forward SecondTimer(); 
public SecondTimer () { 
     new Float:speed_x,Float:speed_y,Float:speed_z,Float:final_speed,speed_string[256],final_speed_int;//vehicleid, 
     new Float:vehicle_health,final_vehicle_health,health_string[256],str3[128]; 
for(new i=0;i<GetMaxPlayers();i++) 
{ 
     if(GetPlayerVehicleID(i) != 0) { 
          GetVehicleVelocity(GetPlayerVehicleID(i),speed_x,speed_y,speed_z); 
          final_speed = floatsqroot(((speed_x*speed_x)+(speed_y*speed_y))+(speed_z*speed_z))*250.666667; 
          final_speed_int = floatround(final_speed,floatround_round); 
          format(speed_string,256,"Speed: %i kh/h",final_speed_int); 
          TextDrawSetString(SpeedDraw[i], speed_string); 
          GetVehicleHealth(GetPlayerVehicleID(i),vehicle_health); 
          final_vehicle_health = floatround(floatround(vehicle_health - 250)/ 7.5); 
          format(health_string,256,"Health: %i HP", final_vehicle_health); 
          TextDrawSetString(HealthDraw[i], health_string); 
          format(str3,sizeof(str3),"Fuel: %i L",FuelCar[GetPlayerVehicleID(i)]); 
          TextDrawSetString(FuelDraw[i],str3); 
for(new h=0; h != MAX_VEHICLES; h++) 
    { 
        if(FuelCar[h] == 0) 
        { 
            SetVehicleParamsEx(h,false,false,false,false,false,false,false); 
        } 
    } 
     } 
     else { 
          TextDrawSetString(SpeedDraw[i], " "); 
          TextDrawSetString(HealthDraw[i], " "); 
          TextDrawSetString(FuelDraw[i], " "); 
     } 
} 
} 
forward FuelSys(); 
public FuelSys () 
{ 
    for(new i=0; i != MAX_VEHICLES; i++) 
    { 
        if(CheckEngine(i) && FuelCar[i] != 0) 
        { 
            FuelCar[i]--; 
        } 
    } 
} 

stock CheckEngine(veh) { 
    new engine,lights,alarm,doors,bonnet,boot,objective; 
    GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective); 
    if(engine) { 
        return 1; 
    } 
    return 0; 
}

Автор урока: Frapsy
Доработчик и дебагер: DimaBDV
Прошу не минусовать, но YSI и те первоначальные баги мне непонравились :)

Ds™
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу