#include <amxmodx>
#include <amxmisc>
#include <xs>
#include <hamsandwich>
#include <fakemeta> 
 
#define PLUGIN "Anti Recoil"
#define VERSION "1.0"
#define AUTHOR "mde"
 
#define FLAG ADMIN_LEVEL_B
 
new g_norecoil[33];
 
const WEAPONS_BITSUM = (1<<CSW_KNIFE|1<<CSW_HEGRENADE|1<<CSW_FLASHBANG|1<<CSW_SMOKEGRENADE|1<<CSW_C4);
new Float: cl_pushangle[33][3];
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
 
        register_clcmd("amx_recoil" , "cmd_recoil")
 
        new weapon_name[24];
        for (new i = 1; i <= 30; i++)
         {
                if (!(WEAPONS_BITSUM & 1 << i) && get_weaponname(i, weapon_name, 23))
                {
                        RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_Weapon_PrimaryAttack_Pre");
                        RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_Weapon_PrimaryAttack_Post", 1);
                }
         }
}
 
public cmd_recoil(id)
{
    if(get_user_flags(id) & FLAG)
    {
    new i_Menu = menu_create("No-Recoil szabályozás", "recoil_hand")
    new s_Players[32], i_Num, i_Player, msg[222]
    new s_Name[32], s_Player[10]
    get_players(s_Players, i_Num)
    for (new i; i < i_Num; i++)
    { 
           i_Player = s_Players[i]
           get_user_name(i_Player, s_Name, charsmax(s_Name))
           num_to_str(i_Player, s_Player, charsmax(s_Player))
           if(g_norecoil[i_Player])
           {
           formatex(msg, charsmax(msg), "%s \d[\rBekapcsolva\d]", s_Name) 
           menu_additem(i_Menu, msg, s_Player, 0)
           }
           else 
	  {
           formatex(msg, charsmax(msg), "%s \d[\rKikapcsolva\d]", s_Name) 
           menu_additem(i_Menu, msg, s_Player, 0)
	  }
		menu_setprop(i_Menu, MPROP_BACKNAME, "\yVissza");
		menu_setprop(i_Menu, MPROP_NEXTNAME, "\yTovább");
		menu_setprop(i_Menu, MPROP_EXITNAME, "\yKilépés");
    }
    menu_display(id, i_Menu, 0)
}
}
 
public recoil_hand(id, menu, item)
{
    if (item == MENU_EXIT)
    {
           menu_destroy(menu)
           return PLUGIN_HANDLED
    }
 
    new s_Data[6], s_Name[64], i_Access, i_Callback
    menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
    new i_Player = str_to_num(s_Data) 
    new name[32]
    new name2[32]
    get_user_name(id, name, 31)
    get_user_name(i_Player, name2, 31)
    if(g_norecoil[i_Player])
    {
    g_norecoil[i_Player] = false
    cmd_recoil(id)
    log_to_file("Recoil.log", "%s kikapcsolta a norecoilt neki: %s ", name, name2)
    }
    else
    {
    g_norecoil[i_Player] = true
    cmd_recoil(id)
    log_to_file("Recoil.log", "%s bekapcsolta a norecoilt neki: %s ", name, name2)
    }
    return PLUGIN_HANDLED
}
 
 
 
public fw_Weapon_PrimaryAttack_Pre(entity)
{
        new id = pev(entity, pev_owner);
 
        if (g_norecoil[id])
        {
                pev(id, pev_punchangle, cl_pushangle[id]);
                return HAM_IGNORED;
        }
        return HAM_IGNORED;
}
 
public fw_Weapon_PrimaryAttack_Post(entity)
{
        new id = pev(entity, pev_owner);
 
        if (g_norecoil[id])
        {
                new Float: push[3];
                pev(id, pev_punchangle, push);
                xs_vec_sub(push, cl_pushangle[id], push);
                xs_vec_mul_scalar(push, 0.0, push);
                xs_vec_add(push, cl_pushangle[id], push);
                set_pev(id, pev_punchangle, push);
                return HAM_IGNORED;
        }
        return HAM_IGNORED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/