Portal SAMP
[Ajuda] querbra de linha em textdraw - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] querbra de linha em textdraw (/showthread.php?tid=4905)



querbra de linha em textdraw - André Santos - 20/10/2024

queria saber como posso quebrar a linha para o nome ficar em baixo do outro 
pois aqui format(string, sizeof(string), "%d %s\n", i + 1, playerName, CheckpointCount[ranks[i]]); 
fica assim  tudo na mesma linha 1 andre 2 aleatorio 3 aleatorio
pois queria que ficasse assim um abaixo do outro  estou tentando mas ja nao sei oq fazer coloquei para ser exbido em uma textdraw sou leigo em pawno e queria ajuda

1 andre
2 aleatorio
3 blablabla


#include <a_samp>

new Text:TextdrawRank;
new CheckpointCount[MAX_PLAYERS];

public OnPlayerEnterRaceCheckpoint(playerid)
{
    CheckpointCount[playerid]++;
    UpdateRankings();
}

UpdateRankings()
{
    new string[256];
    new rankString[512];
    rankString[0] = '\0';
    new ranks[MAX_PLAYERS];
    new rankCount = 0;

    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        if (CheckpointCount[i] > 0)
        {
            ranks[rankCount++] = i;
        }
    }
    for (new i = 0; i < rankCount - 1; i++)
    {
        for (new j = i + 1; j < rankCount; j++)
        {
            if (CheckpointCount[ranks[i]] < CheckpointCount[ranks[j]])
            {
             
                new temp = ranks[i];
                ranks[i] = ranks[j];
                ranks[j] = temp;
            }
        }
    }
    for (new i = 0; i < rankCount && i < 5; i++) // Exibe apenas os 5 primeiros
    {
        new playerName[24];
        GetPlayerName(ranks[i], playerName, sizeof(playerName));
        format(string, sizeof(string), "%d %s\n", i + 1, playerName, CheckpointCount[ranks[i]]);
        strcat(rankString, string);
    }
    TextDrawSetString(TextdrawRank, rankString);
}

public OnGameModeInit()
{
    TextdrawRank = TextDrawCreate(10.000000, 200.000000, "Pocisao:\n");
    TextDrawAlignment(TextdrawRank, 0);
    TextDrawBackgroundColor(TextdrawRank, 0x000000ff);
    TextDrawFont(TextdrawRank, 1);
    TextDrawLetterSize(TextdrawRank, 0.300000, 1.100000);
    TextDrawColor(TextdrawRank, 0xffffffff);
    TextDrawSetOutline(TextdrawRank, 1);
    TextDrawSetProportional(TextdrawRank, 1);
    TextDrawSetShadow(TextdrawRank, 1);
}

public OnPlayerConnect(playerid)
{
    TextDrawShowForPlayer(playerid, TextdrawRank);
    return 1;
}


RE: querbra de linha em textdraw - Enila182 - 20/10/2024

(20/10/2024 02:37)André Santos Escreveu: queria saber como posso quebrar a linha para o nome ficar em baixo do outro 
pois aqui format(string, sizeof(string), "%d %s\n", i + 1, playerName, CheckpointCount[ranks[i]]); 
fica assim  tudo na mesma linha 1 andre 2 aleatorio 3 aleatorio
pois queria que ficasse assim um abaixo do outro  estou tentando mas ja nao sei oq fazer coloquei para ser exbido em uma textdraw sou leigo em pawno e queria ajuda

1 andre
2 aleatorio
3 blablabla


#include <a_samp>

new Text:TextdrawRank;
new CheckpointCount[MAX_PLAYERS];

public OnPlayerEnterRaceCheckpoint(playerid)
{
    CheckpointCount[playerid]++;
    UpdateRankings();
}

UpdateRankings()
{
    new string[256];
    new rankString[512];
    rankString[0] = '\0';
    new ranks[MAX_PLAYERS];
    new rankCount = 0;

    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        if (CheckpointCount[i] > 0)
        {
            ranks[rankCount++] = i;
        }
    }
    for (new i = 0; i < rankCount - 1; i++)
    {
        for (new j = i + 1; j < rankCount; j++)
        {
            if (CheckpointCount[ranks[i]] < CheckpointCount[ranks[j]])
            {
             
                new temp = ranks[i];
                ranks[i] = ranks[j];
                ranks[j] = temp;
            }
        }
    }
    for (new i = 0; i < rankCount && i < 5; i++) // Exibe apenas os 5 primeiros
    {
        new playerName[24];
        GetPlayerName(ranks[i], playerName, sizeof(playerName));
        format(string, sizeof(string), "%d %s\n", i + 1, playerName, CheckpointCount[ranks[i]]);
        strcat(rankString, string);
    }
    TextDrawSetString(TextdrawRank, rankString);
}

public OnGameModeInit()
{
    TextdrawRank = TextDrawCreate(10.000000, 200.000000, "Pocisao:\n");
    TextDrawAlignment(TextdrawRank, 0);
    TextDrawBackgroundColor(TextdrawRank, 0x000000ff);
    TextDrawFont(TextdrawRank, 1);
    TextDrawLetterSize(TextdrawRank, 0.300000, 1.100000);
    TextDrawColor(TextdrawRank, 0xffffffff);
    TextDrawSetOutline(TextdrawRank, 1);
    TextDrawSetProportional(TextdrawRank, 1);
    TextDrawSetShadow(TextdrawRank, 1);
}

public OnPlayerConnect(playerid)
{
    TextDrawShowForPlayer(playerid, TextdrawRank);
    return 1;
}

Código:
#include <a_samp>

new Text:TextdrawRank;
new CheckpointCount[MAX_PLAYERS];

public OnPlayerEnterRaceCheckpoint(playerid)
{
    CheckpointCount[playerid]++;
    UpdateRankings();
}

UpdateRankings()
{
    new rankString[512];
    rankString[0] = '\0';
    new ranks[MAX_PLAYERS];
    new rankCount = 0;

    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        if (CheckpointCount[i] > 0)
        {
            ranks[rankCount++] = i;
        }
    }

    for (new i = 0; i < rankCount - 1; i++)
    {
        for (new j = i + 1; j < rankCount; j++)
        {
            if (CheckpointCount[ranks[i]] < CheckpointCount[ranks[j]])
            {
                new temp = ranks[i];
                ranks[i] = ranks[j];
                ranks[j] = temp;
            }
        }
    }

    for (new i = 0; i < rankCount && i < 5; i++)
    {
        new playerName[24];
        GetPlayerName(ranks[i], playerName, sizeof(playerName));
   
        new string[64];
        format(string, sizeof(string), "%d %s\n", i + 1, playerName);

        strcat(rankString, string);
    }
    TextDrawSetString(TextdrawRank, rankString);
}

public OnGameModeInit()
{
    TextdrawRank = TextDrawCreate(10.0, 200.0, "Pocisao:\n");
    TextDrawAlignment(TextdrawRank, 0);
    TextDrawBackgroundColor(TextdrawRank, 0x000000ff);
    TextDrawFont(TextdrawRank, 1);
    TextDrawLetterSize(TextdrawRank, 0.3, 1.1);
    TextDrawColor(TextdrawRank, 0xffffffff);
    TextDrawSetOutline(TextdrawRank, 1);
    TextDrawSetProportional(TextdrawRank, 1);
    TextDrawSetShadow(TextdrawRank, 1);
}

public OnPlayerConnect(playerid)
{
    TextDrawShowForPlayer(playerid, TextdrawRank);
    return 1;
}
OBS: Verifica-se que está funcionando, pois tentei corrigir enquanto estava bastante sono! Madrugada é osso! XD.


RE: querbra de linha em textdraw - BitSain - 20/10/2024

Para quebrar linhas em textdraw não é \n e sim ~n~.
Outro problema em sua formatação é que você está passando 2 placeholders (%d, %s) sendo que tem 3 argumentos (i + 1, playerName, CheckpointCount).
O número de argumentos precisa corresponder ao número de placeholders.

Código corrigido:
Código PHP:
format(stringsizeof(string), "%d %s %d~n~", (1), playerNameCheckpointCount[ranks[i]]);