HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. //Zombie Plague Fear Meter by request - http://forums.alliedmods.net/showthread.php?t=80832
  2.  
  3. /* CVARS - copy and paste to zombieplague.cfg
  4.  
  5. zp_fear_active 1 //turns fear meter on/off
  6.  
  7. */
  8.  
  9. #include <amxmodx>
  10. #include <fakemeta>
  11. #include <zombieplague>
  12.  
  13. #define panic_distance 985 //about 25 meters in inches
  14.  
  15. new const g_heartbeat[] = "player/heartbeat1.wav"
  16.  
  17. new max_players = 32, pcvar_active, user_scared[33];
  18. //---------------------------------------------------------------------------------------
  19. public plugin_init()
  20. {
  21. register_plugin("ZP Fear Meter", "0.1", "Random1");
  22.  
  23. pcvar_active = register_cvar("zp_fear_active", "1");
  24.  
  25. //LOOP
  26. set_task(0.1, "fear_loop", _, _, _, "b");
  27.  
  28. //Bad Aim stuff
  29. register_forward(FM_PlayerPreThink, "fw_prethink");
  30.  
  31. max_players = global_get(glb_maxClients);
  32. }
  33. //---------------------------------------------------------------------------------------
  34. public plugin_precache()
  35. precache_sound(g_heartbeat);
  36. //---------------------------------------------------------------------------------------
  37. public fear_loop()
  38. {
  39. static id, player, Origin[3], eOrigin[3], dist, fear;
  40.  
  41. if ( !get_pcvar_num(pcvar_active) ) { //in case plugin gets turned off mid game while heartbeat sound is playing to someone
  42. for ( id = 1; id < max_players; id++ )
  43. if ( is_user_connected(id) )
  44. emit_sound(id, CHAN_AUTO, g_heartbeat, 1.0, ATTN_NORM, SND_STOP, PITCH_NORM);
  45. return;
  46. }
  47.  
  48. for (id = 1; id < max_players; id++) {
  49. if ( !is_user_connected(id) || is_user_bot(id) || zp_get_user_zombie(id) ) continue;
  50. get_user_origin(id, Origin);
  51. fear = 0; //reset our meter for each player
  52.  
  53. for (player = 1; player < max_players; player++) {
  54. if ( !is_user_connected(player) || id == player ) continue;
  55.  
  56. get_user_origin(player, eOrigin)
  57. dist = get_distance(eOrigin, Origin);
  58.  
  59. if ( dist > panic_distance ) {
  60. switch(floatround(dist * 0.0254, floatround_floor))
  61. {
  62. case 0 .. 8: fear += zp_get_user_zombie(player) ? 3 : -3;
  63. case 9 .. 17: fear += zp_get_user_zombie(player) ? 2 : -2;
  64. case 18 .. 25: fear += zp_get_user_zombie(player) ? 1 : -1;
  65. }
  66. }
  67. }
  68. //now for the calcualtions based on our variable
  69. if ( fear <= 1 ) {
  70. emit_sound(id, CHAN_AUTO, g_heartbeat, 1.0, ATTN_NORM, SND_STOP, PITCH_NORM); //stop heartbeat sound
  71. user_scared[id] = 0;
  72. continue;
  73. }
  74.  
  75. emit_sound(id, CHAN_AUTO, g_heartbeat, 1.0, ATTN_NORM, 0, PITCH_NORM);
  76. user_scared[id] = fear/5
  77. }
  78. }
  79. //---------------------------------------------------------------------------------------
  80. public fw_prethink(id)
  81. {
  82. if ( !user_scared[id] ) return;
  83.  
  84. static Float:badvec[3]
  85. badvec[0] = badvec[1] = badvec[2] = (user_scared[id] * 30.0);
  86.  
  87. set_pev(id, pev_punchangle, badvec);
  88. }