HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <xs>
  4. #include <hamsandwich>
  5. #include <fakemeta>
  6.  
  7. #define PLUGIN "Anti Recoil"
  8. #define VERSION "1.0"
  9. #define AUTHOR "mde"
  10.  
  11. #define FLAG ADMIN_LEVEL_B
  12.  
  13. new g_norecoil[33];
  14.  
  15. const WEAPONS_BITSUM = (1<<CSW_KNIFE|1<<CSW_HEGRENADE|1<<CSW_FLASHBANG|1<<CSW_SMOKEGRENADE|1<<CSW_C4);
  16. new Float: cl_pushangle[33][3];
  17.  
  18. public plugin_init() {
  19. register_plugin(PLUGIN, VERSION, AUTHOR)
  20.  
  21. register_clcmd("amx_recoil" , "cmd_recoil")
  22.  
  23. new weapon_name[24];
  24. for (new i = 1; i <= 30; i++)
  25. {
  26. if (!(WEAPONS_BITSUM & 1 << i) && get_weaponname(i, weapon_name, 23))
  27. {
  28. RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_Weapon_PrimaryAttack_Pre");
  29. RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_Weapon_PrimaryAttack_Post", 1);
  30. }
  31. }
  32. }
  33.  
  34. public cmd_recoil(id)
  35. {
  36. if(get_user_flags(id) & FLAG)
  37. {
  38. new i_Menu = menu_create("No-Recoil szabályozás", "recoil_hand")
  39. new s_Players[32], i_Num, i_Player, msg[222]
  40. new s_Name[32], s_Player[10]
  41. get_players(s_Players, i_Num)
  42. for (new i; i < i_Num; i++)
  43. {
  44. i_Player = s_Players[i]
  45. get_user_name(i_Player, s_Name, charsmax(s_Name))
  46. num_to_str(i_Player, s_Player, charsmax(s_Player))
  47. if(g_norecoil[i_Player])
  48. {
  49. formatex(msg, charsmax(msg), "%s \d[\rBekapcsolva\d]", s_Name)
  50. menu_additem(i_Menu, msg, s_Player, 0)
  51. }
  52. else
  53. {
  54. formatex(msg, charsmax(msg), "%s \d[\rKikapcsolva\d]", s_Name)
  55. menu_additem(i_Menu, msg, s_Player, 0)
  56. }
  57. menu_setprop(i_Menu, MPROP_BACKNAME, "\yVissza");
  58. menu_setprop(i_Menu, MPROP_NEXTNAME, "\yTovább");
  59. menu_setprop(i_Menu, MPROP_EXITNAME, "\yKilépés");
  60. }
  61. menu_display(id, i_Menu, 0)
  62. }
  63. }
  64.  
  65. public recoil_hand(id, menu, item)
  66. {
  67. if (item == MENU_EXIT)
  68. {
  69. menu_destroy(menu)
  70. return PLUGIN_HANDLED
  71. }
  72.  
  73. new s_Data[6], s_Name[64], i_Access, i_Callback
  74. menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
  75. new i_Player = str_to_num(s_Data)
  76. new name[32]
  77. new name2[32]
  78. get_user_name(id, name, 31)
  79. get_user_name(i_Player, name2, 31)
  80. if(g_norecoil[i_Player])
  81. {
  82. g_norecoil[i_Player] = false
  83. cmd_recoil(id)
  84. log_to_file("Recoil.log", "%s kikapcsolta a norecoilt neki: %s ", name, name2)
  85. }
  86. else
  87. {
  88. g_norecoil[i_Player] = true
  89. cmd_recoil(id)
  90. log_to_file("Recoil.log", "%s bekapcsolta a norecoilt neki: %s ", name, name2)
  91. }
  92. return PLUGIN_HANDLED
  93. }
  94.  
  95.  
  96.  
  97. public fw_Weapon_PrimaryAttack_Pre(entity)
  98. {
  99. new id = pev(entity, pev_owner);
  100.  
  101. if (g_norecoil[id])
  102. {
  103. pev(id, pev_punchangle, cl_pushangle[id]);
  104. return HAM_IGNORED;
  105. }
  106. return HAM_IGNORED;
  107. }
  108.  
  109. public fw_Weapon_PrimaryAttack_Post(entity)
  110. {
  111. new id = pev(entity, pev_owner);
  112.  
  113. if (g_norecoil[id])
  114. {
  115. new Float: push[3];
  116. pev(id, pev_punchangle, push);
  117. xs_vec_sub(push, cl_pushangle[id], push);
  118. xs_vec_mul_scalar(push, 0.0, push);
  119. xs_vec_add(push, cl_pushangle[id], push);
  120. set_pev(id, pev_punchangle, push);
  121. return HAM_IGNORED;
  122. }
  123. return HAM_IGNORED;
  124. }
  125. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  126. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
  127. */
  128.