Jump to content
  • 0

Problema afisare PlayerTextDraw


StrypS

Question

Hai salut, am si eu o problema nu se afiseaza PlayerTextDraw am incercat sa fac un DMV teoretic.

am urmatoarele:


new PlayerText:DmvPTD[3]; //definirea


la LoadPTDS(playerid);

    DmvPTD[0] = CreatePlayerTextDraw(playerid, 323.500000, 149.533325, "~Y~Ce trebuie sa faci dupa ora 20:00?");
    PlayerTextDrawLetterSize(playerid, DmvPTD[0], 0.207999, 1.360000);
    PlayerTextDrawAlignment(playerid, DmvPTD[0], 2);
    PlayerTextDrawColor(playerid, DmvPTD[0], -1);
    PlayerTextDrawSetShadow(playerid, DmvPTD[0], 0);
    PlayerTextDrawSetOutline(playerid, DmvPTD[0], 1);
    PlayerTextDrawBackgroundColor(playerid, DmvPTD[0], 255);
    PlayerTextDrawFont(playerid, DmvPTD[0], 2);
    PlayerTextDrawSetProportional(playerid, DmvPTD[0], 1);
    PlayerTextDrawSetShadow(playerid, DmvPTD[0], 0);

    DmvPTD[1] = CreatePlayerTextDraw(playerid, 326.500000, 160.133300, "~B~00:30");
    PlayerTextDrawLetterSize(playerid, DmvPTD[1], 0.400000, 1.600000);
    PlayerTextDrawAlignment(playerid, DmvPTD[1], 2);
    PlayerTextDrawColor(playerid, DmvPTD[1], -1);
    PlayerTextDrawSetShadow(playerid, DmvPTD[1], 0);
    PlayerTextDrawSetOutline(playerid, DmvPTD[1], 1);
    PlayerTextDrawBackgroundColor(playerid, DmvPTD[1], 255);
    PlayerTextDrawFont(playerid, DmvPTD[1], 3);
    PlayerTextDrawSetProportional(playerid, DmvPTD[1], 1);
    PlayerTextDrawSetShadow(playerid, DmvPTD[1], 0);

    DmvPTD[2] = CreatePlayerTextDraw(playerid, 167.500000, 184.399993, "A. Trebuie sa aprind farurile.~n~~n~B. Trebuie sa inchid geamurile.~n~~n~C. Trebuie sa port ochelari");
    PlayerTextDrawLetterSize(playerid, DmvPTD[2], 0.209999, 1.579110);
    PlayerTextDrawAlignment(playerid, DmvPTD[2], 1);
    PlayerTextDrawColor(playerid, DmvPTD[2], -1);
    PlayerTextDrawSetShadow(playerid, DmvPTD[2], 0);
    PlayerTextDrawSetOutline(playerid, DmvPTD[2], 1);
    PlayerTextDrawBackgroundColor(playerid, DmvPTD[2], 255);
    PlayerTextDrawFont(playerid, DmvPTD[2], 2);
    PlayerTextDrawSetProportional(playerid, DmvPTD[2], 1);
    PlayerTextDrawSetShadow(playerid, DmvPTD[2], 0);



si noile functii si comanda:

function FailDMV(playerid)
{
    for(new i = 0; i < 4; i++)
        TextDrawHideForPlayer(playerid, DmvTD);

    for(new i = 0; i < 3; i++)
        PlayerTextDrawHide(playerid, DmvPTD);
    CancelSelectTextDraw(playerid);
    
    DMVStage[playerid] = 0;
    DMVTimer[playerid] = 0;
    SetPlayerPos(playerid, 1676.5024, -1854.1930, 13.5334);
    SetCameraBehindPlayer(playerid);
    SetPlayerVirtualWorld(playerid, 0);
    TogglePlayerControllable(playerid, true);
    return true;
}
function showDMV(playerid)
{
    if(DMVStage[playerid] == 1)
    {
        for(new i = 0; i < 4; i++)
            TextDrawShowForPlayer(playerid, DmvTD);
        
        for(new i = 0; i < 3; i++)
            PlayerTextDrawShow(playerid, DmvPTD);
        SelectTextDraw(playerid, COLOR_GREEN);
    }
    
    DMVTimer[playerid] = 30;
    PlayerTextDrawShow(playerid, DmvPTD[1]);
    
    new question[64], answer[128];
    switch(DMVStage[playerid])
    {
        case 1:
        {
            format(question, sizeof question, "Ce trebuie sa faci dupa ora 20:00?");
            format(answer, sizeof answer, "A. Trebuie sa aprind farurile.~n~~n~B. Trebuie sa inchid geamurile.~n~~n~C. Trebuie sa port ochelari.");
         }
         case 2:
         {
            format(question, sizeof question, "Ce primesti daca conduci pe contrasens?");
            format(answer, sizeof answer, "A. Primesc un bonus.~n~~n~B. Primesc ban 3 zile.~n~~n~C. Primesc amenda de la un politist.");
        }
         case 3:
         {
            format(question, sizeof question, "Care este limta de viteza in oras?");
            format(answer, sizeof answer, "A. Limita este de 80 KM/H.~n~~n~B. Limita este de 50 KM/H.~n~~n~C. Limita este de 100 KM/H.");
        }
    }
    PlayerTextDrawSetString(playerid, DmvPTD[0], question);
    PlayerTextDrawShow(playerid, DmvPTD[0]);
    PlayerTextDrawSetString(playerid, DmvPTD[2], answer);
    PlayerTextDrawShow(playerid, DmvPTD[2]);
    return true;
}

function failedQuestion(playerid)
{
    switch(DMVStage[playerid])
    {
        case 1: SendClientMessage(playerid, COLOR_RED, "Raspunsul corect era: A. Trebuie sa aprind farurile.");
        case 2: SendClientMessage(playerid, COLOR_RED, "Raspunsul corect era: C. Primesc amenda de la un politist.");
        case 3: SendClientMessage(playerid, COLOR_RED, "Raspunsul corect era: B. Limita de viteza este 50 KM/H.");
    }
    FailDMV(playerid);
    return true;
}

function passedQuestion(playerid)
{
    DMVStage[playerid]++;
    showDMV(playerid);
    
    if(DMVStage[playerid] == 4)
    {
        FailDMV(playerid);
        SendClientMessage(playerid, COLOR_RED, "Felicitari ai trecut proba teoretica. Acum urmeaza traseul.");
    }
    return true;
}

CMD:examen(playerid, params[])
{
    if(gPlayerLogged[playerid] == 0) return SendClientMessage(playerid, COLOR_ERROR, "Nu esti logat.");
    if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_SERVER, "You can't use this command when you are in a car.");
    if(!PlayerToPoint(2.0, playerid, 2056.5339,-1911.0978,13.5500)) return SendClientMessage(playerid, COLOR_ERROR, "Nu te afli la DMV");
       DMVStage[playerid] = 1;
       showDMV(playerid);
    
       SetPlayerPos(playerid, 1686.4027, -1869.5852, 26.2906);
       TogglePlayerControllable(playerid, false);
       SetPlayerCameraPos(playerid, 1686.4027, -1869.5852, 25.2906);
       SetPlayerCameraLookAt(playerid, 1685.8326, -1868.7650, 24.6206);
       SetPlayerVirtualWorld(playerid, playerid + 10);
    return true;
}




AM INCERCAT SI VARIANTA [MAX_PLAYERS] SI [playerid] dar fara folos

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Cand tu arati la showDMV textdraw-urile ( defapt asta vrei sa faci ) te folosesti de loop ( o bucla ), ce face ? Ei bine, mai pe romaneste se repeta continu pana ajunge la rezultatul impus de tine, pe intelesul tau, ca daca zic in alti termeni nu prea intelegi :)

 

Exemplu: 

	for(new i = 1; i < 4; i++) 
	{
	printf("Numarul este: %d"); 
	}
	

 

