Участник
Пользователь
- Сообщения
- 42
- Реакции
- 32
Приведу только нужные участки кода, чтобы не отвлекаться. При выдаче кастомного оружия в руки патроны и обойма начисляются правильно, но, если докупить патроны в buyzone то они докупаются с лимитами оружия которое в рефференсе. Например, сейчас там "weapon_aug", получается можно пополнить обойму до 90 патронов, хотя стоит #define WEAPON_DEFAULT_AMMO 3 и назначается через set_pdata_int. Для "weapon_deagle" можно до 35...
Также, если в настройках ReGAME (game.cfg) указать mp_refill_bpammo_weapons 2, то в новом раунде обойма вместо 1 патрона стаёт 30, а запас вместо 3 - 90 (как для "weapon_aug").
Попробовал добавить #include <reapi> и назначить данные о патронах с помощью rg_set_iteminfo - это полностью решило проблему. Но мне кажется это костыльным решением. Подскажет кто как можно решить эту проблему по другому, без reapi?
Также, если в настройках ReGAME (game.cfg) указать mp_refill_bpammo_weapons 2, то в новом раунде обойма вместо 1 патрона стаёт 30, а запас вместо 3 - 90 (как для "weapon_aug").
Попробовал добавить #include <reapi> и назначить данные о патронах с помощью rg_set_iteminfo - это полностью решило проблему. Но мне кажется это костыльным решением. Подскажет кто как можно решить эту проблему по другому, без reapi?
Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <reapi> // костыль, который решил проблему, см. дальше rg_set_iteminfo
// ......упустим лишний код...... \\
#define WEAPON_SPECIAL_CODE 777
#define WEAPON_MAX_CLIP 1
#define WEAPON_DEFAULT_AMMO 3
#define linux_diff_weapon 4
#define linux_diff_player 5
public Command_GiveCustomWeapon(iPlayer) {
if (!is_user_alive(iPlayer))
return PLUGIN_HANDLED;
static iEntity; iEntity = engfunc(EngFunc_CreateNamedEntity, g_iszAllocString_Entity);
if(iEntity <= 0) return 0;
set_pev(iEntity, pev_impulse, WEAPON_SPECIAL_CODE);
ExecuteHam(Ham_Spawn, iEntity);
UTIL_DropWeapon(iPlayer, 1);
if(!ExecuteHamB(Ham_AddPlayerItem, iPlayer, iEntity)) {
set_pev(iEntity, pev_flags, pev(iEntity, pev_flags) | FL_KILLME);
return 0;
}
ExecuteHamB(Ham_Item_AttachToPlayer, iEntity, iPlayer);
set_pdata_int(iEntity, m_iClip, WEAPON_MAX_CLIP, linux_diff_weapon);
new iAmmoType = m_rgAmmo + get_pdata_int(iEntity, m_iPrimaryAmmoType, linux_diff_weapon);
if(get_pdata_int(iPlayer, m_rgAmmo, linux_diff_player) < WEAPON_DEFAULT_AMMO)
set_pdata_int(iPlayer, iAmmoType, WEAPON_DEFAULT_AMMO, linux_diff_player);
// костыль, который решил проблему
rg_set_iteminfo(iEntity, ItemInfo_iMaxClip, WEAPON_MAX_CLIP);
rg_set_iteminfo(iEntity, ItemInfo_iMaxAmmo1, WEAPON_DEFAULT_AMMO);
emit_sound(iPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
return 1;
}