Покупка патронов через чат

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
46
Реакции
2
Помог
1 раз(а)
Добрый вечер всем!

Это моя первая попытка в написании плагина. Пытаюсь создать плагин, который даст возможность игроку покупать патроны для оружия, после ввода определенной команды в чат.

Разделил все оружие на две группы: Основное (команда: /primary) и Вспомогательное (команда: /secondary). В первую группу входит все оружие, которое находится в первом слоте у игрока, во вторую группу - во втором слоте. Для этого я попытался написать проверку на необходимое оружие во всем инвентаре у игрока. Проверки всего две, для двух вышеназванных групп: на само оружие и на патроны, которые к ним будут выдаваться. То есть патроны, по идее, должны выдаваться, даже если у игрока в активном слоту не будет оружия, для которого он покупает патроны.

Код:
#include <amxmodx>
#include <cstrike>
#include <fun>
#include <fakemeta_util>

#define PLUGIN "Buy ammo for weapon"
#define VERSION "1.0"
#define AUTHOR "Kiowka"

new secondary[6] = {CSW_P228, CSW_ELITE, CSW_FIVESEVEN, CSW_GALIL, CSW_USP, CSW_GLOCK18};
new primary[18] = {CSW_SCOUT, CSW_XM1014, CSW_MAC10, CSW_AUG, CSW_UMP45, CSW_SG550, CSW_GALIL, CSW_FAMAS, CSW_AWP, CSW_MP5NAVY, CSW_M249, CSW_M3, CSW_M4A1, CSW_TMP, CSW_G3SG1, CSW_SG552, CSW_AK47, CSW_P90};

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
   
    register_clcmd ("say /primary", "primary_ammo")
    register_clcmd ("say /secondary", "secondary_ammo")
}

public primary_ammo(id, item)
{
    if(!is_user_alive(id) || cs_get_user_money(id) < 300)
    {
        client_print_color(id,print_team_default,"^4[BUYAMMO] ^1Недостаточно средств")
        return PLUGIN_HANDLED
    }
    for (new i = 0; i < 18; i++)
    if (user_has_weapon(id, primary[i]))
    cs_set_user_money(id, cs_get_user_money(id) - 300)
    give_item(id,"ammo_762nato")
    give_item(id,"ammo_buckshot")
    give_item(id,"ammo_45acp")
    give_item(id,"ammo_556nato")
    give_item(id,"ammo_338magnum")
    give_item(id,"ammo_556natobox")
    give_item(id,"ammo_57mm")
    client_print_color(id,print_team_default,"^4[BUYAMMO] ^1Вы купили ^4Патроны для основного оружия")
    return PLUGIN_HANDLED
}

public secondary_ammo(id, item)
{
    if(!is_user_alive(id) || cs_get_user_money(id) < 150)
    {
        client_print_color(id,print_team_default,"^4[BUYAMMO] ^1Недостаточно средств")
        return PLUGIN_HANDLED
    }
    for (new i = 0; i < 6; i++)
    if (user_has_weapon(id, secondary[i]))
    cs_set_user_money(id, cs_get_user_money(id) - 150)
    give_item(id,"ammo_9mm")
    give_item(id,"ammo_57mm")
    give_item(id,"ammo_45acp")
    give_item(id,"ammo_50ae")
    client_print_color(id,print_team_default,"^4[BUYAMMO] ^1Вы купили ^4Патроны для вспомогательного оружия")
    return PLUGIN_HANDLED
}
Ошибка заключается в том, что патроны выдаются не учитывая проверку, как я понял, а так же не снимаются деньги за покупку.

Уточню, что я плохо разбираюсь в написании плагинов. Поэтому надеюсь на вашу помощь!
 

Вложения

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
344
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Код:
if(!is_user_alive(id) || cs_get_user_money(id) < 300)
{
    client_print_color(id,print_team_default,"^4[BUYAMMO] ^1Недостаточно средств")
    return PLUGIN_HANDLED
}
Если мёртв, то недостаточно средств?:scratch_one-s_head:

for (new i = 0; i < 18; i++)
С нуля же начинается. Ну.

А ещё, можно было бы и освоить реапи в конце 2022 века.
 
