#include <amxmodx>
#include <fakemeta>
#include <zombieplague>
new const zclass_name[ ] = "Fagy zombi"
new const zclass_info[ ] = "Nyomj E betűt a fagyasztáshoz"
new const zclass_model[ ] = "frost_zombie"
new const zclass_clawmodel[ ] = "v_knife_frost.mdl"
const zclass_health = 1000
const zclass_speed = 240
const Float:zclass_gravity = 0.5
const Float:zclass_knockback = 1.0
new g_zclass_frost, frostsprite
new pcvar_distance, pcvar_cooldown, pcvar_freeze
new Bloqueado[33]
new Float:gLastUseCmd[ 33 ]
public plugin_init( )
{
register_plugin( "[ZP] Zombi osztály: Fagy zombi", "1.0", "007" )
pcvar_distance = register_cvar( "zp_frost_distance", "400" ) //Távolság a fagyasztáshoz
pcvar_cooldown = register_cvar( "zp_frost_cooldown", "10.0" ) //Mennyit kelljen várni az újabb fagyasztáshoz
pcvar_freeze = register_cvar( "zp_frost_freeze_time", "5.0" ) //Mennyi ideig fagyjon meg az ember
register_forward(FM_CmdStart, "fw_Start")
}
public plugin_precache( )
{
g_zclass_frost = zp_register_zombie_class( zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback )
frostsprite = precache_model( "sprites/nhth1.spr" )
}
public zp_user_infected_post( player, infector )
{
if( zp_get_user_zombie_class( player ) == g_zclass_frost )
{
client_print( player, print_chat, "[ZP] Nyomj E betűt a fagyasztáshoz!" )
}
}
public use_cmd( player )
{
if( !is_user_alive( player ) || !zp_get_user_zombie( player ) || zp_get_user_zombie_class( player ) != g_zclass_frost || zp_get_user_nemesis( player ))
return PLUGIN_HANDLED
if( get_gametime( ) - gLastUseCmd[ player ] < get_pcvar_float( pcvar_cooldown ) )
{
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 ] ) )
return PLUGIN_HANDLED
}
gLastUseCmd[ player ] = get_gametime( )
new target, body
get_user_aiming( player, target, body, get_pcvar_num( pcvar_distance ) )
if( is_user_alive( target ) && !zp_get_user_zombie( target ) )
{
sprite_control( player )
zp_set_user_frozen( target, 1 )
Bloqueado[target] = true
set_task( get_pcvar_float( pcvar_freeze ), "unfrozen_user", target )
}
else
{
sprite_control( player )
}
return PLUGIN_HANDLED
}
public unfrozen_user( target )
{
zp_set_user_frozen( target, 0 )
Bloqueado[target] = false
}
public te_spray( args[ ] )
{
message_begin( MSG_BROADCAST,SVC_TEMPENTITY )
write_byte( 120 ) // Throws a shower of sprites or models
write_coord( args[ 0 ] ) // start pos
write_coord( args[ 1 ] )
write_coord( args[ 2 ] )
write_coord( args[ 3 ] ) // velocity
write_coord( args[ 4 ] )
write_coord( args[ 5 ] )
write_short( frostsprite ) // spr
write_byte( 8 ) // count
write_byte( 70 ) // speed
write_byte( 100 ) //(noise)
write_byte( 5 ) // (rendermode)
message_end( )
return PLUGIN_CONTINUE
}
public sqrt( num )
{
new div = num
new result = 1
while( div > result )
{
div = ( div + result ) / 2
result = num / div
}
return div
}
public sprite_control( player )
{
new vec[ 3 ]
new aimvec[ 3 ]
new velocityvec[ 3 ]
new length
new speed = 10
get_user_origin( player, vec )
get_user_origin( player, aimvec, 2 )
velocityvec[ 0 ] = aimvec[ 0 ] - vec[ 0 ]
velocityvec[ 1 ] = aimvec[ 1 ] - vec[ 1 ]
velocityvec[ 2 ] = aimvec[ 2 ] - vec[ 2 ]
length = sqrt( velocityvec[ 0 ] * velocityvec[ 0 ] + velocityvec[ 1 ] * velocityvec[ 1 ] + velocityvec[ 2 ] * velocityvec[ 2 ] )
velocityvec[ 0 ] = velocityvec[ 0 ] * speed / length
velocityvec[ 1 ] = velocityvec[ 1 ] * speed / length
velocityvec[ 2 ] = velocityvec[ 2 ] * speed / length
new args[ 8 ]
args[ 0 ] = vec[ 0 ]
args[ 1 ] = vec[ 1 ]
args[ 2 ] = vec[ 2 ]
args[ 3 ] = velocityvec[ 0 ]
args[ 4 ] = velocityvec[ 1 ]
args[ 5 ] = velocityvec[ 2 ]
set_task( 0.1, "te_spray", 0, args, 8, "a", 2 )
}
public fw_Start(id, uc_handle, seed)
{
new button = get_uc(uc_handle,UC_Buttons)
if(Bloqueado[id] && !zp_get_user_zombie(id) && (button & IN_ATTACK || button & IN_ATTACK2))
set_uc(uc_handle,UC_Buttons,(button & ~IN_ATTACK) & ~IN_ATTACK2)
if(zp_get_user_zombie(id) && (button & IN_USE) && zp_get_user_zombie_class(id) == g_zclass_frost && !zp_get_user_nemesis(id))
use_cmd(id)
}