Edit: Забравих да добавя един код , пробвай пак.
Code .sma:
Code: Select all
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <basebuilder>
#include <fun>
#include <hamsandwich>
#include <fakemeta_util>
#define is_user_frozen(%1) bFrozen[%1]
#define PLUGIN "[BB] Zombie Class: Freezer"
#define VERSION "1.3"
#define AUTHOR "Argon"
new const zclass_name[] = { "Freezer" }
new const zclass_info[] = { "\r[Freez Human] \y[Mouse2]" }
new const zclass_model[] = { "bb_zombie_freezer" }
new const zclass_clawmodel[] = { "bb_basebulder/bb_v_freezer" }
const zclass_health = 1000
const zclass_speed = 240
const Float:zclass_gravity = 1.0
const Float:zclass_knockback = 0.25
const zclass_adminflags = ADMIN_LEVEL_D
new beamSpr, freezer_spr
new const freezer_sound[] = "basebulder/freezer.wav"
new const glass_sound_1[] = "basebulder/glass_1.wav"
new const glass_sound_2[] = "basebulder/glass_2.wav"
//Cvars
new pcvar_distance
new cvar_cooldown // Cooldown when dropped the weapon of human
new pcvar_freeze
new g_freezer
new g_maxplayers
new is_cooldown[33] = 0
new bool:hase_freez[33]
new cvar_nemesis
new Countdown[33]
new bool:bFrozen[33]
new Float:iAngles[33][3]
const iVictim = 2
public plugin_precache()
{
g_freezer = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback, zclass_adminflags)
beamSpr = precache_model("sprites/lgtning.spr")
freezer_spr = precache_model("sprites/freezer_exp.spr")
precache_sound(freezer_sound)
precache_sound(glass_sound_1)
precache_sound(glass_sound_2)
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
pcvar_distance = register_cvar ( "freezer_distance", "1000" )
cvar_cooldown = register_cvar("freezer_shot_cooldown","20.0")
pcvar_freeze = register_cvar( "freez_time", "5.0" )
cvar_nemesis = register_cvar("freezer_nemesis", "1")
g_maxplayers = get_maxplayers()
register_logevent("roundStart", 2, "1=Round_Start")
register_forward(FM_CmdStart, "fwd_cmd_start")
RegisterHam(Ham_Spawn,"player","fw_PlayerSpawn_Post",1)
RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", 1)
register_event( "DeathMsg" , "eventDeathMsg" , "a" );
register_logevent( "eventRoundEnd" , 2 , "1=Round_End" );
}
public fw_PlayerSpawn_Post(id)
{
// Not alive...
if(!is_user_alive(id))
return HAM_IGNORED
if(cvar_nemesis == 1)
{
if(bb_get_user_zombie_class(id) == g_freezer && bb_is_user_zombie(id))
{
hase_freez[id] = true
}
} else {
if(bb_get_user_zombie_class(id) == g_freezer && bb_is_user_zombie(id))
{
hase_freez[id] = true
}
}
return HAM_IGNORED
}
public fwd_cmd_start(id, uc_handle, seed)
{
if(cvar_nemesis == 1)
{
if (!is_user_alive(id) || !bb_is_user_zombie(id) || hase_freez[id] )
return FMRES_IGNORED
} else {
if (!is_user_alive(id) || !bb_is_user_zombie(id) || hase_freez[id] )
return FMRES_IGNORED
}
if (bb_get_user_zombie_class(id) != g_freezer)
return FMRES_IGNORED
static buttons
buttons = get_uc(uc_handle, UC_Buttons)
if(buttons & IN_ATTACK2) {
emit_sound(id, CHAN_WEAPON, freezer_sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
cmd_freez(id)
hase_freez[id] = true
}
buttons &= ~IN_ATTACK2
set_uc(uc_handle, UC_Buttons, buttons)
return FMRES_HANDLED
}
cmd_freez(id)
{
new target, body
static Float:start[3]
static Float:aim[3]
pev(id, pev_origin, start)
fm_get_aim_origin(id, aim)
start[2] += 16.0; // raise
aim[2] += 16.0; // raise
get_user_aiming ( id, target, body, pcvar_distance )
if( is_user_alive( target ) && !bb_is_user_zombie( target ))
{
new iOrigin[ 3 ];
get_user_origin( target, iOrigin, 0 );
message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( 15 );
write_coord( iOrigin[ 0 ] ); // start position (X)
write_coord( iOrigin[ 1 ] ); // start position (Y)
write_coord( iOrigin[ 2 ] + 40 ); // start position (Z)
write_coord( iOrigin[ 0 ] ); // end position (X)
write_coord( iOrigin[ 1 ] ); // end position (Y)
write_coord( iOrigin[ 2 ] ); // end position (Z)
write_short( freezer_spr ); // sprite index
write_byte( 50 ); // count
write_byte( 20 ); // life in 0.1's
write_byte( 2 ); // scale in 0.1's
write_byte( 50 ); // velocity along vector in 10's
write_byte( 10 ); // randomness of velocity in 10's
message_end( );
message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, aim[0])
engfunc(EngFunc_WriteCoord, aim[1])
engfunc(EngFunc_WriteCoord, aim[2])
write_short(beamSpr)
write_byte(10)
write_byte(30)
write_byte(4)
message_end()
Freeze(target)
set_task( get_pcvar_float( pcvar_freeze ), "UnFreeze", target )
emit_sound(target, CHAN_WEAPON, glass_sound_1, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(0)
engfunc(EngFunc_WriteCoord,start[0]);
engfunc(EngFunc_WriteCoord,start[1]);
engfunc(EngFunc_WriteCoord,start[2]);
engfunc(EngFunc_WriteCoord,aim[0]);
engfunc(EngFunc_WriteCoord,aim[1]);
engfunc(EngFunc_WriteCoord,aim[2]);
write_short(beamSpr); // sprite index
write_byte(0); // start frame
write_byte(10); // frame rate in 0.1's
write_byte(10); // life in 0.1's
write_byte(100); // line width in 0.1's
write_byte(4); // noise amplititude in 0.01's
write_byte(100); // red
write_byte(149); // green
write_byte(237); // blue
write_byte(100); // brightness
write_byte(50); // scroll speed in 0.1's
message_end();
set_task( get_pcvar_float( cvar_cooldown ), "reset_cooldown", id );
set_task( 1.0, "CountDown", id, _, _, "a",Countdown [ id ] );
Countdown [ id ] = get_pcvar_num( cvar_cooldown )
}
public ham_PlayerSpawn_Post(id, infector)
{
if (bb_get_user_zombie_class(id) == g_freezer)
{
is_cooldown[id] = 0
hase_freez[id] = false
new text[100]
format(text,99,"^x04[BB]^x01 Your ability is^x04 Freez Human^x01. Cooldown:^x04 %d ^x01seconds. Press ^x04[MOUSE2]^x01 to use this.",get_pcvar_num( cvar_cooldown ))
message_begin(MSG_ONE,get_user_msgid("SayText"),{0,0,0},id)
write_byte(id)
write_string(text)
message_end()
}
}
public reset_cooldown(id)
{
hase_freez[id] = false
new text[100]
format(text,99,"^x04[BB]^x01 Now You Can Use Your ability. Press ^x04[MOUSE2]")
message_begin(MSG_ONE,get_user_msgid("SayText"),{0,0,0},id)
write_byte(id)
write_string(text)
message_end()
}
public zp_user_humanized_post(id)
{
remove_task(id)
is_cooldown[id] = 0
}
public roundStart()
{
for (new i = 1; i <= g_maxplayers; i++)
{
Countdown [ i ] = get_pcvar_num( cvar_cooldown )
is_cooldown[i] = 0
remove_task(i)
}
}
stock Freeze(id)
{
new iFlags = pev( id , pev_flags );
if( ~iFlags & FL_FROZEN )
{
set_pev( id , pev_flags , iFlags | FL_FROZEN );
pev( id , pev_v_angle , iAngles[ id ] );
set_user_rendering( id , kRenderFxGlowShell , 0 , 100 , 200 , kRenderNormal , 16 );
}
bFrozen[ id ] = true;
}
public eventDeathMsg( )
{
UnFreeze( read_data( iVictim ) );
}
public eventRoundEnd( )
{
new iPlayers[ 32 ] , iNum , i , id;
get_players( iPlayers , iNum , "a" );
for( i = 0; i < iNum; i++ )
{
id = iPlayers[ i ];
if( is_user_frozen( id ) )
{
UnFreeze( id );
}
}
}
public UnFreeze(id)
{
new frozenCount = 0;
bFrozen[ id ] = false;
new iFlags = pev( id , pev_flags ) ;
if( iFlags & FL_FROZEN )
{
set_pev( id , pev_flags , iFlags & ~FL_FROZEN ) ;
set_user_rendering( id , kRenderFxNone , 0 , 0 , 0 , kRenderNormal , 0 );
emit_sound(id, CHAN_WEAPON, glass_sound_2, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
new iPlayers[ 32 ] , iNum , i , tid;
get_players( iPlayers , iNum , "a" );
for( i = 0; i < iNum; i++ )
{
tid = iPlayers[ i ];
if( is_user_frozen( tid ) )
{
frozenCount++;
}
}
}
}
public CountDown(id) {
if(is_valid_ent(id) && is_user_alive(id))
{
Countdown [ id ] = Countdown [ id ] - 1;
set_hudmessage(0, 255, 0, 0.75, 0.92, 0, 1.0, 1.1, 0.0, 0.0, -1)
show_hudmessage(id, "Freez Ability cooldown: %d",Countdown [ id ])
}else{
remove_task(id)
}
}