Awp limit для only dd2  [Решено]

To improve servers/Для улучшения серверов
Аватар пользователя

Автор темы
Tur!nA^^
Сообщений: 5
Зарегистрирован: 25 ноя 2016, 07:56
STEAM_ID:

Awp limit для only dd2

Сообщение Tur!nA^^ » 22 дек 2016, 15:13

Код: Выбрать все

#include <amxmodx>
#include <fakemeta>

#define AWP_LIMIT 3            // Кол-во AWP на одну команду :)
#define ACCESS_IMMUNITY    ADMIN_LEVEL_H    // Иммунитет к функциям плагина. Для отключения Пропишите ADMIN_ALL

new bool:g_bUseAwp[33];
new awp_count[3];

public plugin_init()
{
    #define VERSION "1.07"
    register_plugin("Lite AwpLimit", VERSION, "neygomon")
    register_cvar("lite_awplimit", VERSION, FCVAR_SERVER | FCVAR_SPONLY);
    
    new sPref
[][] = {"awp_", "aim_", "35hp", "fy_"};
    new map[32]; get_mapname(map, charsmax(map));
    for(new i; i < sizeof sPref; i++)
    {
        if(containi(map, sPref[i]) != -1)
        {
            pause("ad");
            return;
        }
    }
    
    register_menucmd
(register_menuid("BuyRifle", true), (1<<4|1<<5), "OldMenusHook");
    register_clcmd("menuselect", "ClCmdMenuSelect");
    register_clcmd("drop", "ClCmdDrop");
    register_clcmd("awp", "cmdawp");
    register_clcmd("magnum", "cmdawp");

    register_event("WeapPickup", "eWeapPickup", "b");
    register_event("DeathMsg", "eDeathMsg", "a");
    register_logevent("LeRoundStart", 2, "1=Round_Start");
}

public cmdawp(id, team)
{
#if ACCESS_IMMUNITY != ADMIN_ALL
    if(get_user_flags(id) & ACCESS_IMMUNITY)
        return PLUGIN_CONTINUE;
#endif    
    if(!team) team = get_user_team(id);
    if(awp_count[team] >= AWP_LIMIT)
    {
        ChatColor(id, "^1[^4Россия(OnLine)^1] ^4Достигнуто максимальное количество AWP на команду ^1[^3%d ^4/ ^3%d^1]", awp_count[team], AWP_LIMIT);
        return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}

public OldMenusHook(id, iKey)
{
#if ACCESS_IMMUNITY != ADMIN_ALL
    if(get_user_flags(id) & ACCESS_IMMUNITY)
        return PLUGIN_CONTINUE;
#endif
    return CheckKeys(id, iKey);
}

public ClCmdMenuSelect(id)
{
#if ACCESS_IMMUNITY != ADMIN_ALL
    if(get_user_flags(id) & ACCESS_IMMUNITY)
        return PLUGIN_CONTINUE;
#endif
    if(!is_user_alive(id) || get_pdata_int(id, 205) != 6)
        return PLUGIN_CONTINUE;

    new sSlot[3]; 
    if
(read_argv(1, sSlot, charsmax(sSlot)))
        return CheckKeys(id, str_to_num(sSlot));
    return PLUGIN_CONTINUE;    
}

CheckKeys(id, iKey)
{
    new team = get_user_team(id);
    if((team == 1 && iKey != 4) || (team == 2 && iKey != 5))
        return PLUGIN_CONTINUE;
    cmdawp(id, team);
    return PLUGIN_HANDLED;    
}

public ClCmdDrop(id)
{
    if(~pev(id, pev_weapons) & (<< CSW_AWP) || !g_bUseAwp[id]) return;
    
    new team 
= get_user_team(id);
    if(awp_count[team])
        awp_count[team]--;
    g_bUseAwp[id] = false;
}
 
 

Код: Выбрать все

public eWeapPickup(id)
{
    new 
team get_user_team(id);
    new 
IsUseAwp = (pev(idpev_weapons) & (<< CSW_AWP)) ? 0;
    switch(
IsUseAwp)
    {
        case 
0:
        {
            if(
g_bUseAwp[id])
            {
                if(
awp_count[team])
                    
awp_count[team]--;
                
g_bUseAwp[id] = false;
            }
        }
        case 
1:
        {
            if(
g_bUseAwp[id]) return;
#if ACCESS_IMMUNITY != ADMIN_ALL            
            
if(~get_user_flags(id) & ACCESS_IMMUNITY && awp_count[team] >= AWP_LIMIT)
#else
            
if(awp_count[team] >= AWP_LIMIT)
#endif            
            
{
                
ChatColor(id"^1[^4Россия(OnLine)^1] ^4Достигнуто максимальное количество AWP на команду ^1[^3%d ^4/ ^3%d^1]"awp_count[team], AWP_LIMIT);
                
set_task(0.1"drop_awp"id);
            }
            else
            {
                
awp_count[team]++;
                
g_bUseAwp[id] = true;
            }    
        }
        
    }
}

public 
eDeathMsg() 
    
FuncDiscDeath(read_data(2));

public 
client_disconnect(id)
    
FuncDiscDeath(id);

FuncDiscDeath(id)
{
    if(!
g_bUseAwp[id]) return;
    
    new 
team get_user_team(id);
    if(
awp_count[team])
        
awp_count[team]--;
    
g_bUseAwp[id] = false;
}

public 
drop_awp(id)
    
engclient_cmd(id"drop""weapon_awp");

public 
LeRoundStart()
{
    new 
players[32], pnumi;
    
arrayset(awp_count03);

    
get_players(playerspnum"ae""TERRORIST");
    for(
0pnumi++)
    {
        if(
pev(players[i], pev_weapons) & (<< CSW_AWP))
        {
            
g_bUseAwp[players[i]] = true;
            
awp_count[1]++;
        } else 
g_bUseAwp[players[i]] = false;
    }
    
get_players(playerspnum"ae""CT");
    for(
0pnumi++)
    {
        if(
pev(players[i], pev_weapons) & (<< CSW_AWP))
        {
            
g_bUseAwp[players[i]] = true;
            
awp_count[2]++;
        } else 
g_bUseAwp[players[i]] = false;
    }  
}

stock ChatColor(const id, const szMessage[], any:...)
{
    static 
szMsg[190], IdMsg
    
vformat(szMsgcharsmax(szMsg), szMessage3);
    
    if(!
IdMsgIdMsg get_user_msgid("SayText");
    
    
message_begin(MSG_ONEIdMsg, .player id);
    
write_byte(id);
    
write_string(szMsg);
    
message_end();
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватар пользователя

Dame-DaNNers
Администраторы
Администраторы
Сообщений: 120
Зарегистрирован: 22 янв 2015, 15:31
STEAM_ID:
Благодарил (а): 32 раза
Поблагодарили: 16 раза
Контактная информация:

Re: Awp limit для only dd2

Сообщение Dame-DaNNers » 22 дек 2016, 16:20

Принято во внимание. Остается на рассмотрении.

Аватар пользователя

Dame-DaNNers
Администраторы
Администраторы
Сообщений: 120
Зарегистрирован: 22 янв 2015, 15:31
STEAM_ID:
Благодарил (а): 32 раза
Поблагодарили: 16 раза
Контактная информация:

Re: Awp limit для only dd2

Сообщение Dame-DaNNers » 22 дек 2016, 16:27

Принято во внимание. Остается на рассмотрении.

Код будет другого автора. Связанный с определенным количеством оружия.
А именно AWP, SG550, G3SG, SCOUT

Код: Выбрать все

#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

#define SHIELD_LIMIT         2    // Кол-во Tactical Shield на команду.
#define SG550_G3SG_LIMIT     2    // Кол-во Скорострелок на команду.
#define AWP_LIMIT         2    // Кол-во AWP на команду.

#define ADMIN_NONE -1
#define ACCESS_IMMUNITY    ADMIN_NONE    // Иммунитет к функциям плагина. Для отключения Пропишите ADMIN_NONE

enum _:WEAPONS 
{ 
    SHIELD 
= 0,
    SGs,
    AWP
}

new g_iWeaponCount[3][WEAPONS];
new bool:g_bUseWeapon[33][WEAPONS];

public plugin_init()
{
    #define VERSION "1.1 Beta 5"
    register_plugin("Weapons Limit", VERSION, "neygomon");
    
    new sPref
[][] = {"awp_", "aim_", "35hp", "fy_"};
    new map[32]; get_mapname(map, charsmax(map));
    for(new i; i < sizeof sPref; i++)
    {
        if(containi(map, sPref[i]) != -1)
        {
            pause("ad");
            return;
        }
    }
    register_menucmd(register_menuid("BuyRifle", true), MENU_KEY_5|MENU_KEY_6, "WPMenusHook");
    register_menucmd(register_menuid("BuyItem", true), MENU_KEY_8, "HookBuyShield");    
    register_menucmd
(-31, MENU_KEY_5|MENU_KEY_6, "WPMenusHook");
    register_menucmd(-34, MENU_KEY_8, "HookBuyShield");
    
    register_clcmd
("drop", "ClCmdDrop");
    register_clcmd("awp", "cmdawp");
    register_clcmd("magnum", "cmdawp");
    register_clcmd("shield", "cmdshield");
    register_clcmd("sg550", "cmdsg");
    register_clcmd("g3sg1", "cmdsg");

    RegisterHam(Ham_Touch, "weapon_shield", "HamHookTouchShield", true);
    register_event("WeapPickup", "eWeapPickup", "be");
    register_event("DeathMsg", "eDeathMsg", "a");
    register_logevent("LeRoundStart", 2, "1=Round_Start");
}

public cmdawp(id)
{
#if ACCESS_IMMUNITY != ADMIN_NONE
    if(get_user_flags(id) & ACCESS_IMMUNITY)
        return PLUGIN_CONTINUE;
#endif
    return WeaponsHandler(id, get_user_team(id), AWP);
}

public cmdshield(id)
{
#if ACCESS_IMMUNITY != ADMIN_NONE
    if(get_user_flags(id) & ACCESS_IMMUNITY)
        return PLUGIN_CONTINUE;
#endif
    return WeaponsHandler(id, get_user_team(id), SHIELD);
}
public cmdsg(id)
{
#if ACCESS_IMMUNITY != ADMIN_NONE
    if(get_user_flags(id) & ACCESS_IMMUNITY)
        return PLUGIN_CONTINUE;
#endif
    return WeaponsHandler(id, get_user_team(id), SGs);
}


public WPMenusHook(id, iKey)
{
#if ACCESS_IMMUNITY != ADMIN_NONE
    if(get_user_flags(id) & ACCESS_IMMUNITY)
        return PLUGIN_CONTINUE;
#endif
    switch(get_user_team(id))
    {
        case 1:
        {
            if(iKey == 4) return WeaponsHandler(id, 1, AWP);
            else return WeaponsHandler(id, 1, SGs);
        }
        case 2:
        {
            if(iKey == 4) return WeaponsHandler(id, 2, SGs);
            else return WeaponsHandler(id, 2, AWP);
        }
    }
    return PLUGIN_CONTINUE;
}

 

Код: Выбрать все

public HookBuyShield(id)
{
#if ACCESS_IMMUNITY != ADMIN_NONE
    if(get_user_flags(id) & ACCESS_IMMUNITY)
        return PLUGIN_CONTINUE;
#endif
    return WeaponsHandler(id, get_user_team(id), SHIELD);
}

public WeaponsHandler(id, team, weapon)
{
    new data[2]; data[1] = -1;

    switch(weapon)
    {
        case SHIELD:
        {
            if(g_iWeaponCount[team][SHIELD] >= SHIELD_LIMIT)
            {
                client_print(id, print_center, "*** Доступно только %d щита на мелких картах! ***", SHIELD_LIMIT);
                data[1] = SHIELD;
            }
        }
        case SGs:
        {
            if(g_iWeaponCount[team][SGs] >= SG550_G3SG_LIMIT)
            {
                client_print(id, print_center, "*** Доступно только %d скорострелки на мелких картах! ***", SG550_G3SG_LIMIT);
                data[1] = SGs;
            }
        }
        case AWP:
        {
            if(g_iWeaponCount[team][AWP] >= AWP_LIMIT)
            {
                client_print(id, print_center, "*** Доступно только %d AWP на мелких картах! ***", AWP_LIMIT);
                data[1] = AWP;
            }
        }
    }
    
    if
(data[1] != -1)
    {
        data[0] = id;
        set_task(0.1, "DropWeapons", _, data, sizeof data);
        return PLUGIN_HANDLED;
    }    
    return PLUGIN_CONTINUE
;
}

public ClCmdDrop(id)
{
    new bitWeapons = pev(id, pev_weapons);
    new team = get_user_team(id);
    if(g_bUseWeapon[id][SHIELD])
    {
        if(g_iWeaponCount[team][SHIELD]) 
            g_iWeaponCount
[team][SHIELD]--;
        g_bUseWeapon[id][SHIELD] = false;    
    
}
    else if(g_bUseWeapon[id][SGs] && (bitWeapons & (<< CSW_SG550) || bitWeapons & (<< CSW_G3SG1)))
    {
        if(g_iWeaponCount[team][SGs]) 
            g_iWeaponCount
[team][SGs]--;
        g_bUseWeapon[id][SGs] = false;
    }
    else if(g_bUseWeapon[id][AWP] && bitWeapons & (<< CSW_AWP))
    {
        if(g_iWeaponCount[team][AWP]) 
            g_iWeaponCount
[team][AWP]--;
        g_bUseWeapon[id][AWP] = false;
    }
}
 

public HamHookTouchShield
(Ent, iClient)
{
    static team, sClassName[8]; pev(iClient, pev_classname, sClassName, charsmax(sClassName));
    if(equal(sClassName, "player"))
    {
        team = get_user_team(iClient);
        
        if
(!g_bUseWeapon[iClient][SHIELD])
        {
#if ACCESS_IMMUNITY != ADMIN_NONE            
            if(~get_user_flags(iClient) & ACCESS_IMMUNITY && g_iWeaponCount[team][SHIELD] >= SHIELD_LIMIT)
#else
            if(g_iWeaponCount[team][SHIELD] >= SHIELD_LIMIT)
#endif            
                WeaponsHandler(iClient, team, SHIELD);    
            else
            
{
                g_iWeaponCount[team][SHIELD]++;
                g_bUseWeapon[iClient][SHIELD] = true;
            }
        }
        else
        
{
            if(g_iWeaponCount[team][SHIELD])
                g_iWeaponCount[team][SHIELD]--;
            g_bUseWeapon[iClient][SHIELD] = false;
        }
    }
}

 

Код: Выбрать все

public eWeapPickup(id)
{
    new team = get_user_team(id);
    new bitWeapons = pev(id, pev_weapons);

    if(!(bitWeapons & (<< CSW_SG550)) && !(bitWeapons & (<< CSW_G3SG1)))
    {
        if(g_bUseWeapon[id][SGs])
        {
            if(g_iWeaponCount[team][SGs]) 
                g_iWeaponCount
[team][SGs]--;
            g_bUseWeapon[id][SGs] = false;
        }    
    
}
    else
    
{
        if(!g_bUseWeapon[id][SGs])
        {
#if ACCESS_IMMUNITY != ADMIN_NONE            
            if(~get_user_flags(id) & ACCESS_IMMUNITY && g_iWeaponCount[team][SGs] >= SHIELD_LIMIT)
#else
            if(g_iWeaponCount[team][SGs] >= SG550_G3SG_LIMIT)
#endif            
                WeaponsHandler(id, team, SGs);
            else
            
{
                g_iWeaponCount[team][SGs]++;
                g_bUseWeapon[id][SGs] = true;
            }
        }
    }
    
    if
(!(bitWeapons & (<< CSW_AWP)))
    {
        if(g_bUseWeapon[id][AWP])
        {
            if(g_iWeaponCount[team][AWP])
                g_iWeaponCount[team][AWP]--;
            g_bUseWeapon[id][AWP] = false;
        }
    }
    else
    
{
        if(g_bUseWeapon[id][AWP])
        {
#if ACCESS_IMMUNITY != ADMIN_NONE            
            if(~get_user_flags(id) & ACCESS_IMMUNITY && g_iWeaponCount[team][AWP] >= SHIELD_LIMIT)
#else
            if(g_iWeaponCount[team][AWP] >= AWP_LIMIT)
#endif            
                WeaponsHandler(id, team, AWP);
            else
            
{
                g_iWeaponCount[team][AWP]++;
                g_bUseWeapon[id][AWP] = true;
            }
        }    
    
}
}

public eDeathMsg() 
    FuncDiscDeath
(read_data(2));

public client_disconnect(id)
    FuncDiscDeath(id);

FuncDiscDeath(id)
{
    new team = get_user_team(id);
    if(g_bUseWeapon[id][SHIELD])
    {
        if(g_iWeaponCount[team][SHIELD]) 
            g_iWeaponCount
[team][SHIELD]--;
        g_bUseWeapon[id][SHIELD] = false;    
    
}
    else if(g_bUseWeapon[id][SGs])
    {
        if(g_iWeaponCount[team][SGs]) 
            g_iWeaponCount
[team][SGs]--;
        g_bUseWeapon[id][SGs] = false;
    }
    else if(g_bUseWeapon[id][AWP])
    {
        if(g_iWeaponCount[team][AWP]) 
            g_iWeaponCount
[team][AWP]--;
        g_bUseWeapon[id][AWP] = false;
    }
}

public DropWeapons(data[])
{
    switch(data[1])
    {
        case SHIELD: engclient_cmd(data[0], "drop", "shield");
        case SGs: 
        
{
            engclient_cmd(data[0], "drop", "weapon_sg550");
            engclient_cmd(data[0], "drop", "weapon_g3sg1");
        }    
        case AWP
: engclient_cmd(data[0], "drop", "weapon_awp");
    }    
}    

public LeRoundStart
()
{
    new players[32], pnum, bitWeapons, team;
    arrayset(g_iWeaponCount[1], 0, 4);
    arrayset(g_iWeaponCount[2], 0, 4);

    get_players(players, pnum, "a");
    for(new i; i < pnum; i++)
    {
        bitWeapons = pev(players[i], pev_weapons);
        team = get_user_team(players[i]);
        arrayset(g_bUseWeapon[players[i]], false, 4);
        if(fm_get_user_shield(players[i]))
        {
            g_iWeaponCount[team][SHIELD]++;
            g_bUseWeapon[players[i]][SHIELD] = true;
        } 
        else if
(bitWeapons & (<< CSW_SG550) || bitWeapons & (<< CSW_G3SG1))
        {
            g_iWeaponCount[team][SGs]++;
            g_bUseWeapon[players[i]][SGs] = true;
        }
        else if(bitWeapons & (<< CSW_AWP))
        {
            g_iWeaponCount[team][AWP]++;
            g_bUseWeapon[players[i]][AWP] = true;
        }
    }
}

stock fm_get_user_shield(id) return get_pdata_int(id, 510) & (1<<24) ? 1 : 0;
 

Аватар пользователя

Автор темы
Tur!nA^^
Сообщений: 5
Зарегистрирован: 25 ноя 2016, 07:56
STEAM_ID:

Re: Awp limit для only dd2

Сообщение Tur!nA^^ » 23 дек 2016, 14:42

ок. Будем ждать

Аватар пользователя

Longipongeoos
Администраторы
Администраторы
Сообщений: 853
Зарегистрирован: 22 янв 2015, 13:26
Откуда: Москва/Moscow
Gender: Boy
Game nick: Longipongeoos
STEAM_ID: STEAM_0:1:46523040
Благодарил (а): 27 раза
Поблагодарили: 179 раза
Контактная информация:

Re: Awp limit для only dd2  [Решено]

Сообщение Longipongeoos » 15 ноя 2017, 18:19



Вернуться в «Proposal/Предложения»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 3 гостей