SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese

Reply
 
Thread Tools Display Modes
Old 05/12/2019, 06:09 AM   #1
Ley
High-roller
 
Ley's Avatar
 
Join Date: Jul 2012
Posts: 1,106
Reputation: 10
Question Remover arquivo / Parâmetro

@RESOLVIDO

#Solução:

Quote:
Originally Posted by Felipealves View Post
Não salve como nome de player, salve como presidente.ini.
E armazene o nome do player dentro.
PHP Code:
// diretório a ser salvo
#define File_v  "ganhou/Mandato.ini"

// no código da vitória do candidato
new Pname[MAX_PLAYER_NAME];
if(!
DOF2_FileExists(File_v))
{
    
DOF2_CreateFile(File_v);
    
DOF2_SetString(File_v"Governando"Pname);
    
DOF2_SetInt(File_v"presidente"1);
    
DOF2_SaveFile();
}
else
{
    
DOF2_SetString(File_v"Governando"Pname);
    
DOF2_SetInt(File_v"presidente"1);
    
DOF2_SaveFile();

_______________

Bom dia users, estou enfrentando problemas em um sistema de eleição. Estou com problema para apagar, ou setar um valor do antigo presidente, caso o mesmo esteja online.

Tentei da maneira abaixo, porém, só alterou o valor do player que estava conectado.
PHP Code:
CMD:aaa(playerid)
{
    for(new 
0MAX_PLAYERSi++)
    {
        
format(formatosizeof(formato),"/Eleicao/presidente/%s.ini"VerNome(i));
        if(
DOF2_FileExists(formato))
        {
            
DOF2_Unset(formato"presidente"); 
            
DOF2_SetInt(formato"presidente"0);
            
DOF2_SaveFile();
        }
    }
    return 
1;

1- Existe algum método para apagar todos os arquivos de um diretório?
2- Como posso verificar todos os arquivos do diretório, e mudar o valor, mesmo de usuários desconectados?
__________________
Minha Jornada

Antigo programador oficial do servidor @CarsonGames
Desenvolvedor de aplicativos e software mobile e desktop para comunicações e vendas de recursos SA-MP: Portfólio aqui.
Aplicativos desenvolvidos para guildas de outros jogos: Store @UnForgiven

Contato Messenger: Clique aqui!

Last edited by Ley; 06/12/2019 at 05:50 AM.
Ley is offline   Reply With Quote
Old 05/12/2019, 11:51 AM   #2
ipsLuan
High-roller
 
ipsLuan's Avatar
 
Join Date: Feb 2013
Location: Ilhéus, BA
Posts: 4,395
Reputation: 325
Default Re: Remover arquivo / Parâmetro

É melhor deixar os arquivos salvos como números (01.ini, 02.ini e 03.ini) e depois faz um loop com o máximo e altera.

pawn Code:
#define MAX_CANDIDATOS 10

for(new id = 1; id < MAX_CANDIDATOS + 1; id++) {

}
__________________
Brasil New Style
172.106.11.138:7777
ipsLuan is offline   Reply With Quote
Old 05/12/2019, 04:23 PM   #3
Ley
High-roller
 
Ley's Avatar
 
Join Date: Jul 2012
Posts: 1,106
Reputation: 10
Question Re: Remover arquivo / Parâmetro

Quote:
Originally Posted by ipsLuan View Post
É melhor deixar os arquivos salvos como números (01.ini, 02.ini e 03.ini) e depois faz um loop com o máximo e altera.

pawn Code:
#define MAX_CANDIDATOS 10

for(new id = 1; id < MAX_CANDIDATOS + 1; id++) {

}
Não há como setar todos os arquivos da pasta para um valor?
Por que o problema é que o presidente antigo não é alterado, por que não encontro uma forma para alterar o arquivo de quem está offline.
__________________
Minha Jornada

Antigo programador oficial do servidor @CarsonGames
Desenvolvedor de aplicativos e software mobile e desktop para comunicações e vendas de recursos SA-MP: Portfólio aqui.
Aplicativos desenvolvidos para guildas de outros jogos: Store @UnForgiven

Contato Messenger: Clique aqui!
Ley is offline   Reply With Quote
Old 05/12/2019, 05:03 PM   #4
RiqueP
Gangsta
 
RiqueP's Avatar
 
Join Date: Jan 2014
Posts: 764
Reputation: 53
Default Re: Remover arquivo / Parâmetro

Ley, a logica do sistema esta errada. Oque acontece é que você esta fazendo um loop pegando o nome de todos os jogadores, e acessando o arquivo na pasta. Por isso não funciona offline. Você deverá remontar o sistema para realizar a busca global de todos os candidatos. Se você estivesse usando SQLite/MySQL, o contexto estaria perfeito.

Sobre apagar todos os arquivos de diretório, você precisará de um plugin com funções de diretórios já q o samp não fornece uma função assim. No caso você deletaria e recrearia o diretório.

Sobre a segunda pergunta, em um sistema convencional de contas isso não seria possível, apenas usando SQLite ou MySQL

@EDIT

Em um sistema de empresas por exemplo, onde normalmente os arquivos são criados como 1, 2, 3... seria possível você acessar todos os arquivos e mudar algo realizando um loop. Mas no sistema de contas o contexto muda pq são nomes. O SA:MP não fornece funções para acessar todos os arquivos de uma pasta, infelizmente.
RiqueP is offline   Reply With Quote
Old 05/12/2019, 05:06 PM   #5
Felipealves
Huge Clucker
 
Felipealves's Avatar
 
Join Date: Mar 2016
Location: Paraná
Posts: 396
Reputation: 18
Default Re: Remover arquivo / Parâmetro

Não salve como nome de player, salve como presidente.ini.
E armazene o nome do player dentro.
Os candidatos você pode armazenar em números, 01, 02, ou candidato_1, enfim..
__________________

CRIMINAL LIFE RPG
Felipealves is online now   Reply With Quote
Old 05/12/2019, 05:23 PM   #6
Ley
High-roller
 
Ley's Avatar
 
Join Date: Jul 2012
Posts: 1,106
Reputation: 10
Default Re: Remover arquivo / Parâmetro

Quote:
Originally Posted by RiqueP View Post
Ley, a logica do sistema esta errada. Oque acontece é que você esta fazendo um loop pegando o nome de todos os jogadores, e acessando o arquivo na pasta. Por isso não funciona offline. Você deverá remontar o sistema para realizar a busca global de todos os candidatos. Se você estivesse usando SQLite/MySQL, o contexto estaria perfeito.

Sobre apagar todos os arquivos de diretório, você precisará de um plugin com funções de diretórios já q o samp não fornece uma função assim. No caso você deletaria e recrearia o diretório.

Sobre a segunda pergunta, em um sistema convencional de contas isso não seria possível, apenas usando SQLite ou MySQL

@EDIT

Em um sistema de empresas por exemplo, onde normalmente os arquivos são criados como 1, 2, 3... seria possível você acessar todos os arquivos e mudar algo realizando um loop. Mas no sistema de contas o contexto muda pq são nomes. O SA:MP não fornece funções para acessar todos os arquivos de uma pasta, infelizmente.
Obrigado pela explicação. Deu uma baita clareada.

Quote:
Originally Posted by Felipealves View Post
Não salve como nome de player, salve como presidente.ini.
E armazene o nome do player dentro.
Os candidatos você pode armazenar em números, 01, 02, ou candidato_1, enfim..
A parte dos candidatos está perfeita, está como planejado. O único problema é a troca de mandado mesmo, que, fica dois arquivos.
Vou procurar como posso estar salvando em presidente.ini, já que terei que partir para um novo princípio. Fico agradecido pela ideia.
__________________
Minha Jornada

Antigo programador oficial do servidor @CarsonGames
Desenvolvedor de aplicativos e software mobile e desktop para comunicações e vendas de recursos SA-MP: Portfólio aqui.
Aplicativos desenvolvidos para guildas de outros jogos: Store @UnForgiven

Contato Messenger: Clique aqui!
Ley is offline   Reply With Quote
Old 05/12/2019, 10:36 PM   #7
Whoo
Little Clucker
 
Whoo's Avatar
 
Join Date: Dec 2017
Location: ../
Posts: 10
Reputation: 9
Default Re: Remover arquivo / Parâmetro

Se você se sente bem utilizando DOF2 e não tem vontade de trocar basta seguir essa lógica:
Quote:
Pasta 1: criar um diretorio com o arquivo nomeado com o nome do usuario armazenando apenas 'id';
Pasta 2: criar outro diretorio com o nome = 'id' e armazenando todas as informações do mesmo (nome, senha, skin, idade, sexo, ...);

durante o registro:
percorrer a pasta 2 verificando quantos ids existem dentro dela(utilizando um loop), no momento em que você não encontrar um arquivo com o 'id' do loop basta você igualar esse id para o novo usuario.

durante o login:
percorrer a pasta 1 em busca do nome do usuario, se encontrar pegar seu 'id' e carregar suas informações da pasta 2.
Dessa maneira você podera pegar qualquer informação de usuário Offline;
__________________
ETERNO APRENDIZ
Whoo is offline   Reply With Quote
Old 06/12/2019, 01:39 AM   #8
RiqueP
Gangsta
 
RiqueP's Avatar
 
Join Date: Jan 2014
Posts: 764
Reputation: 53
Default Re: Remover arquivo / Parâmetro

Montei um exemplo, vê se te serve
PHP Code:
new pCandidaturaID[MAX_PLAYERS];

/*------------------------------------------------*/

public OnGameModeInit() {
    if(!
fexist("Presidencia.ini"))
        
DOF2_CreateFile("Presidencia.ini");

    return 
1;
}

public 
OnPlayerSpawn(playerid) {
    
pCandidaturaID[playerid] = DOF2_GetInt("Presidencia.ini"PlayerName(playerid));
    return 
1;
}

/*------------------------------------------------*/

PlayerName(playerid) {
    static 
pName[MAX_PLAYER_NAME];
    
GetPlayerName(playeridpNameMAX_PLAYER_NAME);
    return 
pName;
}

CandidatoFile(id) {
    static 
file[25];
    
format(file25"Candidatos/%d.ini"id);
    return 
file;
}

/*------------------------------------------------*/

CMD:mecandidatar(playerid) {
    if(
pCandidaturaID[playerid])
        return 
SendClientMessage(playerid0xFF0000FF"(ERRO) Você já é um(a) candidado(a)!");

    for(new 
1;; ++i) {
        if(!
fexist(CandidatoFile(i))) {
            
pCandidaturaID[playerid] = i;
            break;
        }
    }
    
DOF2_SetInt("Presidencia.ini"PlayerName(playerid), pCandidaturaID[playerid]);

    
DOF2_CreateFile(CandidatoFile(pCandidaturaID[playerid]));
    
DOF2_SetString(CandidatoFile(pCandidaturaID[playerid]), "Nome"PlayerName(playerid));
    
//...
    
DOF2_SaveFile();

    new 
string[45];
    
SendClientMessage(playerid, -1"(INFO) Parabéns! Você agora é um candidado a presidencia do servidor.");
    
format(string45"(INFO) Seu número de candidatura é: %d."pCandidaturaID[playerid]);
    
SendClientMessage(playerid, -1string);
    return 
1;

O Presidencia.ini é usado para apontar o ID da candidatura de determinado player.
__________________
Discord: RiqueP#1666
RiqueP is offline   Reply With Quote
Old 06/12/2019, 05:48 AM   #9
Ley
High-roller
 
Ley's Avatar
 
Join Date: Jul 2012
Posts: 1,106
Reputation: 10
Exclamation Re: Remover arquivo / Parâmetro

Quote:
Originally Posted by RiqueP View Post
Montei um exemplo, vê se te serve
PHP Code:
new pCandidaturaID[MAX_PLAYERS];

/*------------------------------------------------*/

public OnGameModeInit() {
    if(!
fexist("Presidencia.ini"))
        
DOF2_CreateFile("Presidencia.ini");

    return 
1;
}

public 
OnPlayerSpawn(playerid) {
    
pCandidaturaID[playerid] = DOF2_GetInt("Presidencia.ini"PlayerName(playerid));
    return 
1;
}

/*------------------------------------------------*/

PlayerName(playerid) {
    static 
pName[MAX_PLAYER_NAME];
    
GetPlayerName(playeridpNameMAX_PLAYER_NAME);
    return 
pName;
}

CandidatoFile(id) {
    static 
file[25];
    
format(file25"Candidatos/%d.ini"id);
    return 
file;
}

/*------------------------------------------------*/

CMD:mecandidatar(playerid) {
    if(
pCandidaturaID[playerid])
        return 
SendClientMessage(playerid0xFF0000FF"(ERRO) Você já é um(a) candidado(a)!");

    for(new 
1;; ++i) {
        if(!
fexist(CandidatoFile(i))) {
            
pCandidaturaID[playerid] = i;
            break;
        }
    }
    
DOF2_SetInt("Presidencia.ini"PlayerName(playerid), pCandidaturaID[playerid]);

    
DOF2_CreateFile(CandidatoFile(pCandidaturaID[playerid]));
    
DOF2_SetString(CandidatoFile(pCandidaturaID[playerid]), "Nome"PlayerName(playerid));
    
//...
    
DOF2_SaveFile();

    new 
string[45];
    
SendClientMessage(playerid, -1"(INFO) Parabéns! Você agora é um candidado a presidencia do servidor.");
    
format(string45"(INFO) Seu número de candidatura é: %d."pCandidaturaID[playerid]);
    
SendClientMessage(playerid, -1string);
    return 
1;

O Presidencia.ini é usado para apontar o ID da candidatura de determinado player.
Obrigado, @Rique, porém, fiz de outra forma que funcionou perfeitamente. Que, inclusive, foi a ideia de um usuários acima.

Deixarei do modo que configurei aqui, para dúvidas semelhantes

PHP Code:
// diretório a ser salvo
#define File_v  "ganhou/Mandato.ini"

// no código da vitória do candidato
new Pname[MAX_PLAYER_NAME];
if(!
DOF2_FileExists(File_v))
{
    
DOF2_CreateFile(File_v);
    
DOF2_SetString(File_v"Governando"Pname);
    
DOF2_SetInt(File_v"presidente"1);
    
DOF2_SaveFile();
}
else
{
     
DOF2_SetString(File_v"Governando"Pname);
     
DOF2_SetInt(File_v"presidente"1);
    
DOF2_SaveFile();

Agradeço a todos pela atenção!
__________________
Minha Jornada

Antigo programador oficial do servidor @CarsonGames
Desenvolvedor de aplicativos e software mobile e desktop para comunicações e vendas de recursos SA-MP: Portfólio aqui.
Aplicativos desenvolvidos para guildas de outros jogos: Store @UnForgiven

Contato Messenger: Clique aqui!
Ley is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Ajuda] Verificar parametro SSCANF TheBob Português/Portuguese 15 24/01/2017 03:03 PM
[Ajuda] Getar parametro DiiMeNoR Português/Portuguese 1 01/08/2014 03:25 AM
[Ajuda] Remover arquivo usando YIni? cotonete Português/Portuguese 2 12/10/2011 12:02 AM
Escrever em Arquivo e Ler Arquivo mafelis Português/Portuguese 0 17/12/2010 12:02 PM


All times are GMT. The time now is 12:31 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.