Код за потвърждение: Избери целия код
#include <amxmodx>
#include <cromchat>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#define VIP_FLAG ADMIN_RESERVATION
#define ICE_CUBE_EFFECT
#if defined ICE_CUBE_EFFECT
#include <engine>
#endif
enum _:CvarsReg
{
Vip_health,
Vip_armor,
Vip_glock_bullets,
Vip_freeze_distance,
Vip_freeze_duration
}
enum _:Cvars
{
vip_health,
vip_armor,
vip_glock_bullets,
vip_freeze_distance,
Float:vip_freeze_duration
}
new g_eCvarsReg[CvarsReg]
new g_eCvars[Cvars]
new bool:g_bCanFreeze[33]
new bool:g_bIsFrozen[33]
public plugin_init()
{
register_plugin("VIP Plugin", "1.0", "OciXCrom")
RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
for(new szWeapon[20], i = CSW_P228; i <= CSW_P90; i++)
{
if(get_weaponname(i, szWeapon, charsmax(szWeapon)))
RegisterHam(Ham_Weapon_SecondaryAttack, szWeapon, "OnSecondaryAttack", 1)
}
g_eCvarsReg[Vip_health] = register_cvar("vip_health", "120")
g_eCvarsReg[Vip_armor] = register_cvar("vip_armor", "100")
g_eCvarsReg[Vip_glock_bullets] = register_cvar("vip_glock_bullets", "3")
g_eCvarsReg[Vip_freeze_distance] = register_cvar("vip_freeze_distance", "10000")
g_eCvarsReg[Vip_freeze_duration] = register_cvar("vip_freeze_duration", "3.0")
CC_SetPrefix("&x04[VIP]")
}
public plugin_cfg()
{
g_eCvars[vip_health] = get_pcvar_num(g_eCvarsReg[Vip_health])
g_eCvars[vip_armor] = get_pcvar_num(g_eCvarsReg[Vip_armor])
g_eCvars[vip_glock_bullets] = get_pcvar_num(g_eCvarsReg[Vip_glock_bullets])
g_eCvars[vip_freeze_distance] = get_pcvar_num(g_eCvarsReg[Vip_freeze_distance])
g_eCvars[vip_freeze_duration] = _:get_pcvar_float(g_eCvarsReg[Vip_freeze_duration])
}
public OnPlayerSpawn(id)
{
if(!is_user_alive(id) || !IsVIP(id))
return
g_bCanFreeze[id] = true
g_bIsFrozen[id] = false
set_user_health(id, g_eCvars[vip_health])
cs_set_user_armor(id, g_eCvars[vip_armor], CS_ARMOR_VESTHELM)
#if defined ICE_CUBE_EFFECT
if (UTIL_IceCubeExists(id))
UTIL_RemoveIceCube(id)
#endif
if(cs_get_user_team(id) == CS_TEAM_T)
cs_set_weapon_ammo(give_item(id, "weapon_glock18"), g_eCvars[vip_glock_bullets])
}
public OnSecondaryAttack(iEnt)
{
new id = pev(iEnt, pev_owner)
if(!g_bCanFreeze[id] || !IsVIP(id))
return
new CsTeams:iTeam = cs_get_user_team(id)
if(iTeam != CS_TEAM_CT)
return
new iPlayer, iBody
get_user_aiming(id, iPlayer, iBody, g_eCvars[vip_freeze_distance])
if(!is_user_connected(iPlayer) || cs_get_user_team(iPlayer) != iTeam)
return
if(g_bIsFrozen[iPlayer])
{
CC_SendMessage(id, "That player is already frozen.")
return
}
g_bCanFreeze[id] = false
SetFreeze(iPlayer, true)
#if defined ICE_CUBE_EFFECT
SetEffects(iPlayer)
#endif
set_task(g_eCvars[vip_freeze_duration], "UnfreezePlayer", iPlayer)
new szName[2][32]
get_user_name(id, szName[0], charsmax(szName[]))
get_user_name(iPlayer, szName[1], charsmax(szName[]))
CC_SendMessage(id, "You froze &x03%s &x01for &x04%.1f &x01seconds.", szName[1], g_eCvars[vip_freeze_duration])
CC_SendMessage(iPlayer, "You have been frozen by &x03%s &x01for &x04%.1f &x01seconds.", szName[0], g_eCvars[vip_freeze_duration])
}
public UnfreezePlayer(id)
{
g_bIsFrozen[id] = false
SetFreeze(id, false)
#if defined ICE_CUBE_EFFECT
RemoveEffects(id)
#endif
CC_SendMessage(id, "You are no longer frozen.")
}
bool:IsVIP(const id)
return bool:(get_user_flags(id) & VIP_FLAG)
SetFreeze(const id, const bool:bFreeze)
{
if(bFreeze)
{
g_bIsFrozen[id] = true
set_pev(id, pev_flags, pev(id, pev_flags) | FL_FROZEN)
}
else
{
g_bIsFrozen[id] = false
set_pev(id, pev_flags, pev(id, pev_flags) & ~FL_FROZEN)
}
}
// Huehue Part starts here..
#if defined ICE_CUBE_EFFECT
new const szIceClass[] = "entity_ice_cube"
new const szIceModels[][] =
{
"models/ice_cube.mdl",
"models/ice_cube_small.mdl"
}
new const g_szSoundExplosion[] = "frost_exp.wav"
enum _:eSprites
{
SPRITE_CYLINDER,
SPRITE_FROST,
SPRITE_FROST2,
SPRITE_FLAKE
}
new g_iSprite[eSprites], g_iGlass
public plugin_precache()
{
precache_sound(g_szSoundExplosion)
g_iSprite[SPRITE_CYLINDER] = precache_model("sprites/white.spr")
g_iSprite[SPRITE_FROST] = precache_model("sprites/frostexp_1.spr")
g_iSprite[SPRITE_FROST2] = precache_model("sprites/frostexp_2.spr")
g_iSprite[SPRITE_FLAKE] = precache_model("sprites/snowflake_1.spr")
g_iGlass = precache_model("models/glassgibs.mdl")
for (new i = 0; i < sizeof(szIceModels); i++)
{
if (file_exists(szIceModels[i]))
precache_model(szIceModels[i])
else
server_print("Model missing ^"%s^"...", szIceModels[i])
}
}
SetEffects(id)
{
emit_sound(id, CHAN_AUTO, g_szSoundExplosion, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
UTIL_Explosion(id, g_iSprite[SPRITE_FROST], 40, 30, 4)
UTIL_Explosion(id, g_iSprite[SPRITE_FROST2], 20, 30, 4)
UTIL_DLight(id, 80, 0, 128, 255, 50, 40)
UTIL_BeamCylinder(id, g_iSprite[SPRITE_CYLINDER], 0, 5, 10, 255, 0, 128, 255, 255, 0)
UTIL_SpriteTrail(id, g_iSprite[SPRITE_FLAKE], 30, 3, 2, 30, 0)
UTIL_CreateIceCube(id)
UTIL_ScreenFade(id, g_eCvars[vip_freeze_duration], 0.4, 0, 50, 200, 100)
}
RemoveEffects(id)
{
UTIL_RemoveIceCube(id)
UTIL_ScreenFade(id, g_eCvars[vip_freeze_duration], 0.0, 0, 50, 200, 100)
UTIL_BreakGlass(id, 10, 25)
set_rendering(id)
}
UTIL_CreateIceCube(id)
{
if (UTIL_IceCubeExists(id))
return
new iEnt = create_entity("info_target")
if (is_valid_ent(iEnt))
{
new Float:flOrigin[3]
new iDucking = (entity_get_int(id, EV_INT_flags) & FL_DUCKING) ? 1 : 0
entity_get_vector(id, EV_VEC_origin, flOrigin)
if (iDucking) flOrigin[2] -= 15.0
else flOrigin[2] -= 35.0
entity_set_string(iEnt, EV_SZ_classname, szIceClass)
entity_set_model(iEnt, szIceModels[iDucking])
entity_set_int(iEnt, EV_INT_movetype, MOVETYPE_NONE)
entity_set_int(iEnt, EV_INT_solid, SOLID_BBOX)
entity_set_origin(iEnt, flOrigin)
set_rendering(iEnt, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 255)
set_rendering(id, kRenderFxGlowShell, 0, 200, 255, kRenderNormal, 60)
entity_set_int(iEnt, EV_INT_iuser3, id)
entity_set_vector(iEnt, EV_VEC_origin, flOrigin)
}
}
UTIL_RemoveIceCube(id)
{
new iEnt = -1, iUser
while ((iEnt = find_ent_by_class(iEnt, szIceClass)) > 0)
{
iUser = entity_get_int(iEnt, EV_INT_iuser3)
if (iUser == id)
remove_entity(iEnt)
}
}
UTIL_IceCubeExists(id)
{
new iEnt = -1, iUser
while ((iEnt = find_ent_by_class(iEnt, szIceClass)) > 0)
{
iUser = entity_get_int(iEnt, EV_INT_iuser3)
if (iUser == id)
return true
}
return false
}
UTIL_BeamCylinder(iEnt, iSprite, iFramerate, iLife, iWidth, iAmplitude, iRed, iGreen, iBlue, iBright, iSpeed)
{
new Float:vOrigin[3]
pev(iEnt, pev_origin, vOrigin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, vOrigin[0])
engfunc(EngFunc_WriteCoord, vOrigin[1])
engfunc(EngFunc_WriteCoord, vOrigin[2] + 10)
engfunc(EngFunc_WriteCoord, vOrigin[0] );
engfunc(EngFunc_WriteCoord, vOrigin[1] + 400)
engfunc(EngFunc_WriteCoord, vOrigin[2] + 400)
write_short(iSprite)
write_byte(0)
write_byte(iFramerate)
write_byte(iLife)
write_byte(iWidth)
write_byte(iAmplitude)
write_byte(iRed)
write_byte(iGreen)
write_byte(iBlue)
write_byte(iBright)
write_byte(iSpeed)
message_end()
}
UTIL_DLight(iEnt, iRadius, iRed, iGreen, iBlue, iLife, iDecay)
{
new Float:vOrigin[3]
pev(iEnt, pev_origin, vOrigin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DLIGHT)
engfunc(EngFunc_WriteCoord, vOrigin[0])
engfunc(EngFunc_WriteCoord, vOrigin[1])
engfunc(EngFunc_WriteCoord, vOrigin[2])
write_byte(iRadius)
write_byte(iRed)
write_byte(iGreen)
write_byte(iBlue)
write_byte(iLife)
write_byte(iDecay)
message_end()
}
UTIL_Explosion(iEnt, iSprite, iScale, iFramerate, Flags)
{
new Float:vOrigin[3]
pev(iEnt, pev_origin, vOrigin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte( TE_EXPLOSION )
engfunc(EngFunc_WriteCoord, vOrigin[0])
engfunc(EngFunc_WriteCoord, vOrigin[1])
engfunc(EngFunc_WriteCoord, vOrigin[2])
write_short(iSprite)
write_byte(iScale)
write_byte(iFramerate)
write_byte(Flags)
message_end()
}
UTIL_SpriteTrail(iEnt, iSprite, iCount, iLife, iScale, iVelocity, iVary)
{
new Float:vOrigin[3]
pev(iEnt, pev_origin, vOrigin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_SPRITETRAIL)
engfunc(EngFunc_WriteCoord, vOrigin[0])
engfunc(EngFunc_WriteCoord, vOrigin[1])
engfunc(EngFunc_WriteCoord, vOrigin[2] + 100)
engfunc(EngFunc_WriteCoord, vOrigin[0] + random_float(-200.0, 200.0))
engfunc(EngFunc_WriteCoord, vOrigin[1] + random_float(-200.0, 200.0))
engfunc(EngFunc_WriteCoord, vOrigin[2])
write_short(iSprite)
write_byte(iCount)
write_byte(iLife)
write_byte(iScale)
write_byte(iVelocity)
write_byte(iVary)
message_end()
}
UTIL_BreakGlass(iEnt, iCount, iLife)
{
new Float:vOrigin[3]
pev(iEnt, pev_origin, vOrigin)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0)
write_byte(TE_BREAKMODEL)
write_coord(floatround(vOrigin[0])) // X
write_coord(floatround(vOrigin[1])) // Y
write_coord(floatround(vOrigin[2]) + 24) // Z
write_coord(16) // Size X
write_coord(16) // Size Y
write_coord(16) // Size Z
write_coord(random_num(-50, 50)) // Velocity X
write_coord(random_num(-50, 50)) // Velocity Y
write_coord(25) // Velocity Z
write_byte(10) // Random Velocity
write_short(g_iGlass) // Model
write_byte(iCount) // iCount (10)
write_byte(iLife) // iLife (25)
write_byte(0x01) // Break Glass Flag (0x01)
message_end() // Message Ends
}
UTIL_ScreenFade(iEnt, Float:fDuration, Float:fHoldTime, cRed, cGreen, cBlue, cAlpha)
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), {0, 0, 0}, iEnt)
write_short(floatround(4096.0 * fDuration, floatround_round))
write_short(floatround(4096.0 * fHoldTime, floatround_round))
write_short(4096)
write_byte(cRed)
write_byte(cGreen)
write_byte(cBlue)
write_byte(cAlpha)
message_end()
}
#endif