[Ajuda] Nгo tб salvando sistema de gasolina
#4

Quote:
Originally Posted by GuiKommander
Посмотреть сообщение
Pq serб nгo Salva? Quando eu desligo o server fica setado mais quando eu logo eu vou na pasta ta Gasolina = 0, e quando eu seto gasolina pra mim Nгo vai ficando negativo no /Litros. tipo quando perde 1 й pra mostrar que perdeu 1 kkk.
PHP код:
#include <a_samp>
#include <DOF2>
#include <sscanf2>
#include <streamer>
#include <zcmd>
enum PlayerGasolina
{
    
Gasolina
}
new 
pGasolina[MAX_PLAYERS][PlayerGasolina];
new 
MostrarLitros[256];
public 
OnPlayerConnect(playerid)
{
    if(!
DOF2_FileExists(GasolinaPlayer(playerid)))
    {
        
SendClientMessage(playerid, -1"| INFO | Vocк nгo й registrado, mais jб se registrou");
        
DOF2_CreateFile(GasolinaPlayer(playerid));
        
DOF2_SetInt(GasolinaPlayer(playerid), "Gasolina"100);
    }
    else
    {
        
format(MostrarLitrossizeof(MostrarLitros), "| INFO | Vocк tem %d de Litros de Gasolina."pGasolina[playerid][Gasolina]);
        
SendClientMessage(playerid, -1MostrarLitros);
        return 
1;
    }
    
CarregarGasolina(playerid);
    return 
1;
}
forward ContarGasolina(playerid);
public 
ContarGasolina(playerid)
{
    
pGasolina[playerid][Gasolina] --;
    
SendClientMessage(playerid, -1"| INFO | Estб Comeзando a contar os gastos da Gasolina.");
    return 
1;
}
forward NaoContarGasolina(playerid);
public 
NaoContarGasolina(playerid)
{
    
SendClientMessage(playerid, -1"| ERRO | Vocк saiu do Veнculo e parou de contar a gasolina.");
    
SetTimer("ContarGasosa"1000false);
    return 
1;
}
public 
OnFilterScriptExit()
{
    for(new 
iMAX_PLAYERSi++)
    {
    
SalvarGasolina(i);
    
DOF2_Exit();
    }
    return 
1;
}
public 
OnPlayerStateChangeplayeridnewstateoldstate )
{
    if(
newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    {
      
SetTimer("ContarGasosa"1000true);
      
SendClientMessage(playerid, -1"| INFO | Contar Gasolina On!");
    }
    else
    {
      
SetTimer("NContarGasolina"1000false);
      
SendClientMessage(playerid, -1"| INFO | Parar de Contar Gasolina On");
    }
    return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    
SalvarGasolina(playerid);
    return 
1;
}
public 
OnPlayerUpdate(playerid)
{
    
SetTimer("UpdateGasolina"5000true);
    return 
1;
}
forward UpdateGasolina(playerid);
public 
UpdateGasolina(playerid)
{
       
SalvarGasolina(playerid);
    return 
1;
}
stock SalvarGasolina(playerid)
{
    
DOF2_SetInt(GasolinaPlayer(playerid), "Gasolina"pGasolina[playerid][Gasolina]);
    
DOF2_SaveFile();
    return 
1;
}
stock CarregarGasolina(playerid)
{
    
pGasolina[playerid][Gasolina] = DOF2_GetInt(GasolinaPlayer(playerid), "Gasolina"pGasolina[playerid][Gasolina]);
    
pGasolina[playerid][Gasolina] = pGasolina[playerid][Gasolina];
    return 
1;
}
stock GasolinaPlayer(playerid)
{
    new 
gasolina[44], nome[MAX_PLAYER_NAME];
    
GetPlayerName(playeridnome44);
    
format(gasolina44"Gasolina/%s.ini"nome);
    return 
gasolina;
}
CMD:litros(playeridparams[])
{
    new 
litros[256];
    
format(litrossizeof(litros), "| INFO | Vocк tem %d de Litros de Gasolina."pGasolina[playerid][Gasolina]);
    
SendClientMessage(playerid, -1litros);
    return 
1;
}
CMD:abastecer(playeridparams[])
{
    new 
gasolinastg[256], veiculo;
    if(
sscanf(params"d"gasolina)) return SendClientMessage(playerid, -1"/Abastecer [litros]");
    if(
IsPlayerInVehicle(playeridveiculo)) return SendClientMessage(playerid, -1"| ERRO | Vocк nгo estб em um Veнculo");
    
pGasolina[playerid][Gasolina] = gasolina;
    
format(stgsizeof(stg), "| INFO | Vocк abasteceu %d de Litros!"gasolina);
    
SendClientMessage(playerid, -1stg);
    return 
1;

Moзo, minha dica para vocк й comeзar tudo de novo... Esse cуdigo TБ CHEIO de bugs. E eu estou tentando entender porque vocк tб guardando o tanto de gasolina no ID do jogador em vez de ser no ID do veнculo... Fica parecendo que quando uma pessoa sai do veнculo, ela carrega toda a gasolina dele e quando vai usar outro veнculo, esvazia o tanque todo e coloca a gasolina que estava carregando.

Preste atenзгo:

1. Nos SetTimer vocк estб chamando "ChamarGasosa", mas...
PHP код:
forward ContarGasolina(playerid); 
2. Se й algo particular para cada jogador, o ideal seria usar SetTimerEx ou, ao menos, fazer umas manipulaзхes para poder usar o SetTimer. Da forma que estб, irб bugar.

3. Considerando que o SetTimer estб com a repetiзгo ativa (true) e que estб se repetindo a cada 1 segundo, irб floodar na tela do jogador essa mensagem:
PHP код:
SendClientMessage(playerid, -1"| INFO | Estб Comeзando a contar os gastos da Gasolina."); 
4. Isso aqui nгo funciona:
PHP код:
public NaoContarGasolina(playerid)
{
    
SendClientMessage(playerid, -1"| ERRO | Vocк saiu do Veнculo e parou de contar a gasolina.");
    
SetTimer("ContarGasosa"1000false);
    return 
1;

Colocar false no SetTimer, vai fazer com que ele execute apenas uma vez. Isso nгo й usado para fazer o Timer parar. Para interromper um Timer em repetiзгo use: KillTimer

5. Migo, o que й isso??
PHP код:
stock CarregarGasolina(playerid)
{
    
pGasolina[playerid][Gasolina] = DOF2_GetInt(GasolinaPlayer(playerid), "Gasolina"pGasolina[playerid][Gasolina]);
    
pGasolina[playerid][Gasolina] = pGasolina[playerid][Gasolina];
    return 
1;

Isso nгo faz sentido algum!


6. Nгo tem necessidade de usar params aqui:

PHP код:
CMD:litros(playeridparams[])
{
    new 
litros[256];
    
format(litrossizeof(litros), "| INFO | Vocк tem %d de Litros de Gasolina."pGasolina[playerid][Gasolina]);
    
SendClientMessage(playerid, -1litros);
    return 
1;

7. Esse comando estб errado tambйm:

PHP код:
CMD:abastecer(playeridparams[])
{
    new 
gasolinastg[256], veiculo;
    if(
sscanf(params"d"gasolina)) return SendClientMessage(playerid, -1"/Abastecer [litros]");
    if(
IsPlayerInVehicle(playeridveiculo)) return SendClientMessage(playerid, -1"| ERRO | Vocк nгo estб em um Veнculo");
    
pGasolina[playerid][Gasolina] = gasolina;
    
format(stgsizeof(stg), "| INFO | Vocк abasteceu %d de Litros!"gasolina);
    
SendClientMessage(playerid, -1stg);
    return 
1;

'new veнculo', 'IsPlayerInVehicle(playerid, veiculo)' ? Jб ouviu falar de IsPlayerInAnyVehicle? Й dessa funзгo que vocк precisa.

PHP код:
pGasolina[playerid][Gasolina] = gasolina
Toda gasolina que ele tinha antes foi ignorada? Ela se sentiu ofendida. Se o veнculo foi abastecido, o interessante й essa nova gasolina SOMAR e nгo SUBSTITUIR o valor antigo!

O certo seria:
PHP код:
pGasolina[playerid][Gasolina] += gasolina
8. Esse else estб sendo usado de maneira errada:

PHP код:
public OnPlayerStateChangeplayeridnewstateoldstate )
{
    if(
newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    {
      
SetTimer("ContarGasosa"1000true);
      
SendClientMessage(playerid, -1"| INFO | Contar Gasolina On!");
    }
    else
    {
      
SetTimer("NContarGasolina"1000false);
      
SendClientMessage(playerid, -1"| INFO | Parar de Contar Gasolina On");
    }
    return 
1;

Enfim... Tem muita coisa para corrigir. Minha sugestгo й procurar um sistema pronto, estudar, entender e tentar fazer o seu. Ou seguir minhas dicas e tentar refazer. Pois se usar o seu, irб bugar tudo.
Reply


Messages In This Thread
Nгo tб salvando sistema de gasolina - by GuiKommander - 23.01.2018, 01:49
Re: Nгo tб salvando sistema de gasolina - by Marllun - 23.01.2018, 05:40
Re: Nгo tб salvando sistema de gasolina - by GuiKommander - 23.01.2018, 10:15
Re: Nгo tб salvando sistema de gasolina - by humildadeforever - 23.01.2018, 16:40
Re: Nгo tб salvando sistema de gasolina - by Marllun - 23.01.2018, 17:01
Re: Nгo tб salvando sistema de gasolina - by F1N4L - 23.01.2018, 17:04
Re: Nгo tб salvando sistema de gasolina - by GuiKommander - 23.01.2018, 20:45
Re: Nгo tб salvando sistema de gasolina - by humildadeforever - 23.01.2018, 21:45

Forum Jump:


Users browsing this thread: 1 Guest(s)