Сообщения
46
Реакции
2
Помог
1 раз(а)
RockTheStreet, все так быстро изучать не получается, но возьму к сведению. Я беру всю информацию из других плагинов и пытаюсь сам додумываться как и что откуда пошло, попутно гуглив это.
Код:
if(!is_user_alive(id) || cs_get_user_money(id) < 300)
{
    client_print_color(id,print_team_default,"^4[BUYAMMO] ^1Недостаточно средств")
    return PLUGIN_HANDLED
}
Если мёртв, то недостаточно средств?:scratch_one-s_head:

for (new i = 0; i < 18; i++)
С нуля же начинается. Ну.
А здесь да, уже совсем запутался 😅
 
Сообщения
46
Реакции
2
Помог
1 раз(а)
RockTheStreet, Вроде как работает, правда спам летит в консоль сервера неплохой такой от этих проверок
 
Сообщения
336
Реакции
414
Помог
7 раз(а)
Код:
#include <amxmodx>
#include <reapi>

enum CVARS
{
    PRIMARY_AMMO_COST,
    SECONDARY_AMMO_COST
};

new g_eCvars[CVARS];

public plugin_init()
{
    register_plugin("Buying Ammo", "0.0.1", "Albertio");

    register_clcmd("say /primary", "buying_primary_ammo");
    register_clcmd("say_team /primary", "buying_primary_ammo");
    register_clcmd("say /secondary", "buying_secondary_ammo");
    register_clcmd("say_team /secondary", "buying_secondary_ammo");

    bind_pcvar_num(create_cvar(
        "ba_primary_ammo_cost",
        "300",
        FCVAR_NONE,
        "Цена боеприпасов для основного оружия"),
        g_eCvars[PRIMARY_AMMO_COST]
    );
    bind_pcvar_num(create_cvar(
        "ba_secondary_ammo_cost",
        "150",
        FCVAR_NONE,
        "Цена боеприпасов для вспомогательного оружия"),
        g_eCvars[SECONDARY_AMMO_COST]
    );

    AutoExecConfig(true, "buying_ammo");
}

public buying_primary_ammo(id)
{
    if(UTIL_AddAmmoToPlayer(id, g_eCvars[PRIMARY_AMMO_COST], PRIMARY_WEAPON_SLOT))
        client_print_color(id, print_team_default, "^4[BUYAMMO]^1 Вы купили^4 Патроны для основного оружия");
}

public buying_secondary_ammo(id)
{
    if(UTIL_AddAmmoToPlayer(id, g_eCvars[SECONDARY_AMMO_COST], PISTOL_SLOT))
        client_print_color(id, print_team_default, "^4[BUYAMMO]^1 Вы купили^4 Патроны для вспомогательного оружия");
}

stock UTIL_AddAmmoToPlayer(const id, const iCost, const InventorySlotType:iSlot)
{
    if(!is_user_alive(id))
    {
        client_print_color(id, print_team_default, "^4[BUYAMMO]^1 Вы мертвы");
        return 0;
    }

    if(get_member(id, m_iAccount) < iCost)
    {
        client_print_color(id, print_team_default, "^4[BUYAMMO]^1 Недостаточно средств");
        return 0;
    }

    new iWeapon = get_member(id, m_rgpPlayerItems, iSlot);

    if(!is_nullent(iWeapon))
        set_member(id, m_rgAmmo, rg_get_iteminfo(iWeapon, ItemInfo_iMaxAmmo1), get_member(iWeapon, m_Weapon_iPrimaryAmmoType));
    else
    {
        client_print_color(id, print_team_default, "^4[BUYAMMO]^1 У вас нет оружия данного типа");
        return 0;
    }

    rg_add_account(id, -iCost);

    return 1;
}
 
Сообщения
46
Реакции
2
Помог
1 раз(а)
Albertio, спасибо большое за код! Просмотрю его получше на досуге, он как раз reapi функции использует
Не вникал еще в плагины с этим модулем, пока выглядит немного пугающе 😁 Знаю о его преимуществах, но нужно ведь с чего-то начинать
 
Сообщения
46
Реакции
2
Помог
1 раз(а)
Всем спасибо! Тему можно закрывать
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу