Erro ao inserir dados DOF2 em uma variável - Ryzen_ - 16/03/2024
Boa tarde pessoal! Estou com um erro onde ao tentar pegar os dados de alguns arquivos (CLANS) utilizando DOF2_Get, e tentar salvar os mesmos dentro de uma variável, simplesmente não funciona. Irei deixar o código e explicar melhor abaixo do mesmo.
clans.inc
Código PHP: enum Clans { cNome[30], cMembros, bool:cLider }
new ClanInfo[MAX_CLANS][Clans];
stock CreateClan(playerid, const nomeclan[]) { new id = GenerateClanID();
if (id > MAX_CLANS) return SendClientMessage(playerid, Vermelho, "O número máximo de clans foi atingido!");
format(File, sizeof(File), PASTA_CLANS, id); DOF2_CreateFile(File); DOF2_SetString(File, "Organizacao", nomeclan); DOF2_SetInt(File, "Membros", 0); DOF2_SetBool(File, "Lider", false);
DOF2_SaveFile(); return 1; }
stock GenerateClanID() { for (new i = 0; i < MAX_CLANS; i++) { format(File, sizeof(File), PASTA_CLANS, i); if (!DOF2_FileExists(File)) return i; }
return 0; }
stock LoadClans() { for (new i = 0; i < MAX_CLANS; i++) { format(File, sizeof(File), PASTA_CONTAS, i); if (!DOF2_FileExists(File)) continue;
format(STRX, sizeof(STRX), "%s", DOF2_GetString(File, "Organizacao")); strcat(ClanInfo[i][cNome], STRX, sizeof(STRX)); // ClanInfo[i][cNome] = DOF2_GetString(File, "Organizacao"); ClanInfo[i][cMembros] = DOF2_GetInt(File, "Membros"); ClanInfo[i][cLider] = DOF2_GetBool(File, "Lider"); }
return 1; }
/darlider
Código PHP: CMD:darlider(playerid, params[]) { new targetid, idclan, bool:lider;
if (GetPlayerAdminLevel(playerid) < 5) return 1; if (sscanf(params, "ui", targetid, idclan)) return SendClientMessage(playerid, Vermelho, "Use: /darlider [id] [organização]");
// for (new i = 0; i < MAX_CLANS; i++) { // format(File, sizeof(File), PASTA_CLANS, i); // if (DOF2_FileExists(File) && idclan == i) break; // }
lider = ClanInfo[idclan][cLider]; // lider = DOF2_GetBool(File, "Lider"); if (!IsPlayerConnected(targetid)) return SendClientMessage(playerid, Vermelho, "Jogador não conectado!"); if (PlayerInfo[targetid][pCargo] == 5) return SendClientMessage(playerid, Vermelho, "Esse player já é líder de uma organização!"); if (lider == true) return SendClientMessage(playerid, Vermelho, "Essa organização já possui um líder!");
PlayerInfo[targetid][pOrganizacao] = idclan; PlayerInfo[targetid][pCargo] = 5; ClanInfo[idclan][cLider] = true; // DOF2_SetBool(File, "Lider", true);
SendClientMessage(playerid, azul_claro, "Você colocou %s como líder da organização {FF0000}%s{40AEFF}!", GetPlayerNameEx(targetid), ClanInfo[idclan][cNome]); SendClientMessage(targetid, azul_claro, "Parabéns! Você foi nomeado como líder da organização {FF0000}%s{40AEFF}!", ClanInfo[idclan][cNome]);
DOF2_SaveFile();
return 1; }
Meu objetivo era colocar o LoadClans() no OnGameModeInit, para que ele fosse carregado sempre que o server fosse reiniciado, e os valores ficarem sempre salvos nas variáveis (Pra não precisar ficar mudando diretamente), mas simplesmente não funciona. Já tentei alterar o format, utilizar uma nova variável, mudar o tamanho, utilizar strcat, setar diretamente, nenhuma deu certo. Apenas funciona caso eu deixe o loop "for" ativo, e insira os valores diretamente utilizando o "DOF2_Set" para alterar para "true" por exemplo. O que poderia estar ocasionando isso? Ah, e caso tenha algum erro no meu código que não tenha a ver com o problema em si, podem me corrigir também.
RE: Erro ao inserir dados DOF2 em uma variável - Maycon_Felipe - 17/03/2024
Troque PASTA_CONTAS para PASTA_CLANS
Código: stock LoadClans() {
for (new i = 0; i < MAX_CLANS; i++) {
format(File, sizeof(File), PASTA_CONTAS, i); // ERRO Troque PASTA_CONTAS para PASTA_CLANS
if (!DOF2_FileExists(File)) continue;
format(STRX, sizeof(STRX), "%s", DOF2_GetString(File, "Organizacao"));
strcat(ClanInfo[i][cNome], STRX, sizeof(STRX));
// ClanInfo[i][cNome] = DOF2_GetString(File, "Organizacao");
ClanInfo[i][cMembros] = DOF2_GetInt(File, "Membros");
ClanInfo[i][cLider] = DOF2_GetBool(File, "Lider");
}
return 1;
}
Outro erro que vi é aqui, se você não macrou a função nativa SendClientMessage,você não vai conseguir exibir o nome e outras informações sem formatar o texto antes..
Código: new string[128];
format(string, sizeof(string), "Você colocou %s como líder da organização {FF0000}%s{40AEFF}!", GetPlayerNameEx(targetid), ClanInfo[idclan][cNome]);
SendClientMessage(playerid, azul_claro, string);
format(string, sizeof(string), "Parabéns! Você foi nomeado como líder da organização {FF0000}%s{40AEFF}!", ClanInfo[idclan][cNome]);
SendClientMessage(targetid, azul_claro, string);
RE: Erro ao inserir dados DOF2 em uma variável - White_Blue - 17/03/2024
(17/03/2024 02:56)Maycon_Felipe Escreveu: Troque PASTA_CONTAS para PASTA_CLANS
Código: stock LoadClans() {
for (new i = 0; i < MAX_CLANS; i++) {
format(File, sizeof(File), PASTA_CONTAS, i); // ERRO Troque PASTA_CONTAS para PASTA_CLANS
if (!DOF2_FileExists(File)) continue;
format(STRX, sizeof(STRX), "%s", DOF2_GetString(File, "Organizacao"));
strcat(ClanInfo[i][cNome], STRX, sizeof(STRX));
// ClanInfo[i][cNome] = DOF2_GetString(File, "Organizacao");
ClanInfo[i][cMembros] = DOF2_GetInt(File, "Membros");
ClanInfo[i][cLider] = DOF2_GetBool(File, "Lider");
}
return 1;
}
Outro erro que vi é aqui, se você não macrou a função nativa SendClientMessage,você não vai conseguir exibir o nome e outras informações sem formatar o texto antes..
Código: new string[128];
format(string, sizeof(string), "Você colocou %s como líder da organização {FF0000}%s{40AEFF}!", GetPlayerNameEx(targetid), ClanInfo[idclan][cNome]);
SendClientMessage(playerid, azul_claro, string);
format(string, sizeof(string), "Parabéns! Você foi nomeado como líder da organização {FF0000}%s{40AEFF}!", ClanInfo[idclan][cNome]);
SendClientMessage(targetid, azul_claro, string);
Ele provavelmente está usando open.mp ou Y_va. O open.mp permite o uso de especificadores de formatação nativamente, sem a necessidade de formatação adicional. Por outro lado, o Y_va redireciona automaticamente a função SendClientMessage para uma versão modificada que permite o uso de especificadores de formatação.
RE: Erro ao inserir dados DOF2 em uma variável - Maycon_Felipe - 18/03/2024
(17/03/2024 08:52)White_Blue Escreveu: Ele provavelmente está usando open.mp ou Y_va. O open.mp permite o uso de especificadores de formatação nativamente, sem a necessidade de formatação adicional. Por outro lado, o Y_va redireciona automaticamente a função SendClientMessage para uma versão modificada que permite o uso de especificadores de formatação.
Interessante, realmente tava por fora dessa. Eu tava achando que ele tinha macrado a função e caso não tivesse iria dar problemas kk
RE: Erro ao inserir dados DOF2 em uma variável - Ryzen_ - 19/03/2024
(17/03/2024 02:56)Maycon_Felipe Escreveu: Troque PASTA_CONTAS para PASTA_CLANS
Código: stock LoadClans() {
for (new i = 0; i < MAX_CLANS; i++) {
format(File, sizeof(File), PASTA_CONTAS, i); // ERRO Troque PASTA_CONTAS para PASTA_CLANS
if (!DOF2_FileExists(File)) continue;
format(STRX, sizeof(STRX), "%s", DOF2_GetString(File, "Organizacao"));
strcat(ClanInfo[i][cNome], STRX, sizeof(STRX));
// ClanInfo[i][cNome] = DOF2_GetString(File, "Organizacao");
ClanInfo[i][cMembros] = DOF2_GetInt(File, "Membros");
ClanInfo[i][cLider] = DOF2_GetBool(File, "Lider");
}
return 1;
}
Outro erro que vi é aqui, se você não macrou a função nativa SendClientMessage,você não vai conseguir exibir o nome e outras informações sem formatar o texto antes..
Código: new string[128];
format(string, sizeof(string), "Você colocou %s como líder da organização {FF0000}%s{40AEFF}!", GetPlayerNameEx(targetid), ClanInfo[idclan][cNome]);
SendClientMessage(playerid, azul_claro, string);
format(string, sizeof(string), "Parabéns! Você foi nomeado como líder da organização {FF0000}%s{40AEFF}!", ClanInfo[idclan][cNome]);
SendClientMessage(targetid, azul_claro, string);
Muito obrigado pela ajuda White e Maycon, consegui resolver. O erro realmente estava apenas em ter colocado PASTA_CONTAS ao invés de PASTA_CLANS, um erro bobo devido a falta de atenção no momento. Agradeço pela ajuda de vocês. Ah, e estou usando o open.mp mesmo.
|