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(MostrarLitros, sizeof(MostrarLitros), "| INFO | Vocк tem %d de Litros de Gasolina.", pGasolina[playerid][Gasolina]);
SendClientMessage(playerid, -1, MostrarLitros);
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", 1000, false);
return 1;
}
public OnFilterScriptExit()
{
for(new i; i < MAX_PLAYERS; i++)
{
SalvarGasolina(i);
DOF2_Exit();
}
return 1;
}
public OnPlayerStateChange( playerid, newstate, oldstate )
{
if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
{
SetTimer("ContarGasosa", 1000, true);
SendClientMessage(playerid, -1, "| INFO | Contar Gasolina On!");
}
else
{
SetTimer("NContarGasolina", 1000, false);
SendClientMessage(playerid, -1, "| INFO | Parar de Contar Gasolina On");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SalvarGasolina(playerid);
return 1;
}
public OnPlayerUpdate(playerid)
{
SetTimer("UpdateGasolina", 5000, true);
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(playerid, nome, 44);
format(gasolina, 44, "Gasolina/%s.ini", nome);
return gasolina;
}
CMD:litros(playerid, params[])
{
new litros[256];
format(litros, sizeof(litros), "| INFO | Vocк tem %d de Litros de Gasolina.", pGasolina[playerid][Gasolina]);
SendClientMessage(playerid, -1, litros);
return 1;
}
CMD:abastecer(playerid, params[])
{
new gasolina, stg[256], veiculo;
if(sscanf(params, "d", gasolina)) return SendClientMessage(playerid, -1, "/Abastecer [litros]");
if(IsPlayerInVehicle(playerid, veiculo)) return SendClientMessage(playerid, -1, "| ERRO | Vocк nгo estб em um Veнculo");
pGasolina[playerid][Gasolina] = gasolina;
format(stg, sizeof(stg), "| INFO | Vocк abasteceu %d de Litros!", gasolina);
SendClientMessage(playerid, -1, stg);
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 "Chamar
Gasosa", 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", 1000, false);
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(playerid, params[])
{
new litros[256];
format(litros, sizeof(litros), "| INFO | Vocк tem %d de Litros de Gasolina.", pGasolina[playerid][Gasolina]);
SendClientMessage(playerid, -1, litros);
return 1;
}
7. Esse comando estб errado tambйm:
PHP код:
CMD:abastecer(playerid, params[])
{
new gasolina, stg[256], veiculo;
if(sscanf(params, "d", gasolina)) return SendClientMessage(playerid, -1, "/Abastecer [litros]");
if(IsPlayerInVehicle(playerid, veiculo)) return SendClientMessage(playerid, -1, "| ERRO | Vocк nгo estб em um Veнculo");
pGasolina[playerid][Gasolina] = gasolina;
format(stg, sizeof(stg), "| INFO | Vocк abasteceu %d de Litros!", gasolina);
SendClientMessage(playerid, -1, stg);
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 OnPlayerStateChange( playerid, newstate, oldstate )
{
if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
{
SetTimer("ContarGasosa", 1000, true);
SendClientMessage(playerid, -1, "| INFO | Contar Gasolina On!");
}
else
{
SetTimer("NContarGasolina", 1000, false);
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.