Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Steam Bonus - плагин

, Как убрать меню тем кто в спекторах
Статус пользователя amatory1230
сообщение 11.7.2018, 15:48
Сообщение #1


Стаж: 7 лет 11 месяцев

Сообщений: 83
Благодарностей: 12
Полезность: 115

Всем привет!

Установил на сервер плагин steam_bonus.amxx
Плагин показывает меню для steam игроком
И возникла такая проблема что меню открывается тем кто сидит в спекторах
Можно как то убрать это меню для тех кто в спекторах
Просто напрягает лишний мусор на сервере.

Добавлены 2 файла steam_bonus.sma и скриншот

Прикрепленные файлы:
Прикрепленное изображение

Прикрепленные файлы:
Прикрепленный файл  steam_bonus.sma ( 8,04 килобайт ) Кол-во скачиваний: 46


☆ Твори Добро ☆
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя PolaZ
сообщение 23.7.2018, 10:56
Сообщение #2


Стаж: 8 лет

Сообщений: 33
Благодарностей: 2
Полезность: 48

amatory1230,
Добавьте проверку на живого игрока "if(is_user_alive(id)" в 52 строке.

Должно получиться так "if(is_user_alive(id) && is_user_steam(id) && !menu_block[id])"

Проверить не могу, вроде должно работать.

Cкрытый текст
Код
#include <amxmodx>
#include <fakemeta>

#define VERSION "1.0"

#define OFFSET_TEAM 114
#define OFFSET_MONEY 115
#define OFFSET_LINUX 5

#define fm_get_user_team(%0) get_pdata_int(%0, OFFSET_TEAM)
#define fm_get_user_money(%0) get_pdata_int(%0, OFFSET_MONEY)

static cvar_money, cvar_money_max, cvar_health, cvar_time_menu;
static id_money, id_saytext, maxplayers, bool:menu_block[33];
static bool:tryder[33], model[33][64];

public plugin_precache() {
    engfunc(EngFunc_PrecacheModel, "models/player/sb_steam_ct/sb_steam_ct.mdl");
    engfunc(EngFunc_PrecacheModel, "models/player/sb_steam_te/sb_steam_te.mdl");
}

public plugin_init() {
    register_plugin("Steam bonus", VERSION, "OverGame");
    register_event("HLTV", "event_round_hltv", "a", "1=0", "2=0");
    register_forward(FM_SetClientKeyValue, "fmKeyValue");
    register_forward(FM_ClientUserInfoChanged, "fmClientUserInfoChanged");
    
    register_concmd("say /sb", "cmd_steam_bonus");
    register_concmd("say_team /sb", "cmd_steam_bonus");
    
    register_cvar("amx_sb_money", "300");
    register_cvar("amx_sb_money_max", "16000");
    register_cvar("amx_sb_health", "10");
    register_cvar("amx_time_menu", "10");
    
    register_menucmd(register_menuid("show_steam_menu"), (1<<0|1<<1|1<<2|1<<9), "handle_steam_menu");
    
    maxplayers = get_maxplayers();
    id_money = get_user_msgid("Money");
    id_saytext = get_user_msgid("SayText");
}

public plugin_cfg() {
    cvar_money = get_cvar_num("amx_sb_money");
    cvar_money_max = get_cvar_num("amx_sb_money_max");
    cvar_health = get_cvar_num("amx_sb_health");
    cvar_time_menu = get_cvar_num("amx_time_menu");
}

public event_round_hltv() {
    for(new id = 1; id <= maxplayers; id++) {
        if(is_user_alive(id) && is_user_steam(id) && !menu_block[id]) {
            show_steam_menu(id);
            
            switch(fm_get_user_team(id)) {
                case 2: fm_set_user_model(id, "sb_steam_ct");
                default: fm_set_user_model(id, "sb_steam_te");
            }
        }
    }
}

public fmKeyValue(id, const info[], const key[]) {
    if(tryder[id] && equal(key, "model")) {
        return FMRES_SUPERCEDE;
    }
    
    return FMRES_IGNORED;
}

public fmClientUserInfoChanged(id) {
    if(!tryder[id]) {
        return FMRES_IGNORED;
    }
    
    new modelname[64];
    fm_get_user_model(id, modelname, charsmax(modelname));
    
    if(!equal(modelname, model[id])) {
        fm_set_user_model(id, model[id]);
    }
    
    return FMRES_IGNORED;
}

public client_putinserver(id) {
    menu_block[id] = false;
    tryder[id] = false;
}

public cmd_steam_bonus(id) {
    if(is_user_steam(id)) {
        #if (AMXX_VERSION_NUM < 183)
            client_print_color(id, "!g[STEAM] !tР’С‹ !g[%s] !tменю подарков !g[steam]!t!", (menu_block[id] = menu_block[id] ? false : true) ? "выключили" : "включили");
        #else
            client_print_color(id, id, "!g[STEAM] !tР’С‹ !g[%s] !tменю подарков !g[steam]!t!", (menu_block[id] = menu_block[id] ? false : true) ? "выключили" : "включили");
        #endif
    }
    else {
        #if (AMXX_VERSION_NUM < 183)
            client_print_color(id, "!g[STEAM] !tР’С‹ РЅРµ являетесь !g[steam] !tРёРіСЂРѕРєРѕРј!");
        #else
            client_print_color(id, id, "!g[STEAM] !tР’С‹ РЅРµ являетесь !g[steam] !tРёРіСЂРѕРєРѕРј!");
        #endif
    }
    
    return PLUGIN_HANDLED;
}

show_steam_menu(id) {
    new name[33];
    get_user_name(id, name, charsmax(name));
    
    new menu[512], len = format(menu, charsmax(menu), "\yБонусы для Steam!^n\yПривет, \r%s\y!^n^n", name);
    
    len += format(menu[len], charsmax(menu) - len, "\y[1] \wПолучить деньги^n");
    len += format(menu[len], charsmax(menu) - len, "\y[2] \wНабор гранат^n");
    len += format(menu[len], charsmax(menu) - len, "\y[3] \wДобавить \r[%d] \wР·РґРѕСЂРѕРІСЊСЏ^n^n", cvar_health);
    
    format(menu[len], charsmax(menu) - len, "\y[0] \wОтказаться РѕС‚ Р±РѕРЅСѓСЃРѕРІ");
    return show_menu(id, (1<<0|1<<1|1<<2|1<<9), menu, cvar_time_menu, "show_steam_menu");
}

public handle_steam_menu(id, key) {
    switch(key) {
        case 0: {
            new money = fm_get_user_money(id) + cvar_money;
            fm_set_user_money(id, (money > cvar_money_max) ? cvar_money_max : money);
            
            #if (AMXX_VERSION_NUM < 183)
                client_print_color(id, "!g[STEAM] !tР’С‹ получили деньги РІ размере !g[%d$]", cvar_money);
            #else
                client_print_color(id, id, "!g[STEAM] !tР’С‹ получили деньги РІ размере !g[%d$]", cvar_money);
            #endif
        }
        case 1: {
            fm_give_item(id, "weapon_hegrenade");
            fm_give_item(id, "weapon_smokegrenade");
            fm_give_item(id, "weapon_flashbang");
            
            set_pdata_int(id, 387, 2, OFFSET_LINUX);
            
            #if (AMXX_VERSION_NUM < 183)
                client_print_color(id, "!g[STEAM] !tР’С‹ получили !g[Набор гранат]!t!");
            #else
                client_print_color(id, id, "!g[STEAM] !tР’С‹ получили !g[Набор гранат]!t!");
            #endif
        }
        case 2: {
            new health = pev(id, pev_health) + cvar_health;
            set_pev(id, pev_health, float(health));
            
            #if (AMXX_VERSION_NUM < 183)
                client_print_color(id, "!g[STEAM] !tР’С‹ пополнили Р·РґРѕСЂРѕРІСЊРµ РЅР° !g[%d]!t!", cvar_health);
            #else
                client_print_color(id, id, "!g[STEAM] !tР’С‹ пополнили Р·РґРѕСЂРѕРІСЊРµ РЅР° !g[%d]!t!", cvar_health);
            #endif
        }
        case 9: {
            menu_block[id] = true;
            
            #if (AMXX_VERSION_NUM < 183)
                client_print_color(id, "!g[STEAM] !tР’С‹ заблокировали получение подарков!");
                client_print_color(id, "!g[STEAM] !tЧтобы вернуть подарки, напишите !g/sb!t!");
            #else
                client_print_color(id, id, "!g[STEAM] !tР’С‹ заблокировали получение подарков!");
                client_print_color(id, id, "!g[STEAM] !tЧтобы вернуть подарки, напишите !g/sb!t!");
            #endif
        }
    }
    
    return PLUGIN_HANDLED;
}

stock bool:is_user_steam(id) {
    /* [Author: Sh0oter] */
    static dp_pointer;
    if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider"))) {
        server_cmd("dp_clientinfo %d", id);
        server_exec();
        
        return (get_pcvar_num(dp_pointer) == 2) ? true : false;
    }
    
    return false;
}

stock fm_set_user_money(id, money, flash = true) {
    set_pdata_int(id, OFFSET_MONEY, money);
    message_begin(MSG_ONE_UNRELIABLE, id_money, _, id);
    write_long(money);
    write_byte(flash);
    message_end();
    
    return true;
}

stock fm_get_user_model(id, modelname[], len) {
    engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", modelname, len);
}

stock fm_set_user_model(id, modelname[]) {
    copy(model[id], charsmax(model[]), modelname);
    engfunc(EngFunc_SetClientKeyValue, id, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", modelname);
    
    return (tryder[id] = true);
}

stock fm_give_item(id, const item[]) {
    if(!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5)) {
        return 0;
    }
    
    new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item));
    if(!pev_valid(ent)) {
        return 0;
    }
    
    new Float:origin[3];
    pev(id, pev_origin, origin);
    
    set_pev(ent, pev_origin, origin);
    set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
    dllfunc(DLLFunc_Spawn, ent);
    
    new solid = pev(ent, pev_solid);
    dllfunc(DLLFunc_Touch, ent, id);
    if(pev(ent, pev_solid) != solid) {
        return ent;
    }
    
    engfunc(EngFunc_RemoveEntity, ent);
    return -1;
}

#if (AMXX_VERSION_NUM < 183)
    stock client_print_color(id, const text[], any:...) {
        new message[128];
        vformat(message, charsmax(message), text, 3);
        
        replace_all(message, charsmax(message), "!g", "^x04");
        replace_all(message, charsmax(message), "!n", "^x01");
        replace_all(message, charsmax(message), "!t", "^x03");
        
        switch(id) {
            case 0: for(new i = 1; i <= maxplayers; i++) {
                if(is_user_connected(i)) {
                    message_begin(MSG_ONE_UNRELIABLE, id_saytext, _, i);
                    write_byte(i);
                    write_string(message);
                    message_end();
                }
            }
            default: if(is_user_connected(id)) {
                message_begin(MSG_ONE_UNRELIABLE, id_saytext, _, id);
                write_byte(id);
                write_string(message);
                message_end();
            }
        }
    }
#endif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: