Русское сообщество по скриптингу

Определённый человек может использовать оружие.

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Определённый человек может использовать оружие.

Сообщение xDions » 21 ноя 2022, 17:29

Всем добрый вечер читателям и тем кто просто зашёл сюда по интересу. Мне нужна помощь. Я сделал меню с 4 оружиями (Авп, м4, ак, дигл, фамас) и хочу сделать так что бы мог конкретный человек использовать конкретное оружие, например ак. Буду рад если поможете. Через флаги доступа я не хочу делать т.к их в моей сборке очень мало, и оставшиеся флаги хочу в будущем использовать в других целях.
Аватара пользователя
xDions
 
Сообщения: 9
Зарегистрирован: 23 окт 2022, 20:32
Откуда: Беларусь
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев

Re: Определённый человек может использовать оружие.

Сообщение [N][E][M][E][C] » 21 ноя 2022, 19:37

Пробуй на будущее кидать свои попытки!

weapon_menu.ini - скинь в папку <addons/amxmodx/configs>
В каждом пункте доступно по 20 записей, это считаем за пункт, см. ниже цитату
_AWP
STEAM_0:0:2849543341
BOT

Код: Выделить всё
#include <amxmodx>
#include <reapi>

#define INI_FILE "/addons/amxmodx/configs/weapon_menu.ini"
#define PLUGIN "Weapon Menu[RI]"
#define MAX_LEN 32
#define MAX_POINT 5
#define MSG 76

new
    gl_Menu_Access[MAX_POINT][20][MAX_LEN +1],
    gl_iSize[MAX_POINT],
    bool:gl_bStatus[MAX_POINT][MAX_PLAYERS +1];

public plugin_init() {
    new const sName[] = "[N][E][M][E][C]";
    register_plugin(PLUGIN, "rz 0.1", .author = sName);

    register_clcmd("wm_menu", "menu");
    create_file();
}

public create_file() {
    new
        File 
= fopen(INI_FILE, "r");

    if(!_check_file(File, "Error: Lack of plugin configuration %s.amxx", PLUGIN))
        return;

    new
        sTmp
[MAX_LEN +1],
        iPoint = -1,
        iLen;

    while(!feof(File)) {
        fgets(File, sTmp, MAX_LEN);
        trim(sTmp);

        if(sTmp[0] != ';' && sTmp[0] && sTmp[0] != EOS) {
            if(sTmp[0] == '_') {
                if(iPoint >= 0)
                    gl_iSize[iPoint] = iLen;

                ++iPoint;
                iLen = 0;

                continue;
            }

            formatex(gl_Menu_Access[iPoint][iLen++], MAX_LEN, sTmp);
        }
    }

    fclose(File);
}

public client_disconnected(id) {
    for(new i; i < MAX_POINT; ++i)
        gl_bStatus[i][id] = false;
}

public client_authorized(id, const authid[]) {
    for(new i, u; i < MAX_POINT; ++i) {
        for(= 0; u < gl_iSize[i]; ++u) {
            if(equal(authid, gl_Menu_Access[i][u]))
                gl_bStatus[i][id] = true;
        }
    }
}

public menu(id) {
    if(is_user_alive(id)) {
        new
            iMenu 
= menu_create("\yWEAPON \rMENU", "handler_menu"),
            sPoint[][] = {"AWP", "M4A1", "AK-47", "DEAGLE", "FAMAS"};

        for(new i; i < MAX_POINT; ++i)
            menu_additem(iMenu, fmt("%s%s", gl_bStatus[i][id] ? "\w" : "\d", sPoint[i]), fmt("%i", i+1));

        menu_setprop(iMenu, MPROP_EXITNAME, "Выход");
        menu_display(id, iMenu);
    }

    else _Chat(id, "меню, т.к. вы мертвый")
}

public handler_menu(const id, const iMenu, const iTem) {
    menu_destroy(iMenu);

    if(is_user_connected(id) && iTem != MENU_EXIT) {
        new
            sWeapon
[][] = {"awp", "m4a1", "ak47", "deagle", "famas"};

        if(!gl_bStatus[iTem][id]) {
            _Chat(id, sWeapon[iTem])
            return;
        }

        new
            Ammo
[] = {30, 90, 90, 35, 90};

        _give_weapon(id, fmt("weapon_%s", sWeapon[iTem]), Ammo[iTem]);
    }
}

stock _Chat(const id, const sText[]) {
    message_begin(MSG_ONE, MSG, .player = id);
    write_byte(id);
    write_string(fmt("^4WM|^3 Вам не доступно %s", sText));
    message_end();
}

stock _give_weapon(const id, const sWeapon[], const Ammo) {
    new pItem = rg_give_item(id, sWeapon, GT_REPLACE);

    if(is_nullent(pItem))
        return;

    if(Ammo) {
        new iAmmoType = get_member(pItem, m_Weapon_iPrimaryAmmoType);

        if(get_member(id, m_rgAmmo, iAmmoType) < Ammo)
            set_member(id, m_rgAmmo, Ammo, iAmmoType);
    }
}

stock bool:_check_file(const file, const sAbsenceMessage[] = "Error: File is missing", any:...) {
    if(!file) {
        new
            sMsg
[191];
        vformat(sMsg, charsmax(sMsg), sAbsenceMessage, 3);

        pause("a");
        server_print(sMsg);
        return false;
    }

    return true;
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: savotiya и гости: 5