Portal SAMP
[Ajuda] Armas - 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] Armas (/showthread.php?tid=4643)

Páginas: 1 2 3


Armas - escobarzinhu - 22/03/2024

alguem sabe fazer stock de salvamento de armas vida e colete? e uma stock de carregamento


RE: Armas - Ryzen_ - 22/03/2024

Basta criar variáveis globais para armazenar cada um dos valores, setar eles para o jogador após ele logar, e recuperar os mesmos quando ele deslogar, realizando o salvamento. Irei te passar um exemplo utilizando o DOF2, e levarei em conta que já possue a função responsável por criar o arquivo para cada conta criada.

Código PHP:
// Macro para facilitar o desenvolvimento durante a manipulação dos dados
#define PASTA_CONTAS "/Contas/%s.ini"

// Variável criada para facilitar o "format()" ao manipular os dados
new File[128];

// Conjunto de variáveis responsáveis por armazenar informações do jogador
enum pInfo {
    
Float:pColete,
    
pVida
}

// Variável para armazenar diferentes valores referentes ao jogador
new PlayerInfo[MAX_PLAYERS][pInfo];

// Recarrega os dados do jogador após o mesmo se conectar
public OnPlayerConnect(playerid) {
    
LoadAccount(playerid);

    return 
1;
}

// Recupera a vida e colete atuais do jogador, e seta dentro de suas respectivas variáveis, e após realiza o salvamento.
public OnPlayerDisconnect(playerid) {
    new 
Float:healthFloat:armour;

    
PlayerInfo[playerid][pColete] = GetPlayerArmour(playeridarmour);
    
PlayerInfo[playerid][pVida] = GetPlayerHealth(playeridhealth);

    
SaveAccount(playerid);

    return 
1;
}

// Função responsável por salvar os dados do player
stock SaveAccount(playerid) {
    
format(Filesizeof(File), PASTA_CONTASGetPlayerNameEx(playerid));

    
DOF2_SetFloat(File"Vida"PlayerInfo[playerid][pVida]);
    
DOF2_SetFloat(File"Colete"PlayerInfo[playerid][pColete]);

    
DOF2_SaveFile();

    return 
1;
}

// Função responsável por fazer o carregamento nos dados do player
stock LoadAccount(playerid) {
    
format(Filesizeof(File), PASTA_CONTASGetPlayerNameEx(playerid));

    
PlayerInfo[playerid][pVida] = DOF2_GetFloat(File"Vida");
    
PlayerInfo[playerid][pColete] = DOF2_GetFloat(File"Colete");
    
    return 
1;
}

// Função para pegar o nome do player
stock GetPlayerNameEx(playerid) {
    static 
Name[MAX_PLAYER_NAME+1];
    
GetPlayerName(playeridNamesizeof(Name));
    return 
Name;


Quanto ao sistema de salvamento das armas, existe um tutorial bem completo a respeito do mesmo aqui no fórum: https://portalsamp.com/showthread.php?tid=2382


RE: Armas - White_Blue - 22/03/2024

(22/03/2024 02:00)Ryzen_ Escreveu: Basta criar variáveis globais para armazenar cada um dos valores, setar eles para o jogador após ele logar, e recuperar os mesmos quando ele deslogar, realizando o salvamento. Irei te passar um exemplo utilizando o DOF2, e levarei em conta que já possue a função responsável por criar o arquivo para cada conta criada.

Código PHP:
// Macro para facilitar o desenvolvimento durante a manipulação dos dados
#define PASTA_CONTAS "/Contas/%s.ini";

// Variável criada para facilitar o "format()" ao manipular os dados
new File[128];

// Conjunto de variáveis responsáveis por armazenar informações do jogador
enum pInfo {
    Float:pColete,
    pVida
}

// Variável para armazenar diferentes valores referentes ao jogador
new PlayerInfo[MAX_PLAYERS][pInfo];

// Recarrega os dados do jogador após o mesmo se conectar
public OnPlayerConnect(playerid) {
    LoadAccount(playerid);

    return 1;
}

// Recupera a vida e colete atuais do jogador, e seta dentro de suas respectivas variáveis, e após realiza o salvamento.
public OnPlayerDisconnect(playerid) {
    PlayerInfo[playerid][pColete] = GetPlayerArmour(playerid, &Float:armour);
    PlayerInfo[playerid][pVida] = GetPlayerHealth(playerid, &Float:health);

    SaveAccount(playerid);

    return 1;
}

// Função responsável por salvar os dados do player
stock SaveAccount(playerid) {
    format(Filesizeof(File), PASTA_CONTASGetPlayerNameEx(playerid));

    DOF2_SetInt(File"Vida"PlayerInfo[playerid][pVida]);
    DOF2_SetFloat(File"Colete"PlayerInfo[playerid][pColete]);

    DOF2_SaveFile();

    return 1;
}

// Função responsável por fazer o carregamento nos dados do player
stock LoadAccount(playerid) {
    format(Filesizeof(File), PASTA_CONTASGetPlayerNameEx(playerid));

    PlayerInfo[playerid][pVida] = DOF2_GetInt(File"Vida");
    PlayerInfo[playerid][pColete] = DOF2_GetFloat(File"Colete");
    
    
return 1;
}

// Função para pegar o nome do player
stock GetPlayerNameEx(playerid) {
    static Name[MAX_PLAYER_NAME+1];
    GetPlayerName(playeridNamesizeof(Name));
    return Name;


Quanto ao sistema de salvamento das armas, existe um tutorial bem completo a respeito do mesmo aqui no fórum: https://portalsamp.com/showthread.php?tid=2382

Apenas algumas correções:
O valor da vida do jogador é tratado como um valor float, e não como um valor inteiro.
Não é necessário utilizar a tag Float como parâmetro nas funções GetPlayerHealth e GetPlayerArmour, tampouco é necessário o uso do símbolo "&" já que este é utilizado apenas para indicar que os parâmetros das funções são opcionais.


RE: Armas - escobarzinhu - 22/03/2024

error 001: expected token: ",", but found ";" nao achei onde ta faltando a ,


RE: Armas - Calasans - 22/03/2024

(22/03/2024 05:21)escobarzinhu Escreveu: error 001: expected token: ",", but found ";" nao achei onde ta faltando a ,

É na definição:
Código PHP:
#define PASTA_CONTAS "/Contas/%s.ini"; 
Não tem lógica possuir ; no final. Use assim:
Código PHP:
#define PASTA_CONTAS "/Contas/%s.ini" 



RE: Armas - escobarzinhu - 22/03/2024

PlayerInfo[playerid][pColete] = GetPlayerArmour(playerid, &Float:armour);
PlayerInfo[playerid][pVida] = GetPlayerHealth(playerid, &Float:health); ta certo isso?


RE: Armas - Ryzen_ - 22/03/2024

Não escobarzinhu, eu já realizei as correções no código lá em cima. Basta criar duas novas variáveis "new Float:health, Float:armour;", e remover o "&Float:" dentro das respectivas funções.


(22/03/2024 03:02)White_Blue Escreveu:
(22/03/2024 02:00)Ryzen_ Escreveu: Basta criar variáveis globais para armazenar cada um dos valores, setar eles para o jogador após ele logar, e recuperar os mesmos quando ele deslogar, realizando o salvamento. Irei te passar um exemplo utilizando o DOF2, e levarei em conta que já possue a função responsável por criar o arquivo para cada conta criada.

Código PHP:
// Macro para facilitar o desenvolvimento durante a manipulação dos dados
#define PASTA_CONTAS "/Contas/%s.ini";

// Variável criada para facilitar o "format()" ao manipular os dados
new File[128];

// Conjunto de variáveis responsáveis por armazenar informações do jogador
enum pInfo {
    Float:pColete,
    pVida
}

// Variável para armazenar diferentes valores referentes ao jogador
new PlayerInfo[MAX_PLAYERS][pInfo];

// Recarrega os dados do jogador após o mesmo se conectar
public OnPlayerConnect(playerid) {
    LoadAccount(playerid);

    return 1;
}

// Recupera a vida e colete atuais do jogador, e seta dentro de suas respectivas variáveis, e após realiza o salvamento.
public OnPlayerDisconnect(playerid) {
    PlayerInfo[playerid][pColete] = GetPlayerArmour(playerid, &Float:armour);
    PlayerInfo[playerid][pVida] = GetPlayerHealth(playerid, &Float:health);

    SaveAccount(playerid);

    return 1;
}

// Função responsável por salvar os dados do player
stock SaveAccount(playerid) {
    format(Filesizeof(File), PASTA_CONTASGetPlayerNameEx(playerid));

    DOF2_SetInt(File"Vida"PlayerInfo[playerid][pVida]);
    DOF2_SetFloat(File"Colete"PlayerInfo[playerid][pColete]);

    DOF2_SaveFile();

    return 1;
}

// Função responsável por fazer o carregamento nos dados do player
stock LoadAccount(playerid) {
    format(Filesizeof(File), PASTA_CONTASGetPlayerNameEx(playerid));

    PlayerInfo[playerid][pVida] = DOF2_GetInt(File"Vida");
    PlayerInfo[playerid][pColete] = DOF2_GetFloat(File"Colete");
    
    
return 1;
}

// Função para pegar o nome do player
stock GetPlayerNameEx(playerid) {
    static Name[MAX_PLAYER_NAME+1];
    GetPlayerName(playeridNamesizeof(Name));
    return Name;


Quanto ao sistema de salvamento das armas, existe um tutorial bem completo a respeito do mesmo aqui no fórum: https://portalsamp.com/showthread.php?tid=2382

Apenas algumas correções:
O valor da vida do jogador é tratado como um valor float, e não como um valor inteiro.
Não é necessário utilizar a tag Float como parâmetro nas funções GetPlayerHealth e GetPlayerArmour, tampouco é necessário o uso do símbolo "&" já que este é utilizado apenas para indicar que os parâmetros das funções são opcionais.

Isso mesmo White. acabei cometendo alguns erros ontem, tava quase caindo da cadeira de sono. Obrigado pelas correções, tanto a você quanto ao Calasans, e já fiz as alterações no código.


RE: Armas - escobarzinhu - 22/03/2024

eu adaptei pra minha gm, mas ta dando 4 erros,
error 028: invalid subscript (not an array or too many subscripts): "Info"
warning 215: expression has no effect
error 001: expected token: ";", but found "]"
error 029: invalid expression, assumed zero
fatal error 107: too many error messages on one line
consegue ajudar?


RE: Armas - Ryzen_ - 22/03/2024

(22/03/2024 15:01)escobarzinhu Escreveu: eu adaptei pra minha gm, mas ta dando 4 erros,
error 028: invalid subscript (not an array or too many subscripts): "Info"
warning 215: expression has no effect
error 001: expected token: ";", but found "]"
error 029: invalid expression, assumed zero
fatal error 107: too many error messages on one line
consegue ajudar?

Consegue enviar as respectivas linhas que estão causando o erro? (Não lembro se o pawno mostra quais são. Atualmente utilizo o VSCODE, o qual recomendo)


RE: Armas - escobarzinhu - 22/03/2024

(22/03/2024 15:06)Ryzen_ Escreveu:
(22/03/2024 15:01)escobarzinhu Escreveu: eu adaptei pra minha gm, mas ta dando 4 erros,
error 028: invalid subscript (not an array or too many subscripts): "Info"
warning 215: expression has no effect
error 001: expected token: ";", but found "]"
error 029: invalid expression, assumed zero
fatal error 107: too many error messages on one line
consegue ajudar?

Consegue enviar as respectivas linhas que estão causando o erro? (Não lembro se o pawno mostra quais são. Atualmente utilizo o VSCODE, o qual recomendo)

ta tudo nessa linha  
Info[playerid][pColete] = GetPlayerArmour(playerid, armour);


o codigo completo 

  new Float:health, Float:armour;

    Info[playerid][pColete] = GetPlayerArmour(playerid, armour);
    Info[playerid][pVida] = GetPlayerHealth(playerid, health);
    SaveAccount(playerid);