Jump to content
  • 0

Actualizare textdraw (speedometer) la secunda (problema)


Question

Posted

salutare,

Cand actualizez textdraw-ul speedometer la secunda apare si dispare, cod:

spedometertimer = SetTimer("Spedometer", 1000, true);

function Spedometer() {
    foreach(Player, i) {
        if(IsPlayerConnected(i) && IsPlayerLogged[i] == 1) {
            if(GetPlayerState(i) == PLAYER_STATE_DRIVER) Checkvehinfo(i);
        }
    }
    return 1;
}

 

Video: 

 

8 answers to this question

Recommended Posts

  • 0
Posted

ingreuneaza serverul daca pun timer-ul asa: spedometertimer = SetTimer("Spedometer", 10, true); (10 milisecunde) ?

  • 0
Posted

Salut @cstef4n,

Pare ca odata la 2 secunde, dispare. Esti sigur ca nu ai pus ceva legat de el, intr-un alt timer?

Cel mai indicat, daca vrei sa fii ajutat la rezolvarea problemei, este sa postezi tot ce este legat de acel sistem, nu e ceva mare. 

On 27.05.2026 at 18:00, cstef4n said:

ingreuneaza serverul daca pun timer-ul asa: spedometertimer = SetTimer("Spedometer", 10, true); (10 milisecunde) ?

Depinde de numarul de jucatori de pe server si de modul in care creezi acel sistem, din cate vad la tine, nu e ceva de actualitate. Daca nu trece de 20, poti sa pui, desi. Dar oricum, nu iti recomand sa il actualizezi la 10 milisecunde.

 

Mai uita-te odata pe codul de la speedometru, si ia in calcul urmatoarele:

  1. Textdrawul tau sa fie creat doar atunci cand jucatorul intra intr-o masina (Indicat la OnPlayerStateChange, care detecteaza si daca jucatorul a fost sau s-a teleportat direct intr-un vehicul. Spre exemplu, daca tu ai pus sa-ti apara la OnPlayerEnterVehicle, si folosesti /closestcar ca sa intri intr-un vehicul, nu iti va fi creat).
  2. Odata pe secunda, trebuie sa se actualizeze Textdraw-ul. Nu trebuie sa-l creezi la fiecare secunda. Doar il actualizezi prin PlayerTextDrawSetString. (Nu mai tin minte exact asta, au trecut ceva ani, dar am impresia ca trebuie sa afisezi din nou Textdrawul prin PlayerTextDrawShow. Dar asta poti verifica singur, incerci fara, iar daca nu apare, adaugi si functia asta dupa PlayerTextDrawSetString)
  3. Cand playerul paraseste vehiculul folosesti tot OnPlayerStateChange ca sa-i distrugi textdrawul.
  4. Ai grija sa detectezi in timerul de 1 secunda daca jucatorul este in momentul in care se apeleaza, intr-un vehicul, prin functia "GetPlayerState". (if(GetPlayerState(playerid) == PLAYER_STATE_DRIVING) => si restul codului functiei tale).

Daca faci toti pasii astea, n ar trebui sa ai probleme cu textdrawul.

Dar, repet, pare ca odata la 2 secunde se distruge, iar cand se apeleaza din nou, se re-creaza, deci verifica sa nu il ai pus si intr-un alt timer.

Eu de obicei aveam pus tot sistemul respectiv intr-un include separat, cu un timer separat sau functia principala din sistem (cea care actualiza textdraw-urile), pusa intr-un timer global de o secunda.

Salut si succes!

Daca te-am ajutat =>

spacer.png

  • 0
Posted
3 hours ago, shane said:

Salut @cstef4n,

Pare ca odata la 2 secunde, dispare. Esti sigur ca nu ai pus ceva legat de el, intr-un alt timer?

Cel mai indicat, daca vrei sa fii ajutat la rezolvarea problemei, este sa postezi tot ce este legat de acel sistem, nu e ceva mare. 

Depinde de numarul de jucatori de pe server si de modul in care creezi acel sistem, din cate vad la tine, nu e ceva de actualitate. Daca nu trece de 20, poti sa pui, desi. Dar oricum, nu iti recomand sa il actualizezi la 10 milisecunde.

 

Mai uita-te odata pe codul de la speedometru, si ia in calcul urmatoarele:

  1. Textdrawul tau sa fie creat doar atunci cand jucatorul intra intr-o masina (Indicat la OnPlayerStateChange, care detecteaza si daca jucatorul a fost sau s-a teleportat direct intr-un vehicul. Spre exemplu, daca tu ai pus sa-ti apara la OnPlayerEnterVehicle, si folosesti /closestcar ca sa intri intr-un vehicul, nu iti va fi creat).
  2. Odata pe secunda, trebuie sa se actualizeze Textdraw-ul. Nu trebuie sa-l creezi la fiecare secunda. Doar il actualizezi prin PlayerTextDrawSetString. (Nu mai tin minte exact asta, au trecut ceva ani, dar am impresia ca trebuie sa afisezi din nou Textdrawul prin PlayerTextDrawShow. Dar asta poti verifica singur, incerci fara, iar daca nu apare, adaugi si functia asta dupa PlayerTextDrawSetString)
  3. Cand playerul paraseste vehiculul folosesti tot OnPlayerStateChange ca sa-i distrugi textdrawul.
  4. Ai grija sa detectezi in timerul de 1 secunda daca jucatorul este in momentul in care se apeleaza, intr-un vehicul, prin functia "GetPlayerState". (if(GetPlayerState(playerid) == PLAYER_STATE_DRIVING) => si restul codului functiei tale).

Daca faci toti pasii astea, n ar trebui sa ai probleme cu textdrawul.

Dar, repet, pare ca odata la 2 secunde se distruge, iar cand se apeleaza din nou, se re-creaza, deci verifica sa nu il ai pus si intr-un alt timer.

Eu de obicei aveam pus tot sistemul respectiv intr-un include separat, cu un timer separat sau functia principala din sistem (cea care actualiza textdraw-urile), pusa intr-un timer global de o secunda.

Salut si succes!

am incercat mane dar tot nu merge.
Daca ai timp sa intri tu in PC la mine sa verifici codul ar fi mai ok

  • 0
Posted

poftim: 

new PlayerText: SpeedoTD;

La ResetVariables(playerid):

PlayerTextDrawHide(playerid, SpeedoTD);

 

La OnPlayerSpawn: 

PlayerTextDrawHide(playerid, SpeedoTD);

 

La OnPlayerStateChange:

    if(newstate == PLAYER_STATE_ONFOOT) {
            PlayerTextDrawHide(playerid, SpeedoTD);
    }

 

function Checkvehinfo(i) {
    if(GetPlayerState(i) == PLAYER_STATE_DRIVER) {        

        new status[180], str[256], benzina[64],
            engine,lights,alarm,doors,bonnet,boot,objective,
            vehicle = GetPlayerVehicleID(i), spe = Carspeed(i), carid = FindSpawnID(vehicle);
        
        GetVehicleParamsEx(vehicle,engine,lights,alarm,doors,bonnet,boot,objective);
        
        if(doors == 1) { status = "Doors: ~r~Locked~w~~h~"; }
        else if(doors == 0) { status = "Doors: ~w~Unlocked~w~~h~"; }
        else status = "Doors: ~w~Unlocked~w~~h~";            
        
        if(Gas[vehicle] > 20) format(benzina, sizeof(benzina), "%d", Gas[vehicle]);
        else format(benzina, sizeof(benzina), "~r~%d", Gas[vehicle]);
        
        if(CarInfo[carid][cID] != -2 && carid != 0 && !IsAPlane(vehicle)) {
            if(!IsABike(vehicle) && !IsAPlane(vehicle)) format(str, sizeof(str), "Speed: ~y~%d~w~~h~ km/h~w~~h~~n~Odometer: %.2f~n~%s~n~Fuel: %s%s", spe, CarInfo[carid][KM], status, benzina, "%");
            else format(str, sizeof(str), "Speed: ~y~%d~w~~h~ km/h~n~Odometer: %.2f~n~%s", spe, CarInfo[carid][KM], status);
            PlayerTextDrawSetString(i, SpeedoTD, str);        
            PlayerTextDrawShow(i, SpeedoTD);                    
        }
        else {
            if(!IsABike(vehicle) && !IsAPlane(vehicle)) format(str, sizeof(str), "Speed: ~y~%d~w~~h~ km/h~w~~h~~n~%s~n~Fuel: %s%s", spe, status, benzina, "%");
            else format(str, sizeof(str), "Speed: ~y~%d~w~~h~ km/h~n~%s", spe, status);
            if(IsAPlane(vehicle) && CarInfo[carid][cID]) format(str, sizeof(str), "Speed: ~y~%d~w~~h~ km/h~n~Odometer: %.2f~n~%s", spe, CarInfo[carid][KM], status);
            PlayerTextDrawSetString(i, SpeedoTD, str);        
            PlayerTextDrawShow(i, SpeedoTD);
        }
    }
    return 1;
}

 

function Spedometer() {
    foreach(Player, i) {
        if(IsPlayerConnected(i) && IsPlayerLogged[i] == 1) {
            if(GetPlayerState(i) == PLAYER_STATE_DRIVER) Checkvehinfo(i);
        }
    }
    return 1;
}

 

spedometertimer = SetTimer("Spedometer", 1000, true);

 

Asta e tot .

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.