Some files use KeyValues with void values (about server files, as example gamemodes.txt), but KeyValuesToFile don't save keys with void values.
As example:
PHP Code:
// This that you read from file
"kv"
{
"name" "John Connor"
"weapons"
{
"minigun" ""
"deagle" ""
}
}
And then save this with KeyValuesToFile you got
"kv"
{
"name" "John Connor"
"weapons"
{
}
}
or save with KeyValuesToFile2 you got
"kv"
{
"name" "John Connor"
"weapons"
{
"minigun" ""
"deagle" ""
}
}
PHP Code:
stock bool KeyValuesToFile2(KeyValues kv, const char[] file)
{
File fh = OpenFile(file, "wb");
if (fh == null)
return false;
IterateKeys(kv, fh, 0);
delete fh;
return true;
}
stock void IterateKeys(KeyValues kv, File fh, int tab)
{
char buffer[512], buffer2[512];
kv.GetSectionName(buffer, sizeof(buffer));
WriteLine(fh, tab, "\"%s\"", buffer);
WriteLine(fh, tab, "{");
if (kv.GotoFirstSubKey(false)) {
do {
if (kv.GetDataType(NULL_STRING) == KvData_None)
IterateKeys(kv, fh, tab + 1);
else {
kv.GetSectionName(buffer, sizeof(buffer));
kv.GetString(NULL_STRING, buffer2, sizeof(buffer2));
WriteLine(fh, tab + 1, "\"%s\" \"%s\"", buffer, buffer2);
}
} while (kv.GotoNextKey(false));
kv.GoBack();
}
WriteLine(fh, tab, "}");
}
stock void WriteLine(File fh, int tab, const char[] string, any ...)
{
char buffer[512];
VFormat(buffer, sizeof(buffer), string, 4);
Format(buffer, sizeof(buffer), "%s\n", buffer);
for (int i = 0; i < tab; i++)
Format(buffer, sizeof(buffer), " %s", buffer);
fh.WriteString(buffer, false);
}