Заказать Сервер Заказать Плагин Контакты Поиск

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

Страница 2 из 2«12
Форум » SourceMod - Counter Strike Source && CS GO » Уроки SourceMod (SourcePawn) Скриптинга » Keyvalues - База (группа) для хранения информации
Keyvalues - База (группа) для хранения информации
Naykon Дата: Пятница, 31.08.2012, 16:15:12 | Сообщение # 16
Сообщений: 439
Репутация: -5 [ +/- ]
Code
#include <sourcemod>
#include <cstrike>
#include <sdktools>
#include <sdktools_entoutput>
#include <sdktools_functions>  

new String:FreeID[25];
new String:FreeName[65];
new UserFree;

public OnPluginStart()
{
      RegConsoleCmd("test", test);
}

public Action:test(client, args)
{
      Clients(client);
      return Plugin_Handled;
}  

Clients(client)
{
  new Handle:Menu = CreateMenu(FreePlayerSelect);
  SetMenuTitle(Menu, "Кто?\n \n");
  decl String:UserName[MAX_NAME_LENGTH];
  decl String:SteamID[150];
  for (new i = 1; i <= MaxClients; i++)
  {
   if (IsClientInGame(i))
   {
    IntToString(GetClientUserId(i), SteamID, sizeof(SteamID));
    GetClientName(i, UserName, sizeof(UserName));
    AddMenuItem(Menu, SteamID, UserName);
     
   }
   SetMenuExitButton(Menu, true);
   DisplayMenu(Menu, client, 0);
  }
}

public FreePlayerSelect(Handle:menu, MenuAction:action, client, option)
{
        if (action == MenuAction_Select)
        {    
     GetMenuItem(menu, option, FreeID, sizeof(FreeID), _, FreeName, sizeof(FreeName));
     UserFree = GetClientOfUserId(StringToInt(FreeID));
      new Handle:h = CreateKeyValues("FreeClient");   
      KvJumpToKey(h, FreeID, true);
      KvSetString(h, "name", FreeName);   
      KvRewind(h);   
      KeyValuesToFile(h, "cfg/FreeClient.txt");       
     }
}


Получаю вот это:
Code

"FreeClient"
{
  "2"
  {
   "name"  "Naykkk"
  }
}


Почему вместо моего STEM_ID двойка в ключе?????(((
 
_wS_ Дата: Пятница, 31.08.2012, 17:05:04 | Сообщение # 17
mda

IntToString(GetClientUserId(i), SteamID, sizeof(SteamID));
AddMenuItem(Menu, SteamID, UserName); // ты же не стим записал, а userid
GetMenuItem(menu, option, FreeID, sizeof(FreeID), _, FreeName, sizeof(FreeName));
KvJumpToKey(h, FreeID, true);
 
Naykon Дата: Суббота, 01.09.2012, 11:17:09 | Сообщение # 18
Сообщений: 439
Репутация: -5 [ +/- ]
Code
public FreePlayerSelect(Handle:menu, MenuAction:action, client, option)
{
        if (action == MenuAction_Select)
        {    
      GetClientAuthString(client, SteaM[client], 20);
   Kick = StringToInt(KickID);
      new Handle:h = CreateKeyValues("FreeClient");   
     KvJumpToKey(h, SteaM[client], true);
      KvSetString(h, "id", SteaM[client]);   
      KvRewind(h);   
      KeyValuesToFile(h, "cfg/FreeClient.txt");       
     }
}

Разобрался)))

Добавлено (01.09.2012, 11:17:09)
---------------------------------------------
Настоящий STEAN_ID - STEAM_0:0:2131744361
а в файле txt пишет другой:

Code
"FreeClient"
{
  "STEAM_0:0:214227134"
  {
   "id"  "STEAM_0:0:214227134"
  }
}


Почему так?
Код:
Code
#include <sourcemod>
#include <cstrike>
#include <sdktools>
#include <sdktools_entoutput>
#include <sdktools_functions>  

new String:KickID[25];
new String:Name[25];
new Kick;
new String:SteaM[MAXPLAYERS+1][25];  

public OnPluginStart()
{
      RegConsoleCmd("test", test);
}

public Action:test(client, args)
{
      Clients(client);
      return Plugin_Handled;
}  

Clients(client)
{
  new Handle:Menu = CreateMenu(FreePlayerSelect);
  SetMenuTitle(Menu, "Кто?\n \n");
  decl String:UserName[MAX_NAME_LENGTH];
  //decl String:SteamID[150];
   
  for (new i = 1; i <= MaxClients; i++)
  {
   if (IsClientInGame(i))
   {
    GetClientName(i, UserName, sizeof(UserName));
    AddMenuItem(Menu, SteaM[i], UserName);
   }
   SetMenuExitButton(Menu, true);
   DisplayMenu(Menu, client, 0);
  }
}

public FreePlayerSelect(Handle:menu, MenuAction:action, i, option)
{
        if (action == MenuAction_Select)
        {    
      GetClientAuthString(i, SteaM[i], 20);
   Kick = StringToInt(KickID);
      new Handle:h = CreateKeyValues("FreeClient");   
     KvJumpToKey(h, SteaM[i], true);
      KvSetString(h, "id", SteaM[i]);   
      KvRewind(h);   
      KeyValuesToFile(h, "cfg/FreeClient.txt");   
     }
}
 
_wS_ Дата: Суббота, 01.09.2012, 20:01:12 | Сообщение # 19
И об этом уже было не раз сказано.. Кто последним выберет опцию в меню, того стим и будет в базе. Ты же постоянно перезаписываешь всю группу, а ее нужно хранить в глобальной переменной - читай урок про keyvalues и похожие темы.
 
scorpion2904 Дата: Четверг, 25.10.2012, 17:40:05 | Сообщение # 20
Сообщений: 69
Репутация: 5 [ +/- ]
Как сделать, чтобы данные при сохранении перезаписывались, а не добавлялся новый ключ? Например, было так:

Code
"stats"  
{  
      "STEAM_1"  
      {  
          "k" "1"  
      }  
      "STEAM_2"  
      {  
          "k" "2"  
      }  
      "STEAM_3"  
      {  
          "k" "3"  
      }  
}


А после изменения Steam_2 получается так:

Code
"stats"  
{  
      "STEAM_1"  
      {  
          "k" "1"  
      }  
      "STEAM_2"  
      {  
          "k" "3"  
      }  
      "STEAM_3"  
      {  
          "k" "3"  
      }  
      "STEAM_1"  
      {  
          "k" "1"  
      }  
      "STEAM_3"  
      {  
          "k" "3"  
      }  
}
 
Scarface_slv Дата: Пятница, 26.10.2012, 13:23:37 | Сообщение # 21
Сообщений: 749
Репутация: 61 [ +/- ]
вот тут описано подробно все как работать с keyvalues http://world-source.ru/forum/100-2369-1
 
BeatMaker_R1KO_ Дата: Вторник, 17.09.2013, 17:50:11 | Сообщение # 22
Сообщений: 60
Репутация: 0 [ +/- ]
Как можно получить параметры в ключе, не зная их названий и количества (тоесть они string) ??
 
_wS_ Дата: Среда, 18.09.2013, 01:13:38 | Сообщение # 23
Цитата (BeatMaker_R1KO_)
Как можно получить параметры в ключе, не зная их названий и количества (тоесть они string) ??


Код
"x"
{
     "key"
     {
         "v1"    "3"
         "v2"    "5"
         "v3"    "7"
     }
}


Код
new Handle:kv = CreateKeyValues("x");
if (FileToKeyValues(...) && KvJumpToKey(kv, "key", false) && KvGotoFirstSubKey(kv, false))
{
     decl String:name[5];
     do
     {
         if (KvGetSectionName(kv, name, 5)) PrintToServer("%s: %d", name, KvGetNum(kv, ""));
     }
     while (KvGotoNextKey(kv, false));  
}
CloseHandle(kv);
 
sssw Дата: Суббота, 07.12.2013, 09:03:49 | Сообщение # 24
Сообщений: 123
Репутация: 14 [ +/- ]
Код

"Movie"
{
       "Frame_1"
       {
       }
       "Frame_2"
       {
              "AddEntity"
              {
                      "1"
                      {
                    "classname" "env_sprite"
                    "velocity" "30 30 30"
                      }
              }

              "DellEntity"
              {
              }
       }
}


Как путешествовать тут? Нужно зайти в Frame_2 затем в AddEntity потом зайти поочерёдно всё что есть там и перепрыгнуть на DellEntity.
 
_wS_ Дата: Воскресенье, 08.12.2013, 18:35:37 | Сообщение # 25
Попробуй KvGotoFirstSubKey(kv, true) несколько раз.
 
Naykon Дата: Воскресенье, 09.03.2014, 16:39:59 | Сообщение # 26
Сообщений: 439
Репутация: -5 [ +/- ]
Код
      if (FileToKeyValues(kv1, Header))
       {
         KvJumpToKey(kv1, "priglash", true);
        KvSetString(kv1, SteamID, NamePlayer);
        KvRewind(kv1);
        KeyValuesToFile(kv1, Header);
       }


LINUX сохраняет БАЗУ с маленькой буквы!!! Т.е Header = "Babka" а сохраниться в babka.txt - как бороться?

Добавлено (05.03.2014, 16:32:58)
---------------------------------------------

Цитата _wS_ ()
cfg/stats.txt :

"stats"
{
     "STEAM_1"
     {
         "k" "1"
     }
     "STEAM_2"
     {
         "k" "2"
     }
     "STEAM_3"
     {
         "k" "3"
     }
}

Удаляем STEAM_2

#include <sourcemod>

public OnPluginStart()
{
     new Handle:kv = CreateKeyValues("stats");
     if (FileToKeyValues(kv, "cfg/stats.txt") && KvJumpToKey(kv, "STEAM_2"))
     {
         KvDeleteThis(kv);
         KvRewind(kv);
         KeyValuesToFile(kv, "cfg/stats.txt");
     }
     CloseHandle(kv);
}


А как удалить только "k" "3"?

Добавлено (09.03.2014, 16:39:59)
---------------------------------------------
Живые есть?

 
_wS_ Дата: Воскресенье, 09.03.2014, 19:16:19 | Сообщение # 27
Так можно:

Код
new Handle:kv = CreateKeyValues("stats");
if (FileToKeyValues(kv, "addons/sourcemod/scripting/stats.txt")
     && KvJumpToKey(kv, "STEAM_3", false)
     && KvGotoFirstSubKey(kv, false))
{
     decl String:info[5];
     do
     {
         if (KvGetSectionName(kv, info, 5) && strcmp(info, "k", false) == 0)
         {
             KvDeleteThis(kv);
             KvRewind(kv);
             KeyValuesToFile(kv, "addons/sourcemod/scripting/stats.txt");
             break;
         }
     }
     while (KvGotoNextKey(kv, false));
}
CloseHandle(kv);

Но если у ключа "STEAM_3" больше нет параметров, кроме "k", то после удаления "k" удалится и сам ключ "STEAM_3".
 
Naykon Дата: Среда, 26.11.2014, 00:46:49 | Сообщение # 28
Сообщений: 439
Репутация: -5 [ +/- ]
Цитата _wS_ ()
Попробуй KvGotoFirstSubKey(kv, true) несколько раз.


Код
"Movie"  
{  
        "Frame_1"  
        {  
               "AddEntity1"  
               {  
                     "classname" "env_sprite"  
                     "velocity" "30 30 30"  
               }  
               "AddEntity2"  
               {  
                     "classname" "env_sprite"  
                     "velocity" "30 30 30"  
               }  
               "AddEntity3"  
               {  
                     "classname" "env_sprite"  
                     "velocity" "30 30 30"  
               }  
        }  
}


Как шагать тут? Нужно из каждого "classname" и "velocity" получить данные... Пример дайте пожалуйста. Спасибо.
 
AtomoS Дата: Понедельник, 05.01.2015, 00:22:30 | Сообщение # 29
Сообщений: 1
Репутация: 0 [ +/- ]
Код
"table"
{
          "key1"
          {
           "param1"    "0"
           "param2"    "1"
          }
                   
          "key1"
          {
           "param3"    "5"
           "param4"    "5"
          }
}


Не подскажите как можно получить список параметров + значения из key1 или key2, не зная какие там есть на самом деле?

// решено

Код

          KvJumpToKey(kv, "key1");
          KvGotoFirstSubKey(kv, false);

          do
          {
                 KvGetSectionName(kv, buffer, sizeof(buffer));
                 KvGetString(kv, NULL_STRING, command, sizeof(command));
                  
                 PrintToServer("param: %s - value: %c", buffer, command);
          }
         while (KvGotoNextKey(kv, false));


Сообщение отредактировал AtomoS - Суббота, 07.02.2015, 22:06:18
 
Форум » SourceMod - Counter Strike Source && CS GO » Уроки SourceMod (SourcePawn) Скриптинга » Keyvalues - База (группа) для хранения информации
Страница 2 из 2«12
Поиск: