Супер е бачка само едно нещо примерно може ли да се махне Flash и Smoke да има само HE и по възможност ако ти се занимава да се добави това
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <reapi>
#include <hamsandwich>
#include <customshop>
additem ITEM_FROSTNADE
#define CLIENT_IN_DUCK 15.0
#define CLIENT_NOT_IN_DUCK 35.0
enum _:XYZ
{
Float:X,
Float:Y,
Float:Z
}
enum _:RGB
{
R,
G,
B
}
#define PLUGIN_NAME "CSHOP: Frost Nade ( FlashBang )"
#define PLUGIN_VERSION "1.0.0"
#define PLUGIN_AUTHOR "Huehue @ AMXX-BG.INFO"
#define flag_get(%1,%2) (%1 & (1 << (%2 & 31)))
#define flag_set(%1,%2) %1 |= (1 << (%2 & 31))
#define flag_unset(%1,%2) %1 &= ~(1 << (%2 & 31))
#define TASK_FROST_REMOVE 100
#define valid_entity(%0) !is_nullent(%0)
#define WEAPON_ANIM_DRAW_TIME 51/30.0
new const WEAPON_OLD[] = { "weapon_flashbang" }
enum _:eModelList
{
View,
Player,
World
}
new const g_szNadeModels[eModelList][] =
{
"models/rhuehue_frost/v_frost.mdl",
"models/rhuehue_frost/p_frost.mdl",
"models/rhuehue_frost/w_frost.mdl"
}
new g_iNadeModelsIndex[eModelList]
enum _:eSoundList
{
Explode,
Freeze,
Unfreeze
}
new const g_szNadeSounds[eSoundList][] =
{
"rhuehue_frost/nova.wav", // Explode
"rhuehue_frost/freeze.wav", // Freeze & Create Ice Block
"rhuehue_frost/unfreeze.wav" // Unfreeze & Destroy Ice Block
}
enum _:eCubeList
{
Cube,
DuckCube,
DestroyCube
}
new const g_iCubeModel[eCubeList][] =
{
"models/rhuehue_frost/ice_cube.mdl",
"models/rhuehue_frost/ice_cube_duck.mdl",
"models/rhuehue_frost/ice_cube_destroy.mdl"
}
new g_iCubeModelIndex[eCubeList]
enum _:eSpriteList
{
TrailSpr,
ExplodeSpr,
FrostSpr
}
new const g_szNadeSprites[eSpriteList][] =
{
"sprites/lgtning.spr",
"sprites/ballsmoke.spr",
"sprites/rhuehue_frost/frost_exp.spr"
}
new g_iSprite[eSpriteList]
const UNIT_SECOND = (1<<12)
const FADE_IN = 0x0000
const FADE_OUT = 0x0004
new g_iIsFrozen
new g_iMsgDamage, g_iMsgIconStatus, g_iMsgScreenFade
new g_iHasGrenadeFrost[MAX_CLIENTS + 1]
new g_iEntCube[MAX_CLIENTS + 1]
new Float:g_pC_FreezeDuration, g_pC_FreezeHitSelf, g_pC_FreezeTeamMates
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
RegisterHookChain(RG_CBasePlayer_Spawn, "CBase_PlayerSpawn", true)
RegisterHookChain(RG_CBasePlayer_Killed, "CBase_PlayerKilled", true)
RegisterHookChain(RG_CBasePlayer_TraceAttack, "CBase_PlayerTraceAttack", false)
RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBase_PlayerTakeDamage", false)
RegisterHookChain(RG_ThrowFlashbang, "ThrowFlashbang", true)
RegisterHookChain(RG_CBasePlayerWeapon_DefaultDeploy, "CBasePlayerWeapon_DefaultDeploy")
bind_pcvar_float(create_cvar("fn_freeze_duration", "4.0", FCVAR_NONE, "Duration of the Freeze"), g_pC_FreezeDuration)
bind_pcvar_num(create_cvar("fn_freeze_hitself", "1", FCVAR_NONE, "Whether you will be able to freeze yourself or not"), g_pC_FreezeHitSelf)
bind_pcvar_num(create_cvar("fn_freeze_teammates", "1", FCVAR_NONE, "Whether you will be able to freeze team mates or not"), g_pC_FreezeTeamMates)
g_iMsgScreenFade = get_user_msgid("ScreenFade")
g_iMsgDamage = get_user_msgid("Damage")
g_iMsgIconStatus = get_user_msgid("StatusIcon")
}
public plugin_precache()
{
ITEM_FROSTNADE = cshop_register_item("rhuehue_frostnade", "Frost Grenade \d[ Ice Block ]", 300, 1)
static i
for(i = 0; i < sizeof g_szNadeModels; i++)
g_iNadeModelsIndex[i] = precache_model(g_szNadeModels[i])
for(i = 0; i < sizeof g_szNadeSounds; i++)
precache_sound(g_szNadeSounds[i])
for(i = 0; i < sizeof g_iCubeModel; i++)
g_iCubeModelIndex[i] = precache_model(g_iCubeModel[i])
for(i = 0; i < sizeof g_szNadeSprites; i++)
g_iSprite[i] = precache_model(g_szNadeSprites[i])
}
public cshop_item_selected(id, iItem)
{
if(iItem == ITEM_FROSTNADE)
{
g_iHasGrenadeFrost[id] += 1
if (!rg_has_item_by_name(id, WEAPON_OLD))
rg_give_item(id, WEAPON_OLD)
else
{
ExecuteHamB(Ham_GiveAmmo, id, 1, "Flashbang", 32)
rh_emit_sound2(id, 0, CHAN_ITEM, "items/9mmclip1.wav", VOL_NORM, ATTN_NORM)
}
}
}
public cshop_item_removed(id, iItem)
{
if(iItem == ITEM_FROSTNADE)
g_iHasGrenadeFrost[id] = 0
}
public CBasePlayerWeapon_DefaultDeploy(const iItem, szViewModel[], szWeaponModel[], iAnim, szAnimExt[], iSkipLocal)
{
static id
id = get_member(iItem, m_pPlayer)
if (get_member(get_member(id, m_pActiveItem), m_iId) == WEAPON_FLASHBANG)
{
if (g_iHasGrenadeFrost[id] <= 0)
return
message_begin(MSG_ONE, g_iMsgIconStatus, _, id)
write_byte(1)
write_string("dmg_cold")
write_byte(100)
write_byte(150)
write_byte(240)
message_end()
SetHookChainArg(2, ATYPE_STRING, g_szNadeModels[View])
SetHookChainArg(3, ATYPE_STRING, g_szNadeModels[Player])
set_member(iItem, m_Weapon_flTimeWeaponIdle, WEAPON_ANIM_DRAW_TIME)
}
else
{
message_begin(MSG_ONE, g_iMsgIconStatus, _, id)
write_byte(0)
write_string("dmg_cold")
message_end()
set_member(iItem, m_Weapon_flTimeWeaponIdle, 0.0)
}
}
public CBase_PlayerSpawn(id)
{
if (!is_user_alive(id))
return
if (task_exists(id + TASK_FROST_REMOVE))
remove_task(id + TASK_FROST_REMOVE)
if (flag_get(g_iIsFrozen, id))
{
flag_unset(g_iIsFrozen, id)
rg_set_rendering(id)
}
if (!rg_has_item_by_name(id, WEAPON_OLD) || !g_iHasGrenadeFrost[id])
g_iHasGrenadeFrost[id] = 0
if (g_iEntCube[id])
UTIL_IceBlock(id, false)
}
public CBase_PlayerTraceAttack(iVictim, iAttacker, Float:flDamage, Float:flDirection[3], iTraceHandle, iDamageType)
{
if (iVictim == iAttacker || !is_user_connected(iAttacker))
return HC_CONTINUE
if (flag_get(g_iIsFrozen, iVictim))
return HC_SUPERCEDE
return HC_CONTINUE
}
public CBase_PlayerTakeDamage(iVictim, iInflictor, iAttacker, Float:flDamage, iDamageType)
{
if (iVictim == iAttacker || !is_user_connected(iAttacker))
return HC_CONTINUE
if (flag_get(g_iIsFrozen, iVictim))
return HC_SUPERCEDE
return HC_CONTINUE
}
public client_putinserver(id)
{
Reset_Value(id)
if (g_iEntCube[id])
UTIL_IceBlock(id, false)
}
public client_disconnected(id)
{
Reset_Value(id)
if (g_iEntCube[id])
UTIL_IceBlock(id, false)
}
public CBase_PlayerKilled(id)
{
if (task_exists(id + TASK_FROST_REMOVE))
remove_task(id + TASK_FROST_REMOVE)
g_iHasGrenadeFrost[id] = 0
if (flag_get(g_iIsFrozen, id))
{
flag_unset(g_iIsFrozen, id)
rg_set_rendering(id)
message_begin(MSG_ONE, g_iMsgScreenFade, _, id)
write_short(UNIT_SECOND)
write_short(0)
write_short(FADE_IN)
write_byte(0)
write_byte(50)
write_byte(200)
write_byte(100)
message_end()
}
if (g_iEntCube[id])
UTIL_IceBlock(id, false)
}
public ThrowFlashbang(id, Float:vecStart[3], Float:vecVelocity[3], Float:vecTime, iEvent)
{
if (g_iHasGrenadeFrost[id])
{
g_iHasGrenadeFrost[id] -= 1
}
new iEntity = GetHookChainReturn(ATYPE_INTEGER)
if (is_nullent(iEntity))
return
set_entvar(iEntity, var_model, g_szNadeModels[World])
set_entvar(iEntity, var_modelindex, g_iNadeModelsIndex[World])
UTIL_CreateTrail(iEntity)
rg_set_rendering(iEntity, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 10)
set_entvar(iEntity, var_nextthink, get_gametime() + 1.5)
SetThink(iEntity, "HookThink_Grenade")
}
public HookThink_Grenade(iEntity)
{
new Float:vecOrigin[3]
get_entvar(iEntity, var_origin, vecOrigin)
UTIL_DELIGHT(vecOrigin)
UTIL_SpriteTrail(vecOrigin)
UTIL_CreateBeacon(vecOrigin)
rh_emit_sound2(iEntity, 0, CHAN_WEAPON, g_szNadeSounds[Explode], VOL_NORM, ATTN_NORM)
static iPlayers[MAX_PLAYERS], iNum, iVictim
get_players(iPlayers, iNum, "a")
new iOwner = get_entvar(iEntity, var_owner)
for (--iNum; iNum >= 0; iNum--)
{
iVictim = iPlayers[iNum]
if (!g_pC_FreezeHitSelf && iOwner == iVictim || !g_pC_FreezeTeamMates && get_member(iOwner, m_iTeam) == get_member(iVictim, m_iTeam) && iOwner != iVictim)
continue
new Float:flOrigin[XYZ]
get_entvar(iVictim, var_origin, flOrigin)
if (get_distance_f(flOrigin, vecOrigin) > 240.0)
continue
flag_set(g_iIsFrozen, iVictim)
new Float:flVelocity[3]
get_entvar(iVictim, var_velocity, flVelocity)
flVelocity[0] = 0.0
flVelocity[1] = 0.0
set_entvar(iVictim, var_velocity, flVelocity)
set_entvar(iVictim, var_flags, get_entvar(iVictim, var_flags) | FL_FROZEN)
UTIL_IceBlock(iVictim, true)
set_member(iVictim, m_flNextAttack, g_pC_FreezeDuration)
message_begin(MSG_ONE, g_iMsgScreenFade, _, iVictim)
write_short(0)
write_short(0)
write_short(FADE_OUT)
write_byte(0)
write_byte(50)
write_byte(200)
write_byte(100)
message_end()
message_begin(MSG_ONE_UNRELIABLE, g_iMsgDamage, _, iVictim)
write_byte(0)
write_byte(0)
write_long(DMG_DROWN)
write_coord(0)
write_coord(0)
write_coord(0)
message_end()
rg_set_rendering(g_iEntCube[iVictim], kRenderFxNone, 255, 255, 255, kRenderTransAdd, 255)
rg_set_rendering(iVictim, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 10)
if (!task_exists(iVictim + TASK_FROST_REMOVE))
set_task(g_pC_FreezeDuration, "CTask__RemoveFreeze", iVictim + TASK_FROST_REMOVE)
}
set_entvar(iEntity, var_flags, get_entvar(iEntity, var_flags) | FL_KILLME)
}
public CTask__RemoveFreeze(taskid)
{
new id = taskid - TASK_FROST_REMOVE
set_entvar(id, var_flags, get_entvar(id, var_flags) & ~FL_FROZEN)
set_member(id, m_flNextAttack, 0.0)
message_begin(MSG_ONE, g_iMsgScreenFade, _, id)
write_short(UNIT_SECOND)
write_short(0)
write_short(FADE_IN)
write_byte(0)
write_byte(50)
write_byte(200)
write_byte(100)
message_end()
UTIL_IceBlock(id, false)
flag_unset(g_iIsFrozen, id)
rg_set_rendering(id)
}
Reset_Value(id)
{
if (task_exists(id + TASK_FROST_REMOVE))
remove_task(id + TASK_FROST_REMOVE)
g_iHasGrenadeFrost[id] = 0
if (flag_get(g_iIsFrozen, id))
{
flag_unset(g_iIsFrozen, id)
rg_set_rendering(id)
}
}
stock rg_set_rendering(iEntity, iRender = kRenderFxNone, iRed = 255, iGreen = 255, iBlue = 255, iRenderNormal = kRenderNormal, iAmount = 16)
{
set_entvar(iEntity, var_renderfx, iRender)
new Float:vecRenderColor[RGB]
vecRenderColor[R] = float(iRed)
vecRenderColor[G] = float(iGreen)
vecRenderColor[B] = float(iBlue)
set_entvar(iEntity, var_rendercolor, vecRenderColor)
set_entvar(iEntity, var_rendermode, iRenderNormal)
set_entvar(iEntity, var_renderamt, float(iAmount))
return 1
}
public rg_remove_entity(iEntity)
{
if (valid_entity(iEntity))
set_entvar(iEntity, var_flags, get_entvar(iEntity, var_flags) | FL_KILLME)
}
public remove_cube(arg[],taskid)
{
if(valid_entity(arg[0]))
rg_remove_entity(arg[0])
}
enum EntityType
{
CREATE_ENT = 0, DESTROY_ENT
}
stock UTIL_IceBlock(id, bool:cube)
{
static iEntity[EntityType], iCubeType
if (cube)
{
static Float:flOrigin[XYZ]
if (!is_user_alive(id))
{
UTIL_IceBlock(id, false)
return
}
if (valid_entity(g_iEntCube[id]))
{
if (get_entvar(g_iEntCube[id], var_iuser3) != id)
{
if (get_entvar(g_iEntCube[id], var_team) == 1914)
rg_remove_entity(g_iEntCube[id])
}
else
{
iCubeType = (get_entvar(id, var_flags) & FL_DUCKING) ? DuckCube : Cube
get_entvar(id, var_origin, flOrigin)
flOrigin[Z] -= iCubeType ? CLIENT_IN_DUCK : CLIENT_NOT_IN_DUCK
set_entvar(g_iEntCube[id], var_origin, flOrigin)
return
}
}
get_entvar(id, var_origin, flOrigin)
iCubeType = (get_entvar(id, var_flags) & FL_DUCKING) ? DuckCube : Cube
flOrigin[Z] -= iCubeType ? CLIENT_IN_DUCK : CLIENT_NOT_IN_DUCK
iEntity[CREATE_ENT] = rg_create_entity("info_target")
set_entvar(iEntity[CREATE_ENT], var_classname, "CreateIceCube")
rh_emit_sound2(id, 0, CHAN_STATIC, g_szNadeSounds[Freeze], VOL_NORM, ATTN_NORM)
set_entvar(iEntity[CREATE_ENT], var_model, g_iCubeModel[iCubeType])
set_entvar(iEntity[CREATE_ENT], var_modelindex, g_iCubeModelIndex[iCubeType])
set_entvar(iEntity[CREATE_ENT], var_solid, SOLID_NOT)
set_entvar(iEntity[CREATE_ENT], var_movetype, MOVETYPE_FLY)
set_entvar(iEntity[CREATE_ENT], var_origin, flOrigin)
set_entvar(iEntity[CREATE_ENT], var_iuser3, id)
set_entvar(iEntity[CREATE_ENT], var_team, 1914)
set_entvar(iEntity[CREATE_ENT], var_sequence, 0)
set_entvar(iEntity[CREATE_ENT], var_framerate, 0.0)
set_entvar(iEntity[CREATE_ENT], var_animtime, get_gametime())
rg_set_rendering(iEntity[CREATE_ENT], kRenderFxNone, 255, 255, 255, kRenderTransAdd, 255)
g_iEntCube[id] = iEntity[CREATE_ENT]
}
else
{
if (valid_entity(g_iEntCube[id]))
{
if (get_entvar(g_iEntCube[id], var_team) == 1914)
{
rg_remove_entity(g_iEntCube[id])
static Float:flOriginX[XYZ]
get_entvar(id, var_origin, flOriginX)
flOriginX[Z] -= iCubeType ? CLIENT_IN_DUCK : CLIENT_NOT_IN_DUCK
iEntity[DESTROY_ENT] = rg_create_entity("info_target")
set_entvar(iEntity[DESTROY_ENT], var_classname, "DestroyIceCube")
rh_emit_sound2(id, 0, CHAN_STATIC, g_szNadeSounds[Unfreeze], VOL_NORM, ATTN_NORM)
set_entvar(iEntity[DESTROY_ENT], var_model, g_iCubeModel[DestroyCube])
set_entvar(iEntity[DESTROY_ENT], var_modelindex, g_iCubeModelIndex[DestroyCube])
set_entvar(iEntity[DESTROY_ENT], var_solid, SOLID_NOT)
set_entvar(iEntity[DESTROY_ENT], var_movetype, MOVETYPE_TOSS) // MOVETYPE_FLY >> Toss has gravity [Drop To Floor replacement with Gravity]
set_entvar(iEntity[DESTROY_ENT], var_origin, flOriginX)
set_entvar(iEntity[DESTROY_ENT], var_iuser3, id)
set_entvar(iEntity[DESTROY_ENT], var_team, 19141)
set_entvar(iEntity[DESTROY_ENT], var_sequence, 0)
set_entvar(iEntity[DESTROY_ENT], var_framerate, 5.0)
set_entvar(iEntity[DESTROY_ENT], var_animtime, get_gametime())
set_entvar(iEntity[DESTROY_ENT], var_gravity, 99999.9) // Drop to floor Replacement
rg_set_rendering(iEntity[DESTROY_ENT], kRenderFxNone, 255, 255, 255, kRenderTransAdd, 255)
new arg[1]
arg[0] = iEntity[DESTROY_ENT]
set_task(g_pC_FreezeDuration, "remove_cube", id+1111, arg, 2)
}
g_iEntCube[id] = NULLENT
}
}
}
public UTIL_CreateBeacon(const Float:flOrigin[XYZ])
{
static iRange, iApplied, iRGB[RGB]
iRange = 385/*240*/
iRGB[R] = 0
iRGB[G] = random_num(20, 75)
iRGB[B] = random(256)
iApplied = 0
Beacon:
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMCYLINDER)
write_coord(floatround(flOrigin[X]))
write_coord(floatround(flOrigin[Y]))
write_coord(floatround(flOrigin[Z]))
write_coord(floatround(flOrigin[X]))
write_coord(floatround(flOrigin[Y]))
write_coord(floatround(flOrigin[Z] + iRange))
write_short(g_iSprite[ExplodeSpr])
write_byte(0)
write_byte(0)
write_byte(4) // 8
write_byte(60)
write_byte(0)
write_byte(iRGB[R])
write_byte(iRGB[G])
write_byte(iRGB[B])
write_byte(200)
write_byte(3)
message_end()
switch(iApplied)
{
case 0:
{
iRange = 470
iApplied = 1
iRGB[R] = 0
iRGB[G] = random_num(50, 75)
iRGB[B] = random_num(120, 200)
goto Beacon
}
case 1:
{
iRange = 555
iApplied = 2
iRGB[R] = 0
iRGB[G] = random_num(30, 75)
iRGB[B] = random(256)
goto Beacon
}
}
}
UTIL_DELIGHT(Float:flOrigin[XYZ])
{
message_begin(MSG_PVS, SVC_TEMPENTITY)
write_byte(TE_DLIGHT)
write_coord(floatround(flOrigin[X]))
write_coord(floatround(flOrigin[Y]))
write_coord(floatround(flOrigin[Z]))
write_byte(30)
write_byte(10)
write_byte(100)
write_byte(200)
write_byte(200)
write_byte(18)
write_byte(20)
message_end()
}
UTIL_SpriteTrail(Float:flOrigin[XYZ])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_SPRITETRAIL)
write_coord(floatround(flOrigin[X]))
write_coord(floatround(flOrigin[Y]))
write_coord(floatround(flOrigin[Z]) + 100)
write_coord(floatround(flOrigin[X]))
write_coord(floatround(flOrigin[Y]))
write_coord(floatround(flOrigin[Z]) + 15)
write_short(g_iSprite[FrostSpr])
write_byte(10)
write_byte(5)
write_byte(2)
write_byte(50)
write_byte(10)
message_end()
}
UTIL_CreateTrail(iEntity)
{
UTIL_DestroyTrail(iEntity)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(iEntity) // entity
write_short(g_iSprite[TrailSpr]) // sprite
write_byte(10) // life
write_byte(10) // width
write_byte(0) // red
write_byte(100) // green
write_byte(200) // blue
write_byte(200) // brightness
message_end()
}
UTIL_DestroyTrail(iEntity)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_KILLBEAM)
write_short(iEntity) // entity
message_end()
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1026\\ f0\\ fs16 \n\\ par }
*/