Portal SAMP
[Ajuda] Contratos online no dialogo - 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] Contratos online no dialogo (/showthread.php?tid=4045)

Páginas: 1 2


Contratos online no dialogo - L10motos - 07/10/2023

Estou fazendo um sistema que quando digita /laptop > ver contratos mostra uma lista de contratos, mais tá mostrando só 1 contrato na lista, tipo, tem 5 contrato para mostrar na lista e tá mostrando apenas 1 contrato online sendo que os 5 táh online

Código:
forward SearchingKiller(playerid);
public SearchingKiller(playerid)
{
    new searchhit = 0, f = gTeam[playerid];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && searchhit == 0)
        {
            if(PlayerInfo[i][pHeadValue] > 0)
            {
                new ContinueKiller = 1;
                //if(PlayerInfo[i][pAdmin] > 0 && adminstatus[i] == 0) ContinueKiller = 0;
                //if(MissingPlayer[i] != 0) ContinueKiller = 0;
                //for(new z = 0; z < MAX_PLAYERS; ++z) { if(IsPlayerConnected(z)) { if(gTeam[z] == f) { if(GoChase[z] == i) ContinueKiller = 0; } } }
                if(ContinueKiller)
                {
                    if(f != gTeam[i] && TeamKiller(f))
                    {
                        searchhit = 1; hitfound[f] = 1; hitnumber[f] = i;

                        new ss[350], string[256];
                        FORMAT_STR "%s(%d) - $%d\n", Name(i), i, PlayerInfo[i][pHeadValue]); strcat(ss, string);
                        ShowPlayerDialog(playerid, DIALOG_MULTI_USO, DIALOG_STYLE_LIST, "Contratos online", ss, "Fechar", "");
                    }
                }
            }
        }
    }
    if(searchhit == 0) SendClientMessage(playerid, COLOR_GREY, "Não foi possível encontrar nenhum contrato na agência.");
    return 0;
}

Exemplo, alguem faz um /contrato ae vai para essa lista, mais na lista atualmente mostra apenas 1 contrato online sendo que tem 5 contratos online


RE: Contratos online no dialogo - xbruno1000x - 07/10/2023

Partindo do pressuposto que as condições do seu código estão certas:

Código:
new MEGAString[3000];

forward SearchingKiller(playerid);
public SearchingKiller(playerid)
{
    new searchhit = 0, f = gTeam[playerid], string[256];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && searchhit == 0)
        {
            if(PlayerInfo[i][pHeadValue] > 0)
            {
                new ContinueKiller = 1;
                //if(PlayerInfo[i][pAdmin] > 0 && adminstatus[i] == 0) ContinueKiller = 0;
                //if(MissingPlayer[i] != 0) ContinueKiller = 0;
                //for(new z = 0; z < MAX_PLAYERS; ++z) { if(IsPlayerConnected(z)) { if(gTeam[z] == f) { if(GoChase[z] == i) ContinueKiller = 0; } } }
                
                if(ContinueKiller)
                {
                    if(f != gTeam[i] && TeamKiller(f))
                    {
                        searchhit = 1; hitfound[f] = 1; hitnumber[f] = i;

                        format(string, sizeof(string), "%s(%d) - $%d", Name(i), i, PlayerInfo[i][pHeadValue]); //Aqui tah mostrando apenas 1 contrato online, se tem 5 contranto online
                        strcat(MEGAString, string);
                    }
                }
            }
        }
    }
    ShowPlayerDialog(playerid, DIALOG_MULTI_USO, DIALOG_STYLE_LIST, "Contratos online", MEGAString, "Fechar", "");
    if(searchhit == 0) SendClientMessage(playerid, COLOR_GREY, "Não foi possível encontrar nenhum contrato na agência.");
    return 0;
}

Acredito que o erro estivesse no fato de você mostrar a dialog antes de concatenar todos os players com recompensa na cabeça disponível.


RE: Contratos online no dialogo - L10motos - 07/10/2023

(07/10/2023 20:58)xbruno1000x Escreveu: Partindo do pressuposto que as condições do seu código estão certas:

Código:
new MEGAString[3000];

