Portal SAMP
[Ajuda] Formatação para comando/dialog - 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] Formatação para comando/dialog (/showthread.php?tid=3880)

Páginas: 1 2


Formatação para comando/dialog - DiegoLBC1 - 06/08/2023

Boa noite, galera.

Já esclarecendo, sou leigo quanto a codificação, mas entendo um pouco para conseguir "editar" minha GM, então posso utilizar termos inadequados/incorretos ao me referir a algo.

Enfim, tenho uma "lista" de empresas que eu gostaria de mostrar aos players através de um comando, e até aeh tudo bem, consigo mostrar a lista, porem existem outros dois valores que eu gostaria que aparecessem, e nã osei como "formatar" isso.

Na Enum já tenho nome da empresa, id do interior, posição x/y,z do interior, preço para compra, ganhos da empresa e ID do MapIcon que aparece no minimapa., Consegui fazer a lista ser apresentada, mas apenas com o "nome da empresa". Poderiam me ajudar a "formatar" de modo que os valores e ganhos de cada empresa tbm apareçam?

PS: não quero o codigo pronto, apenas entender melhor a estrutura. Se precisarem de mais dados, por favor, me avisem.

Grato desde já.


RE: Formatação para comando/dialog - xbruno1000x - 06/08/2023

Eu faria isso usando uma concatenção dentro de um looping.

Obs:
Concatenação é um tipo de soma de string(textos). É como se eu fizesse um "Vasco" + "Da Gama" e isso resultasse em uma única string "Vasco Da Gama".

Ficaria algo como:
Código:
new MEGASTRING[3000];
new rr[170];

    for(new empresaID; empresaID != MAX_EMPRESAS; empresaID++) //MAX_EMPRESAS seria uma #define do numero de empresas existentes no GM
    {
        format(rr, sizeof(rr), "Nome: %s Preço: %s Ganhos: %s\n", Empresas[empresaID][VARIAVEL_NOME], Empresas[empresaID][VARIAVEL_PRECO], Empresas[empresaID][VARIAVEL_GANHOS]);
        strcat(MEGASTRING, rr);
    }



RE: Formatação para comando/dialog - DiegoLBC1 - 06/08/2023

Agradeço muito, Bruno. Já me deu uma baita luz, vou tentar com as variaveis que tenho e ver o que consigo.

Se eu não estiver equivocado, Max_Empresas pegaria todas as empresas existentes pelo mapa, no meu caso vou pegar apenas de uma lista "fixa", como ocorre em alguns servidores o comando "veiculos" que lista todos os veiculos que podem ser criados/spawnados.

Vou ver o que consigo, e posto aqui odesenrolar disso tudo.

Obrigado novamente.


RE: Formatação para comando/dialog - xbruno1000x - 07/08/2023

Para pular id's dentro do looping, você pode usar uma if com continue;

Código:
if(empresaID == 5 || empresaID == 9) continue;

nesse caso, os id's 5 e o 9 não serão concatenados.


RE: Formatação para comando/dialog - DiegoLBC1 - 09/08/2023

(07/08/2023 09:54)xbruno1000x Escreveu: Para pular id's dentro do looping, você pode usar uma if com continue;

Código:
if(empresaID == 5 || empresaID == 9) continue;

nesse caso, os id's 5 e o 9 não serão concatenados.

Como prometido, passando pra agradecer, e mostrar o resultado.

Para adequar minha necessidade acabei partindo pra "outro caminho", e deu certo. Mais uma vez, obrigado pelo help.

Código PHP:
CMD:meucomando(playeridparams[]) {

new 
Topo[128], Dialog[3000];
    for(new 1sizeof(EnumEmpresa); i++) 
    {
        format(Dialogsizeof(Dialog), "%s%s - Preço: $%d - Ganhos: $%d \r\n"DialogEnumEmpresa[i][Nome], EnumEmpresa[i][Valor], EnumEmpresa[i][Lucro]);
    }
format(Toposizeof(Topo), "Empresas!");
ShowPlayerDialog(playeridDialogNoResponseDIALOG_STYLE_TABLISTTopoDialog"""Cancelar");
  
return 1;



E o resultado foi esse:

[Imagem: iAEFapwl.png]


RE: Formatação para comando/dialog - White_Blue - 09/08/2023

(09/08/2023 09:09)DiegoLBC1 Escreveu:
(07/08/2023 09:54)xbruno1000x Escreveu: Para pular id's dentro do looping, você pode usar uma if com continue;

Código:
if(empresaID == 5 || empresaID == 9) continue;

nesse caso, os id's 5 e o 9 não serão concatenados.

Como prometido, passando pra agradecer, e mostrar o resultado.

Para adequar minha necessidade acabei partindo pra "outro caminho", e deu certo. Mais uma vez, obrigado pelo help.

Código PHP:
CMD:meucomando(playeridparams[]) {

new 
Topo[128], Dialog[3000];
    for(new 1sizeof(EnumEmpresa); i++) 
    {
        format(Dialogsizeof(Dialog), "%s%s - Preço: $%d - Ganhos: $%d \r\n"DialogEnumEmpresa[i][Nome], EnumEmpresa[i][Valor], EnumEmpresa[i][Lucro]);
    }
format(Toposizeof(Topo), "Empresas!");
ShowPlayerDialog(playeridDialogNoResponseDIALOG_STYLE_TABLISTTopoDialog"""Cancelar");
  
return 1;



E o resultado foi esse:

[Imagem: iAEFapwl.png]

Basta fazer loop que percorra todas as empresas criadas.

Exemplo:

Código PHP:
CMD:empresas(playerid) {
    new string[MAX_EMPRESAS], stringF[128]; // Supondo que você tenha o macro(Ou define caso você chame assim) MAX_EMPRESAS definido.
    for(new 0MAX_EMPRESASi++) {
     format(stringsizeof(string), CAMINHO_DAS_EMPRESAS_SCRIPTFILESi); // Supondo que você use DOF2 para salvamento, formato a string com o caminho das empresas.
     if(!DOF2_FileExists(string)) continue; // Caso a empresa não exista, o loop pula a mesma.
     format(stringFsizeof(stringF), "%s - \nPreço: %d\n - \nGanhos: %d"DOF2_GetString(string"Nome"), DOF2_GetInt(string"Preco"), DOF2_GetInt(string"Ganhos")); // Troque o nome das variáveis do DOF2 de acordo com o seu gamemode.
     
ShowPlayerDialog(playeridDIALOG_IDDIALOG_STYLE_LIST"Empresas"stringF"Ok""");
     break;
    }
    return 1;




RE: Formatação para comando/dialog - xbruno1000x - 09/08/2023

(09/08/2023 09:09)DiegoLBC1 Escreveu:
(07/08/2023 09:54)xbruno1000x Escreveu: Para pular id's dentro do looping, você pode usar uma if com continue;

Código:
if(empresaID == 5 || empresaID == 9) continue;

nesse caso, os id's 5 e o 9 não serão concatenados.

Como prometido, passando pra agradecer, e mostrar o resultado.

Para adequar minha necessidade acabei partindo pra "outro caminho", e deu certo. Mais uma vez, obrigado pelo help.

Código PHP:
CMD:meucomando(playeridparams[]) {

new 
Topo[128], Dialog[3000];
    for(new 1sizeof(EnumEmpresa); i++) 
    {
        format(Dialogsizeof(Dialog), "%s%s - Preço: $%d - Ganhos: $%d \r\n"DialogEnumEmpresa[i][Nome], EnumEmpresa[i][Valor], EnumEmpresa[i][Lucro]);
    }
format(Toposizeof(Topo), "Empresas!");
ShowPlayerDialog(playeridDialogNoResponseDIALOG_STYLE_TABLISTTopoDialog"""Cancelar");
  
return 1;



E o resultado foi esse:

[Imagem: iAEFapwl.png]

Ficou muito bom, fico feliz por ter ajudado. Eu nem sabia que era possível formatar vários textos em uma única string sem ter concatenação, por isso havia enviado um código com strcat. Uma sugestão que dou para melhorar o design, é utilizar cores. Para usar cores numa dialog você pode colocar entre chaves {COR_HEXADECIMAL} antes do texto. Ficaria legal setar os preços de verde.


RE: Formatação para comando/dialog - DiegoLBC1 - 09/08/2023

White_Blue e Bruno, ia citar ambos, mas ainda não sei mexer com quotes aqui, mas vou aprender. Vou apenas destacar abaixo:

"- Basta fazer loop que percorra todas as empresas criadas."

Essas não são empresas criadas, e sim os parametros para criar as empresas. Por isso tive que seguir outro caminho. Essa lista é praticamente a base do comando para cruar empresa, ou seja, todos os dados delas fixados em uma lista (Enum), com todos os dados delas. Quando vc seleciona para "criar" o comando já faz tudo: cria a empresa, respectivo interior, seta o valor de compra e etc.

O que eu queria era justamente uma lista parecida, mas que ao inves de criar a empresa, pegasse tbm o valor e lucro de cada, apenas para que o player possa consultar as empresas.



"- Ficou muito bom, fico feliz por ter ajudado. Eu nem sabia que era possível formatar vários textos em uma única string sem ter concatenação"

Na verdade nem sei se essa formatação que vc citou de fato ocorreu. Me baseei em partes do comando para comprar veiculos, onde há uma lista que mostra o nome, a classe (esportivo, moto e etc) e o respectivo valor. Sua ajuda me deu uma luz de como puxar as informações da Enum já existente (tanto pra carros quanto para empresas), e fiz uma pequena adaptação na formatação da dialog.

Abaixo vou deixar uma parte do codigo, pra vcs entenderem melhor, pois como eu não entendo muito eu não sei explicar muito bem.
Código PHP:
enum TTipoEmpresa
{
Nome[50],
InteriorID,
Float:IntX,
Float:IntY,
Float:IntZ,
Valor,
Lucros,
MapIcon
}


new 
EnumEmpresas[][TTipoEmpresa] =
{
//Nome, Interior, X, Y, Z, Valor, Lucro, MapIcon
{"Dummy"05869.2393, -5284.863811.3300000},
{
"24/7 (pequeno)"6, -26.75, -55.751003.64500035052},
{
"24/7 (Medio)"18, -31.0, -89.51003.66000050052},
{
"Bar"11502.25, -69.75998.83500025049},
{
"Barbearia (pequena)"2411.5, -21.251001.8300002007},
{
"Barbearia (Medio)"3418.75, -82.51001.8350003007}
};

CMD:listaempresas(playeridparams[]) 
{
 if(
PlayerDados[playerid][LoggedIn] == false) return 0;

 
SendAdminText(playerid"/listaempresas"params);
 new 
Topo[128], Dialog[3000];
 for(new 
1sizeof(EnumEmpresas); i++)
   {
   
format(Dialogsizeof(Dialog), "%s%s - Preço: $%d - Ganhos: $%d \r\n"DialogEnumEmpresas[i][Nome], EnumEmpresas[i][Valor], EnumEmpresas[i][Lucros]);
   }
 
format(Toposizeof(Topo), "Empresas");
 
ShowPlayerDialog(playeridDialogNoResponseDIALOG_STYLE_TABLIST"Empresas"Dialog"""Cancelar");

 return 
1;




RE: Formatação para comando/dialog - White_Blue - 11/08/2023

(09/08/2023 21:14)DiegoLBC1 Escreveu: White_Blue e Bruno, ia citar ambos, mas ainda não sei mexer com quotes aqui, mas vou aprender. Vou apenas destacar abaixo:

"- Basta fazer loop que percorra todas as empresas criadas."

Essas não são empresas criadas, e sim os parametros para criar as empresas. Por isso tive que seguir outro caminho. Essa lista é praticamente a base do comando para cruar empresa, ou seja, todos os dados delas fixados em uma lista (Enum), com todos os dados delas. Quando vc seleciona para "criar" o comando já faz tudo: cria a empresa, respectivo interior, seta o valor de compra e etc.

O que eu queria era justamente uma lista parecida, mas que ao inves de criar a empresa, pegasse tbm o valor e lucro de cada, apenas para que o player possa consultar as empresas.



"- Ficou muito bom, fico feliz por ter ajudado. Eu nem sabia que era possível formatar vários textos em uma única string sem ter concatenação"

Na verdade nem sei se essa formatação que vc citou de fato ocorreu. Me baseei em partes do comando para comprar veiculos, onde há uma lista que mostra o nome, a classe (esportivo, moto e etc) e o respectivo valor. Sua ajuda me deu uma luz de como puxar as informações da Enum já existente (tanto pra carros quanto para empresas), e fiz uma pequena adaptação na formatação da dialog.

Abaixo vou deixar uma parte do codigo, pra vcs entenderem melhor, pois como eu não entendo muito eu não sei explicar muito bem.
Código PHP:
enum TTipoEmpresa
{
Nome[50],
InteriorID,
Float:IntX,
Float:IntY,
Float:IntZ,
Valor,
Lucros,
MapIcon
}


new 
EnumEmpresas[][TTipoEmpresa] =
{
//Nome, Interior, X, Y, Z, Valor, Lucro, MapIcon
{"Dummy"05869.2393, -5284.863811.3300000},
{
"24/7 (pequeno)"6, -26.75, -55.751003.64500035052},
{
"24/7 (Medio)"18, -31.0, -89.51003.66000050052},
{
"Bar"11502.25, -69.75998.83500025049},
{
"Barbearia (pequena)"2411.5, -21.251001.8300002007},
{
"Barbearia (Medio)"3418.75, -82.51001.8350003007}
};

CMD:listaempresas(playeridparams[]) 
{
 if(
PlayerDados[playerid][LoggedIn] == false) return 0;

 
SendAdminText(playerid"/listaempresas"params);
 new 
Topo[128], Dialog[3000];
 for(new 
1sizeof(EnumEmpresas); i++)
   {
   format(Dialogsizeof(Dialog), "%s%s - Preço: $%d - Ganhos: $%d \r\n"DialogEnumEmpresas[i][Nome], EnumEmpresas[i][Valor], EnumEmpresas[i][Lucros]);
   }
 
format(Toposizeof(Topo), "Empresas");
 
ShowPlayerDialog(playeridDialogNoResponseDIALOG_STYLE_TABLIST"Empresas"Dialog"""Cancelar");

 return 
1;


Se entendi bem, você quer um comando para criar a empresa?


RE: Formatação para comando/dialog - DiegoLBC1 - 13/08/2023

(11/08/2023 02:05)White_Blue Escreveu: Se entendi bem, você quer um comando para criar a empresa?

Não, man, o comando para criar as empresas eu já tenho.

O que eu queria consegui com o auxilio desse topico, que era pegar as informações da ENUM e transformar em uma simples Lista com Tipo + Valor + Lucro das empresas. O codigo mostrado acima faz parte da ENUM com as informações para criar as empresas, então reaproveitei as mesmas informações para criar uma "lista" de empresas. Dessa forma, se eu alterar o nome, os ganhos ou os valores das empresas, a lista será automaticamente atualizada, bem como as empresas serão criadas já com os novos valores.