HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <engine>
  3.  
  4. #define PLUGIN "Pump Knockback (when shot by one)"
  5. #define VERSION "1.0"
  6. #define AUTHOR "v3x & Chronic"
  7.  
  8. new cvar_pump_active , cvar_pump_force;
  9.  
  10. public plugin_init()
  11. {
  12. register_plugin(PLUGIN , VERSION , AUTHOR);
  13.  
  14. register_event("Damage" , "event_Damage" , "b" , "2>0");
  15.  
  16. cvar_pump_active = register_cvar("pump_knockback" , "1");
  17. cvar_pump_force = register_cvar("pump_force" , "10");
  18. }
  19.  
  20. public event_Damage(id)
  21. {
  22. if(!get_pcvar_num(cvar_pump_active))
  23. return PLUGIN_CONTINUE;
  24.  
  25. if(!is_user_alive(id))
  26. return PLUGIN_CONTINUE;
  27.  
  28. new weapon , attacker = get_user_attacker(id , weapon);
  29.  
  30. if(!is_user_alive(attacker))
  31. return PLUGIN_CONTINUE;
  32.  
  33. if(weapon == CSW_M3)
  34. {
  35. new Float:vec[3];
  36. new Float:oldvelo[3];
  37. get_user_velocity(id, oldvelo);
  38. create_velocity_vector(id , attacker , vec);
  39. vec[0] += oldvelo[0];
  40. vec[1] += oldvelo[1];
  41. set_user_velocity(id , vec);
  42. }
  43.  
  44. return PLUGIN_CONTINUE;
  45. }
  46.  
  47. // Stock by the one and only, Chronic :P
  48. stock create_velocity_vector(victim,attacker,Float:velocity[3])
  49. {
  50. if(!is_user_alive(victim) || !is_user_alive(attacker))
  51. return 0;
  52.  
  53. new Float:vicorigin[3];
  54. new Float:attorigin[3];
  55. entity_get_vector(victim , EV_VEC_origin , vicorigin);
  56. entity_get_vector(attacker , EV_VEC_origin , attorigin);
  57.  
  58. new Float:origin2[3]
  59. origin2[0] = vicorigin[0] - attorigin[0];
  60. origin2[1] = vicorigin[1] - attorigin[1];
  61.  
  62. new Float:largestnum = 0.0;
  63.  
  64. if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
  65. if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);
  66.  
  67. origin2[0] /= largestnum;
  68. origin2[1] /= largestnum;
  69.  
  70. velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_pump_force) * 3000) ) / get_entity_distance(victim , attacker);
  71. velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_pump_force) * 3000) ) / get_entity_distance(victim , attacker);
  72. if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
  73. velocity[2] = random_float(200.0 , 275.0);
  74.  
  75. return 1;
  76. }