Pushistik↯❤
Команда форума
- Регистрация
- 6 Июл 2017
- Сообщения
- 393
- Реакции
- 97
- Баллы
- 28
[SourcePawn] Урок 14 - Работа с куками (clientprefs)
<= К содержанию
Куки (Cookie) - инструмент позволяющих хранить некоторую информацию об игроках на сервере.Внутренняя реализация куков в SourceMod реализована в виде SQLite базы. Но API не предоставляет к ней доступ.
API по кукам здесь clientprefs · SourceMod Scripting API Reference
Уровни доступа к кукам:
- CookieAccess_Public - Видимые для пользователей и разрешены для изменения.
- CookieAccess_Protected - Видимые для пользователей но запрещены для изменения.
- CookieAccess_Private - Не видимые для пользователей.
Функции для работы с куками
- RegClientCookie - Создает новые куки.
PHP:
Handle RegClientCookie(const char[] name, const char[] description, CookieAccess access)
- char[] name - Уникальное имя куков.
- char[] description - Описание.
- CookieAccess access - Уровень доступа.
PHP:Handle g_hCookie; public void OnPluginStart() { g_hCookie = RegClientCookie("Lesson", "cookies for a lesson", CookieAccess_Public); }
- FindClientCookie - Ищет куки если они уже были созданы.
PHP:
Handle FindClientCookie(const char[] name)
- char[] name - Уникальное имя куков.
- char[] description - Описание.
- CookieAccess access - Уровень доступа.
PHP:Handle hCookie = FindClientCookie("Lesson"); if(hCookie != null) { // Куки найдены }
- AreClientCookiesCached - Возвращает загружены ли куки игрока.
PHP:
bool AreClientCookiesCached(int client)
- int client - Индекс игрока.
PHP:if(AreClientCookiesCached(iClient)) { // Куки игрока загружены и с ними можно работать }
- GetClientCookie - Получает куки игрока.
PHP:
void GetClientCookie(int client, Handle cookie, char[] buffer, int maxlen)
- int client - Индекс игрока.
- Handle cookie - Handle куков.
- char[] buffer - Буфер, для получения куков.
- int maxlen - Размер буфера.
PHP:char szCookie[64]; GetClientCookie(iClient, g_hCookie, szCookie, sizeof(szCookie));
- GetClientCookieTime - Получает время последнего обновления куков игрока (unix).
PHP:
int GetClientCookieTime(int client, Handle cookie)
- int client - Индекс игрока.
- Handle cookie - Handle куков.
PHP:
int iLastCookieUpdate = GetClientCookieTime(iClient, g_hCookie);
- SetClientCookie - Устанавливает значение куков для игрока.
PHP:
void SetClientCookie(int client, Handle cookie, const char[] value)
- int client - Индекс игрока.
- Handle cookie - Handle куков.
- char[] value - Значение.
PHP:
SetClientCookie(iClient, g_hCookie, "342");
- SetAuthIdCookie - Устанавливает значение куков для игрока по SteamID.
PHP:
void SetAuthIdCookie(const char[] authID, Handle cookie, const char[] value)
- char[] authID - SteamID игрока.
- Handle cookie - Handle куков.
- char[] value - Значение.
PHP:
SetAuthIdCookie("STEAM_0:0:12345678", g_hCookie, "342");
- ShowCookieMenu - Открывает игроку меню !settings.
PHP:
void ShowCookieMenu(int client)
- int client - Индекс игрока.
PHP:
ShowCookieMenu(iClient);
- int client - Индекс игрока.
- GetCookieAccess - Получает уровень доступа куков.
PHP:
CookieAccess GetCookieAccess(Handle cookie);
- Handle cookie - Handle куков.
PHP:
CookieAccess iAccess = GetCookieAccess(g_hCookie);
- Handle cookie - Handle куков.
- SetCookieMenuItem - Добавляет пункт в меню !settings.
PHP:
void SetCookieMenuItem(CookieMenuHandler handler, any info, const char[] display);
- CookieMenuHandler handler - Обратный вызов.
- any info - Данные для передачи в обратный вызов.
- char[] display - Текс пункта.
PHP:SetCookieMenuItem(LessonPrefSelected, 0, "Lesson item"); public void LessonPrefSelected(int iClient, CookieMenuAction action, any info, char[] buffer, int maxlen) { // Обратный вызов switch (action) { case CookieMenuAction_DisplayOption: // Вызывается когда пункт отображается в меню { SetGlobalTransTarget(iClient); FormatEx(buffer, maxlen, "%t", "CookieMenu_Lesson"); // Отправим фразу из перевода } case CookieMenuAction_SelectOption: // Вызывается когда игрок выбирает этот пункт { // Отправляем ему меню настройки DisplayLessonMenu(iClient); // Ф-я придуманная и не реализована } } }
- SetCookiePrefabMenu - Добавляет пункт в меню !settings, работа которого автоматическая и не требует обратного вызова.
PHP:
void SetCookiePrefabMenu(Handle cookie, CookieMenu type, const char[] display, CookieMenuHandler handler=INVALID_FUNCTION, any info=0);
- Handle cookie - Handle куков.
- CookieMenu type - Тип:
- CookieMenu_YesNo - Да/Нет в меню и "yes"/"no" в результатах (Сохраняется в куки)
- CookieMenu_YesNo_Int - Да/Нет в меню и 1/0 в результатах (Сохраняется в куки)
- CookieMenu_OnOff - Вкл/Выкл в меню и "on"/"off" в результатах (Сохраняется в куки)
- CookieMenu_OnOff_Int - Вкл/Выкл в меню и 1/0 в результатах (Сохраняется в куки)
- char[] display - Текст пункта.
- CookieMenuHandler handler - Обратный вызов. По умолчанию = INVALID_FUNCTION
- any info - Данные для передачи в обратный вызов. По умолчанию = 0
PHP:SetCookiePrefabMenu(g_hCookie, CookieMenu_OnOff_Int, "Уроки", LessonPrefSelected); // Или если хотим отслеживать изменение: public void LessonPrefSelected(int iClient, CookieMenuAction action, any info, char[] buffer, int maxlen) { // Обратный вызов if (action == CookieMenuAction_SelectOption) { // Статус изменился } }
- GetCookieIterator - Получает Handle итератора куков.
PHP:
Handle GetCookieIterator();
- ReadCookieIterator - Получает информацию о куках с итератора.
PHP:
bool ReadCookieIterator(Handle iter, char[] name, int nameLen, CookieAccess &access, char[] desc="", int descLen=0);
- Handle iter - Handle итератора.
- char[] name - Буфер, для получения уникального имени куков.
- int nameLen - Размер буфера.
- CookieAccess &access - Буфер, для получения уровня доступа куков.
- char[] desc - Буфер, для получения описания куков. По умолчанию = ""
- int descLen - Размер буфера. По умолчанию = 0
PHP:Handle hIter = GetCookieIterator(); char szCookieName[32], szCookieDesc[255]; CookieAccess iAccess; while (ReadCookieIterator(hIter, szCookieName, sizeof(szCookieName), iAccess, szCookieDesc, sizeof(szCookieDesc)) != false) { PrintToServer("Cookie '%s' (%s), Access = %i", szCookieName, szCookieDesc, iAccess); } delete hIter;
- OnClientCookiesCached - Событие, которое вызывается когда куки игрока были загружены.
PHP:
void OnClientCookiesCached(int client);
- int client - Индекс игрока.
PHP:
#pragma semicolon 1
#include <sourcemod>
#include <clientprefs>
#pragma newdecls required
Handle g_hCookie;
bool g_bSettings[MAXPLAYERS+1];
public void OnPluginStart()
{
g_hCookie = RegClientCookie("TestCookie", "Урок работы с куками", CookieAccess_Private);
SetCookiePrefabMenu(g_hCookie, CookieMenu_OnOff_Int, "TestCookie", TestCookieHandler);
}
public void TestCookieHandler(int iClient, CookieMenuAction action, any info, char[] buffer, int maxlen)
{
if (action == CookieMenuAction_SelectOption)
{
OnClientCookiesCached(iClient);
}
}
public void OnClientCookiesCached(int iClient)
{
char szValue[4];
GetClientCookie(iClient, g_hCookie, szValue, sizeof(szValue));
if(szValue[0]) // Если в куках что-то записано
{
// Получаем это
g_bSettings[iClient] = view_as<bool>(StringToInt(szValue));
}
else // Иначе
{
// По умолчанию сделаем опцию включенной
g_bSettings[iClient] = true;
}
}
<= К содержанию
Последнее редактирование: