Ограничить покупку гранат  [Решено]

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

Автор темы
Старая борода
Сообщений: 2
Зарегистрирован: 25 ноя 2016, 07:55
STEAM_ID:

Ограничить покупку гранат

Сообщение Старая борода » 26 фев 2017, 09:48

Можно как нибудь ограничить покупку гранат на респе. Админы забрасывают кучей гранат на сервере dd2.

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

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

Re: Ограничить покупку гранат

Сообщение Dame-DaNNers » 26 фев 2017, 11:39

Данный вопрос уже задавался.
Скоро будет установлен плагин который будет ограничивать игроков и администратор покупать
гранаты более одно раза за раунд.

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

 
/* - AMX Mod X Script --------------------------------------------- *

 *  Grenade Control
 *  (c) Copyright 2003 Willyumyum & Ryan
 *
 *  Customizable Grenade spam control. Works with Old-style menus,
 *  VGUI menus, & Steam buy aliases. Fully compatible with 1.5 & 1.6.
 *
 *  Current Version: 2.0
 *
 *  CHANGELOG:
 *   v2.0"
 *        works with latest release of steam
 *   v1.1:
 *      added: grenade_control.cfg
 *      added: more descriptive messages for when
 *             mp_grencontrol_max** cvars are set to 0

 *  CVARS:
 *
 *  mp_grencontrol              - enable/disable plugin
 *  mp_grencontrol_maxfb        - number of flashbangs allowed per round
 *  mp_grencontrol_maxhe        - number of he grenades allowed per round
 *  mp_grencontrol_maxsg        - number of smoke grenades allowed per round
 *  mp_grencontrol_warn         - number of warnings before punishment
 *  mp_grencontrol_damage       - health to remove on punishment (0 disables)
 *

 * -------------------------------------------------------------- */


#include <amxmodx>
#include <amxmisc>


/* ------------------------------------------- */


#define WARNFB  0
#define WARNHE  1
#define WARNSG  2

#define PICKUP_FB 11
#define PICKUP_HE 12
#define PICKUP_SG 13

#define MAX_FLASHBANGS     2
#define MAX_SMOKEGRENADES  1
#define MAX_HEGRENADES     1


new playerWarn[33][3]

new ammoHE[33], ammoFB[33], ammoSG[33]
new totalHE[33], totalFB[33], totalSG[33]


/* ------------------------------------------- */


public plugin_init() {

    register_plugin("Grenade Control","1.1","Willyumyum & Ryan")

    register_menucmd(register_menuid("BuyItem", -1),(1<<2),"fbBuy")   // Buy FB (old style)
    register_menucmd(register_menuid("BuyItem", -1),(1<<3),"heBuy")   // Buy HE (old style)
    register_menucmd(register_menuid("BuyItem", -1),(1<<4),"sgBuy")   // Buy SG (old style)

    register_menucmd(-34,(1<<2),"fbBuy")                          // Buy FB (VGUI)
    register_menucmd(-34,(1<<3),"heBuy")                          // Buy HE (VGUI)
    register_menucmd(-34,(1<<4),"sgBuy")                          // Buy SG (VGUI)

    register_clcmd("flash",  "fbBuy")                             // Buy FB (Steam)
    register_clcmd("hegren", "heBuy")                             // Buy HE (Steam)
    register_clcmd("sgren",  "sgBuy")                             // Buy SG (Steam)

    register_event("AmmoPickup", "check_pickup", "b")
    register_event("ResetHUD", "event_newround", "b")

    register_cvar("mp_grencontrol",       "")                     // enable/disable plugin
    register_cvar("mp_grencontrol_maxfb", "")                     // number of FB's allowed per round
    register_cvar("mp_grencontrol_maxhe", "")                     // number of HE's allowed per round
    register_cvar("mp_grencontrol_maxsg", "")                     // number of SG's allowed per round
    register_cvar("mp_grencontrol_warn",  "")                     // number of warnings before punishment
    register_cvar("mp_grencontrol_damage","")                     // health to remove on punishment

    /*
    server_cmd("exec addons/amxx/configs/grenade_control.cfg")
    */

    new szConfigFile[64];
    get_configsdir( szConfigFile, 63 );
    format( szConfigFile, 63, "%s/grenade_control.cfg", szConfigFile );
    server_cmd( "exec %s", szConfigFile );

    return PLUGIN_CONTINUE

}

 

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

public event_newround(id) {

    if ( !get_cvar_num("mp_grencontrol") )
        return PLUGIN_CONTINUE

    
// Reset Player info.

    check_nades(id)

    playerWarn[id][WARNFB]   = 0
    playerWarn
[id][WARNHE]   = 0
    playerWarn
[id][WARNSG]   = 0

    totalFB
[id] = ammoFB[id]
    totalHE[id] = ammoHE[id]
    totalSG[id] = ammoSG[id]


    return PLUGIN_CONTINUE

}


public check_pickup(id) {

    if ( !get_cvar_num("mp_grencontrol") )
        return PLUGIN_CONTINUE

    new pickupType 
= read_data(1)

    if ( pickupType == PICKUP_FB ) {
        totalFB[id]++
        ammoFB[id]++
    }

    if ( pickupType == PICKUP_HE ) {
        totalHE[id]++
        ammoHE[id]++
    }

    if ( pickupType == PICKUP_SG ) {
        totalSG[id]++
        ammoSG[id]++
    }

    return PLUGIN_CONTINUE
}


public check_nades(id) {

    new clip, ammo

    
// Flashbangs

    get_user_ammo(id,CSW_FLASHBANG,clip,ammo)
    ammoFB[id]   = ammo


    
// HE Grendades

    get_user_ammo(id,CSW_HEGRENADE,clip,ammo)
    ammoHE[id]   = ammo


    
// Smoke Grenades

    get_user_ammo(id,CSW_SMOKEGRENADE,clip,ammo)
    ammoSG[id]   = ammo


    return PLUGIN_HANDLED

}


public message_warnspam(id,nadeType) {

    switch ( nadeType ) {

        case CSW_FLASHBANG: {

            if ( !get_cvar_num("mp_grencontrol_maxfb") )
                client_print(id, print_center, "*  Server has disabled Flashbangs. *")
            else
                client_print
(id, print_center, "* Only %d Flashbang(s) per round. *", get_cvar_num("mp_grencontrol_maxfb"))

        }

        case CSW_HEGRENADE: {
            if ( !get_cvar_num("mp_grencontrol_maxhe") )
                client_print(id, print_center, "* Server has disabled HE Grenades. *")
            else
                client_print
(id, print_center, "* Only %d HE Grenade(s) per round. *", get_cvar_num("mp_grencontrol_maxhe"))

        }

        case CSW_SMOKEGRENADE: {

            if ( !get_cvar_num("mp_grencontrol_maxsg") )
                client_print(id, print_center, "*  Server has disabled Smoke Grenades. *")
            else
                client_print
(id, print_center, "* Only %d Smoke Grenade(s) per round. *", get_cvar_num("mp_grencontrol_maxsg"))

        }

    }

}


 

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

public restrict_buynade(id,nadeType) {

    check_nades(id)

    if ( nadeType == CSW_FLASHBANG && ammoFB[id] != MAX_FLASHBANGS ) {

        if ( playerWarn[id][WARNFB] ) {

            playerWarn[id][WARNFB]++
            message_warnspam(id,CSW_FLASHBANG)

            if ( playerWarn[id][WARNFB] > get_cvar_num("mp_grencontrol_warn") )
                user_slap(id,get_cvar_num("mp_grencontrol_damage"))

            else
                user_slap
(id,0)

            return PLUGIN_HANDLED

        
}

        if ( totalFB[id] >= get_cvar_num("mp_grencontrol_maxfb") ) {

           playerWarn[id][WARNFB] = 1
           message_warnspam
(id,CSW_FLASHBANG)

           return PLUGIN_HANDLED

        
}

    }

    else if ( nadeType == CSW_HEGRENADE && ammoHE[id] != MAX_HEGRENADES ) {

        if ( playerWarn[id][WARNHE] ) {

            playerWarn[id][WARNHE]++
            message_warnspam(id,CSW_HEGRENADE)

            if ( playerWarn[id][WARNHE] > get_cvar_num("mp_grencontrol_warn") )
                user_slap(id,get_cvar_num("mp_grencontrol_damage"))

            else
                user_slap
(id,0)

            return PLUGIN_HANDLED

        
}

        if ( totalHE[id] >= get_cvar_num("mp_grencontrol_maxhe") ) {

            playerWarn[id][WARNHE] = 1
            message_warnspam
(id,CSW_HEGRENADE)

            return PLUGIN_HANDLED

        
}

    }

    else if ( nadeType == CSW_SMOKEGRENADE && ammoSG[id] != MAX_SMOKEGRENADES ) {

        if ( playerWarn[id][WARNSG] ) {

            playerWarn[id][WARNSG]++
            message_warnspam(id,CSW_SMOKEGRENADE)

            if ( playerWarn[id][WARNSG] > get_cvar_num("mp_grencontrol_warn") )
                user_slap(id,get_cvar_num("mp_grencontrol_damage"))

            else
                user_slap
(id,0)

            return PLUGIN_HANDLED

        
}

        if ( totalSG[id] >= get_cvar_num("mp_grencontrol_maxsg") ) {

            playerWarn[id][WARNSG] = 1
            message_warnspam
(id,CSW_SMOKEGRENADE)

            return PLUGIN_HANDLED

        
}

    }


    return PLUGIN_CONTINUE

}


public fbBuy(id) {

    if ( !get_cvar_num("mp_grencontrol") )
        return PLUGIN_CONTINUE

    if 
( restrict_buynade(id,CSW_FLASHBANG) )
        return PLUGIN_HANDLED


    return PLUGIN_CONTINUE

}


public heBuy(id) {

    if ( !get_cvar_num("mp_grencontrol") )
        return PLUGIN_CONTINUE

    if 
( restrict_buynade(id,CSW_HEGRENADE) )
        return PLUGIN_HANDLED


    return PLUGIN_CONTINUE

}


public sgBuy(id) {

    if ( !get_cvar_num("mp_grencontrol") )
        return PLUGIN_CONTINUE

    if 
( restrict_buynade(id,CSW_SMOKEGRENADE) )
        return PLUGIN_HANDLED


    return PLUGIN_CONTINUE

}
 

Cvars:
mp_grencontrol "1" // включить / отключить плагин
mp_grencontrol_maxfb "2" // количество FB позволено за один раунд
mp_grencontrol_maxhe "2" // число НЕ позволено за один раунд
mp_grencontrol_maxsg "2" // количество SG позволено за один раунд
mp_grencontrol_warn "1" // количество предупреждений , прежде чем будет наказание
mp_grencontrol_damage "99" // Наказание в количестве (Хhp) повреждений после последнего предупреждений
Источник: https://forums.alliedmods.net/showthread.php?p=8009

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

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

Re: Ограничить покупку гранат

Сообщение Dame-DaNNers » 26 фев 2017, 11:43

Что то похожее. Данный плагин не тестировался.

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

/* thanks: 
Thank you for giving ConnorMcLeod plugin API catching purchase this item)
*/

#include <amxmodx>
#include <fakemeta>
#include <cstrike>

#pragma semicolon 1

#define PLUGIN_NAME        "[ALL] Block buy Grenade"
#define PLUGIN_VERS        "1.0"
#define PLUGIN_AUTH        "NIXON"

#define cs_get_user_menu(%0)    get_pdata_int(%0, 205, 0)

new g_BuyForward;
new g_BuyGrenadeNum[33][3];

public plugin_init()    {
    /* [INIT] */
    register_plugin(PLUGIN_NAME, PLUGIN_VERS, PLUGIN_AUTH);
    
    
/* [EVENT] */
    register_logevent("EventRoundStart", 2, "0=World triggered", "1=Round_Start");
    
    
/* [CLCMD] */
    register_clcmd("menuselect", "ClCmd_MenuSelect");
    
    
/* [OTHER] */
    g_BuyForward = CreateMultiForward("client_buy", ET_STOP, FP_CELL, FP_CELL);
}

public client_disconnect(id)    {
    g_BuyGrenadeNum[id][0] = 0;
    g_BuyGrenadeNum[id][1] = 0;
    g_BuyGrenadeNum[id][2] = 0;
}

public client_command(id)    {
    if(is_user_alive(id))    {
        new iCommand[13];
        if(read_argv(0, iCommand, charsmax(iCommand)) < 12)    {
            static Trie: iAliasID = Invalid_Trie;
            if(iAliasID == Invalid_Trie)    {
                iAliasID = TrieCreate();
                TrieSetCell(iAliasID,    "hegren",    CSW_HEGRENADE);
                TrieSetCell(iAliasID,    "sgren",    CSW_SMOKEGRENADE);
                TrieSetCell(iAliasID,    "flash",    CSW_FLASHBANG);
            }
            strtolower(iCommand);
            
            new iID
;
            if(TrieGetCell(iAliasID, iCommand, iID))
                CanBuyItem(id, iID);
        }
    }
    
    return PLUGIN_CONTINUE
;
}

public ClCmd_MenuSelect(id)    {
    if(!is_user_alive(id))
        return PLUGIN_CONTINUE;
    
    new iSlot
[3];
    if(read_argv(1, iSlot, charsmax(iSlot)) == 1)    {
        new sSlot = iSlot[0] - '0';
        if(<= sSlot <= 8)    {
            new iMenu = cs_get_user_menu(id);
            if(iMenu == 10)
                return CanBuyItem(id, sSlot);
        }
    }
    
    return PLUGIN_CONTINUE
;
}

/* [EVNET] */
public EventRoundStart()    {
    for(new i = 1; i <= get_maxplayers(); i++)    {
        if(is_user_connected(i))    {
            g_BuyGrenadeNum[i][0] = 0;
            g_BuyGrenadeNum[i][1] = 0;
            g_BuyGrenadeNum[i][2] = 0;
        }
    }
}

/* [STOCKS] */
stock CanBuyItem(id, iItem)    {
    new iReturn;
    ExecuteForward(g_BuyForward, iReturn, id, iItem);
    if(iReturn != PLUGIN_CONTINUE)
        return PLUGIN_HANDLED;
    
    switch
(iItem)    {
        case 3:    { /* FLASH */
            if(g_BuyGrenadeNum[id][0] < 2)
                g_BuyGrenadeNum[id][0]++;
            else return PLUGIN_HANDLED;
        }
        case 4:    { /* HE */
            if(g_BuyGrenadeNum[id][1] < 1)
                g_BuyGrenadeNum[id][1]++;
            else return PLUGIN_HANDLED;
        }
        case 5:    { /* SMOKE */
            if(g_BuyGrenadeNum[id][2] < 1)
                g_BuyGrenadeNum[id][2]++;
            else return PLUGIN_HANDLED;
        }
    }
    
    return PLUGIN_CONTINUE
;
}
 

Источник: http://c-s.net.ua/forum/topic65237s0.html

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

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

Re: Ограничить покупку гранат  [Решено]

Сообщение Dame-DaNNers » 26 фев 2017, 14:21

Про просьбе игроков на серверах №1, №2 был установлен плагин Grenade_control
Плагин запрещает покупать более (X) количество гранат за один раунд.
При попытке купить более 2 гранат любого типа игрок получи предупреждение, после повторной попытке
игрок получит наказание, затем игрок будет убит.

Изображение
Изображение


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

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

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