Solved Thanatos 7 change

Unpaid Requests, Public Plugins
Post Reply
czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

Thanatos 7 change

#1

Post by czirimbolo » 5 years ago

Hello,

This gun can make damage on zombie in freezetime. Especially second attack can damage zombies on spawn. Can someone block it?

Code: Select all

#include <zombie_escape> 
#include <fakemeta_util>
#include <xs>
#include <cstrike>
#include <fun>
#include <engine>

#define PLUGIN "[CSO] Pri: Thanatos-7"
#define VERSION "1.0"
#define AUTHOR "Dev!l"

#define ENG_NULLENT		-1
#define EV_INT_WEAPONKEY	EV_INT_impulse

#define WEAPONKEY 754247

const USE_STOPPED = 0
const PDATA_SAFE = 2
const OFFSET_LINUX_WEAPONS = 4
const OFFSET_WEAPONOWNER = 41
const m_flNextAttack = 83
const m_szAnimExtention = 492

#define WEAP_LINUX_XTRA_OFF		4
#define m_flTimeWeaponIdle			48
#define m_iClip					51
#define m_fInReload				54
#define PLAYER_LINUX_XTRA_OFF	5

#define RELOAD_TIME		4.5

new const v_model[] = "models/zombie_escape/v_thanatos7.mdl"
new const p_model[] = "models/zombie_escape//p_thanatos7.mdl"
new const w_model[] = "models/zombie_escape/w_thanatos7.mdl"
new const SCYTHE_MODEL[] = "models/zombie_escape/thanatos7_scythe.mdl" 

new const sound[10][] = 
{
	"weapons/thanatos7-1.wav",
	"weapons/thanatos7_bdraw.wav",
	"weapons/thanatos7_bidle2.wav",
	"weapons/thanatos7_clipin1.wav",
	"weapons/thanatos7_clipin2.wav",
	"weapons/thanatos7_clipout1.wav",
	"weapons/thanatos7_clipout2.wav",
	"weapons/thanatos7_draw.wav",
	"weapons/thanatos7_scythereload.wav",
	"weapons/thanatos7_scytheshoot.wav"
}

new const sprite[4][] = 
{
	"sprites/weapon_thanatos7.txt",
	"sprites/cso/640hud7.spr",
	"sprites/cso/640hud13.spr",
	"sprites/cso/640hud117.spr"
}

enum
{
	IDLE = 0,
	BIDLE,
	BIDLE2,
	SHOOT1,
	BSHOOT1,
	SHOOT2,
	BSHOOT2,
	RELOAD,
	BRELOAD,
	SCYTHESHOOT,
	SCYTHERELOAD,
	DRAW,
	BDRAW
}

#define write_coord_f(%1)	engfunc(EngFunc_WriteCoord,%1)

new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }

new g_had_thanatos7[33], g_thanatos7_ammo[33], g_mode[33], g_reload[33], g_iItemID
new Float:cl_pushangle[33][3], g_clip_ammo[33], g_old_weapon[33]
new g_IsInPrimaryAttack, g_orig_event_thanatos7, g_thanatos7_TmpClip[33], Ent, gmsgWeaponList, g_MaxPlayers ,g_Msg_StatusIcon
new cvar_dmg_scythe, cvar_clip_thanatos7, cvar_thanatos7_ammo, cvar_recoil_thanatos7, cvar_dmg_thanatos7
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
			"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
			"weapon_mp5navy", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
			"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
			"weapon_ak47", "weapon_knife", "weapon_p90" }
			
enum
{
	MODE_NOLMAL = 1,
	MODE_CHANGING_1,
	MODE_CHANGING_2,
	MODE_BOLT
}

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
	register_forward(FM_CmdStart, "fw_CmdStart")
	register_forward(FM_SetModel, "fw_SetModel")
	register_touch("scythe", "*", "fw_Touch")
	register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
	register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
	g_iItemID = ze_register_item("Thanatos 7", 65, 0) 
	
	RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
	
	RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
	RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack")
	RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)
	
	for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
		if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
	
	RegisterHam(Ham_Item_AddToPlayer, "weapon_m249", "fw_AddToPlayer_Post", 1)
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "fw_PrimaryAttack")
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "fw_PrimaryAttack_Post", 1)
	RegisterHam(Ham_Item_PostFrame, "weapon_m249", "fw_ItemPostFrame")
	RegisterHam(Ham_Weapon_Reload, "weapon_m249", "fw_Reload")
	RegisterHam(Ham_Weapon_Reload, "weapon_m249", "fw_Reload_Post", 1)
	RegisterHam(Ham_Weapon_WeaponIdle, "weapon_m249", "fw_Idleanim", 1)
	RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
	
	cvar_recoil_thanatos7 = register_cvar("cso_thanatos7_recoil", "0.45")
	cvar_dmg_thanatos7 = register_cvar("cso_dmg_thanatos7", "60.0")
	cvar_dmg_scythe = register_cvar("cso_dmg_scythe", "100.0")
	cvar_clip_thanatos7 = register_cvar("cso_thanatos7_clip", "120")
	cvar_thanatos7_ammo = register_cvar("cso_thanatos7_ammo", "240")
	
	gmsgWeaponList = get_user_msgid("WeaponList")
	g_Msg_StatusIcon = get_user_msgid("StatusIcon")
	g_MaxPlayers = get_maxplayers()
	
	register_clcmd("weapon_thanatos7", "hook_weapon")
}

public plugin_precache()
{
	precache_model(v_model)
	precache_model(p_model)
	precache_model(w_model)
	precache_model(SCYTHE_MODEL)
	
	for(new i = 0; i < sizeof(sound); i++) 
		precache_sound(sound[i])
		
	for(new i = 1; i < sizeof(sprite); i++)
		precache_model(sprite[i])
		
	register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
}

public ze_user_infected(id)
{
	remove_thanatos7(id)
}

public fw_PlayerKilled(id)
{
	remove_thanatos7(id)
}


public hook_weapon(id)
{
	engclient_cmd(id, "weapon_m249")
	return
}

public fw_PrecacheEvent_Post(type, const name[])
{
	if(equal("events/m249.sc", name))
		g_orig_event_thanatos7 = get_orig_retval()
}

public ze_select_item_pre(id, itemid)
{
    // This not our item?
    if (itemid != g_iItemID)
        return ZE_ITEM_AVAILABLE
   
    // Available for Humans only, So don't show it for zombies
    if (ze_is_user_zombie(id))
        return ZE_ITEM_DONT_SHOW
   
    // Finally return that it's available
    return ZE_ITEM_AVAILABLE
} 

public ze_select_item_post(id, itemid)
{
    // This is not our item, Block it here and don't execute the blew code
    if (itemid != g_iItemID)
        return
   
    get_thanatos(id) 
}

public get_thanatos(id)
{
	if(!is_user_alive(id))
		return
		
	new iWep2 = give_item(id,"weapon_m249")
	if( iWep2 > 0 )
	{
		cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_thanatos7))
		cs_set_user_bpammo (id, CSW_M249, get_pcvar_num(cvar_thanatos7_ammo))
		set_weapons_timeidle(id, CSW_M249, 2.0)
		set_player_nextattackx(id, 2.0)
		set_weapon_anim(id, DRAW)
	}
	g_had_thanatos7[id] = 1
	g_mode[id] = MODE_NOLMAL
	g_thanatos7_ammo[id] = 0
	g_reload[id] = 1
	update_specialammo(id, g_thanatos7_ammo[id], g_thanatos7_ammo[id] > 0 ? 1 : 0)
	
	message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
	write_string("weapon_thanatos7")
	write_byte(3)
	write_byte(200)
	write_byte(-1)
	write_byte(-1)
	write_byte(0)
	write_byte(4)
	write_byte(CSW_M249)
	write_byte(0)
	message_end()
}

public remove_thanatos7(id)
{
	update_specialammo(id, g_thanatos7_ammo[id], 0)
		
	g_had_thanatos7[id] = 0
	g_thanatos7_ammo[id] = 0
	g_reload[id] = 1
}

public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
	if(!is_user_alive(iAttacker))
		return

	new g_currentweapon = get_user_weapon(iAttacker)

	if(g_currentweapon != CSW_M249 || !g_had_thanatos7[iAttacker])
		return
		
	SetHamParamFloat(3, get_pcvar_float(cvar_dmg_thanatos7))
	
	static Float:flEnd[3], Float:myOrigin[3]
	
	pev(iAttacker, pev_origin, myOrigin)
	get_tr2(ptr, TR_vecEndPos, flEnd)
		
	if(!is_user_alive(iEnt))
	{
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_DECAL)
		write_coord_f(flEnd[0])
		write_coord_f(flEnd[1])
		write_coord_f(flEnd[2])
		write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
		write_short(iEnt)
		message_end()

		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_WORLDDECAL)
		write_coord_f(flEnd[0])
		write_coord_f(flEnd[1])
		write_coord_f(flEnd[2])
		write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
		message_end()
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_GUNSHOTDECAL)
		write_coord_f(flEnd[0])
		write_coord_f(flEnd[1])
		write_coord_f(flEnd[2])
		write_short(iAttacker)
		write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
		message_end()
	}
}

public fw_UpdateClientData_Post(id, sendweapons, CD_Handle)
{
	if(!is_user_alive(id) || (get_user_weapon(id) != CSW_M249 || !g_had_thanatos7[id]))
		return FMRES_IGNORED
	
	set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
	
	return FMRES_HANDLED
}

public fw_SetModel(entity, model[])
{
	if(!is_valid_ent(entity))
		return FMRES_IGNORED
	
	static szClassName[33]
	entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
		
	if(!equal(szClassName, "weaponbox"))
		return FMRES_IGNORED
	
	static iOwner
	
	iOwner = entity_get_edict(entity, EV_ENT_owner)
	
	if(equal(model, "models/w_m249.mdl"))
	{
		static iStoredAugID
	
		iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_m249", entity)

		if(!is_valid_ent(iStoredAugID))
			return FMRES_IGNORED
	
		if(g_had_thanatos7[iOwner])
		{
			g_had_thanatos7[iOwner] = 0
			
			entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, WEAPONKEY)
			set_pev(iStoredAugID, pev_iuser4, g_thanatos7_ammo[iOwner])
			entity_set_model(entity, w_model)
			
			return FMRES_SUPERCEDE
		}
	}
	return FMRES_IGNORED
}

public fw_UseStationary_Post(entity, caller, activator, use_type)
{
	if (use_type == USE_STOPPED && is_user_connected(caller))
		replace_weapon_models(caller, get_user_weapon(caller))
}

public fw_Item_Deploy_Post(weapon_ent)
{
	static owner
	owner = fm_cs_get_weapon_ent_owner(weapon_ent)
	
	static weaponid
	weaponid = cs_get_weapon_id(weapon_ent)
	
	replace_weapon_models(owner, weaponid)
}

public Event_CurWeapon(id)
{
	if(!is_user_alive(id))
		return
		
	if(get_user_weapon(id) != CSW_M249 && g_old_weapon[id] == CSW_M249) 
	{
		update_specialammo(id, g_thanatos7_ammo[id], 0)
	}
	g_old_weapon[id] = get_user_weapon(id)
		
	replace_weapon_models(id, read_data(2))
}

replace_weapon_models(id, weaponid)
{
	switch (weaponid)
	{
		case CSW_M249:
		{
			if(g_had_thanatos7[id])
			{
				set_pev(id, pev_viewmodel2, v_model)
				set_pev(id, pev_weaponmodel2, p_model)
				update_specialammo(id, g_thanatos7_ammo[id], g_thanatos7_ammo[id] > 0 ? 1 : 0)
				g_reload[id] = 1
				if(g_mode[id] == MODE_NOLMAL)
				{
					if(g_old_weapon[id] != CSW_M249) 
					{
						set_weapon_anim(id, DRAW)
						set_weapons_timeidle(id, CSW_M249, 2.0)
						set_player_nextattackx(id, 2.0)

						remove_task(id)
						message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
						write_string("weapon_thanatos7")
						write_byte(3)
						write_byte(200)
						write_byte(-1)
						write_byte(-1)
						write_byte(0)
						write_byte(4)
						write_byte(CSW_M249)
						write_byte(0)
						message_end()
					}
				}
				else if(g_mode[id] == MODE_BOLT && g_thanatos7_ammo[id] == 1)
				{
					if(g_old_weapon[id] != CSW_M249) 
					{
						set_weapon_anim(id, BDRAW)
						set_weapons_timeidle(id, CSW_M249, 2.0)
						set_player_nextattackx(id, 2.0)
						
						remove_task(id)
						message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
						write_string("weapon_thanatos7")
						write_byte(3)
						write_byte(200)
						write_byte(-1)
						write_byte(-1)
						write_byte(0)
						write_byte(4)
						write_byte(CSW_M249)
						write_byte(0)
						message_end()
					}
				}
			}
		}
	}
	g_old_weapon[id] = get_user_weapon(id)
}

public fw_AddToPlayer_Post(weapon, id)
{
	if(!is_valid_ent(weapon) || !is_user_connected(id))
		return HAM_IGNORED
	
	if(entity_get_int(weapon, EV_INT_WEAPONKEY) == WEAPONKEY)
	{
		g_had_thanatos7[id] = 1
		g_thanatos7_ammo[id] = pev(weapon, pev_iuser4)
		
		message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
		write_string("weapon_thanatos7")
		write_byte(3)
		write_byte(200)
		write_byte(-1)
		write_byte(-1)
		write_byte(0)
		write_byte(4)
		write_byte(CSW_M249)
		write_byte(0)
		message_end()
	}
	else
	{
		message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
		write_string("weapon_m249")
		write_byte(3)
		write_byte(200)
		write_byte(-1)
		write_byte(-1)
		write_byte(0)
		write_byte(4)
		write_byte(CSW_M249)
		write_byte(0)
		message_end()
	}
	return HAM_IGNORED
}

public fw_PrimaryAttack(Weapon)
{
	new Player = get_pdata_cbase(Weapon, 41, 4)
	
	if (!g_had_thanatos7[Player])
		return
	
	g_IsInPrimaryAttack = 1
	pev(Player,pev_punchangle,cl_pushangle[Player])
	
	g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
}

public fw_PrimaryAttack_Post(Weapon)
{
	g_IsInPrimaryAttack = 0
	new Player = get_pdata_cbase(Weapon, 41, 4)
	
	new szClip, szAmmo
	get_user_weapon(Player, szClip, szAmmo)
		
	if(g_had_thanatos7[Player])
	{
		if(szClip <= 0) emit_sound(Player, CHAN_WEAPON, sound[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	}
	
	if(g_had_thanatos7[Player])
	{
		if (!g_clip_ammo[Player])
			return
			
		new Float:push[3]
		pev(Player,pev_punchangle,push)
		xs_vec_sub(push,cl_pushangle[Player],push)
		
		xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_thanatos7),push)
		xs_vec_add(push,cl_pushangle[Player],push)
		set_pev(Player,pev_punchangle,push)
		emit_sound(Player, CHAN_WEAPON, sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
		if(g_mode[Player] == MODE_NOLMAL)
		{	
			set_weapon_anim(Player, SHOOT1)
		}
		else if(g_mode[Player] == MODE_BOLT)
		{
			set_weapon_anim(Player, BSHOOT1)
		}
		
	}
}

public fw_CmdStart(id, uc_handle, seed)
{
	if(!is_user_alive(id) || !is_user_connected(id))
		return
	if(get_user_weapon(id) != CSW_M249 || !g_had_thanatos7[id])
		return
	
	static ent; ent = fm_get_user_weapon_entity(id, CSW_M249)
	if(!pev_valid(ent))
		return
		
	new szClip, szAmmo
	get_user_weapon(id, szClip, szAmmo)
	
	static CurButton
	CurButton = get_uc(uc_handle, UC_Buttons)
	
	if(CurButton & IN_ATTACK2 && szClip >= 1)
	{
		CurButton &= ~IN_ATTACK2
		set_uc(uc_handle, UC_Buttons, CurButton)
		
		if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0) 
			return
			
		if(g_mode[id] == MODE_NOLMAL)
		{
			set_weapons_timeidle(id, CSW_M249, 4.0)
			set_player_nextattackx(id, 4.0)
			set_weapon_anim(id, SCYTHERELOAD)
			g_reload[id] = 0
			emit_sound(id, CHAN_WEAPON, sound[8], 1.0, ATTN_NORM, 0, PITCH_NORM)
			set_task(0.1, "change_mode", id)
			g_mode[id] = MODE_CHANGING_1
		
		}
		else if(g_mode[id] == MODE_BOLT)
		{
			if(g_thanatos7_ammo[id] == 0)
				return
				
			set_weapons_timeidle(id, CSW_M249, 4.0)
			set_player_nextattackx(id, 4.0)
			Scythe_Shoot(id)
			static Float:PunchAngles[3]
			PunchAngles[0] = -10.0
			update_specialammo(id, g_thanatos7_ammo[id], 0)
			g_thanatos7_ammo[id]--
			update_specialammo(id, g_thanatos7_ammo[id], g_thanatos7_ammo[id] > 0 ? 1 : 0)
			g_reload[id] = 0
			set_weapon_anim(id, SCYTHESHOOT)
			emit_sound(id, CHAN_WEAPON, sound[9], 1.0, ATTN_NORM, 0, PITCH_NORM)
			set_task(0.1, "change_mode", id)
			g_mode[id] = MODE_CHANGING_2
		}
	}
}

