Raised This Month: $32 Target: $400
 8% 

Plugin crashes on server, but works on local


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
SaBBa
Member
Join Date: Dec 2012
Old 01-13-2019 , 05:47   Plugin crashes on server, but works on local
Reply With Quote #1

Hello, I have modified Zombie plugin [CSO] Dual Sword Phantom Slayer, for normal, but it only works on local enviroment (windows).

Code:
./hlds_run: line 255: 13827 Segmentation fault $HL_CMD
I am getting this on linux server.

Original plugin

Code:
/* Plugin generated by AMXX-Studio */
#pragma compress 1

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>
#include <zombieplague>

#define PLUGIN "CSO Dual Sword Phantom Slayer"
#define VERSION "1.0"
#define AUTHOR "Natasha aka Asdian"

#define CSW_DPS CSW_KNIFE
#define weapon_dps "weapon_knife"

#define v_model "models/v_dualsword.mdl"
#define p_model "models/p_dualsword_a.mdl"
#define p_model2 "models/p_dualsword_b.mdl"
#define spr_wpn	"knife_dualsword"

new const weapon_sound[][] =
{
	"weapons/dualsword_stab1.wav",				// 0
	"weapons/dualsword_stab2.wav",				// 1
	"weapons/dualsword_stab1_hit.wav",			// 2
	"weapons/dualsword_stab2_hit.wav",			// 3
	"weapons/katanad_hitwall.wav",				// 4
	
	"weapons/dualsword_slash_1.wav",			// 5
	"weapons/dualsword_slash_2.wav",			// 6
	"weapons/dualsword_slash_3.wav",			// 7
	"weapons/dualsword_slash_4.wav",			// 8
	"weapons/dualsword_hit1.wav",				// 9
	"weapons/dualsword_hit2.wav",				// 10
	"weapons/dualsword_hit3.wav",				// 11
	"weapons/dualsword_slash_4_1.wav",			// 12
	"weapons/dualsword_slash_4_2.wav",			// 13
	"weapons/dualsword_skill_end.wav",			// 14
	
	"weapons/dualsword_fly1.wav",				// 15
	"weapons/dualsword_fly2.wav",				// 16
	"weapons/dualsword_fly3.wav",				// 17
	"weapons/dualsword_fly4.wav",				// 18
	"weapons/dualsword_fly5.wav",				// 19
	"weapons/dualsword_skill_start.wav"
}

//Hit
#define	RESULT_HIT_NONE 			0
#define	RESULT_HIT_PLAYER			1
#define	RESULT_HIT_WORLD			2

enum _:WpnAnim
{
	ANIM_IDLEA = 0,
	ANIM_SLASH1,
	ANIM_SLASH2,
	ANIM_SLASH3,
	ANIM_SLASH4,
	ANIM_SLASHEND,
	ANIM_DRAWA,
	ANIM_IDLEB,
	ANIM_STAB1,
	ANIM_STAB2,
	ANIM_STABEND,
	ANIM_DRAWB
}

new g_had_dps[33], g_mode[33], g_slashend[33], g_check[33], g_dps, g_soundmode[33]
new ef_sakura[4]
new Float:g_Sound[33]

new cvar_damage_slash[4], cvar_slash_radius, cvar_slash_range
new cvar_damage_stab[2], cvar_stab_radius, cvar_stab_range
new cvar_damage_special, cvar_special_range
new cvar_knockback[3], cvar_fast_attack, cvar_remove, cvar_spr

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
	register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
	register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
	register_forward(FM_AddToFullPack, "Fw_AddToFullPack_Post", 1);

	register_think("dps_entytyd", "Fw_DPSEnt_Think")
	
	RegisterHam(Ham_Item_PostFrame, weapon_dps, "fw_Item_PostFrame")
	
	g_dps = zp_register_extra_item("Dual Sword Phantom Slayer", 0, ZP_TEAM_HUMAN)
	register_clcmd(spr_wpn, "hook_rb")
	
	cvar_damage_slash[0] = register_cvar("dps_slashdamage_4","486.0")
	cvar_damage_slash[1] = register_cvar("dps_slashdamage_1","120.0")
	cvar_damage_slash[2] = register_cvar("dps_slashdamage_2","140.0")
	cvar_damage_slash[3] = register_cvar("dps_slashdamage_3","360.0")
	cvar_slash_radius = register_cvar("dps_slashradius","120.0")
	cvar_slash_range = register_cvar("dps_slashrange","95.0")
	
	cvar_damage_stab[0] = register_cvar("dps_stabdamage_2","1200.0")
	cvar_damage_stab[1] = register_cvar("dps_stabdamage_1","350.0")
	cvar_stab_radius = register_cvar("dps_stabradius","90.0")
	cvar_stab_range = register_cvar("dps_stabrange","150.0")
	
	cvar_damage_special = register_cvar("dps_specialdamage","95.0")
	cvar_special_range = register_cvar("dps_specialrange","120.0")
	
	cvar_knockback[0] = register_cvar("dps_slashknockback","0.0")
	cvar_knockback[1] = register_cvar("dps_stabknockback","0.0")
	cvar_knockback[2] = register_cvar("dps_specialknockback","0.0")
	
	cvar_fast_attack = register_cvar("dps_fast_attack_enabled", "0")
	cvar_remove = register_cvar("dps_remove_onnewround", "0")
	cvar_spr = register_cvar("dps_enable_sprites", "1")
	
	g_dps = zp_register_extra_item("Dual Sword Phantom Slayer", 10, ZP_TEAM_HUMAN)
}

public plugin_precache()
{
	precache_model(v_model)
	precache_model(p_model)
	precache_model(p_model2)
	
	for(new i = 0; i < sizeof(weapon_sound); i++)
		precache_sound(weapon_sound[i])
	
	precache_model("models/dualswordfx.mdl")
	precache_model("models/dualsword_skill.mdl")
	precache_model("models/dualsword_skillfx1.mdl")
	precache_model("models/dualsword_skillfx2.mdl")
	
	ef_sakura[0] = precache_model("sprites/leaf01_dualsword.spr")
	ef_sakura[1] = precache_model("sprites/leaf02_dualsword.spr")
	ef_sakura[2] = precache_model("sprites/petal01_dualsword.spr")
	ef_sakura[3] = precache_model("sprites/petal02_dualsword.spr")
	
	new Txt[32]
	format(Txt, 31, "sprites/%s.txt", spr_wpn)
	engfunc(EngFunc_PrecacheGeneric, Txt)
}

public zp_extra_item_selected(i, d) if(d == g_dps) get_dps(i)
public zp_user_infected_post(i) remove_dps(i)
public zp_user_humanized_post(i) remove_dps(i)

public hook_rb(id)
{
	engclient_cmd(id, weapon_dps)
	return PLUGIN_HANDLED
}

public get_dps(id)
{
	if (!is_user_alive(id))
		return

	g_had_dps[id] = 1
	g_mode[id] = 0
	g_slashend[id] = 0
	g_check[id] = 0
	g_soundmode[id] = 0
	
	fm_give_item(id, weapon_dps)
	
	if (get_user_weapon(id) == CSW_DPS) Event_CurWeapon(id)
	else engclient_cmd(id,weapon_dps)
}

public client_connect(id) remove_dps(id)
public client_disconnect(id) remove_dps(id)

public Event_NewRound()
{
	if(!get_pcvar_num(cvar_remove))
		return
	
	for(new i = 0; i < get_maxplayers(); i++)
		remove_dps(i)
}

public remove_dps(id)
{
	g_had_dps[id] = 0
	g_slashend[id] = 0
	g_check[id] = 0
	
	static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
	if(!pev_valid(iEnt)) return
	
	set_pev(iEnt, pev_iuser1, 0)
	set_pev(iEnt, pev_iuser2, 0)
	set_pev(iEnt, pev_iuser3, 0)
	set_pev(iEnt, pev_iuser4, 0)
	set_pev(iEnt, pev_fuser1, 0.0)
}

public Event_CurWeapon(id)
{
	if(!is_user_alive(id))
		return 1
	if(get_user_weapon(id) != CSW_DPS)
		return 1
	if(!g_had_dps[id])
		return 1
	if(zp_get_user_zombie(id))
		return 1
		
	set_pev(id, pev_viewmodel2, v_model)
	set_pev(id, pev_weaponmodel2, g_mode[id] ? p_model2:p_model)
	
	Set_WeaponAnim(id, g_mode[id]?ANIM_DRAWA:ANIM_DRAWB)
	
	static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
	if(!pev_valid(iEnt)) return 1
	
	set_pev(iEnt, pev_iuser1, 0)
	set_pev(iEnt, pev_iuser2, 0)
	set_pev(iEnt, pev_iuser3, 0)
	set_pev(iEnt, pev_iuser4, 0)
	set_pev(iEnt, pev_fuser1, 0.0)
		
	g_slashend[id] = 0
	g_check[id] = 0
	
	set_pdata_float(id, 83, 0.23)
	set_pdata_float(iEnt, 46, 0.25);
	set_pdata_float(iEnt, 47, 0.25);
	set_pdata_float(iEnt, 48, 0.25);
	
	if(get_pcvar_num(cvar_spr))
	{
		message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id)
		write_string(g_had_dps[id] == 1 ? spr_wpn : weapon_dps)
		write_byte(-1)
		write_byte(-1)
		write_byte(-1)
		write_byte(-1)
		write_byte(2)
		write_byte(1)
		write_byte(CSW_DPS)
		write_byte(0)
		message_end()
	}
	return 0
}

public message_DeathMsg(msg_id, msg_dest, msg_ent)
{
	new szWeapon[64]
	get_msg_arg_string(4, szWeapon, charsmax(szWeapon))
	
	if (strcmp(szWeapon, "knife"))
		return PLUGIN_CONTINUE

	new iEntity = get_pdata_cbase(get_msg_arg_int(1), 373)
	if (!pev_valid(iEntity) || get_pdata_int(iEntity, 43, 4) != CSW_DPS || !g_had_dps[get_msg_arg_int(1)])
		return PLUGIN_CONTINUE

	set_msg_arg_string(4, "dualsword")
	return PLUGIN_CONTINUE
}

public Fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
{
	if (!pev_valid(iEnt))
		return;
	if (pev(iEnt, pev_flags) & FL_KILLME) 
		return;

	new classname[32];
	pev(iEnt, pev_classname, classname, 31);

	if (equal(classname,"dps_entytyd") && pev(iEnt, pev_iuser4))
	{
		if (iHost != pev(iEnt, pev_owner))
			set_es(esState, ES_Effects, (get_es(esState, ES_Effects) | EF_NODRAW));
	}
}

public Fw_DPSEnt_Think(iEnt)
{
	if(!pev_valid(iEnt)) 
		return
	
	new iOwner
	iOwner = pev(iEnt, pev_owner)
	
	if(!is_user_alive(iOwner) || !is_user_connected(iOwner) || zp_get_user_zombie(iOwner))
	{
		remove_entity(iEnt)
		g_soundmode[iOwner] = 0
		return
	}
	
	if(!Get_Entity_Mode(iEnt))
	{
		new iWpn,iState,Float:vecOrigin[3], Float:vecAngle[3];
		iWpn = pev(iEnt, pev_iuser1)
		iState = pev(iWpn, pev_iuser4)
		Stock_Get_Postion(iOwner, 0.0, 0.0, 0.0, vecOrigin);
		
		pev(iOwner, pev_v_angle, vecAngle);
		vecAngle[0] = -vecAngle[0];
		
		set_pev(iEnt, pev_origin, vecOrigin);
		set_pev(iEnt, pev_angles, vecAngle);
		
		if(!iState || get_user_weapon(iOwner) != CSW_DPS)
		{
			new Float:fRenderAmount;
			pev(iEnt, pev_renderamt, fRenderAmount);

			fRenderAmount -= 4.5;

			if (fRenderAmount <= 5.0)
			{
				remove_entity(iEnt);
				return;
			}
			set_pev(iEnt, pev_renderamt, fRenderAmount);
		}
	}
	
	if(Get_Entity_Mode(iEnt) == 1)
	{
		set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
	
		static Float:Origin[3]; pev(iOwner, pev_origin, Origin)
		Origin[2] -= 25.0
		
		Stock_Hook_Ent(iEnt, Origin, 0.01)
		
		if(pev(iEnt, pev_fuser1) < get_gametime() || !IsAlive(iOwner))
		{
			set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
			return
		}
			
		set_pev(iEnt, pev_velocity, Float:{1.0,1.0,1.0});
		set_pev(iEnt, pev_origin, Origin);
	}
	
	if(Get_Entity_Mode(iEnt) == 2)
	{
		new Float:vecOrigin[3]
		GetGunPosition(iOwner, vecOrigin);
		
		new Float:fOldOrigin[3];
		pev(iEnt, pev_oldorigin, fOldOrigin);
		
		new Float:vecNewOrigin[3];
		pev(iEnt, pev_origin, vecNewOrigin);
		
		new Float:vecfff[3];
		xs_vec_sub(vecOrigin, fOldOrigin, vecfff);
		xs_vec_add(vecNewOrigin, vecfff, vecNewOrigin);
		
		set_pev(iEnt, pev_origin, vecNewOrigin);
		set_pev(iEnt, pev_oldorigin, vecOrigin);
		
		if (pev(iEnt, pev_iuser1) == 2)
		{
			new Float:fDist = get_distance_f(vecOrigin, vecNewOrigin);
			if (fDist > 175.0 * 0.5)
			{
				remove_entity(iEnt);
				return;
			}
		}
		
		if(g_Sound[iOwner] < get_gametime())
		{
			if(!g_soundmode[iOwner]) emit_sound(iOwner, CHAN_ITEM, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
			if(g_soundmode[iOwner] == 1) emit_sound(iOwner, CHAN_BODY, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
			if(g_soundmode[iOwner] == 2) emit_sound(iOwner, CHAN_VOICE, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
			if(g_soundmode[iOwner] == 3) emit_sound(iOwner, CHAN_WEAPON, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
			
			g_soundmode[iOwner]++
			if(g_soundmode[iOwner] > 3) g_soundmode[iOwner] = 0
			
			g_Sound[iOwner] = get_gametime()+0.088;
		}
	}
	set_pev(iEnt, pev_nextthink, get_gametime() + 0.01)
	
	if(Get_Entity_Mode(iEnt) == 2)
	{
		new Float:fTimeLast;
		pev(iEnt, pev_fuser1, fTimeLast);
		
		if (fTimeLast < get_gametime() || pev(pev(iEnt, pev_iuser2), pev_fuser1) < get_gametime())
		{
			if (pev(iEnt, pev_iuser1) == 1)
			{
				new Float:fRenderAmount;
				pev(iEnt, pev_renderamt, fRenderAmount);
				fRenderAmount -= 7.5;
				
				if (fRenderAmount <= 5.0)
				{
					remove_entity(iEnt);
					return;
				}
				set_pev(iEnt, pev_renderamt, fRenderAmount);
			} else remove_entity(iEnt);
			
			g_soundmode[iOwner] = 0
		}
	}
}

public fw_Item_PostFrame(ent)
{
	new id = pev(ent, pev_owner)
	
	if(!is_user_connected(id))
		return HAM_IGNORED
	if(get_user_weapon(id) != CSW_DPS || !g_had_dps[id])
		return HAM_IGNORED

	if(get_pdata_float(ent, 48, 4) <= 0.01 && (!pev(ent, pev_iuser2) || !g_slashend[id]))
	{
		if(g_check[id] < 6) g_check[id] = 0
		set_pev(ent, pev_iuser3, 0)
		Set_WeaponAnim(id, g_mode[id]?ANIM_IDLEA:ANIM_IDLEB)
		set_pdata_float(ent, 48, 4.03, 4)
	}
	
	new iButton = pev(id,pev_button)
	return AurezBotac(id, ent, iButton)
}

public AurezBotac(id, iEnt, iButton)
{
	new iState = pev(iEnt, pev_iuser3)
	new iState2 = pev(iEnt, pev_iuser2)
	new iSlash = pev(iEnt, pev_iuser4)
	new Float:fSound; pev(iEnt, pev_fuser1, fSound)
	new Float:fRange = get_pcvar_float(g_mode[id] ? cvar_slash_range : cvar_stab_range)
	
	if(!(iButton & IN_ATTACK) && get_pdata_float(iEnt, 46,4) <= 0.0 && iState2)
	{
		if(!iState || iState == 1)
		{
			Set_WeaponAnim(id, ANIM_STABEND)
			set_pev(iEnt, pev_iuser2, 0)
			set_pdata_float(iEnt, 48, 1.45,4)
		}
	}
	
	if(!(iButton & IN_ATTACK2) && get_pdata_float(iEnt, 47,4) <= 0.0 && g_slashend[id])
	{
		Set_WeaponAnim(id, ANIM_SLASHEND)
		set_pdata_float(iEnt, 48, 2.03,4)
		g_slashend[id] = 0
	}
	
	if (get_pdata_float(id, 83) <= 0.0 && pev(iEnt, pev_iuser1))
	{
		new Float:fAngle = get_pcvar_float(g_mode[id] ? cvar_slash_radius : cvar_stab_radius)
		new Float:fDamage = get_pcvar_float(g_mode[id] ? cvar_damage_slash[iSlash] : cvar_damage_stab[iState])
		
		new iHitResult = KnifeAttack_Global(id, true, fRange, fAngle, fDamage, get_pcvar_float(cvar_knockback[1+g_mode[id]]))
		switch (iHitResult)
		{
			case RESULT_HIT_PLAYER : client_cmd(id, "spk %s", weapon_sound[g_mode[id]?random_num(9,11):iState+2]) 
			case RESULT_HIT_WORLD : client_cmd(id, "spk %s", weapon_sound[4])
		}
		set_pev(iEnt, pev_iuser1, 0);
	}
	
	if(get_pdata_float(iEnt, 47,4) <= 0.0 && iSlash && iSlash <= 4)
	{
		set_pev(iEnt, pev_iuser4, 1 + iSlash)
		Set_WeaponAnim(id, 1 + iSlash)
		
		set_pdata_float(id, 83, 0.06)
		
		if(!get_pcvar_num(cvar_fast_attack)) 
			set_pdata_float(iEnt, 46, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
		
		set_pdata_float(iEnt, 47, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
		set_pdata_float(iEnt, 48, iSlash == 3 ? 1.4 : 1.0,4);
		  
		set_pev(iEnt, pev_iuser1, 1)
		set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
		SendSound(id, CHAN_WEAPON, weapon_sound[5 + iSlash])
		Create_Slash(id,iEnt,iSlash)
		
		if(iSlash == 3) 
		{
			g_slashend[id] = 1
			
			set_pev(iEnt, pev_fuser1, get_gametime() + (g_check[id] == 5 ? 0.43 : 0.5))
			set_pev(iEnt, pev_iuser4, 0)
		}
	}
	
	if(fSound && fSound < get_gametime())
	{
		SendSound(id,CHAN_VOICE,weapon_sound[g_check[id] == 5 ? 13 : 12])
		set_pev(iEnt, pev_fuser1, 0.0)
		
		if(g_check[id] == 5) 
		{
			Set_WeaponAnim(id, 14)
			SendSound(id,CHAN_ITEM,weapon_sound[20])
			g_check[id] = 6
			
			set_pdata_float(iEnt, 46, 1.03,4)
			set_pdata_float(iEnt, 47, 1.03,4)
			set_pdata_float(iEnt, 48, 1.03,4)
			
			set_pev(iEnt, pev_fuser4, get_gametime()+1.7);
			DPS_Special(id, 0, 2.0)
		}
	}
	
	if(g_check[id] == 6 && get_pdata_float(iEnt, 46,4) <= 0.0)
	{
		set_pdata_float(iEnt, 46, 11.36,4)
		set_pdata_float(iEnt, 47, 11.36,4)
		set_pdata_float(iEnt, 48, 11.36,4)
		
		g_check[id] = 7
		set_pev(iEnt, pev_fuser1, get_gametime() + 10.6)
		Set_WeaponAnim(id, 15)
	}
	
	// NANI?!
	if(g_check[id] == 7 && fSound && fSound < get_gametime())
	{
		SendSound(id,CHAN_VOICE,weapon_sound[14])
		set_pev(iEnt, pev_fuser1, 0.0)
		g_check[id] = 0
		
		DPS_Special(id, 1, 1.46)
	}
	
	DPS_RealSpecial(id, iEnt, fRange)
	
	if(iButton & IN_ATTACK && get_pdata_float(iEnt, 46,4) <= 0.0)
	{
		g_mode[id] = 0
		g_slashend[id] = 0
		
		set_pev(iEnt, pev_iuser2, 1)
		set_pev(iEnt, pev_iuser4, 0)
		
		switch(iState)
		{
			case 0:
			{
				set_pdata_float(id, 83, 0.16)
				set_pdata_float(iEnt, 46, 0.4,4);
				
				if(!get_pcvar_num(cvar_fast_attack)) 
					set_pdata_float(iEnt, 47, 0.4,4);
					
				set_pdata_float(iEnt, 48, 1.0,4);
				
				set_pev(iEnt, pev_iuser1, 1)
				set_pev(iEnt, pev_iuser3, 1)
				set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
				
				Set_WeaponAnim(id, ANIM_STAB1)
				SendSound(id, CHAN_WEAPON, weapon_sound[0])
				
				if(!g_check[id]) g_check[id] = 1
				else if(g_check[id] == 2) g_check[id] = 3
				else g_check[id] = 0
			}
			case 1:
			{
				set_pdata_float(id, 83, 0.16)
				set_pdata_float(iEnt, 46, 0.83,4);
				
				if(!get_pcvar_num(cvar_fast_attack)) 
					set_pdata_float(iEnt, 47, 0.83,4);
				
				set_pdata_float(iEnt, 48, 1.5,4);
				
				set_pev(iEnt, pev_iuser1, 1)
				set_pev(iEnt, pev_iuser3, 0)
				set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
				
				Set_WeaponAnim(id, ANIM_STAB2)
				SendSound(id, CHAN_WEAPON, weapon_sound[1])
				
				if(g_check[id] == 3) g_check[id] = 4
				else g_check[id] = 0
			}
		}
	}
	
	if(iButton & IN_ATTACK2 && get_pdata_float(iEnt, 47) <= 0.0 && !iSlash)
	{
		g_mode[id] = 1
		
		set_pdata_float(id, 83, 0.04)
		
		if(!get_pcvar_num(cvar_fast_attack)) 
			set_pdata_float(iEnt, 46, 0.13,4);
		
		set_pdata_float(iEnt, 47, 0.13,4);
		set_pdata_float(iEnt, 48, 0.5,4);
		
		set_pev(iEnt, pev_iuser1, 1)
		set_pev(iEnt, pev_iuser2, 0)
		set_pev(iEnt, pev_iuser3, 0)
		set_pev(iEnt, pev_iuser4, 1)
		set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
		
		Set_WeaponAnim(id, ANIM_SLASH1)
		SendSound(id, CHAN_WEAPON, weapon_sound[5])
		
		Create_Slash(id,iEnt,0)
		
		if(g_check[id] == 1) g_check[id] = 2
		else if(g_check[id] == 4) g_check[id] = 5
		else g_check[id] = 0
	}
	
	iButton &= ~IN_ATTACK;
	iButton &= ~IN_ATTACK2;
	set_pev(id, pev_button, iButton);
	return HAM_IGNORED
}

stock Create_Slash(id,iEnt,seq)
{
	new Float:vecOrigin[3], Float:vecAngle[3];
	GetGunPosition(id, vecOrigin);
	pev(id, pev_v_angle, vecAngle);
	vecAngle[0] = -vecAngle[0];
	
	new pEntity = DPS_Entites(id,"models/dualswordfx.mdl",vecOrigin,vecOrigin,0.01,SOLID_NOT,seq)
		
	// Set info for ent	
	Set_Entity_Mode(pEntity, 0)
	set_pev(pEntity, pev_scale, 0.1);
	set_pev(pEntity, pev_iuser1, iEnt);
	set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
	set_pev(pEntity, pev_angles, vecAngle);
	set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
}

stock DPS_Special(id, seq, Float:fTime)
{
	new Float:VecOrig[3], Float:VecAng[3]
	pev(id, pev_origin, VecOrig)
	pev(id, pev_angles, VecAng)
	
	new iEfx = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	set_pev(iEfx, pev_classname, "dps_entytyd");
	set_pev(iEfx, pev_origin, VecOrig)
	set_pev(iEfx, pev_frame, 0.0)
	set_pev(iEfx, pev_animtime, get_gametime())
	set_pev(iEfx, pev_framerate, 1.0)
	set_pev(iEfx, pev_sequence, seq)
	engfunc(EngFunc_SetModel, iEfx, "models/dualsword_skill.mdl")
	dllfunc(DLLFunc_Spawn, iEfx)
	Set_Entity_Mode(iEfx, 1)
	set_pev(iEfx, pev_angles, VecAng)
	set_pev(iEfx, pev_solid, SOLID_NOT)
	set_pev(iEfx, pev_owner, id)
	set_pev(iEfx, pev_velocity, Float:{0.01,0.01,0.01});
	set_pev(iEfx, pev_fuser1, get_gametime() + fTime)
	set_pev(iEfx, pev_nextthink, get_gametime() + 0.01)
}

stock DPS_RealSpecial(id, iEnt, Float:fRange)
{
	new Float:fTimeEffect;
	pev(iEnt, pev_fuser4, fTimeEffect);
	
	if (g_check[id] == 7 && fTimeEffect && fTimeEffect <= get_gametime())
	{
		KnifeAttack_Global(id, false, get_pcvar_float(cvar_special_range)*2.0, 180.0, get_pcvar_float(cvar_damage_special), get_pcvar_float(cvar_knockback[2]))
			
		new Float:vecOrigin3[2][3], Float:vecOrigin[3];
		pev(id, pev_origin, vecOrigin3[0]);
		pev(id, pev_origin, vecOrigin);
		xs_vec_copy(vecOrigin3[0], vecOrigin3[1]);
		
		new Float:fFloat = random_float(fRange * -0.85, fRange * 0.85);
		vecOrigin3[0][2] = vecOrigin3[1][2] = vecOrigin3[0][2] + random_float(-5.0, 65.0);
		
		switch (random(3))
		{
			case 0:
			{
				vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
				vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
				
				vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
				vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
			}
			case 1:
			{
				vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
				vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
				
				vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
				vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
			}
			case 2:
			{
				vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
				vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
				
				vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
				vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
			}
			case 3:
			{
				vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
				vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
				
				vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
				vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
			}
		}
		
		if (random_num(0,9) > 8)
		{
			new Float:vecAngle2[3];
			vecAngle2[0] = random_num(0,1) ? random_float(-30.0, -15.0) : random_float(15.0, 30.0);
			vecAngle2[1] = random_num(0,1) ? random_float(-180.0, 0.0) : random_float(0.0, 180.0);
			
			new pEntity = DPS_Entites(id,"models/dualsword_skillfx1.mdl",vecOrigin3[0],vecOrigin3[0],0.01,SOLID_NOT,0)	
			set_pev(pEntity, pev_angles, vecAngle2);
			set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
			set_pev(pEntity, pev_iuser1, 1);
			set_pev(pEntity, pev_iuser2, iEnt);
			set_pev(pEntity, pev_frame, 0.0);
			Set_Entity_Mode(pEntity, 2)
			set_pev(pEntity, pev_fuser1, get_gametime()+0.53);
			set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
			set_pev(pEntity, pev_fuser3, get_gametime()+0.31);
			set_pev(pEntity, pev_oldorigin, vecOrigin);
			set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
		}
		
		new pEntity = DPS_Entites(id,"models/dualsword_skillfx2.mdl",vecOrigin3[0],vecOrigin3[1],500.0,SOLID_TRIGGER,0)	
		set_pev(pEntity, pev_iuser1, 2);
		set_pev(pEntity, pev_iuser2, iEnt);
		Set_Entity_Mode(pEntity, 2)
		set_pev(pEntity, pev_frame, 0.0);
		set_pev(pEntity, pev_oldorigin, vecOrigin);
		set_pev(pEntity, pev_fuser1, get_gametime()+0.2);
		set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
		set_pev(pEntity, pev_fuser3, get_gametime()+0.3);
		set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
		
		set_pev(iEnt, pev_fuser4, get_gametime()+0.05);
	}
}

stock DPS_Entites(id, models[], Float:Start[3], Float:End[3], Float:speed, solid, seq, move=MOVETYPE_FLY)
{
	new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
		
	// Set info for ent	
	set_pev(pEntity, pev_movetype, move);
	set_pev(pEntity, pev_owner, id);
	engfunc(EngFunc_SetModel, pEntity, models);
	set_pev(pEntity, pev_classname, "dps_entytyd");
	set_pev(pEntity, pev_mins, Float:{-1.0, -1.0, -1.0});
	set_pev(pEntity, pev_maxs, Float:{1.0, 1.0, 1.0});
	set_pev(pEntity, pev_origin, Start);
	set_pev(pEntity, pev_gravity, 0.01);
	set_pev(pEntity, pev_solid, solid);
	
	static Float:Velocity[3];
	Stock_Get_Speed_Vector(Start, End, speed, Velocity);
	set_pev(pEntity, pev_velocity, Velocity);

	new Float:vecVAngle[3]; pev(id, pev_v_angle, vecVAngle);
	vector_to_angle(Velocity, vecVAngle)
	
	if(vecVAngle[0] > 90.0) vecVAngle[0] = -(360.0 - vecVAngle[0]);
	set_pev(pEntity, pev_angles, vecVAngle);
	
	set_pev(pEntity, pev_rendermode, kRenderTransAdd);
	set_pev(pEntity, pev_renderamt, 255.0);
	set_pev(pEntity, pev_sequence, seq)
	set_pev(pEntity, pev_animtime, get_gametime());
	set_pev(pEntity, pev_framerate, 1.0)
	return pEntity;
}

stock Set_Entity_Mode(iEnt, mode) set_pev(iEnt, pev_iuser3, mode)
stock Get_Entity_Mode(iEnt) return pev(iEnt,pev_iuser3)

stock SendSound(id, chan, sample[]) emit_sound(id, chan, sample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

stock Stock_Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
	xs_vec_sub(origin2, origin1, new_velocity)
	new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
	xs_vec_mul_scalar(new_velocity, num, new_velocity)
}
stock GetGunPosition(id, Float:vecSrc[3])
{
	new Float:vecViewOfs[3];
	pev(id, pev_origin, vecSrc);
	pev(id, pev_view_ofs, vecViewOfs);
	xs_vec_add(vecSrc, vecViewOfs, vecSrc);
}
stock KnifeAttack_Global(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
{
	new iHitResult
	if(fAngle > 0.0) iHitResult = KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
	else iHitResult = KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack)

	return iHitResult
}

stock KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bitsDamageType = DMG_NEVERGIB | DMG_CLUB)
{
	new Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
	GetGunPosition(id, vecSrc);

	pev(id, pev_v_angle, v_angle);
	engfunc(EngFunc_MakeVectors, v_angle);

	global_get(glb_v_forward, vecForward);
	xs_vec_mul_scalar(vecForward, flRange, vecForward);
	xs_vec_add(vecSrc, vecForward, vecEnd);

	new tr = create_tr2();
	engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);

	new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
	if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
	
	get_tr2(tr, TR_flFraction, flFraction);

	new iHitResult = RESULT_HIT_NONE;
	
	if (flFraction < 1.0)
	{
		new pEntity = get_tr2(tr, TR_pHit);
		iHitResult = RESULT_HIT_WORLD;
		
		if (pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
		{
			if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
				flDamage *= 1.0;

			iHitResult = RESULT_HIT_PLAYER;
		}

		if (pev_valid(pEntity))
		{
			engfunc(EngFunc_MakeVectors, v_angle);
			global_get(glb_v_forward, vecForward);

			if (iHitgroup != -1)
				set_tr2(tr, TR_iHitgroup, iHitgroup);

			ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, bitsDamageType);
			ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, bitsDamageType)
			Stock_Fake_KnockBack(id, pEntity, flKnockBack)
			
			if (IsAlive(pEntity))
			{
				free_tr2(tr);
				return iHitResult;
			}
		}
	}
	free_tr2(tr);
	return iHitResult;
}

stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
{
	new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
	pev(id, pev_origin, vecOrigin);

	new iHitResult = RESULT_HIT_NONE;
	GetGunPosition(id, vecSrc);

	pev(id, pev_v_angle, v_angle);
	engfunc(EngFunc_MakeVectors, v_angle);

	global_get(glb_v_forward, vecForward);
	xs_vec_mul_scalar(vecForward, flRange, vecForward);
	xs_vec_add(vecSrc, vecForward, vecEnd);

	new tr = create_tr2();
	engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
	
	new Float:EndPos2[3]
	get_tr2(tr, TR_vecEndPos, EndPos2)
	
	new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
	if (flFraction < 1.0) 
	{
		iHitResult = RESULT_HIT_WORLD;
		if(bStab) Stock_SakuraEffect(id, EndPos2)
	}
	
	new Float:vecEndZ = vecEnd[2];
	
	new pEntity = -1;
	while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
	{
		if (!pev_valid(pEntity))
			continue;
		if (id == pEntity)
			continue;
		if (!IsAlive(pEntity))
			continue;
		if (!CheckAngle(id, pEntity, fAngle))
			continue;

		GetGunPosition(id, vecSrc);
		Stock_Get_Origin(pEntity, vecEnd);

		vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);

		xs_vec_sub(vecEnd, vecSrc, vecForward);
		xs_vec_normalize(vecForward, vecForward);
		xs_vec_mul_scalar(vecForward, flRange, vecForward);
		xs_vec_add(vecSrc, vecForward, vecEnd);

		engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
		get_tr2(tr, TR_flFraction, flFraction);

		if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
		get_tr2(tr, TR_flFraction, flFraction);

		if (flFraction < 1.0)
		{
			if (IsPlayer(pEntity) || IsHostage(pEntity))
			{
				iHitResult = RESULT_HIT_PLAYER;
				if(bStab) Stock_SakuraEffect(id, vecEnd)
				
				if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
					flDamage *= 1.0;
			}

			if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
			{
				engfunc(EngFunc_MakeVectors, v_angle);
				global_get(glb_v_forward, vecForward);

				if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);

				ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, DMG_NEVERGIB | DMG_CLUB);
				ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB)
				
				Stock_Fake_KnockBack(id, pEntity, flKnockBack)
			}
		}
		free_tr2(tr);
	}
	return iHitResult;
}

stock Set_WeaponAnim(id, anim)
{
	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 Stock_Set_Vis(iEnt, iVis = 1)
	set_pev(iEnt, pev_effects, iVis == 1 ? pev(iEnt, pev_effects) & ~EF_NODRAW : pev(iEnt, pev_effects) | EF_NODRAW)

stock Stock_Hook_Ent(ent, Float:TargetOrigin[3], Float:Speed, mode=0)
{
	static Float:fl_Velocity[3],Float:EntOrigin[3],Float:distance_f,Float:fl_Time
	pev(ent, pev_origin, EntOrigin)
	
	if(!mode)
	{
		distance_f = get_distance_f(EntOrigin, TargetOrigin)
		fl_Time = distance_f / Speed
			
		pev(ent, pev_velocity, fl_Velocity)
			
		fl_Velocity[0] = (TargetOrigin[0] - EntOrigin[0]) / fl_Time
		fl_Velocity[1] = (TargetOrigin[1] - EntOrigin[1]) / fl_Time
		fl_Velocity[2] = (TargetOrigin[2] - EntOrigin[2]) / fl_Time

		if(vector_length(fl_Velocity) > 1.0) set_pev(ent, pev_velocity, fl_Velocity)
		else set_pev(ent, pev_velocity, Float:{0.01, 0.01, 0.01})
	} else {
		static Float:fl_EntVelocity[3], Float:fl_Acc[3]
		Stock_Directed_Vector(TargetOrigin, EntOrigin, fl_Velocity)
		xs_vec_mul_scalar(fl_Velocity, Speed, fl_Velocity)
		
		for(new i =0; i<3; i++)
		{
			if(fl_Velocity[i] > fl_EntVelocity[i]) 
			{
				fl_Acc[i] = fl_Velocity[i]-fl_EntVelocity[i]
				fl_Acc[i] = floatmin(70.0, fl_Acc[i])
				fl_EntVelocity[i] += fl_Acc[i]
			}
			else if(fl_Velocity[i] < fl_EntVelocity[i])
			{
				fl_Acc[i] = fl_EntVelocity[i]-fl_Velocity[i]
				fl_Acc[i] = floatmin(70.0, fl_Acc[i])
				fl_EntVelocity[i] -= fl_Acc[i]
			}
		}
		set_pev(ent, pev_velocity, fl_EntVelocity)
	}
}

stock Stock_Directed_Vector(Float:start[3],Float:end[3],Float:reOri[3])
{	
	new Float:v3[3],i
	for(i=0;i<3;i++) v3[i]=start[i]-end[i]

	new Float:vl = vector_length(v3)
	for(i=0;i<3;i++) reOri[i] = v3[i] / vl
}

stock Stock_Get_Postion(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)
	xs_vec_add(vOrigin,vUp,vOrigin)
	pev(id, pev_v_angle, vAngle)
	
	engfunc(EngFunc_AngleVectors, vAngle, vForward, vRight, 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 IsPlayer(pEntity) return is_user_connected(pEntity)

stock IsHostage(pEntity)
{
	new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname))
	return equal(classname, "hostage_entity")
}

stock IsAlive(pEntity)
{
	if (pEntity < 1) return 0
	return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0)
}

stock CheckBack(iEnemy,id)
{
	new Float:anglea[3], Float:anglev[3]
	pev(iEnemy, pev_v_angle, anglea)
	pev(id, pev_v_angle, anglev)
	new Float:angle = anglea[1] - anglev[1] 
	if (angle < -180.0) angle += 360.0
	if (angle <= 45.0 && angle >= -45.0) return 1
	return 0
}

stock CheckAngle(iAttacker, iVictim, Float:fAngle)  return(Stock_CheckAngle(iAttacker, iVictim) > floatcos(fAngle,degrees))

stock Float:Stock_CheckAngle(id,iTarget)
{
	new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3]
	Stock_Get_Origin(id, vId_ori)
	Stock_Get_Origin(iTarget, vTar_ori)
	
	pev(id,pev_angles,vId_ang)
	for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i]
	
	fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1])
	
	if (fLength<=0.0)
	{
		vOricross[0]=0.0
		vOricross[1]=0.0
	} else {
		vOricross[0]=vOricross[0]*(1.0/fLength)
		vOricross[1]=vOricross[1]*(1.0/fLength)
	}
	
	engfunc(EngFunc_MakeVectors,vId_ang)
	global_get(glb_v_forward,vForward)
	
	fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1]
	return fRad   //->   RAD 90' = 0.5rad
}

stock Stock_Get_Origin(id, Float:origin[3])
{
	new Float:maxs[3],Float:mins[3]
	if (pev(id, pev_solid) == SOLID_BSP)
	{
		pev(id,pev_maxs,maxs)
		pev(id,pev_mins,mins)
		origin[0] = (maxs[0] - mins[0]) / 2 + mins[0]
		origin[1] = (maxs[1] - mins[1]) / 2 + mins[1]
		origin[2] = (maxs[2] - mins[2]) / 2 + mins[2]
	} else pev(id, pev_origin, origin)
}

public Stock_Fake_KnockBack(id, iVic, Float:iKb)
{
	if(iVic > 32) return
	
	new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
	pev(id, pev_origin, vAttacker)
	pev(iVic, pev_origin, vVictim)
	vAttacker[2] = vVictim[2] = 0.0
	flags = pev(id, pev_flags)
	
	xs_vec_sub(vVictim, vAttacker, vVictim)
	new Float:fDistance
	fDistance = xs_vec_len(vVictim)
	xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim)
	
	pev(iVic, pev_velocity, vVelocity)
	xs_vec_mul_scalar(vVictim, iKb, vVictim)
	xs_vec_mul_scalar(vVictim, 50.0, vVictim)
	vVictim[2] = xs_vec_len(vVictim) * 0.15
	
	if(flags &~ FL_ONGROUND)
	{
		xs_vec_mul_scalar(vVictim, 1.2, vVictim)
		vVictim[2] *= 0.4
	}
	if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim)
}	

stock Float:Stock_Get_Body_Dmg(iBody)
{
	switch (iBody)
	{
		case HIT_GENERIC: return 0.75
		case 1: return 4.0
		case 2: return 1.0
		case 3: return 1.25
		case 4,5,6,7: return 0.75
		default: return 0.75
	}
	return 1.0
}

stock Stock_SakuraEffect(id, Float:vecOri[3])
{
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOri)
	write_byte(TE_BLOODSPRITE)
	engfunc(EngFunc_WriteCoord,vecOri[0])
	engfunc(EngFunc_WriteCoord,vecOri[1])
	engfunc(EngFunc_WriteCoord,vecOri[2])
	write_short(ef_sakura[g_mode[id]?2:0])
	write_short(ef_sakura[g_mode[id]?3:1])
	write_byte(g_mode[id]?178:128)
	write_byte(random_num(2,3))
	message_end()
}

stock can_damage(id1, id2)
{
	if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33)
		return 1
		
	// Check team
	return(get_pdata_int(id1, 114) != get_pdata_int(id2, 114))
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/

My modified version
Code:
/* Plugin generated by AMXX-Studio */
#pragma compress 1

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>

#define PLUGIN "CSO Dual Sword Phantom Slayer"
#define VERSION "1.1"
#define AUTHOR "Natasha aka Asdian"

#define CSW_DPS CSW_KNIFE
#define weapon_dps "weapon_knife"

#define v_model "models/v_dualsword.mdl"
#define p_model "models/p_dualsword_a.mdl"
#define p_model2 "models/p_dualsword_b.mdl"
#define spr_wpn	"knife_dualsword"

new const weapon_sound[][] =
{
	"weapons/dualsword_stab1.wav",				// 0
	"weapons/dualsword_stab2.wav",				// 1
	"weapons/dualsword_stab1_hit.wav",			// 2
	"weapons/dualsword_stab2_hit.wav",			// 3
	"weapons/katanad_hitwall.wav",				// 4
	
	"weapons/dualsword_slash_1.wav",			// 5
	"weapons/dualsword_slash_2.wav",			// 6
	"weapons/dualsword_slash_3.wav",			// 7
	"weapons/dualsword_slash_4.wav",			// 8
	"weapons/dualsword_hit1.wav",				// 9
	"weapons/dualsword_hit2.wav",				// 10
	"weapons/dualsword_hit3.wav",				// 11
	"weapons/dualsword_slash_4_1.wav",			// 12
	"weapons/dualsword_slash_4_2.wav",			// 13
	"weapons/dualsword_skill_end.wav",			// 14
	
	"weapons/dualsword_fly1.wav",				// 15
	"weapons/dualsword_fly2.wav",				// 16
	"weapons/dualsword_fly3.wav",				// 17
	"weapons/dualsword_fly4.wav",				// 18
	"weapons/dualsword_fly5.wav",				// 19
	"weapons/dualsword_skill_start.wav"
}

//Hit
#define	RESULT_HIT_NONE 			0
#define	RESULT_HIT_PLAYER			1
#define	RESULT_HIT_WORLD			2

enum _:WpnAnim
{
	ANIM_IDLEA = 0,
	ANIM_SLASH1,
	ANIM_SLASH2,
	ANIM_SLASH3,
	ANIM_SLASH4,
	ANIM_SLASHEND,
	ANIM_DRAWA,
	ANIM_IDLEB,
	ANIM_STAB1,
	ANIM_STAB2,
	ANIM_STABEND,
	ANIM_DRAWB
}

new g_had_dps[33], g_mode[33], g_slashend[33], g_check[33], g_soundmode[33]
new ef_sakura[4]
new Float:g_Sound[33]

new cvar_damage_slash[4], cvar_slash_radius, cvar_slash_range
new cvar_damage_stab[2], cvar_stab_radius, cvar_stab_range
new cvar_damage_special, cvar_special_range
new cvar_knockback[3], cvar_fast_attack, cvar_remove, cvar_spr

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
	register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
	register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
	register_forward(FM_AddToFullPack, "Fw_AddToFullPack_Post", 1);

	register_think("dps_entytyd", "Fw_DPSEnt_Think")
	
	RegisterHam(Ham_Item_PostFrame, weapon_dps, "fw_Item_PostFrame")
	register_clcmd(spr_wpn, "hook_rb")
	register_clcmd("dualsword", "get_dps", ADMIN_RCON)
	register_clcmd("say", "buy_dps")
	
	cvar_damage_slash[0] = register_cvar("dps_slashdamage_4","486.0")
	cvar_damage_slash[1] = register_cvar("dps_slashdamage_1","120.0")
	cvar_damage_slash[2] = register_cvar("dps_slashdamage_2","140.0")
	cvar_damage_slash[3] = register_cvar("dps_slashdamage_3","360.0")
	cvar_slash_radius = register_cvar("dps_slashradius","150.0")
	cvar_slash_range = register_cvar("dps_slashrange","115.0")
	
	cvar_damage_stab[0] = register_cvar("dps_stabdamage_2","1200.0")
	cvar_damage_stab[1] = register_cvar("dps_stabdamage_1","350.0")
	cvar_stab_radius = register_cvar("dps_stabradius","100.0")
	cvar_stab_range = register_cvar("dps_stabrange","190.0")
	
	cvar_damage_special = register_cvar("dps_specialdamage","95.0")
	cvar_special_range = register_cvar("dps_specialrange","120.0")
	
	cvar_knockback[0] = register_cvar("dps_slashknockback","0.0")
	cvar_knockback[1] = register_cvar("dps_stabknockback","0.0")
	cvar_knockback[2] = register_cvar("dps_specialknockback","0.0")
	
	cvar_fast_attack = register_cvar("dps_fast_attack_enabled", "1")
	cvar_remove = register_cvar("dps_remove_onnewround", "1")
	cvar_spr = register_cvar("dps_enable_sprites", "0")
	
}

public plugin_precache()
{
	precache_model(v_model)
	precache_model(p_model)
	precache_model(p_model2)
	
	for(new i = 0; i < sizeof(weapon_sound); i++)
		precache_sound(weapon_sound[i])
	
	precache_model("models/dualswordfx.mdl")
	precache_model("models/dualsword_skill.mdl")
	precache_model("models/dualsword_skillfx1.mdl")
	precache_model("models/dualsword_skillfx2.mdl")
	
	ef_sakura[0] = precache_model("sprites/leaf01_dualsword.spr")
	ef_sakura[1] = precache_model("sprites/leaf02_dualsword.spr")
	ef_sakura[2] = precache_model("sprites/petal01_dualsword.spr")
	ef_sakura[3] = precache_model("sprites/petal02_dualsword.spr")
	
	new Txt[32]
	format(Txt, 31, "sprites/%s.txt", spr_wpn)
	engfunc(EngFunc_PrecacheGeneric, Txt)
}


public hook_rb(id)
{
	engclient_cmd(id, weapon_dps)
	return PLUGIN_HANDLED
}

public buy_dps(id)
{
	new said[32]
	read_argv(1,said,31);
	if(equali(said,"/sword"))
		get_dps(id)
}

public get_dps(id)
{
	if (!is_user_alive(id))
		return

	g_had_dps[id] = 1
	g_mode[id] = 0
	g_slashend[id] = 0
	g_check[id] = 0
	g_soundmode[id] = 0
	
	fm_give_item(id, weapon_dps)
	
	if (get_user_weapon(id) == CSW_DPS) Event_CurWeapon(id)
	else engclient_cmd(id,weapon_dps)
}

public client_connect(id) remove_dps(id)
public client_disconnect(id) remove_dps(id)

public Event_NewRound()
{
	if(!get_pcvar_num(cvar_remove))
		return
	
	for(new i = 0; i < get_maxplayers(); i++)
		remove_dps(i)
}

public remove_dps(id)
{
	g_had_dps[id] = 0
	g_slashend[id] = 0
	g_check[id] = 0
	
	static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
	if(!pev_valid(iEnt)) return
	
	set_pev(iEnt, pev_iuser1, 0)
	set_pev(iEnt, pev_iuser2, 0)
	set_pev(iEnt, pev_iuser3, 0)
	set_pev(iEnt, pev_iuser4, 0)
	set_pev(iEnt, pev_fuser1, 0.0)
}

public Event_CurWeapon(id)
{
	if(!is_user_alive(id))
		return 1
	if(get_user_weapon(id) != CSW_DPS)
		return 1
	if(!g_had_dps[id])
		return 1
		
	set_pev(id, pev_viewmodel2, v_model)
	set_pev(id, pev_weaponmodel2, g_mode[id] ? p_model2:p_model)
	
	Set_WeaponAnim(id, g_mode[id]?ANIM_DRAWA:ANIM_DRAWB)
	
	static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
	if(!pev_valid(iEnt)) return 1
	
	set_pev(iEnt, pev_iuser1, 0)
	set_pev(iEnt, pev_iuser2, 0)
	set_pev(iEnt, pev_iuser3, 0)
	set_pev(iEnt, pev_iuser4, 0)
	set_pev(iEnt, pev_fuser1, 0.0)
		
	g_slashend[id] = 0
	g_check[id] = 0
	
	set_pdata_float(id, 83, 0.23)
	set_pdata_float(iEnt, 46, 0.25);
	set_pdata_float(iEnt, 47, 0.25);
	set_pdata_float(iEnt, 48, 0.25);
	
	if(get_pcvar_num(cvar_spr))
	{
		message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id)
		write_string(g_had_dps[id] == 1 ? spr_wpn : weapon_dps)
		write_byte(-1)
		write_byte(-1)
		write_byte(-1)
		write_byte(-1)
		write_byte(2)
		write_byte(1)
		write_byte(CSW_DPS)
		write_byte(0)
		message_end()
	}
	return 0
}

public message_DeathMsg(msg_id, msg_dest, msg_ent)
{
	new szWeapon[64]
	get_msg_arg_string(4, szWeapon, charsmax(szWeapon))
	
	if (strcmp(szWeapon, "knife"))
		return PLUGIN_CONTINUE

	new iEntity = get_pdata_cbase(get_msg_arg_int(1), 373)
	if (!pev_valid(iEntity) || get_pdata_int(iEntity, 43, 4) != CSW_DPS || !g_had_dps[get_msg_arg_int(1)])
		return PLUGIN_CONTINUE

	set_msg_arg_string(4, "dualsword")
	return PLUGIN_CONTINUE
}

public Fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
{
	if (!pev_valid(iEnt))
		return;
	if (pev(iEnt, pev_flags) & FL_KILLME) 
		return;

	new classname[32];
	pev(iEnt, pev_classname, classname, 31);

	if (equal(classname,"dps_entytyd") && pev(iEnt, pev_iuser4))
	{
		if (iHost != pev(iEnt, pev_owner))
			set_es(esState, ES_Effects, (get_es(esState, ES_Effects) | EF_NODRAW));
	}
}

public Fw_DPSEnt_Think(iEnt)
{
	if(!pev_valid(iEnt)) 
		return
	
	new iOwner
	iOwner = pev(iEnt, pev_owner)
	
	if(!is_user_alive(iOwner) || !is_user_connected(iOwner))
	{
		remove_entity(iEnt)
		g_soundmode[iOwner] = 0
		return
	}
	
	if(!Get_Entity_Mode(iEnt))
	{
		new iWpn,iState,Float:vecOrigin[3], Float:vecAngle[3];
		iWpn = pev(iEnt, pev_iuser1)
		iState = pev(iWpn, pev_iuser4)
		Stock_Get_Postion(iOwner, 0.0, 0.0, 0.0, vecOrigin);
		
		pev(iOwner, pev_v_angle, vecAngle);
		vecAngle[0] = -vecAngle[0];
		
		set_pev(iEnt, pev_origin, vecOrigin);
		set_pev(iEnt, pev_angles, vecAngle);
		
		if(!iState || get_user_weapon(iOwner) != CSW_DPS)
		{
			new Float:fRenderAmount;
			pev(iEnt, pev_renderamt, fRenderAmount);

			fRenderAmount -= 4.5;

			if (fRenderAmount <= 5.0)
			{
				remove_entity(iEnt);
				return;
			}
			set_pev(iEnt, pev_renderamt, fRenderAmount);
		}
	}
	
	if(Get_Entity_Mode(iEnt) == 1)
	{
		set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
	
		static Float:Origin[3]; pev(iOwner, pev_origin, Origin)
		Origin[2] -= 25.0
		
		Stock_Hook_Ent(iEnt, Origin, 0.01)
		
		if(pev(iEnt, pev_fuser1) < get_gametime() || !IsAlive(iOwner))
		{
			set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
			return
		}
			
		set_pev(iEnt, pev_velocity, Float:{1.0,1.0,1.0});
		set_pev(iEnt, pev_origin, Origin);
	}
	
	if(Get_Entity_Mode(iEnt) == 2)
	{
		new Float:vecOrigin[3]
		GetGunPosition(iOwner, vecOrigin);
		
		new Float:fOldOrigin[3];
		pev(iEnt, pev_oldorigin, fOldOrigin);
		
		new Float:vecNewOrigin[3];
		pev(iEnt, pev_origin, vecNewOrigin);
		
		new Float:vecfff[3];
		xs_vec_sub(vecOrigin, fOldOrigin, vecfff);
		xs_vec_add(vecNewOrigin, vecfff, vecNewOrigin);
		
		set_pev(iEnt, pev_origin, vecNewOrigin);
		set_pev(iEnt, pev_oldorigin, vecOrigin);
		
		if (pev(iEnt, pev_iuser1) == 2)
		{
			new Float:fDist = get_distance_f(vecOrigin, vecNewOrigin);
			if (fDist > 175.0 * 0.5)
			{
				remove_entity(iEnt);
				return;
			}
		}
		
		if(g_Sound[iOwner] < get_gametime())
		{
			if(!g_soundmode[iOwner]) emit_sound(iOwner, CHAN_ITEM, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
			if(g_soundmode[iOwner] == 1) emit_sound(iOwner, CHAN_BODY, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
			if(g_soundmode[iOwner] == 2) emit_sound(iOwner, CHAN_VOICE, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
			if(g_soundmode[iOwner] == 3) emit_sound(iOwner, CHAN_WEAPON, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
			
			g_soundmode[iOwner]++
			if(g_soundmode[iOwner] > 3) g_soundmode[iOwner] = 0
			
			g_Sound[iOwner] = get_gametime()+0.088;
		}
	}
	set_pev(iEnt, pev_nextthink, get_gametime() + 0.01)
	
	if(Get_Entity_Mode(iEnt) == 2)
	{
		new Float:fTimeLast;
		pev(iEnt, pev_fuser1, fTimeLast);
		
		if (fTimeLast < get_gametime() || pev(pev(iEnt, pev_iuser2), pev_fuser1) < get_gametime())
		{
			if (pev(iEnt, pev_iuser1) == 1)
			{
				new Float:fRenderAmount;
				pev(iEnt, pev_renderamt, fRenderAmount);
				fRenderAmount -= 7.5;
				
				if (fRenderAmount <= 5.0)
				{
					remove_entity(iEnt);
					return;
				}
				set_pev(iEnt, pev_renderamt, fRenderAmount);
			} else remove_entity(iEnt);
			
			g_soundmode[iOwner] = 0
		}
	}
}

public fw_Item_PostFrame(ent)
{
	new id = pev(ent, pev_owner)
	
	if(!is_user_connected(id))
		return HAM_IGNORED
	if(get_user_weapon(id) != CSW_DPS || !g_had_dps[id])
		return HAM_IGNORED

	if(get_pdata_float(ent, 48, 4) <= 0.01 && (!pev(ent, pev_iuser2) || !g_slashend[id]))
	{
		if(g_check[id] < 6) g_check[id] = 0
		set_pev(ent, pev_iuser3, 0)
		Set_WeaponAnim(id, g_mode[id]?ANIM_IDLEA:ANIM_IDLEB)
		set_pdata_float(ent, 48, 4.03, 4)
	}
	
	new iButton = pev(id,pev_button)
	return AurezBotac(id, ent, iButton)
}

public AurezBotac(id, iEnt, iButton)
{
	new iState = pev(iEnt, pev_iuser3)
	new iState2 = pev(iEnt, pev_iuser2)
	new iSlash = pev(iEnt, pev_iuser4)
	new Float:fSound; pev(iEnt, pev_fuser1, fSound)
	new Float:fRange = get_pcvar_float(g_mode[id] ? cvar_slash_range : cvar_stab_range)
	
	if(!(iButton & IN_ATTACK) && get_pdata_float(iEnt, 46,4) <= 0.0 && iState2)
	{
		if(!iState || iState == 1)
		{
			Set_WeaponAnim(id, ANIM_STABEND)
			set_pev(iEnt, pev_iuser2, 0)
			set_pdata_float(iEnt, 48, 1.45,4)
		}
	}
	
	if(!(iButton & IN_ATTACK2) && get_pdata_float(iEnt, 47,4) <= 0.0 && g_slashend[id])
	{
		Set_WeaponAnim(id, ANIM_SLASHEND)
		set_pdata_float(iEnt, 48, 2.03,4)
		g_slashend[id] = 0
	}
	
	if (get_pdata_float(id, 83) <= 0.0 && pev(iEnt, pev_iuser1))
	{
		new Float:fAngle = get_pcvar_float(g_mode[id] ? cvar_slash_radius : cvar_stab_radius)
		new Float:fDamage = get_pcvar_float(g_mode[id] ? cvar_damage_slash[iSlash] : cvar_damage_stab[iState])
		
		new iHitResult = KnifeAttack_Global(id, true, fRange, fAngle, fDamage, get_pcvar_float(cvar_knockback[1+g_mode[id]]))
		switch (iHitResult)
		{
			case RESULT_HIT_PLAYER : client_cmd(id, "spk %s", weapon_sound[g_mode[id]?random_num(9,11):iState+2]) 
			case RESULT_HIT_WORLD : client_cmd(id, "spk %s", weapon_sound[4])
		}
		set_pev(iEnt, pev_iuser1, 0);
	}
	
	if(get_pdata_float(iEnt, 47,4) <= 0.0 && iSlash && iSlash <= 4)
	{
		set_pev(iEnt, pev_iuser4, 1 + iSlash)
		Set_WeaponAnim(id, 1 + iSlash)
		
		set_pdata_float(id, 83, 0.06)
		
		if(!get_pcvar_num(cvar_fast_attack)) 
			set_pdata_float(iEnt, 46, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
		
		set_pdata_float(iEnt, 47, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
		set_pdata_float(iEnt, 48, iSlash == 3 ? 1.4 : 1.0,4);
		  
		set_pev(iEnt, pev_iuser1, 1)
		set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
		SendSound(id, CHAN_WEAPON, weapon_sound[5 + iSlash])
		Create_Slash(id,iEnt,iSlash)
		
		if(iSlash == 3) 
		{
			g_slashend[id] = 1
			
			set_pev(iEnt, pev_fuser1, get_gametime() + (g_check[id] == 5 ? 0.43 : 0.5))
			set_pev(iEnt, pev_iuser4, 0)
		}
	}
	
	if(fSound && fSound < get_gametime())
	{
		SendSound(id,CHAN_VOICE,weapon_sound[g_check[id] == 5 ? 13 : 12])
		set_pev(iEnt, pev_fuser1, 0.0)
		
		if(g_check[id] == 5) 
		{
			Set_WeaponAnim(id, 14)
			SendSound(id,CHAN_ITEM,weapon_sound[20])
			g_check[id] = 6
			
			set_pdata_float(iEnt, 46, 1.03,4)
			set_pdata_float(iEnt, 47, 1.03,4)
			set_pdata_float(iEnt, 48, 1.03,4)
			
			set_pev(iEnt, pev_fuser4, get_gametime()+1.7);
			DPS_Special(id, 0, 2.0)
		}
	}
	
	if(g_check[id] == 6 && get_pdata_float(iEnt, 46,4) <= 0.0)
	{
		set_pdata_float(iEnt, 46, 11.36,4)
		set_pdata_float(iEnt, 47, 11.36,4)
		set_pdata_float(iEnt, 48, 11.36,4)
		
		g_check[id] = 7
		set_pev(iEnt, pev_fuser1, get_gametime() + 10.6)
		Set_WeaponAnim(id, 15)
	}
	
	// NANI?!
	if(g_check[id] == 7 && fSound && fSound < get_gametime())
	{
		SendSound(id,CHAN_VOICE,weapon_sound[14])
		set_pev(iEnt, pev_fuser1, 0.0)
		g_check[id] = 0
		
		DPS_Special(id, 1, 1.46)
	}
	
	DPS_RealSpecial(id, iEnt, fRange)
	
	if(iButton & IN_ATTACK && get_pdata_float(iEnt, 46,4) <= 0.0)
	{
		g_mode[id] = 0
		g_slashend[id] = 0
		
		set_pev(iEnt, pev_iuser2, 1)
		set_pev(iEnt, pev_iuser4, 0)
		
		switch(iState)
		{
			case 0:
			{
				set_pdata_float(id, 83, 0.16)
				set_pdata_float(iEnt, 46, 0.4,4);
				
				if(!get_pcvar_num(cvar_fast_attack)) 
					set_pdata_float(iEnt, 47, 0.4,4);
					
				set_pdata_float(iEnt, 48, 1.0,4);
				
				set_pev(iEnt, pev_iuser1, 1)
				set_pev(iEnt, pev_iuser3, 1)
				set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
				
				Set_WeaponAnim(id, ANIM_STAB1)
				SendSound(id, CHAN_WEAPON, weapon_sound[0])
				
				if(!g_check[id]) g_check[id] = 1
				else if(g_check[id] == 2) g_check[id] = 3
				else g_check[id] = 0
			}
			case 1:
			{
				set_pdata_float(id, 83, 0.16)
				set_pdata_float(iEnt, 46, 0.83,4);
				
				if(!get_pcvar_num(cvar_fast_attack)) 
					set_pdata_float(iEnt, 47, 0.83,4);
				
				set_pdata_float(iEnt, 48, 1.5,4);
				
				set_pev(iEnt, pev_iuser1, 1)
				set_pev(iEnt, pev_iuser3, 0)
				set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
				
				Set_WeaponAnim(id, ANIM_STAB2)
				SendSound(id, CHAN_WEAPON, weapon_sound[1])
				
				if(g_check[id] == 3) g_check[id] = 4
				else g_check[id] = 0
			}
		}
	}
	
	if(iButton & IN_ATTACK2 && get_pdata_float(iEnt, 47) <= 0.0 && !iSlash)
	{
		g_mode[id] = 1
		
		set_pdata_float(id, 83, 0.04)
		
		if(!get_pcvar_num(cvar_fast_attack)) 
			set_pdata_float(iEnt, 46, 0.13,4);
		
		set_pdata_float(iEnt, 47, 0.13,4);
		set_pdata_float(iEnt, 48, 0.5,4);
		
		set_pev(iEnt, pev_iuser1, 1)
		set_pev(iEnt, pev_iuser2, 0)
		set_pev(iEnt, pev_iuser3, 0)
		set_pev(iEnt, pev_iuser4, 1)
		set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
		
		Set_WeaponAnim(id, ANIM_SLASH1)
		SendSound(id, CHAN_WEAPON, weapon_sound[5])
		
		Create_Slash(id,iEnt,0)
		
		if(g_check[id] == 1) g_check[id] = 2
		else if(g_check[id] == 4) g_check[id] = 5
		else g_check[id] = 0
	}
	
	iButton &= ~IN_ATTACK;
	iButton &= ~IN_ATTACK2;
	set_pev(id, pev_button, iButton);
	return HAM_IGNORED
}

stock Create_Slash(id,iEnt,seq)
{
	new Float:vecOrigin[3], Float:vecAngle[3];
	GetGunPosition(id, vecOrigin);
	pev(id, pev_v_angle, vecAngle);
	vecAngle[0] = -vecAngle[0];
	
	new pEntity = DPS_Entites(id,"models/dualswordfx.mdl",vecOrigin,vecOrigin,0.01,SOLID_NOT,seq)
		
	// Set info for ent	
	Set_Entity_Mode(pEntity, 0)
	set_pev(pEntity, pev_scale, 0.1);
	set_pev(pEntity, pev_iuser1, iEnt);
	set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
	set_pev(pEntity, pev_angles, vecAngle);
	set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
}

stock DPS_Special(id, seq, Float:fTime)
{
	new Float:VecOrig[3], Float:VecAng[3]
	pev(id, pev_origin, VecOrig)
	pev(id, pev_angles, VecAng)
	
	new iEfx = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	set_pev(iEfx, pev_classname, "dps_entytyd");
	set_pev(iEfx, pev_origin, VecOrig)
	set_pev(iEfx, pev_frame, 0.0)
	set_pev(iEfx, pev_animtime, get_gametime())
	set_pev(iEfx, pev_framerate, 1.0)
	set_pev(iEfx, pev_sequence, seq)
	engfunc(EngFunc_SetModel, iEfx, "models/dualsword_skill.mdl")
	dllfunc(DLLFunc_Spawn, iEfx)
	Set_Entity_Mode(iEfx, 1)
	set_pev(iEfx, pev_angles, VecAng)
	set_pev(iEfx, pev_solid, SOLID_NOT)
	set_pev(iEfx, pev_owner, id)
	set_pev(iEfx, pev_velocity, Float:{0.01,0.01,0.01});
	set_pev(iEfx, pev_fuser1, get_gametime() + fTime)
	set_pev(iEfx, pev_nextthink, get_gametime() + 0.01)
}

stock DPS_RealSpecial(id, iEnt, Float:fRange)
{
	new Float:fTimeEffect;
	pev(iEnt, pev_fuser4, fTimeEffect);
	
	if (g_check[id] == 7 && fTimeEffect && fTimeEffect <= get_gametime())
	{
		KnifeAttack_Global(id, false, get_pcvar_float(cvar_special_range)*2.0, 180.0, get_pcvar_float(cvar_damage_special), get_pcvar_float(cvar_knockback[2]))
			
		new Float:vecOrigin3[2][3], Float:vecOrigin[3];
		pev(id, pev_origin, vecOrigin3[0]);
		pev(id, pev_origin, vecOrigin);
		xs_vec_copy(vecOrigin3[0], vecOrigin3[1]);
		
		new Float:fFloat = random_float(fRange * -0.85, fRange * 0.85);
		vecOrigin3[0][2] = vecOrigin3[1][2] = vecOrigin3[0][2] + random_float(-5.0, 65.0);
		
		switch (random(3))
		{
			case 0:
			{
				vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
				vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
				
				vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
				vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
			}
			case 1:
			{
				vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
				vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
				
				vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
				vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
			}
			case 2:
			{
				vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
				vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
				
				vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
				vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
			}
			case 3:
			{
				vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
				vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
				
				vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
				vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
			}
		}
		
		if (random_num(0,9) > 8)
		{
			new Float:vecAngle2[3];
			vecAngle2[0] = random_num(0,1) ? random_float(-30.0, -15.0) : random_float(15.0, 30.0);
			vecAngle2[1] = random_num(0,1) ? random_float(-180.0, 0.0) : random_float(0.0, 180.0);
			
			new pEntity = DPS_Entites(id,"models/dualsword_skillfx1.mdl",vecOrigin3[0],vecOrigin3[0],0.01,SOLID_NOT,0)	
			set_pev(pEntity, pev_angles, vecAngle2);
			set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
			set_pev(pEntity, pev_iuser1, 1);
			set_pev(pEntity, pev_iuser2, iEnt);
			set_pev(pEntity, pev_frame, 0.0);
			Set_Entity_Mode(pEntity, 2)
			set_pev(pEntity, pev_fuser1, get_gametime()+0.53);
			set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
			set_pev(pEntity, pev_fuser3, get_gametime()+0.31);
			set_pev(pEntity, pev_oldorigin, vecOrigin);
			set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
		}
		
		new pEntity = DPS_Entites(id,"models/dualsword_skillfx2.mdl",vecOrigin3[0],vecOrigin3[1],500.0,SOLID_TRIGGER,0)	
		set_pev(pEntity, pev_iuser1, 2);
		set_pev(pEntity, pev_iuser2, iEnt);
		Set_Entity_Mode(pEntity, 2)
		set_pev(pEntity, pev_frame, 0.0);
		set_pev(pEntity, pev_oldorigin, vecOrigin);
		set_pev(pEntity, pev_fuser1, get_gametime()+0.2);
		set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
		set_pev(pEntity, pev_fuser3, get_gametime()+0.3);
		set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
		
		set_pev(iEnt, pev_fuser4, get_gametime()+0.05);
	}
}

stock DPS_Entites(id, models[], Float:Start[3], Float:End[3], Float:speed, solid, seq, move=MOVETYPE_FLY)
{
	new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
		
	// Set info for ent	
	set_pev(pEntity, pev_movetype, move);
	set_pev(pEntity, pev_owner, id);
	engfunc(EngFunc_SetModel, pEntity, models);
	set_pev(pEntity, pev_classname, "dps_entytyd");
	set_pev(pEntity, pev_mins, Float:{-1.0, -1.0, -1.0});
	set_pev(pEntity, pev_maxs, Float:{1.0, 1.0, 1.0});
	set_pev(pEntity, pev_origin, Start);
	set_pev(pEntity, pev_gravity, 0.01);
	set_pev(pEntity, pev_solid, solid);
	
	static Float:Velocity[3];
	Stock_Get_Speed_Vector(Start, End, speed, Velocity);
	set_pev(pEntity, pev_velocity, Velocity);

	new Float:vecVAngle[3]; pev(id, pev_v_angle, vecVAngle);
	vector_to_angle(Velocity, vecVAngle)
	
	if(vecVAngle[0] > 90.0) vecVAngle[0] = -(360.0 - vecVAngle[0]);
	set_pev(pEntity, pev_angles, vecVAngle);
	
	set_pev(pEntity, pev_rendermode, kRenderTransAdd);
	set_pev(pEntity, pev_renderamt, 255.0);
	set_pev(pEntity, pev_sequence, seq)
	set_pev(pEntity, pev_animtime, get_gametime());
	set_pev(pEntity, pev_framerate, 1.0)
	return pEntity;
}

stock Set_Entity_Mode(iEnt, mode) set_pev(iEnt, pev_iuser3, mode)
stock Get_Entity_Mode(iEnt) return pev(iEnt,pev_iuser3)

stock SendSound(id, chan, sample[]) emit_sound(id, chan, sample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

stock Stock_Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
	xs_vec_sub(origin2, origin1, new_velocity)
	new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
	xs_vec_mul_scalar(new_velocity, num, new_velocity)
}
stock GetGunPosition(id, Float:vecSrc[3])
{
	new Float:vecViewOfs[3];
	pev(id, pev_origin, vecSrc);
	pev(id, pev_view_ofs, vecViewOfs);
	xs_vec_add(vecSrc, vecViewOfs, vecSrc);
}
stock KnifeAttack_Global(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
{
	new iHitResult
	if(fAngle > 0.0) iHitResult = KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
	else iHitResult = KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack)

	return iHitResult
}

stock KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bitsDamageType = DMG_NEVERGIB | DMG_CLUB)
{
	new Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
	GetGunPosition(id, vecSrc);

	pev(id, pev_v_angle, v_angle);
	engfunc(EngFunc_MakeVectors, v_angle);

	global_get(glb_v_forward, vecForward);
	xs_vec_mul_scalar(vecForward, flRange, vecForward);
	xs_vec_add(vecSrc, vecForward, vecEnd);

	new tr = create_tr2();
	engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);

	new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
	if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
	
	get_tr2(tr, TR_flFraction, flFraction);

	new iHitResult = RESULT_HIT_NONE;
	
	if (flFraction < 1.0)
	{
		new pEntity = get_tr2(tr, TR_pHit);
		iHitResult = RESULT_HIT_WORLD;
		
		if (pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
		{
			if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
				flDamage *= 1.0;

			iHitResult = RESULT_HIT_PLAYER;
		}

		if (pev_valid(pEntity))
		{
			engfunc(EngFunc_MakeVectors, v_angle);
			global_get(glb_v_forward, vecForward);

			if (iHitgroup != -1)
				set_tr2(tr, TR_iHitgroup, iHitgroup);

			ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, bitsDamageType);
			ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, bitsDamageType)
			Stock_Fake_KnockBack(id, pEntity, flKnockBack)
			
			if (IsAlive(pEntity))
			{
				free_tr2(tr);
				return iHitResult;
			}
		}
	}
	free_tr2(tr);
	return iHitResult;
}

stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
{
	new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
	pev(id, pev_origin, vecOrigin);

	new iHitResult = RESULT_HIT_NONE;
	GetGunPosition(id, vecSrc);

	pev(id, pev_v_angle, v_angle);
	engfunc(EngFunc_MakeVectors, v_angle);

	global_get(glb_v_forward, vecForward);
	xs_vec_mul_scalar(vecForward, flRange, vecForward);
	xs_vec_add(vecSrc, vecForward, vecEnd);

	new tr = create_tr2();
	engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
	
	new Float:EndPos2[3]
	get_tr2(tr, TR_vecEndPos, EndPos2)
	
	new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
	if (flFraction < 1.0) 
	{
		iHitResult = RESULT_HIT_WORLD;
		if(bStab) Stock_SakuraEffect(id, EndPos2)
	}
	
	new Float:vecEndZ = vecEnd[2];
	
	new pEntity = -1;
	while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
	{
		if (!pev_valid(pEntity))
			continue;
		if (id == pEntity)
			continue;
		if (!IsAlive(pEntity))
			continue;
		if (!CheckAngle(id, pEntity, fAngle))
			continue;

		GetGunPosition(id, vecSrc);
		Stock_Get_Origin(pEntity, vecEnd);

		vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);

		xs_vec_sub(vecEnd, vecSrc, vecForward);
		xs_vec_normalize(vecForward, vecForward);
		xs_vec_mul_scalar(vecForward, flRange, vecForward);
		xs_vec_add(vecSrc, vecForward, vecEnd);

		engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
		get_tr2(tr, TR_flFraction, flFraction);

		if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
		get_tr2(tr, TR_flFraction, flFraction);

		if (flFraction < 1.0)
		{
			if (IsPlayer(pEntity) || IsHostage(pEntity))
			{
				iHitResult = RESULT_HIT_PLAYER;
				if(bStab) Stock_SakuraEffect(id, vecEnd)
				
				if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
					flDamage *= 1.0;
			}

			if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
			{
				engfunc(EngFunc_MakeVectors, v_angle);
				global_get(glb_v_forward, vecForward);

				if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);

				ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, DMG_NEVERGIB | DMG_CLUB);
				ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB)
				
				Stock_Fake_KnockBack(id, pEntity, flKnockBack)
			}
		}
		free_tr2(tr);
	}
	return iHitResult;
}

stock Set_WeaponAnim(id, anim)
{
	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 Stock_Set_Vis(iEnt, iVis = 1)
	set_pev(iEnt, pev_effects, iVis == 1 ? pev(iEnt, pev_effects) & ~EF_NODRAW : pev(iEnt, pev_effects) | EF_NODRAW)

stock Stock_Hook_Ent(ent, Float:TargetOrigin[3], Float:Speed, mode=0)
{
	static Float:fl_Velocity[3],Float:EntOrigin[3],Float:distance_f,Float:fl_Time
	pev(ent, pev_origin, EntOrigin)
	
	if(!mode)
	{
		distance_f = get_distance_f(EntOrigin, TargetOrigin)
		fl_Time = distance_f / Speed
			
		pev(ent, pev_velocity, fl_Velocity)
			
		fl_Velocity[0] = (TargetOrigin[0] - EntOrigin[0]) / fl_Time
		fl_Velocity[1] = (TargetOrigin[1] - EntOrigin[1]) / fl_Time
		fl_Velocity[2] = (TargetOrigin[2] - EntOrigin[2]) / fl_Time

		if(vector_length(fl_Velocity) > 1.0) set_pev(ent, pev_velocity, fl_Velocity)
		else set_pev(ent, pev_velocity, Float:{0.01, 0.01, 0.01})
	} else {
		static Float:fl_EntVelocity[3], Float:fl_Acc[3]
		Stock_Directed_Vector(TargetOrigin, EntOrigin, fl_Velocity)
		xs_vec_mul_scalar(fl_Velocity, Speed, fl_Velocity)
		
		for(new i =0; i<3; i++)
		{
			if(fl_Velocity[i] > fl_EntVelocity[i]) 
			{
				fl_Acc[i] = fl_Velocity[i]-fl_EntVelocity[i]
				fl_Acc[i] = floatmin(70.0, fl_Acc[i])
				fl_EntVelocity[i] += fl_Acc[i]
			}
			else if(fl_Velocity[i] < fl_EntVelocity[i])
			{
				fl_Acc[i] = fl_EntVelocity[i]-fl_Velocity[i]
				fl_Acc[i] = floatmin(70.0, fl_Acc[i])
				fl_EntVelocity[i] -= fl_Acc[i]
			}
		}
		set_pev(ent, pev_velocity, fl_EntVelocity)
	}
}

stock Stock_Directed_Vector(Float:start[3],Float:end[3],Float:reOri[3])
{	
	new Float:v3[3],i
	for(i=0;i<3;i++) v3[i]=start[i]-end[i]

	new Float:vl = vector_length(v3)
	for(i=0;i<3;i++) reOri[i] = v3[i] / vl
}

stock Stock_Get_Postion(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)
	xs_vec_add(vOrigin,vUp,vOrigin)
	pev(id, pev_v_angle, vAngle)
	
	engfunc(EngFunc_AngleVectors, vAngle, vForward, vRight, 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 IsPlayer(pEntity) return is_user_connected(pEntity)

stock IsHostage(pEntity)
{
	new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname))
	return equal(classname, "hostage_entity")
}

stock IsAlive(pEntity)
{
	if (pEntity < 1) return 0
	return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0)
}

stock CheckBack(iEnemy,id)
{
	new Float:anglea[3], Float:anglev[3]
	pev(iEnemy, pev_v_angle, anglea)
	pev(id, pev_v_angle, anglev)
	new Float:angle = anglea[1] - anglev[1] 
	if (angle < -180.0) angle += 360.0
	if (angle <= 45.0 && angle >= -45.0) return 1
	return 0
}

stock CheckAngle(iAttacker, iVictim, Float:fAngle)  return(Stock_CheckAngle(iAttacker, iVictim) > floatcos(fAngle,degrees))

stock Float:Stock_CheckAngle(id,iTarget)
{
	new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3]
	Stock_Get_Origin(id, vId_ori)
	Stock_Get_Origin(iTarget, vTar_ori)
	
	pev(id,pev_angles,vId_ang)
	for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i]
	
	fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1])
	
	if (fLength<=0.0)
	{
		vOricross[0]=0.0
		vOricross[1]=0.0
	} else {
		vOricross[0]=vOricross[0]*(1.0/fLength)
		vOricross[1]=vOricross[1]*(1.0/fLength)
	}
	
	engfunc(EngFunc_MakeVectors,vId_ang)
	global_get(glb_v_forward,vForward)
	
	fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1]
	return fRad   //->   RAD 90' = 0.5rad
}

stock Stock_Get_Origin(id, Float:origin[3])
{
	new Float:maxs[3],Float:mins[3]
	if (pev(id, pev_solid) == SOLID_BSP)
	{
		pev(id,pev_maxs,maxs)
		pev(id,pev_mins,mins)
		origin[0] = (maxs[0] - mins[0]) / 2 + mins[0]
		origin[1] = (maxs[1] - mins[1]) / 2 + mins[1]
		origin[2] = (maxs[2] - mins[2]) / 2 + mins[2]
	} else pev(id, pev_origin, origin)
}

public Stock_Fake_KnockBack(id, iVic, Float:iKb)
{
	if(iVic > 32) return
	
	new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
	pev(id, pev_origin, vAttacker)
	pev(iVic, pev_origin, vVictim)
	vAttacker[2] = vVictim[2] = 0.0
	flags = pev(id, pev_flags)
	
	xs_vec_sub(vVictim, vAttacker, vVictim)
	new Float:fDistance
	fDistance = xs_vec_len(vVictim)
	xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim)
	
	pev(iVic, pev_velocity, vVelocity)
	xs_vec_mul_scalar(vVictim, iKb, vVictim)
	xs_vec_mul_scalar(vVictim, 50.0, vVictim)
	vVictim[2] = xs_vec_len(vVictim) * 0.15
	
	if(flags &~ FL_ONGROUND)
	{
		xs_vec_mul_scalar(vVictim, 1.2, vVictim)
		vVictim[2] *= 0.4
	}
	if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim)
}	

stock Float:Stock_Get_Body_Dmg(iBody)
{
	switch (iBody)
	{
		case HIT_GENERIC: return 0.75
		case 1: return 4.0
		case 2: return 1.0
		case 3: return 1.25
		case 4,5,6,7: return 0.75
		default: return 0.75
	}
	return 1.0
}

stock Stock_SakuraEffect(id, Float:vecOri[3])
{
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOri)
	write_byte(TE_BLOODSPRITE)
	engfunc(EngFunc_WriteCoord,vecOri[0])
	engfunc(EngFunc_WriteCoord,vecOri[1])
	engfunc(EngFunc_WriteCoord,vecOri[2])
	write_short(ef_sakura[g_mode[id]?2:0])
	write_short(ef_sakura[g_mode[id]?3:1])
	write_byte(g_mode[id]?178:128)
	write_byte(random_num(2,3))
	message_end()
}

stock can_damage(id1, id2)
{
	if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33)
		return 1
		
	// Check team
	return(get_pdata_int(id1, 114) != get_pdata_int(id2, 114))
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/

Any ideas?
Attached Files
File Type: zip [CSO] Dualsword.zip (2.82 MB, 40 views)
File Type: sma Get Plugin or Get Source (zp_dps.sma - 318 views - 33.9 KB)
File Type: sma Get Plugin or Get Source (dps.sma - 339 views - 33.7 KB)
SaBBa is offline
thEsp
BANNED
Join Date: Aug 2017
Old 01-14-2019 , 07:22   Re: Plugin crashes on server, but works on local
Reply With Quote #2

If it crashes for others, Have you added files into the server?
thEsp is offline
Abiss32
Junior Member
Join Date: Dec 2018
Old 01-22-2019 , 19:18   Re: Plugin crashes on server, but works on local
Reply With Quote #3

I had used this plugin and i think that the code has something to do with the crashes
also it may crash while you use special attack and switch to other weapon i have similar plugin of it but its too buggy too
Abiss32 is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 02:38.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode