Problem sa TDom

cofilinko Započeo cofilinko
pre 1 godinu
1,315
pregleda
12
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
cofilinko
Enforcer
pre 1 godinu
Imam jedan jedini usebox textdraw koji mi se sakrije kada se spawnujem. Nakon 2-3 sekunde mi se pojavi kao da se nije sakrio.
https://imgur.com/a/h1jZctk
cofilinko
Enforcer
cofilinko
Enforcer
pre 1 godinu
Pregledao sam sve preostale TDove, sklonio TextDrawUseBox tamo gde nisu potrebni. Kad otvorim TDove preko TDEditora nemam taj problem.
osman2578
Underboss
pre 1 godinu
postavi nam ovdje kod od onoga što se nalazi u publicu OnPlayerSpawn ili dio kada se igrać loguje na server.
Ne možemo nagađati
cofilinko
Enforcer
pre 1 godinu
Napravio sam druge TDove i nema vise problem sa tim.
Jedini problem sad je taj sto se preview model u brzinometru ne update-uje kada udjem u vozilo.

public PlayerTimer(playerid){
if(IsPlayerInAnyVehicle(playerid)){
if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER){

new veh = GetPlayerVehicleID(playerid);
new sspeed;
format(sspeed, sizeof(sspeed), "%dkm/h", GetSpeed(playerid));
  PlayerTextDrawSetString(playerid, Speedometer, sspeed);

  new moda;
  GetVehicleName(veh, moda, sizeof(moda));
            PlayerTextDrawSetString(playerid, Speedometer, moda);
  PlayerTextDrawSetPreviewModel(playerid, Speedometer, GetVehicleModel(veh));
  PlayerTextDrawSetPreviewVehCol(playerid, Speedometer, 0, 0);
}
}
}
osman2578
Underboss
pre 1 godinu
cofilinko wrote on September 23, 2024, 11:04 am:
Napravio sam druge TDove i nema vise problem sa tim.
Jedini problem sad je taj sto se preview model u brzinometru ne update-uje kada udjem u vozilo.

public PlayerTimer(playerid){
if(IsPlayerInAnyVehicle(playerid)){
if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER){

new veh = GetPlayerVehicleID(playerid);
new sspeed;
format(sspeed, sizeof(sspeed), "%dkm/h", GetSpeed(playerid));
  PlayerTextDrawSetString(playerid, Speedometer, sspeed);

  new moda;
  GetVehicleName(veh, moda, sizeof(moda));
            PlayerTextDrawSetString(playerid, Speedometer, moda);
  PlayerTextDrawSetPreviewModel(playerid, Speedometer, GetVehicleModel(veh));
  PlayerTextDrawSetPreviewVehCol(playerid, Speedometer, 0, 0);
}
}
}


a pod koji dio si stavio da ti pokrece tajmer ?
Ne treba ti ova provjera
if(IsPlayerInAnyVehicle(playerid))

ako si već stavio
if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER)

uvjek kada nešto update-uješ preko tajmera vezano za textdraw, onda moraš ponovo da pokazes taj td.
public PlayerTimer(playerid)
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
new veh = GetPlayerVehicleID(playerid), sspeed, moda;
format(sspeed, sizeof(sspeed), "%dkm/h", GetSpeed(playerid));
PlayerTextDrawSetString(playerid, Speedometer, sspeed);
PlayerTextDrawShow(playerid, Speedometer);

GetVehicleName(veh, moda, sizeof(moda));
PlayerTextDrawSetString(playerid, Speedometer, moda);
PlayerTextDrawShow(playerid, Speedometer);
     
PlayerTextDrawSetPreviewModel(playerid, Speedometer, GetVehicleModel(veh));
PlayerTextDrawSetPreviewVehCol(playerid, Speedometer, 0, 0);
PlayerTextDrawShow(playerid, Speedometer);
}
return 1;
}
cofilinko
Enforcer
pre 1 godinu
Pokusavao sam i da ga opet pokazem, i da ga unistim pa opet napravim ali nista.
Takodje, imam TD koji menja ime u zavisnosti od vozila, on radi bez ikakvog problema a ne pokazujem ga ponovo.
Timer se nalazi u "OnPlayerConnect" funkciji jer mi u tom timeru nece biti samo za vozila update-ovanje vec za novac, jail, vreme renta i slicno..

public OnPlayerConnect(playerid)
{
    CreatePlayerLower(playerid); CreatePlayerSpeedo(playerid);
    ResetVariables(playerid);
    SetPlayerCameraPos(playerid,1501.115478,-2291.721679,44.586883);
    SetPlayerCameraLookAt(playerid,1560.105346,-2309.231933,13.546875);
    ClearChatForPlayer(playerid);
    UpdatePlayer = SetTimerEx("PlayerTimer", 1000, true, "i", playerid);
    return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if (oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER){
        for(new i = 0; i < 4; i++) { TextDrawShowForPlayer(playerid, Speedo); }
for(new i = 0; i < 6; i++) { PlayerTextDrawShow(playerid, Speedometer); }
    }
    return 1;
}
public PlayerTimer(playerid){
    if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
        new veh = GetPlayerVehicleID(playerid);
new sspeed;
format(sspeed, sizeof(sspeed), "%dkm/h", GetSpeed(playerid));
PlayerTextDrawSetString(playerid, Speedometer, sspeed); // Radi bez ponovnog pokazivanja TDa
new moda;
GetVehicleName(veh, moda, sizeof(moda));
PlayerTextDrawSetString(playerid, Speedometer, moda); // radi bez ponovnog pokazivanja TDa
PlayerTextDrawSetPreviewModel(playerid, Speedometer, GetVehicleModel(veh));
PlayerTextDrawSetPreviewVehCol(playerid, Speedometer, 0, 0);
    }
}
osman2578
Underboss
pre 1 godinu
Pošalji mi citav textdraw vezan za vozilo
Speedometer
cofilinko
Enforcer
pre 1 godinu

Speedometer = CreatePlayerTextDraw(playerid, 525.666748, 352.592529, "LD_SPAC:white");
PlayerTextDrawLetterSize(playerid, Speedometer, 0.023000, 4.521629);
PlayerTextDrawTextSize(playerid, Speedometer, 104.333374, 77.985244);
PlayerTextDrawAlignment(playerid, Speedometer, 1);
PlayerTextDrawColor(playerid, Speedometer, -1);
PlayerTextDrawUseBox(playerid, Speedometer, true);
PlayerTextDrawBoxColor(playerid, Speedometer, 0);
PlayerTextDrawSetShadow(playerid, Speedometer, 0);
PlayerTextDrawSetOutline(playerid, Speedometer, 0);
PlayerTextDrawFont(playerid, Speedometer, 5);
PlayerTextDrawSetPreviewModel(playerid, Speedometer, 411);
PlayerTextDrawBackgroundColor(playerid, Speedometer, 0);
PlayerTextDrawSetPreviewRot(playerid, Speedometer, 0.0, 0.0, -20.0, 1.0);

Dodao sam komandu da proverim modelid vozila u kojem sam, prikazuje pravilan modelid.
cofilinko
Enforcer
pre 1 godinu
Zaboravio sam mozda najbitniju stvar. To se desava samo kada rentam vozilo i prebaci me u njega. Dodao sam iste linije koda kad iznajmi vozilo(da mu se sve promeni, ime, model) ali i dalje nista. Takodje, u funkciji "OnPlayerStateChange" sam stavio da sakrije TD a na timeru da ga pokaze i tako radi ali me uzasno zivcira to sto ga na svaku sekundu updatea i treperi.

UPDATE
Reseno, problem je ocigledno pravilo oldstate i newstate pa sam odradio ovako. Ako neko ima savet da odradim "lepse" neka napise primer, hvala.

public OnPlayerStateChange(playerid, newstate, oldstate)
{
new veh = GetPlayerVehicleID(playerid);
if (oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER){
        for(new i = 0; i < 4; i++) { TextDrawShowForPlayer(playerid, Speedo); }
for(new i = 0; i < 6; i++) { PlayerTextDrawShow(playerid, Speedometer); }
}
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
for(new i = 0; i < 4; i++) { TextDrawShowForPlayer(playerid, Speedo); }
for(new i = 0; i < 6; i++) { PlayerTextDrawShow(playerid, Speedometer); }
    new moda;
GetVehicleName(veh, moda, sizeof(moda));
PlayerTextDrawShow(playerid, Speedometer);
PlayerTextDrawSetString(playerid, Speedometer, moda);
PlayerTextDrawSetPreviewModel(playerid, Speedometer, GetVehicleModel(veh));
PlayerTextDrawSetPreviewVehCol(playerid, Speedometer, -1, -1);
}
return 1;
}
osman2578
Underboss
pre 1 godinu
cofilinko wrote on September 23, 2024, 11:46 am:
Zaboravio sam mozda najbitniju stvar. To se desava samo kada rentam vozilo i prebaci me u njega. Dodao sam iste linije koda kad iznajmi vozilo(da mu se sve promeni, ime, model) ali i dalje nista. Takodje, u funkciji "OnPlayerStateChange" sam stavio da sakrije TD a na timeru da ga pokaze i tako radi ali me uzasno zivcira to sto ga na svaku sekundu updatea i treperi.

UPDATE
Reseno, problem je ocigledno pravilo oldstate i newstate pa sam odradio ovako. Ako neko ima savet da odradim "lepse" neka napise primer, hvala.

public OnPlayerStateChange(playerid, newstate, oldstate)
{
new veh = GetPlayerVehicleID(playerid);
if (oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER){
        for(new i = 0; i < 4; i++) { TextDrawShowForPlayer(playerid, Speedo); }
for(new i = 0; i < 6; i++) { PlayerTextDrawShow(playerid, Speedometer); }
}
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
for(new i = 0; i < 4; i++) { TextDrawShowForPlayer(playerid, Speedo); }
for(new i = 0; i < 6; i++) { PlayerTextDrawShow(playerid, Speedometer); }
    new moda;
GetVehicleName(veh, moda, sizeof(moda));
PlayerTextDrawShow(playerid, Speedometer);
PlayerTextDrawSetString(playerid, Speedometer, moda);
PlayerTextDrawSetPreviewModel(playerid, Speedometer, GetVehicleModel(veh));
PlayerTextDrawSetPreviewVehCol(playerid, Speedometer, -1, -1);
}
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    new veh = GetPlayerVehicleID(playerid);
   
    // Provjera samo kad igrač postane vozač
    if (newstate == PLAYER_STATE_DRIVER)
    {
        // Postavljanje imena vozila i modela u TextDraw
        new moda;
        GetVehicleName(veh, moda, sizeof(moda));
        PlayerTextDrawSetString(playerid, Speedometer, moda);
        PlayerTextDrawSetPreviewModel(playerid, Speedometer, GetVehicleModel(veh));
        PlayerTextDrawSetPreviewVehCol(playerid, Speedometer, -1, -1);

        // Prikazivanje Speedo TextDraw-a
        for (new i = 0; i < 4; i++) {
            TextDrawShowForPlayer(playerid, Speedo);
        }

        // Prikazivanje Speedometer PlayerTextDraw-a
        for (new i = 0; i < 6; i++) {
            PlayerTextDrawShow(playerid, Speedometer);
        }
    }

    // Uklanjanje TextDraw-a ako igrač napusti vozilo
    if (newstate == PLAYER_STATE_ONFOOT && oldstate == PLAYER_STATE_DRIVER)
    {
        for (new i = 0; i < 4; i++) {
            TextDrawHideForPlayer(playerid, Speedo);
        }

        for (new i = 0; i < 6; i++) {
            PlayerTextDrawHide(playerid, Speedometer);
        }
    }

    return 1;
}


Ovakav bi kod trebao da bude, krace i bolje od ovoga ne može
cofilinko
Enforcer
pre 1 godinu
K ROSE wrote on September 23, 2024, 12:32 pm:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    new veh = GetPlayerVehicleID(playerid);
   
    // Provjera samo kad igrač postane vozač
    if (newstate == PLAYER_STATE_DRIVER)
    {
        // Postavljanje imena vozila i modela u TextDraw
        new moda;
        GetVehicleName(veh, moda, sizeof(moda));
        PlayerTextDrawSetString(playerid, Speedometer, moda);
        PlayerTextDrawSetPreviewModel(playerid, Speedometer, GetVehicleModel(veh));
        PlayerTextDrawSetPreviewVehCol(playerid, Speedometer, -1, -1);

        // Prikazivanje Speedo TextDraw-a
        for (new i = 0; i < 4; i++) {
            TextDrawShowForPlayer(playerid, Speedo);
        }

        // Prikazivanje Speedometer PlayerTextDraw-a
        for (new i = 0; i < 6; i++) {
            PlayerTextDrawShow(playerid, Speedometer);
        }
    }

    // Uklanjanje TextDraw-a ako igrač napusti vozilo
    if (newstate == PLAYER_STATE_ONFOOT && oldstate == PLAYER_STATE_DRIVER)
    {
        for (new i = 0; i < 4; i++) {
            TextDrawHideForPlayer(playerid, Speedo);
        }

        for (new i = 0; i < 6; i++) {
            PlayerTextDrawHide(playerid, Speedometer);
        }
    }

    return 1;
}

Radi kao sat, hvala ti

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava