Оружие выстреливает два патрона вместо одного

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

Код:
public plugin_init()
{
    RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m3", "fw_CmdStart", 0)
}


public fw_CmdStart(weapon)
{
    new id = get_pdata_cbase(weapon, 41, 4)
    client_print(0,print_chat,"%d ATTACKED",id)
    static Ent; Ent = fm_get_user_weapon_entity(id, CSW_BASE)
    static iClip; iClip = get_pdata_int(Ent, 51, 4)
    new ammo, clip, weapon = get_user_weapon(id, clip, ammo)
    if (!g_has_M32[id] || weapon != CSW_BASE || !is_user_alive(id))return
    if(get_pdata_float(Ent, 46, 4) > 0.0 || !iClip)return
    
    client_print(0,print_chat,"ATTACK")
    if(g_reload[id])
    {
        UTIL_PlayWeaponAnimation(id, 4)
        set_pdata_float(id, 83, 1.0)
        remove_task(id + TASK_RELOADING)
        g_reload[id] = false
        return
    }

    UTIL_PlayWeaponAnimation(id,random_num(1,2))
    emit_sound(id, CHAN_WEAPON, FIRE_SOUND[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
    FireGrenade(id)
    MakeRecoil(id)
    set_pdata_int(Ent, 51, iClip - 1, 4)
    set_pdata_float(Ent, 46, 1.0, 4)
    set_pdata_float(Ent, 48, 1.0, 4)
}
 
Сообщения
25
Реакции
27
Помог
1 раз(а)
Попробуйте так

Diff:
public fw_CmdStart(weapon)
{
    new id = get_pdata_cbase(weapon, 41, 4)
    client_print(0,print_chat,"%d ATTACKED",id)
    static Ent; Ent = fm_get_user_weapon_entity(id, CSW_BASE)
    static iClip; iClip = get_pdata_int(Ent, 51, 4)
    new ammo, clip, weapon = get_user_weapon(id, clip, ammo)
+   if (!g_has_M32[id] || weapon != CSW_BASE || !is_user_alive(id) return HAM_IGNORED
+   if(get_pdata_float(Ent, 46, 4) > 0.0 || !iClip) return HAM_SUPERCEDE
   
    client_print(0,print_chat,"ATTACK")
    if(g_reload[id])
    {
        UTIL_PlayWeaponAnimation(id, 4)
        set_pdata_float(id, 83, 1.0)
        remove_task(id + TASK_RELOADING)
        g_reload[id] = false
+       return HAM_SUPERCEDE
    }

    UTIL_PlayWeaponAnimation(id,random_num(1,2))
    emit_sound(id, CHAN_WEAPON, FIRE_SOUND[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
    FireGrenade(id)
    MakeRecoil(id)
    set_pdata_int(Ent, 51, iClip - 1, 4)
    set_pdata_float(Ent, 46, 1.0, 4)
    set_pdata_float(Ent, 48, 1.0, 4)
   
+   return HAM_SUPERCEDE
}
И ещё вопрос - блокируется ли client data?
 
Последнее редактирование:
Сообщения
27
Реакции
3
Попробуйте так

Diff:
public fw_CmdStart(weapon)
{
    new id = get_pdata_cbase(weapon, 41, 4)
    client_print(0,print_chat,"%d ATTACKED",id)
    static Ent; Ent = fm_get_user_weapon_entity(id, CSW_BASE)
    static iClip; iClip = get_pdata_int(Ent, 51, 4)
    new ammo, clip, weapon = get_user_weapon(id, clip, ammo)
+   if (!g_has_M32[id] || weapon != CSW_BASE || !is_user_alive(id) return HAM_IGNORED
+   if(get_pdata_float(Ent, 46, 4) > 0.0 || !iClip) return HAM_SUPERCEDE
  
    client_print(0,print_chat,"ATTACK")
    if(g_reload[id])
    {
        UTIL_PlayWeaponAnimation(id, 4)
        set_pdata_float(id, 83, 1.0)
        remove_task(id + TASK_RELOADING)
        g_reload[id] = false
+       return HAM_SUPERCEDE
    }

    UTIL_PlayWeaponAnimation(id,random_num(1,2))
    emit_sound(id, CHAN_WEAPON, FIRE_SOUND[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
    FireGrenade(id)
    MakeRecoil(id)
    set_pdata_int(Ent, 51, iClip - 1, 4)
    set_pdata_float(Ent, 46, 1.0, 4)
    set_pdata_float(Ent, 48, 1.0, 4)
  
+   return HAM_SUPERCEDE
}
И ещё вопрос - блокируется ли client data?
Правильное решение, спасибо!
 
Статус
В этой теме нельзя размещать новые ответы.

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

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