- Код: Выделить всё
#include < amxmodx >
#include < hamsandwich >
#include < fakemeta >
#include < zombieplague >
#define PLUGIN_AUTHOR " "
#define PLUGIN_NAME "[TARGETBR] Faca Gelo p/ Surv"
#define PLUGIN_VERSION "1.0 - Private "
#define FFADE_IN 0x0000
#define FFADE_STAYOUT 0x0004
#define BREAK_GLASS 0x01
#define UNIT_SECOND (1<<12)
#define MAX_CLIENTS 32
#define XTRA_OFS_WEAPON 4
#define m_pPlayer 41
#define KNIFE_V_MODEL "models/weapons/vox/v_axe.mdl"
#define KNIFE_P_MODEL "models/weapons/vox/p_axe.mdl"
#define KNIFE_SOUND_FROST "warcraft3/impalehit.wav"
#define KNIFE_SOUND_BREAK "warcraft3/impalelaunch1.wav"
#define KNIFE_FROST_DURATION 1.0 // Tempo de congelamento
#define KNIFE_FROST_DAMAGE 12.0// Danos faca
#define KNIFE_FROST_VELOCITY 300.0// Gravitação
#define KNIFE_FROST_SPEED 350.0// Velocidade
#define KNIFE_FROST_KNOCK_POWER 3.0// Retorno
enum
{
SOUND_NULL,
SOUND_DRAW,
SOUND_MISS,
SOUND_STAB,
SOUND_HIT,
SOUND_HIT1,
SOUND_HIT2,
SOUND_HITWALL,
SOUND_END
}
enum
{
KNIFE_ACTIVE,
KNIFE_END
}
new const g_KNIFESounds[SOUND_END][] =
{
"",
"weapons/vox/axe_drawww.wav",
"weapons/vox/axe_miss.wav",
"weapons/vox/axe_stabb.wav",
"weapons/vox/axe_hitwal.wav",
"weapons/vox/axe_hit1.wav",
"weapons/vox/axe_hit22.wav",
"weapons/vox/axe_hitwal.wav"
}
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame
new Trie: g_ReplacedSounds
new g_KnifeData [MAX_CLIENTS + 1][KNIFE_END]
new g_iFrozen [ MAX_CLIENTS + 1 ]
new g_glassSpr
new g_iMaxPlayers
public plugin_precache( )
{
new i
g_ReplacedSounds = TrieCreate()
TrieSetCell(g_ReplacedSounds, "weapons/knife_deploy1.wav", SOUND_DRAW)
TrieSetCell(g_ReplacedSounds, "weapons/knife_hit1.wav", SOUND_HIT)
TrieSetCell(g_ReplacedSounds, "weapons/knife_hit2.wav", SOUND_HIT1)
TrieSetCell(g_ReplacedSounds, "weapons/knife_hit3.wav", SOUND_HIT2)
TrieSetCell(g_ReplacedSounds, "weapons/knife_hit4.wav", SOUND_HIT)
TrieSetCell(g_ReplacedSounds, "weapons/knife_hitwall1.wav", SOUND_HITWALL)
TrieSetCell(g_ReplacedSounds, "weapons/knife_slash1.wav", SOUND_MISS)
TrieSetCell(g_ReplacedSounds, "weapons/knife_slash2.wav", SOUND_MISS)
TrieSetCell(g_ReplacedSounds, "weapons/knife_stab.wav", SOUND_STAB)
precache_model(KNIFE_V_MODEL); precache_model(KNIFE_P_MODEL)
precache_sound(KNIFE_SOUND_FROST); precache_sound(KNIFE_SOUND_BREAK)
g_glassSpr = engfunc(EngFunc_PrecacheModel, "models/glassgibs.mdl")
for (i = SOUND_DRAW; i < SOUND_END; i++)
{
precache_sound(g_KNIFESounds[i])
}
}
public plugin_init( )
{
register_plugin
(
PLUGIN_NAME ,
PLUGIN_VERSION ,
PLUGIN_AUTHOR
);
RegisterHam( Ham_Item_Deploy, "weapon_knife", "Knife_Deploy_Post", 1)
RegisterHam( Ham_Player_PreThink, "player", "Player_PreThink")
RegisterHam( Ham_TraceAttack, "player", "Knife_TraceAttack" );
register_event( "DeathMsg", "EV_DeathMsg", "a" );
register_forward(FM_EmitSound, "EmitSound")
g_iMaxPlayers = get_maxplayers( );
}
public plugin_end()
{
TrieDestroy(g_ReplacedSounds)
}
public client_disconnect(iPlayer)
{
arrayset(g_KnifeData[iPlayer], 0, KNIFE_END)
}
public zp_user_infected_post(iPlayer, Infector)
{
arrayset(g_KnifeData[iPlayer], 0, KNIFE_END)
}
public zp_user_humanized_post( iPlayer )
{
if( zp_get_user_survivor( iPlayer ) )
{
g_KnifeData[iPlayer][KNIFE_ACTIVE] = true
}
else arrayset(g_KnifeData[iPlayer], 0, KNIFE_END)
}
public EV_DeathMsg( )
{
static pevVictim;
pevVictim = read_data( 2 )
if( !is_user_connected( pevVictim ) )
return
arrayset(g_KnifeData[pevVictim], 0, KNIFE_END)
}
public Knife_TraceAttack(const iEntity, const iAttacker, const Float: flDamage)
{
if( !( 1 <= iAttacker <= g_iMaxPlayers ) )
return;
if( !is_user_alive( iAttacker ) )
return;
if( zp_get_user_zombie( iAttacker ) )
return;
if ( !g_KnifeData[iAttacker][KNIFE_ACTIVE]) return
if( get_user_weapon( iAttacker ) != CSW_KNIFE )
return
SetHamParamFloat( 3 , flDamage * KNIFE_FROST_DAMAGE );
frost_process( iEntity )
}
public Knife_Deploy_Post(iItem)
{
new iPlayer
if (CheckItem(iItem, iPlayer))
{
if ( zp_get_user_zombie ( iPlayer ) ) return HAM_IGNORED
set_pev(iPlayer, pev_viewmodel2, KNIFE_V_MODEL)
set_pev(iPlayer, pev_weaponmodel2, KNIFE_P_MODEL)
}
return HAM_IGNORED
}
public EmitSound(iPlayer, iChannel, szSample[], Float: flVolume, Float: flAttn, iFlag, iPitch)
{
if (is_user_alive(iPlayer) && g_KnifeData[iPlayer][KNIFE_ACTIVE] )
{
new iSoundType
TrieGetCell(g_ReplacedSounds, szSample, iSoundType)
if (iSoundType != SOUND_NULL)
{
emit_sound(iPlayer, iChannel, g_KNIFESounds[iSoundType], flVolume, flAttn, iFlag, iPitch)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public frost_process(pevVictim)
{
fm_set_rendering(pevVictim, kRenderFxGlowShell, 0, 255, 127, kRenderNormal, 50)
emit_sound(pevVictim, CHAN_BODY, KNIFE_SOUND_FROST, 1.0, ATTN_NORM, 0, PITCH_NORM)
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, pevVictim)
write_short(0)
write_short(0)
write_short(FFADE_STAYOUT)
write_byte(0)
write_byte(50)
write_byte(200)
write_byte(100)
message_end()
g_iFrozen[pevVictim] = true
set_task(KNIFE_FROST_DURATION, "remove_freeze", pevVictim)
}
public remove_freeze(pevVictim)
{
if(!is_user_alive(pevVictim) || !g_iFrozen[pevVictim])
return;
g_iFrozen[pevVictim] = false
fm_set_rendering(pevVictim)
ExecuteHamB ( Ham_Player_ResetMaxSpeed, pevVictim)
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, pevVictim)
write_short(UNIT_SECOND)
write_short(0)
write_short(FFADE_IN)
write_byte(0)
write_byte(50)
write_byte(200)
write_byte(100)
message_end()
emit_sound(pevVictim, CHAN_BODY, KNIFE_SOUND_BREAK, 1.0, ATTN_NORM, 0, PITCH_NORM)
static origin2[3]
get_user_origin(pevVictim, origin2)
message_begin(MSG_PVS, SVC_TEMPENTITY, origin2)
write_byte(TE_BREAKMODEL)
write_coord(origin2[0])
write_coord(origin2[1])
write_coord(origin2[2] + 24)
write_coord(16)
write_coord(16)
write_coord(16)
write_coord(random_num(-50, 50))
write_coord(random_num(-50, 50))
write_coord(25)
write_byte(10)
write_short(g_glassSpr)
write_byte(10)
write_byte(25)
write_byte(BREAK_GLASS)
message_end()
}
public Player_PreThink(id)
{
if( !is_user_alive(id) )
return HAM_IGNORED
if(g_iFrozen[id])
{
set_pev(id, pev_velocity, Float:{ 0.0, 0.0, 0.0 })
set_pev(id, pev_maxspeed, 1.0)
}
if( g_KnifeData[id][KNIFE_ACTIVE] )
{
static iFlags;
static iWaterlvl;
static Float: iVelocity[ 3 ]
iFlags = pev( id, pev_flags );
iWaterlvl = pev( id, pev_waterlevel );
if( get_user_weapon( id ) != CSW_KNIFE )
{
return HAM_IGNORED ;
}
if ( ( ~iFlags & FL_ONGROUND ) || iFlags & FL_WATERJUMP || iWaterlvl > 1 )
{
return HAM_IGNORED;
}
if( ( pev( id, pev_button ) & IN_JUMP ) && !( pev( id, pev_oldbuttons ) & IN_JUMP ) )
{
pev( id, pev_velocity, iVelocity )
iVelocity[ 2 ] += KNIFE_FROST_VELOCITY ;
set_pev( id, pev_velocity, iVelocity )
set_pev( id, pev_gaitsequence, 6 )
}
set_pev( id, pev_maxspeed, KNIFE_FROST_SPEED )
}
return HAM_IGNORED
}
CheckItem(const iItem, &iPlayer)
{
if (pev_valid(iItem) == 2)
{
iPlayer = get_pdata_cbase(iItem, m_pPlayer, XTRA_OFS_WEAPON)
if ( g_KnifeData[iPlayer][KNIFE_ACTIVE] )
{
return 1
}
}
return 0
}
stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
static Float:color[3]
color[0] = float(r)
color[1] = float(g)
color[2] = float(b)
set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, color)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, float(amount))
}
Название темы скорректировано (устное предупреждение; см. Вы должны зарегистрироваться, чтобы видеть ссылки.) // Subb98