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
|