Пользователи, просматривающие тему (Пользователей: 0, Гостей: 0)

  1. Andrey777

    Регистрация:
    30.03.15
    Сообщения:
    358
    Симпатии:
    48
    Пол:
    Мужской
    Skype:
    Andrey777best
    Всем привет, нужен такой плагин думаю многим пригодится от задротов которые не выпускают авп из рук...
    Суть в том: ограничение awp всем игрокам, допустим не больше 2х раундов подряд с авп может играть или покупать, но потом чтобы дропнулось, и 2 раунда без авп с любым другим оружием чтобы нельзя было не купить не поднять итд.. и чтобы колор чат писало допустим вы сыграли 2 раунда подряд используйте любое другое оружие или как то так, желательно с cfg. для удобства настройки плагина...
    Естественоо карты awp, fy, aim не учитываются...
     
  2. neygomon Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    8.581
    Симпатии:
    4.655
    Пол:
    Мужской
    Andrey777, а в cfg то что будет? о_О
     
  3. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.689
    Симпатии:
    1.249
    Пол:
    Мужской
    Странная идея. Вангую, что если после 2 раундов будет дропать авп из рук, игроки останутся недовольны. Разве что после смерти игрока с авп ему не будет давать купить.
    Не учитывать awp, fy, aim можно стандартными средствами amx.
    plugins-awp.ini, plugins-fy.ini, plugins-aim.ini.
     
    ozmosis нравится это.
  4. neygomon Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    8.581
    Симпатии:
    4.655
    Пол:
    Мужской
    Gudaus, ну да, после смерти блочить лучше...
    более честно по сравнению с дропом
     
  5. Andrey777

    Регистрация:
    30.03.15
    Сообщения:
    358
    Симпатии:
    48
    Пол:
    Мужской
    Skype:
    Andrey777best
    Можно и так, после смерти заблочить на 2 раунда покупку...но нужно заблочить не только покупку а любую попытку его взять
    cfg можно и не делать хз зачем написал))
     
    Последнее редактирование: 29.04.15
  6. Andrey777

    Регистрация:
    30.03.15
    Сообщения:
    358
    Симпатии:
    48
    Пол:
    Мужской
    Skype:
    Andrey777best
    neygomon, Напиши плиз этот плагин)), а то за**** меня и игроков задроты с рук не выпускают)
     
  7. neygomon Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    8.581
    Симпатии:
    4.655
    Пол:
    Мужской
    Andrey777, мне не до этого щас.
    я думаю как багу кое какую закрыть =)
     
  8. Andrey777

    Регистрация:
    30.03.15
    Сообщения:
    358
    Симпатии:
    48
    Пол:
    Мужской
    Skype:
    Andrey777best
    neygomon, Привет можешь помочь с плагином, написали мне тут плагин как я и хотел с ограничением авп, но вот почему то CT не могут использовать авп пишет что уже есть в команде хотя никто не брал и не может, ТТ нормально берут авп...
    Код:
    #include <amxmodx>
    #include <fakemeta>
    #include <hamsandwich>
    
    #if AMXX_VERSION_NUM < 183
        #include <colorchat>
    #endif
    
    new const VERSION[] = "1.0";
    
    #define get_bit(%1,%2)   (%1 & (1 << (%2 & 31)))
    #define set_bit(%1,%2)   %1 |= (1 << (%2 & 31))
    #define clr_bit(%1,%2)   %1 &= ~(1 << (%2 & 31))
    
    #define is_primary_weapon(%0) (PRIMARY_WEAPONS_BITSUM & (1 << %0))
    #define OFFSET_WEAPONID 43
    #define EXTRAOFFSET_WEAPONS 4
    
    const PRIMARY_WEAPONS_BITSUM = (1 << CSW_SCOUT) | (1 << CSW_XM1014) | (1 << CSW_MAC10) | (1 << CSW_AUG) | (1 << CSW_UMP45) | (1 << CSW_SG550) | (1 << CSW_GALIL) | (1 << CSW_FAMAS) | (1 << CSW_AWP) | (1 << CSW_MP5NAVY) | (1 << CSW_M249) | (1 << CSW_M3) | (1 << CSW_M4A1) | (1 << CSW_TMP) | (1 << CSW_G3SG1) | (1 << CSW_SG552) | (1 << CSW_AK47) | (1 << CSW_P90) | (1 << 0);
    const MAX_CLIENTS = 32;
    const AUTH_LEN    = 34;
    const IP_LEN      = 16;
    const MSG_LEN     = 191;
    const POST        = 1;
    const PRE         = 0;
    const KEYS        = 511;
    
    enum
    {
        TEAM_UNASSIGNED = 0,
        TEAM_TERRORIST  = 1,
        TEAM_CT         = 2,
        TEAM_SPECTATOR  = 3
    }
    
    new user_team[MAX_CLIENTS + 1], ip[IP_LEN], authid[AUTH_LEN], pcv_awp_timelimit, pcv_awp_limit_by_team, awp_limit_by_team,
    need_block_awp[MAX_CLIENTS + 1], need_block_awp_by_time[MAX_CLIENTS + 1],
    Float: awp_use_time[MAX_CLIENTS + 1], Float: last_ctime[MAX_CLIENTS + 1], Float: awp_timelimit,
    awp_count_by_team[4], awp_access;
    
    new const BLOCK_AUTHID[][] = {
        "",
        ""
    };
    
    new const BLOCK_IP[][] = {
        "",
        ""
    };
    
    
    /*    Список карт на которых нужно отключить плагин
        можно указывать название полностью или только префикс карты
    */
    
    new const MAPLIST_DISABLED[][] = {
        "aim_",
        "awp_",
        "fy_"
    };
    
    /*    Список карт на которых нужна принудительная блокировка, несмотря на условия
        можно указывать название полностью или только префикс карты
    
    */
    
    new const MAPLIST_FORCED[][] = {
        "xxx_"
    };
    
    stock const CHAT_INFO_PREFIX[]          = "^1[^4Лимит|18+|^1]^4";
    stock const AWP_RESTRICT_MSG[]          = "%s На этой карте запрещено пользоваться ^3AWP";
    stock const AWP_RESTRICT_PERSONAL_MSG[] = "%s ^3Вам ^4запрещено использовать ^3AWP. ^4Обратитесь к Администратору";
    stock const AWP_RESTRICT_BY_TIME_MSG[]  = "%s ^3Вы ^4сможете взять ^3AWP, ^4когда сыграете ^3%.0f сек. ^4с другим оружием!";
    stock const AWP_RESTRICT_BY_TEAM_MSG[]  = "%s В команде уже есть ^3%d ^4AWP";
    
    stock const PLAYER[]                   = "player";
    
    public plugin_init()
    {
        register_plugin ("AWP Restrictions", VERSION, "Free");
       
        register_clcmd ("awp", "clcmd_awp");
        register_clcmd ("magnum", "clcmd_awp");
       
        register_event ("TextMsg", "event_restart", "a", "2=#Game_will_restart_in");
        register_menucmd (register_menuid("BuyRifle", 1), KEYS, "buy_rifle");
    
        register_message (get_user_msgid ("TeamInfo"), "msg_TeamInfo");
       
        register_srvcmd  ("amx_reloadcvars", "load_cvars");
    }
    
    public plugin_cfg()
    {
        load_cvars();
       
        new map_name[32];
        get_mapname(map_name, charsmax(map_name));
       
        new i, j, need_pause_plugin, need_block_awp_forcibly;
       
        for (; i < sizeof MAPLIST_DISABLED && !need_pause_plugin; i++) {
            while (MAPLIST_DISABLED[i][j] && map_name[j]) {
                if (map_name[j] == MAPLIST_DISABLED[i][j]) {
                    switch (MAPLIST_DISABLED[i][j + 1]) {
                        case   0: {
                            if (map_name[j + 1] == 0) {
                                need_pause_plugin = 1;
                                break;
                            }
                        }
                        case '_': {
                            if (!MAPLIST_DISABLED[i][j + 2]) {
                                need_pause_plugin = 1;
                                break;
                            }
                        }
                    }
                }
                else {
                    break;
                }
               
                j++;
            }
        }
       
        if (need_pause_plugin) {
            pause("ad");
        }
       
        i = j = 0;
       
        for (; i < sizeof MAPLIST_FORCED && !need_block_awp_forcibly; i++) {
            while (MAPLIST_FORCED[i][j] && map_name[j]) {
                if (map_name[j] == MAPLIST_FORCED[i][j]) {
                    switch (MAPLIST_FORCED[i][j + 1]) {
                        case   0: {
                            if (map_name[j + 1] == 0) {
                                need_block_awp_forcibly = 1;
                                break;
                            }
                        }
                        case '_': {
                            if (MAPLIST_FORCED[i][j + 2] == 0) {
                                need_block_awp_forcibly = 1;
                                break;
                            }
                        }
                    }
                }
                else {
                    break;
                }
               
                j++;
            }
        }
       
        if (need_block_awp_forcibly) {
            state block_awp_forcibly_enabled;
            register_event ("CurWeapon", "event_CurWeapon", "be", "1=1", "2=18");
        }
        else {
            state block_awp_forcibly_disabled;
            register_event ("CurWeapon", "event_CurWeapon", "be", "1=1");
           
            if (awp_timelimit > 0.0) {
                RegisterHam (Ham_Killed, PLAYER, "player_Killed_Post", POST);
                RegisterHam (Ham_Spawn,  PLAYER, "player_Spawn_Post", POST);
            }
        }
       
        if (awp_limit_by_team) {
            RegisterHam (Ham_AddPlayerItem, PLAYER, "AddPlayerItem", POST);
            RegisterHam (Ham_RemovePlayerItem, PLAYER, "RemovePlayerItem", PRE);
        }
        else {
            awp_access = -1;
        }
    }
    
    public load_cvars()
    {
        static is_cvars_registered;
       
        log_amx((is_cvars_registered) ? "Cvars Reloaded" : "Cvars Loaded");
       
        if (!is_cvars_registered) {
            pcv_awp_timelimit       = register_cvar ("awp_timelimit", "120");
            pcv_awp_limit_by_team   = register_cvar ("awp_limit_by_team", ""); //кол-во AWP в команде
           
            is_cvars_registered = 1;
        }
       
        server_exec();
        awp_timelimit     = get_pcvar_float (pcv_awp_timelimit);
        awp_limit_by_team = get_pcvar_num (pcv_awp_limit_by_team);
    }
    
    public event_restart()
    {
        #emit CONST.ALT need_block_awp
        #emit ZERO.PRI
        #emit FILL 132
       
        if (awp_timelimit > 0.0) {
            #emit CONST.ALT need_block_awp_by_time
            #emit ZERO.PRI
            #emit FILL 132
           
            arrayset(_:awp_use_time, _:0.0, sizeof awp_use_time);
        }
       
        if (awp_limit_by_team) {
            #emit CONST.ALT awp_count_by_team
            #emit ZERO.PRI
            #emit FILL 16
           
            awp_access = 0;
        }
    }
    
    public client_putinserver(id) <block_awp_forcibly_enabled> {}
    
    public client_putinserver(id) <block_awp_forcibly_disabled>
    {
        need_block_awp[id] = need_block_awp_by_time[id] = 0;
        awp_use_time[id] = 0.0;
       
        if (awp_limit_by_team) {
            clr_bit(awp_access, id);
        }
       
        get_user_ip(id, ip, charsmax(ip), 1)
       
        for(new i; i < sizeof BLOCK_IP; i++) {
            if (equal(ip, BLOCK_IP[i]) ) {
                need_block_awp[id] = 1;
                break;
            }
        }
       
       
        if (!need_block_awp[id]) {
            get_user_authid(id, authid, charsmax(authid));
           
            for(new i; i < sizeof BLOCK_AUTHID; i++) {
                if (equal(authid, BLOCK_AUTHID[i])) {
                    need_block_awp[id] = 1;
                    break;
                }
            }
        }
    }
    
    public clcmd_awp(id) <block_awp_forcibly_enabled>
    {
        return PLUGIN_HANDLED;
    }
    
    public clcmd_awp(id) <block_awp_forcibly_disabled>
    {
        if (need_block_awp[id]) {
            client_print_color (id, print_team_default, AWP_RESTRICT_PERSONAL_MSG, CHAT_INFO_PREFIX);
            return PLUGIN_HANDLED;
        }
        else if (need_block_awp_by_time[id]) {
            client_print_color (id, print_team_default, AWP_RESTRICT_BY_TIME_MSG, CHAT_INFO_PREFIX, awp_use_time[id]);
            return PLUGIN_HANDLED;
        }
        else if (awp_count_by_team[user_team[id]] >= awp_limit_by_team && !get_bit(awp_access, id)) {
            client_print_color (id, print_team_default, AWP_RESTRICT_BY_TEAM_MSG, CHAT_INFO_PREFIX, awp_limit_by_team);
            return PLUGIN_HANDLED;
        }
       
        return PLUGIN_CONTINUE;
    }
    
    public buy_rifle(id, item) <block_awp_forcibly_disabled>
    {
        static need_block, block_awp_msg[MSG_LEN];
        need_block = 0;
       
        if (need_block_awp[id]) {
            need_block = 1;
            formatex (block_awp_msg, charsmax(block_awp_msg), AWP_RESTRICT_MSG, CHAT_INFO_PREFIX);
        }
        else if (need_block_awp_by_time[id]) {
            need_block = 1;
            formatex (block_awp_msg, charsmax(block_awp_msg), AWP_RESTRICT_BY_TIME_MSG, CHAT_INFO_PREFIX, awp_use_time[id]);
        }
        else if (awp_count_by_team[user_team[id]] >= awp_limit_by_team && !get_bit(awp_access, id)) {
            need_block = 1;
            formatex (block_awp_msg, charsmax(block_awp_msg), AWP_RESTRICT_BY_TEAM_MSG, CHAT_INFO_PREFIX, awp_limit_by_team);
        }
       
        if (need_block) {
            switch (user_team[id]) {
                case TEAM_CT: {
                    if (item == 5) {
                        client_print_color (id, print_team_default, block_awp_msg);
                        return PLUGIN_HANDLED;
                    }
                }
                case TEAM_TERRORIST: {
                    if (item == 4) {
                        client_print_color (id, print_team_default, block_awp_msg);
                        return PLUGIN_HANDLED;
                    }
                }
            }
        }
       
        return PLUGIN_CONTINUE;
    }
    
    
    public buy_rifle(id, item) <block_awp_forcibly_enabled>
    {
        switch (user_team[id]) {
            case TEAM_CT: {
                if (item == 5) {
                    client_print_color (id, print_team_default, AWP_RESTRICT_MSG, CHAT_INFO_PREFIX);
                    return PLUGIN_HANDLED;
                }
            }
            case TEAM_TERRORIST: {
                if (item == 4) {
                    client_print_color (id, print_team_default, AWP_RESTRICT_MSG, CHAT_INFO_PREFIX);
                    return PLUGIN_HANDLED;
                }
            }
        }
       
       
        return PLUGIN_CONTINUE;
    }
    
    
    public event_CurWeapon(id) <block_awp_forcibly_enabled>
    {
        engclient_cmd (id, "drop", "weapon_awp");
        client_print_color (id, print_team_default, AWP_RESTRICT_MSG, CHAT_INFO_PREFIX);
    }
    
    
    public event_CurWeapon(id) <block_awp_forcibly_disabled>
    {
        static csw_id, last_csw_id[MAX_CLIENTS + 1],
        Float: ctime;
       
        csw_id = read_data(2);
       
        if (is_primary_weapon(csw_id)) {
            ctime = get_gametime();
           
            if (csw_id == CSW_AWP) {
                if (need_block_awp[id]) {
                    engclient_cmd (id, "drop", "weapon_awp");
                    client_print_color (id, print_team_default, AWP_RESTRICT_PERSONAL_MSG, CHAT_INFO_PREFIX);
                }
                else if (need_block_awp_by_time[id]) {
                    engclient_cmd (id, "drop", "weapon_awp");
                    client_print_color (id, print_team_default, AWP_RESTRICT_BY_TIME_MSG, CHAT_INFO_PREFIX, awp_use_time[id]);
                }
                else if (awp_count_by_team[user_team[id]] >= awp_limit_by_team && !get_bit(awp_access, id)) {
                    engclient_cmd (id, "drop", "weapon_awp");
                    client_print_color (id, print_team_default, AWP_RESTRICT_BY_TEAM_MSG, CHAT_INFO_PREFIX, awp_limit_by_team);
                }
                else if (last_csw_id[id] == CSW_AWP || !is_primary_weapon(last_csw_id[id])) {
                    awp_use_time[id] += ctime - last_ctime[id];
                }
            }
            else {
                awp_use_time[id] -= ctime - last_ctime[id];
               
                if (awp_use_time[id] < 0.0) {
                    awp_use_time[id] = 0.0;
                    need_block_awp_by_time[id] = 0;
                }
            }
        }
       
        last_ctime[id]  = ctime;
        last_csw_id[id] = csw_id;
    }
    
    public player_Spawn_Post(id)
    {
        last_ctime[id]  = get_gametime();
    }
    
    public player_Killed_Post(id, attacker, should_gib)
    {
        if (awp_use_time[id] > awp_timelimit) {
            awp_use_time[id] = awp_timelimit;
            need_block_awp_by_time[id] = 1;
            client_print_color (id, print_team_default, AWP_RESTRICT_BY_TIME_MSG, CHAT_INFO_PREFIX, awp_timelimit);
        }
    }
    
    public AddPlayerItem (id, entity)
    {
        if (get_pdata_int (entity, OFFSET_WEAPONID, EXTRAOFFSET_WEAPONS) == CSW_AWP) {
            static team; team = user_team[id];
    
            if (awp_count_by_team[team] < awp_limit_by_team) {
                set_bit(awp_access, id);
                ++awp_count_by_team[team];
            }
            else {
                ++awp_count_by_team[team];
            }
        }
    }
    
    public RemovePlayerItem (id, entity)
    {
        if (get_pdata_int (entity, OFFSET_WEAPONID, EXTRAOFFSET_WEAPONS) == CSW_AWP) {
            static team; team = user_team[id];
    
            if (awp_count_by_team[team] > 0) {
                --awp_count_by_team[team];
                clr_bit(awp_access, id);
            }
        }
    }
    
    public msg_TeamInfo ()
    {
        static id, team_name_tmp[11];
        id = get_msg_arg_int(1);
        get_msg_arg_string(2, team_name_tmp, charsmax(team_name_tmp));
       
        switch (team_name_tmp[0]) {
            case 'T': {
                if (awp_count_by_team[user_team[id]] && get_bit(awp_access, id)) {
                    --awp_count_by_team[user_team[id]];
                    user_team[id] = TEAM_TERRORIST;
                    ++awp_count_by_team[user_team[id]];
                }
                else {
                    user_team[id] = TEAM_TERRORIST;
                }
            }
            case 'C': {
                if (awp_count_by_team[user_team[id]] && get_bit(awp_access, id)) {
                    --awp_count_by_team[user_team[id]];
                    user_team[id] = TEAM_CT;
                    ++awp_count_by_team[user_team[id]];
                }
                else {
                    user_team[id] = TEAM_CT;
                }
            }
            case 'S': user_team[id] = TEAM_SPECTATOR;
            case 'U': user_team[id] = TEAM_UNASSIGNED;
        }
    }
     
  9. neygomon Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    8.581
    Симпатии:
    4.655
    Пол:
    Мужской
    Andrey777, потому что написали говно.
    есть 2 плагина лимитов у меня.
    чем не устраивают? -_-