salut, ti-am modificat codul si ti-am aratat inca o varianta de cum ai fi putut sa faci, mai simpla de codat, dar e bine si ce ai facut tu
Code: Select all
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
}
// Say Command Handler.
public SaveRecord()
{
new sData[256]; // sData -> presupun ca ai mai vazut undeva, prefixul dinaintea denumirii variabilei reprezinta tipul de variabila,
/*
Exemplu:
new szData[256] => sz de la string
new iData => i de la int (numar)
new bool:bData => boolean (true/false)
new Float:fData => float (numar 2.03 sau orice e cu punct)
new g_szData[256] => g_ prefix pentru global
*/
// https://www.amxmodx.org/api/file/fopen
new file = fopen(topFile, "w");
if (file)
{
// ca sa adaugi o linie noua, pui \n, am vazut ca aveai ^%02d, nu stiu ce ai incercat sa faci cu acel ^
formatex(sData, sizeof(sData), "^%s %02d:%02d.%01d\n", sBest, iBest / 600, (iBest / 10) % 60, iBest % 10);
// foloseste fputs ca sa adaugi date sau fgets ca sa iei date din fisier
fputs(file, szData)
if (sBest2[0])
{
//foloseste formatex, e mult mai rapid si nu ai nevoie in situatia asta
//format doar daca folosesti variabila pe care vrei sa o formatezi ca si parametru
//ex: format(szData, charsmax(szData), "%s", szData)
formatex(sData, sizeof(sData), "^%s %02d:%02d.%01d\n", sBest, iBest / 600, (iBest / 10) % 60, iBest % 10);
fputs(file, szData)
}
if (sBest3[0])
{
formatex(sData, sizeof(sData), "^%s %02d:%02d.%01d\n", sBest, iBest / 600, (iBest / 10) % 60, iBest % 10);
fputs(file, szData)
}
fclose(file);
}
return PLUGIN_CONTINUE;
}
public LoadRecord()
{
new file = fopen(topFile, "r");
if (file)
{
new sData[256];
// fgets(file, sData, sizeof(sData));
// fclose(file);
// new RecordName[64], RecordS[4], RecordName2[64], RecordS2[4], RecordName3[64], RecordS3[4];
// parse(sData, RecordName, 63, RecordS, 2, RecordName2, 63, RecordS2, 2, RecordName3, 63, RecordS3, 2, l2);
// sBest = RecordName;
// iBest = str_to_num(RecordS);
// sBest2 = RecordName2;
// iBest2 = str_to_num(RecordS2);
// sBest3 = RecordName3;
// iBest3 = str_to_num(RecordS3);
new i = 0
while(fgets(file, sData, charsmax(sData))) // => while fgets returneaza o valoare mai mare decat 0, ruleaza bucla asta, in momentul in care fisierul ajunge la sfarsit va returna 0, in schimb numarul de caractere scrise pe linia respectiva
{
new RecordName[64], RecordS[4], RecordName2[64], RecordS2[4], RecordName3[64], RecordS3[4];
parse(sData, RecordName, 63, RecordS, 2, RecordName2, 63, RecordS2, 2, RecordName3, 63, RecordS3, 2, l2);
if(i == 0) //prima valoare citita din fisier
{
sBest = RecordName;
iBest = str_to_num(RecordS);
}
if(i == 1)
{
sBest2 = RecordName2;
iBest2 = str_to_num(RecordS2);
}
if(i == 2)
{
sBest3 = RecordName3;
iBest3 = str_to_num(RecordS3);
}
i++
}
}
return PLUGIN_CONTINUE;
}
//cum ai fi putut sa faci citirea->
enum _:DATA_BEST
{
szName[MAX_NAME_LENGTH],
iTime
}
new g_eBest[3][DATA_BEST] // g_e => variabila globala careia ii se atribuie o structura de tip enum
loaddata()
{
new file = fopen(topFile, "r");
if(file)
{
new szData[256]
new i
while(fgets(file, szData, charsmax(szData)))
{
parse(szData) // etc... aici folosesti tu parse pe stringul returnat din fisier
g_eBest[i][szName] = variabila_name_din_parse
g_eBest[i][iTime] = variabila_time_din_parse
// si astfel g_eBest[0] il vei avea pe primul, [1] al doilea loc si [2] al treilea loc
i++
}
}
}
daca vrei sa continui cu pluginurile, sper ca folosesti visual studio code nu amxx studio