HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <xs>
  4. #include <zombieplague>
  5.  
  6. new Float:g_fDelay[33]
  7. new g_ThermalOn[33]
  8. new sprite_playerheat
  9.  
  10. new cvar_enable
  11. new cvar_maxdistance
  12. new cvar_updatedelay
  13.  
  14. new g_zclass_thermal
  15.  
  16. // Thermal Zombie Atributes
  17. new const zclass_name[] = { "Hoerzekelo Zombie" } // name
  18. new const zclass_info[] = { "Falon at erzekeli a jatekosokat" } // description
  19. new const zclass_model[] = { "zombie_source" } // model
  20. new const zclass_clawmodel[] = { "v_knife_zombie.mdl" } // claw model
  21. const zclass_health = 7500 // health
  22. const zclass_speed = 205 // speed
  23. const Float:zclass_gravity = 1.0 // gravity
  24. const Float:zclass_knockback = 1.49 // knockback
  25.  
  26. static const PLUGIN_NAME[] = "Thermal Zombie"
  27. static const PLUGIN_AUTHOR[] = "Cheap_Suit"
  28. static const PLUGIN_VERSION[] = "1.0"
  29.  
  30. public plugin_init()
  31. {
  32. register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
  33. register_cvar(PLUGIN_NAME, PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER)
  34.  
  35. cvar_enable = register_cvar("amx_tig_enable", "1")
  36. cvar_maxdistance = register_cvar("amx_tig_distance", "600")
  37. cvar_updatedelay = register_cvar("amx_tig_updatedelay", "0.2")
  38.  
  39. register_event("NVGToggle", "Event_NVGToggle", "be")
  40. }
  41.  
  42. public plugin_precache()
  43. {
  44. sprite_playerheat = precache_model("sprites/poison.spr")
  45. g_zclass_thermal = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
  46. }
  47.  
  48. public Event_NVGToggle(id)
  49. g_ThermalOn[id] = read_data(1)
  50.  
  51. public client_PostThink(id)
  52. {
  53. if(!is_user_alive(id) || !zp_get_user_zombie(id)) return PLUGIN_CONTINUE
  54. if(zp_get_user_zombie_class(id) != g_zclass_thermal) return PLUGIN_CONTINUE
  55.  
  56. if((g_fDelay[id] + get_pcvar_float(cvar_updatedelay)) > get_gametime())
  57. return PLUGIN_CONTINUE
  58.  
  59. g_fDelay[id] = get_gametime()
  60.  
  61. new Float:fMyOrigin[3]
  62. entity_get_vector(id, EV_VEC_origin, fMyOrigin)
  63.  
  64. static Players[32], iNum
  65. get_players(Players, iNum, "a")
  66. for(new i = 0; i < iNum; ++i) if(id != Players[i])
  67. {
  68. new target = Players[i]
  69.  
  70. new Float:fTargetOrigin[3]
  71. entity_get_vector(target, EV_VEC_origin, fTargetOrigin)
  72.  
  73. if((get_distance_f(fMyOrigin, fTargetOrigin) > get_pcvar_num(cvar_maxdistance))
  74. || !is_in_viewcone(id, fTargetOrigin))
  75. continue
  76.  
  77. new Float:fMiddle[3], Float:fHitPoint[3]
  78. xs_vec_sub(fTargetOrigin, fMyOrigin, fMiddle)
  79. trace_line(-1, fMyOrigin, fTargetOrigin, fHitPoint)
  80.  
  81. new Float:fWallOffset[3], Float:fDistanceToWall
  82. fDistanceToWall = vector_distance(fMyOrigin, fHitPoint) - 10.0
  83. normalize(fMiddle, fWallOffset, fDistanceToWall)
  84.  
  85. new Float:fSpriteOffset[3]
  86. xs_vec_add(fWallOffset, fMyOrigin, fSpriteOffset)
  87. new Float:fScale, Float:fDistanceToTarget = vector_distance(fMyOrigin, fTargetOrigin)
  88. if(fDistanceToWall > 100.0)
  89. fScale = 8.0 * (fDistanceToWall / fDistanceToTarget)
  90. else
  91. fScale = 2.0
  92.  
  93. te_sprite(id, fSpriteOffset, sprite_playerheat, floatround(fScale), 125)
  94. }
  95. return PLUGIN_CONTINUE
  96. }
  97.  
  98. stock te_sprite(id, Float:origin[3], sprite, scale, brightness)
  99. {
  100. message_begin(MSG_ONE, SVC_TEMPENTITY, _, id)
  101. write_byte(TE_SPRITE)
  102. write_coord(floatround(origin[0]))
  103. write_coord(floatround(origin[1]))
  104. write_coord(floatround(origin[2]))
  105. write_short(sprite)
  106. write_byte(scale)
  107. write_byte(brightness)
  108. message_end()
  109. }
  110.  
  111. stock normalize(Float:fIn[3], Float:fOut[3], Float:fMul)
  112. {
  113. new Float:fLen = xs_vec_len(fIn)
  114. xs_vec_copy(fIn, fOut)
  115.  
  116. fOut[0] /= fLen, fOut[1] /= fLen, fOut[2] /= fLen
  117. fOut[0] *= fMul, fOut[1] *= fMul, fOut[2] *= fMul
  118. }