Ограничение для магазина

Maloi

Пользователь
Регистрация
7 Июл 2017
Сообщения
27
Симпатии
0
Пол
Мужской
Всем привет, такой вопрос, возможно ли сделать так чтобы можно было покупать предмет в магазине 3 раза за карту, и как достигнут будет лимит, никто не сможет его больше покупать
 

Vaqtincha

aggressive
Разработчик
Скриптер
Регистрация
28 Янв 2018
Сообщения
958
Симпатии
682
Пол
Мужской
Да можно. В строке 1337 после условие is_user_alive добавляешь нужное условие типа g_iCountUsed[id] >= MAX_USE
 

To be or not to be

Пользователь
Регистрация
9 Июн 2017
Сообщения
1.217
Симпатии
304
Maloi, приложите исходный код магазина
 

pantrypei

Пользователь
Регистрация
10 Янв 2018
Сообщения
164
Симпатии
29
Предупреждения
30
Пол
Мужской

Maloi

Пользователь
Регистрация
7 Июл 2017
Сообщения
27
Симпатии
0
Пол
Мужской
C++:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <biohazard>

#define PLUGIN_NAME        "bio_shop"
#define PLUGIN_VERSION        "2.0"
#define PLUGIN_AUTHOR        "laucer"

#pragma tabsize 0

new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_0

public plugin_init()
{
    register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR )
    register_clcmd("nightvision", "bioshop")
    register_menu("Menu 1", keys, "BIOshop")
}

public bioshop(id)
{

    static menu[512], iLen
    new money = cs_get_user_money(id)
    iLen = 0

    if(is_user_alive(id) && !is_user_zombie(id))
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\yМагазин^n")
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\wУ тебя: \y%d$^n^n", money)
        
        if(cs_get_user_money(id) < 8000) 
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d1. HE граната - \d8000$^n")
        else
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\w1. HE граната - \y8000$^n")
        keys |= MENU_KEY_1
        
        if(cs_get_user_money(id) < 2500)
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d2. Flash граната - \d4000$^n")
        else
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\w2. Flash граната - \y4000$^n")
        keys |= MENU_KEY_2
        
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "^n\w0. Выход")
        keys |= MENU_KEY_0

        show_menu(id, keys, menu, -1, "Menu 1")
    }
    return PLUGIN_CONTINUE
}

public BIOshop(id, key)
{                 
    switch(key)
    {
    case 0:
        {
            if(cs_get_user_money(id) < 8000)
            {
                client_print(id, print_center, "Недостаточно денег!")
                return PLUGIN_HANDLED
            }
                if( cs_get_user_bpammo( id, CSW_HEGRENADE ) > 0 )
        {
            client_print( id,  print_center, "У тебя это уже есть!" );
            return PLUGIN_HANDLED
        }
                else
                {
                        cs_set_user_money(id, cs_get_user_money(id) - 8000)
            give_item( id, "weapon_hegrenade" );
        }
            {
                client_print(id, print_chat, "")
                return PLUGIN_HANDLED
            }
            
        }
    case 1:
        {
            if(cs_get_user_money(id) < 4000)
            {
                client_print(id, print_center, "Недостаточно денег!")
                return PLUGIN_HANDLED;
            }
                if( cs_get_user_bpammo( id, CSW_FLASHBANG ) > 0 )
        {
            if( cs_get_user_bpammo( id, CSW_FLASHBANG ) == 1 )
            {
                                cs_set_user_money(id, cs_get_user_money(id) - 4000)
                give_item( id, "weapon_flashbang" )
            }
                        else
                        {
                client_print( id,  print_center, "У тебя это уже есть!" );
                return PLUGIN_HANDLED
            }
        }
                else
                {
                        cs_set_user_money(id, cs_get_user_money(id) - 4000)
            give_item( id, "weapon_flashbang" )
        }
            {
                client_print(id, print_chat, "")
                return PLUGIN_HANDLED;
            }
        }
 
K

kapangaIII

В меню добавь фигурные скобки. Условия неверно отрабатывают.[DOUBLEPOST=1547927927][/DOUBLEPOST]Проверки должны быть выше cs_get_user_money[DOUBLEPOST=1547928011][/DOUBLEPOST]У тебя и так есть значение, зачем вызывать 3 раза одно и тоже.
 
K

kapangaIII

C++:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <biohazard>

#define PLUGIN_NAME        "bio_shop"
#define PLUGIN_VERSION        "2.0"
#define PLUGIN_AUTHOR        "laucer"

#pragma tabsize 0

new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_0
new it[2];
public plugin_init()
{
    register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR )
    register_clcmd("nightvision", "bioshop")
    register_menu("Menu 1", keys, "BIOshop")
}

public bioshop(id)
{
    if(!is_user_alive(id)||is_user_zombie(id))return 1;
    static menu[512], iLen
    new money = cs_get_user_money(id)
    iLen = 0
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\yМагазин^n")
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\wУ тебя: \y%d$^n^n", money)
    
    if(money < 8000||it[0]>=3)
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d1. HE граната - \d8000$^n");
    else{
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\w1. HE граната - \y8000$^n")
        keys |= MENU_KEY_1
    }
    if(money < 4000||it[1]>=3)
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d2. Flash граната - \d4000$^n");
    else{
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\w2. Flash граната - \y4000$^n")
        keys |= MENU_KEY_2;
    }
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "^n\w0. Выход");
    keys |= MENU_KEY_0;

    show_menu(id, keys, menu, -1, "Menu 1")
    return PLUGIN_CONTINUE
}

public BIOshop(id, key)
{                 
    switch(key)
    {
        case 0:
            {
                if(cs_get_user_money(id) < 8000||it[0]>=3)
                {
                    client_print(id, print_center, "Недостаточно денег!")
                    return PLUGIN_HANDLED
                }
                    if( cs_get_user_bpammo( id, CSW_HEGRENADE ) > 0 )
            {
                client_print( id,  print_center, "У тебя это уже есть!" );
                return PLUGIN_HANDLED
            }
                    else
                    {
                            cs_set_user_money(id, cs_get_user_money(id) - 8000)
                give_item( id, "weapon_hegrenade" );it[0]++;
            }
                {
                    client_print(id, print_chat, "")
                    return PLUGIN_HANDLED
                }
                
            }
        case 1:
            {
                if(cs_get_user_money(id) < 4000||it[1]>=3)
                {
                    client_print(id, print_center, "Недостаточно денег!")
                    return PLUGIN_HANDLED;
                }
                    if( cs_get_user_bpammo( id, CSW_FLASHBANG ) > 0 )
            {
                if( cs_get_user_bpammo( id, CSW_FLASHBANG ) == 1 )
                {
                                    cs_set_user_money(id, cs_get_user_money(id) - 4000)
                    give_item( id, "weapon_flashbang" );it[1]++;
                }
                            else
                            {
                    client_print( id,  print_center, "У тебя это уже есть!" );
                    return PLUGIN_HANDLED
                }
            }
                    else
                    {
                            cs_set_user_money(id, cs_get_user_money(id) - 4000)
                give_item( id, "weapon_flashbang" )
            }
                {
                    client_print(id, print_chat, "")
                    return PLUGIN_HANDLED;
                }
            }
    }
    return PLUGIN_HANDLED;
}
 

Maloi

Пользователь
Регистрация
7 Июл 2017
Сообщения
27
Симпатии
0
Пол
Мужской
Спасибо большое =)
C++:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <biohazard>

#define PLUGIN_NAME        "bio_shop"
#define PLUGIN_VERSION        "2.0"
#define PLUGIN_AUTHOR        "laucer"

#pragma tabsize 0

new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_0
new it[2];
public plugin_init()
{
    register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR )
    register_clcmd("nightvision", "bioshop")
    register_menu("Menu 1", keys, "BIOshop")
}

public bioshop(id)
{
    if(!is_user_alive(id)||is_user_zombie(id))return 1;
    static menu[512], iLen
    new money = cs_get_user_money(id)
    iLen = 0
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\yМагазин^n")
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\wУ тебя: \y%d$^n^n", money)
   
    if(money < 8000||it[0]>=3)
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d1. HE граната - \d8000$^n");
    else{
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\w1. HE граната - \y8000$^n")
        keys |= MENU_KEY_1
    }
    if(money < 4000||it[1]>=3)
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\d2. Flash граната - \d4000$^n");
    else{
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\w2. Flash граната - \y4000$^n")
        keys |= MENU_KEY_2;
    }
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "^n\w0. Выход");
    keys |= MENU_KEY_0;

    show_menu(id, keys, menu, -1, "Menu 1")
    return PLUGIN_CONTINUE
}

public BIOshop(id, key)
{                
    switch(key)
    {
        case 0:
            {
                if(cs_get_user_money(id) < 8000||it[0]>=3)
                {
                    client_print(id, print_center, "Недостаточно денег!")
                    return PLUGIN_HANDLED
                }
                    if( cs_get_user_bpammo( id, CSW_HEGRENADE ) > 0 )
            {
                client_print( id,  print_center, "У тебя это уже есть!" );
                return PLUGIN_HANDLED
            }
                    else
                    {
                            cs_set_user_money(id, cs_get_user_money(id) - 8000)
                give_item( id, "weapon_hegrenade" );it[0]++;
            }
                {
                    client_print(id, print_chat, "")
                    return PLUGIN_HANDLED
                }
               
            }
        case 1:
            {
                if(cs_get_user_money(id) < 4000||it[1]>=3)
                {
                    client_print(id, print_center, "Недостаточно денег!")
                    return PLUGIN_HANDLED;
                }
                    if( cs_get_user_bpammo( id, CSW_FLASHBANG ) > 0 )
            {
                if( cs_get_user_bpammo( id, CSW_FLASHBANG ) == 1 )
                {
                                    cs_set_user_money(id, cs_get_user_money(id) - 4000)
                    give_item( id, "weapon_flashbang" );it[1]++;
                }
                            else
                            {
                    client_print( id,  print_center, "У тебя это уже есть!" );
                    return PLUGIN_HANDLED
                }
            }
                    else
                    {
                            cs_set_user_money(id, cs_get_user_money(id) - 4000)
                give_item( id, "weapon_flashbang" )
            }
                {
                    client_print(id, print_chat, "")
                    return PLUGIN_HANDLED;
                }
            }
    }
    return PLUGIN_HANDLED;
}
 

Armer

Пользователь
Регистрация
25 Фев 2019
Сообщения
14
Симпатии
1
Maloi,
более менее
C++:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <biohazard>

#define PLUGIN    "Biohazard: Shop"
#define VERSION    "0.1"
#define AUTHOR    "Armer"

#pragma semicolon 1

#define PRICE_HEGRENADE 500
#define PRICE_FLASHBANG 400

#define LIMIT_HEGRENADE 3
#define LIMIT_FLASHBANG 5

const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_0;

enum e_PlayerData
{
    DATA_LIMIT_HEGRENADE,
    DATA_LIMIT_FLASHBANG,
};

new g_PlayerData[33][e_PlayerData];

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);

    register_event("HLTV", "Event_RoundStart", "a", "1=0", "2=0");

    register_menu("BuyMenu", KEYSMENU, "HandleBuyMenu");

    register_clcmd("say /shop", "Command_OpenBuyMenu");
}

public Event_RoundStart()
{
    // обнуляем лимит

    new players[32], pnum; get_players(players, pnum, "h");
    for(new i = 0, player; i < pnum; i++)
    {
        player = players[i];
        arrayset(g_PlayerData[player], 0, e_PlayerData);
    }
}

public Command_OpenBuyMenu(pIndex)
{
    if(!is_user_alive(pIndex) || is_user_zombie(pIndex)) return;

    new menu[300], len = 0;

    len += formatex(menu[len], charsmax(menu) - len, "\y%s version: %s^n^n", PLUGIN, VERSION);

    len += formatex(menu[len], charsmax(menu) - len, "\w1. Hegrenade\d[%d/%d] \y%d $^n", LIMIT_HEGRENADE, g_PlayerData[pIndex][DATA_LIMIT_HEGRENADE],PRICE_HEGRENADE);
    len += formatex(menu[len], charsmax(menu) - len, "\w2. Flashbang\d[%d/%d] \y%d $^n", LIMIT_FLASHBANG, g_PlayerData[pIndex][DATA_LIMIT_FLASHBANG],PRICE_FLASHBANG);

    len += formatex(menu[len], charsmax(menu) - len, "^n\w0. Exit");

    show_menu(pIndex, KEYSMENU, menu, -1, "BuyMenu");
}

public HandleBuyMenu(id, item)
{
    if(!is_user_alive(id) || is_user_zombie(id)) return PLUGIN_HANDLED;

    const MENU_KEYS_1 = 0;
    const MENU_KEYS_2 = 1;
    const MENU_KEYS_0 = 9;
    switch(item)
    {
        case MENU_KEYS_1:
        {
            // хватает ли денег
            if(cs_get_user_money(id) < PRICE_HEGRENADE

            // если уже имеется больше или равно
            || cs_get_user_bpammo(id, CSW_HEGRENADE) >= 1

            // проверка лимита
            || g_PlayerData[id][DATA_LIMIT_HEGRENADE] >= LIMIT_HEGRENADE) return PLUGIN_HANDLED;

            // даем осколочную
            GiveNades(id, "weapon_hegrenade", 1);

            //вычетаем стоимость
            cs_set_user_money(id, cs_get_user_money(id) - PRICE_HEGRENADE);

            // считаем лимит
            g_PlayerData[id][DATA_LIMIT_HEGRENADE]++;
        }
        case MENU_KEYS_2:
        {
            // хватает ли денег
            if(cs_get_user_money(id) < PRICE_FLASHBANG

            // если уже имеется больше или равно
            || cs_get_user_bpammo(id, CSW_FLASHBANG) >= 2

            // проверка лимита
            || g_PlayerData[id][DATA_LIMIT_HEGRENADE] >= LIMIT_FLASHBANG) return PLUGIN_HANDLED;

            // даем ослепительную
            GiveNades(id, "weapon_flashbang", 1);

            // вычетаем стоимость
            cs_set_user_money(id, cs_get_user_money(id) - PRICE_FLASHBANG);

            // считаем лимит
            g_PlayerData[id][DATA_LIMIT_FLASHBANG]++;
        }
        case MENU_KEYS_0: return PLUGIN_HANDLED;
    }
    return PLUGIN_HANDLED;
}
GiveNades(id, weapon_item[], ammo_amount)
{
    new weaponid = get_weaponid(weapon_item);
    if(user_has_weapon(id, weaponid))
    {
        UTIL_AmmoPickup(id, weaponid, ammo_amount);
        cs_set_user_bpammo(id, weaponid, cs_get_user_bpammo(id, weaponid) + ammo_amount);
    }
    else
        give_item(id, weapon_item);
}

stock UTIL_AmmoPickup(id, ammo_index, ammo_amount)
{
    new const AmmoIndex[] = { -1, 9, -1, 2, 12, 5, 14, 6, 4, 13, 10, 7, 6,
    4, 4, 4, 6, 10, 1, 10, 3, 5, 4, 10, 2, 11, 8, 4, 2, -1, 7 };

    static msg_ammopickup; if(!msg_ammopickup) msg_ammopickup = get_user_msgid("AmmoPickup");
    message_begin(MSG_ONE, msg_ammopickup, _, id);
    write_byte(AmmoIndex[ammo_index]); // ammo id | type
    write_byte(ammo_amount); // ammo amount
    message_end();
}
[DOUBLEPOST=1556728269][/DOUBLEPOST],
Код:
it[2]; ===> it[33][2];
 
K

kapangaIII

Прочитай что он написал и затем перечитай еще раз и так до тех пор пока не дойдет.
 
Сверху Снизу