11.12.2011, 05:28
Galera eu tava fazendo aqui um sistema de catalogaзгo de mъsicas para a minha nova versгo do "MusicDialog"... Que terб comandos como /addmusic e /delmusic onde as linhas adicionadas serгo lidas e interpretadas para se encaixar em dialogs...
Bom ai o /addmusic ta perfeito... Mas me deparei com o problema do /delmusic...
O cуdigo estб assim:
E o Pawn retorna os seguintes erros:
A idйia й a seguinte: apуs adicionadas mъsicas o musicas.reg fica mais ou menos assim:
Ou seja a idйia do /delmusic й que abra um dialog em que se for colocado "Brasil WarZone" a linha inteira:
deve ser deletada...
Estou fazendo inapropriedamente? Existe outra forma de fazer esse del? Como ficaria ajeitado esse sistema de deletar?
Bom ai o /addmusic ta perfeito... Mas me deparei com o problema do /delmusic...
O cуdigo estб assim:
pawn Код:
#include <a_samp>
#define MENUMUSICS 800
stock token_by_delim(const string[], return_str[], delim, start_index)
{
new x=0;
while(string[start_index] != EOS && string[start_index] != delim) {
return_str[x] = string[start_index];
x++;
start_index++;
}
return_str[x] = EOS;
if(string[start_index] == EOS) start_index = (-1);
return start_index;
}
stock dellinha(filename[], line)
{
new count, string[256], File:file, File:temp;
file = fopen(filename, io_read);
temp = fopen("tmpfile.tmp", io_write);
while (fread(file, string))
if (++count != line)
fwrite(temp, string);
fclose(file);
fclose(temp);
file = fopen(filename, io_write);
temp = fopen("tmpfile.tmp", io_read);
while (fread(temp, string))
fwrite(file, string);
fclose(file);
fclose(temp);
fremove("tmpfile.tmp");
}
stock PosMusicDeletar(const filename[], musicnome)
{
new File:file_ptr;
new line[2000];
new var_from_line[100];
new nome[100];
new index;
new musics_loaded, linha;
file_ptr = fopen(filename,filemode:io_read);
if(!file_ptr) return 0;
musics_loaded = 0; linha = 65535;
while(fread(file_ptr,line,2000) > 0)
{
musics_loaded++;
index = 0;
index = token_by_delim(line,var_from_line,',',index);
if(index == (-1)) continue;
nome[100] = var_from_line; // Linha do Erro 032 e 006
if (musicnome == nome[100]) // Linha do Erro 032
{
linha = musics_loaded;
}
}
fclose(file_ptr);
return linha;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext,"/addmusic",true) == 0)
{
ShowPlayerDialog(playerid, MENUMUSICS, DIALOG_STYLE_MSGBOX , "ADD MUSIC", "Para adicionar uma nova musica ao dialog\npreencha todos os dados pedidos a seguir.", "Continuar", "Cancelar");
PlayerPlaySound(playerid,1057,0.0,0.0,0.0); return 1;
}
if(strcmp(cmdtext,"/delmusic",true) == 0)
{
ShowPlayerDialog(playerid, MENUMUSICS+4, DIALOG_STYLE_MSGBOX , "DEL MUSIC", "Digite o nome da mъsica a ser deletada:", "Deletar", "Cancelar");
PlayerPlaySound(playerid,1057,0.0,0.0,0.0); return 1;
}
return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
static musica[2000], genero[100], nome[100], url[1800];
if(dialogid == MENUMUSICS)
{
if (response)
{
ShowPlayerDialog(playerid, MENUMUSICS+1, DIALOG_STYLE_INPUT, "ADD MUSIC", "Digite o gкnero da mъsica.", "Continuar", "Cancelar");
}
}
if(dialogid == MENUMUSICS+1)
{
if (response)
{
format(genero, 100, "%s", inputtext);
ShowPlayerDialog(playerid, MENUMUSICS+2, DIALOG_STYLE_INPUT, "ADD MUSIC", "Digite o nome da mъsica.", "Continuar", "Cancelar");
}
}
if(dialogid == MENUMUSICS+2)
{
if (response)
{
format(nome, 100, "%s", inputtext);
ShowPlayerDialog(playerid, MENUMUSICS+3, DIALOG_STYLE_INPUT, "ADD MUSIC", "Digite a URL da musica", "Finalizar", "Cancelar");
}
}
if(dialogid == MENUMUSICS+3)
{
if (response)
{
format(url, 1800, "%s", inputtext);
SendClientMessage(playerid, -1, "Mъsica adicionada com sucesso!");
format (musica, sizeof(musica), "%s,%s,%s", nome, genero, url);
new File:ArqMusica; ArqMusica = fopen("controle/musicas.reg", io_append);
fwrite(ArqMusica, musica); fwrite(ArqMusica, "\r\n"); fclose(ArqMusica);
}
}
if(dialogid == MENUMUSICS+4)
{
if (response)
{
new linha = 65535, delnome[100];
format(delnome, 100, "%s", inputtext);
linha = PosMusicDeletar("controle/musicas.reg", delnome); // Linha do Erro 035
dellinha("controle/musicas.reg", linha);
}
}
}
Код:
error: 032: array index out of bounds (variable "nome") error: 006: must be assigned to an array error: 032: array index out of bounds (variable "nome") error: 035: argument type mismatch (argument 2)
Код:
Nome,Genero,URL Brasil WarZone,Eletronica,http://dc202.4shared.com/img/1009090064/cfc505e6/dlink__2Fdownload_2F2p4cbzEb_3Ftsid_3D20111210-005221-d251eec1/preview.mp3
Код:
Brasil WarZone,Eletronica,http://dc202.4shared.com/img/1009090064/cfc505e6/dlink__2Fdownload_2F2p4cbzEb_3Ftsid_3D20111210-005221-d251eec1/preview.mp3"
Estou fazendo inapropriedamente? Existe outra forma de fazer esse del? Como ficaria ajeitado esse sistema de deletar?