Bun, codul de mai sus incepe executia de la numarul 1 si se va opri la 3, incepe de la unu pentru ca: "new i = 1; " in loc de unu pui valoarea de la care vrei sa inceapa executia. Dupa urmeaza conditia: " i < 4; " ( i sa fie mai mic decat 4, adica pana la 3, poti pune si <= 4, adica mai mic sau egal cu 4, adica o sa il includa si pe 4. Si dupa " i ++; " ca sa creasca valoarea, ex: incepe de la unu, creste la 2, dupa la 3. 

Daca executi codul de mai sus intr-o comanda si te uiti in consola, 100% vei intelege, daca esti una dintre persoanele care inteleg din practica decat din teorie. 

 

Trecand peste teorie, sper ca ai inteles ceva, problema la sistemul tau este si cand arata si cand ascunde textdraw urile, de ce ? Ca sa nu mai arati pe rand textdraw urile de la 0 la 3, cel care a facut sistemul ala a folosit loop-ul ( bucla, despre care am vorbit si mai sus, care e mai rapida ). 

 

tu ai urmatorul cod: 

	for(new i = 0; i < 3; i++) PlayerTextDrawShow(playerid, DMVPTD); 
	

 

Care e problema ? 

Ei bine, tu ai pornit bucla, care sa ajunga pana la 3( 0,1,2, ), dar cand ai aratat TD ul nu te ai folosit de bucla, in concluzie nu se afiseaza niciun td. 

 

Dupa cum vezi tu ai : new PlayerText: DMVPTD[3];  asta inseamna ca ai td ul DMVPTD[0], DMVPTD[1], DMVPTD[2], pe care vrei sa le arati prin bucla aia, si ti am explicat mai sus cum se face.

 

In concluzie codul corect este:

	for(new i = 0; i < 3; i++) PlayerTextDrawShow(playerid, DMVPTD[i]); 
	

 

Si cand le ascunde, acceasi e problema.

Sper ca ai inteles ce am trancanit eu pana acum aici. 

Link to comment
Share on other sites

  • 0
12 minutes ago, Dennis12. said:

Cand tu arati la showDMV textdraw-urile ( defapt asta vrei sa faci ) te folosesti de loop ( o bucla ), ce face ? Ei bine, mai pe romaneste se repeta continu pana ajunge la rezultatul impus de tine, pe intelesul tau, ca daca zic in alti termeni nu prea intelegi :)

 

Exemplu: 

 


	for(new i = 1; i < 4; i++) 
	{
	printf("Numarul este: %d"); 
	}
	

 

 

Bun, codul de mai sus incepe executia de la numarul 1 si se va opri la 3, incepe de la unu pentru ca: "new i = 1; " in loc de unu pui valoarea de la care vrei sa inceapa executia. Dupa urmeaza conditia: " i < 4; " ( i sa fie mai mic decat 4, adica pana la 3, poti pune si <= 4, adica mai mic sau egal cu 4, adica o sa il includa si pe 4. Si dupa " i ++; " ca sa creasca valoarea, ex: incepe de la unu, creste la 2, dupa la 3. 

Daca executi codul de mai sus intr-o comanda si te uiti in consola, 100% vei intelege, daca esti una dintre persoanele care inteleg din practica decat din teorie. 

 

Trecand peste teorie, sper ca ai inteles ceva, problema la sistemul tau este si cand arata si cand ascunde textdraw urile, de ce ? Ca sa nu mai arati pe rand textdraw urile de la 0 la 3, cel care a facut sistemul ala a folosit loop-ul ( bucla, despre care am vorbit si mai sus, care e mai rapida ). 

 

tu ai urmatorul cod: 

 


	for(new i = 0; i < 3; i++) PlayerTextDrawShow(playerid, DMVPTD); 
	

 

 

Care e problema ? 

Ei bine, tu ai pornit bucla, care sa ajunga pana la 3( 0,1,2, ), dar cand ai aratat TD ul nu te ai folosit de bucla, in concluzie nu se afiseaza niciun td. 

 

Dupa cum vezi tu ai : new PlayerText: DMVPTD[3];  asta inseamna ca ai td ul DMVPTD[0], DMVPTD[1], DMVPTD[2], pe care vrei sa le arati prin bucla aia, si ti am explicat mai sus cum se face.

 

In concluzie codul corect este:

 


	for(new i = 0; i < 3; i++) PlayerTextDrawShow(playerid, DMVPTD[i]); 
	

 

 

Si cand le ascunde, acceasi e problema.

Sper ca ai inteles ce am trancanit eu pana acum aici. 

Sefule le am, dar nush dc nu sa postat cand am dat copi paste pe forum

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.