Проблема с пробегом у автомобиля
#1

Можите подсказать как сделать чтобы когда игрок проехал например 100м на машине, то к пробегу +1
Сам пробывал, ничего не выходит...
Вот паблик отвечающий за скорость (если он нужен)
PHP код:
GetPlayerSpeed(playerid)
{
    new 
Float:ST[4];
    if(
IsPlayerInAnyVehicle(playerid))GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
    else 
GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
    
ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 200.0;// Ñêîðîñòü òà÷åê
    
return floatround(ST[3]);

Reply
#2

Probeg[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0));
а когда выводим на экран делим на 100 и округляем.
Reply
#3

Поподробнее можно пж)
Reply
#4

Так вроде.
PHP код:
GetPlayerProbeg(playerid
{
    new 
Float:ST[3];
    
GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]); 
    return 
floatpower(floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) +  floatpower(floatabs(ST[2]), 2.0)) \ 100);

Reply
#5

Неа..
Reply
#6

А зачем считать скорость 2 раза? если TS предоставил функцию определения скорости?

PHP код:
new float:DistanceTraveled[max_vehiles]; // В начале кода
DistanceTraveled[vid] += GetPlayerSpeed(playerid) / 3.6// В какой нить !!!секундный!!! таймер 
Соответственно в DistanceTraveled[vid] храниться пробег в метрах. Далее сам конвертируй хоть в попугаев, хоть в драконов...
Reply
#7

-Stranger- - точность хромать будет =), но мы же не считаем сантиметры...
Reply
#8

Quote:
Originally Posted by White_116
Посмотреть сообщение
-Stranger- - точность хромать будет =)
А что, извините, не хромает в этом мультиплеере !?!
Согласен, что на каждый КМ, показания уйдут на 10-15% Зато просто, и без извращения.

Это не учитывая то, что GetVehicleVelocity, GetPlayerVelocity измеряет соотношении длинны хвоста дракона на длину его крыльев, а не ускорение машины\игрока.

Так что погрешности это нормально в данном случае, по крайне мере они не будут сильно уходить от показание спидометра.
Reply
#9

Вот смотрите что получилось:


Как я вставлял:
PHP код:
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
        {
//==========================================Скорость================
        
new string[MAX_STRING];
        new 
door[16];
        new 
GetPlayerVehicleID(playerid);
     
// //   //====================================[ДВЕРИ]==================================
        
if(gCarLock[v] == 1)format(door16"€AKP‘Џ‘");//Закрыты
         
if(gCarLock[v] == 0)format(door16"OЏKP‘Џ‘");//Открыты
      //    //   //===========================[Текстдравы, показывает]==========================
        
format(stringsizeof(string), FixText("~w~Скорость ~g~%d км/ч~n~~w~ЏOЊ‡…ўO: ~g~%d лит~n~~w~Пробег: ~g~%d"),GetPlayerSpeed(playerid), Gas[v],DistanceTraveled[playerid]);
        
TextDrawSetString(Textdraw0[playerid], string);
        } 
Потом ко всем new:
PHP код:
new float:DistanceTraveled[MAX_CARS]; 
И в Секундный таймер:
PHP код:
if(GetPlayerState(i)==PLAYER_STATE_DRIVER)//когда чувак только зарулём
            
{
                
DistanceTraveled[i] += GetPlayerSpeed(i) / 3.6;//Вот Пробег
                
new GetPlayerVehicleID(i);
                if(
GetPVarInt(i"EngineTimer") > && GetPVarType(i"EngineTimer")!=0)
                {
                    
SetPVarInt(i"EngineTimer"GetPVarInt(i"EngineTimer")-1);
                    if(
GetPVarInt(i"EngineTimer") == 0)
                    {
                        new 
sendername[MAX_PLAYER_NAME];
                        
GetPlayerName(isendernamesizeof(sendername));
                        new 
Float:carhp;
                        
GetVehicleHealth(v,carhp);
                        if(
carhp 450&&Gas[v] > 0)
                        {
                            
StartEngine(v);
                            
SendClientMessage(iCOLOR_GREEN,"Ваш автомобиль завелся.");
                            
format(stringsizeof(string), "Автомобиль %s завёлся"VehName[GetVehicleModel(v)-400]);
                            
ProxDetector(30.0i,stringCOLOR_PURPLE);
                            
Engine[v] = 1;
                        }
                        else 
SendClientMessage(iCOLOR_GREEN,"Двигатель не зводится.");
                    }
                }
                if((
IsABoat(v)&&PlayerInfo[i][pBoatLic] < 1||IsAPlane(v)&&PlayerInfo[i][pFlyLic] < 1||IsACarB(v)&&PlayerInfo[i][pCarLic] < 1)&&(TakingLesson[i] != 1))RemovePlayerFromVehicle(i);
            } 
Reply
#10

new float : DistanceTraveled[MAX_CARS];
выводишь на экран не правильно, и переменную задаёшь не правильно, так как используешь для игроков.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)