frost m4a1 zombie cant move after frozen

Useless Stuffs, Spam ... etc
Post Reply
kair
Member
Member
Posts: 25
Joined: 7 years ago
Contact:

frost m4a1 zombie cant move after frozen

#1

Post by kair » 7 years ago

I think i have to change something here in this line but cant figure out while zombies are still being frozen and cant move after.

also the hud "freeze damage" When u shoot on humans it still counts as damage i dont want that only when shooting zombies!

Code: Select all

// Remove Frost Effect

public RemoveFrost(id)

{

	// Not alive or not frozen anymore

	if (!is_user_alive(id) || !g_bIsFrozen[id])

		return

	

	// Unfreeze

	g_bIsFrozen[id] = false;

	set_task(0.1, "remove_jibs", id)



	// Rest Player Speed

	ExecuteHamB(Ham_Player_ResetMaxSpeed, id)

	

	Remove_Rendering(id)

	RemoveStatusIcon(id)

}

Code: Select all

#include <amxmodx>
#include <zombie_escape>
#include <dhudmessage>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <fun>

#define write_coord_fl(%1) engfunc(EngFunc_WriteCoord, %1)
#define message_begin_fl(%1,%2,%3,%4) engfunc(EngFunc_MessageBegin, %1, %2, %3, %4)

new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame

new const V_M4A1_MODEL[] = "models/zombie_plague/v_frost_m4a1.mdl"
new const P_M4A1_MODEL[] = "models/zombie_plague/p_frost_m4a1.mdl"
new const W_M4A1_MODEL[]    = "models/zombie_plague/w_frost_m4a1.mdl"
new const W_OLD_M4A1_MODEL[]    = "models/w_m4a1.mdl"
new const ICE_MODEL[] = "models/zombie_plague/icecube_frozen.mdl"
new const MODEL_GLASSGIBS[]	= "models/glassgibs.mdl"
new const SOUND_UNFROZEN[]	= "debris/glass3.wav"

enum _:Sprites
{
	SPRITE_FROST,
	SPRITE_FROST2,
	SPRITE_FLAKE
}

new g_iSprites[Sprites]

new g_iItemID, g_iM4A1FrostSpr, g_iMsgScreenFade, g_iMaxPlayers, g_iHudSync, g_iSpriteLaser, g_iGlassGibs, g_iFreezeDmg, g_fFrostTime, g_iDmgMultiplier, g_iStatusIcon
new bool:g_bHasFrostM4A1[33], g_bIsFrozen[33]
new g_iDmg[33]

public plugin_init()
{
	register_plugin("[ZE] Extra Item: Frost M4A1", "1.4", "Raheem")
	
	// Cvars
	g_fFrostTime = register_cvar("zp_frost_m4a1_time", "7.0") // Freeze Time. It's Float you can make it 0.5
	g_iFreezeDmg = register_cvar("zp_freezing_m4a1_damage", "2000") // Damage Requried So Zombie got Frozen
	g_iDmgMultiplier = register_cvar("zp_multiplier_m4a1_damage", "10") // Multiplie Weapon Damage

	// Message IDS
	g_iHudSync = CreateHudSyncObj()
	g_iMsgScreenFade = get_user_msgid("ScreenFade")
	g_iStatusIcon = get_user_msgid("StatusIcon")

	// Server Max Slots
	g_iMaxPlayers = get_maxplayers()
	
	// ITEM NAME & COST
	//g_iItemID = ze_register_extraitem("Frost M4A1", 0, "", ZE_TEAM_HUMAN) // It's cost 30 Ammo Pack
	register_clcmd("frostm4a1", "give_m4a1_forst")
	
	// Events
	register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
	register_event("WeapPickup","CheckModel","b","1=19")
	register_event("CurWeapon","CurrentWeapon","be","1=1")
	register_event("DeathMsg", "EventDeathMsg", "a")
	
	// Forwards
	register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
	register_forward(FM_SetModel, "fw_SetModel")
	
	// Hams
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	RegisterHam(Ham_TraceAttack, "player", "TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
	RegisterHam(Ham_Item_AddToPlayer, "weapon_m4a1", "fw_FrostM4A1AddToPlayer")
}

public plugin_precache() 
{
	// Models
	precache_model(V_M4A1_MODEL)
	precache_model(P_M4A1_MODEL)
	precache_model(W_M4A1_MODEL)
	precache_model(ICE_MODEL)
	g_iGlassGibs = precache_model(MODEL_GLASSGIBS)
	
	// Sounds
	precache_sound("warcraft3/impalehit.wav")
	precache_sound(SOUND_UNFROZEN)
	
	// Sprites
	g_iM4A1FrostSpr = precache_model("sprites/shockwave.spr")
	g_iSpriteLaser = precache_model( "sprites/Newlightning.spr")
	g_iSprites[SPRITE_FROST] = precache_model("sprites/frostexp_1.spr");
	g_iSprites[SPRITE_FROST2] = precache_model("sprites/frostexp_2.spr");
	g_iSprites[SPRITE_FLAKE] = precache_model("sprites/snowflake_1.spr");
}

public client_putinserver(id)
{
	g_bHasFrostM4A1[id] = false
	g_bIsFrozen[id] = false
}

public client_disconnect(id)
{
	g_bHasFrostM4A1[id] = false
	g_bIsFrozen[id] = false
	RemoveEntity(id)
}

public give_m4a1_forst(player, itemid)
{
	if (itemid == g_iItemID) 
	{
		g_bHasFrostM4A1[player] = true
		ham_strip_weapon(player, "weapon_m4a1")
		give_item(player, "weapon_m4a1")
		cs_set_user_bpammo(player, CSW_M4A1, 90)
		new sName[32]
		get_user_name(player, sName, 31)
		set_hudmessage(random(255), random(255), random(255), -1.0, 0.17, 1, 0.0, 5.0, 1.0, 1.0, -1)
		show_hudmessage(0, "%s Has bought Frost M4A1!", sName)
		ColorPrint(player, "^1[^4ZE^1] ^3You Have bought Frost M4A1^1!")
	}
}
public TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
	if(!is_user_alive(iAttacker))
		return 
	
	if(get_user_weapon(iAttacker) != CSW_M4A1 || !g_bHasFrostM4A1[iAttacker])
		return
	
	set_hudmessage(34, 138, 255, -1.0, 0.17, 1, 0.0, 2.0, 1.0, 1.0, -1)
	ShowSyncHudMsg(iAttacker, g_iHudSync, "Freeze Damage^n%d/%d", g_iDmg[iAttacker], get_pcvar_num(g_iFreezeDmg))
	
	new vec1[3], vec2[3]
	get_user_origin(iAttacker, vec1, 1) 
	get_user_origin(iAttacker, vec2, 4)

	make_beam(vec1, vec2, g_iSpriteLaser, 0, 50, 200, 200)
}

public ze_user_infected_post(infected, infector)
{
	if (g_bHasFrostM4A1[infected])
	{
		g_bHasFrostM4A1[infected] = false
	}
}

public ze_user_humanized_post(id)
{
	g_bHasFrostM4A1[id] = false
	g_iDmg[id] = 0
	RemoveEntity(id)
}

public event_round_start()
{
	for (new i = 1; i <= g_iMaxPlayers; i++)
	{
		g_bHasFrostM4A1[i] = false
		g_bIsFrozen[i] = false
		g_iDmg[i] = 0
		
		if(is_user_alive(i))
		{
			Remove_Rendering(i)
		}
	}
}

public EventDeathMsg()
{
	new iVictim = read_data(2)
	RemoveEntity(iVictim)
	Remove_Rendering(iVictim)
	g_bIsFrozen[iVictim] = false
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
	
	// Non-player damage or self damage
	if (victim == attacker || !is_user_alive(attacker))
		return HAM_IGNORED;

	if(g_bIsFrozen[victim])
		return HAM_SUPERCEDE

	if(g_bHasFrostM4A1[attacker] && (get_user_weapon(attacker) == CSW_M4A1))
		SetHamParamFloat(4, damage * get_pcvar_num(g_iDmgMultiplier))
	
	// For Frost Effect Ring
	static Float:originF[3]
	pev(victim, pev_origin, originF)
	
	// For Frost Effect Sound
	static originF2[3] 
	get_user_origin(victim, originF2)
	
	if((get_user_weapon(attacker) == CSW_M4A1) && g_bHasFrostM4A1[attacker])
	{
		g_iDmg[attacker] += (floatround(damage) * get_pcvar_num(g_iDmgMultiplier))
	}
	
	if((g_iDmg[attacker] >= get_pcvar_num(g_iFreezeDmg)) && (get_user_weapon(attacker) == CSW_M4A1) && g_bHasFrostM4A1[attacker])
	{
		new sName[32]
		get_user_name(victim, sName, charsmax(sName))
		FrostEffect(victim)
		FrostEffectRing(originF)
		FrostEffectSound(originF2)
		g_iDmg[attacker] = 0
		set_dhudmessage(34, 138, 255, -1.0, 0.25, 2, 6.0, 3.0, 0.1, 1.5)
		show_dhudmessage(attacker, "%s Has been Freezed!", sName)
	}
	return HAM_IGNORED
}

public CheckModel(id)
{

	
	if (is_user_alive(id))
	{
		set_pev(id, pev_viewmodel2, V_M4A1_MODEL)
		set_pev(id, pev_weaponmodel2, P_M4A1_MODEL)
	}
	return PLUGIN_HANDLED
}

public CurrentWeapon(id)
{
	if ((get_user_weapon(id) == CSW_M4A1) && g_bHasFrostM4A1[id] == true)
	{
		CheckModel(id)
	}
	else
	{
		ClearSyncHud(id, g_iHudSync)
	}
	return PLUGIN_HANDLED
}

public FrostEffect(id)
{
	// Only effect alive unfrozen zombies
	if (!is_user_alive(id) || !ze_is_user_zombie(id) || g_bIsFrozen[id])
		return
	
	message_begin(MSG_ONE_UNRELIABLE, g_iMsgScreenFade, _, id)
	write_short(4096*1) // duration
	write_short(4096*1) // hold time
	write_short(0x0000) // fade type
	write_byte(0) // red
	write_byte(50) // green
	write_byte(200) // blue
	write_byte(100) // alpha
	message_end()

	message_begin(MSG_ONE, g_iStatusIcon, {0,0,0}, id)
	write_byte(1) // Status [0=Hide, 1=Show, 2=Flash]
	write_string("dmg_cold") // Sprite Name
	write_byte(000) // Red
	write_byte(206) // Green
	write_byte(209) // Blue
	message_end()
	
	new ent = create_entity("info_target")
	
	UTIL_Explosion(id, g_iSprites[SPRITE_FROST], 40, 30, 4)
	UTIL_Explosion(id, g_iSprites[SPRITE_FROST2], 20, 30, 4)
	UTIL_SpriteTrail(id, g_iSprites[SPRITE_FLAKE], 30, 3, 2, 30, 0)
	
	new Float:iOrigin[3]
	entity_get_vector(id, EV_VEC_origin, iOrigin)
	set_pev(ent, pev_body, 1)
	entity_set_model(ent, ICE_MODEL)
	iOrigin[2] -= 35
	entity_set_origin(ent, iOrigin)
	set_pev(ent, pev_owner, id)
	set_rendering(ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 255)
	entity_set_string(ent, EV_SZ_classname, "ent_frozen")
	entity_set_int(ent, EV_INT_solid, 2)
	new Float: iOriginNew[3]
	entity_get_vector(id, EV_VEC_origin, iOriginNew)
	set_user_rendering(id, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25)
	g_bIsFrozen[id] = true
	set_task(get_pcvar_float(g_fFrostTime), "RemoveFrost", id) // Time to Remove Frost Effect 
}

public fw_PlayerPreThink(id)
{
	// Not alive or Not Zombie
	if (!is_user_alive(id) || !g_bIsFrozen[id])
		return

	// Stop motion
	set_pev(id, pev_velocity, Float:{0.0,0.0,0.0})
	set_user_maxspeed(id, 1.0)
	
	// Stop Moving Mouse
	set_pev(id , pev_v_angle , Float:{0.0,0.0,0.0})
	set_pev(id , pev_fixangle , 1)
}

// Frost Effect Sound
public FrostEffectSound(iOrigin[3])
{
	new Entity = create_entity("info_target")

	new Float:flOrigin[3]
	IVecFVec(iOrigin, flOrigin)
	entity_set_origin(Entity, flOrigin)
	emit_sound(Entity, CHAN_WEAPON, "warcraft3/impalehit.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	remove_entity(Entity)
}

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()
}

// Frost Effect Ring
FrostEffectRing(const Float:originF3[3])
{
	// Largest ring
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF3, 0)
	write_byte(TE_BEAMCYLINDER) // TE id
	engfunc(EngFunc_WriteCoord, originF3[0]) // x
	engfunc(EngFunc_WriteCoord, originF3[1]) // y
	engfunc(EngFunc_WriteCoord, originF3[2]) // z
	engfunc(EngFunc_WriteCoord, originF3[0]) // x axis
	engfunc(EngFunc_WriteCoord, originF3[1]) // y axis
	engfunc(EngFunc_WriteCoord, originF3[2]+100.0) // z axis
	write_short(g_iM4A1FrostSpr) // sprite
	write_byte(0) // startframe
	write_byte(0) // framerate
	write_byte(4) // life
	write_byte(60) // width
	write_byte(0) // noise
	write_byte(41) // red
	write_byte(138) // green
	write_byte(255) // blue
	write_byte(200) // brightness
	write_byte(0) // speed
	message_end()
}

// Remove Frost Effect
public RemoveFrost(id)
{
	// Not alive or not frozen anymore
	if (!is_user_alive(id) || !g_bIsFrozen[id])
		return
	
	// Unfreeze
	g_bIsFrozen[id] = false;
	set_task(0.1, "remove_jibs", id)

	// Rest Player Speed
	ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
	
	Remove_Rendering(id)
	RemoveStatusIcon(id)
}


public remove_jibs(id)
{
	RemoveEntity(id)
	
	new Float:origin[3]
	pev(id,pev_origin,origin)
	
	message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0)
	write_byte(TE_IMPLOSION)
	write_coord_fl(origin[0]) // x
	write_coord_fl(origin[1]) // y
	write_coord_fl(origin[2] + 8.0) // z
	write_byte(64) // radius
	write_byte(10) // count
	write_byte(3) // duration
	message_end()
	
	message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0)
	write_byte(TE_SPARKS)
	write_coord_fl(origin[0]) // x
	write_coord_fl(origin[1]) // y
	write_coord_fl(origin[2]) // z
	message_end()
	
	message_begin_fl(MSG_PAS,SVC_TEMPENTITY,origin,0)
	write_byte(TE_BREAKMODEL)
	write_coord_fl(origin[0]) // x
	write_coord_fl(origin[1]) // y
	write_coord_fl(origin[2] + 24.0) // z
	write_coord_fl(16.0) // size x
	write_coord_fl(16.0) // size y
	write_coord_fl(16.0) // size z
	write_coord(random_num(-50,50)) // velocity x
	write_coord(random_num(-50,50)) // velocity y
	write_coord_fl(25.0) // velocity z
	write_byte(10) // random velocity
	write_short(g_iGlassGibs) // model
	write_byte(10) // count
	write_byte(25) // life
	write_byte(0x01) // flags
	message_end()
	
	emit_sound(0,CHAN_ITEM,SOUND_UNFROZEN,VOL_NORM,ATTN_NORM,0,PITCH_LOW)
}

stock ColorPrint(const id, const input[], any: ...)
{
	new count = 1, players[32]
	static msg[192]
	vformat(msg, 191, input, 3)
	
	replace_all(msg, 191, "!g", "^4")
	replace_all(msg, 191, "!y", "^1")
	replace_all(msg, 191, "!t", "^3")
	replace_all(msg, 191, "!t2", "^0")
	
	if (id) players[0] = id;else get_players(players, count, "ch")
	{
		for (new i = 0; i < count; i++)
		{
			if (is_user_connected( players[i]))
			{
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
				write_byte(players[i])
				write_string(msg)
				message_end()
			}
		}
	}
}

stock ham_strip_weapon(id,weapon[])
{
    if(!equal(weapon,"weapon_",7)) return 0

    new wId = get_weaponid(weapon)
    if(!wId) return 0

    new wEnt
    while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
    if(!wEnt) return 0

    if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt)

    if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0
    ExecuteHamB(Ham_Item_Kill,wEnt)

    set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId))

    return 1
}

make_beam(const origin2[3], const origin[3], sprite, red, green, blue, alpha)
{
	//BEAMENTPOINTS
	message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte (0) //TE_BEAMENTPOINTS 0
	write_coord(origin2[0])
	write_coord(origin2[1])
	write_coord(origin2[2])
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2])
	write_short(sprite) // sprite
	write_byte(1) // framestart
	write_byte(5) // framerate
	write_byte(2) // life
	write_byte(20) // width
	write_byte(0) // noise 
	write_byte(red) // r, g, b
	write_byte(green) // r, g, b 
	write_byte(blue) // r, g, b 
	write_byte(alpha) // brightness
	write_byte(150) // speed
	message_end()
}

public RemoveStatusIcon(id)
{
	// Remove Status Icon
	message_begin(MSG_ONE, g_iStatusIcon, {0,0,0}, id)
	write_byte(0) // Status [0=Hide, 1=Show, 2=Flash]
	write_string("dmg_cold") // Sprite Name
	message_end()
}

public fw_SetModel(entity, model[])
{
	
	if(!is_valid_ent(entity)) 
		return FMRES_IGNORED

	if(!equali(model, W_OLD_M4A1_MODEL)) 
		return FMRES_IGNORED

	new className[33]
	entity_get_string(entity, EV_SZ_classname, className, 32)

	static iOwner, iStoredM4A1ID

	// Frost M4A1 Owner
	iOwner = entity_get_edict(entity, EV_ENT_owner)

	// Get drop weapon index (Frost M4A1) to use in fw_FrostM4A1AddToPlayer forward
	iStoredM4A1ID = find_ent_by_owner(-1, "weapon_m4a1", entity)

	// If Player Has Frost M4A1 and It's weapon_m4a1
	if(g_bHasFrostM4A1[iOwner] && is_valid_ent(iStoredM4A1ID))
	{
		// Setting weapon options
		entity_set_int(iStoredM4A1ID, EV_INT_impulse, 1997)

		// Rest Var
		g_bHasFrostM4A1[iOwner] = false
		
		// Set weaponbox new model
		entity_set_model(entity, W_M4A1_MODEL)
		return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED
}

public fw_FrostM4A1AddToPlayer(FrostM4A1, id)
{
	// Make sure that this is M4A1
	if(is_valid_ent(FrostM4A1) && is_user_connected(id) && entity_get_int(FrostM4A1, EV_INT_impulse) == 1997)
	{
		// Update Var
		g_bHasFrostM4A1[id] = true

		// Reset weapon options
		entity_set_int(FrostM4A1, EV_INT_impulse, 0)
		return HAM_HANDLED
	}
	return HAM_IGNORED
}

stock Remove_Rendering(id)
{
	set_user_rendering(id, kRenderFxNone, 255, 255, 255, kRenderNormal, 16)
}

public RemoveEntity(id)
{
	if(!is_user_connected(id))
		return
		
	new iEnt = find_ent_by_owner(-1, "ent_frozen", id);
	
	if(pev_valid(iEnt))
		remove_entity(iEnt)
}

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#2

Post by Raheem » 7 years ago

Ok, Now the message will appear only if you make damage to the zombie. Also the Un-Freeze works. You need to learn the basics of how to convert From ZP to ZE just read THIS. And note this version not optimized and not official this only what you need. The official optimized version will be released when i get time.

  1. #include <zombie_escape>
  2. #include <cstrike>
  3.  
  4. #define write_coord_fl(%1) engfunc(EngFunc_WriteCoord, %1)
  5. #define message_begin_fl(%1,%2,%3,%4) engfunc(EngFunc_MessageBegin, %1, %2, %3, %4)
  6.  
  7. new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame
  8.  
  9. new const V_M4A1_MODEL[] = "models/zombie_plague/v_frost_m4a1.mdl"
  10. new const P_M4A1_MODEL[] = "models/zombie_plague/p_frost_m4a1.mdl"
  11. new const W_M4A1_MODEL[]    = "models/zombie_plague/w_frost_m4a1.mdl"
  12. new const W_OLD_M4A1_MODEL[]    = "models/w_m4a1.mdl"
  13. new const ICE_MODEL[] = "models/zombie_plague/icecube_frozen.mdl"
  14. new const MODEL_GLASSGIBS[] = "models/glassgibs.mdl"
  15. new const SOUND_UNFROZEN[]  = "debris/glass3.wav"
  16.  
  17. enum _:Sprites
  18. {
  19.     SPRITE_FROST,
  20.     SPRITE_FROST2,
  21.     SPRITE_FLAKE
  22. }
  23.  
  24. new g_iSprites[Sprites]
  25.  
  26. new g_iItemID, g_iM4A1FrostSpr, g_iMsgScreenFade, g_iMaxPlayers, g_iHudSync, g_iSpriteLaser, g_iGlassGibs, g_iFreezeDmg, g_fFrostTime, g_iDmgMultiplier, g_iStatusIcon
  27. new bool:g_bHasFrostM4A1[33], g_bIsFrozen[33]
  28. new g_iDmg[33]
  29.  
  30. public plugin_init()
  31. {
  32.     register_plugin("[ZE] Extra Item: Frost M4A1", "1.4", "Raheem")
  33.    
  34.     // Cvars
  35.     g_fFrostTime = register_cvar("zp_frost_m4a1_time", "7.0") // Freeze Time. It's Float you can make it 0.5
  36.     g_iFreezeDmg = register_cvar("zp_freezing_m4a1_damage", "2000") // Damage Requried So Zombie got Frozen
  37.     g_iDmgMultiplier = register_cvar("zp_multiplier_m4a1_damage", "10") // Multiplie Weapon Damage
  38.  
  39.     // Message IDS
  40.     g_iHudSync = CreateHudSyncObj()
  41.     g_iMsgScreenFade = get_user_msgid("ScreenFade")
  42.     g_iStatusIcon = get_user_msgid("StatusIcon")
  43.  
  44.     // Server Max Slots
  45.     g_iMaxPlayers = get_maxplayers()
  46.    
  47.     // ITEM NAME & COST
  48.     g_iItemID = ze_register_item("Frost M4A1", 20) // It's cost 30 Ammo Pack
  49.    
  50.     // Events
  51.     register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  52.     register_event("WeapPickup","CheckModel","b","1=19")
  53.     register_event("CurWeapon","CurrentWeapon","be","1=1")
  54.     register_event("DeathMsg", "EventDeathMsg", "a")
  55.    
  56.     // Forwards
  57.     register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
  58.     register_forward(FM_SetModel, "fw_SetModel")
  59.    
  60.     // Hams
  61.     RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  62.     RegisterHam(Ham_TraceAttack, "player", "TraceAttack", 1)
  63.     RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
  64.     RegisterHam(Ham_Item_AddToPlayer, "weapon_m4a1", "fw_FrostM4A1AddToPlayer")
  65. }
  66.  
  67. public plugin_precache()
  68. {
  69.     // Models
  70.     precache_model(V_M4A1_MODEL)
  71.     precache_model(P_M4A1_MODEL)
  72.     precache_model(W_M4A1_MODEL)
  73.     precache_model(ICE_MODEL)
  74.     g_iGlassGibs = precache_model(MODEL_GLASSGIBS)
  75.    
  76.     // Sounds
  77.     precache_sound("warcraft3/impalehit.wav")
  78.     precache_sound(SOUND_UNFROZEN)
  79.    
  80.     // Sprites
  81.     g_iM4A1FrostSpr = precache_model("sprites/shockwave.spr")
  82.     g_iSpriteLaser = precache_model( "sprites/Newlightning.spr")
  83.     g_iSprites[SPRITE_FROST] = precache_model("sprites/frostexp_1.spr");
  84.     g_iSprites[SPRITE_FROST2] = precache_model("sprites/frostexp_2.spr");
  85.     g_iSprites[SPRITE_FLAKE] = precache_model("sprites/snowflake_1.spr");
  86. }
  87.  
  88. public client_putinserver(id)
  89. {
  90.     g_bHasFrostM4A1[id] = false
  91.     g_bIsFrozen[id] = false
  92. }
  93.  
  94. public client_disconnect(id)
  95. {
  96.     g_bHasFrostM4A1[id] = false
  97.     g_bIsFrozen[id] = false
  98.     RemoveEntity(id)
  99. }
  100.  
  101. public ze_select_item_pre(id, itemid)
  102. {
  103.     // Return Available and we will block it in Post, So it dosen't affect other plugins
  104.     if (itemid != g_iItemID)
  105.         return ZE_ITEM_AVAILABLE
  106.    
  107.     // Available for Humans only, So don't show it for zombies
  108.     if (ze_is_user_zombie(id))
  109.         return ZE_ITEM_DONT_SHOW
  110.    
  111.     return ZE_ITEM_AVAILABLE
  112. }
  113.  
  114. public ze_select_item_post(player, itemid)
  115. {
  116.     if (itemid != g_iItemID)
  117.         return
  118.    
  119.     g_bHasFrostM4A1[player] = true
  120.     ham_strip_weapon(player, "weapon_m4a1")
  121.     give_item(player, "weapon_m4a1")
  122.     cs_set_user_bpammo(player, CSW_M4A1, 90)
  123.     new sName[32]
  124.     get_user_name(player, sName, 31)
  125.     set_hudmessage(random(255), random(255), random(255), -1.0, 0.17, 1, 0.0, 5.0, 1.0, 1.0, -1)
  126.     show_hudmessage(0, "%s Has bought Frost M4A1!", sName)
  127.     ColorPrint(player, "^1[^4ZE^1] ^3You Have bought Frost M4A1^1!")
  128. }
  129.  
  130. public TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
  131. {
  132.     if(!is_user_alive(iAttacker))
  133.         return
  134.    
  135.     if(get_user_weapon(iAttacker) != CSW_M4A1 || !g_bHasFrostM4A1[iAttacker])
  136.         return
  137.    
  138.     new vec1[3], vec2[3]
  139.     get_user_origin(iAttacker, vec1, 1)
  140.     get_user_origin(iAttacker, vec2, 4)
  141.  
  142.     make_beam(vec1, vec2, g_iSpriteLaser, 0, 50, 200, 200)
  143. }
  144.  
  145. public ze_user_infected_post(infected, infector)
  146. {
  147.     if (g_bHasFrostM4A1[infected])
  148.     {
  149.         g_bHasFrostM4A1[infected] = false
  150.     }
  151. }
  152.  
  153. public ze_user_humanized_post(id)
  154. {
  155.     g_bHasFrostM4A1[id] = false
  156.     g_iDmg[id] = 0
  157.     RemoveEntity(id)
  158. }
  159.  
  160. public event_round_start()
  161. {
  162.     for (new i = 1; i <= g_iMaxPlayers; i++)
  163.     {
  164.         g_bHasFrostM4A1[i] = false
  165.         g_bIsFrozen[i] = false
  166.         g_iDmg[i] = 0
  167.        
  168.         if(is_user_alive(i))
  169.         {
  170.             Remove_Rendering(i)
  171.         }
  172.     }
  173. }
  174.  
  175. public EventDeathMsg()
  176. {
  177.     new iVictim = read_data(2)
  178.     RemoveEntity(iVictim)
  179.     Remove_Rendering(iVictim)
  180.     g_bIsFrozen[iVictim] = false
  181. }
  182.  
  183. public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
  184. {
  185.    
  186.     // Non-player damage or self damage
  187.     if (victim == attacker || !is_user_alive(attacker))
  188.         return HAM_IGNORED;
  189.  
  190.     if(g_bIsFrozen[victim])
  191.         return HAM_SUPERCEDE
  192.  
  193.     if(g_bHasFrostM4A1[attacker] && (get_user_weapon(attacker) == CSW_M4A1))
  194.         SetHamParamFloat(4, damage * get_pcvar_num(g_iDmgMultiplier))
  195.    
  196.     // For Frost Effect Ring
  197.     static Float:originF[3]
  198.     pev(victim, pev_origin, originF)
  199.    
  200.     // For Frost Effect Sound
  201.     static originF2[3]
  202.     get_user_origin(victim, originF2)
  203.    
  204.     if((get_user_weapon(attacker) == CSW_M4A1) && g_bHasFrostM4A1[attacker])
  205.     {
  206.         g_iDmg[attacker] += (floatround(damage) * get_pcvar_num(g_iDmgMultiplier))
  207.        
  208.        
  209.         set_hudmessage(34, 138, 255, -1.0, 0.17, 1, 0.0, 2.0, 1.0, 1.0, -1)
  210.         ShowSyncHudMsg(attacker, g_iHudSync, "Freeze Damage^n%d/%d", g_iDmg[attacker], get_pcvar_num(g_iFreezeDmg))
  211.     }
  212.    
  213.     if((g_iDmg[attacker] >= get_pcvar_num(g_iFreezeDmg)) && (get_user_weapon(attacker) == CSW_M4A1) && g_bHasFrostM4A1[attacker])
  214.     {
  215.         new sName[32]
  216.         get_user_name(victim, sName, charsmax(sName))
  217.         FrostEffect(victim)
  218.         FrostEffectRing(originF)
  219.         FrostEffectSound(originF2)
  220.         g_iDmg[attacker] = 0
  221.         set_dhudmessage(34, 138, 255, -1.0, 0.25, 2, 6.0, 3.0, 0.1, 1.5)
  222.         show_dhudmessage(attacker, "%s Has been Freezed!", sName)
  223.     }
  224.     return HAM_IGNORED
  225. }
  226.  
  227. public CheckModel(id)
  228. {
  229.     if (is_user_alive(id))
  230.     {
  231.         set_pev(id, pev_viewmodel2, V_M4A1_MODEL)
  232.         set_pev(id, pev_weaponmodel2, P_M4A1_MODEL)
  233.     }
  234.     return PLUGIN_HANDLED
  235. }
  236.  
  237. public CurrentWeapon(id)
  238. {
  239.     if ((get_user_weapon(id) == CSW_M4A1) && g_bHasFrostM4A1[id] == true)
  240.     {
  241.         CheckModel(id)
  242.     }
  243.     else
  244.     {
  245.         ClearSyncHud(id, g_iHudSync)
  246.     }
  247.     return PLUGIN_HANDLED
  248. }
  249.  
  250. public FrostEffect(id)
  251. {
  252.     // Only effect alive unfrozen zombies
  253.     if (!is_user_alive(id) || !ze_is_user_zombie(id) || g_bIsFrozen[id])
  254.         return
  255.    
  256.     message_begin(MSG_ONE_UNRELIABLE, g_iMsgScreenFade, _, id)
  257.     write_short(4096*1) // duration
  258.     write_short(4096*1) // hold time
  259.     write_short(0x0000) // fade type
  260.     write_byte(0) // red
  261.     write_byte(50) // green
  262.     write_byte(200) // blue
  263.     write_byte(100) // alpha
  264.     message_end()
  265.  
  266.     message_begin(MSG_ONE, g_iStatusIcon, {0,0,0}, id)
  267.     write_byte(1) // Status [0=Hide, 1=Show, 2=Flash]
  268.     write_string("dmg_cold") // Sprite Name
  269.     write_byte(000) // Red
  270.     write_byte(206) // Green
  271.     write_byte(209) // Blue
  272.     message_end()
  273.    
  274.     new ent = create_entity("info_target")
  275.    
  276.     UTIL_Explosion(id, g_iSprites[SPRITE_FROST], 40, 30, 4)
  277.     UTIL_Explosion(id, g_iSprites[SPRITE_FROST2], 20, 30, 4)
  278.     UTIL_SpriteTrail(id, g_iSprites[SPRITE_FLAKE], 30, 3, 2, 30, 0)
  279.    
  280.     new Float:iOrigin[3]
  281.     entity_get_vector(id, EV_VEC_origin, iOrigin)
  282.     set_pev(ent, pev_body, 1)
  283.     entity_set_model(ent, ICE_MODEL)
  284.     iOrigin[2] -= 35
  285.     entity_set_origin(ent, iOrigin)
  286.     set_pev(ent, pev_owner, id)
  287.     set_rendering(ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 255)
  288.     entity_set_string(ent, EV_SZ_classname, "ent_frozen")
  289.     entity_set_int(ent, EV_INT_solid, 2)
  290.     new Float: iOriginNew[3]
  291.     entity_get_vector(id, EV_VEC_origin, iOriginNew)
  292.     set_user_rendering(id, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25)
  293.     g_bIsFrozen[id] = true
  294.     set_task(get_pcvar_float(g_fFrostTime), "RemoveFrost", id) // Time to Remove Frost Effect
  295. }
  296.  
  297. public fw_PlayerPreThink(id)
  298. {
  299.     // Not alive or Not Zombie
  300.     if (!is_user_alive(id) || !g_bIsFrozen[id])
  301.         return
  302.  
  303.     // Stop motion
  304.     set_pev(id, pev_velocity, Float:{0.0,0.0,0.0})
  305.     set_user_maxspeed(id, 1.0)
  306.    
  307.     // Stop Moving Mouse
  308.     set_pev(id , pev_v_angle , Float:{0.0,0.0,0.0})
  309.     set_pev(id , pev_fixangle , 1)
  310. }
  311.  
  312. // Frost Effect Sound
  313. public FrostEffectSound(iOrigin[3])
  314. {
  315.     new Entity = create_entity("info_target")
  316.  
  317.     new Float:flOrigin[3]
  318.     IVecFVec(iOrigin, flOrigin)
  319.     entity_set_origin(Entity, flOrigin)
  320.     emit_sound(Entity, CHAN_WEAPON, "warcraft3/impalehit.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  321.     remove_entity(Entity)
  322. }
  323.  
  324. UTIL_Explosion(iEnt, iSprite, iScale, iFramerate, Flags)
  325. {
  326.     new Float:vOrigin[3]
  327.     pev(iEnt, pev_origin, vOrigin)
  328.    
  329.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  330.     write_byte(TE_EXPLOSION)
  331.     engfunc(EngFunc_WriteCoord, vOrigin[0])
  332.     engfunc(EngFunc_WriteCoord, vOrigin[1])
  333.     engfunc(EngFunc_WriteCoord, vOrigin[2])
  334.     write_short(iSprite)
  335.     write_byte(iScale)
  336.     write_byte(iFramerate)
  337.     write_byte(Flags)
  338.     message_end()
  339. }
  340.  
  341. UTIL_SpriteTrail(iEnt, iSprite, iCount, iLife, iScale, iVelocity, iVary)
  342. {
  343.     new Float:vOrigin[3]
  344.     pev(iEnt, pev_origin, vOrigin)
  345.    
  346.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  347.     write_byte(TE_SPRITETRAIL)
  348.     engfunc(EngFunc_WriteCoord, vOrigin[0])
  349.     engfunc(EngFunc_WriteCoord, vOrigin[1])
  350.     engfunc(EngFunc_WriteCoord, vOrigin[2] + 100)
  351.     engfunc(EngFunc_WriteCoord, vOrigin[0] + random_float( -200.0, 200.0 ))
  352.     engfunc(EngFunc_WriteCoord, vOrigin[1] + random_float( -200.0, 200.0 ))
  353.     engfunc(EngFunc_WriteCoord, vOrigin[2])
  354.     write_short(iSprite)
  355.     write_byte(iCount)
  356.     write_byte(iLife)
  357.     write_byte(iScale)
  358.     write_byte(iVelocity)
  359.     write_byte(iVary)
  360.     message_end()
  361. }
  362.  
  363. // Frost Effect Ring
  364. FrostEffectRing(const Float:originF3[3])
  365. {
  366.     // Largest ring
  367.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF3, 0)
  368.     write_byte(TE_BEAMCYLINDER) // TE id
  369.     engfunc(EngFunc_WriteCoord, originF3[0]) // x
  370.     engfunc(EngFunc_WriteCoord, originF3[1]) // y
  371.     engfunc(EngFunc_WriteCoord, originF3[2]) // z
  372.     engfunc(EngFunc_WriteCoord, originF3[0]) // x axis
  373.     engfunc(EngFunc_WriteCoord, originF3[1]) // y axis
  374.     engfunc(EngFunc_WriteCoord, originF3[2]+100.0) // z axis
  375.     write_short(g_iM4A1FrostSpr) // sprite
  376.     write_byte(0) // startframe
  377.     write_byte(0) // framerate
  378.     write_byte(4) // life
  379.     write_byte(60) // width
  380.     write_byte(0) // noise
  381.     write_byte(41) // red
  382.     write_byte(138) // green
  383.     write_byte(255) // blue
  384.     write_byte(200) // brightness
  385.     write_byte(0) // speed
  386.     message_end()
  387. }
  388.  
  389. // Remove Frost Effect
  390. public RemoveFrost(id)
  391. {
  392.     // Not alive or not frozen anymore
  393.     if (!is_user_alive(id) || !g_bIsFrozen[id])
  394.         return
  395.    
  396.     // Unfreeze
  397.     g_bIsFrozen[id] = false;
  398.     set_task(0.1, "remove_jibs", id)
  399.  
  400.     // Rest Player Speed
  401.     ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
  402.    
  403.     Remove_Rendering(id)
  404.     RemoveStatusIcon(id)
  405. }
  406.  
  407.  
  408. public remove_jibs(id)
  409. {
  410.     RemoveEntity(id)
  411.    
  412.     new Float:origin[3]
  413.     pev(id,pev_origin,origin)
  414.    
  415.     message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0)
  416.     write_byte(TE_IMPLOSION)
  417.     write_coord_fl(origin[0]) // x
  418.     write_coord_fl(origin[1]) // y
  419.     write_coord_fl(origin[2] + 8.0) // z
  420.     write_byte(64) // radius
  421.     write_byte(10) // count
  422.     write_byte(3) // duration
  423.     message_end()
  424.    
  425.     message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0)
  426.     write_byte(TE_SPARKS)
  427.     write_coord_fl(origin[0]) // x
  428.     write_coord_fl(origin[1]) // y
  429.     write_coord_fl(origin[2]) // z
  430.     message_end()
  431.    
  432.     message_begin_fl(MSG_PAS,SVC_TEMPENTITY,origin,0)
  433.     write_byte(TE_BREAKMODEL)
  434.     write_coord_fl(origin[0]) // x
  435.     write_coord_fl(origin[1]) // y
  436.     write_coord_fl(origin[2] + 24.0) // z
  437.     write_coord_fl(16.0) // size x
  438.     write_coord_fl(16.0) // size y
  439.     write_coord_fl(16.0) // size z
  440.     write_coord(random_num(-50,50)) // velocity x
  441.     write_coord(random_num(-50,50)) // velocity y
  442.     write_coord_fl(25.0) // velocity z
  443.     write_byte(10) // random velocity
  444.     write_short(g_iGlassGibs) // model
  445.     write_byte(10) // count
  446.     write_byte(25) // life
  447.     write_byte(0x01) // flags
  448.     message_end()
  449.    
  450.     emit_sound(0,CHAN_ITEM,SOUND_UNFROZEN,VOL_NORM,ATTN_NORM,0,PITCH_LOW)
  451. }
  452.  
  453. stock ColorPrint(const id, const input[], any: ...)
  454. {
  455.     new count = 1, players[32]
  456.     static msg[192]
  457.     vformat(msg, 191, input, 3)
  458.    
  459.     replace_all(msg, 191, "!g", "^4")
  460.     replace_all(msg, 191, "!y", "^1")
  461.     replace_all(msg, 191, "!t", "^3")
  462.     replace_all(msg, 191, "!t2", "^0")
  463.    
  464.     if (id) players[0] = id;else get_players(players, count, "ch")
  465.     {
  466.         for (new i = 0; i < count; i++)
  467.         {
  468.             if (is_user_connected( players[i]))
  469.             {
  470.                 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
  471.                 write_byte(players[i])
  472.                 write_string(msg)
  473.                 message_end()
  474.             }
  475.         }
  476.     }
  477. }
  478.  
  479. stock ham_strip_weapon(id,weapon[])
  480. {
  481.     if(!equal(weapon,"weapon_",7)) return 0
  482.  
  483.     new wId = get_weaponid(weapon)
  484.     if(!wId) return 0
  485.  
  486.     new wEnt
  487.     while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
  488.     if(!wEnt) return 0
  489.  
  490.     if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt)
  491.  
  492.     if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0
  493.     ExecuteHamB(Ham_Item_Kill,wEnt)
  494.  
  495.     set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId))
  496.  
  497.     return 1
  498. }
  499.  
  500. make_beam(const origin2[3], const origin[3], sprite, red, green, blue, alpha)
  501. {
  502.     //BEAMENTPOINTS
  503.     message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
  504.     write_byte (0) //TE_BEAMENTPOINTS 0
  505.     write_coord(origin2[0])
  506.     write_coord(origin2[1])
  507.     write_coord(origin2[2])
  508.     write_coord(origin[0])
  509.     write_coord(origin[1])
  510.     write_coord(origin[2])
  511.     write_short(sprite) // sprite
  512.     write_byte(1) // framestart
  513.     write_byte(5) // framerate
  514.     write_byte(2) // life
  515.     write_byte(20) // width
  516.     write_byte(0) // noise
  517.     write_byte(red) // r, g, b
  518.     write_byte(green) // r, g, b
  519.     write_byte(blue) // r, g, b
  520.     write_byte(alpha) // brightness
  521.     write_byte(150) // speed
  522.     message_end()
  523. }
  524.  
  525. public RemoveStatusIcon(id)
  526. {
  527.     // Remove Status Icon
  528.     message_begin(MSG_ONE, g_iStatusIcon, {0,0,0}, id)
  529.     write_byte(0) // Status [0=Hide, 1=Show, 2=Flash]
  530.     write_string("dmg_cold") // Sprite Name
  531.     message_end()
  532. }
  533.  
  534. public fw_SetModel(entity, model[])
  535. {
  536.    
  537.     if(!is_valid_ent(entity))
  538.         return FMRES_IGNORED
  539.  
  540.     if(!equali(model, W_OLD_M4A1_MODEL))
  541.         return FMRES_IGNORED
  542.  
  543.     new className[33]
  544.     entity_get_string(entity, EV_SZ_classname, className, 32)
  545.  
  546.     static iOwner, iStoredM4A1ID
  547.  
  548.     // Frost M4A1 Owner
  549.     iOwner = entity_get_edict(entity, EV_ENT_owner)
  550.  
  551.     // Get drop weapon index (Frost M4A1) to use in fw_FrostM4A1AddToPlayer forward
  552.     iStoredM4A1ID = find_ent_by_owner(-1, "weapon_m4a1", entity)
  553.  
  554.     // If Player Has Frost M4A1 and It's weapon_m4a1
  555.     if(g_bHasFrostM4A1[iOwner] && is_valid_ent(iStoredM4A1ID))
  556.     {
  557.         // Setting weapon options
  558.         entity_set_int(iStoredM4A1ID, EV_INT_impulse, 1997)
  559.  
  560.         // Rest Var
  561.         g_bHasFrostM4A1[iOwner] = false
  562.        
  563.         // Set weaponbox new model
  564.         entity_set_model(entity, W_M4A1_MODEL)
  565.         return FMRES_SUPERCEDE
  566.     }
  567.     return FMRES_IGNORED
  568. }
  569.  
  570. public fw_FrostM4A1AddToPlayer(FrostM4A1, id)
  571. {
  572.     // Make sure that this is M4A1
  573.     if(is_valid_ent(FrostM4A1) && is_user_connected(id) && entity_get_int(FrostM4A1, EV_INT_impulse) == 1997)
  574.     {
  575.         // Update Var
  576.         g_bHasFrostM4A1[id] = true
  577.  
  578.         // Reset weapon options
  579.         entity_set_int(FrostM4A1, EV_INT_impulse, 0)
  580.         return HAM_HANDLED
  581.     }
  582.     return HAM_IGNORED
  583. }
  584.  
  585. stock Remove_Rendering(id)
  586. {
  587.     set_user_rendering(id, kRenderFxNone, 255, 255, 255, kRenderNormal, 16)
  588. }
  589.  
  590. public RemoveEntity(id)
  591. {
  592.     if(!is_user_connected(id))
  593.         return
  594.        
  595.     new iEnt = find_ent_by_owner(-1, "ent_frozen", id);
  596.    
  597.     if(pev_valid(iEnt))
  598.         remove_entity(iEnt)
  599. }
