HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <zombieplague>
  4.  
  5. new const zclass_name[ ] = "Fagy zombi"
  6. new const zclass_info[ ] = "Nyomj E betűt a fagyasztáshoz"
  7. new const zclass_model[ ] = "frost_zombie"
  8. new const zclass_clawmodel[ ] = "v_knife_frost.mdl"
  9. const zclass_health = 1000
  10. const zclass_speed = 240
  11. const Float:zclass_gravity = 0.5
  12. const Float:zclass_knockback = 1.0
  13.  
  14. new g_zclass_frost, frostsprite
  15. new pcvar_distance, pcvar_cooldown, pcvar_freeze
  16. new Bloqueado[33]
  17. new Float:gLastUseCmd[ 33 ]
  18.  
  19. public plugin_init( )
  20. {
  21. register_plugin( "[ZP] Zombi osztály: Fagy zombi", "1.0", "007" )
  22.  
  23. pcvar_distance = register_cvar( "zp_frost_distance", "400" ) //Távolság a fagyasztáshoz
  24. pcvar_cooldown = register_cvar( "zp_frost_cooldown", "10.0" ) //Mennyit kelljen várni az újabb fagyasztáshoz
  25. pcvar_freeze = register_cvar( "zp_frost_freeze_time", "5.0" ) //Mennyi ideig fagyjon meg az ember
  26. register_forward(FM_CmdStart, "fw_Start")
  27. }
  28.  
  29. public plugin_precache( )
  30. {
  31. g_zclass_frost = zp_register_zombie_class( zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback )
  32. frostsprite = precache_model( "sprites/nhth1.spr" )
  33. }
  34.  
  35. public zp_user_infected_post( player, infector )
  36. {
  37. if( zp_get_user_zombie_class( player ) == g_zclass_frost )
  38. {
  39. client_print( player, print_chat, "[ZP] Nyomj E betűt a fagyasztáshoz!" )
  40. }
  41. }
  42.  
  43. public use_cmd( player )
  44. {
  45.  
  46. if( !is_user_alive( player ) || !zp_get_user_zombie( player ) || zp_get_user_zombie_class( player ) != g_zclass_frost || zp_get_user_nemesis( player ))
  47. return PLUGIN_HANDLED
  48.  
  49. if( get_gametime( ) - gLastUseCmd[ player ] < get_pcvar_float( pcvar_cooldown ) )
  50. {
  51. client_print( player, print_chat, "[ZP] Neked várnod kell %.f0 másodpercet ,hogy újra fagyaszthass!", get_pcvar_float( pcvar_cooldown ) - ( get_gametime( ) - gLastUseCmd[ player ] ) )
  52. return PLUGIN_HANDLED
  53. }
  54.  
  55. gLastUseCmd[ player ] = get_gametime( )
  56.  
  57. new target, body
  58. get_user_aiming( player, target, body, get_pcvar_num( pcvar_distance ) )
  59.  
  60. if( is_user_alive( target ) && !zp_get_user_zombie( target ) )
  61. {
  62. sprite_control( player )
  63. zp_set_user_frozen( target, 1 )
  64. Bloqueado[target] = true
  65. set_task( get_pcvar_float( pcvar_freeze ), "unfrozen_user", target )
  66. }
  67. else
  68. {
  69. sprite_control( player )
  70. }
  71. return PLUGIN_HANDLED
  72. }
  73.  
  74. public unfrozen_user( target )
  75. {
  76. zp_set_user_frozen( target, 0 )
  77. Bloqueado[target] = false
  78. }
  79.  
  80. public te_spray( args[ ] )
  81. {
  82. message_begin( MSG_BROADCAST,SVC_TEMPENTITY )
  83. write_byte( 120 ) // Throws a shower of sprites or models
  84. write_coord( args[ 0 ] ) // start pos
  85. write_coord( args[ 1 ] )
  86. write_coord( args[ 2 ] )
  87. write_coord( args[ 3 ] ) // velocity
  88. write_coord( args[ 4 ] )
  89. write_coord( args[ 5 ] )
  90. write_short( frostsprite ) // spr
  91. write_byte( 8 ) // count
  92. write_byte( 70 ) // speed
  93. write_byte( 100 ) //(noise)
  94. write_byte( 5 ) // (rendermode)
  95. message_end( )
  96.  
  97. return PLUGIN_CONTINUE
  98. }
  99.  
  100. public sqrt( num )
  101. {
  102. new div = num
  103. new result = 1
  104. while( div > result )
  105. {
  106. div = ( div + result ) / 2
  107. result = num / div
  108. }
  109. return div
  110. }
  111.  
  112. public sprite_control( player )
  113. {
  114. new vec[ 3 ]
  115. new aimvec[ 3 ]
  116. new velocityvec[ 3 ]
  117. new length
  118. new speed = 10
  119.  
  120. get_user_origin( player, vec )
  121. get_user_origin( player, aimvec, 2 )
  122.  
  123. velocityvec[ 0 ] = aimvec[ 0 ] - vec[ 0 ]
  124. velocityvec[ 1 ] = aimvec[ 1 ] - vec[ 1 ]
  125. velocityvec[ 2 ] = aimvec[ 2 ] - vec[ 2 ]
  126. length = sqrt( velocityvec[ 0 ] * velocityvec[ 0 ] + velocityvec[ 1 ] * velocityvec[ 1 ] + velocityvec[ 2 ] * velocityvec[ 2 ] )
  127. velocityvec[ 0 ] = velocityvec[ 0 ] * speed / length
  128. velocityvec[ 1 ] = velocityvec[ 1 ] * speed / length
  129. velocityvec[ 2 ] = velocityvec[ 2 ] * speed / length
  130.  
  131. new args[ 8 ]
  132. args[ 0 ] = vec[ 0 ]
  133. args[ 1 ] = vec[ 1 ]
  134. args[ 2 ] = vec[ 2 ]
  135. args[ 3 ] = velocityvec[ 0 ]
  136. args[ 4 ] = velocityvec[ 1 ]
  137. args[ 5 ] = velocityvec[ 2 ]
  138.  
  139. set_task( 0.1, "te_spray", 0, args, 8, "a", 2 )
  140.  
  141. }
  142.  
  143. public fw_Start(id, uc_handle, seed)
  144. {
  145. new button = get_uc(uc_handle,UC_Buttons)
  146.  
  147. if(Bloqueado[id] && !zp_get_user_zombie(id) && (button & IN_ATTACK || button & IN_ATTACK2))
  148. set_uc(uc_handle,UC_Buttons,(button & ~IN_ATTACK) & ~IN_ATTACK2)
  149.  
  150. if(zp_get_user_zombie(id) && (button & IN_USE) && zp_get_user_zombie_class(id) == g_zclass_frost && !zp_get_user_nemesis(id))
  151. use_cmd(id)
  152. }