Проблема с меню.
| |
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) --------------------------------------------- Так тоже не получается:
Код #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) --------------------------------------------- ПОЛУЧИЛОСЬ, ПОСЛЕ ДОЛГИХ ПЛЯСОК С БУБНАМИ
Код #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); } } }
Монтирую в основной код, осталось квары добавить и так, еще по мелочам... п.с. вот я нафлудил.
Добавлено (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 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
Не думаю что это будет работать так как ты хочешь, если игрок админ и зайдет на сервер то AddFileToDownloadsTable добавит на скачку файлы, все зашедшие игроки после админа будут качать эти файлы
|
|
| |
Sunday
|
Дата: Четверг, 31.01.2013, 17:39:53 | Сообщение # 33 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
Цитата (Scarface_slv) Не думаю что это будет работать так как ты хочешь, если игрок админ и зайдет на сервер то AddFileToDownloadsTable добавит на скачку файлы, все зашедшие игроки после админа будут качать эти файлы
Совершенно верно, если после меня игрок заходит то загружается и ему. Как можно исправить? Третий день ломаю голову, конструктивные мысли закончились.
Добавлено (31.01.2013, 17:39:53) --------------------------------------------- и еще, проблема ведь в AddFileToDownloadsTable? самой переменной которая добавляет на сервер таблицу...
Сообщение отредактировал Sunday - Четверг, 31.01.2013, 17:49:00 |
|
| |
Scarface_slv
|
Дата: Четверг, 31.01.2013, 17:47:08 | Сообщение # 34 |
|
Сообщений: 737
Репутация: 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 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
Я незнаю... но думаю вполне возможно убрать скачку определенных файлов а может и вовсе нельзя)
|
|
| |
Sunday
|
Дата: Четверг, 31.01.2013, 18:08:42 | Сообщение # 37 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
FindStringIndex - Поиски индекс заданной строки в таблице. GetStringTableDataLength - Возвращает длину данных пользователя, связанные с данной строкой индекса. GetStringTableData - Возвращает пользовательские данные, связанные с данной строкой индекса. SetStringTableData - Устанавливает пользовательские данные, связанные с данной строкой индекса. Может как то с помощью этих параметров можно?Добавлено (31.01.2013, 18:08:42) --------------------------------------------- к сожалению уровень мой пока не позволяет осмыслить как это возможно сделать, конечно я найду способ но когда... Блин что самое противное, вроде бы казалось что это самое простое и как бывает в жизни, закон подлости. Осталось эта последняя функция и полноценный плагин готов... обидно блин. Ладно, сил нет больше голову ломать, вторые сутки не сплю, думаю как сделать, не судьба да и черт с ней
Сообщение отредактировал Sunday - Четверг, 31.01.2013, 18:00:18 |
|
| |
Scarface_slv
|
Дата: Пятница, 01.02.2013, 17:01:09 | Сообщение # 38 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
WS сказал что нельзя скачать определенному игроку)
|
|
| |
Meow_1337
|
Дата: Пятница, 01.02.2013, 17:19:38 | Сообщение # 39 |
|
Сообщений: 207
Репутация: 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 |
|
| |
|