forward SearchingKiller(playerid);
public SearchingKiller(playerid)
{
    new searchhit = 0, f = gTeam[playerid], string[256];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && searchhit == 0)
        {
            if(PlayerInfo[i][pHeadValue] > 0)
            {
                new ContinueKiller = 1;
                //if(PlayerInfo[i][pAdmin] > 0 && adminstatus[i] == 0) ContinueKiller = 0;
                //if(MissingPlayer[i] != 0) ContinueKiller = 0;
                //for(new z = 0; z < MAX_PLAYERS; ++z) { if(IsPlayerConnected(z)) { if(gTeam[z] == f) { if(GoChase[z] == i) ContinueKiller = 0; } } }
                
                if(ContinueKiller)
                {
                    if(f != gTeam[i] && TeamKiller(f))
                    {
                        searchhit = 1; hitfound[f] = 1; hitnumber[f] = i;

                        format(string, sizeof(string), "%s(%d) - $%d", Name(i), i, PlayerInfo[i][pHeadValue]); //Aqui tah mostrando apenas 1 contrato online, se tem 5 contranto online
                        strcat(MEGAString, string);
                    }
                }
            }
        }
    }
    ShowPlayerDialog(playerid, DIALOG_MULTI_USO, DIALOG_STYLE_LIST, "Contratos online", MEGAString, "Fechar", "");
    if(searchhit == 0) SendClientMessage(playerid, COLOR_GREY, "Não foi possível encontrar nenhum contrato na agência.");
    return 0;
}

Acredito que o erro estivesse no fato de você mostrar a dialog antes de concatenar todos os players com recompensa na cabeça disponível.

Desculpe, mais eu queria que tivesse funcionando para eu reputar você, não está funcionando, abaixo deixei a imagem de como está o dialogo.

https://ibb.co/yNj3668

O que pode ser?

@edit

Peguei desse codigo abaixo e adptei...
Código:
RPF::ProcurandoHit(playerid)
{
    new searchhit = 0;
    foreach(new i: Player)
    {
        if(IsPlayerConnected(i))
        {
            if(searchhit == 0)
            {
                if(PlayerInfo[i][pHeadValue] > 0 && GotHit[i] == 0 && PlayerInfo[i][pMembro] != 8)
                {
                    searchhit = 1;
                    hitfound = 1;
                    hitmanid = i;
                    if(IsPlayerConnected(playerid))
                    {
                        if(PlayerInfo[playerid][pMembro] == 8 || PlayerInfo[playerid][pLider] == 8)
                        {
                             SendClientMessage(playerid, COR_VERDE, "Contratos Online:");
                             format(gstring, sizeof(gstring), "[%s] %s[%d] - R$[%d]", NomeORG(i), PlayerName(i), i, PlayerInfo[i][pHeadValue]);
                             //SendClientMessage(playerid, GetPlayerColor(i), gstring);
                             ShowPlayerDialog(playerid, 999, DIALOG_STYLE_LIST, "Contratos Online:", gstring, "SAIR", "");
                        }
                    }
                }
            }
        }
    }
    if(searchhit == 0)
    {
         SendClientMessage(playerid, COR_VERDE, "Contratos Online:");
    }
    return 0;
}



RE: Contratos online no dialogo - xbruno1000x - 08/10/2023

Como não sabemos se essas condicionais estão corretas, vamos um passo de cada vez. Primeiro vamos tentar fazer a dialog funcionar.

Código:
new MEGAString[3000];
CMD:teste(playerid)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(PlayerInfo[i][pHeadValue] > 0)
        {
            format(string, sizeof(string), "%s(%d) - $%d\n", Name(i), i, PlayerInfo[i][pHeadValue]);
            strcat(MEGAString, string);
        }
        ShowPlayerDialog(playerid, DIALOG_MULTI_USO, DIALOG_STYLE_LIST, "Contratos online", MEGAString, "Fechar", "");
    }
    return 1;
}

Em teoria, as strings vão ser concatenadas caso o jogador tenha uma recompensa maior que 0. Se funcionar, você começa a inserir suas condições a partir desse código.


RE: Contratos online no dialogo - L10motos - 08/10/2023

(08/10/2023 00:23)xbruno1000x Escreveu: Como não sabemos se essas condicionais estão corretas, vamos um passo de cada vez. Primeiro vamos tentar fazer a dialog funcionar.

Código:
new MEGAString[3000];
CMD:teste(playerid)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(PlayerInfo[i][pHeadValue] > 0)
        {
            format(string, sizeof(string), "%s(%d) - $%d\n", Name(i), i, PlayerInfo[i][pHeadValue]);
            strcat(MEGAString, string);
        }
        ShowPlayerDialog(playerid, DIALOG_MULTI_USO, DIALOG_STYLE_LIST, "Contratos online", MEGAString, "Fechar", "");
    }
    return 1;
}

Em teoria, as strings vão ser concatenadas caso o jogador tenha uma recompensa maior que 0. Se funcionar, você começa a inserir suas condições a partir desse código.

Como eu crio, se o jogador clicar no jogador 1, ae o dialogo leva para o jogador 1, clicou no jogador 2, no OnDialogResponse retorna o nome do jogador 2, abaixo sobre:

Código:
CMD:teste(playerid)
{
    new megastring[2000], string[256], cont;
    
    format(string, sizeof(string), " \tOrganização:\n");
    strcat(megastring, string);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(PlayerInfo[i][pHeadValue] > 0)
        {
            if(gTeam[i] == 0)
            {
                showcontract[playerid] = i;
                
                format(string, sizeof(string), "%s(%d) - $%d\n", Name(i), i, PlayerInfo[i][pHeadValue]);
                strcat(megastring, string);
            }
            else
            {
                showcontract[playerid] = i;
                
                format(string, sizeof(string), "%s(%d) - $%d\t(%s)\n", Name(i), i, PlayerInfo[i][pHeadValue], TeamName(gTeam[i]));
                strcat(megastring, string);
            }
            FORMAT_SSTR "%s", TeamName(gTeam[playerid]));
        }
    }
    return ShowPlayerDialog(playerid, DIALOG_ASSASSINOS_4, DIALOG_STYLE_TABLIST_HEADERS, sstring, megastring, "Fechar", "");
}

    if(dialogid == DIALOG_ASSASSINOS_4 && response)
    {
       FORMAT_STR "debug %s.", Name(showcontract[playerid]));
       SCM(playerid, -1, string);
    }



RE: Contratos online no dialogo - leonardos08bt - 09/10/2023

Você está mostrando a dialog dentro do loop.
Código:
forward SearchingKiller(playerid);
public SearchingKiller(playerid)
{
    new searchhit = 0, f = gTeam[playerid], contratos[350];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && searchhit == 0)
        {
            if(PlayerInfo[i][pHeadValue] > 0)
            {
                new ContinueKiller = 1;
                //if(PlayerInfo[i][pAdmin] > 0 && adminstatus[i] == 0) ContinueKiller = 0;
                //if(MissingPlayer[i] != 0) ContinueKiller = 0;
                //for(new z = 0; z < MAX_PLAYERS; ++z) { if(IsPlayerConnected(z)) { if(gTeam[z] == f) { if(GoChase[z] == i) ContinueKiller = 0; } } }
                if(ContinueKiller)
                {
                    if(f != gTeam[i] && TeamKiller(f))
                    {
                        searchhit = 1; hitfound[f] = 1; hitnumber[f] = i;

                        new string[256];
                        FORMAT_STR "%s(%d) - $%d\n", Name(i), i, PlayerInfo[i][pHeadValue]); strcat(contratos, string);
                    }
                }
            }
        }
    }
    if(searchhit == 0) SendClientMessage(playerid, COLOR_GREY, "Não foi possível encontrar nenhum contrato na agência.");
    else {
        return ShowPlayerDialog(playerid, DIALOG_MULTI_USO, DIALOG_STYLE_LIST, "Contratos online", ss, "Fechar", "");
    }
    return 0;
}

A alteração que fiz no código é a seguinte: criei uma nova variável chamada de "contratos" tipo string de 350 caracteres; ao formatar a mensagem pra dar o strcat foi esquecido a variável "ss" e foi substituído pelo "contratos"; retirei a função pra mostrar a dialog dentro do loop para mostrar fora, logo após a verificação se possui algum contrato online.

Faltou um pouco de lógica da sua parte porque a cada contrato online uma dialog é mostrada, em vez de mostrar tudo de uma vez fora do loop.


RE: Contratos online no dialogo - pushline - 09/10/2023

O que seria esse macro "FORMAT_SSTR" ?


RE: Contratos online no dialogo - leonardos08bt - 09/10/2023

(09/10/2023 11:36)pushline Escreveu: O que seria esse macro "FORMAT_SSTR" ?

Talvez: 
'#define FORMAT_STR format(string, sizeof(string), '


RE: Contratos online no dialogo - L10motos - 09/10/2023

Ambos reputados, o sistema continua...

https://portalsamp.com/showthread.php?tid=4051


RE: Contratos online no dialogo - pushline - 09/10/2023

(09/10/2023 11:37)leonardos08bt Escreveu:
(09/10/2023 11:36)pushline Escreveu: O que seria esse macro "FORMAT_SSTR" ?

Talvez: 
'#define FORMAT_STR format(string, sizeof(string), '

Pai amado, que macumba do demonio