public change_mode(id)
{
	if(g_mode[id] == MODE_CHANGING_1)
	{
		g_mode[id] = MODE_NOLMAL
		set_task(3.5, "fil_scythe", id)
	}
	else if(g_mode[id] == MODE_CHANGING_2)
	{
		g_reload[id] = 1
		g_mode[id] = MODE_NOLMAL
	}
}

public fil_scythe(id)
{
	set_weapons_timeidle(id, CSW_M249, 0.5)
	set_player_nextattackx(id, 0.5)
	g_mode[id] = MODE_BOLT
	update_specialammo(id, g_thanatos7_ammo[id], 0)
	g_thanatos7_ammo[id]++
	update_specialammo(id, g_thanatos7_ammo[id], 1)
	reload_on(id)
}

public reload_on(id)
{
	g_reload[id] = 1
}

public Scythe_Shoot(id)
{
	static Float:StartOrigin[3], Float:TargetOrigin[3], Float:angles[3], Float:angles_fix[3]
	get_position(id, 2.0, 4.0, -1.0, StartOrigin)

	pev(id,pev_v_angle,angles)
	Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	if(!pev_valid(Ent)) return
	angles_fix[0] = 360.0 - angles[0]
	angles_fix[1] = angles[1]
	angles_fix[2] = angles[2]
	set_pev(Ent, pev_movetype, MOVETYPE_FLY)
	set_pev(Ent, pev_owner, id)
	
	entity_set_string(Ent, EV_SZ_classname, "scythe")
	engfunc(EngFunc_SetModel, Ent, SCYTHE_MODEL)
	set_pev(Ent, pev_mins,{ -0.1, -0.1, -0.1 })
	set_pev(Ent, pev_maxs,{ 0.1, 0.1, 0.1 })
	set_pev(Ent, pev_origin, StartOrigin)
	set_pev(Ent, pev_angles, angles_fix)
	set_pev(Ent, pev_solid, SOLID_BBOX)
	set_pev(Ent, pev_frame, 0.0)
	set_entity_anim(Ent, 1)
	entity_set_float(Ent, EV_FL_nextthink, halflife_time() + 0.01)
	
	static Float:Velocity[3]
	fm_get_aim_origin(id, TargetOrigin)
	get_speed_vector(StartOrigin, TargetOrigin, 750.0, Velocity)
	set_pev(Ent, pev_velocity, Velocity)
}

public fw_Touch(Ent, Id)
{
	// If ent is valid
	if(!pev_valid(Ent))
		return
	if(pev(Ent, pev_movetype) == MOVETYPE_NONE)
		return
		
	set_pev(Ent, pev_movetype, MOVETYPE_NONE)
	set_pev(Ent, pev_solid, SOLID_NOT)
	set_entity_anim(Ent, 1)
	entity_set_float(Ent, EV_FL_nextthink, halflife_time() + 0.01)
	
	set_task(0.1, "action_scythe", Ent)
	set_task(9.0, "remove", Ent)
}

public remove(Ent)
{
	if(!pev_valid(Ent))
		return
		
	remove_entity(Ent)
}

public action_scythe(Ent)
{
	if(!pev_valid(Ent))
		return
		
	Damage_scythe(Ent)
}

public Damage_scythe(Ent)
{
	if(!pev_valid(Ent))
		return
	
	static id; id = pev(Ent, pev_owner)
	new Float:origin[3]
	pev(Ent, pev_origin, origin)
	
	// Alive...
	new a = FM_NULLENT
	// Get distance between victim and epicenter
	while((a = find_ent_in_sphere(a, origin, 80.0)) != 0)
	{
		if (id == a)
			continue
	
		if(pev(a, pev_takedamage) != DAMAGE_NO)
		{
			ExecuteHamB(Ham_TakeDamage, a, id, id, get_pcvar_float(cvar_dmg_scythe), DMG_BULLET)
		}
	}
	set_task(0.1, "action_scythe", Ent)
}
	
public fw_Idleanim(Weapon)
{
	new id = get_pdata_cbase(Weapon, 41, 4)
	g_reload[id] = 1

	if(!is_user_alive(id) || !g_had_thanatos7[id] || get_user_weapon(id) != CSW_M249)
		return HAM_IGNORED;
	
	if(g_mode[id] == MODE_NOLMAL && g_thanatos7_ammo[id] == 0 && get_pdata_float(Weapon, 48, 4) <= 0.25)
	{
		set_weapon_anim(id, IDLE)
		set_pdata_float(Weapon, 48, 20.0, 4)
		return HAM_SUPERCEDE;
	}
	
	if(g_mode[id] == MODE_BOLT && g_thanatos7_ammo[id] == 1 && get_pdata_float(Weapon, 48, 4) <= 0.25) 
	{
		set_weapon_anim(id, random_num(BIDLE, BIDLE2))
		set_pdata_float(Weapon, 48, 20.0, 4)
		return HAM_SUPERCEDE;
	}

	return HAM_IGNORED;
}

public update_ammo(id)
{
	if(!is_user_alive(id))
		return
	
	static weapon_ent; weapon_ent = fm_find_ent_by_owner(-1, "weapon_m249", id)
	if(pev_valid(weapon_ent)) cs_set_weapon_ammo(weapon_ent, 1)	
	
	cs_set_user_bpammo(id, CSW_M249, 0)
	
	engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id)
	write_byte(1)
	write_byte(CSW_M249)
	write_byte(-1)
	message_end()
	
	message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("AmmoX"), _, id)
	write_byte(3)
	write_byte(g_thanatos7_ammo[id])
	message_end()
}

public update_specialammo(id, Ammo, On)
{
	static AmmoSprites[33]
	format(AmmoSprites, sizeof(AmmoSprites), "number_%d", Ammo)
  	
	message_begin(MSG_ONE_UNRELIABLE, g_Msg_StatusIcon, {0,0,0}, id)
	write_byte(On)
	write_string(AmmoSprites)
	write_byte(42) // red
	write_byte(212) // green
	write_byte(255) // blue
	message_end()
}

public fw_ItemPostFrame( wpn )
{
	new id = pev(wpn, pev_owner)
	if(!is_user_connected(id))
		return HAM_IGNORED
	
	if(!g_had_thanatos7[id])
		return HAM_IGNORED
		
	if(g_reload[id] == 0)
		return HAM_IGNORED
				
	new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
	new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
	new iClip = get_pdata_int(wpn, m_iClip, WEAP_LINUX_XTRA_OFF)
	new fInReload = get_pdata_int(wpn, m_fInReload, WEAP_LINUX_XTRA_OFF)
	
	if(fInReload && flNextAttack <= 0.0)
	{
		new j = min(get_pcvar_num(cvar_clip_thanatos7) - iClip, iBpAmmo)
		set_pdata_int(wpn, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
		cs_set_user_bpammo(id, CSW_M249, iBpAmmo-j)
		set_pdata_int(wpn, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
		fInReload = 0
	}
	return HAM_IGNORED
}

public fw_Reload( wpn ) {
	new id = pev(wpn, pev_owner)
	if(!is_user_connected(id))
		return HAM_IGNORED
	
	if(!g_had_thanatos7[id])
		return HAM_IGNORED
		
	if(g_reload[id] == 0)
		return HAM_IGNORED
				
	g_thanatos7_TmpClip[id] = -1
	new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
	new iClip = get_pdata_int(wpn, m_iClip, WEAP_LINUX_XTRA_OFF)
	if(iBpAmmo <= 0)
		return HAM_SUPERCEDE
	
	if(iClip >= get_pcvar_num(cvar_clip_thanatos7))
		return HAM_SUPERCEDE
	
	g_thanatos7_TmpClip[id] = iClip
	return HAM_IGNORED
}

public fw_Reload_Post(weapon) {
	new id = pev(weapon, pev_owner)
	if(!is_user_connected(id))
		return HAM_IGNORED
		
	if(!g_had_thanatos7[id])
		return HAM_IGNORED
		
	if(g_thanatos7_TmpClip[id] == -1)
		return HAM_IGNORED
		
	if(g_reload[id] == 0)
		return HAM_IGNORED
		
	set_pdata_int(weapon, m_iClip, g_thanatos7_TmpClip[id], WEAP_LINUX_XTRA_OFF)
	set_pdata_float(weapon, m_flTimeWeaponIdle, RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
	set_pdata_float(id, m_flNextAttack, RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
	set_pdata_int(weapon, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
	
	if(g_mode[id] == MODE_NOLMAL && g_thanatos7_ammo[id] == 0)
	{
		set_weapon_anim(id, RELOAD)
		set_pdata_float(weapon, 48, 20.0, 4)
	}
	else if(g_mode[id] == MODE_BOLT && g_thanatos7_ammo[id] == 1)
	{
		set_weapon_anim(id, BRELOAD)
		set_pdata_float(weapon, 48, 20.0, 4)
	}
	return HAM_IGNORED
}

public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
	if ((eventid != g_orig_event_thanatos7) || !g_IsInPrimaryAttack)
		return FMRES_IGNORED
	if (!(1 <= invoker <= g_MaxPlayers))
		return FMRES_IGNORED

	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
	
	return FMRES_SUPERCEDE
}

stock set_weapon_anim(id, anim)
{
	if(!is_user_alive(id))
		return
	
	set_pev(id, pev_weaponanim, anim)
	
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
	write_byte(anim)
	write_byte(pev(id, pev_body))
	message_end()
}

stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
	new_velocity[0] = origin2[0] - origin1[0]
	new_velocity[1] = origin2[1] - origin1[1]
	new_velocity[2] = origin2[2] - origin1[2]
	static Float:num; num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
	new_velocity[0] *= num
	new_velocity[1] *= num
	new_velocity[2] *= num
	
	return 1;
}

stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
{
	static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
	
	pev(id, pev_origin, vOrigin)
	pev(id, pev_view_ofs, vUp) //for player
	xs_vec_add(vOrigin, vUp, vOrigin)
	pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
	
	angle_vector(vAngle, ANGLEVECTOR_FORWARD, vForward) //or use EngFunc_AngleVectors
	angle_vector(vAngle, ANGLEVECTOR_RIGHT, vRight)
	angle_vector(vAngle, ANGLEVECTOR_UP, vUp)
	
	vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
	vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
	vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}

stock set_weapons_timeidle(id, WeaponId ,Float:TimeIdle)
{
	if(!is_user_alive(id))
		return
		
	static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
	if(!pev_valid(entwpn)) 
		return
		
	set_pdata_float(entwpn, 46, TimeIdle, OFFSET_LINUX_WEAPONS)
	set_pdata_float(entwpn, 47, TimeIdle, OFFSET_LINUX_WEAPONS)
	set_pdata_float(entwpn, 48, TimeIdle + 0.5, OFFSET_LINUX_WEAPONS)
}

stock set_player_nextattackx(id, Float:nexttime)
{
	if(!is_user_alive(id))
		return
		
	set_pdata_float(id, m_flNextAttack, nexttime, 5)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
	return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
}

stock set_entity_anim(ent, anim)
{
	entity_set_float(ent, EV_FL_animtime, get_gametime())
	entity_set_float(ent, EV_FL_framerate, 1.0)
	entity_set_int(ent, EV_INT_sequence, anim)	
}
Image

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

#2

Post by Night Fury » 5 years ago

  1. #include <zombie_escape>
  2. #include <fakemeta_util>
  3. #include <xs>
  4. #include <cstrike>
  5. #include <fun>
  6. #include <engine>
  7.  
  8. #define PLUGIN "[CSO] Pri: Thanatos-7"
  9. #define VERSION "1.0"
  10. #define AUTHOR "Dev!l"
  11.  
  12. #define ENG_NULLENT     -1
  13. #define EV_INT_WEAPONKEY    EV_INT_impulse
  14.  
  15. #define WEAPONKEY 754247
  16.  
  17. const USE_STOPPED = 0
  18. const PDATA_SAFE = 2
  19. const OFFSET_LINUX_WEAPONS = 4
  20. const OFFSET_WEAPONOWNER = 41
  21. const m_flNextAttack = 83
  22. const m_szAnimExtention = 492
  23.  
  24. #define WEAP_LINUX_XTRA_OFF     4
  25. #define m_flTimeWeaponIdle          48
  26. #define m_iClip                 51
  27. #define m_fInReload             54
  28. #define PLAYER_LINUX_XTRA_OFF   5
  29.  
  30. #define RELOAD_TIME     4.5
  31.  
  32. new const v_model[] = "models/zombie_escape/v_thanatos7.mdl"
  33. new const p_model[] = "models/zombie_escape//p_thanatos7.mdl"
  34. new const w_model[] = "models/zombie_escape/w_thanatos7.mdl"
  35. new const SCYTHE_MODEL[] = "models/zombie_escape/thanatos7_scythe.mdl"
  36.  
  37. new const sound[10][] =
  38. {
  39.     "weapons/thanatos7-1.wav",
  40.     "weapons/thanatos7_bdraw.wav",
  41.     "weapons/thanatos7_bidle2.wav",
  42.     "weapons/thanatos7_clipin1.wav",
  43.     "weapons/thanatos7_clipin2.wav",
  44.     "weapons/thanatos7_clipout1.wav",
  45.     "weapons/thanatos7_clipout2.wav",
  46.     "weapons/thanatos7_draw.wav",
  47.     "weapons/thanatos7_scythereload.wav",
  48.     "weapons/thanatos7_scytheshoot.wav"
  49. }
  50.  
  51. new const sprite[4][] =
  52. {
  53.     "sprites/weapon_thanatos7.txt",
  54.     "sprites/cso/640hud7.spr",
  55.     "sprites/cso/640hud13.spr",
  56.     "sprites/cso/640hud117.spr"
  57. }
  58.  
  59. enum
  60. {
  61.     IDLE = 0,
  62.     BIDLE,
  63.     BIDLE2,
  64.     SHOOT1,
  65.     BSHOOT1,
  66.     SHOOT2,
  67.     BSHOOT2,
  68.     RELOAD,
  69.     BRELOAD,
  70.     SCYTHESHOOT,
  71.     SCYTHERELOAD,
  72.     DRAW,
  73.     BDRAW
  74. }
  75.  
  76. #define write_coord_f(%1)   engfunc(EngFunc_WriteCoord,%1)
  77.  
  78. new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
  79.  
  80. new g_had_thanatos7[33], g_thanatos7_ammo[33], g_mode[33], g_reload[33], g_iItemID, bool:g_bCanDamage
  81. new Float:cl_pushangle[33][3], g_clip_ammo[33], g_old_weapon[33]
  82. new g_IsInPrimaryAttack, g_orig_event_thanatos7, g_thanatos7_TmpClip[33], Ent, gmsgWeaponList, g_MaxPlayers ,g_Msg_StatusIcon
  83. new cvar_dmg_scythe, cvar_clip_thanatos7, cvar_thanatos7_ammo, cvar_recoil_thanatos7, cvar_dmg_thanatos7
  84. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  85.             "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  86.             "weapon_mp5navy", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  87.             "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  88.             "weapon_ak47", "weapon_knife", "weapon_p90" }
  89.            
  90. enum
  91. {
  92.     MODE_NOLMAL = 1,
  93.     MODE_CHANGING_1,
  94.     MODE_CHANGING_2,
  95.     MODE_BOLT
  96. }
  97.  
  98. public plugin_init()
  99. {
  100.     register_plugin(PLUGIN, VERSION, AUTHOR)
  101.     register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
  102.     register_forward(FM_CmdStart, "fw_CmdStart")
  103.     register_forward(FM_SetModel, "fw_SetModel")
  104.     register_touch("scythe", "*", "fw_Touch")
  105.     register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  106.     register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
  107.     g_iItemID = ze_register_item("Thanatos 7", 65, 0)
  108.    
  109.     RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
  110.     RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
  111.     RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
  112.     RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
  113.    
  114.     RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
  115.     RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack")
  116.     RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
  117.     RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
  118.     RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
  119.     RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
  120.     RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
  121.     RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)
  122.    
  123.     for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  124.         if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
  125.    
  126.     RegisterHam(Ham_Item_AddToPlayer, "weapon_m249", "fw_AddToPlayer_Post", 1)
  127.     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "fw_PrimaryAttack")
  128.     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "fw_PrimaryAttack_Post", 1)
  129.     RegisterHam(Ham_Item_PostFrame, "weapon_m249", "fw_ItemPostFrame")
  130.     RegisterHam(Ham_Weapon_Reload, "weapon_m249", "fw_Reload")
  131.     RegisterHam(Ham_Weapon_Reload, "weapon_m249", "fw_Reload_Post", 1)
  132.     RegisterHam(Ham_Weapon_WeaponIdle, "weapon_m249", "fw_Idleanim", 1)
  133.     RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
  134.    
  135.     cvar_recoil_thanatos7 = register_cvar("cso_thanatos7_recoil", "0.45")
  136.     cvar_dmg_thanatos7 = register_cvar("cso_dmg_thanatos7", "60.0")
  137.     cvar_dmg_scythe = register_cvar("cso_dmg_scythe", "100.0")
  138.     cvar_clip_thanatos7 = register_cvar("cso_thanatos7_clip", "120")
  139.     cvar_thanatos7_ammo = register_cvar("cso_thanatos7_ammo", "240")
  140.    
  141.     gmsgWeaponList = get_user_msgid("WeaponList")
  142.     g_Msg_StatusIcon = get_user_msgid("StatusIcon")
  143.     g_MaxPlayers = get_maxplayers()
  144.    
  145.     register_clcmd("weapon_thanatos7", "hook_weapon")
  146. }
  147.  
  148. public plugin_precache()
  149. {
  150.     precache_model(v_model)
  151.     precache_model(p_model)
  152.     precache_model(w_model)
  153.     precache_model(SCYTHE_MODEL)
  154.    
  155.     for(new i = 0; i < sizeof(sound); i++)
  156.         precache_sound(sound[i])
  157.        
  158.     for(new i = 1; i < sizeof(sprite); i++)
  159.         precache_model(sprite[i])
  160.        
  161.     register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
  162. }
  163.  
  164. public ze_user_infected(id)
  165. {
  166.     remove_thanatos7(id)
  167. }
  168.  
  169. public fw_PlayerKilled(id)
  170. {
  171.     remove_thanatos7(id)
  172. }
  173.  
  174. public ze_zombie_appear()
  175. {
  176.     g_bCanDamage = false
  177. }
  178.  
  179. public ze_zombie_release()
  180. {
  181.     g_bCanDamage = true
  182. }
  183.  
  184. public hook_weapon(id)
  185. {
  186.     engclient_cmd(id, "weapon_m249")
  187.     return
  188. }
  189.  
  190. public fw_PrecacheEvent_Post(type, const name[])
  191. {
  192.     if(equal("events/m249.sc", name))
  193.         g_orig_event_thanatos7 = get_orig_retval()
  194. }
  195.  
  196. public ze_select_item_pre(id, itemid)
  197. {
  198.     // This not our item?
  199.     if (itemid != g_iItemID)
  200.         return ZE_ITEM_AVAILABLE
  201.    
  202.     // Available for Humans only, So don't show it for zombies
  203.     if (ze_is_user_zombie(id))
  204.         return ZE_ITEM_DONT_SHOW
  205.    
  206.     // Finally return that it's available
  207.     return ZE_ITEM_AVAILABLE
  208. }
  209.  
  210. public ze_select_item_post(id, itemid)
  211. {
  212.     // This is not our item, Block it here and don't execute the blew code
  213.     if (itemid != g_iItemID)
  214.         return
  215.    
  216.     get_thanatos(id)
  217. }
  218.  
  219. public get_thanatos(id)
  220. {
  221.     if(!is_user_alive(id))
  222.         return
  223.        
  224.     new iWep2 = give_item(id,"weapon_m249")
  225.     if( iWep2 > 0 )
  226.     {
  227.         cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_thanatos7))
  228.         cs_set_user_bpammo (id, CSW_M249, get_pcvar_num(cvar_thanatos7_ammo))
  229.         set_weapons_timeidle(id, CSW_M249, 2.0)
  230.         set_player_nextattackx(id, 2.0)
  231.         set_weapon_anim(id, DRAW)
  232.     }
  233.     g_had_thanatos7[id] = 1
  234.     g_mode[id] = MODE_NOLMAL
  235.     g_thanatos7_ammo[id] = 0
  236.     g_reload[id] = 1
  237.     update_specialammo(id, g_thanatos7_ammo[id], g_thanatos7_ammo[id] > 0 ? 1 : 0)
  238.    
  239.     message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  240.     write_string("weapon_thanatos7")
  241.     write_byte(3)
  242.     write_byte(200)
  243.     write_byte(-1)
  244.     write_byte(-1)
  245.     write_byte(0)
  246.     write_byte(4)
  247.     write_byte(CSW_M249)
  248.     write_byte(0)
  249.     message_end()
  250. }
  251.  
  252. public remove_thanatos7(id)
  253. {
  254.     update_specialammo(id, g_thanatos7_ammo[id], 0)
  255.        
  256.     g_had_thanatos7[id] = 0
  257.     g_thanatos7_ammo[id] = 0
  258.     g_reload[id] = 1
  259. }
  260.  
  261. public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
  262. {
  263.     if(!is_user_alive(iAttacker))
  264.         return
  265.  
  266.     new g_currentweapon = get_user_weapon(iAttacker)
  267.  
  268.     if(g_currentweapon != CSW_M249 || !g_had_thanatos7[iAttacker])
  269.         return
  270.        
  271.     SetHamParamFloat(3, get_pcvar_float(cvar_dmg_thanatos7))
  272.    
  273.     static Float:flEnd[3], Float:myOrigin[3]
  274.    
  275.     pev(iAttacker, pev_origin, myOrigin)
  276.     get_tr2(ptr, TR_vecEndPos, flEnd)
  277.        
  278.     if(!is_user_alive(iEnt))
  279.     {
  280.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  281.         write_byte(TE_DECAL)
  282.         write_coord_f(flEnd[0])
  283.         write_coord_f(flEnd[1])
  284.         write_coord_f(flEnd[2])
  285.         write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  286.         write_short(iEnt)
  287.         message_end()
  288.  
  289.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  290.         write_byte(TE_WORLDDECAL)
  291.         write_coord_f(flEnd[0])
  292.         write_coord_f(flEnd[1])
  293.         write_coord_f(flEnd[2])
  294.         write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  295.         message_end()
  296.        
  297.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  298.         write_byte(TE_GUNSHOTDECAL)
  299.         write_coord_f(flEnd[0])
  300.         write_coord_f(flEnd[1])
  301.         write_coord_f(flEnd[2])
  302.         write_short(iAttacker)
  303.         write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  304.         message_end()
  305.     }
  306. }
  307.  
  308. public fw_UpdateClientData_Post(id, sendweapons, CD_Handle)
  309. {
  310.     if(!is_user_alive(id) || (get_user_weapon(id) != CSW_M249 || !g_had_thanatos7[id]))
  311.         return FMRES_IGNORED
  312.    
  313.     set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
  314.    
  315.     return FMRES_HANDLED
  316. }
  317.  
  318. public fw_SetModel(entity, model[])
  319. {
  320.     if(!is_valid_ent(entity))
  321.         return FMRES_IGNORED
  322.    
  323.     static szClassName[33]
  324.     entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  325.        
  326.     if(!equal(szClassName, "weaponbox"))
  327.         return FMRES_IGNORED
  328.    
  329.     static iOwner
  330.    
  331.     iOwner = entity_get_edict(entity, EV_ENT_owner)
  332.    
  333.     if(equal(model, "models/w_m249.mdl"))
  334.     {
  335.         static iStoredAugID
  336.    
  337.         iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_m249", entity)
  338.  
  339.         if(!is_valid_ent(iStoredAugID))
  340.             return FMRES_IGNORED
  341.    
  342.         if(g_had_thanatos7[iOwner])
  343.         {
  344.             g_had_thanatos7[iOwner] = 0
  345.            
  346.             entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, WEAPONKEY)
  347.             set_pev(iStoredAugID, pev_iuser4, g_thanatos7_ammo[iOwner])
  348.             entity_set_model(entity, w_model)
  349.            
  350.             return FMRES_SUPERCEDE
  351.         }
  352.     }
  353.     return FMRES_IGNORED
  354. }
  355.  
  356. public fw_UseStationary_Post(entity, caller, activator, use_type)
  357. {
  358.     if (use_type == USE_STOPPED && is_user_connected(caller))
  359.         replace_weapon_models(caller, get_user_weapon(caller))
  360. }
  361.  
  362. public fw_Item_Deploy_Post(weapon_ent)
  363. {
  364.     static owner
  365.     owner = fm_cs_get_weapon_ent_owner(weapon_ent)
  366.    
  367.     static weaponid
  368.     weaponid = cs_get_weapon_id(weapon_ent)
  369.    
  370.     replace_weapon_models(owner, weaponid)
  371. }
  372.  
  373. public Event_CurWeapon(id)
  374. {
  375.     if(!is_user_alive(id))
  376.         return
  377.        
  378.     if(get_user_weapon(id) != CSW_M249 && g_old_weapon[id] == CSW_M249)
  379.     {
  380.         update_specialammo(id, g_thanatos7_ammo[id], 0)
  381.     }
  382.     g_old_weapon[id] = get_user_weapon(id)
  383.        
  384.     replace_weapon_models(id, read_data(2))
  385. }
  386.  
  387. replace_weapon_models(id, weaponid)
  388. {
  389.     switch (weaponid)
  390.     {
  391.         case CSW_M249:
  392.         {
  393.             if(g_had_thanatos7[id])
  394.             {
  395.                 set_pev(id, pev_viewmodel2, v_model)
  396.                 set_pev(id, pev_weaponmodel2, p_model)
  397.                 update_specialammo(id, g_thanatos7_ammo[id], g_thanatos7_ammo[id] > 0 ? 1 : 0)
  398.                 g_reload[id] = 1
  399.                 if(g_mode[id] == MODE_NOLMAL)
  400.                 {
  401.                     if(g_old_weapon[id] != CSW_M249)
  402.                     {
  403.                         set_weapon_anim(id, DRAW)
  404.                         set_weapons_timeidle(id, CSW_M249, 2.0)
  405.                         set_player_nextattackx(id, 2.0)
  406.  
  407.                         remove_task(id)
  408.                         message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  409.                         write_string("weapon_thanatos7")
  410.                         write_byte(3)
  411.                         write_byte(200)
  412.                         write_byte(-1)
  413.                         write_byte(-1)
  414.                         write_byte(0)
  415.                         write_byte(4)
  416.                         write_byte(CSW_M249)
  417.                         write_byte(0)
  418.                         message_end()
  419.                     }
  420.                 }
  421.                 else if(g_mode[id] == MODE_BOLT && g_thanatos7_ammo[id] == 1)
  422.                 {
  423.                     if(g_old_weapon[id] != CSW_M249)
  424.                     {
  425.                         set_weapon_anim(id, BDRAW)
  426.                         set_weapons_timeidle(id, CSW_M249, 2.0)
  427.                         set_player_nextattackx(id, 2.0)
  428.                        
  429.                         remove_task(id)
  430.                         message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  431.                         write_string("weapon_thanatos7")
  432.                         write_byte(3)
  433.                         write_byte(200)
  434.                         write_byte(-1)
  435.                         write_byte(-1)
  436.                         write_byte(0)
  437.                         write_byte(4)
  438.                         write_byte(CSW_M249)
  439.                         write_byte(0)
  440.                         message_end()
  441.                     }
  442.                 }
  443.             }
  444.         }
  445.     }
  446.     g_old_weapon[id] = get_user_weapon(id)
  447. }
  448.  
  449. public fw_AddToPlayer_Post(weapon, id)
  450. {
  451.     if(!is_valid_ent(weapon) || !is_user_connected(id))
  452.         return HAM_IGNORED
  453.    
  454.     if(entity_get_int(weapon, EV_INT_WEAPONKEY) == WEAPONKEY)
  455.     {
  456.         g_had_thanatos7[id] = 1
  457.         g_thanatos7_ammo[id] = pev(weapon, pev_iuser4)
  458.        
  459.         message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  460.         write_string("weapon_thanatos7")
  461.         write_byte(3)
  462.         write_byte(200)
  463.         write_byte(-1)
  464.         write_byte(-1)
  465.         write_byte(0)
  466.         write_byte(4)
  467.         write_byte(CSW_M249)
  468.         write_byte(0)
  469.         message_end()
  470.     }
  471.     else
  472.     {
  473.         message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  474.         write_string("weapon_m249")
  475.         write_byte(3)
  476.         write_byte(200)
  477.         write_byte(-1)
  478.         write_byte(-1)
  479.         write_byte(0)
  480.         write_byte(4)
  481.         write_byte(CSW_M249)
  482.         write_byte(0)
  483.         message_end()
  484.     }
  485.     return HAM_IGNORED
  486. }
  487.  
  488. public fw_PrimaryAttack(Weapon)
  489. {
  490.     new Player = get_pdata_cbase(Weapon, 41, 4)
  491.    
  492.     if (!g_had_thanatos7[Player])
  493.         return
  494.    
  495.     g_IsInPrimaryAttack = 1
  496.     pev(Player,pev_punchangle,cl_pushangle[Player])
  497.    
  498.     g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
  499. }
  500.  
  501. public fw_PrimaryAttack_Post(Weapon)
  502. {
  503.     g_IsInPrimaryAttack = 0
  504.     new Player = get_pdata_cbase(Weapon, 41, 4)
  505.    
  506.     new szClip, szAmmo
  507.     get_user_weapon(Player, szClip, szAmmo)
  508.        
  509.     if(g_had_thanatos7[Player])
  510.     {
  511.         if(szClip <= 0) emit_sound(Player, CHAN_WEAPON, sound[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  512.     }
  513.    
  514.     if(g_had_thanatos7[Player] && g_bCanDamage)
  515.     {
  516.         if (!g_clip_ammo[Player])
  517.             return
  518.            
  519.         new Float:push[3]
  520.         pev(Player,pev_punchangle,push)
  521.         xs_vec_sub(push,cl_pushangle[Player],push)
  522.        
  523.         xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_thanatos7),push)
  524.         xs_vec_add(push,cl_pushangle[Player],push)
  525.         set_pev(Player,pev_punchangle,push)
  526.         emit_sound(Player, CHAN_WEAPON, sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
  527.         if(g_mode[Player] == MODE_NOLMAL)
  528.         {  
  529.             set_weapon_anim(Player, SHOOT1)
  530.         }
  531.         else if(g_mode[Player] == MODE_BOLT)
  532.         {
  533.             set_weapon_anim(Player, BSHOOT1)
  534.         }
  535.        
  536.     }
  537. }
  538.  
  539. public fw_CmdStart(id, uc_handle, seed)
  540. {
  541.     if(!is_user_alive(id) || !is_user_connected(id))
  542.         return
  543.     if(get_user_weapon(id) != CSW_M249 || !g_had_thanatos7[id])
  544.         return
  545.    
  546.     static ent; ent = fm_get_user_weapon_entity(id, CSW_M249)
  547.     if(!pev_valid(ent))
  548.         return
  549.        
  550.     new szClip, szAmmo
  551.     get_user_weapon(id, szClip, szAmmo)
  552.    
  553.     static CurButton
  554.     CurButton = get_uc(uc_handle, UC_Buttons)
  555.    
  556.     if(CurButton & IN_ATTACK2 && szClip >= 1)
  557.     {
  558.         CurButton &= ~IN_ATTACK2
  559.         set_uc(uc_handle, UC_Buttons, CurButton)
  560.        
  561.         if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0)
  562.             return
  563.            
  564.         if(g_mode[id] == MODE_NOLMAL)
  565.         {
  566.             set_weapons_timeidle(id, CSW_M249, 4.0)
  567.             set_player_nextattackx(id, 4.0)
  568.             set_weapon_anim(id, SCYTHERELOAD)
  569.             g_reload[id] = 0
  570.             emit_sound(id, CHAN_WEAPON, sound[8], 1.0, ATTN_NORM, 0, PITCH_NORM)
  571.             set_task(0.1, "change_mode", id)
  572.             g_mode[id] = MODE_CHANGING_1
  573.        
  574.         }
  575.         else if(g_mode[id] == MODE_BOLT)
  576.         {
  577.             if(g_thanatos7_ammo[id] == 0)
  578.                 return
  579.                
  580.             set_weapons_timeidle(id, CSW_M249, 4.0)
  581.             set_player_nextattackx(id, 4.0)
  582.             Scythe_Shoot(id)
  583.             static Float:PunchAngles[3]
  584.             PunchAngles[0] = -10.0
  585.             update_specialammo(id, g_thanatos7_ammo[id], 0)
  586.             g_thanatos7_ammo[id]--
  587.             update_specialammo(id, g_thanatos7_ammo[id], g_thanatos7_ammo[id] > 0 ? 1 : 0)
  588.             g_reload[id] = 0
  589.             set_weapon_anim(id, SCYTHESHOOT)
  590.             emit_sound(id, CHAN_WEAPON, sound[9], 1.0, ATTN_NORM, 0, PITCH_NORM)
  591.             set_task(0.1, "change_mode", id)
  592.             g_mode[id] = MODE_CHANGING_2
  593.         }
  594.     }
  595. }
  596.  
  597. public change_mode(id)
  598. {
  599.     if(g_mode[id] == MODE_CHANGING_1)
  600.     {
  601.         g_mode[id] = MODE_NOLMAL
  602.         set_task(3.5, "fil_scythe", id)
  603.     }
  604.     else if(g_mode[id] == MODE_CHANGING_2)
  605.     {
  606.         g_reload[id] = 1
  607.         g_mode[id] = MODE_NOLMAL
  608.     }
  609. }
  610.  
  611. public fil_scythe(id)
  612. {
  613.     set_weapons_timeidle(id, CSW_M249, 0.5)
  614.     set_player_nextattackx(id, 0.5)
  615.     g_mode[id] = MODE_BOLT
  616.     update_specialammo(id, g_thanatos7_ammo[id], 0)
  617.     g_thanatos7_ammo[id]++
  618.     update_specialammo(id, g_thanatos7_ammo[id], 1)
  619.     reload_on(id)
  620. }
  621.  
  622. public reload_on(id)
  623. {
  624.     g_reload[id] = 1
  625. }
  626.  
  627. public Scythe_Shoot(id)
  628. {
  629.     static Float:StartOrigin[3], Float:TargetOrigin[3], Float:angles[3], Float:angles_fix[3]
  630.     get_position(id, 2.0, 4.0, -1.0, StartOrigin)
  631.  
  632.     pev(id,pev_v_angle,angles)
  633.     Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
  634.     if(!pev_valid(Ent)) return
  635.     angles_fix[0] = 360.0 - angles[0]
  636.     angles_fix[1] = angles[1]
  637.     angles_fix[2] = angles[2]
  638.     set_pev(Ent, pev_movetype, MOVETYPE_FLY)
  639.     set_pev(Ent, pev_owner, id)
  640.    
  641.     entity_set_string(Ent, EV_SZ_classname, "scythe")
  642.     engfunc(EngFunc_SetModel, Ent, SCYTHE_MODEL)
  643.     set_pev(Ent, pev_mins,{ -0.1, -0.1, -0.1 })
  644.     set_pev(Ent, pev_maxs,{ 0.1, 0.1, 0.1 })
  645.     set_pev(Ent, pev_origin, StartOrigin)
  646.     set_pev(Ent, pev_angles, angles_fix)
  647.     set_pev(Ent, pev_solid, SOLID_BBOX)
  648.     set_pev(Ent, pev_frame, 0.0)
  649.     set_entity_anim(Ent, 1)
  650.     entity_set_float(Ent, EV_FL_nextthink, halflife_time() + 0.01)
  651.    
  652.     static Float:Velocity[3]
  653.     fm_get_aim_origin(id, TargetOrigin)
  654.     get_speed_vector(StartOrigin, TargetOrigin, 750.0, Velocity)
  655.     set_pev(Ent, pev_velocity, Velocity)
  656. }
  657.  
  658. public fw_Touch(Ent, Id)
  659. {
  660.     // If ent is valid
  661.     if(!pev_valid(Ent))
  662.         return
  663.     if(pev(Ent, pev_movetype) == MOVETYPE_NONE)
  664.         return
  665.        
  666.     set_pev(Ent, pev_movetype, MOVETYPE_NONE)
  667.     set_pev(Ent, pev_solid, SOLID_NOT)
  668.     set_entity_anim(Ent, 1)
  669.     entity_set_float(Ent, EV_FL_nextthink, halflife_time() + 0.01)
  670.    
  671.     set_task(0.1, "action_scythe", Ent)
  672.     set_task(9.0, "remove", Ent)
  673. }
  674.  
  675. public remove(Ent)
  676. {
  677.     if(!pev_valid(Ent))
  678.         return
  679.        
  680.     remove_entity(Ent)
  681. }
  682.  
  683. public action_scythe(Ent)
  684. {
  685.     if(!pev_valid(Ent))
  686.         return
  687.        
  688.     Damage_scythe(Ent)
  689. }
  690.  
  691. public Damage_scythe(Ent)
  692. {
  693.     if(!pev_valid(Ent))
  694.         return
  695.    
  696.     static id; id = pev(Ent, pev_owner)
  697.     new Float:origin[3]
  698.     pev(Ent, pev_origin, origin)
  699.    
  700.     // Alive...
  701.     new a = FM_NULLENT
  702.     // Get distance between victim and epicenter
  703.     while((a = find_ent_in_sphere(a, origin, 80.0)) != 0)
  704.     {
  705.         if (id == a)
  706.             continue
  707.    
  708.         if(pev(a, pev_takedamage) != DAMAGE_NO && g_bCanDamage)
  709.         {
  710.             ExecuteHamB(Ham_TakeDamage, a, id, id, get_pcvar_float(cvar_dmg_scythe), DMG_BULLET)
  711.         }
  712.     }
  713.     set_task(0.1, "action_scythe", Ent)
  714. }
  715.    
  716. public fw_Idleanim(Weapon)
  717. {
  718.     new id = get_pdata_cbase(Weapon, 41, 4)
  719.     g_reload[id] = 1
  720.  
  721.     if(!is_user_alive(id) || !g_had_thanatos7[id] || get_user_weapon(id) != CSW_M249)
  722.         return HAM_IGNORED;
  723.    
  724.     if(g_mode[id] == MODE_NOLMAL && g_thanatos7_ammo[id] == 0 && get_pdata_float(Weapon, 48, 4) <= 0.25)
  725.     {
  726.         set_weapon_anim(id, IDLE)
  727.         set_pdata_float(Weapon, 48, 20.0, 4)
  728.         return HAM_SUPERCEDE;
  729.     }
  730.    
  731.     if(g_mode[id] == MODE_BOLT && g_thanatos7_ammo[id] == 1 && get_pdata_float(Weapon, 48, 4) <= 0.25)
  732.     {
  733.         set_weapon_anim(id, random_num(BIDLE, BIDLE2))
  734.         set_pdata_float(Weapon, 48, 20.0, 4)
  735.         return HAM_SUPERCEDE;
  736.     }
  737.  
  738.     return HAM_IGNORED;
  739. }
  740.  
  741. public update_ammo(id)
  742. {
  743.     if(!is_user_alive(id))
  744.         return
  745.    
  746.     static weapon_ent; weapon_ent = fm_find_ent_by_owner(-1, "weapon_m249", id)
  747.     if(pev_valid(weapon_ent)) cs_set_weapon_ammo(weapon_ent, 1)
  748.    
  749.     cs_set_user_bpammo(id, CSW_M249, 0)
  750.    
  751.     engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id)
  752.     write_byte(1)
  753.     write_byte(CSW_M249)
  754.     write_byte(-1)
  755.     message_end()
  756.    
  757.     message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("AmmoX"), _, id)
  758.     write_byte(3)
  759.     write_byte(g_thanatos7_ammo[id])
  760.     message_end()
  761. }
  762.  
  763. public update_specialammo(id, Ammo, On)
  764. {
  765.     static AmmoSprites[33]
  766.     format(AmmoSprites, sizeof(AmmoSprites), "number_%d", Ammo)
  767.    
  768.     message_begin(MSG_ONE_UNRELIABLE, g_Msg_StatusIcon, {0,0,0}, id)
  769.     write_byte(On)
  770.     write_string(AmmoSprites)
  771.     write_byte(42) // red
  772.     write_byte(212) // green
  773.     write_byte(255) // blue
  774.     message_end()
  775. }
  776.  
  777. public fw_ItemPostFrame( wpn )
  778. {
  779.     new id = pev(wpn, pev_owner)
  780.     if(!is_user_connected(id))
  781.         return HAM_IGNORED
  782.    
  783.     if(!g_had_thanatos7[id])
  784.         return HAM_IGNORED
  785.        
  786.     if(g_reload[id] == 0)
  787.         return HAM_IGNORED
  788.                
  789.     new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
  790.     new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
  791.     new iClip = get_pdata_int(wpn, m_iClip, WEAP_LINUX_XTRA_OFF)
  792.     new fInReload = get_pdata_int(wpn, m_fInReload, WEAP_LINUX_XTRA_OFF)
  793.    
  794.     if(fInReload && flNextAttack <= 0.0)
  795.     {
  796.         new j = min(get_pcvar_num(cvar_clip_thanatos7) - iClip, iBpAmmo)
  797.         set_pdata_int(wpn, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
  798.         cs_set_user_bpammo(id, CSW_M249, iBpAmmo-j)
  799.         set_pdata_int(wpn, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
  800.         fInReload = 0
  801.     }
  802.     return HAM_IGNORED
  803. }
  804.  
  805. public fw_Reload( wpn ) {
  806.     new id = pev(wpn, pev_owner)
  807.     if(!is_user_connected(id))
  808.         return HAM_IGNORED
  809.    
  810.     if(!g_had_thanatos7[id])
  811.         return HAM_IGNORED
  812.        
  813.     if(g_reload[id] == 0)
  814.         return HAM_IGNORED
  815.                
  816.     g_thanatos7_TmpClip[id] = -1
  817.     new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
  818.     new iClip = get_pdata_int(wpn, m_iClip, WEAP_LINUX_XTRA_OFF)
  819.     if(iBpAmmo <= 0)
  820.         return HAM_SUPERCEDE
  821.    
  822.     if(iClip >= get_pcvar_num(cvar_clip_thanatos7))
  823.         return HAM_SUPERCEDE
  824.    
  825.     g_thanatos7_TmpClip[id] = iClip
  826.     return HAM_IGNORED
  827. }
  828.  
  829. public fw_Reload_Post(weapon) {
  830.     new id = pev(weapon, pev_owner)
  831.     if(!is_user_connected(id))
  832.         return HAM_IGNORED
  833.        
  834.     if(!g_had_thanatos7[id])
  835.         return HAM_IGNORED
  836.        
  837.     if(g_thanatos7_TmpClip[id] == -1)
  838.         return HAM_IGNORED
  839.        
  840.     if(g_reload[id] == 0)
  841.         return HAM_IGNORED
  842.        
  843.     set_pdata_int(weapon, m_iClip, g_thanatos7_TmpClip[id], WEAP_LINUX_XTRA_OFF)
  844.     set_pdata_float(weapon, m_flTimeWeaponIdle, RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
  845.     set_pdata_float(id, m_flNextAttack, RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
  846.     set_pdata_int(weapon, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
  847.    
  848.     if(g_mode[id] == MODE_NOLMAL && g_thanatos7_ammo[id] == 0)
  849.     {
  850.         set_weapon_anim(id, RELOAD)
  851.         set_pdata_float(weapon, 48, 20.0, 4)
  852.     }
  853.     else if(g_mode[id] == MODE_BOLT && g_thanatos7_ammo[id] == 1)
  854.     {
  855.         set_weapon_anim(id, BRELOAD)
  856.         set_pdata_float(weapon, 48, 20.0, 4)
  857.     }
  858.     return HAM_IGNORED
  859. }
  860.  
  861. public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  862. {
  863.     if ((eventid != g_orig_event_thanatos7) || !g_IsInPrimaryAttack)
  864.         return FMRES_IGNORED
  865.     if (!(1 <= invoker <= g_MaxPlayers))
  866.         return FMRES_IGNORED
  867.  
  868.     playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  869.    
  870.     return FMRES_SUPERCEDE
  871. }
  872.  
  873. stock set_weapon_anim(id, anim)
  874. {
  875.     if(!is_user_alive(id))
  876.         return
  877.    
  878.     set_pev(id, pev_weaponanim, anim)
  879.    
  880.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
  881.     write_byte(anim)
  882.     write_byte(pev(id, pev_body))
  883.     message_end()
  884. }
  885.  
  886. stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
  887. {
  888.     new_velocity[0] = origin2[0] - origin1[0]
  889.     new_velocity[1] = origin2[1] - origin1[1]
  890.     new_velocity[2] = origin2[2] - origin1[2]
  891.     static Float:num; num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
  892.     new_velocity[0] *= num
  893.     new_velocity[1] *= num
  894.     new_velocity[2] *= num
  895.    
  896.     return 1;
  897. }
  898.  
  899. stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
  900. {
  901.     static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
  902.    
  903.     pev(id, pev_origin, vOrigin)
  904.     pev(id, pev_view_ofs, vUp) //for player
  905.     xs_vec_add(vOrigin, vUp, vOrigin)
  906.     pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
  907.    
  908.     angle_vector(vAngle, ANGLEVECTOR_FORWARD, vForward) //or use EngFunc_AngleVectors
  909.     angle_vector(vAngle, ANGLEVECTOR_RIGHT, vRight)
  910.     angle_vector(vAngle, ANGLEVECTOR_UP, vUp)
  911.    
  912.     vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
  913.     vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
  914.     vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
  915. }
  916.  
  917. stock set_weapons_timeidle(id, WeaponId ,Float:TimeIdle)
  918. {
  919.     if(!is_user_alive(id))
  920.         return
  921.        
  922.     static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
  923.     if(!pev_valid(entwpn))
  924.         return
  925.        
  926.     set_pdata_float(entwpn, 46, TimeIdle, OFFSET_LINUX_WEAPONS)
  927.     set_pdata_float(entwpn, 47, TimeIdle, OFFSET_LINUX_WEAPONS)
  928.     set_pdata_float(entwpn, 48, TimeIdle + 0.5, OFFSET_LINUX_WEAPONS)
  929. }
  930.  
  931. stock set_player_nextattackx(id, Float:nexttime)
  932. {
  933.     if(!is_user_alive(id))
  934.         return
  935.        
  936.     set_pdata_float(id, m_flNextAttack, nexttime, 5)
  937. }
  938.  
  939. stock fm_cs_get_weapon_ent_owner(ent)
  940. {
  941.     return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
  942. }
  943.  
  944. stock set_entity_anim(ent, anim)
  945. {
  946.     entity_set_float(ent, EV_FL_animtime, get_gametime())
  947.     entity_set_float(ent, EV_FL_framerate, 1.0)
  948.     entity_set_int(ent, EV_INT_sequence, anim) 
  949. }
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#3

Post by czirimbolo » 5 years ago

Thanks, solved
Image

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 2 guests