[AJUDA] Salvamento de dados Dialog
#1

Olб galera eu to com um probleminha aqui em pegar mensagens digitadas em dialog em sйrie e salvar em um arquivo .reg...

vou dar um exemplo:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext,"/addmensagens",true) == 0)
    {
        ShowPlayerDialog(playerid, MENSAGENS, DIALOG_STYLE_MSGBOX , "ADD MENSAGENS", "Digite as tres mensagens a seguir.", "Continuar", "Cancelar");
        PlayerPlaySound(playerid,1057,0.0,0.0,0.0); return 1;
    }
return 0;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new mensagens[900], mensagem1[300], mensagem2[300], mensagem3[300];
    if(dialogid == MENSAGENS)
    {
        if (response)        
        {
            ShowPlayerDialog(playerid, MENSAGENS+1, DIALOG_STYLE_INPUT, "ADD MENSAGENS", "Digite a primeira mensagem:", "Continuar", "Cancelar");        
        }
    }    
    if(dialogid == MENSAGENS+1)
    {
        if (response)        
        {
            format(mensagem1, 100, "%s", inputtext);
            ShowPlayerDialog(playerid, MENSAGENS+2, DIALOG_STYLE_INPUT, "ADD MENSAGENS", "Digite a segunda mensagem:", "Continuar", "Cancelar");        
        }
    }    
    if(dialogid == MENSAGENS+2)
    {
        if (response)        
        {
            format(mensagem2, 100, "%s", inputtext);
            ShowPlayerDialog(playerid, MENSAGENS+3, DIALOG_STYLE_INPUT, "ADD MENSAGENS", "Digite a terceira mensagem:", "Finalizar", "Cancelar");        
        }
    }    
    if(dialogid == MENSAGENS+3)
    {
        if (response)        
        {
            format(mensagem3, 800, "%s", inputtext);
            SendClientMessage(playerid, -1, "Mensagens adicionadas com sucesso!");
           
            format (mensagens, sizeof(mensagens), "%s,%s,%s", mensagem1, mensagem2, mensagem3);
            new File:ArqMensagens; ArqMensagens = fopen("controle/mensagens.reg", io_append);
            fwrite(ArqMensagens, mensagens); fwrite(ArqMensagens, "\r\n"); fclose(ArqMensagens);        
        }
    }    
}
Ai eu digito em cada dialog certinho cada mensagem, vamos supor: "oi", "ola", "tchau"

ai no arquivo fica assim:

",,tchau"

Por que? '-'
Reply
#2

@EDIT

Fail =/ nem sabia disso.
:$
Reply
#3

Isso nгo pode ser feito...
Reply
#4

Tente usando strmid...

pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new mensagens[900], mensagem1[300], mensagem2[300], mensagem3[300];
    if(dialogid == MENSAGENS)
    {
        if (response)
        {
            ShowPlayerDialog(playerid, MENSAGENS+1, DIALOG_STYLE_INPUT, "ADD MENSAGENS", "Digite a primeira mensagem:", "Continuar", "Cancelar");
        }
    }
    if(dialogid == MENSAGENS+1)
    {
        if (response)
        {
            strmid(mensagem1, (inputtext), 0, strlen(inputtext), 100);
            ShowPlayerDialog(playerid, MENSAGENS+2, DIALOG_STYLE_INPUT, "ADD MENSAGENS", "Digite a segunda mensagem:", "Continuar", "Cancelar");
        }
    }
    if(dialogid == MENSAGENS+2)
    {
        if (response)
        {
            strmid(mensagem2, (inputtext), 0, strlen(inputtext), 100);
            ShowPlayerDialog(playerid, MENSAGENS+3, DIALOG_STYLE_INPUT, "ADD MENSAGENS", "Digite a terceira mensagem:", "Finalizar", "Cancelar");
        }
    }
    if(dialogid == MENSAGENS+3)
    {
        if (response)
        {
            strmid(mensagem3, (inputtext), 0, strlen(inputtext), 100);
            SendClientMessage(playerid, -1, "Mensagens adicionadas com sucesso!");
            format(mensagens, sizeof(mensagens), "%s,%s,%s\r\n", mensagem1, mensagem2, mensagem3);
            new File:ArqMensagens = fopen("controle/mensagens.reg", io_append);
            fwrite(ArqMensagens, mensagens);
            fclose(ArqMensagens);
        }
    }
}
Reply
#5

E esse 100 ali em "inputtext), 100);" й o array?
Reply
#6

Quando vocк usa o comando /addmensagens o dialog й mostrado e a callback OnDialogResponse й chamada .



O problema й que quando um cуdigo dessa callback referente a um dialog de determinado ID й processado, ela й finalizada (todos as outras condiзхes de ifs sгo consideradas falsas atй acabar o cуdigo) e chamada mais uma vez para a leitura de outro dialog. Por isso as variбveis criadas no comeзo daquela sгo destruнdas ao tйrmino da funзгo e criadas novamente quando outro dialog й lido, fazendo com que elas nunca "resistam" atй o ъltimo dialog ser trabalhado .



Para resolver o seu problema, basta declarar suas variбveis usando static ao invйs de new, para que elas nгo sejam destruнdas apуs a execuзгo da callback :


pawn Код:
static mensagens[900], mensagem1[300], mensagem2[300], mensagem3[300];

Ou crie variбveis globais .



Espero ter ajudado .
Reply
#7

Quote:
Originally Posted by Mattos
Посмотреть сообщение
E esse 100 ali em "inputtext), 100);" й o array?
100 й a quantidade mбximas de cйlulas.

Quote:
Originally Posted by rjjj
Посмотреть сообщение
Quando vocк usa o comando /addmensagens o dialog й mostrado e a callback OnDialogResponse й chamada .



O problema й que quando um cуdigo dessa callback referente a um dialog de determinado ID й processado, ela й finalizada (todos as outras condiзхes de ifs sгo consideradas falsas atй acabar o cуdigo) e chamada mais uma vez para a leitura de outro dialog. Por isso as variбveis criadas no comeзo daquela sгo destruнdas ao tйrmino da funзгo e criadas novamente quando outro dialog й lido, fazendo com que elas nunca "resistam" atй o ъltimo dialog ser trabalhado .



Para resolver o seu problema, basta declarar suas variбveis usando static ao invйs de new, para que elas nгo sejam destruнdas no fim da leitura da funзгo :


pawn Код:
static mensagens[900], mensagem1[300], mensagem2[300], mensagem3[300];

Ou crie variбveis globais .



Espero ter ajudado .
Putz й mesmo, nгo vi que ele estava usando locais.

Mattos. Substitua as variбveis por globais como Rjjj falou e delete as outras.

Deve ficar assim:

pawn Код:
//Topo
new
    mensagens[ 900 ],
    mensagem1[ 300 ],
    mensagem2[ 300 ],
    mensagem3[ 300 ];

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == MENSAGENS)
    {
        if (response)
        {
            ShowPlayerDialog(playerid, MENSAGENS+1, DIALOG_STYLE_INPUT, "ADD MENSAGENS", "Digite a primeira mensagem:", "Continuar", "Cancelar");
        }
    }
    if(dialogid == MENSAGENS+1)
    {
        if (response)
        {
            strmid(mensagem1, (inputtext), 0, strlen(inputtext), 100);
            ShowPlayerDialog(playerid, MENSAGENS+2, DIALOG_STYLE_INPUT, "ADD MENSAGENS", "Digite a segunda mensagem:", "Continuar", "Cancelar");
        }
    }
    if(dialogid == MENSAGENS+2)
    {
        if (response)
        {
            strmid(mensagem2, (inputtext), 0, strlen(inputtext), 100);
            ShowPlayerDialog(playerid, MENSAGENS+3, DIALOG_STYLE_INPUT, "ADD MENSAGENS", "Digite a terceira mensagem:", "Finalizar", "Cancelar");
        }
    }
    if(dialogid == MENSAGENS+3)
    {
        if (response)
        {
            strmid(mensagem3, (inputtext), 0, strlen(inputtext), 100);
            SendClientMessage(playerid, -1, "Mensagens adicionadas com sucesso!");
            format(mensagens, sizeof(mensagens), "%s,%s,%s\r\n", mensagem1, mensagem2, mensagem3);
            new File:ArqMensagens = fopen("controle/mensagens.reg", io_append);
            fwrite(ArqMensagens, mensagens);
            fclose(ArqMensagens);
        }
    }
}
Reply
#8

Aeee deu certinho rjjj brigadгo! xD +REP


Sу fiquei chateado com uma coisa

Faltou vocк escrever isso:

Quote:

Isto deve resolver o seu problema :



Obrigado tambem Los
Reply
#9

Bom agora quero saber mais uam coisa e vou aproveitar aqui mesmo....

Vamos supor que meu .reg ja esteja assim:

Код:
mensagem1,mensagem2,mensagem3
oi,tchau,olб
teste,testando,teste
Bom agora queria criar um comando de deletar a linha inteira somente postando a mensagem2 correspondente tipo:

Digito /delmensagem. Ae abre um dialog com input e boto nele uma "mensagem2" por exemplo "tchau" e ele terб de apagar a linha inteira "oi,tchau,olб" como faz?

To tentando adaptar de um code aqui mas ta dificil...
Reply
#10

Usa um loop while no comando.

https://sampforum.blast.hk/showthread.php?tid=290735
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)