Salvamento de vida, colete, arma e munição utilizando DOF2 - Alfarr Heimrik - 22/10/2023
Olá a todos. Comecei a programar recentemente, por isso venho tendo tantos conflitos.
Obrigado a todos que se dispuserem a ajudar.
Código PHP: stock sDados(playerid) // Salvar os dados do player { if(DOF2_FileExists(Arquivo(playerid))) { new Float:Vida, Float:Colete, Arma, Municao, String[20]; DOF2_SetInt(Arquivo(playerid), "Dinheiro", GetPlayerMoney(playerid)); DOF2_SetInt(Arquivo(playerid), "Score", GetPlayerScore(playerid)); GetPlayerHealth(playerid, Vida); DOF2_SetFloat(Arquivo(playerid), "Vida", Vida); GetPlayerArmour(playerid, Colete); DOF2_SetFloat(Arquivo(playerid), "Colete", Colete); for(new i = 0; i < 13; i++) { GetPlayerWeaponData(playerid, i, Arma, Municao); format(String, 20, "Arma %d", i); DOF2_SetInt(Arquivo(playerid), String, Arma); format(String, 20, "Municao %d", i); DOF2_SetInt(Arquivo(playerid), String, Municao); } DOF2_SaveFile(); return 1; } return 0; }
stock cDados(playerid) // Carregar os dados do player { new Float:Vida, Float:Colete, Arma, Municao, String[20]; GivePlayerMoney(playerid, DOF2_GetInt(Arquivo(playerid), "Dinheiro")); SetPlayerScore(playerid, DOF2_GetInt(Arquivo(playerid), "Score")); Vida = DOF2_SetFloat(Arquivo(playerid), "Vida", Vida); SetPlayerHealth(playerid, Vida); Colete = DOF2_SetFloat(Arquivo(playerid), "Colete", Colete); SetPlayerArmour(playerid, Colete); ResetPlayerWeapons(playerid); for(new i = 0; i < 13; i++) { format(String, 20, "Arma %d", i); Arma = DOF2_SetInt(Arquivo(playerid), String, Arma); format(String, 20, "Municao %d", i); Municao = DOF2_SetInt(Arquivo(playerid), String, Municao); GivePlayerWeapon(playerid, Arma, Municao); } }
Algumas coisas eu mesmo fiz, outras coisas eu aprendi no YT.
Acredito que o sistema de salvamento esta funcionando, pois o arquivo em sriptfiles é atualizado.
O problema é que quando eu entro no servidor, as informações de vida, colete, arma e munição não são setadas.
Anteriormente eu tentei fazaer o codigo da seguinte maneira:
Código PHP: DOF2_SetFloat(Arquivo(playerid), "Vida", GetPlayerHealth(playerid)); para salvar SetPlayerHealth(playerid, DOF2_GetFloat(Arquivo(playerid), "Vida")); para setar
Mas estava com muitos erros, na verdade nem sei se estava certo.
Estou usando o mesmo estilo de linha de código para salvar e setar o dinheiro do jogador.
Código PHP: DOF2_SetInt(Arquivo(playerid), "Dinheiro", GetPlayerMoney(playerid)); DOF2_SetInt(Arquivo(playerid), "Score", GetPlayerScore(playerid));
GivePlayerMoney(playerid, DOF2_GetInt(Arquivo(playerid), "Dinheiro")); SetPlayerScore(playerid, DOF2_GetInt(Arquivo(playerid), "Score"));
Uma outra questão. O que vocês acham sobre o salvamento de dados utilizando aquela enum la no topo da gamemode?
Eu não estou utilizando ela, na verdade tem apenas uma variavel que é o pLogado, para um sistema de registro mais elaborado no futuro.
Obrigado a todos que leram.
RE: Salvamento de vida, colete, arma e munição utilizando DOF2 - leonardos08bt - 22/10/2023
No carregar dados, você está salvando a conta; não carregando.
em vez de DOF2_SetInt, DOF2_GetInt.
em vez de DOF2_SetFloat, DOF2_GetFloat
RE: Salvamento de vida, colete, arma e munição utilizando DOF2 - Alfarr Heimrik - 22/10/2023
(22/10/2023 10:48)leonardos08bt Escreveu: No carregar dados, você está salvando a conta; não carregando.
em vez de DOF2_SetInt, DOF2_GetInt.
em vez de DOF2_SetFloat, DOF2_GetFloat
Obrigado por responder! Eu fiz as alterações e o colete foi carregado, no entanto, a vida e as armas não foram.
Poderia explanar meus erros?
Código PHP: stock cDados(playerid) // Carregar os dados do player { new Float:Vida, Float:Colete, Arma, Municao, String[20]; GivePlayerMoney(playerid, DOF2_GetInt(Arquivo(playerid), "Dinheiro")); SetPlayerScore(playerid, DOF2_GetInt(Arquivo(playerid), "Score")); Vida = DOF2_GetFloat(Arquivo(playerid), "Vida"); SetPlayerHealth(playerid, Vida); Colete = DOF2_GetFloat(Arquivo(playerid), "Colete"); SetPlayerArmour(playerid, Colete); ResetPlayerWeapons(playerid); for(new i = 0; i < 13; i++) { format(String, 20, "Arma %d", i); Arma = DOF2_GetInt(Arquivo(playerid), String); format(String, 20, "Municao %d", i); Municao = DOF2_GetInt(Arquivo(playerid), String); GivePlayerWeapon(playerid, Arma, Municao); } }
RE: Salvamento de vida, colete, arma e munição utilizando DOF2 - leonardos08bt - 22/10/2023
Atualize a include DOF2 para essa versão: https://pastebin.com/p2KAgAin
RE: Salvamento de vida, colete, arma e munição utilizando DOF2 - zBreno - 22/10/2023
https://github.com/Los/LHouse/releases
RE: Salvamento de vida, colete, arma e munição utilizando DOF2 - Alfarr Heimrik - 23/10/2023
(22/10/2023 19:47)leonardos08bt Escreveu: Atualize a include DOF2 para essa versão: https://pastebin.com/p2KAgAin
(22/10/2023 20:46)zBreno Escreveu: https://github.com/Los/LHouse/releases
Não funcionou.
Vou deixar todo meu código de salvamento abaixo.
OnDialogResponse
Código PHP: public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == Dialog_Registro) { if(response) { if(strlen(inputtext) < 4 || strlen(inputtext) > 16) return SendClientMessage(playerid, -1, "{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Sua senha deve conter entre 4 a 16 caracteres."), ShowPlayerDialog(playerid, Dialog_Registro, DIALOG_STYLE_INPUT, "Kuatros Roleplay", "{FFFFFF}Crie uma senha com uma quantidade de caracteres que esteja entre 4 - 16.\nStatus de conta: {FF0000}Não registrada!", "Confirmar", "Sair"); DOF2_CreateFile(Arquivo(playerid)); DOF2_SetString(Arquivo(playerid), "Senha", inputtext); DOF2_SaveFile(); SetSpawnInfo(playerid, 0, 26, 1730.0288, -2241.1431, 13.5396, 182.5398, 0, 0, 0, 0, 0, 0); SpawnPlayer(playerid); TogglePlayerControllable(playerid, 1); SetCameraBehindPlayer(playerid); Player[playerid][pLogado] = 1; SendClientMessage(playerid, -1, "{CFCFCF}||{00FF00}KUATROS{CFCFCF}|| Parabéns por estar registrado no servidor! Estamos te dando alguns privilégios por ser um novato."); GivePlayerMoney(playerid, 2500); } else { Kick(playerid); } return 1; } if(dialogid == Dialog_Login) { if(response) { if(strcmp(inputtext, DOF2_GetString(Arquivo(playerid), "Senha")) == 0) { SetSpawnInfo(playerid, 0, 26, 1730.0288, -2241.1431, 13.5396, 182.5398, 0, 0, 0, 0, 0, 0); SpawnPlayer(playerid); TogglePlayerControllable(playerid, 1); SetCameraBehindPlayer(playerid); Player[playerid][pLogado] = 1; SendClientMessage(playerid, -1, "{CFCFCF}||{00FF00}KUATROS{CFCFCF}|| Bem vindo novamente! Obrigado por estar conosco."); } else { SendClientMessage(playerid, -1, "{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Sua senha está incorreta."); ShowPlayerDialog(playerid, Dialog_Login, DIALOG_STYLE_PASSWORD, "Kuatros Roleplay", "{FFFFFF}Digite sua senha criada anteriormente, para conectar-se ao servidor.\nStatus de conta: {00FF00}Registrada!", "Confirmar", "Sair"); } } else { Kick(playerid); } } return 1; }
Stock's
Código PHP: stock pName(playerid) // Pegar o nickname do player { new Nome[MAX_PLAYER_NAME]; GetPlayerName(playerid, Nome, MAX_PLAYER_NAME); return Nome; }
stock Arquivo(playerid) // Diretório de contas { new String[100]; format(String, 100, "Contas/%s.ini", pName(playerid)); return String; }
stock sDados(playerid) // Salvar os dados do player { if(DOF2_FileExists(Arquivo(playerid))) { new Float:Vida, Float:Colete, Arma, Municao, String[20]; DOF2_SetInt(Arquivo(playerid), "Dinheiro", GetPlayerMoney(playerid)); DOF2_SetInt(Arquivo(playerid), "Score", GetPlayerScore(playerid)); GetPlayerHealth(playerid, Vida); DOF2_SetFloat(Arquivo(playerid), "Vida", Vida); GetPlayerArmour(playerid, Colete); DOF2_SetFloat(Arquivo(playerid), "Colete", Colete); for(new i = 0; i < 13; i++) { GetPlayerWeaponData(playerid, i, Arma, Municao); format(String, 20, "Arma%d", i); DOF2_SetInt(Arquivo(playerid), String, Arma); format(String, 20, "Municao%d", i); DOF2_SetInt(Arquivo(playerid), String, Municao); } DOF2_SaveFile(); return 1; } return 0; }
stock cDados(playerid) // Carregar os dados do player { new Float:Vida, Float:Colete, Arma, Municao, String[20]; GivePlayerMoney(playerid, DOF2_GetInt(Arquivo(playerid), "Dinheiro")); SetPlayerScore(playerid, DOF2_GetInt(Arquivo(playerid), "Score")); Vida = DOF2_GetFloat(Arquivo(playerid), "Vida"); SetPlayerHealth(playerid, Vida); Colete = DOF2_GetFloat(Arquivo(playerid), "Colete"); SetPlayerArmour(playerid, Colete); ResetPlayerWeapons(playerid); for(new i = 0; i < 13; i++) { format(String, 20, "Arma%d", i); Arma = DOF2_GetInt(Arquivo(playerid), String); format(String, 20, "Municao%d", i); Municao = DOF2_GetInt(Arquivo(playerid), String); GivePlayerWeapon(playerid, Arma, Municao); } }
stock GivePlayerWeaponKU(playerid, Gun, Ammo) { new gunname[32]; GivePlayerWeapon(playerid, Gun, Ammo); GetWeaponName(Gun, gunname, sizeof(gunname)); SetPVarInt(playerid, gunname, GetPVarInt(playerid, gunname) +Ammo); }
Notei que a vida não esta salvando, mas está igual ao colete... Eu não entendo.
RE: Salvamento de vida, colete, arma e munição utilizando DOF2 - leonardos08bt - 23/10/2023
Você está carregando o dados do jogador quando o jogador acerta a senha?
É necessário
RE: Salvamento de vida, colete, arma e munição utilizando DOF2 - pushline - 23/10/2023
N sei se tem algo a ver com tag mismatch do getfloat, mas testa isso ai
Código PHP: stock pName(playerid) // Pegar o nickname do player { new Nome[MAX_PLAYER_NAME]; GetPlayerName(playerid, Nome, MAX_PLAYER_NAME); return Nome; }
stock Arquivo(playerid) // Diretório de contas { new String[100]; format(String, 100, "Contas/%s.ini", pName(playerid)); return String; }
stock sDados(playerid) // Salvar os dados do player { if(DOF2_FileExists(Arquivo(playerid))) { new Float:Vida, Float:Colete, Arma, Municao, String[20]; DOF2_SetInt(Arquivo(playerid), "Dinheiro", GetPlayerMoney(playerid)); DOF2_SetInt(Arquivo(playerid), "Score", GetPlayerScore(playerid)); GetPlayerHealth(playerid, Vida); GetPlayerArmour(playerid, Colete); DOF2_SetFloat(Arquivo(playerid), "Vida", Vida); DOF2_SetFloat(Arquivo(playerid), "Colete", Colete);
for(new i = 0; i < 13; i++) { GetPlayerWeaponData(playerid, i, Arma, Municao); format(String, 20, "Arma%d", i); DOF2_SetInt(Arquivo(playerid), String, Arma); format(String, 20, "Municao%d", i); DOF2_SetInt(Arquivo(playerid), String, Municao); }
DOF2_SaveFile(); return 1; } return 0; }
stock cDados(playerid) // Carregar os dados do player { new Float:Vida, Float:Colete, Arma, Municao, String[20];
GivePlayerMoney(playerid, DOF2_GetInt(Arquivo(playerid), "Dinheiro")); SetPlayerScore(playerid, DOF2_GetInt(Arquivo(playerid), "Score"));
Vida = Float:DOF2_GetFloat(Arquivo(playerid), "Vida"); Colete = Float:DOF2_GetFloat(Arquivo(playerid), "Colete"); SetPlayerHealth(playerid, Vida); SetPlayerArmour(playerid, Colete);
ResetPlayerWeapons(playerid);
for(new i = 0; i < 13; i++) { format(String, 20, "Arma%d", i); Arma = DOF2_GetInt(Arquivo(playerid), String); format(String, 20, "Municao%d", i); Municao = DOF2_GetInt(Arquivo(playerid), String); GivePlayerWeapon(playerid, Arma, Municao); } }
stock GivePlayerWeaponKU(playerid, Gun, Ammo) { new gunname[32]; GivePlayerWeapon(playerid, Gun, Ammo); GetWeaponName(Gun, gunname, sizeof(gunname)); SetPVarInt(playerid, gunname, GetPVarInt(playerid, gunname) +Ammo); }
RE: Salvamento de vida, colete, arma e munição utilizando DOF2 - Alfarr Heimrik - 23/10/2023
(23/10/2023 09:09)leonardos08bt Escreveu: Você está carregando o dados do jogador quando o jogador acerta a senha?
É necessário Leonardo. Eu passei a fazer isso deu tudo certo, tanto as armas quanto colete e vida estão sendo carregados, mas por que tem que fazer isso? Por que os dados precisam ser carregados la na dialog de login e não no onplayerconect?
(23/10/2023 09:22)pushline Escreveu: N sei se tem algo a ver com tag mismatch do getfloat, mas testa isso ai
Código PHP: stock pName(playerid) // Pegar o nickname do player {.......................................................... ................................
Amigo, não deu certo. Era a situação acima mesmo. Eu estava carregando os dados no local errado ....
Obrigado por me ajudar gente, vocês são fenomenais! Espero um dia chegar ao nível de conhecimento de vocês.
RE: Salvamento de vida, colete, arma e munição utilizando DOF2 - leonardos08bt - 23/10/2023
(23/10/2023 12:28)Alfarr Heimrik Escreveu: (23/10/2023 09:09)leonardos08bt Escreveu: Você está carregando o dados do jogador quando o jogador acerta a senha?
É necessário Leonardo. Eu passei a fazer isso deu tudo certo, tanto as armas quanto colete e vida estão sendo carregados, mas por que tem que fazer isso? Por que os dados precisam ser carregados la na dialog de login e não no onplayerconect?
(23/10/2023 09:22)pushline Escreveu: N sei se tem algo a ver com tag mismatch do getfloat, mas testa isso ai
Código PHP: stock pName(playerid) // Pegar o nickname do player {.......................................................... ................................
Amigo, não deu certo. Era a situação acima mesmo. Eu estava carregando os dados no local errado ....
Obrigado por me ajudar gente, vocês são fenomenais! Espero um dia chegar ao nível de conhecimento de vocês.
Em questão "Por que os dados precisam ser carregados la na dialog de login e não no onplayerconect?":
Você pode carregar na onplayerconnect ou na diálog de login após acertar a senha, do jeito que você quiser. Mas uma das melhores ou a melhor opção para fazer isso é após o Player logar. Não vejo problemas em carregar na onplayerconnect, eu já fiz isso mas particularmente prefiro na diálog de login. (Eu utilizo salvamento e carregamento em MySQL, não sei se tem interferência mas acho que não)
|