HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <xs>
  4. #include <zombieplague>
  5.  
  6. #define PLUGIN "Nemesis Spr"
  7. #define VERSION "0.1"
  8. #define AUTHOR "GoOleM"
  9.  
  10. new Float:g_fDelay[33]
  11. new nemesis_sprite
  12. new cvar_maxdistance
  13. new cvar_updatedelay
  14.  
  15. public plugin_init()
  16. {
  17. register_plugin(PLUGIN, VERSION, AUTHOR)
  18. cvar_maxdistance = register_cvar("zp_survsprite_distance", "5000")
  19. cvar_updatedelay = register_cvar("zp_survsprite_updatedelay", "1.0")
  20. }
  21.  
  22. public plugin_precache()
  23. {
  24. nemesis_sprite = precache_model("sprites/nemesis.spr")
  25. }
  26.  
  27. public client_PreThink(id)
  28. {
  29. if(!is_user_alive(id))
  30. return PLUGIN_CONTINUE
  31.  
  32. if((g_fDelay[id] + get_pcvar_float(cvar_updatedelay)) > get_gametime())
  33. return PLUGIN_CONTINUE
  34.  
  35.  
  36. g_fDelay[id] = get_gametime()
  37.  
  38.  
  39. new Float:fMyOrigin[3]
  40. entity_get_vector(id, EV_VEC_origin, fMyOrigin)
  41.  
  42. static Players[32], iNum
  43. get_players(Players, iNum, "a")
  44. for(new i = 0; i < iNum; ++i) if(id != Players[i])
  45. {
  46. new target = Players[i]
  47.  
  48. if(!zp_get_user_nemesis(target))
  49. continue
  50.  
  51. new Float:fTargetOrigin[3]
  52. entity_get_vector(target, EV_VEC_origin, fTargetOrigin)
  53.  
  54.  
  55. if((get_distance_f(fMyOrigin, fTargetOrigin) > get_pcvar_num(cvar_maxdistance))
  56. || !is_in_viewcone(id, fTargetOrigin))
  57. continue
  58.  
  59. new Float:fMiddle[3], Float:fHitPoint[3]
  60. xs_vec_sub(fTargetOrigin, fMyOrigin, fMiddle)
  61. trace_line(-1, fMyOrigin, fTargetOrigin, fHitPoint)
  62.  
  63. new Float:fWallOffset[3], Float:fDistanceToWall
  64.  
  65. fDistanceToWall = vector_distance(fMyOrigin, fHitPoint) - 10.0
  66. normalize(fMiddle, fWallOffset, fDistanceToWall)
  67.  
  68. new Float:fSpriteOffset[3]
  69. xs_vec_add(fWallOffset, fMyOrigin, fSpriteOffset)
  70. new Float:fScale, Float:fDistanceToTarget = vector_distance(fMyOrigin, fTargetOrigin)
  71. if(fDistanceToWall > 100.0)
  72. fScale = 8.0 * (fDistanceToWall / fDistanceToTarget)
  73. else
  74. fScale = 2.0
  75. te_sprite(id, fSpriteOffset, nemesis_sprite, floatround(fScale), 125)
  76. }
  77. return PLUGIN_CONTINUE
  78. }
  79.  
  80. stock te_sprite(id, Float:origin[3], sprite, scale, brightness)
  81. {
  82. message_begin(MSG_ONE, SVC_TEMPENTITY, _, id)
  83. write_byte(TE_SPRITE)
  84. write_coord(floatround(origin[0]))
  85. write_coord(floatround(origin[1]))
  86. write_coord(floatround(origin[2]))
  87. write_short(sprite)
  88. write_byte(scale)
  89. write_byte(brightness)
  90. message_end()
  91. }
  92.  
  93. stock normalize(Float:fIn[3], Float:fOut[3], Float:fMul)
  94. {
  95. new Float:fLen = xs_vec_len(fIn)
  96. xs_vec_copy(fIn, fOut)
  97.  
  98. fOut[0] /= fLen, fOut[1] /= fLen, fOut[2] /= fLen
  99. fOut[0] *= fMul, fOut[1] *= fMul, fOut[2] *= fMul
  100. }