Приколы KeyValues

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,491
Просто интересно, просто обсуждение. Наблюдал ли кто-то такое? Знаете ли что-то о причинах? Как решали (я для себя решил, но вдруг кто-то уж совсем извратился при этом)?
Код тестового плуга:
public void OnMapStart()
{
    KeyValues kvSettings = new KeyValues("ebat_pizda");
   
    char szSettings[PLATFORM_MAX_PATH], szLog[PLATFORM_MAX_PATH];
    BuildPath(Path_SM, szLog, sizeof szLog, "logs/ebat_pizda.log");
    BuildPath(Path_SM, szSettings, sizeof szSettings, "configs/ebat_pizda.ini");
   
    kvSettings.ImportFromFile(szSettings);
    if(kvSettings.GotoFirstSubKey(false))
    {
        char szFlag[3];
       
        do
        {
            kvSettings.GetSectionName(szFlag, sizeof szFlag);
            LogToFileEx(szLog, "Flag - %s", szFlag);
        }
        while(kvSettings.GotoNextKey(false));
    }
   
    kvSettings.Close();
}
INI:
"ebat_pizda"
{
    "a"        ""
    "b"        ""
    "c"        ""
    "d"        ""
    "e"        ""
    "f"        ""
    "g"        ""
    "h"        ""
    "i"        ""
    "j"        ""
    "k"        ""
    "l"        ""
    "m"        ""
    "n"        ""
    "o"        ""
    "p"        ""
    "q"        ""
    "r"        ""
    "s"        ""
    "t"        ""
    "z"        ""
}
Результат:
2022-01-25_08-30-09.png

Я слышал о том, что оно может менять регистр у слов типа "admins", но чтоб даже так.. это що, какие-то зарезервированные символы?
P.s.: ради прикола повторил тест, всегда изменяются конкретно эти буквы.
 
Последнее редактирование:

HolyHender

Прокуратура на связи
Сообщения
271
Реакции
394
Да, это проблема KeyValues, если как-то нужно учитывать регистр, то используй SMCParser.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #3

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,491
Кайло писал ранее о возможных причинах такого поведения: Проблема "Group", механика KeyValues
К сожалению, не уверен, що там обсуждение подходит конкретно под мой случай (перечитал).
У меня меняются первые символы (ибо единственные), да, но при этом не только те, что были в его примерах, + лишь конкретные.
Например, у него меняется g в group, а у меня KV его не трогает. В общем, максимально странно всё.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #5
@Paranoiiik, это оно же.
Суть проблематики как раз в том, что KV для стандартизации может (и, скорее всего, использует) общий кэш ключей, независимо от типа значения. Длина ключа уже не влияет, регистр может меняться сразу у нескольких букв.

у него меняется g в group, а у меня KV его не трогает.
Сделай такой же плагин, но чтобы он создавал структуру с ключом с буквами в другом регистре. Второе слово целиком в верхнем например. А потом прогони первый, не перезагружая сервер. Удивишься результату.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #6
Попробую попроще обозначить, в чём кроется собака.
Если есть два плагина, которые используют какую-то строку для ключа в KV структуре где угодно, но с разным регистром, один из них будет спотыкаться об регистр другого. Выглядит это как "конфликт плагинов", но на самом деле, это сам KV багует.

У Кайло Group багуется потому что сам SM где-то такую строку использует.
 

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,491
@Paranoiiik, это оно же.
Суть проблематики как раз в том, что KV для стандартизации может (и, скорее всего, использует) общий кэш ключей, независимо от типа значения. Длина ключа уже не влияет, регистр может меняться сразу у нескольких букв.


Сделай такой же плагин, но чтобы он создавал структуру с ключом с буквами в другом регистре. Второе слово целиком в верхнем например. А потом прогони первый, не перезагружая сервер. Удивишься результату.
Попробую попроще обозначить, в чём кроется собака.
Если есть два плагина, которые используют какую-то строку для ключа в KV структуре где угодно, но с разным регистром, один из них будет спотыкаться об регистр другого. Выглядит это как "конфликт плагинов", но на самом деле, это сам KV багует.

У Кайло Group багуется потому что сам SM где-то такую строку использует.
Лучше просто забью и буду дальше либо менять регистр вручную, либо сделаю "_a" вместо "a" и буду чекать не szFlag, а szFlag[1] =)
Спасибо за пояснения!
 

romeo7

Участник
Сообщения
189
Реакции
93
StringToLower:
stock void StringToLower(char[] input)
{
    int len = strlen(input);
    for (int i = 0; i <= len; ++i) input[i] = CharToLower(input[i]);
}
 
Сверху Снизу