He who fails to plan is planning to fail

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#3

Post by Night Fury » 7 years ago

Raheem wrote: 7 years ago Ok, Now the message will appear only if you make damage to the zombie. Also the Un-Freeze works. You need to learn the basics of how to convert From ZP to ZE just read THIS. And note this version not optimized and not official this only what you need. The official optimized version will be released when i get time.

  1. #include <zombie_escape>
  2. #include <cstrike>
  3.  
  4. #define write_coord_fl(%1) engfunc(EngFunc_WriteCoord, %1)
  5. #define message_begin_fl(%1,%2,%3,%4) engfunc(EngFunc_MessageBegin, %1, %2, %3, %4)
  6.  
  7. new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame
  8.  
  9. new const V_M4A1_MODEL[] = "models/zombie_plague/v_frost_m4a1.mdl"
  10. new const P_M4A1_MODEL[] = "models/zombie_plague/p_frost_m4a1.mdl"
  11. new const W_M4A1_MODEL[]    = "models/zombie_plague/w_frost_m4a1.mdl"
  12. new const W_OLD_M4A1_MODEL[]    = "models/w_m4a1.mdl"
  13. new const ICE_MODEL[] = "models/zombie_plague/icecube_frozen.mdl"
  14. new const MODEL_GLASSGIBS[] = "models/glassgibs.mdl"
  15. new const SOUND_UNFROZEN[]  = "debris/glass3.wav"
  16.  
  17. enum _:Sprites
  18. {
  19.     SPRITE_FROST,
  20.     SPRITE_FROST2,
  21.     SPRITE_FLAKE
  22. }
  23.  
  24. new g_iSprites[Sprites]
  25.  
  26. new g_iItemID, g_iM4A1FrostSpr, g_iMsgScreenFade, g_iMaxPlayers, g_iHudSync, g_iSpriteLaser, g_iGlassGibs, g_iFreezeDmg, g_fFrostTime, g_iDmgMultiplier, g_iStatusIcon
  27. new bool:g_bHasFrostM4A1[33], g_bIsFrozen[33]
  28. new g_iDmg[33]
  29.  
  30. public plugin_init()
  31. {
  32.     register_plugin("[ZE] Extra Item: Frost M4A1", "1.4", "Raheem")
  33.    
  34.     // Cvars
  35.     g_fFrostTime = register_cvar("zp_frost_m4a1_time", "7.0") // Freeze Time. It's Float you can make it 0.5
  36.     g_iFreezeDmg = register_cvar("zp_freezing_m4a1_damage", "2000") // Damage Requried So Zombie got Frozen
  37.     g_iDmgMultiplier = register_cvar("zp_multiplier_m4a1_damage", "10") // Multiplie Weapon Damage
  38.  
  39.     // Message IDS
  40.     g_iHudSync = CreateHudSyncObj()
  41.     g_iMsgScreenFade = get_user_msgid("ScreenFade")
  42.     g_iStatusIcon = get_user_msgid("StatusIcon")
  43.  
  44.     // Server Max Slots
  45.     g_iMaxPlayers = get_maxplayers()
  46.    
  47.     // ITEM NAME & COST
  48.     g_iItemID = ze_register_item("Frost M4A1", 20) // It's cost 30 Ammo Pack
  49.    
  50.     // Events
  51.     register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  52.     register_event("WeapPickup","CheckModel","b","1=19")
  53.     register_event("CurWeapon","CurrentWeapon","be","1=1")
  54.     register_event("DeathMsg", "EventDeathMsg", "a")
  55.    
  56.     // Forwards
  57.     register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
  58.     register_forward(FM_SetModel, "fw_SetModel")
  59.    
  60.     // Hams
  61.     RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  62.     RegisterHam(Ham_TraceAttack, "player", "TraceAttack", 1)
  63.     RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
  64.     RegisterHam(Ham_Item_AddToPlayer, "weapon_m4a1", "fw_FrostM4A1AddToPlayer")
  65. }
  66.  
  67. public plugin_precache()
  68. {
  69.     // Models
  70.     precache_model(V_M4A1_MODEL)
  71.     precache_model(P_M4A1_MODEL)
  72.     precache_model(W_M4A1_MODEL)
  73.     precache_model(ICE_MODEL)
  74.     g_iGlassGibs = precache_model(MODEL_GLASSGIBS)
  75.    
  76.     // Sounds
  77.     precache_sound("warcraft3/impalehit.wav")
  78.     precache_sound(SOUND_UNFROZEN)
  79.    
  80.     // Sprites
  81.     g_iM4A1FrostSpr = precache_model("sprites/shockwave.spr")
  82.     g_iSpriteLaser = precache_model( "sprites/Newlightning.spr")
  83.     g_iSprites[SPRITE_FROST] = precache_model("sprites/frostexp_1.spr");
  84.     g_iSprites[SPRITE_FROST2] = precache_model("sprites/frostexp_2.spr");
  85.     g_iSprites[SPRITE_FLAKE] = precache_model("sprites/snowflake_1.spr");
  86. }
  87.  
  88. public client_putinserver(id)
  89. {
  90.     g_bHasFrostM4A1[id] = false
  91.     g_bIsFrozen[id] = false
  92. }
  93.  
  94. public client_disconnect(id)
  95. {
  96.     g_bHasFrostM4A1[id] = false
  97.     g_bIsFrozen[id] = false
  98.     RemoveEntity(id)
  99. }
  100.  
  101. public ze_select_item_pre(id, itemid)
  102. {
  103.     // Return Available and we will block it in Post, So it dosen't affect other plugins
  104.     if (itemid != g_iItemID)
  105.         return ZE_ITEM_AVAILABLE
  106.    
  107.     // Available for Humans only, So don't show it for zombies
  108.     if (ze_is_user_zombie(id))
  109.         return ZE_ITEM_DONT_SHOW
  110.    
  111.     return ZE_ITEM_AVAILABLE
  112. }
  113.  
  114. public ze_select_item_post(player, itemid)
  115. {
  116.     if (itemid != g_iItemID)
  117.         return
  118.    
  119.     g_bHasFrostM4A1[player] = true
  120.     ham_strip_weapon(player, "weapon_m4a1")
  121.     give_item(player, "weapon_m4a1")
  122.     cs_set_user_bpammo(player, CSW_M4A1, 90)
  123.     new sName[32]
  124.     get_user_name(player, sName, 31)
  125.     set_hudmessage(random(255), random(255), random(255), -1.0, 0.17, 1, 0.0, 5.0, 1.0, 1.0, -1)
  126.     show_hudmessage(0, "%s Has bought Frost M4A1!", sName)
  127.     ColorPrint(player, "^1[^4ZE^1] ^3You Have bought Frost M4A1^1!")
  128. }
  129.  
  130. public TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
  131. {
  132.     if(!is_user_alive(iAttacker))
  133.         return
  134.    
  135.     if(get_user_weapon(iAttacker) != CSW_M4A1 || !g_bHasFrostM4A1[iAttacker])
  136.         return
  137.    
  138.     new vec1[3], vec2[3]
  139.     get_user_origin(iAttacker, vec1, 1)
  140.     get_user_origin(iAttacker, vec2, 4)
  141.  
  142.     make_beam(vec1, vec2, g_iSpriteLaser, 0, 50, 200, 200)
  143. }
  144.  
  145. public ze_user_infected_post(infected, infector)
  146. {
  147.     if (g_bHasFrostM4A1[infected])
  148.     {
  149.         g_bHasFrostM4A1[infected] = false
  150.     }
  151. }
  152.  
  153. public ze_user_humanized_post(id)
  154. {
  155.     g_bHasFrostM4A1[id] = false
  156.     g_iDmg[id] = 0
  157.     RemoveEntity(id)
  158. }
  159.  
  160. public event_round_start()
  161. {
  162.     for (new i = 1; i <= g_iMaxPlayers; i++)
  163.     {
  164.         g_bHasFrostM4A1[i] = false
  165.         g_bIsFrozen[i] = false
  166.         g_iDmg[i] = 0
  167.        
  168.         if(is_user_alive(i))
  169.         {
  170.             Remove_Rendering(i)
  171.         }
  172.     }
  173. }
  174.  
  175. public EventDeathMsg()
  176. {
  177.     new iVictim = read_data(2)
  178.     RemoveEntity(iVictim)
  179.     Remove_Rendering(iVictim)
  180.     g_bIsFrozen[iVictim] = false
  181. }
  182.  
  183. public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
  184. {
  185.    
  186.     // Non-player damage or self damage
  187.     if (victim == attacker || !is_user_alive(attacker))
  188.         return HAM_IGNORED;
  189.  
  190.     if(g_bIsFrozen[victim])
  191.         return HAM_SUPERCEDE
  192.  
  193.     if(g_bHasFrostM4A1[attacker] && (get_user_weapon(attacker) == CSW_M4A1))
  194.         SetHamParamFloat(4, damage * get_pcvar_num(g_iDmgMultiplier))
  195.    
  196.     // For Frost Effect Ring
  197.     static Float:originF[3]
  198.     pev(victim, pev_origin, originF)
  199.    
  200.     // For Frost Effect Sound
  201.     static originF2[3]
  202.     get_user_origin(victim, originF2)
  203.    
  204.     if((get_user_weapon(attacker) == CSW_M4A1) && g_bHasFrostM4A1[attacker])
  205.     {
  206.         g_iDmg[attacker] += (floatround(damage) * get_pcvar_num(g_iDmgMultiplier))
  207.        
  208.        
  209.         set_hudmessage(34, 138, 255, -1.0, 0.17, 1, 0.0, 2.0, 1.0, 1.0, -1)
  210.         ShowSyncHudMsg(attacker, g_iHudSync, "Freeze Damage^n%d/%d", g_iDmg[attacker], get_pcvar_num(g_iFreezeDmg))
  211.     }
  212.    
  213.     if((g_iDmg[attacker] >= get_pcvar_num(g_iFreezeDmg)) && (get_user_weapon(attacker) == CSW_M4A1) && g_bHasFrostM4A1[attacker])
  214.     {
  215.         new sName[32]
  216.         get_user_name(victim, sName, charsmax(sName))
  217.         FrostEffect(victim)
  218.         FrostEffectRing(originF)
  219.         FrostEffectSound(originF2)
  220.         g_iDmg[attacker] = 0
  221.         set_dhudmessage(34, 138, 255, -1.0, 0.25, 2, 6.0, 3.0, 0.1, 1.5)
  222.         show_dhudmessage(attacker, "%s Has been Freezed!", sName)
  223.     }
  224.     return HAM_IGNORED
  225. }
  226.  
  227. public CheckModel(id)
  228. {
  229.     if (is_user_alive(id))
  230.     {
  231.         set_pev(id, pev_viewmodel2, V_M4A1_MODEL)
  232.         set_pev(id, pev_weaponmodel2, P_M4A1_MODEL)
  233.     }
  234.     return PLUGIN_HANDLED
  235. }
  236.  
  237. public CurrentWeapon(id)
  238. {
  239.     if ((get_user_weapon(id) == CSW_M4A1) && g_bHasFrostM4A1[id] == true)
  240.     {
  241.         CheckModel(id)
  242.     }
  243.     else
  244.     {
  245.         ClearSyncHud(id, g_iHudSync)
  246.     }
  247.     return PLUGIN_HANDLED
  248. }
  249.  
  250. public FrostEffect(id)
  251. {
  252.     // Only effect alive unfrozen zombies
  253.     if (!is_user_alive(id) || !ze_is_user_zombie(id) || g_bIsFrozen[id])
  254.         return
  255.    
  256.     message_begin(MSG_ONE_UNRELIABLE, g_iMsgScreenFade, _, id)
  257.     write_short(4096*1) // duration
  258.     write_short(4096*1) // hold time
  259.     write_short(0x0000) // fade type
  260.     write_byte(0) // red
  261.     write_byte(50) // green
  262.     write_byte(200) // blue
  263.     write_byte(100) // alpha
  264.     message_end()
  265.  
  266.     message_begin(MSG_ONE, g_iStatusIcon, {0,0,0}, id)
  267.     write_byte(1) // Status [0=Hide, 1=Show, 2=Flash]
  268.     write_string("dmg_cold") // Sprite Name
  269.     write_byte(000) // Red
  270.     write_byte(206) // Green
  271.     write_byte(209) // Blue
  272.     message_end()
  273.    
  274.     new ent = create_entity("info_target")
  275.    
  276.     UTIL_Explosion(id, g_iSprites[SPRITE_FROST], 40, 30, 4)
  277.     UTIL_Explosion(id, g_iSprites[SPRITE_FROST2], 20, 30, 4)
  278.     UTIL_SpriteTrail(id, g_iSprites[SPRITE_FLAKE], 30, 3, 2, 30, 0)
  279.    
  280.     new Float:iOrigin[3]
  281.     entity_get_vector(id, EV_VEC_origin, iOrigin)
  282.     set_pev(ent, pev_body, 1)
  283.     entity_set_model(ent, ICE_MODEL)
  284.     iOrigin[2] -= 35
  285.     entity_set_origin(ent, iOrigin)
  286.     set_pev(ent, pev_owner, id)
  287.     set_rendering(ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 255)
  288.     entity_set_string(ent, EV_SZ_classname, "ent_frozen")
  289.     entity_set_int(ent, EV_INT_solid, 2)
  290.     new Float: iOriginNew[3]
  291.     entity_get_vector(id, EV_VEC_origin, iOriginNew)
  292.     set_user_rendering(id, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25)
  293.     g_bIsFrozen[id] = true
  294.     set_task(get_pcvar_float(g_fFrostTime), "RemoveFrost", id) // Time to Remove Frost Effect
  295. }
  296.  
  297. public fw_PlayerPreThink(id)
  298. {
  299.     // Not alive or Not Zombie
  300.     if (!is_user_alive(id) || !g_bIsFrozen[id])
  301.         return
  302.  
  303.     // Stop motion
  304.     set_pev(id, pev_velocity, Float:{0.0,0.0,0.0})
  305.     set_user_maxspeed(id, 1.0)
  306.    
  307.     // Stop Moving Mouse
  308.     set_pev(id , pev_v_angle , Float:{0.0,0.0,0.0})
  309.     set_pev(id , pev_fixangle , 1)
  310. }
  311.  
  312. // Frost Effect Sound
  313. public FrostEffectSound(iOrigin[3])
  314. {
  315.     new Entity = create_entity("info_target")
  316.  
  317.     new Float:flOrigin[3]
  318.     IVecFVec(iOrigin, flOrigin)
  319.     entity_set_origin(Entity, flOrigin)
  320.     emit_sound(Entity, CHAN_WEAPON, "warcraft3/impalehit.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  321.     remove_entity(Entity)
  322. }
  323.  
  324. UTIL_Explosion(iEnt, iSprite, iScale, iFramerate, Flags)
  325. {
  326.     new Float:vOrigin[3]
  327.     pev(iEnt, pev_origin, vOrigin)
  328.    
  329.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  330.     write_byte(TE_EXPLOSION)
  331.     engfunc(EngFunc_WriteCoord, vOrigin[0])
  332.     engfunc(EngFunc_WriteCoord, vOrigin[1])
  333.     engfunc(EngFunc_WriteCoord, vOrigin[2])
  334.     write_short(iSprite)
  335.     write_byte(iScale)
  336.     write_byte(iFramerate)
  337.     write_byte(Flags)
  338.     message_end()
  339. }
  340.  
  341. UTIL_SpriteTrail(iEnt, iSprite, iCount, iLife, iScale, iVelocity, iVary)
  342. {
  343.     new Float:vOrigin[3]
  344.     pev(iEnt, pev_origin, vOrigin)
  345.    
  346.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  347.     write_byte(TE_SPRITETRAIL)
  348.     engfunc(EngFunc_WriteCoord, vOrigin[0])
  349.     engfunc(EngFunc_WriteCoord, vOrigin[1])
  350.     engfunc(EngFunc_WriteCoord, vOrigin[2] + 100)
  351.     engfunc(EngFunc_WriteCoord, vOrigin[0] + random_float( -200.0, 200.0 ))
  352.     engfunc(EngFunc_WriteCoord, vOrigin[1] + random_float( -200.0, 200.0 ))
  353.     engfunc(EngFunc_WriteCoord, vOrigin[2])
  354.     write_short(iSprite)
  355.     write_byte(iCount)
  356.     write_byte(iLife)
  357.     write_byte(iScale)
  358.     write_byte(iVelocity)
  359.     write_byte(iVary)
  360.     message_end()
  361. }
  362.  
  363. // Frost Effect Ring
  364. FrostEffectRing(const Float:originF3[3])
  365. {
  366.     // Largest ring
  367.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF3, 0)
  368.     write_byte(TE_BEAMCYLINDER) // TE id
  369.     engfunc(EngFunc_WriteCoord, originF3[0]) // x
  370.     engfunc(EngFunc_WriteCoord, originF3[1]) // y
  371.     engfunc(EngFunc_WriteCoord, originF3[2]) // z
  372.     engfunc(EngFunc_WriteCoord, originF3[0]) // x axis
  373.     engfunc(EngFunc_WriteCoord, originF3[1]) // y axis
  374.     engfunc(EngFunc_WriteCoord, originF3[2]+100.0) // z axis
  375.     write_short(g_iM4A1FrostSpr) // sprite
  376.     write_byte(0) // startframe
  377.     write_byte(0) // framerate
  378.     write_byte(4) // life
  379.     write_byte(60) // width
  380.     write_byte(0) // noise
  381.     write_byte(41) // red
  382.     write_byte(138) // green
  383.     write_byte(255) // blue
  384.     write_byte(200) // brightness
  385.     write_byte(0) // speed
  386.     message_end()
  387. }
  388.  
  389. // Remove Frost Effect
  390. public RemoveFrost(id)
  391. {
  392.     // Not alive or not frozen anymore
  393.     if (!is_user_alive(id) || !g_bIsFrozen[id])
  394.         return
  395.    
  396.     // Unfreeze
  397.     g_bIsFrozen[id] = false;
  398.     set_task(0.1, "remove_jibs", id)
  399.  
  400.     // Rest Player Speed
  401.     ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
  402.    
  403.     Remove_Rendering(id)
  404.     RemoveStatusIcon(id)
  405. }
  406.  
  407.  
  408. public remove_jibs(id)
  409. {
  410.     RemoveEntity(id)
  411.    
  412.     new Float:origin[3]
  413.     pev(id,pev_origin,origin)
  414.    
  415.     message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0)
  416.     write_byte(TE_IMPLOSION)
  417.     write_coord_fl(origin[0]) // x
  418.     write_coord_fl(origin[1]) // y
  419.     write_coord_fl(origin[2] + 8.0) // z
  420.     write_byte(64) // radius
  421.     write_byte(10) // count
  422.     write_byte(3) // duration
  423.     message_end()
  424.    
  425.     message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0)
  426.     write_byte(TE_SPARKS)
  427.     write_coord_fl(origin[0]) // x
  428.     write_coord_fl(origin[1]) // y
  429.     write_coord_fl(origin[2]) // z
  430.     message_end()
  431.    
  432.     message_begin_fl(MSG_PAS,SVC_TEMPENTITY,origin,0)
  433.     write_byte(TE_BREAKMODEL)
  434.     write_coord_fl(origin[0]) // x
  435.     write_coord_fl(origin[1]) // y
  436.     write_coord_fl(origin[2] + 24.0) // z
  437.     write_coord_fl(16.0) // size x
  438.     write_coord_fl(16.0) // size y
  439.     write_coord_fl(16.0) // size z
  440.     write_coord(random_num(-50,50)) // velocity x
  441.     write_coord(random_num(-50,50)) // velocity y
  442.     write_coord_fl(25.0) // velocity z
  443.     write_byte(10) // random velocity
  444.     write_short(g_iGlassGibs) // model
  445.     write_byte(10) // count
  446.     write_byte(25) // life
  447.     write_byte(0x01) // flags
  448.     message_end()
  449.    
  450.     emit_sound(0,CHAN_ITEM,SOUND_UNFROZEN,VOL_NORM,ATTN_NORM,0,PITCH_LOW)
  451. }
  452.  
  453. stock ColorPrint(const id, const input[], any: ...)
  454. {
  455.     new count = 1, players[32]
  456.     static msg[192]
  457.     vformat(msg, 191, input, 3)
  458.    
  459.     replace_all(msg, 191, "!g", "^4")
  460.     replace_all(msg, 191, "!y", "^1")
  461.     replace_all(msg, 191, "!t", "^3")
  462.     replace_all(msg, 191, "!t2", "^0")
  463.    
  464.     if (id) players[0] = id;else get_players(players, count, "ch")
  465.     {
  466.         for (new i = 0; i < count; i++)
  467.         {
  468.             if (is_user_connected( players[i]))
  469.             {
  470.                 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
  471.                 write_byte(players[i])
  472.                 write_string(msg)
  473.                 message_end()
  474.             }
  475.         }
  476.     }
  477. }
  478.  
  479. stock ham_strip_weapon(id,weapon[])
  480. {
  481.     if(!equal(weapon,"weapon_",7)) return 0
  482.  
  483.     new wId = get_weaponid(weapon)
  484.     if(!wId) return 0
  485.  
  486.     new wEnt
  487.     while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
  488.     if(!wEnt) return 0
  489.  
  490.     if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt)
  491.  
  492.     if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0
  493.     ExecuteHamB(Ham_Item_Kill,wEnt)
  494.  
  495.     set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId))
  496.  
  497.     return 1
  498. }
  499.  
  500. make_beam(const origin2[3], const origin[3], sprite, red, green, blue, alpha)
  501. {
  502.     //BEAMENTPOINTS
  503.     message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
  504.     write_byte (0) //TE_BEAMENTPOINTS 0
  505.     write_coord(origin2[0])
  506.     write_coord(origin2[1])
  507.     write_coord(origin2[2])
  508.     write_coord(origin[0])
  509.     write_coord(origin[1])
  510.     write_coord(origin[2])
  511.     write_short(sprite) // sprite
  512.     write_byte(1) // framestart
  513.     write_byte(5) // framerate
  514.     write_byte(2) // life
  515.     write_byte(20) // width
  516.     write_byte(0) // noise
  517.     write_byte(red) // r, g, b
  518.     write_byte(green) // r, g, b
  519.     write_byte(blue) // r, g, b
  520.     write_byte(alpha) // brightness
  521.     write_byte(150) // speed
  522.     message_end()
  523. }
  524.  
  525. public RemoveStatusIcon(id)
  526. {
  527.     // Remove Status Icon
  528.     message_begin(MSG_ONE, g_iStatusIcon, {0,0,0}, id)
  529.     write_byte(0) // Status [0=Hide, 1=Show, 2=Flash]
  530.     write_string("dmg_cold") // Sprite Name
  531.     message_end()
  532. }
  533.  
  534. public fw_SetModel(entity, model[])
  535. {
  536.    
  537.     if(!is_valid_ent(entity))
  538.         return FMRES_IGNORED
  539.  
  540.     if(!equali(model, W_OLD_M4A1_MODEL))
  541.         return FMRES_IGNORED
  542.  
  543.     new className[33]
  544.     entity_get_string(entity, EV_SZ_classname, className, 32)
  545.  
  546.     static iOwner, iStoredM4A1ID
  547.  
  548.     // Frost M4A1 Owner
  549.     iOwner = entity_get_edict(entity, EV_ENT_owner)
  550.  
  551.     // Get drop weapon index (Frost M4A1) to use in fw_FrostM4A1AddToPlayer forward
  552.     iStoredM4A1ID = find_ent_by_owner(-1, "weapon_m4a1", entity)
  553.  
  554.     // If Player Has Frost M4A1 and It's weapon_m4a1
  555.     if(g_bHasFrostM4A1[iOwner] && is_valid_ent(iStoredM4A1ID))
  556.     {
  557.         // Setting weapon options
  558.         entity_set_int(iStoredM4A1ID, EV_INT_impulse, 1997)
  559.  
  560.         // Rest Var
  561.         g_bHasFrostM4A1[iOwner] = false
  562.        
  563.         // Set weaponbox new model
  564.         entity_set_model(entity, W_M4A1_MODEL)
  565.         return FMRES_SUPERCEDE
  566.     }
  567.     return FMRES_IGNORED
  568. }
  569.  
  570. public fw_FrostM4A1AddToPlayer(FrostM4A1, id)
  571. {
  572.     // Make sure that this is M4A1
  573.     if(is_valid_ent(FrostM4A1) && is_user_connected(id) && entity_get_int(FrostM4A1, EV_INT_impulse) == 1997)
  574.     {
  575.         // Update Var
  576.         g_bHasFrostM4A1[id] = true
  577.  
  578.         // Reset weapon options
  579.         entity_set_int(FrostM4A1, EV_INT_impulse, 0)
  580.         return HAM_HANDLED
  581.     }
  582.     return HAM_IGNORED
  583. }
  584.  
  585. stock Remove_Rendering(id)
  586. {
  587.     set_user_rendering(id, kRenderFxNone, 255, 255, 255, kRenderNormal, 16)
  588. }
  589.  
  590. public RemoveEntity(id)
  591. {
  592.     if(!is_user_connected(id))
  593.         return
  594.        
  595.     new iEnt = find_ent_by_owner(-1, "ent_frozen", id);
  596.    
  597.     if(pev_valid(iEnt))
  598.         remove_entity(iEnt)
  599. }
He doesn't use our mode, he uses old 1 by Dias. :P :lol:
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#4

Post by Raheem » 7 years ago

Oh, I thought he using our mod. We don't support any other mods so there is no other way else trash this thread.
He who fails to plan is planning to fail

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: No registered users and 0 guests