Portal SAMP
[Ajuda] Erros ao utilizar MySQL - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Erros ao utilizar MySQL (/showthread.php?tid=4663)

Páginas: 1 2


Erros ao utilizar MySQL - Ryzen_ - 31/03/2024

Olá pessoal, boa noite a todos. Comecei a usar o MySQL em conjunto com o PAWN agora, no open.mp, mas me deparei com alguns erros que até o momento não entendi muito bem como os resolver. Segue abaixo o chat log:

[font="Fira Code", Consolas, "Courier New", monospace][31/03/2024 23:43:35] [ERROR] cache_get_value_name_int: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_int: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_int: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_int: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_int: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_int: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_float: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_float: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_float: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_int: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_int: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_int: no active cache
[31/03/2024 23:43:35] [ERROR] cache_get_value_name_int: no active cache
[/font]

Código PHP:
    cache_get_value_int(0"ID"PlayerInfo[playerid][pID]);
    cache_get_value_name(0"Senha"PlayerInfo[playerid][pSenha]);
    cache_get_value_int(0"Level"PlayerInfo[playerid][pLevel]);
    cache_get_value_int(0"EXP"PlayerInfo[playerid][pExp]);
    cache_get_value_int(0"Dinheiro"PlayerInfo[playerid][pGrana]);
    cache_get_value_int(0"Saldo"PlayerInfo[playerid][pSaldo]);
    cache_get_value_int(0"Admin"PlayerInfo[playerid][pAdmin]);
    cache_get_value_float(0"PosX"PlayerInfo[playerid][pPosX]);
    cache_get_value_float(0"PosY"PlayerInfo[playerid][pPosY]);
    cache_get_value_float(0"PosZ"PlayerInfo[playerid][pPosZ]);
    cache_get_value_int(0"Sede"PlayerInfo[playerid][pSede]);
    cache_get_value_int(0"Fome"PlayerInfo[playerid][pFome]);
    cache_get_value_int(0"Sono"PlayerInfo[playerid][pSono]);
    cache_get_value_int(0"Sexo"PlayerInfo[playerid][pSkin]);
    cache_get_value_float(0"Vida"PlayerInfo[playerid][pVida]);
    cache_get_value_float(0"Colete"PlayerInfo[playerid][pColete]); 

O que poderia causar os problemas relacionados ao cache? Desde já, agradeço a todos que contribuirem. Muito obrigado.

Att.: Não sei se tem a ver com esses possíveis erros do log, mas ao logar, se eu apenas quitar do servidor e entrar novamente, ele carrega tudo certinho, as informações da conta (Mas tenho certeza que é devido ao fato de eu ainda não ter feito o reset das informações ao desconectar), mas se eu fecho o servidor e abro novamente, as informações não são carregadas do banco de dados.


RE: Erros ao utilizar MySQL - samuelmatheus0502 - 01/04/2024

tenta dar uma olhada como que ta o mysql_query antes de puxar essas informações, da uma olhada se não tem nada de errado


RE: Erros ao utilizar MySQL - pushline - 01/04/2024

Você fez com tquery ou query normal? Se for tquery, só consegues retornar os dados em uma callback. Se quiseres fazer na mesma função/public há de ser com Cache: e usando _query (não recomendado esta segunda opção).


RE: Erros ao utilizar MySQL - Ryzen_ - 01/04/2024

(01/04/2024 08:09)pushline Escreveu: Você fez com tquery ou query normal? Se for tquery, só consegues retornar os dados em uma callback. Se quiseres fazer na mesma função/public há de ser com Cache: e usando _query (não recomendado esta segunda opção).

Fiz utilizando tquery. Poderia me dar um breve tutorial ou resumo sobre a utilização do Cache? Seria melhor utilizar assim, ou com a callback? Atualmente ele é uma função stock chamada de LoadAccount(playerid)


RE: Erros ao utilizar MySQL - samuelmatheus0502 - 01/04/2024

Ryzen, você teria que revisar a linha que está chamando essa função loadAccount, deve ter algo assim

Código:
mysql_tquery(ConexaoSQL, Query, "sua_função", "i", playerid); // ConexaoSQL = sua variável de conexão com o DB,  Query = sua variável de string da consulta, utilize as do seu gamemode

porque você estaria chamando a consulta com a linha acima e posteriormente faria uma callback em format de public, fazendo uma

Código:
forward sua_função(parametros);
public sua_função(parametros){
    return 1;
}

Dei só um exemplo, espero que tenha clareado

Eu faria assim

Essa linha você adicionaria onde está fazendo sua verificação desejada

Código:
new Query[90];
mysql_tquery( sua variavel de conexao com DB, Query, "LoadAccount", "i", playerid);

No final do gamemode substituiria sua stok pela public

Código:
forward LoadAccount(playerid);
public LoadAccount(playerid){
    cache_get_value_int(0, "ID", PlayerInfo[playerid][pID]);
    cache_get_value_name(0, "Senha", PlayerInfo[playerid][pSenha]);
    cache_get_value_int(0, "Level", PlayerInfo[playerid][pLevel]);
    cache_get_value_int(0, "EXP", PlayerInfo[playerid][pExp]);
    cache_get_value_int(0, "Dinheiro", PlayerInfo[playerid][pGrana]);
    cache_get_value_int(0, "Saldo", PlayerInfo[playerid][pSaldo]);
    cache_get_value_int(0, "Admin", PlayerInfo[playerid][pAdmin]);
    cache_get_value_float(0, "PosX", PlayerInfo[playerid][pPosX]);
    cache_get_value_float(0, "PosY", PlayerInfo[playerid][pPosY]);
    cache_get_value_float(0, "PosZ", PlayerInfo[playerid][pPosZ]);
    cache_get_value_int(0, "Sede", PlayerInfo[playerid][pSede]);
    cache_get_value_int(0, "Fome", PlayerInfo[playerid][pFome]);
    cache_get_value_int(0, "Sono", PlayerInfo[playerid][pSono]);
    cache_get_value_int(0, "Sexo", PlayerInfo[playerid][pSkin]);
    cache_get_value_float(0, "Vida", PlayerInfo[playerid][pVida]);
    cache_get_value_float(0, "Colete", PlayerInfo[playerid][pColete]);
    return 1;
}



RE: Erros ao utilizar MySQL - pushline - 01/04/2024

Complementando o que o samuel falou, eu faria assim: (e não recomendo fazer stock pra funções já que stocks ocupam mais memória e só servem pra includes)

Código PHP:
new Query[255];
mysql_format(Querysizeof(Query), "SELECT * FROM tabela_players WHERE username = '%e' LIMIT 1"nome_player);
mysql_tquery(MYSQL_DEFAULT_HANDLEQuery"LoadAccount""i"playerid); // esse "i" podes acrescentar mais argumentos, tais como string ("s"), float ("f") e etc (array n passa se eu n me engano).

forward LoadAccount(playerid); // se fosse colocar no tquery "iii", teria que ter 3 parametros no forward + public.
public LoadAccount(playerid)

  if(!
cache_num_rows())
  {
    return 
SendClientMessage(playerid, -1"Player inexistente.");
  }

  
cache_get_value_int(0"ID"PlayerInfo[playerid][pID]);
  
cache_get_value_name(0"Senha"PlayerInfo[playerid][pSenha]);
  
cache_get_value_int(0"Level"PlayerInfo[playerid][pLevel]);
  
cache_get_value_int(0"EXP"PlayerInfo[playerid][pExp]);
  
cache_get_value_int(0"Dinheiro"PlayerInfo[playerid][pGrana]);
  
cache_get_value_int(0"Saldo"PlayerInfo[playerid][pSaldo]);
  
cache_get_value_int(0"Admin"PlayerInfo[playerid][pAdmin]);
  
cache_get_value_float(0"PosX"PlayerInfo[playerid][pPosX]);
  
cache_get_value_float(0"PosY"PlayerInfo[playerid][pPosY]);
  
cache_get_value_float(0"PosZ"PlayerInfo[playerid][pPosZ]);
  
cache_get_value_int(0"Sede"PlayerInfo[playerid][pSede]);
  
cache_get_value_int(0"Fome"PlayerInfo[playerid][pFome]);
  
cache_get_value_int(0"Sono"PlayerInfo[playerid][pSono]);
  
cache_get_value_int(0"Sexo"PlayerInfo[playerid][pSkin]);
  
cache_get_value_float(0"Vida"PlayerInfo[playerid][pVida]);
  
cache_get_value_float(0"Colete"PlayerInfo[playerid][pColete]);
  return 
1;




RE: Erros ao utilizar MySQL - Ryzen_ - 01/04/2024

(01/04/2024 13:34)pushline Escreveu: Complementando o que o samuel falou, eu faria assim: (e não recomendo fazer stock pra funções já que stocks ocupam mais memória e só servem pra includes)

Código PHP:
new Query[255];
mysql_format(Querysizeof(Query), "SELECT * FROM tabela_players WHERE username = '%e' LIMIT 1"nome_player);
mysql_tquery(MYSQL_DEFAULT_HANDLEQuery"LoadAccount""i"playerid); // esse "i" podes acrescentar mais argumentos, tais como string ("s"), float ("f") e etc (array n passa se eu n me engano).

forward LoadAccount(playerid); // se fosse colocar no tquery "iii", teria que ter 3 parametros no forward + public.
public LoadAccount(playerid)

  if(!cache_num_rows())
  {
    return SendClientMessage(playerid, -1"Player inexistente.");
  }

  cache_get_value_int(0"ID"PlayerInfo[playerid][pID]);
  cache_get_value_name(0"Senha"PlayerInfo[playerid][pSenha]);
  cache_get_value_int(0"Level"PlayerInfo[playerid][pLevel]);
  cache_get_value_int(0"EXP"PlayerInfo[playerid][pExp]);
  cache_get_value_int(0"Dinheiro"PlayerInfo[playerid][pGrana]);
  cache_get_value_int(0"Saldo"PlayerInfo[playerid][pSaldo]);
  cache_get_value_int(0"Admin"PlayerInfo[playerid][pAdmin]);
  cache_get_value_float(0"PosX"PlayerInfo[playerid][pPosX]);
  cache_get_value_float(0"PosY"PlayerInfo[playerid][pPosY]);
  cache_get_value_float(0"PosZ"PlayerInfo[playerid][pPosZ]);
  cache_get_value_int(0"Sede"PlayerInfo[playerid][pSede]);
  cache_get_value_int(0"Fome"PlayerInfo[playerid][pFome]);
  cache_get_value_int(0"Sono"PlayerInfo[playerid][pSono]);
  cache_get_value_int(0"Sexo"PlayerInfo[playerid][pSkin]);
  cache_get_value_float(0"Vida"PlayerInfo[playerid][pVida]);
  cache_get_value_float(0"Colete"PlayerInfo[playerid][pColete]);
  return 1;

Stock ocupa mais memória? Não sabia. Pelo que me foi dito, era recomendado utilizar publics apenas em callbacks, e fora delas, utilizar apenas a stock. Quem criou o sistema de LoadAccount foi um outro membro da equipe, pois partiu dele a decisão de ir do DOF2 para o MySQL (Apenas nas contas, os demais sistemas ficaram em DOF, tais como o sistema de clans). Obrigado pelas respostas Samuel e Pushline, me ajudou a dar uma clareada. O que o outro membro da equipe fez, se encontra atualmente dessa forma (Na função CreateAccount(), creio que também tenha algo de errado, podem verificar por favor? Também notei que ele usou mysql_query() nela):

Função LoadAccount() presente no arquivo "login.inc":
Código PHP:
stock LoadAccount(playerid) {
    
//format(File, sizeof(File), PASTA_CONTAS, GetPlayerNameEx(playerid));

    
SetCameraBehindPlayer(playerid);
    
CancelSelectTextDraw(playerid);
    
StopAudioStreamForPlayer(playerid);
    
DeletePVar(playerid"hash");
    print(
"LoadAccount chamada");


    
// HUD
    
ShowPlayerGlobalHUDStats(playerid);
    
ShowPlayerHUDStats(playerid);
    
PlayerTextDrawShow(playeridrelogio[playerid]);
    
ShowTextData(playerid);

    
// Stats system
    
SetPlayerProgressBarValue(playeridStatsBar[playerid][0], float(PlayerInfo[playerid][pFome]));
    
SetPlayerProgressBarValue(playeridStatsBar[playerid][1], float(PlayerInfo[playerid][pSede]));
    
SetPlayerProgressBarValue(playeridStatsBar[playerid][2], float(PlayerInfo[playerid][pSono]));


    
// Timers
    
TimerHunger[playerid] = SetTimerEx("HungerTimer"1200000true"i"playerid);
    
TimerSono[playerid] = SetTimerEx("SonoTimer"2400000true"i"playerid);
    
TimerSede[playerid] = SetTimerEx("SedeTimer"900000true"i"playerid);
    
ClockTimer[playerid] = SetTimerEx("Clock"1000true"i"playerid);
    
TimerSegundos[playerid] = SetTimerEx("AtualizarSegundos"1000true"i"playerid);
    
SetTimerEx("SetPlayerCashInTime"1300false"ii"playeridGetPlayerCash(playerid));
    
KillTimer(TimerExpirarLogin[playerid]);

    
TogglePlayerSpectating(playeridfalse);
    
SetSpawnInfo(playeridNO_TEAMPlayerInfo[playerid][pSkin], PlayerInfo[playerid][pPosX], PlayerInfo[playerid][pPosY], PlayerInfo[playerid][pPosZ], 0.3040WEAPON_FIST0WEAPON_FIST0WEAPON_FIST0);
    
SpawnPlayer(playerid);
    
SetPlayerScore(playeridPlayerInfo[playerid][pLevel]);
    
SetPlayerJobColor(playeridGetPlayerJob(playerid));
    
SetPlayerClanColor(playeridGetPlayerClan(playerid));

    
SetPVarInt(playerid"exp"gettime());

    
format(STRXsizeof(STRX), "%d"GetPlayerWanted(playerid));
    
PlayerTextDrawSetString(playeridPlayerHUD[playerid][0], STRX);

    
SetPVarInt(playerid"AFKUpdate"gettime());
    
DeletePVar(playerid"unhashedpassword");
    
PlayerInfo[playerid][pLogado] = true;
    
SetPlayerSkin(playeridPlayerInfo[playerid][pSkin]);

    
cache_get_value_int(0"ID"PlayerInfo[playerid][pID]);
    
cache_get_value_name(0"Senha"PlayerInfo[playerid][pSenha]);
    
cache_get_value_int(0"Level"PlayerInfo[playerid][pLevel]);
    
cache_get_value_int(0"EXP"PlayerInfo[playerid][pExp]);
    
cache_get_value_int(0"Dinheiro"PlayerInfo[playerid][pGrana]);
    
cache_get_value_int(0"Saldo"PlayerInfo[playerid][pSaldo]);
    
cache_get_value_int(0"Admin"PlayerInfo[playerid][pAdmin]);
    
cache_get_value_float(0"PosX"PlayerInfo[playerid][pPosX]);
    
cache_get_value_float(0"PosY"PlayerInfo[playerid][pPosY]);
    
cache_get_value_float(0"PosZ"PlayerInfo[playerid][pPosZ]);
    
cache_get_value_int(0"Sede"PlayerInfo[playerid][pSede]);
    
cache_get_value_int(0"Fome"PlayerInfo[playerid][pFome]);
    
cache_get_value_int(0"Sono"PlayerInfo[playerid][pSono]);
    
cache_get_value_int(0"Sexo"PlayerInfo[playerid][pSkin]);
    
cache_get_value_float(0"Vida"PlayerInfo[playerid][pVida]);
    
cache_get_value_float(0"Colete"PlayerInfo[playerid][pColete]);
    
    if(
PlayerInfo[playerid][pInterior] > 0) {
        
SetTimerEx("SetInterior"200false"i"playerid);
    }

    
SetPlayerHealth(playeridPlayerInfo[playerid][pVida]);
    
SetPlayerArmour(playeridPlayerInfo[playerid][pColete]);
    
TogglePlayerControllable(playeridfalse);
    
    
SetTimerEx("DestogglePlayerControllable"300false"i"playerid);
    return 
1;


Funções presentes no arquivo da GM:
Código PHP:
forward CreateAccount(playerid);
public 
CreateAccount(playerid) {
    new 
query[500], email[128];
    
GetPVarString(playerid"unconfirmedemail"email);

    
PlayerInfo[playerid][pID] = cache_insert_id();
    
PlayerInfo[playerid][pLevel] = 0;
    
PlayerInfo[playerid][pExp] = 0;
    
PlayerInfo[playerid][pGrana] = 5000;
    
PlayerInfo[playerid][pSaldo] = 0;
    
PlayerInfo[playerid][pAdmin] = 0;
    
PlayerInfo[playerid][pPosX] = 1154.4115;
    
PlayerInfo[playerid][pPosY] = -1747.7765;
    
PlayerInfo[playerid][pPosZ] = 13.5703;
    
PlayerInfo[playerid][pFome] = 100;
    
PlayerInfo[playerid][pSede] = 100;
    
PlayerInfo[playerid][pSono] = 100;
    
PlayerInfo[playerid][pVida] = 100.0;
    
PlayerInfo[playerid][pColete] = 0.0;

    
mysql_format(connquerysizeof(query), "SELECT * FROM jogadores WHERE ID='%i'"PlayerInfo[playerid][pID]);
    
mysql_query(connquery);
    
LoadAccount(playerid);
    
    
//DOF2_SetString(file, "Email", email);
    
DeletePVar(playerid"unconfirmedemail");
    
DeletePVar(playerid"hash");
    

    print(
"CreateAccount Chamada");
    
SetPlayerJob(playeridPROF_DESEMPREGADO);
    
CancelSelectTextDraw(playerid);
    
ShowPlayerDialog(playeridDIALOG_GENDERDIALOG_STYLE_MSGBOX"Gênero - Escolha seu Gênero""{FFFFFF}Escolha seu Gênero""Masculino""Feminino");
    return 
1;
}

forward OnPassCheck(playerid);
public 
OnPassCheck(playerid) {
    if(
bcrypt_is_equal()) {
        
PlayerInfo[playerid][pLogado] = true;
        
LoadAccount(playerid);
        
SendClientMessage(playeridMarrom"| INFO | %s de volta, %s | Último login: %s"PlayerInfo[playerid][pSexo] ? "Bem-vindo" "Bem-vinda"GetPlayerNameEx(playerid), DOF2_GetString(File"UltimoLogin"));
    } else {
        
PlayerInfo[playerid][pTentativas]++;
        
SendClientMessage(playeridVermelho"| ERRO | Senha inválida");
    }
    return 
1;


Função OnPlayerConnect (Creio que o problema em não carregar os dados no momento em que é feito o login, possa estar contido nisso. Já que não vejo chamada alguma do LoadAccount ao player se conectar): 

Código PHP:
public OnPlayerConnect(playerid) {
    
PlayerInfo[playerid][pLogado] = false;

    
LoadBan(playerid);

    if(!
strcmp(GetPlayerNameEx(playerid), "Ninguem")) return Kick(playerid);
    else if(
IsTextIP(GetPlayerNameEx(playerid))) return Kick(playerid);

    
LoadPlayerTextDraws(playerid);
    
LoadPlayerProgressBars(playerid);
    
PreloadAnimLibs(playerid);

    
LoadSocialMediaMap(playerid);

    new 
Random random(MAX_SONGS), song[128];
    
format(songsizeof(song), "%s"musicas[Random]);

    
PlayAudioStreamForPlayer(playeridsong);
    return 
1;


Att.: Em "mysql_format(Query, sizeof(Query), "SELECT * FROM tabela_players WHERE username = '%e' LIMIT 1", nome_player);", o que seria o "nome_player"? A variável responsável por armazenar o nick do jogador, tal como "PlayerInfo[playerid][pName]"?

Att-2: Creio ter entendido já. Provavelmente é uma forma de pegar o nick do player através do ID, que no meu caso seria "GetPlayerNameEx(playerid)", correto?


RE: Erros ao utilizar MySQL - samuelmatheus0502 - 01/04/2024

(01/04/2024 13:34)pushline Escreveu: Complementando o que o samuel falou, eu faria assim: (e não recomendo fazer stock pra funções já que stocks ocupam mais memória e só servem pra includes)

Código PHP:
new Query[255];
mysql_format(Querysizeof(Query), "SELECT * FROM tabela_players WHERE username = '%e' LIMIT 1"nome_player);
mysql_tquery(MYSQL_DEFAULT_HANDLEQuery"LoadAccount""i"playerid); // esse "i" podes acrescentar mais argumentos, tais como string ("s"), float ("f") e etc (array n passa se eu n me engano).

forward LoadAccount(playerid); // se fosse colocar no tquery "iii", teria que ter 3 parametros no forward + public.
public LoadAccount(playerid)

  if(!cache_num_rows())
  {
    return SendClientMessage(playerid, -1"Player inexistente.");
  }

  cache_get_value_int(0"ID"PlayerInfo[playerid][pID]);
  cache_get_value_name(0"Senha"PlayerInfo[playerid][pSenha]);
  cache_get_value_int(0"Level"PlayerInfo[playerid][pLevel]);
  cache_get_value_int(0"EXP"PlayerInfo[playerid][pExp]);
  cache_get_value_int(0"Dinheiro"PlayerInfo[playerid][pGrana]);
  cache_get_value_int(0"Saldo"PlayerInfo[playerid][pSaldo]);
  cache_get_value_int(0"Admin"PlayerInfo[playerid][pAdmin]);
  cache_get_value_float(0"PosX"PlayerInfo[playerid][pPosX]);
  cache_get_value_float(0"PosY"PlayerInfo[playerid][pPosY]);
  cache_get_value_float(0"PosZ"PlayerInfo[playerid][pPosZ]);
  cache_get_value_int(0"Sede"PlayerInfo[playerid][pSede]);
  cache_get_value_int(0"Fome"PlayerInfo[playerid][pFome]);
  cache_get_value_int(0"Sono"PlayerInfo[playerid][pSono]);
  cache_get_value_int(0"Sexo"PlayerInfo[playerid][pSkin]);
  cache_get_value_float(0"Vida"PlayerInfo[playerid][pVida]);
  cache_get_value_float(0"Colete"PlayerInfo[playerid][pColete]);
  return 1;


tinha esquecido dessa linha, mysql_format(Query, sizeof(Query), "SELECT * FROM tabela_players WHERE username = '%e' LIMIT 1", nome_player);
e da validação das linhas no DB
valeu por lembrar


RE: Erros ao utilizar MySQL - White_Blue - 01/04/2024

(01/04/2024 13:34)pushline Escreveu: Complementando o que o samuel falou, eu faria assim: (e não recomendo fazer stock pra funções já que stocks ocupam mais memória e só servem pra includes)

Código PHP:
new Query[255];
mysql_format(Querysizeof(Query), "SELECT * FROM tabela_players WHERE username = '%e' LIMIT 1"nome_player);
mysql_tquery(MYSQL_DEFAULT_HANDLEQuery"LoadAccount""i"playerid); // esse "i" podes acrescentar mais argumentos, tais como string ("s"), float ("f") e etc (array n passa se eu n me engano).

forward LoadAccount(playerid); // se fosse colocar no tquery "iii", teria que ter 3 parametros no forward + public.
public LoadAccount(playerid)

  if(!cache_num_rows())
  {
    return SendClientMessage(playerid, -1"Player inexistente.");
  }

  cache_get_value_int(0"ID"PlayerInfo[playerid][pID]);
  cache_get_value_name(0"Senha"PlayerInfo[playerid][pSenha]);
  cache_get_value_int(0"Level"PlayerInfo[playerid][pLevel]);
  cache_get_value_int(0"EXP"PlayerInfo[playerid][pExp]);
  cache_get_value_int(0"Dinheiro"PlayerInfo[playerid][pGrana]);
  cache_get_value_int(0"Saldo"PlayerInfo[playerid][pSaldo]);
  cache_get_value_int(0"Admin"PlayerInfo[playerid][pAdmin]);
  cache_get_value_float(0"PosX"PlayerInfo[playerid][pPosX]);
  cache_get_value_float(0"PosY"PlayerInfo[playerid][pPosY]);
  cache_get_value_float(0"PosZ"PlayerInfo[playerid][pPosZ]);
  cache_get_value_int(0"Sede"PlayerInfo[playerid][pSede]);
  cache_get_value_int(0"Fome"PlayerInfo[playerid][pFome]);
  cache_get_value_int(0"Sono"PlayerInfo[playerid][pSono]);
  cache_get_value_int(0"Sexo"PlayerInfo[playerid][pSkin]);
  cache_get_value_float(0"Vida"PlayerInfo[playerid][pVida]);
  cache_get_value_float(0"Colete"PlayerInfo[playerid][pColete]);
  return 1;


stock = funções (que tecnicamente é apenas uma palavra-chave para dizer para o compilador ignroar a função caso a mesma não for utilizada);
public = callbacks/eventos;

Se usa stock para funções e publics apenas devem ser usadas para eventos. Não é questão de memória.


RE: Erros ao utilizar MySQL - Ryzen_ - 01/04/2024

(01/04/2024 14:28)White_Blue Escreveu:
(01/04/2024 13:34)pushline Escreveu: Complementando o que o samuel falou, eu faria assim: (e não recomendo fazer stock pra funções já que stocks ocupam mais memória e só servem pra includes)

Código PHP:
new Query[255];
mysql_format(Querysizeof(Query), "SELECT * FROM tabela_players WHERE username = '%e' LIMIT 1"nome_player);
mysql_tquery(MYSQL_DEFAULT_HANDLEQuery"LoadAccount""i"playerid); // esse "i" podes acrescentar mais argumentos, tais como string ("s"), float ("f") e etc (array n passa se eu n me engano).

forward LoadAccount(playerid); // se fosse colocar no tquery "iii", teria que ter 3 parametros no forward + public.
public LoadAccount(playerid)

  if(!cache_num_rows())
  {
    return SendClientMessage(playerid, -1"Player inexistente.");
  }

  cache_get_value_int(0"ID"PlayerInfo[playerid][pID]);
  cache_get_value_name(0"Senha"PlayerInfo[playerid][pSenha]);
  cache_get_value_int(0"Level"PlayerInfo[playerid][pLevel]);
  cache_get_value_int(0"EXP"PlayerInfo[playerid][pExp]);
  cache_get_value_int(0"Dinheiro"PlayerInfo[playerid][pGrana]);
  cache_get_value_int(0"Saldo"PlayerInfo[playerid][pSaldo]);
  cache_get_value_int(0"Admin"PlayerInfo[playerid][pAdmin]);
  cache_get_value_float(0"PosX"PlayerInfo[playerid][pPosX]);
  cache_get_value_float(0"PosY"PlayerInfo[playerid][pPosY]);
  cache_get_value_float(0"PosZ"PlayerInfo[playerid][pPosZ]);
  cache_get_value_int(0"Sede"PlayerInfo[playerid][pSede]);
  cache_get_value_int(0"Fome"PlayerInfo[playerid][pFome]);
  cache_get_value_int(0"Sono"PlayerInfo[playerid][pSono]);
  cache_get_value_int(0"Sexo"PlayerInfo[playerid][pSkin]);
  cache_get_value_float(0"Vida"PlayerInfo[playerid][pVida]);
  cache_get_value_float(0"Colete"PlayerInfo[playerid][pColete]);
  return 1;


stock = funções (que tecnicamente é apenas uma palavra-chave para dizer para o compilador ignroar a função caso a mesma não for utilizada);
public = callbacks/eventos;

Se usa stock para funções e publics apenas devem ser usadas para eventos. Não é questão de memória.

Era isso o que eu sabia, fiquei meio confuso quando falaram sobre o uso de memória. Pode dar uma olhada na mensagem anterior que postei aqui no tópico?