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,110
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?

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,416
Reputation: 326
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,110
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.
Ley is offline   Reply With Quote
Old 05/12/2019, 05:03 PM   #4
RiqueP
Gangsta
 
RiqueP's Avatar
 
Join Date: Jan 2014
Posts: 833
Reputation: 58
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: 411
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 offline   Reply With Quote
Old 05/12/2019, 05:23 PM   #6
Ley
High-roller
 
Ley's Avatar
 
Join Date: Jul 2012
Posts: 1,110
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.
Ley is offline   Reply With Quote
Old 06/12/2019, 01:39 AM   #7
RiqueP
Gangsta
 
RiqueP's Avatar
 
Join Date: Jan 2014
Posts: 833
Reputation: 58
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   #8
Ley
High-roller
 
Ley's Avatar
 
Join Date: Jul 2012
Posts: 1,110
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!
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 10:27 PM.


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