Поставить проверку на флаг

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
68
Реакции
8
Помог
2 раз(а)
Код:
#include amxmodx
#include fakemeta
#include hamsandwich

#define PLUGIN                    "Knives Shop"
#define VERSION                    "1.3a"
#define AUTHOR                    "OverGame"

#define OFFSET_MONEY            115
#define OFFSET_WEAPON            41
#define OFFSET_LINUX            4

#define FILE_BASE                "/addons/amxmodx/configs/knives.ini"

enum KNIVES_DATA
{
    NAME[33],
    VIEW[128],
    PLAYER[128],
    COST
};

new Array:g_iArrayKnives, g_iKnives[KNIVES_DATA], g_iKnife[33];
new g_iReplace[][][] =
{
    {"!g", "^4"},
    {"!t", "^3"},
    {"!y", "^1"},
    {"\r", ""},
    {"\y", ""},
    {"\d", ""}
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
   
    register_clcmd("say /knife", "Show_MenuShop");
    register_clcmd("say_team /knife", "Show_MenuShop");
   
    RegisterHam(Ham_Item_Deploy, "weapon_knife", "Ham_Item_Deploy_Knife_Post", true);
   
    register_dictionary("knives.txt");
}

public plugin_natives()
{
    register_native("get_user_knives", "native_get_user_knives", true);
    register_native("set_user_knives", "native_set_user_knives", true);
}

public native_get_user_knives(iClient)
    return g_iKnife[iClient];

public native_set_user_knives(iClient, iKnife, iMessage)
{
    if((g_iKnife[iClient] = iKnife) == iKnife)
    {
        ArrayGetArray(g_iArrayKnives, iKnife, g_iKnives);
       
        if(iMessage)
            UTIL_SayText(iClient, "%L", LANG_PLAYER, "KNIVES_GIVE", g_iKnives[NAME]);
    }
    else
        return false;
   
    return true;
}

public plugin_precache()
{
    g_iArrayKnives = ArrayCreate(KNIVES_DATA);
   
    new szBuffer[256], szCost[10], iFile = fopen(FILE_BASE, "rt");
   
    while(!feof(iFile))
    {
        fgets(iFile, szBuffer, 255);
        trim(szBuffer);
       
        if(szBuffer[0] == '"')
        {
            parse(szBuffer, g_iKnives[NAME], 32, szCost, 9, g_iKnives[VIEW], 127, g_iKnives[PLAYER], 127);
            g_iKnives[COST] = str_to_num(szCost);
           
            if(!equal(g_iKnives[VIEW], ""))
                engfunc(EngFunc_PrecacheModel, g_iKnives[VIEW]);
           
            if(!equal(g_iKnives[PLAYER], ""))
                engfunc(EngFunc_PrecacheModel, g_iKnives[PLAYER]);
           
            ArrayPushArray(g_iArrayKnives, g_iKnives);
        }
        else
            continue;
    }
   
    fclose(iFile);
}

public client_putinserver(iClient)
    g_iKnife[iClient] = 0;

public Ham_Item_Deploy_Knife_Post(iWeapon)
{
    new iClient = get_pdata_cbase(iWeapon, OFFSET_WEAPON, OFFSET_LINUX);
   
    if(is_user_alive(iClient))
    {
        ArrayGetArray(g_iArrayKnives, g_iKnife[iClient], g_iKnives);
   
        if(!equal(g_iKnives[VIEW], ""))
            set_pev(iClient, pev_viewmodel2, g_iKnives[VIEW]);
       
        if(!equal(g_iKnives[PLAYER], ""))
            set_pev(iClient, pev_weaponmodel2, g_iKnives[PLAYER]);
    }
   
    return HAM_IGNORED;
}

public Show_MenuShop(iClient)
{
    new iMenu = menu_create(UTIL_GetReplace("KNIVES_TITLE"), "Handle_MenuShop");
   
    for(new i; i < ArraySize(g_iArrayKnives); i++)
    {
        new szTemp[10];
        num_to_str(i, szTemp, charsmax(szTemp));
       
        menu_additem(iMenu, UTIL_GetItemCost(iClient, i), szTemp);
    }
   
    menu_setprop(iMenu, MPROP_BACKNAME, UTIL_GetReplace("KNIVES_BACK"));
    menu_setprop(iMenu, MPROP_NEXTNAME, UTIL_GetReplace("KNIVES_NEXT"));
    menu_setprop(iMenu, MPROP_EXITNAME, UTIL_GetReplace("KNIVES_EXIT"));
   
    menu_display(iClient, iMenu, 0);
    return PLUGIN_HANDLED;
}

public Handle_MenuShop(iClient, iMenu, iItem)
{    
    if(iItem == MENU_EXIT)
    {
        menu_destroy(iMenu);
        return PLUGIN_HANDLED;
    }
   
    new szData[15], szName[64], iAccess, iCallBack;
    menu_item_getinfo(iMenu, iItem, iAccess, szData, 14, szName, 63, iCallBack);
   
    new iKeys = str_to_num(szData);
    ArrayGetArray(g_iArrayKnives, iKeys, g_iKnives);
   
    if(g_iKnife[iClient] == iKeys)
    {
        UTIL_SayText(iClient, "%L", LANG_PLAYER, "KNIVES_TAKEN");
        return PLUGIN_HANDLED;
    }
    else
    if(g_iKnives[COST] <= fm_get_user_money(iClient))
    {
        fm_set_user_money(iClient, fm_get_user_money(iClient) - g_iKnives[COST]);
        UTIL_SayText(iClient, "%L", LANG_PLAYER, g_iKnives[COST] ? "KNIVES_BUYED" : "KNIVES_SELECTED", g_iKnives[NAME]);
        UTIL_Set_User_Knife(iClient, iKeys);
    }
    else
        UTIL_SayText(iClient, "%L", LANG_PLAYER, "KNIVES_NO_MONEY");
   
    return PLUGIN_HANDLED;
}

bool:UTIL_Set_User_Knife(iClient, iKnife)
{
    g_iKnife[iClient] = iKnife;
   
    if(is_user_alive(iClient))
    {
        engclient_cmd(iClient, "weapon_knife");
        ArrayGetArray(g_iArrayKnives, g_iKnife[iClient], g_iKnives);
       
        if(!equal(g_iKnives[VIEW], ""))
            set_pev(iClient, pev_viewmodel2, g_iKnives[VIEW]);
       
        if(!equal(g_iKnives[PLAYER], ""))
            set_pev(iClient, pev_weaponmodel2, g_iKnives[PLAYER]);
       
        return true;
    }
   
    return false;
}

stock UTIL_SayText(client, const szMessage[], any:...)
{
    new iCount = 1, iPlayers[32];
    static szPost[188], i;
    vformat(szPost, 187, szMessage, 3);
   
    for(i = 0; i < sizeof(g_iReplace); i++)
        replace_all(szPost, 187, g_iReplace[i][0], g_iReplace[i][1]);
   
    if(client) iPlayers[0] = client; else get_players(iPlayers, iCount, "ch");
    {
        for(i = 0; i < iCount; i++)
        {
            if(is_user_connected(iPlayers[i]))
            {
                message_begin( MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]);
                write_byte(iPlayers[i]);
                write_string(szPost);
                message_end();
            }
        }
    }
}

stock UTIL_GetItemCost(iClient, iKnife)
{
    static szReplace[128];
    ArrayGetArray(g_iArrayKnives, iKnife, g_iKnives);
   
    if(iKnife == g_iKnife[iClient])
        format(szReplace, 127, "\d%s", g_iKnives[NAME]);
    else
    if(g_iKnives[COST])
        format(szReplace, 127, "%s \d[%d]", g_iKnives[NAME], g_iKnives[COST]);
    else
        format(szReplace, 127, "%s", g_iKnives[NAME]);
   
    return szReplace;
}

stock UTIL_GetReplace(const szRepl[])
{
    static szReplace[128];
    format(szReplace, 127, "%L", LANG_PLAYER, szRepl);
   
    return szReplace;
}

stock fm_get_user_money(iClient)
    return get_pdata_int(iClient, OFFSET_MONEY);

stock fm_set_user_money(iClient, iCost, iFlash = true)
{
    set_pdata_int(iClient , OFFSET_MONEY , iCost);
    message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Money"), _, iClient);
    write_long(iCost);
    write_byte(iFlash ? 1 : 0);
    message_end();
}
помогите поставит проверку на флаг что бы меню могли юзать только вип игроки флаг t
 

Вложения

ifx

Сообщения
330
Реакции
149
Помог
4 раз(а)
Код:
if(get_user_flags(id) & ADMIN_LEVEL_H) // если у игрока флаг "t", ADMIN_LEVEL_G - "s"
    {
        твой код тут
    }
    else
    {
        client_print(id, print_chat, "sosi pisos") // выводим в чат отрицательный результат
        return;
    }
 
Сообщения
271
Реакции
347
Помог
15 раз(а)
ifx, зачем так, если можно так?
Код:
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
    return PLUGIN_HANDLED
    
// code
 
Сообщения
2,713
Реакции
2,995
Помог
59 раз(а)
ifx, зачем так, если можно так?
Код:
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
    return PLUGIN_HANDLED
 
// code
Denzer, зачем так, если можно так?
Код:
if(~get_user_flags(id) & ADMIN_LEVEL_H)
    return PLUGIN_HANDLED
  
// code
31 Авг 2018
wopox1337, зачем так, если можно так?
Код:
register_clcmd("say /knife", "Show_MenuShop", .flags = ADMIN_LEVEL_H);

public Show_MenuShop(iClient, level, cid)
{
    if(!cmd_access(iClient, level, cid, 1))
        return PLUGIN_HANDLED;
 

ifx

Сообщения
330
Реакции
149
Помог
4 раз(а)
Denzer, мне нужно значение \else\ - чтобы писать мессадж игрокам, типа: купи вип на сайте бла бла, когда игрок без флага жмет на пункт в меню только для випов напр.
 
Сообщения
1,419
Реакции
2,509
Помог
59 раз(а)
ifx, если я правильно понял то:
Код:
if(~get_user_flags(id) & ADMIN_LEVEL_H)
{
    client_print_color(id, print_team_red, "^3Вы не купили VIP");
    return PLUGIN_HANDLED;
}
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
w0w, я знаю некоторые условия, но что значит ~
if(~get...
 
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)

В данном разделе размещаются темы, в которых требуется помощь с доработкой или объяснением материала.
В теме должны быть опубликованы попытки (diff кода или последовательность действий) самостоятельного поиска решения.


Тема закрыта. Тем более, что уже был дан ответ в нескольких вариациях.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу