Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Проблема с KeyValues
IceMeN Дата: Суббота, 23.06.2012, 12:32:39 | Сообщение # 1
Сообщений: 47
Репутация: 5 [ +/- ]
Возникла проблема в работе с KeyValues.

Code

#include <sourcemod>

new Handle:Reg;
new Handle:Reg2;
new String:File2[PLATFORM_MAX_PATH];

public OnPluginStart()
{
  Reg = CreateKeyValues("Player", "", "");
  if(!FileToKeyValues(Reg, "cfg/vip/vip_player.cfg") || !KvGotoFirstSubKey(Reg))
  {
   SetFailState("File for registration client not found!");
   CloseHandle(Reg);
   return;
  }
  BuildPath(Path_SM, File2, sizeof(File2), "configs/admins.cfg");
  Reg2 = CreateKeyValues("Admins");
  if(!FileToKeyValues(Reg2, File2))
  {
   SetFailState("File2 for registration client not found!");
   CloseHandle(Reg2);
   return;
  }
   
}
public OnMapStart()
{
  KvRewind(Reg);
  KvGotoFirstSubKey(Reg);
  do
  {   
   if(KvGetNum(Reg, "slot", 0) == 1 || KvGetNum(Reg, "immunitet", 0) == 1)
   {
    decl String:Steam[32];
    KvGetSectionName(Reg, Steam, 32);
    KvRewind(Reg2);
    if(KvJumpToKey(Reg2, Steam, true))
    {
     KvSetString(Reg2, "name", "VIP_PLAYER");
     KvSetString(Reg2, "auth", "steam");
     KvSetString(Reg2, "identity", Steam);
     KvSetString(Reg2, "flags", "a");
     KvSetString(Reg2, "immunity", "3");
    }
   }
  }
  while(KvGotoNextKey(Reg));
  KeyValuesToFile(Reg2, File2);
  ServerCommand("sm_reloadadmins");
}

Проблема в том, что в файле admins.cfg
Создается в таком виде:
Code

"STEAM_0:0:52442725"
{
  "auth"  "steam"
  "identity"  "STEAM_0:0:52442725"
  "flags"  "a"
  "immunity"  "3"
}

P.S А должно быть:
Code

"Admins"
{
  "STEAM_0:0:145595577"
  {
   "auth"  "steam"
   "identity"  "STEAM_0:0:145595577"
   "flags"  "4"
   "immunity"  "3"
  }
  "STEAM_0:0:52442754"
  {
   "auth"  "steam"
   "identity"  "STEAM_0:0:52442754"
   "flags"  "a"
   "immunity"  "3"
  }
}

Сообственно вопросы: Почему удаляется название группы("Admins")?
И в файл записывается только последний пользователь из KeyValues(Reg)?

Постарался описать как можно лучше... Если что то непонятно - спрашивайте.
Возможно, что ошибка элементарна, но я ее так и не увидел.

P.S Код полностью написан мной. Так что не надо говорить, что проблема в том что его копировал или что то подобное!
 
_wS_ Дата: Суббота, 23.06.2012, 13:32:17 | Сообщение # 2
Код скопирован.. Ты украл, украл! Шучу xaxa
Сохраняется криво, т.к. ты не сделал KvRewind(Reg2), после создания ключа в Reg2.

Code
public OnMapStart()
{
     if (!KvGotoFirstSubKey(Reg)) return;
     new bool:need_save_group; decl String:Steam[25];
     do
     {
         if (KvGetNum(Reg, "slot") == 1 || KvGetNum(Reg, "immunitet") == 1)
         {
             if (KvGetSectionName(Reg, Steam, 25) && KvJumpToKey(Reg2, Steam, true))
             {
                 KvSetString(Reg2, "name", "VIP_PLAYER");
                 KvSetString(Reg2, "auth", "steam");
                 KvSetString(Reg2, "identity", Steam);
                 KvSetString(Reg2, "flags", "a");
                 KvSetString(Reg2, "immunity", "3");
                 KvRewind(Reg2);
                 need_save_group = true;
             }
         }
     }
     while (KvGotoNextKey(Reg));
     KvRewind(Reg);
     if (need_save_group)
     {
         KeyValuesToFile(Reg2, File2);
         ServerCommand("sm_reloadadmins");
     }
}
 
IceMeN Дата: Суббота, 23.06.2012, 17:12:57 | Сообщение # 3
Сообщений: 47
Репутация: 5 [ +/- ]
Спасибо...
Только вроде после while (KvGotoNextKey(Reg));
Нужно KvRewind(Reg2); а не KvRewind(Reg); ?
 
_wS_ Дата: Суббота, 23.06.2012, 17:17:38 | Сообщение # 4
Нет.. Мы же делали KvGotoFirstSubKey(Reg) и позиция сместилась - мы ее после цикла вернули назад. А KvRewind(Reg2) уже мы делали внутри цикла, после KvJumpToKey - эта команда тоже смещает позицию.
 
IceMeN Дата: Суббота, 23.06.2012, 17:24:34 | Сообщение # 5
Сообщений: 47
Репутация: 5 [ +/- ]
Ой... Не туда посмотрел.
Все вопросов нет.
 
  • Страница 1 из 1
  • 1
Поиск: