Контакты Поиск

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

  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Проблема с меню.
Проблема с меню.
Sunday Дата: Четверг, 31.01.2013, 00:10:36 | Сообщение # 31
Сообщений: 186
Репутация: 24 [ +/- ]
Удивительно, как только уже не пробовал..

Так подгружает на всех:
Код
public OnPluginStart()
{
                      AddFolderToDownloadsTable("materials/mapige");
}

stock AddFolderToDownloadsTable(const String:sDirectory[])
{
               decl String:sFile[64], String:sPath[512];
               new FileType:iType, Handle:hDir = OpenDirectory(sDirectory);
               while(ReadDirEntry(hDir, sFile, sizeof(sFile), iType))                   
               {
                if(iType == FileType_File)
                {
                 Format(sPath, sizeof(sPath), "%s/%s", sDirectory, sFile);
                 AddFileToDownloadsTable(sPath);
                }
               }
}


Так тоже не получается:
Код

stock AddFolderToDownloadsTable(const String:sDirectory[])
{
             for (new client = 1; client <= MaxClients; client++)
             {
              if (!IsClientConnected(client))
              {
               continue;
              }
                          
              new flags = GetUserFlagBits(client);
                          
              if (flags & ADMFLAG_ROOT || flags & ADMFLAG_RESERVATION || flags & ADMFLAG_CHANGEMAP)
              {
               continue;
              }
                         
              decl String:sFile[64], String:sPath[512];
              new FileType:iType, Handle:hDir = OpenDirectory(sDirectory);
              while(ReadDirEntry(hDir, sFile, sizeof(sFile), iType))                 
              {
               if(iType == FileType_File)
               {
                Format(sPath, sizeof(sPath), "%s/%s", sDirectory, sFile);
                AddFileToDownloadsTable(sPath);
               }
              }
             }
}


Добавлено (30.01.2013, 21:30:30)
---------------------------------------------
Цитата (Scarface_slv)
Я представление не имею как проверить в OnMapStart игроков, т.к. все игроки переподключаются при смене карты


Не обязательно в public OnMapStart(), это условие так же выполняет свои функции и в public OnClientConnected(client) а изначально в public OnPluginStart(). Вопрос как проверить правельно админ или игрок, ума не приложу?

Пробывал:
так
Код
  new flags = GetUserFlagBits(client);
                      
            if (flags & ADMFLAG_ROOT || flags & ADMFLAG_RESERVATION || flags & ADMFLAG_CHANGEMAP)
            {
             continue;
            }

так
Код
   new AdminId:admin = FindAdminByIdentity(AUTHMETHOD_STEAM, client);

             if (admin == INVALID_ADMIN_ID)
             {
             // return true;
             }


да много как, что то не так делаю.

Добавлено (30.01.2013, 22:48:47)
---------------------------------------------
Так тоже не получается: grust

Код
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>

public OnClientAuthorized(client)
{
           decl AdminId:aid;
           if( client > -1 )
           {
            aid = GetUserAdmin( client );
            if( GetAdminFlag(aid, Admin_Root))
            {
             AddFolderToDownloadsTable("materials/mapige");
            }
            else
            {

            }
           }
}

stock AddFolderToDownloadsTable(const String:sDirectory[])
{
           decl String:sFile[64], String:sPath[512];
           new FileType:iType, Handle:hDir = OpenDirectory(sDirectory);
           while(ReadDirEntry(hDir, sFile, sizeof(sFile), iType))               
           {
            if(iType == FileType_File)
            {
             Format(sPath, sizeof(sPath), "%s/%s", sDirectory, sFile);
             AddFileToDownloadsTable(sPath);
            }
           }
}


Добавлено (30.01.2013, 23:29:44)
---------------------------------------------
ПОЛУЧИЛОСЬ, ПОСЛЕ ДОЛГИХ ПЛЯСОК С БУБНАМИ ulibka

Код
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>

public OnClientAuthorized(client, const String:steamID[])
{
          new AdminId:admin = FindAdminByIdentity(AUTHMETHOD_STEAM, steamID);
          if(client)
          {
           if (admin == INVALID_ADMIN_ID)
           {
            PrintToServer("Client**********************************************************************");
           }
           else
           {
            PrintToServer("Admin***********************************************************************");
            AddFolderToDownloadsTable("materials/mapige");
           }
          }
}

stock AddFolderToDownloadsTable(const String:sDirectory[])
{
          decl String:sFile[64], String:sPath[512];
          new FileType:iType, Handle:hDir = OpenDirectory(sDirectory);
          while(ReadDirEntry(hDir, sFile, sizeof(sFile), iType))              
          {
           if(iType == FileType_File)
           {
            Format(sPath, sizeof(sPath), "%s/%s", sDirectory, sFile);
            AddFileToDownloadsTable(sPath);
           }
          }
}


Монтирую в основной код, осталось квары добавить и так, еще по мелочам... klas
п.с. вот я нафлудил. xaxa dumaem

Добавлено (31.01.2013, 00:10:36)
---------------------------------------------
Квары готовы, вот что получилось:

Код

#pragma semicolon 1

#include <sourcemod>
#include <sdktools>

new Handle:g_DownloadsType    = INVALID_HANDLE;

public OnPluginStart()
{
   g_DownloadsType = CreateConVar("sm_downloadstype", "1", "1 = Загружать только Админам, 0 = Загружать всем.");
}

public OnClientAuthorized(client, const String:steamID[])
{
   if (GetConVarBool(g_DownloadsType)) {
    new AdminId:admin = FindAdminByIdentity(AUTHMETHOD_STEAM, steamID);

    if (admin != INVALID_ADMIN_ID) {
     AddFolderToDownloadsTable("materials/mapige"); // Downloads Only Admins
    }
   }

   if (!GetConVarBool(g_DownloadsType)) {
    AddFolderToDownloadsTable("materials/mapige"); // Downloads All
   }
}

stock AddFolderToDownloadsTable(const String:sDirectory[]) {
   decl String:sFile[64], String:sPath[512];
   new FileType:iType, Handle:hDir = OpenDirectory(sDirectory);
   while(ReadDirEntry(hDir, sFile, sizeof(sFile), iType))       
   {
    if(iType == FileType_File) {
     Format(sPath, sizeof(sPath), "%s/%s", sDirectory, sFile);
     AddFileToDownloadsTable(sPath);
    }
   }
}


Может кому пригодиться, а то намаялся вроде с такой простой вещью...


Сообщение отредактировал Sunday - Четверг, 31.01.2013, 01:14:43
 
Scarface_slv Дата: Четверг, 31.01.2013, 09:19:04 | Сообщение # 32
Сообщений: 738
Репутация: 61 [ +/- ]
Не думаю что это будет работать так как ты хочешь, если игрок админ и зайдет на сервер то AddFileToDownloadsTable добавит на скачку файлы, все зашедшие игроки после админа будут качать эти файлы
 
Sunday Дата: Четверг, 31.01.2013, 17:39:53 | Сообщение # 33
Сообщений: 186
Репутация: 24 [ +/- ]
Цитата (Scarface_slv)
Не думаю что это будет работать так как ты хочешь, если игрок админ и зайдет на сервер то AddFileToDownloadsTable добавит на скачку файлы, все зашедшие игроки после админа будут качать эти файлы


Совершенно верно, если после меня игрок заходит то загружается и ему. Как можно исправить? Третий день ломаю голову, конструктивные мысли закончились. dumaem

Добавлено (31.01.2013, 17:39:53)
---------------------------------------------
и еще, проблема ведь в AddFileToDownloadsTable? самой переменной которая добавляет на сервер таблицу... axxx


Сообщение отредактировал Sunday - Четверг, 31.01.2013, 17:49:00
 
Scarface_slv Дата: Четверг, 31.01.2013, 17:47:08 | Сообщение # 34
Сообщений: 738
Репутация: 61 [ +/- ]
эта функция AddFileToDownloadsTable просто добавляет файлы на скачку у него же нет индекса игрока что бы именно ему скачалось
 
Sunday Дата: Четверг, 31.01.2013, 17:51:06 | Сообщение # 35
Сообщений: 186
Репутация: 24 [ +/- ]
Цитата (Scarface_slv)
эта функция AddFileToDownloadsTable просто добавляет файлы на скачку у него же нет индекса игрока что бы именно ему скачалось


Спасибо Scarface_slv, упустил я этот момент, сейчас в апи почитал. То есть похоже это ни как не осуществить только для админа? Может есть аналоги или можно как то к нему добавить индекс?
 
Scarface_slv Дата: Четверг, 31.01.2013, 17:52:42 | Сообщение # 36
Сообщений: 738
Репутация: 61 [ +/- ]
Я незнаю... но думаю вполне возможно убрать скачку определенных файлов а может и вовсе нельзя)
 
Sunday Дата: Четверг, 31.01.2013, 18:08:42 | Сообщение # 37
Сообщений: 186
Репутация: 24 [ +/- ]
FindStringIndex - Поиски индекс заданной строки в таблице.
GetStringTableDataLength - Возвращает длину данных пользователя, связанные с данной строкой индекса.
GetStringTableData - Возвращает пользовательские данные, связанные с данной строкой индекса.
SetStringTableData - Устанавливает пользовательские данные, связанные с данной строкой индекса.
Может как то с помощью этих параметров можно?

Добавлено (31.01.2013, 18:08:42)
---------------------------------------------
к сожалению уровень мой пока не позволяет осмыслить как это возможно сделать, конечно я найду способ но когда... Блин что самое противное, вроде бы казалось что это самое простое и как бывает в жизни, закон подлости. Осталось эта последняя функция и полноценный плагин готов... обидно блин. Ладно, сил нет больше голову ломать, вторые сутки не сплю, думаю как сделать, не судьба да и черт с ней closed



Сообщение отредактировал Sunday - Четверг, 31.01.2013, 18:00:18
 
Scarface_slv Дата: Пятница, 01.02.2013, 17:01:09 | Сообщение # 38
Сообщений: 738
Репутация: 61 [ +/- ]
WS сказал что нельзя скачать определенному игроку)
 
Meow_1337 Дата: Пятница, 01.02.2013, 17:19:38 | Сообщение # 39
Сообщений: 209
Репутация: 11 [ +/- ]
Sunday, скидывай плагин :)
 
Sunday Дата: Пятница, 01.02.2013, 22:19:34 | Сообщение # 40
Сообщений: 186
Репутация: 24 [ +/- ]
Ладно я бету скину а там я все равно найду способ как это сделать, я конечно верю wS на все сто но надежда умирает последней и от сюда возник вопрос!

Таблица общая но у меня есть мысль, таблицу можно ли в момент подключения администратора записать в буфер ее прошлое состояние, выполнить функцию с новыми добавлениями и перезаписать ту которую запомнили на исходную? Возможно ли попробовать использовать GetStringTableData и что бы вернуть SetStringTableData.? Включаем мозги парни, ведь эта хорошая пища для размышления и уверен что избавит многих от геморроя...

Добавлено (01.02.2013, 22:19:34)
---------------------------------------------
Как и обещал http://world-source.ru/forum/129-3085-1



Сообщение отредактировал Sunday - Пятница, 01.02.2013, 21:01:55
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Проблема с меню.
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск: