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

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

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Передать массив в функцию
Передать массив в функцию
Shouldercannon Дата: Пятница, 23.02.2024, 08:10:50 | Сообщение # 1
Сообщений: 21
Репутация: 0 [ +/- ]
Как передать массив и другие переменные в функцию?
Способ не рабочий, демонстрирует концепцию.
Код
public Action Test(client, args)
{
    MyFunc(MyArray, "sound/hit/", "kevlar"); // How do you pass an array with other variables?
}

void MyFunc(const array[], char sPath, Filtr)
{
    new Handle:dir;

    if ((dir = OpenDirectory(sPath)))
    {
        char name[128];
        char path[PLATFORM_MAX_PATH];
        new FileType:type;

        while (ReadDirEntry(dir, name, 128, type))
        {
            if (type == FileType_File)
            {
                if (StrEqual(name[strlen(name) - 4], ".wav", false) || (StrEqual(name[strlen(name) - 4], ".mp3", false)))
                {
                    if (StrContains(name, Filtr, false) != -1)
                    {
                        FormatEx(path, sizeof(path), "%s/%s", sPath, name);
                        array.PushString(path);
                    }
                }
            }
        }
        CloseHandle(dir);
    }
    else
        LogError("Failed to open directory: %s", sPath);
}
 
_wS_ Дата: Пятница, 23.02.2024, 10:33:12 | Сообщение # 2
Thanks
Код
public void OnPluginStart()
{
    F1("abc");

    char name[MAX_NAME_LENGTH] = "def";
    F2(name);

    // Если передать нужно строку, в которую нужно что-то скопировать, то подходит F2 и:
    char s[размер];
    F3(s, sizeof(s));

    // С остальными, не строковыми массивами, всё так же.
}

void F1(const char[] s)
{
}

void F2(char s[MAX_NAME_LENGTH])
{
}

void F3(char[] s, int maxlength)
{
}
 
Shouldercannon Дата: Пятница, 23.02.2024, 18:32:45 | Сообщение # 3
Сообщений: 21
Репутация: 0 [ +/- ]
Надеюсь, что утечек памяти не получил.
Код
...

ArrayList g_SoundsArray;

...

public OnPluginStart()
{
    g_SoundsArray = new ArrayList(ByteCountToCells(PLATFORM_MAX_PATH));
    GetSounds(g_SoundsArray, "sound/hit/", "kevlar");
}

void GetSounds(ArrayList array, const char[] sPath, const char[] sFiltr)
{
    DirectoryListing dir;

    if ((dir = OpenDirectory(sPath)))
    {
  char name[PLATFORM_MAX_PATH];
  char path[PLATFORM_MAX_PATH];
  FileType type;

  while (dir.GetNext(name, sizeof(name), type))
  {
   if (type == FileType_File)
   {
    if (StrEqual(name[strlen(name) - 4], ".wav", false) || StrEqual(name[strlen(name) - 4], ".mp3", false))
    {
     if (!strlen(sFiltr))
     {
      FormatEx(path, sizeof(path), "%s%s", sPath, name);
      array.PushString(path);    
     }
     else
     {
      if (StrContains(name, sFiltr, false) != -1)
      {
       FormatEx(path, sizeof(path), "%s%s", sPath, name);
       array.PushString(path);
      }
     }
    }
   }
  }
  dir.Close();
    }
    else
  LogError("Failed to open directory: %s", sPath);
}
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Передать массив в функцию
  • Страница 1 из 1
  • 1
Поиск: