HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* AMX Mod X script.
  2.  
  3. No Headshot With Helmet plugin
  4.  
  5. (c) Copyright 2007, Simon Logic 'slspam@land.ru'
  6. This file is provided AS IS (no warranties).
  7.  
  8. Info:
  9. When player has a helmet he can't be killed by headshot.
  10.  
  11. Requirements:
  12. * CS/CZ mod
  13. * AMX/X 1.7x or higher
  14. * CStrike module
  15. * Fakemeta module
  16.  
  17. New cvars:
  18. * amx_superhelmet_when_armor <num> (default=0)
  19. set armor threshold when helmet acts as shield
  20.  
  21. Credits:
  22. * Cheap_Suit for 'hitgroup 8' idea
  23.  
  24. Changelog:
  25. v1.1.0 [2007-06-22]
  26. + added cvar 'amx_superhelmet_when_armor'
  27. + kevlar can act as shield (req. by Stixsmaster)
  28. * optimized core as XxAvalanchexX suggested (experimental)
  29. v1.0.0 [2007-06-14]
  30. * first public release
  31. */
  32.  
  33. #include <amxmodx>
  34. #include <fakemeta>
  35. #include <cstrike>
  36.  
  37. #define MY_PLUGIN_NAME "No Headshot With Helmet"
  38. #define MY_PLUGIN_VERSION "1.1.0"
  39. #define MY_PLUGIN_AUTHOR "Simon Logic"
  40.  
  41. #define HIT_SHIELD 8
  42.  
  43. new g_iMaxPlayers
  44. new g_cvarSHelmetThreshold
  45.  
  46. public plugin_init()
  47. {
  48. g_iMaxPlayers = get_maxplayers()
  49.  
  50. register_plugin(MY_PLUGIN_NAME, MY_PLUGIN_VERSION, MY_PLUGIN_AUTHOR)
  51. register_cvar("version_no_headshot_with_helmet", MY_PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY)
  52.  
  53. g_cvarSHelmetThreshold = register_cvar("amx_superhelmet_when_armor", "0")
  54.  
  55. //register_forward(FM_TraceLine, "onTraceLine")
  56. register_forward(FM_TraceLine, "onTraceLinePost", 1)
  57. }
  58.  
  59. public onTraceLinePost(Float:v1[3], Float:v2[3], fNoMonsters, pentToSkip, ptr)
  60. {
  61. //engfunc(EngFunc_TraceLine, v1, v2, fNoMonsters, pentToSkip, ptr)
  62.  
  63. static iHitEnt; iHitEnt = get_tr2(ptr, TR_pHit)
  64.  
  65. if(1 <= iHitEnt <= g_iMaxPlayers)
  66. {
  67. static iArmor
  68. static CsArmorType:tArmor
  69.  
  70. iArmor = cs_get_user_armor(iHitEnt, tArmor)
  71.  
  72. if(iArmor > 0 && tArmor == CS_ARMOR_VESTHELM
  73. && get_tr2(ptr, TR_iHitgroup) == HIT_HEAD)
  74. {
  75. iHitEnt = get_pcvar_num(g_cvarSHelmetThreshold) // re-use iHitEnt
  76. if(iHitEnt > 0 && iArmor >= iHitEnt)
  77. iHitEnt = HIT_SHIELD
  78. else
  79. iHitEnt = HIT_GENERIC
  80.  
  81. set_tr2(ptr, TR_iHitgroup, iHitEnt)
  82. }
  83. }
  84.  
  85. //return FMRES_SUPERCEDE
  86. }
  87.