Проблема с патронами кастомного оружия на сервере с ReAPI

Сообщения
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?

Код:
#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;
}
 
  • Не нравится
Реакции: Ruby
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
Что плохого использовать reapi? Можно с помощью ham'a item info устанавливать
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
Сообщения
42
Реакции
32
Что плохого использовать reapi?
Потому что весь плагин был реализован без reapi, если уж использовать его то не для того чтобы добавить 2 строчки ради починить баг. Да и как уже подсказали, можно без него обойтись.

Спасибо, попробую.
Ham_Item_GetItemInfo + Ham_ItemInfo_iMaxAmmo1
Можно с помощью ham'a item info устанавливать
 

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

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