This class work fine but i don't understand how is that work.... i mean when i use this class every class has same power even *Balanced Classic zombie* which is crazy..
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <zombieplague>
#include <zp50_grenade_frost>
#include <ColorChat>
new const zclass_name[ ] = "Frost Zombie"
new const zclass_info[ ] = "Freezing Humans"
new const zclass_model[ ] = "frost_zombie"
new const zclass_clawmodel[ ] = "v_knife_frost.mdl"
const zclass_health = 1700
const zclass_speed = 230
const Float:zclass_gravity = 1.0
const Float:zclass_knockback = 1.5
new g_zclass_frost, frostsprite
new pcvar_distance, pcvar_cooldown1, pcvar_freeze
new Bloqueado[33]
new Float:gLastUseCmd[ 33 ]
public plugin_init( )
{
register_plugin( "[ZP] Zombie Class: Frost Zombie", "1.0", "007" )
pcvar_distance = register_cvar( "zp_frost_distance", "400" )
pcvar_cooldown1 = register_cvar( "zp_frost_cooldown", "20.0" )
pcvar_freeze = register_cvar( "zp_frost_freeze_time", "2.0" )
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 )
{
ColorChat(player, GREEN, "^x01[^x04ZPM^x01] You're class is ^x04[^x01 Frost Zombie ^x04]^x01 Your Skills :^x03 Freezing Humans." )
}
}
public use_cmd( player )
{
if( !is_user_alive( player ) || !zp_get_user_zombie( player ) )
return PLUGIN_HANDLED
if( get_gametime( ) - gLastUseCmd[ player ] < get_pcvar_flags( pcvar_cooldown1 ) )
{
set_hudmessage(179, 0, 0, -1.0, 0.28, 2, 0.02, 1.0, 0.01, 0.1, 10);
if (pcvar_cooldown1 != 1)
show_hudmessage(0, "You need to wait for^x03 %.f^x01 sec. to use froze again!", get_pcvar_num( pcvar_cooldown1 ) - ( 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_grenade_frost_set( 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_grenade_frost_set( 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_ATTACK2))
use_cmd(id)
}