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

Блокировка покупки вещей/оружия в autobuy

Новые плагины для AMX Mod X, которые были добавлены в базу плагинов нашего форума. Плагины еще не утвеждены администратором/модератором.

Модератор: Leonidddd

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

Данный раздел форума служит для добавления новых плагинов в базу нашего форума. После того, как администратор/модератор утвердит плагин, он будет перемещен в раздел "Утвежденные плагины".

Правила при добавлении новых плагинов:

1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. Обязательно выкладывайте исходник sma плагина. Запрещено выкладывать amxx файл.
4. Обязательно указывайте настоящих авторов плагина, если вы использовали чьи-то наработки или функции, указывайте их авторов в сообщении.
5. Необходимо заполнять детальную информацию о плагине (версию, настройки, используемые модули, список изменений и другую).

Блокировка покупки вещей/оружия в autobuy

Сообщение артист666 » 25 май 2016, 02:03

Автор: артист666
Версия: 1.0
Описание: Давно как - то меня просили заблокировать покупку брони, и я не смог её сделать из - за автозакупки.
Ведь там отправляется только команда "autobuy" или "rebuy"(последняя закупка).
И сейчас, копавшись в совершенно не связанном с этим кодом - осенило.

Да, может я плохо гуглил, и давно уже эту "Америку" открыли.
Но всё - таки выложу этот нехитрый способ, может кому - то пригодится.

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

public plugin_init()
{
    register_plugin("Block Autobuy", "1.0", "artist666")
    
    
// Регистрируем все команды автозакупки
    register_clcmd("autobuy", "block_autobuy")
    register_clcmd("cl_autobuy", "block_autobuy")
    register_clcmd("cl_setautobuy", "block_autobuy")
}
public block_autobuy(id)
{
    // Получаем строку из autobuy.txt оказывается 2м аргументом отсылается
    static argv[33], buffer[512]; read_argv(1, buffer, charsmax(buffer))
    
    
// Пока в подопытной строке есть что - то, пробегаемся по ней
    while(strlen(buffer))
    {
        // Отщипываем по 1му слову от строки, удаляя его из основной строки
        strtok(buffer, argv, charsmax(argv), buffer, charsmax(buffer), ' ')
        
        
// Проверяем каждую команду
        if(equal(argv, "vest", 4)) continue // И если в списке есть то, что хотим заблокировать - не выдаём
        engclient_cmd(id, argv) // Выдаём игроку не запрещённые предметы или оружие
    }
    return PLUGIN_HANDLED // Блокируем саму автозакупку


П.с. а вот с повторной покупкой немного сложней.
Не придумал пока как...
Но если например блокировать с самого начала, то и в повторной покупке предмета не будет...
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Блокировка покупки вещей/оружия в autobuy

Сообщение артист666 » 24 авг 2017, 01:14

Кажется с rebuy тоже получается:

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

#define PrimaryWeapon    585 //(оружие csw_id)
#define PrimaryAmmo    586 //(количество патрон для оружия, нужно делить на пачки...)
#define Defuser        592 //(1 - значит есть)
#define Armor        594 //(1 - бронежилет, 2 - бронежилет и каска)
#define HEGrenade    589 //(количество макс 1)
#define Flashbang    590 //(количество макс 2)
#define SmokeGrenade    591 //(количество макс 1)
#define SecondaryWeapon    587 //(пистолеты csw_id)
#define SecondaryAmmo    588 //(количество патрон для пистолетов, нужно делить на пачки...)
#define NightVision    593 //(1 - значит есть)
#define Shield        585 //(99 - значит есть, ещё бывает 22 и 28, х.з. что это...)

new const buy_ammount[] = {0, 13, 0, 30, 0, 8, 0, 12, 30, 0, 30, 50, 12, 30, 30, 30, 12, 30, 10, 30, 30, 8, 30, 30, 30, 0, 7, 30, 30, 0, 50, 0, 0}
new const buy_name[][] =
{
    "", "p228", "shield", "scout", "hegren", "xm1014", "", "mac10", "aug", "sgren", "elites",
    "fn57", "ump45", "sg550", "galil", "famas", "usp", "glock", "awp", "mp5", "m249", "m3",
    "m4a1", "tmp", "g3sg1", "flash", "deagle", "sg552", "ak47", "", "p90", "vest", "vesthelm"
}

public plugin_init()
{
    
    register_clcmd
("ppfire", "functions")
    register_clcmd("rebuy", "hook_rebuy")
    register_clcmd("cl_rebuy", "hook_rebuy")
    register_clcmd("cl_setrebuy", "hook_rebuy")
}
public functions(id)
{
    static i; i = 583
    
    while
(++< 596) server_print("^n%i %i", i, get_pdata_int(id, i))
}
public hook_rebuy(id)
{
    if(!get_pdata_int(id, Armor)) return PLUGIN_CONTINUE
    
    static b
; b = get_pdata_int(id, PrimaryWeapon)
    
    if
(> 0) engclient_cmd(id, buy_name[b])
    
    static a
; a = get_pdata_int(id, PrimaryAmmo)
    
    if
(> 0)
    {
        a /= buy_ammount[b]
        
        while
(-->= 0) engclient_cmd(id, "buyammo1")
    }
    if(get_pdata_int(id, Defuser) > 0) engclient_cmd(id, "defuser")
    
    
/*b = get_pdata_int(id, Armor)
    
    if(b == 1) engclient_cmd(id, "vest")
    else if(b == 2) engclient_cmd(id, "vesthelm")*/
    
    b 
= get_pdata_int(id, HEGrenade)
    
    if
(> 0)
    {
        while(-->= 0) engclient_cmd(id, "hegren")
    }
    b = get_pdata_int(id, Flashbang)
    
    if
(> 0)
    {
        while(-->= 0) engclient_cmd(id, "flash")
    }
    b = get_pdata_int(id, SmokeGrenade)
    
    if
(> 0)
    {
        while(-->= 0) engclient_cmd(id, "sgren")
    }
    b = get_pdata_int(id, SecondaryWeapon)
    
    if
(> 0) engclient_cmd(id, buy_name[b])
    
    a 
= get_pdata_int(id, SecondaryAmmo)
    
    if
(> 0)
    {
        a /= buy_ammount[b]
        
        while
(-->= 0) engclient_cmd(id, "buyammo2")
    }
    if(get_pdata_int(id, NightVision) > 0) engclient_cmd(id, "nvgs")
    if(get_pdata_int(id, Shield) == 99) engclient_cmd(id, "shield")
    return PLUGIN_HANDLED


Не допилено пока...
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn


Вернуться в Добавленные новые плагины

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

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