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

Помощь Переделка плагина под GameCMS API

D1m0n41k

Участник
Сообщения
486
Реакции
202
Баллы
43
Всем привет.
Кто может, помогите пожалуйста переделать плагин под выдачу привилегий через GameCMS API, а не через users.ini

Все файлы от плагина прикрепил.
За ранее большое спасибо за помощь. :rolleyes::oops:

Ссылка на .ini файл и на .cfg файл. [ Ссылка ]
 

Вложения

  • AdminRight.sma
    15.7 KB · Просмотры: 7
  • right_key_menu.txt
    574 байт · Просмотры: 4
Если тебе сделают, то тоже стырю, а то руки никак не дойдут до этого плагина))
 
Ковырялся в нативих, нашел выдачу
Здесь даже результат дает
C++:
/**
*    Добавление флагов пользователю
*    @index - id игрока
*    @szFlags[] - флаги доступа
*    @iTime - срок действия флагов, секунд (-1 - на карту)
*    @szServiceName[] - название услуги (например, "вип за стим", "ночной вип" и т.п.)
*    @bSilent - тихое добавление без вызова форварда OnAPIAdminConnected
*    return - 1- при успешном добавлении, 0- если услуга с этими флагами уже есть.
*/
native cmsapi_set_user_flags(index, const szFlags[], iTime = -1, const szServiceName[] = "", bSilent = false)

Дерзай
 
C++:
/** Добаление аккаунтов в базу данных
*    @iClient - индекс игрока
*    @szAuthType[] - тип авторизации (смотри amxconst.inc: Admin authentication behavior flags)
*    @szFlags[] - флаги (уровни) доступа (смотри amxconst.inc: Admin level constants)
*    @iTime - время в минутах, 0- навсегда (если время не указано, значит 0)
*    @szPasswd[] - пароль доступа (если нужен)
*    @iServiceId - номер услуги на сайте
*        //При указании параметра, флаги услуги будут определены автоматически
*        //При отсутствии, номер услуги будет определен по флагам
*    @force_write - проверка введенных данных (true- включить). При отключеной функции все косяки при добавлении- ваши косяки)
*    cmsapi_add_account(id, "a", 180, "parol", "prt", 0, false)
*    (игроку №id с его ником выданы флаги "prt" на 180 минут, пароль- "parol") кикнет его нафиг после добавления в базу)
*/
native cmsapi_add_account(iClient, szAuthType[], iTime = 0,  szPasswd[] = "", szFlags[] = "", iServiceId = 0, force_write = false)
1. Если смысл плагина- выдавать флаги через меню, то проще новый написать.
2. API не удаляет услуги
 
@zhorzh78, это выходит вместо "set_user_flags(pPlayer,read_flags(flags));" вставлять "cmsapi_add_account(iClient, szAuthType[], iTime = 0, szPasswd[] = "", szFlags[] = "", iServiceId = 0, force_write = false)"?

C++:
public PlMenuPriv_Func(id, iKey) {
    switch (iKey) {
        case 8: MenuPlayerPriv(id, ++g_iPlayerMenuPage[id]);
        case 9:{
            if(g_iPlayerMenuPage[id] > 0) {
                MenuPlayerPriv(id, --g_iPlayerMenuPage[id]);
            }
            if(g_iPlayerMenuPage[id] == 0) {
                return PLUGIN_HANDLED;
            }
        }
        default: {
            new pPlayer = g_apPlayerMenuPlayers[id][(g_iPlayerMenuPage[id] * 8) + iKey];

            if (!is_user_connected(pPlayer)) {
                PrintChatColor(id, PRINT_COLOR_PLAYERTEAM,"!tИгрок вышел, выберите другого игрока.");
                MenuPlayerPriv(id, g_iPlayerMenuPage[id]);
                return PLUGIN_HANDLED;
            }
           
            new name[2][64];
            get_user_name(id,name[0],charsmax(name[]));
            get_user_name(pPlayer,name[1],charsmax(name[]));
           
            new flags[24]
            get_pcvar_string(cvar_set_flags, flags, charsmax(flags));  
           
           [COLOR=rgb(226, 80, 65)] [/COLOR][B][COLOR=rgb(226, 80, 65)]set_user_flags(pPlayer,read_flags(flags));[/COLOR][/B]
            remove_user_flags(pPlayer,read_flags("z"));
           
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM,"!tВы выдали права игроку !g%s.",name[1]);
            PrintChatColor(pPlayer, PRINT_COLOR_PLAYERTEAM,"!t!g %s !t,супер админ !g %s !tвыдал вам права на карту.",name[1],name[0]);
           
        }
    }
    return PLUGIN_HANDLED;
}
 
@D1m0n41k, Да, как в описании, заполнив все данные по услуге (флаги, время, идентификатор)
Код:
cmsapi_add_account(id, "a", 180, "parol", "prt", 0, false)
Но, если выдавать только на карту, то лучше использовать cmsapi_set_user_flags
 
@zhorzh78, подскажите пожалуйста, что я делаю не так?

//// Admin_Donat.sma
//
// C:\Users\D1m0n\Desktop\ъюьяшы ЄюЁ\╩юьяшы ЄюЁ 1.8.3\Admin_Donat.sma(125) : error 029: invalid expression, assumed zero
// C:\Users\D1m0n\Desktop\ъюьяшы ЄюЁ\╩юьяшы ЄюЁ 1.8.3\Admin_Donat.sma(125) : error 029: invalid expression, assumed zero
// C:\Users\D1m0n\Desktop\ъюьяшы ЄюЁ\╩юьяшы ЄюЁ 1.8.3\Admin_Donat.sma(125) : warning 215: expression has no effect
// C:\Users\D1m0n\Desktop\ъюьяшы ЄюЁ\╩юьяшы ЄюЁ 1.8.3\Admin_Donat.sma(125) : error 029: invalid expression, assumed zero
// C:\Users\D1m0n\Desktop\ъюьяшы ЄюЁ\╩юьяшы ЄюЁ 1.8.3\Admin_Donat.sma(125) : fatal error 107: too many error messages on one line
//
// Compilation aborted.
// 4 Errors.
// Could not locate output file C:\Users\D1m0n\Desktop\ъюьяшы ЄюЁ\╩юьяшы ЄюЁ 1.8.3\compiled\Admin_Donat.amx (compile failed).
//
// Compilation Time: 0,28 sec
// ----------------------------------------

Press enter to exit ...

C++:
#include <amxmodx>
#include <gamecms5>
#include <cstrike>
#include <amxmisc>

#define PLUGIN "Admin_Donat"
#define VERSION "1.2"
#define AUTHOR "kRyMcHaN1n"

const MENU_LENGTH = 512;

//Для меню из игроков.
new g_iPlayerMenuPage[33];                // Текущая страница меню
new g_apPlayerMenuPlayers[33][32];        // Соотношение пункта к игроку в меню

new cvar_set_flags;

new CHATTAG[] = "!t[!gINFO!t]";            // Префикс в чате изменять тут


public is_access_flag(id,cvar_flag) {
    new szFlags[24]
    get_pcvar_string(cvar_flag, szFlags, 23)
    
    if(read_flags(szFlags) & get_user_flags(id)) {
        return true;
    }
    return false;
}

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

    // Регистрируем меню игроков и меню выдачи привилегии
    register_menu("PlMenu", 1023, "PlMenu_Func");
    register_menu("PlPrivMenu", 1023, "PlMenuPriv_Func");

    cvar_set_flags = register_cvar("cvar_set_flags" , "bcdefjmpstu");

    register_clcmd("adm_donat","PlMenu_Func")
}

public plugin_cfg()
{
    new configsdir[128]
    get_localinfo("amxx_configsdir", configsdir, 127)
    server_cmd("exec %s/Admin_System/Settings.cfg", configsdir)
}

//Меню из игроков привелегия на карту.
public PlayerMenuPriv(id) {
    MenuPlayerPriv(id, g_iPlayerMenuPage[id] = 0);
    return PLUGIN_HANDLED;
}
public MenuPlayerPriv(id, iPage ) {
    if (iPage < 0)
        return PLUGIN_HANDLED;
    
    new apPlayers[32];
    new iPlayers;
    new szMenu[MENU_LENGTH], szName[64];
    new pPlayer;
    
    get_players(apPlayers, iPlayers); 
    new i = min(iPage * 8, iPlayers);   
    new iStart = i - (i % 8); 
    new iEnd = min(iStart + 8, iPlayers);
    iPage = iStart / 8;
    
    g_apPlayerMenuPlayers[id] = apPlayers;
    g_iPlayerMenuPage[id] = iPage;
    
    new iLen = formatex(szMenu, sizeof(szMenu), "\yПривелегия на карту\d: \r\R%d/%d^n^n",iPage + 1, ((iPlayers - 1) / 8) + 1)
    new bitsKeys = MENU_KEY_0;
    new iItem;

    // Цикл из игроков
    for (i = iStart; i < iEnd; i++) {   
        pPlayer = apPlayers[i];
        if(!is_user_connected(pPlayer))
            continue;
        get_user_name(pPlayer,szName,sizeof(szName));
        
        
        if(is_user_connected(pPlayer) || !is_user_bot(pPlayer)) {
            bitsKeys |= (1 << iItem);
            iLen += formatex(szMenu[iLen], sizeof(szMenu) - iLen, "\r%d. \w%s^n", ++iItem, szName);
        }
    }
    
    if (iEnd < iPlayers) {     
        bitsKeys |= MENU_KEY_9;
        formatex(szMenu[iLen], sizeof(szMenu) - iLen, "^n\r9. \wДалее^n\r0. \wНазад");
    } else
        formatex(szMenu[iLen], sizeof(szMenu) - iLen, "^n\r0. \wНазад");
    
    return show_menu(id, bitsKeys, szMenu, -1, "PlPrivMenu");
}
public PlMenuPriv_Func(id, iKey) {
    switch (iKey) {
        case 8: MenuPlayerPriv(id, ++g_iPlayerMenuPage[id]);
        case 9:{
            if(g_iPlayerMenuPage[id] > 0) {
                MenuPlayerPriv(id, --g_iPlayerMenuPage[id]);
            }
            if(g_iPlayerMenuPage[id] == 0) {
                return PLUGIN_HANDLED;
            }
        }
        default: {
            new pPlayer = g_apPlayerMenuPlayers[id][(g_iPlayerMenuPage[id] * 8) + iKey];

            if (!is_user_connected(pPlayer)) {
                client_print_color(id, 0, "%s !tИгрок вышел, выберите другого игрока.", CHATTAG);
                MenuPlayerPriv(id, g_iPlayerMenuPage[id]);
                return PLUGIN_HANDLED;
            }
            
            new name[2][64];
            get_user_name(id,name[0],charsmax(name[]));
            get_user_name(pPlayer,name[1],charsmax(name[]));
            
            new szFlags[24];
            get_pcvar_string(cvar_set_flags, szFlags, charsmax(szFlags));

            cmsapi_set_user_flags(id, const szFlags[], iTime = -1, const szServiceName[] = "Вип на карту", bSilent = false);
            remove_user_flags(pPlayer,read_flags("z"));
            
            client_print_color(id, 0, "%s !tВы выдали права игроку !g%s.", CHATTAG, name[1]);
            client_print_color(pPlayer, 0,"%s !g%s !t,Администратор !g %s !tвыдал вам права на карту.", CHATTAG, name[1],name[0]);
            
        }
    }
    return 1;
}
 
@zhorzh78, спасибо большое :)
Скомпилировался, но выдало варнинг, что iTime нигде не используется.
Это имеет значение?

//// Admin_Donat.sma
//
// C:\Users\D1m0n\Desktop\ъюьяшы ЄюЁ\╩юьяшы ЄюЁ 1.8.3\Admin_Donat.sma(127) : warning 204: symbol is assigned a value that is never used: "iTime"
// Header size: 748 bytes
// Code size: 3896 bytes
// Data size: 6784 bytes
// Stack/heap size: 16384 bytes
// Total requirements: 27812 bytes
//
// 1 Warning.
// Done.
//
// Compilation Time: 0,28 sec
// ----------------------------------------

Press enter to exit ...
 
@zhorzh78, но такой варнинг выдает, если я дописываю в начале кода: new iTime;
А если не дописываю, то выдает ошибку компиляции:

//// Admin_Donat.sma
//
// C:\Users\D1m0n\Desktop\ъюьяшы ЄюЁ\╩юьяшы ЄюЁ 1.8.3\Admin_Donat.sma(127) : error 017: undefined symbol "iTime"
//
// 1 Error.
// Could not locate output file C:\Users\D1m0n\Desktop\ъюьяшы ЄюЁ\╩юьяшы ЄюЁ 1.8.3\compiled\Admin_Donat.amx (compile failed).
//
// Compilation Time: 0,27 sec
// ----------------------------------------

Press enter to exit ...
 
@D1m0n41k,
C++:
cmsapi_set_user_flags(id, szFlags, -1, "Вип на карту");
 
@D1m0n41k, так если ты хочешь ставить админки только на карту, то зачем весь этот переполох?
Используй set_user_flags, и будет тебе счастья
 
@sania886, ну тупой же я:confused:
Думал что без API выдаваться не будут:sneaky:
 
да, но только я по другому сделал, и не в этом плагине.
 
@sania886,

C++:
//Меню из игроков привелегия на карту.
public PlayerMenuPriv(id) {
    MenuPlayerPriv(id, g_iPlayerMenuPage[id] = 0);
    return PLUGIN_HANDLED;
}
public MenuPlayerPriv(id, iPage ) {
    if (iPage < 0)
        return PLUGIN_HANDLED;
    
    new apPlayers[32];
    new iPlayers;
    new szMenu[MENU_LENGTH], szName[64];
    new pPlayer;
    
    get_players(apPlayers, iPlayers); 
    new i = min(iPage * 8, iPlayers);   
    new iStart = i - (i % 8); 
    new iEnd = min(iStart + 8, iPlayers);
    iPage = iStart / 8;
    
    g_apPlayerMenuPlayers[id] = apPlayers;
    g_iPlayerMenuPage[id] = iPage;
    
    new iLen = formatex(szMenu, sizeof(szMenu), "\yПривелегия на карту\d: \r\R%d/%d^n^n",iPage + 1, ((iPlayers - 1) / 8) + 1)
    new bitsKeys = MENU_KEY_0;
    new iItem;

    // Цикл из игроков
    for (i = iStart; i < iEnd; i++) {   
        pPlayer = apPlayers[i];
        if(!is_user_connected(pPlayer))
            continue;
        get_user_name(pPlayer,szName,sizeof(szName));
        
        
        if(is_user_connected(pPlayer) || !is_user_bot(pPlayer)) {
            bitsKeys |= (1 << iItem);
            iLen += formatex(szMenu[iLen], sizeof(szMenu) - iLen, "\r%d. \w%s^n", ++iItem, szName);
        }
    }
    
    if (iEnd < iPlayers) {     
        bitsKeys |= MENU_KEY_9;
        formatex(szMenu[iLen], sizeof(szMenu) - iLen, "^n\r9. \wДалее^n\r0. \wНазад");
    } else
        formatex(szMenu[iLen], sizeof(szMenu) - iLen, "^n\r0. \wНазад");
    
    return show_menu(id, bitsKeys, szMenu, -1, "PlPrivMenu");
}
public PlMenuPriv_Func(id, iKey) {
    switch (iKey) {
        case 8: MenuPlayerPriv(id, ++g_iPlayerMenuPage[id]);
        case 9:{
            if(g_iPlayerMenuPage[id] > 0) {
                MenuPlayerPriv(id, --g_iPlayerMenuPage[id]);
            }
            if(g_iPlayerMenuPage[id] == 0) {
                return PLUGIN_HANDLED;
            }
        }
        default: {
            new pPlayer = g_apPlayerMenuPlayers[id][(g_iPlayerMenuPage[id] * 8) + iKey];

            if (!is_user_connected(pPlayer)) {
                PrintChatColor(id, PRINT_COLOR_PLAYERTEAM,"!tИгрок вышел, выберите другого игрока.");
                MenuPlayerPriv(id, g_iPlayerMenuPage[id]);
                return PLUGIN_HANDLED;
            }
            
            new name[2][64];
            get_user_name(id,name[0],charsmax(name[]));
            get_user_name(pPlayer,name[1],charsmax(name[]));
            
            new flags[24]
            get_pcvar_string(cvar_set_flags, flags, charsmax(flags));   
            
            set_user_flags(pPlayer,read_flags(flags));
            remove_user_flags(pPlayer,read_flags("z"));
            
            PrintChatColor(id, PRINT_COLOR_PLAYERTEAM,"!tВы выдали права игроку !g%s.",name[1]);
            PrintChatColor(pPlayer, PRINT_COLOR_PLAYERTEAM,"!t!g %s !t,супер админ !g %s !tвыдал вам права на карту.",name[1],name[0]);
            
        }
    }
    return PLUGIN_HANDLED;
}
 
@D1m0n41k, зачем тебе после set_user_flags, remove_user_flags?
И что ты по другому сделал?
 
@sania886, это другой совсем код, совершенно отличающийся от того, который в исходнике в первом посту.
Не знаю зачем, правда, код писал не я, я только его вытащил.
 
Назад
Сверху