• Пожалуйста, создайте название темы отражающее ее смысл
  • Для ускорения решения Вашего вопроса заполните обязательные поля и подробно опишите возникшую проблему

Помощь Регистрация больше одной услуги в одном плагине

pollfank

Участник
Сообщения
167
Решения
1
Реакции
32
Баллы
28
Всем привет.
И так суть такова.

Есть на сайте допустим услуга с идентификатором "_buymenu"
Выдача такой услуги в плагине будет выглядеть так:

Код:
native Array:cmsapi_get_user_services(const index, const szAuth[] = "", const szService[] = "", serviceID = 0, bool:part = false);

enum e_cvars {m_AccessServices[32]}
new cvars[e_cvars];

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);

    register_cvar("Menu_AccessServices", "_buymenu");
    get_cvar_string("Menu_AccessServices", cvars[m_AccessServices], charsmax(cvars[m_AccessServices]));
}

//// И дальше уже в зависимости от ситуации где надо применить

static Array:Services;
    Services = cmsapi_get_user_services(id, "", cvars[m_AccessServices]);
    if( get_user_flags(id) && Services ){

Как сделать так, чтобы можно было зарегистрировать несколько идентификаторов.
Например на "_buymenu" был доступ к такому меню, или выполнялась какая то ф-ция
на "_buymenu_2" был доступ к след. меню, или выполнялась какая то ф-ция
 
zhorzh78, правильно ли будет сделать так

Код:
enum e_cvars {m_AccessServices[32], d_AccessServices[32]}
new cvars[e_cvars];

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);

    register_cvar("Menu_AccessServices", "_buymenu");
    get_cvar_string("Menu_AccessServices", cvars[m_AccessServices], charsmax(cvars[m_AccessServices]));
    
    register_cvar("Menu_AccessServices", "_buymenu_2");
    get_cvar_string("Menu_AccessServices", cvars[d_AccessServices], charsmax(cvars[d_AccessServices]));
}

//// И дальше уже в зависимости от ситуации где надо применить

static Array:Services;
    Services = cmsapi_get_user_services(id, "", cvars[m_AccessServices]);
    if( get_user_flags(id) && Services ){
    
    
static Array:Services;
    Services = cmsapi_get_user_services(id, "", cvars[d_AccessServices]);
    if( get_user_flags(id) && Services ){
 
pollfank, Несколько сложно объяснять работу тому, кто только учится что-то делать. Для начала, читайте описания функций, чтобы понимать, что она делает и что можно ожидать в результате ее выполнения.
C++:
* @return            New array handle or Invalid_Array if empty
native Array:cmsapi_get_user_services(const index, const szAuth[] = "", const szService[] = "", serviceID = 0, bool:part = false);
Функция возвращает указатель на созданный массив, в котором содержится информация об услугах игрока.

Если при выполнении данной функции вы указываете название услуги, например, "_buymenu", то в результате получите указатель на массив только с одной указанной услугой, либо 0, если услуга отсутствует. Поэтому, чтобы просто проверить наличие услуги, достаточно сравнить результат с нулем:
C++:
if(cmsapi_get_user_services(id, "", cvars[m_AccessServices]))
{
    //
}
Таким же способом проверяете наличие другой услуги.

В последних версия появился натив, который определяет не только наличие услуги, но и ее активность. В большинстве случаев следует использовать его
C++:
* @return            Время окончания в формате UNIX
*                     TIME_MAP_END_EXPIRING - до смены карты
*                     TIME_NOT_EXPIRING - нет ограничений
*                     SERVICE_NOT_FOUND  услуга не найдена
*                     TIME_TRACKING_STOPPED - услуга не активна, остановлена
*/
native cmsapi_service_timeleft(id, szDate[]="", iLen=0, srvName[]="", bool:part = false);

C++:
new iServiceStatus = cmsapi_service_timeleft(id, .srvName = cvars[m_AccessServices]);
if(iServiceStatus != SERVICE_NOT_FOUND && iServiceStatus != TIME_TRACKING_STOPPED)
{
    //
}
 
Назад
Сверху