#pragma semicolon 1

#include <amxmodx>
#include <hamsandwich>
#include <reapi>

new const Float:WEAPONS_RECOIL[MAX_WEAPONS] =
{
  0.5, // WEAPON_NONE
  0.5, // WEAPON_P228
  0.5, // WEAPON_GLOCK
  0.5, // WEAPON_SCOUT
  0.5, // WEAPON_HEGRENADE
  0.5, // WEAPON_XM1014
  0.5, // WEAPON_C4
  0.5, // WEAPON_MAC10
  0.5, // WEAPON_AUG
  0.5, // WEAPON_SMOKEGRENADE
  0.5, // WEAPON_ELITE
  0.5, // WEAPON_FIVESEVEN
  0.5, // WEAPON_UMP45
  0.5, // WEAPON_SG550
  0.5, // WEAPON_GALIL
  0.5, // WEAPON_FAMAS
  0.5, // WEAPON_USP
  0.5, // WEAPON_GLOCK18
  0.5, // WEAPON_AWP
  0.5, // WEAPON_MP5N
  0.5, // WEAPON_M249
  0.5, // WEAPON_M3
  0.5, // WEAPON_M4A1
  0.5, // WEAPON_TMP
  0.5, // WEAPON_G3SG1
  0.5, // WEAPON_FLASHBANG
  0.5, // WEAPON_DEAGLE
  0.5, // WEAPON_SG552
  0.5, // WEAPON_AK47
  0.5, // WEAPON_KNIFE
  0.5, // WEAPON_P90
};

public plugin_init()
{
  register_plugin("recoil_manager", "1.0.0", "fl0wer");

  new weaponName[24];

  for (new i = 1; i < MAX_WEAPONS - 1; i++)
  {
    if ((1<<i) & ((1<<2) | (1<<CSW_KNIFE) | (1<<CSW_HEGRENADE) | (1<<CSW_FLASHBANG) | (1<<CSW_SMOKEGRENADE) | (1<<CSW_C4)))
      continue;

    rg_get_weapon_info(WeaponIdType:i, WI_NAME, weaponName, charsmax(weaponName));

    RegisterHam(Ham_Weapon_PrimaryAttack, weaponName, "@CBasePlayerWeapon_PrimaryAttack_Post", true);
  }
}

@CBasePlayerWeapon_PrimaryAttack_Post(id)
{
  new weaponId = get_member(id, m_iId);

  if (WEAPONS_RECOIL[weaponId] == 1.0)
    return;

  new player = get_member(id, m_pPlayer);

  new Float:vecPunchAngle[3];
  get_entvar(player, var_punchangle, vecPunchAngle);

  for (new i = 0; i < 3; i++)
    vecPunchAngle[i] *= WEAPONS_RECOIL[weaponId];

  set_entvar(player, var_punchangle, vecPunchAngle);
}
