Заказать Плагин Контакты Поиск

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

  • Страница 1 из 1
  • 1
Форум » SourceMod - Counter Strike Source && CS GO » Уроки/Статьи/Функции/Задачи » Инструкция по созданию модулей для VIP (Как создавать VIP модули)
Инструкция по созданию модулей для VIP
_wS_ Дата: Воскресенье, 23.09.2018, 19:05:16 | Сообщение # 1
Инструкция по созданию модулей для VIP

Последний vip.inc лежит в этом архиве.
.smx обязательно должен быть в plugins/ws_vip или plugins/disabled/ws_vip (сюда он перемещается при сервер/vip откл и потом при вкл возвращается в plugins/ws_vip)
Для начала советую посмотреть на модуль VIP [Speed], там есть много комментариев/объяснений.

Примеры VIP_ITEM_TOGGLE

- В группе значение не указано: VIP [Anti Team Flash]
- Значение указано: VIP [Quick Defuse]
- Несколько функций с значением и без: VIP [Damage]

Примеры VIP_ITEM_SELECT

- VIP [Teleport]
- VIP [Skin Color]

Как узнать является ли игрок VIP игроком?

Вы уверены что вам нужно узнать именно это?
Не всё так просто, т.к. доступ к функции может быть у любого не-бот игрока, и неважно VIP он или нет:

Код
// Получаем флаги игрока
new flags = VIP_GetFlags(client);

if (flags < 1)
{
    // Странно, наверно не успел авторизоваться (sql запрос повис или просто еще не выполнился).
}

if (flags & VCF_VIPMENUACCESS)
{
    // Неизвестно есть ли VIP группа у игрока или нет, но у него есть доступ к какой-то функции в !vip меню. Это может быть любой игрок.
}

if (flags & VCF_VIPBYFLAG)
{
    // Неизвестно есть ли VIP группа у игрока или нет, но у него есть доступ к какой-то функции в !vip меню по флагу. Это может быть любой игрок.
}

if (flags & VCF_VIP)
{
    // Игрок находится в какой-то VIP группе (значит это VIP игрок).
    // Или он в cfg/vip/vips.txt, или SQL базе, или он получил бесплатный VIP в определённое время, или кто-то использовал на игроке:
    // native bool:VIP_SetTemporaryGroup(client, const String:group[]);
}

if (flags & VCF_VIPFREE)
{
    // Игрок находится в какой-то VIP группе (значит это VIP игрок).
    // Но доступ он получил через функцию "Бесплатный VIP в определенное время". Он не добавляется в базу и потеряет все права после выхода с сервера.
}

if (flags & VCF_VIPTEMPORARY)
{
    // Игрок находится в какой-то VIP группе (значит это VIP игрок).
    // Но доступ он получил через cfg/vip/vips.txt, функцию "Бесплатный VIP в определенное время", или VIP_SetTemporaryGroup.
    // Он не добавляется в базу и потеряет все права после выхода с сервера.
}

if (flags & VCF_VIPPAUSE)
{
    // Игрок воспользовался функцией в !vip меню "Отключить всё (перезаход = вкл)".
    // После этого все функции были отключены для него, все переменные и флаги стерты, и установлен лишь один флаг VCF_VIPPAUSE.
    // Данной функцией могут воспользоваться лишь игроки, которые находятся в VIP группе, или у которых доступ был по флагам.
}

if (flags & VCF_HOLIDAY)
{
    // Игрок находится в отпуске, а брать отпуск может лишь VIP игрок с временными правами (он есть в SQL базе).
    // Он не считается VIP игроком в текущий момент.
}

if (flags & VCF_VIPTEST)
{
    // Игрок находится в какой-то VIP группе (значит это VIP игрок).
    // Но доступ он получил через функцию "протестировать VIP" (sm_viptest).
}

Если вам нужно узнать есть ли у VIP группы игрока доступ к функции, то:

decl String:group[GROUP_LENGTH];
if (VIP_GetGroupName(client, group, GROUP_LENGTH) && VIP_GetGroupItemValue(group, ItemName, "", 1))
{
    // Это VIP игрок и у его VIP группы есть доступ к ItemName
}

Преобразовать ItemID в ItemName можно так:

decl String:ItemName[ITEM_NAME_LENGTH];
if (VIP_GetItemName (ItemID, ItemName, ITEM_NAME_LENGTH))
{
    // Удалось
}

Узнать есть у игрока доступ к ItemID можно так:

if (VIP_HaveAccessToItem(client, ItemID))
{
    // Доступ есть
}

А если нужно еще узнать выдан ли этот доступ по флагу:

new bool:bAccessByFlag;
if (VIP_HaveAccessToItem(client, ItemID, bAccessByFlag);
{
    // Доступ есть. Если bAccessByFlag true, то по флагу.
}

Если нужно получить список всех функций, доступных игроку, и узнать по флагу ли они выданы, то используйте:

decl Handle:hAr, index;
if ((index = VIP_GetClientItemList(client, hAr)))
{
    decl info[2], String:ItemName[ITEM_NAME_LENGTH];
    while (--index > -1)
    {
        GetArrayArray(hAr, index, info, sizeof(info));
        ItemName[0] = 0;
        VIP_GetItemName(info[0], ItemName, ITEM_NAME_LENGTH);
        PrintToChat(client, "Есть доступ к ItemID %d (%s) (по флагу: %s)", info[0], ItemName, info[1] ? "да" : "нет");
    }
    CloseHandle(hAr); // Не забудьте закрыть.
}
 
Форум » SourceMod - Counter Strike Source && CS GO » Уроки/Статьи/Функции/Задачи » Инструкция по созданию модулей для VIP (Как создавать VIP модули)
  • Страница 1 из 1
  • 1
Поиск: