Skull 11 and janus 3 weapons

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

Skull 11 and janus 3 weapons

#1

Post by czirimbolo » 5 years ago

Can someone convert this 2 guns and make it for vips only?

SKULL 11

Code: Select all

/* 
	Plugin generated by AMXX-Studio 
	Visit to: Zombie-Mod.ru; Next21.ru; Aghl.ru; ZombieLite.ru
	Skull-11 created by Chrescoe1
	15.03.2015 v0.1
*/
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>

#define PLUGIN "Skull-11"
#define VERSION "0.1"
#define AUTHOR "Chrescoe1"

#define weapon_name	"weapon_xm1014"
#define weapon_new	"dm_skull11"

//Linux extra offsets
#define pData_Player				5
#define pData_Item				4

// CWeaponBox
#define pDataKey_WeaponBoxItems			34

//CBasePlayerItem
#define pDataKey_iOwner				41
#define pDataKey_iNext				42
#define pDataKey_iId				43

//CBasePlayerWeapon
#define pDataKey_flNextPrimaryAttack		46
#define pDataKey_flNextTimeWeaponIdle		48
#define pDataKey_iPrimaryAmmoType		49
#define pDataKey_iClip				51
#define pDataKey_iInReload			54
#define pDataKey_iSpecialReload			55
#define pDataKey_iState				74

//CBaseMonster
#define pDataKey_iLastHitGroup			75
#define pDataKey_flNextAttack			83

//CBasePlayer
#define pDataKey_iPlayerItems			367
#define pDataKey_iActiveItem			373	
#define pDataKey_ibpAmmo			376

//Check
#define WEAPON_KEY				195
#define Is_CustomItem(%0)			(pev(%0,pev_impulse)==WEAPON_KEY)

#define model_v		"models/dm/v_skull11.mdl"
#define model_p		"models/dm/p_skull11.mdl"
#define model_w		"models/dm/w_skull11.mdl"

#define weapon_punchangle	0.8
#define weapon_damage		1.25
#define weapon_damage2		0.75
#define weapon_aspeed		0.325
#define weapon_aspeed2		0.61
#define weapon_ammo		15
#define weapon_bpammo		60
new const sounds_dump[][]={
	"weapons/skull11_boltpull.wav",
	"weapons/skull11_clipin.wav",
	"weapons/skull11_clipout.wav",
	"weapons/skull11_shoot1.wav"
}
#define sound_shot	"weapons/skull11_shoot1.wav"
new const precache_dump[][]={
	"sprites/dm_skull11.txt",
	"sprites/dm/640hud2.spr",
	"sprites/dm/640hud71.spr"
}
new Msg_WeaponList
new g_AllocString_V,g_AllocString_P

new bool:sec_attack,abc
new zp_extraitemid
//Amxx
public plugin_precache(){
	engfunc(EngFunc_PrecacheModel,model_v)
	engfunc(EngFunc_PrecacheModel,model_p)
	engfunc(EngFunc_PrecacheModel,model_w)
	g_AllocString_V = engfunc(EngFunc_AllocString, model_v)
	g_AllocString_P = engfunc(EngFunc_AllocString, model_p)
	new i;
	for(i=0;i<sizeof(sounds_dump);i++)engfunc(EngFunc_PrecacheSound,sounds_dump[i])
	for(i=0;i<sizeof(precache_dump);i++)engfunc(EngFunc_PrecacheGeneric,precache_dump[i])
	register_forward(FM_Spawn,"HookFm_Spawn",0)
}
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	RegisterHam(Ham_Item_Deploy,weapon_name,"HookHam_Weapon_Deploy",1)
	RegisterHam(Ham_Item_AddToPlayer,weapon_name,"HookHam_Weapon_Add",1)
	RegisterHam(Ham_Item_PostFrame,weapon_name,"HookHam_Weapon_Frame",0)
	
	RegisterHam(Ham_Weapon_Reload,weapon_name,"HookHam_Weapon_Reload",0)
	RegisterHam(Ham_Weapon_WeaponIdle,weapon_name,"HookHam_Weapon_Idle",0)
	RegisterHam(Ham_Weapon_PrimaryAttack,weapon_name,"HookHam_Weapon_PrimaryAttack",0)
	
	RegisterHam(Ham_Spawn,"weaponbox","HookHam_WeaponBox_Spawn",1)
	
	register_forward(FM_SetModel,"HookFm_SetModel",0)
	register_forward(FM_UpdateClientData,"HookFm_UpdateClientData",1)
	
	Msg_WeaponList = get_user_msgid("WeaponList");
	zp_extraitemid=zp_register_extra_item("Skull-11",15,ZP_TEAM_HUMAN)
	register_clcmd(weapon_new,"hook_item")
	// Add your code here...
}
//ZP
public zp_extra_item_selected(id,itemid)if(itemid==zp_extraitemid)get_item(id)
//Cl cmds
public get_item(id){
	UTIL_DropWeapon(id,1);
	new weapon=make_weapon();if(weapon<=0) return
	if(!ExecuteHamB(Ham_AddPlayerItem, id, weapon)) {engfunc(EngFunc_RemoveEntity, weapon);return;}
	ExecuteHam(Ham_Item_AttachToPlayer,weapon, id)
	new ammotype = pDataKey_ibpAmmo +get_pdata_int(weapon, pDataKey_iPrimaryAmmoType,pData_Item)
	new ammo=get_pdata_int(id, ammotype,pData_Player)
	if(ammo< weapon_bpammo)set_pdata_int(id, ammotype, weapon_bpammo,pData_Player)
	set_pdata_int(weapon,pDataKey_iClip,weapon_ammo,pData_Item)
	emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
public hook_item(id){
	engclient_cmd(id,weapon_name)
	return PLUGIN_HANDLED
}
//Ham hooks
public HookHam_Weapon_Deploy(ent){
	if(!Is_CustomItem(ent))return HAM_IGNORED
	static id;id=get_pdata_cbase(ent,pDataKey_iOwner,pData_Item)

	set_pev_string(id, pev_viewmodel2, g_AllocString_V)
	set_pev_string(id, pev_weaponmodel2, g_AllocString_P)
	set_pdata_float(ent,pDataKey_flNextPrimaryAttack,1.2,pData_Item)
	set_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,1.2,pData_Item)
	Play_WeaponAnim(id,4)
	return HAM_IGNORED
}
public HookHam_Weapon_Add(ent,id){
	switch(pev(ent, pev_impulse)){
		case WEAPON_KEY:Weaponlist(id,true)
		case 0:Weaponlist(id,false)
	}
	return HAM_IGNORED
}
public HookHam_Weapon_Frame(ent){
	if(!Is_CustomItem(ent)) return HAM_IGNORED;
	static id; id = get_pdata_cbase(ent, pDataKey_iOwner,pData_Item);
	if(get_pdata_int(ent, pDataKey_iInReload,pData_Item)){
		static clip,ammotype,ammo,j
		clip = get_pdata_int(ent, pDataKey_iClip,pData_Item);
		ammotype = pDataKey_ibpAmmo + get_pdata_int(ent, pDataKey_iPrimaryAmmoType,pData_Item);
		ammo = get_pdata_int(id, ammotype,pData_Player);
		j = min(weapon_ammo - clip, ammo);
		set_pdata_int(ent, pDataKey_iClip, clip+j,pData_Item);
		set_pdata_int(id, ammotype, ammo-j,pData_Player);
		set_pdata_int(ent, pDataKey_iInReload,0,pData_Item);
	}else if(pev(id,pev_button)&IN_ATTACK2&&get_pdata_float(ent,pDataKey_flNextPrimaryAttack,pData_Item)<=0.0){
		sec_attack=true
		ExecuteHamB(Ham_Weapon_PrimaryAttack,ent)
		sec_attack=false
	}
	return HAM_IGNORED;
}
public HookHam_Weapon_Reload(ent){
	if(!Is_CustomItem(ent)) return HAM_IGNORED;
	
	static clip; clip = get_pdata_int(ent, pDataKey_iClip, pData_Item);
	if(clip >= weapon_ammo) return HAM_SUPERCEDE;
	
	static id; id = get_pdata_cbase(ent, pDataKey_iOwner, pData_Item);
	if(get_pdata_int(id,pDataKey_ibpAmmo+get_pdata_int(ent,pDataKey_iPrimaryAmmoType,pData_Item),pData_Player)<=0)return HAM_SUPERCEDE
	
	set_pdata_int(ent, pDataKey_iClip, 0, pData_Item);
	ExecuteHam(Ham_Weapon_Reload, ent);
	set_pdata_int(ent, pDataKey_iClip, clip, pData_Item);
	set_pdata_int(ent, pDataKey_iInReload, 1, pData_Item);
	set_pdata_float(ent,pDataKey_flNextPrimaryAttack,3.86,pData_Item)
	set_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,3.86,pData_Item)
	set_pdata_float(id,pDataKey_flNextAttack,3.86,pData_Player) 
	Play_WeaponAnim(id,3)
	return HAM_SUPERCEDE;
}
public HookHam_Weapon_Idle(ent){
	if(!Is_CustomItem(ent))return HAM_IGNORED
	if(get_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,pData_Item)>0.0)return HAM_IGNORED
	set_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,1.7,pData_Item)
	Play_WeaponAnim(get_pdata_cbase(ent,pDataKey_iOwner,pData_Item),0)
	return HAM_SUPERCEDE
}
public HookHam_Weapon_PrimaryAttack(ent){
	if(!Is_CustomItem(ent))return HAM_IGNORED
	static ammo;ammo=get_pdata_int(ent,pDataKey_iClip,pData_Item);
	if(ammo<=0){
		ExecuteHam(Ham_Weapon_PlayEmptySound, ent);
		set_pdata_float(ent,pDataKey_flNextPrimaryAttack,sec_attack?weapon_aspeed2:weapon_aspeed,pData_Item)
		return HAM_SUPERCEDE
	}
		
	static id;id=get_pdata_cbase(ent,pDataKey_iOwner,pData_Item);abc=id
	static Float:user_punchangle[3];pev(id,pev_punchangle,user_punchangle)
	static fm_hooktrace;fm_hooktrace=register_forward(FM_TraceLine,"HookFm_TraceLine",true)
	static fm_playbackevent;fm_playbackevent=register_forward(FM_PlaybackEvent,"HookFm_PlayBackEvent",false)
	
	state FireBullets: Enabled;
	ExecuteHam(Ham_Weapon_PrimaryAttack,ent)
	state FireBullets: Disabled;
	
	unregister_forward(FM_TraceLine,fm_hooktrace,true)
	unregister_forward(FM_PlaybackEvent,fm_playbackevent,false)
	
	static Float:user_newpunch[3];pev(id,pev_punchangle,user_newpunch)
	user_newpunch[0]=user_punchangle[0]+(user_newpunch[0]-user_punchangle[0])*weapon_punchangle
	user_newpunch[1]=user_punchangle[1]+(user_newpunch[1]-user_punchangle[1])*weapon_punchangle
	user_newpunch[2]=user_punchangle[2]+(user_newpunch[2]-user_punchangle[2])*weapon_punchangle
	set_pev(id,pev_punchangle,user_newpunch)
	
	emit_sound(id, CHAN_WEAPON,sound_shot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	Play_WeaponAnim(id,random_num(1,2))
	
	set_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,1.03,pData_Item)
	set_pdata_float(ent,pDataKey_flNextPrimaryAttack,sec_attack?weapon_aspeed2:weapon_aspeed,pData_Item)
	set_pdata_int(ent,pDataKey_iClip,ammo-1,pData_Item)
	
	return HAM_SUPERCEDE
}
public HookHam_TakeDamage(victim,inflictor,attacker, Float:damage) <FireBullets: Enabled>{SetHamParamFloat(4,damage*(sec_attack?weapon_damage2:weapon_damage));return HAM_OVERRIDE;}
public HookHam_TakeDamage() <FireBullets: Disabled> { return HAM_IGNORED; }
public HookHam_TakeDamage() <> { return HAM_IGNORED; }

public HookHam_WeaponBox_Spawn(ent)state SetModel: Enabled;
//Fakemeta
public HookFm_SetModel(ent,str[]) <SetModel: Enabled>{
	state SetModel: Disabled; 
	static i, classname[32], item; pev(ent, pev_classname, classname, 31);
	if(!equal(classname, "weaponbox")) return FMRES_IGNORED;
	for(i = 0; i < 6; i++) {
		item = get_pdata_cbase(ent, pDataKey_WeaponBoxItems + i, 4);
		if(item > 0 && Is_CustomItem(item)) {
			engfunc(EngFunc_SetModel, ent, model_w);
			return FMRES_SUPERCEDE;
		}
	}
	return FMRES_IGNORED;
}
public HookFm_SetModel() <SetModel: Disabled> { return FMRES_IGNORED; }
public HookFm_SetModel() <> { return FMRES_IGNORED; }
public HookFm_PlayBackEvent()return FMRES_SUPERCEDE
public HookFm_TraceLine(Float:tr_start[3],Float:tr_end[3],tr_flag,tr_ignore,tr){
	
	/*No recoil*/
	if(sec_attack==true){
		static Float:Origin[3];pev(abc,pev_origin,Origin)
		static Float:vOfs[3];pev(abc,pev_view_ofs,vOfs)
		static Float:vAngle[3];pev(abc,pev_v_angle,vAngle)
		static Float:VecFow[3];angle_vector(vAngle,ANGLEVECTOR_FORWARD,VecFow)
		VecFow[0]=Origin[0]+vOfs[0]+VecFow[0]*17000.0
		VecFow[1]=Origin[1]+vOfs[1]+VecFow[1]*17000.0
		VecFow[2]=Origin[2]+vOfs[2]+VecFow[2]*17000.0
		engfunc(EngFunc_TraceLine,tr_start,VecFow,tr_flag,tr_ignore,tr)
	}
	/*No recoil end*/
	
	static hit;hit=get_tr2(tr,TR_pHit)
	static Decal
	static glassdecal;if(!glassdecal)glassdecal=engfunc( EngFunc_DecalIndex, "{bproof1" )
	hit=get_tr2(tr,TR_pHit)
	if(hit>0&&pev_valid(hit))
		if(pev(hit,pev_solid)!=SOLID_BSP)return FMRES_IGNORED
		else if(pev(hit,pev_rendermode)!=0)Decal=glassdecal
		else Decal=random_num(41,45)
	else Decal=random_num(41,45)

	static Float: vecEnd[3];get_tr2(tr, TR_vecEndPos, vecEnd)
	
	engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
	write_byte(TE_GUNSHOTDECAL)
	engfunc(EngFunc_WriteCoord, vecEnd[0])
	engfunc(EngFunc_WriteCoord, vecEnd[1])
	engfunc(EngFunc_WriteCoord, vecEnd[2])
	write_short(hit>0?hit:0)
	write_byte(Decal)
	message_end()
	
	static Float:WallVector[3];get_tr2(tr, TR_vecPlaneNormal, WallVector)
	
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecEnd, 0);
	write_byte(TE_STREAK_SPLASH)
	engfunc(EngFunc_WriteCoord, vecEnd[0]);
	engfunc(EngFunc_WriteCoord, vecEnd[1]);
	engfunc(EngFunc_WriteCoord, vecEnd[2]);
	engfunc(EngFunc_WriteCoord, WallVector[0]*random_float(25.0,30.0));
	engfunc(EngFunc_WriteCoord, WallVector[1]*random_float(25.0,30.0));
	engfunc(EngFunc_WriteCoord, WallVector[2]*random_float(25.0,30.0));
	write_byte(111)	//colorid
	write_short(12)	//count
	write_short(3)	//speed
	write_short(75)	//random velocity
	message_end()
	return FMRES_IGNORED
}
public HookFm_UpdateClientData(id, SendWeapons, CD_Handle) {
	static item;item=get_pdata_cbase(id, pDataKey_iActiveItem,pData_Player)
	if(item<=0||!Is_CustomItem(item))return FMRES_IGNORED
	set_cd(CD_Handle, CD_flNextAttack,99999.0)
	return FMRES_HANDLED
}
public HookFm_Spawn(id){
	static ClName[32];pev(id,pev_classname,ClName,31)
	if(strlen(ClName)<5)return FMRES_IGNORED
	static Trie:ClBuffer;if(!ClBuffer)ClBuffer = TrieCreate()
	if(!TrieKeyExists(ClBuffer,ClName)){
		TrieSetCell(ClBuffer,ClName, 1)
		RegisterHamFromEntity(Ham_TakeDamage,id,"HookHam_TakeDamage",0)
	}
	return FMRES_IGNORED
}
//stocks
stock make_weapon() {
	static ent; 
	static g_AllocString_E;
	if(g_AllocString_E||(g_AllocString_E=engfunc(EngFunc_AllocString,weapon_name)))
		ent = engfunc(EngFunc_CreateNamedEntity, g_AllocString_E)
	else return 0
	if(ent <= 0) return 0;
	set_pev(ent, pev_spawnflags, SF_NORESPAWN);
	set_pev(ent, pev_impulse, WEAPON_KEY);
	ExecuteHam(Ham_Spawn, ent)
	return ent
}
stock UTIL_DropWeapon(id, slot) {
	static iEntity; iEntity = get_pdata_cbase(id, (pDataKey_iPlayerItems + slot), pData_Player);
	if(iEntity > 0) {
		static iNext,szWeaponName[32];
		do{
			iNext = get_pdata_cbase(iEntity, pDataKey_iNext, 4);
			if(get_weaponname(get_pdata_int(iEntity, pDataKey_iId, 4), szWeaponName, 31))
				engclient_cmd(id, "drop", szWeaponName)
		} while(( iEntity = iNext) > 0);
	}
}
stock Play_WeaponAnim(id,anim){
	set_pev(id, pev_weaponanim,anim)
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
	write_byte(anim)
	write_byte(0)
	message_end()
}
//5, 	32, -1, -1, 0, 12,5,  0,	// weapon_xm1014
stock Weaponlist(id,bool:set) {
	if(!is_user_connected(id))return
	message_begin(MSG_ONE, Msg_WeaponList, _, id);
	write_string(set==false?weapon_name:weapon_new);
	write_byte(5);
	write_byte(weapon_bpammo);
	write_byte(-1);
	write_byte(-1);
	write_byte(0);
	write_byte(12);
	write_byte(5);
	write_byte(0);
	message_end();
}

JANUS 3:

Code: Select all

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

#define ENG_NULLENT			-1
#define EV_INT_WEAPONKEY	EV_INT_impulse
#define janus3_WEAPONKEY 	5879122
#define MAX_PLAYERS  		32
#define WEAPON_ANIMEXT "carbine"

const USE_STOPPED = 0
const OFFSET_ACTIVE_ITEM = 373
const OFFSET_WEAPONOWNER = 41
const OFFSET_LINUX = 5
const OFFSET_LINUX_WEAPONS = 4
const m_szAnimExtention = 492

#if cellbits == 32
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_CLIPAMMO = 65
#endif

#define WEAP_LINUX_XTRA_OFF		4
#define m_fKnown					44
#define m_flNextPrimaryAttack 		46
#define m_flTimeWeaponIdle			48
#define m_iClip					51
#define m_fInReload				54
#define PLAYER_LINUX_XTRA_OFF	5
#define m_flNextAttack				83
#define janus3_READY 20
#define janus3_RELOAD_TIME	3.0

enum
{
	ANIM_IDLE = 0,
	ANIM_RELOAD_NORMAL,
	ANIM_DRAW_NORMAL,
	ANIM_SHOOT_NORMAL,
	ANIM_SHOOT_SIGNAL,
	ANIM_CHANGE_1,
	ANIM_IDLE_B,
	ANIM_DRAW_B,
	ANIM_SHOOT_B,
	ANIM_SHOOT_B2,
	ANIM_SHOOT_B3,
	ANIM_CHANGE_2,
	ANIM_SIGNAL,
	ANIM_RELOAD_SIGNAL,
	ANIM_DRAW_SIGNAL
}

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

new const Fire_Sounds[][] = { "weapons/janusmk5-12.wav" }
new const Fire_Sounds2[][] = { "weapons/janusmk5-2.wav" }

new janus3_V_MODEL[64] = "models/v_janus3.mdl"
new janus3_P_MODEL[64] = "models/p_janus3.mdl"
new janus3_W_MODEL[64] = "models/w_janus3.mdl"

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

new cvar_dmg_janus3, cvar_dmg2_janus3, cvar_recoil_janus3, cvar_recoil2_janus3, cvar_clip_janus3, cvar_spd_janus3, cvar_spd2_janus3, cvar_janus3_ammo
new g_MaxPlayers, g_orig_event_janus3, g_IsInPrimaryAttack
new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
new g_has_janus3[33], g_clip_ammo[33], g_janus3_TmpClip[33], oldweap[33], janus3_mode[33], janus3_signal[33], siap_janus3[33]
new gmsgWeaponList, g_Ham_Bot, item_janus

const PRIMARY_WEAPONS_BIT_SUM = 
(1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<
CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
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_galil", "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" }

public plugin_init()
{
	register_plugin("Janus-3", "1.0", "m4m3ts")
	register_cvar("janus3_version", "m4m3ts", FCVAR_SERVER|FCVAR_SPONLY)
	register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
	register_event("CurWeapon","CurrentWeapon","be","1=1")
	RegisterHam(Ham_Spawn, "player", "Player_Spawn", 1)
	RegisterHam(Ham_Item_AddToPlayer, "weapon_galil", "fw_janus3_AddToPlayer")
	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)
	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_Weapon_PrimaryAttack, "weapon_galil", "fw_janus3_PrimaryAttack")
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil", "fw_janus3_PrimaryAttack_Post", 1)
	RegisterHam(Ham_Item_PostFrame, "weapon_galil", "janus3_ItemPostFrame")
	RegisterHam(Ham_Weapon_Reload, "weapon_galil", "janus3_Reload")
	RegisterHam(Ham_Weapon_Reload, "weapon_galil", "janus3_Reload_Post", 1)
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	RegisterHam(Ham_Weapon_WeaponIdle, "weapon_galil", "fw_janus3idleanim", 1)
	register_forward(FM_SetModel, "fw_SetModel")
	register_forward(FM_CmdStart, "fw_CmdStart")
	register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
	register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
	
	RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1)
	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)

	cvar_dmg_janus3 = register_cvar("zp_janus3_dmg", "1.0")
	cvar_dmg2_janus3 = register_cvar("zp_janus3_dmg2", "2.0")
	cvar_recoil_janus3 = register_cvar("zp_janus3_recoil", "0.8")
	cvar_recoil2_janus3 = register_cvar("zp_janus3_recoil2", "0.45")
	cvar_clip_janus3 = register_cvar("zp_janus3_clip", "50")
	cvar_spd_janus3 = register_cvar("zp_janus3_spd", "1.1")
	cvar_spd2_janus3 = register_cvar("zp_janus3_spd2", "0.07")
	cvar_janus3_ammo = register_cvar("zp_janus3_ammo", "200")
	
	item_janus = zp_register_extra_item("Janus-3", 20, ZP_TEAM_HUMAN)
		
	g_MaxPlayers = get_maxplayers()
        gmsgWeaponList = get_user_msgid("WeaponList")
}

public plugin_precache()
{
	precache_model(janus3_V_MODEL)
	precache_model(janus3_P_MODEL)
	precache_model(janus3_W_MODEL)
	for(new i = 0; i < sizeof Fire_Sounds; i++)
	precache_sound(Fire_Sounds[i])
	for(new i = 0; i < sizeof Fire_Sounds2; i++)
	precache_sound(Fire_Sounds2[i])
	precache_sound("weapons/janus3_boltpull1.wav")
	precache_sound("weapons/janus3_boltpull2.wav")
	precache_sound("weapons/janus3_clipin.wav")
	precache_sound("weapons/janus3_clipout.wav")
	precache_sound("weapons/janus3_draw.wav")
	precache_sound("weapons/janus3_change1.wav")
	precache_sound("weapons/janus3_change2.wav")
	m_iBlood[0] = precache_model("sprites/blood.spr")
	m_iBlood[1] = precache_model("sprites/bloodspray.spr")
        precache_generic("sprites/weapon_janus3.txt")
   	precache_generic("sprites/640hud109.spr")
    	precache_generic("sprites/640hud7.spr")
	
	register_clcmd("weapon_janus3", "weapon_hook")	
	register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
	register_clcmd("m4m3tsjns3", "give_janus3")
}

public client_putinserver(id)
{
	if(!g_Ham_Bot && is_user_bot(id))
	{
		g_Ham_Bot = 1
		set_task(0.1, "Do_RegisterHam_Bot", id)
	}
}

public Do_RegisterHam_Bot(id)
{
	RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage")
}

public weapon_hook(id)
{
    	engclient_cmd(id, "weapon_galil")
    	return PLUGIN_HANDLED
}

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_GALIL) return
	
	if(!g_has_janus3[iAttacker]) return

	static Float:flEnd[3]
	get_tr2(ptr, TR_vecEndPos, flEnd)
	
	if(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()
	}
	else
	{
		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 Player_Spawn(id)
{
	g_has_janus3[id] = false
}

public fwPrecacheEvent_Post(type, const name[])
{
	if (equal("events/galil.sc", name))
	{
		g_orig_event_janus3 = get_orig_retval()
		return FMRES_HANDLED
	}
	return FMRES_IGNORED
}

public client_connect(id)
{
	g_has_janus3[id] = false
}

public client_disconnect(id)
{
	g_has_janus3[id] = false
}

public zp_user_infected_post(id)
{
	if (zp_get_user_zombie(id))
	{
		g_has_janus3[id] = false
	}
}

public zp_extra_item_selected(id, itemid)
{
	if(itemid == item_janus) give_janus3(id)
}

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_galil.mdl"))
	{
		static iStoredAugID
		
		iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_galil", entity)
	
		if(!is_valid_ent(iStoredAugID))
			return FMRES_IGNORED
	
		if(g_has_janus3[iOwner])
		{
			entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, janus3_WEAPONKEY)
			
			g_has_janus3[iOwner] = false
			
			entity_set_model(entity, janus3_W_MODEL)
			
			return FMRES_SUPERCEDE
		}
	}
	return FMRES_IGNORED
}

public give_janus3(id)
{
	drop_weapons(id, 1)
	new iWep2 = give_item(id,"weapon_galil")
	if( iWep2 > 0 )
	{
		cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_janus3))
		cs_set_user_bpammo (id, CSW_GALIL, get_pcvar_num(cvar_janus3_ammo))	
		UTIL_PlayWeaponAnimation(id, ANIM_DRAW_NORMAL)
		set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
	}
	g_has_janus3[id] = true
	siap_janus3[id] = 1
	janus3_mode[id] = 1
	janus3_signal[id] = 0
	update_ammo(id)
	
	message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
	write_string("weapon_janus3")
	write_byte(4)
	write_byte(90)
	write_byte(-1)
	write_byte(-1)
	write_byte(0)
	write_byte(17)
	write_byte(CSW_GALIL)
	write_byte(0)
	message_end()
}

public fw_janus3_AddToPlayer(janus3, id)
{
	if(!is_valid_ent(janus3) || !is_user_connected(id))
		return HAM_IGNORED
	
	if(entity_get_int(janus3, EV_INT_WEAPONKEY) == janus3_WEAPONKEY)
	{
		g_has_janus3[id] = true
		
		entity_set_int(janus3, EV_INT_WEAPONKEY, 0)

		message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
		write_string("weapon_janus3")
		write_byte(4)
		write_byte(90)
		write_byte(-1)
		write_byte(-1)
		write_byte(0)
		write_byte(17)
		write_byte(CSW_GALIL)
		write_byte(0)
		message_end()
		
	}
            else
	{
		message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
		write_string("weapon_galil")
		write_byte(4)
		write_byte(90)
		write_byte(-1)
		write_byte(-1)
		write_byte(0)
		write_byte(17)
		write_byte(CSW_GALIL)
		write_byte(0)
		message_end()
	}
	return HAM_IGNORED
}

public update_ammo(id)
{
	if(!is_user_alive(id))
		return
	
	static weapon_ent; weapon_ent = fm_get_user_weapon_entity(id, CSW_GALIL)
	if(!pev_valid(weapon_ent)) return
	
	engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id)
	write_byte(1)
	write_byte(CSW_GALIL)
	write_byte(cs_get_weapon_ammo(weapon_ent))
	message_end()
	
	message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("AmmoX"), _, id)
	write_byte(1)
	write_byte(cs_get_user_bpammo(id, CSW_GALIL))
	message_end()
}

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 CurrentWeapon(id)
{
     replace_weapon_models(id, read_data(2))

     if(read_data(2) != CSW_GALIL || !g_has_janus3[id])
          return
     
     static Float:iSpeed
     if(g_has_janus3[id])
          if(janus3_mode[id] != 3) iSpeed = get_pcvar_float(cvar_spd_janus3)
     
     static weapon[32],Ent
     get_weaponname(read_data(2),weapon,31)
     Ent = find_ent_by_owner(-1,weapon,id)
     if(Ent)
     {
          static Float:Delay
          Delay = get_pdata_float( Ent, 46, 4) * iSpeed
          if (Delay > 0.0)
          {
               set_pdata_float(Ent, 46, Delay, 4)
          }
     }
}

replace_weapon_models(id, weaponid)
{
	switch (weaponid)
	{
		case CSW_GALIL:
		{
			if (zp_get_user_zombie(id) || zp_get_user_survivor(id))
				return
			
			if(g_has_janus3[id])
			{
				set_pev(id, pev_viewmodel2, janus3_V_MODEL)
				set_pev(id, pev_weaponmodel2, janus3_P_MODEL)
				if(oldweap[id] != CSW_GALIL) 
				{
					if(janus3_mode[id] == 1) UTIL_PlayWeaponAnimation(id, ANIM_DRAW_NORMAL)
					if(janus3_mode[id] == 2) UTIL_PlayWeaponAnimation(id, ANIM_DRAW_SIGNAL)
					if(janus3_mode[id] == 3) UTIL_PlayWeaponAnimation(id, ANIM_DRAW_B)
					set_pdata_string(id, m_szAnimExtention * 4, WEAPON_ANIMEXT, -1 , 20)
					set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)

					message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
					write_string("weapon_janus3")
					write_byte(4)
					write_byte(90)
					write_byte(-1)
					write_byte(-1)
					write_byte(0)
					write_byte(17)
					write_byte(CSW_GALIL)
					write_byte(0)
					message_end()

				}
			}
		}
	}
	oldweap[id] = weaponid
}

public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
{
	if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_GALIL || !g_has_janus3[Player]))
		return FMRES_IGNORED
	
	set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
	return FMRES_HANDLED
}

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

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_janus3) || !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
}

public fw_janus3_PrimaryAttack_Post(Weapon)
{
	g_IsInPrimaryAttack = 0
	new Player = get_pdata_cbase(Weapon, 41, 4)
	
	new szClip, szAmmo
	get_user_weapon(Player, szClip, szAmmo)
	
	if(!is_user_alive(Player))
		return
	if(!g_has_janus3[Player])
		return

	if(janus3_mode[Player] != 3)
	{
		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_janus3),push)
		xs_vec_add(push,cl_pushangle[Player],push)
		set_pev(Player,pev_punchangle,push)
		
		emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		if(janus3_signal[Player] >= janus3_READY && siap_janus3[Player])
		{
			janus3_mode[Player] = 2
			set_task(12.7, "janus3_mode1", Player)
			emit_sound(Player, CHAN_VOICE, "weapons/change1_ready.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
			siap_janus3[Player] = 0
		}
		
		if(janus3_mode[Player] == 2) UTIL_PlayWeaponAnimation(Player, ANIM_SHOOT_SIGNAL)
		else UTIL_PlayWeaponAnimation(Player, ANIM_SHOOT_NORMAL)
	}
	else
	{
		if (!g_clip_ammo[Player]) szClip = 2
		
		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_recoil2_janus3),push)
		xs_vec_add(push,cl_pushangle[Player],push)
		set_pev(Player,pev_punchangle,push)
		
		emit_sound(Player, CHAN_WEAPON, Fire_Sounds2[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		fm_set_weapon_ammo(Weapon, szClip++)
		set_weapons_timeidle(Player, CSW_GALIL, get_pcvar_float(cvar_spd2_janus3))
		set_player_nextattackx(Player, get_pcvar_float(cvar_spd2_janus3))
		UTIL_PlayWeaponAnimation(Player, random_num(ANIM_SHOOT_B,ANIM_SHOOT_B3))
	}
}

public janus3_mode1(id)
{
	janus3_mode[id] = 1
	janus3_signal[id] = 0
	siap_janus3[id] = 1
	remove_task(id)
}

public fw_janus3idleanim(Weapon)
{
	new id = get_pdata_cbase(Weapon, 41, 4)

	if(!is_user_alive(id) || zp_get_user_zombie(id) || !g_has_janus3[id] || get_user_weapon(id) != CSW_GALIL)
		return HAM_IGNORED;

	if(janus3_mode[id] == 1) 
		return HAM_SUPERCEDE;
	
	if(janus3_mode[id] == 3 && get_pdata_float(Weapon, 48, 4) <= 0.25)
	{
		UTIL_PlayWeaponAnimation(id, ANIM_IDLE_B)
		set_pdata_float(Weapon, 48, 20.0, 4)
		return HAM_SUPERCEDE;
	}
	
	if(janus3_mode[id] == 2 && get_pdata_float(Weapon, 48, 4) <= 0.25) 
	{
		UTIL_PlayWeaponAnimation(id, ANIM_SIGNAL)
		set_pdata_float(Weapon, 48, 20.0, 4)
		return HAM_SUPERCEDE;
	}

	return HAM_IGNORED;
}

public fw_CmdStart(id, uc_handle, seed)
{
	if(!is_user_alive(id) || !is_user_connected(id))
		return
	if(get_user_weapon(id) != CSW_GALIL || !g_has_janus3[id])
		return
	
	static ent; ent = fm_get_user_weapon_entity(id, CSW_GALIL)
	if(!pev_valid(ent))
		return
	
	static CurButton
	CurButton = get_uc(uc_handle, UC_Buttons)

	if(CurButton & IN_ATTACK2)
	{
		if(janus3_mode[id] == 2 && get_pdata_float(id, 83, 5) <= 0.0)
		{
			remove_task(id)
			UTIL_PlayWeaponAnimation(id, ANIM_CHANGE_1)
			janus3_mode[id] = 3
			set_weapons_timeidle(id, CSW_GALIL, 1.7)
			set_player_nextattackx(id, 1.7)
			set_task(8.7, "back_normal", id)
			set_task(8.7, "back_normal2", id)
		}
	}
}

public back_normal(id)
{
	if(get_user_weapon(id) != CSW_GALIL || !g_has_janus3[id])
		return
		
	UTIL_PlayWeaponAnimation(id, ANIM_CHANGE_2)
	set_weapons_timeidle(id, CSW_GALIL, 1.8)
	set_player_nextattackx(id, 1.8)
}

public back_normal2(id)
{
	janus3_mode[id] = 1
	janus3_signal[id] = 0
	siap_janus3[id] = 1
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
	if (victim != attacker && is_user_connected(attacker))
	{
		if(get_user_weapon(attacker) == CSW_GALIL)
		{
			if(g_has_janus3[attacker])
			{
				if(janus3_mode[attacker] != 3)
				{
					SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_janus3))
					janus3_signal[attacker] ++
				}
				else SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg2_janus3))
			}
		}
	}
}

public message_DeathMsg(msg_id, msg_dest, id)
{
	static szTruncatedWeapon[33], iAttacker, iVictim
	
	get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
	
	iAttacker = get_msg_arg_int(1)
	iVictim = get_msg_arg_int(2)
	
	if(!is_user_connected(iAttacker) || iAttacker == iVictim)
		return PLUGIN_CONTINUE
	
	if(equal(szTruncatedWeapon, "galil") && get_user_weapon(iAttacker) == CSW_GALIL)
	{
		if(g_has_janus3[iAttacker])
			set_msg_arg_string(4, "galil")
	}
	return PLUGIN_CONTINUE
}

stock fm_cs_get_current_weapon_ent(id)
{
	return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
}

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

stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
	set_pev(Player, pev_weaponanim, Sequence)
	
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
	write_byte(Sequence)
	write_byte(pev(Player, pev_body))
	message_end()
}

public janus3_ItemPostFrame(weapon_entity) 
{
     new id = pev(weapon_entity, pev_owner)
     if (!is_user_connected(id))
          return HAM_IGNORED

     if (!g_has_janus3[id])
          return HAM_IGNORED

     static iClipExtra
     
     iClipExtra = get_pcvar_num(cvar_clip_janus3)
     new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)

     new iBpAmmo = cs_get_user_bpammo(id, CSW_GALIL)
     new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

     new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF) 

     if( fInReload && flNextAttack <= 0.0 )
     {
	     new j = min(iClipExtra - iClip, iBpAmmo)
	
	     set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
	     cs_set_user_bpammo(id, CSW_GALIL, iBpAmmo-j)
		
	     set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
	     fInReload = 0
     }
     return HAM_IGNORED
}

public janus3_Reload(weapon_entity) 
{
     new id = pev(weapon_entity, pev_owner)
     if (!is_user_connected(id))
          return HAM_IGNORED

     if (!g_has_janus3[id])
          return HAM_IGNORED

     static iClipExtra

     if(g_has_janus3[id])
          iClipExtra = get_pcvar_num(cvar_clip_janus3)

     g_janus3_TmpClip[id] = -1

     new iBpAmmo = cs_get_user_bpammo(id, CSW_GALIL)
     new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

     if (iBpAmmo <= 0)
          return HAM_SUPERCEDE

     if (iClip >= iClipExtra)
          return HAM_SUPERCEDE
		  
     if(janus3_mode[id] == 3)
	      return HAM_SUPERCEDE

     g_janus3_TmpClip[id] = iClip

     return HAM_IGNORED
}

public janus3_Reload_Post(weapon_entity) 
{
	new id = pev(weapon_entity, pev_owner)
	if (!is_user_connected(id))
		return HAM_IGNORED

	if (!g_has_janus3[id])
		return HAM_IGNORED

	if (g_janus3_TmpClip[id] == -1)
		return HAM_IGNORED

	set_pdata_int(weapon_entity, m_iClip, g_janus3_TmpClip[id], WEAP_LINUX_XTRA_OFF)
	
	set_weapons_timeidle(id, CSW_GALIL, janus3_RELOAD_TIME)
	set_player_nextattackx(id, janus3_RELOAD_TIME)
	
	set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
	
	if(janus3_mode[id] == 2) UTIL_PlayWeaponAnimation(id, ANIM_RELOAD_SIGNAL)
	else UTIL_PlayWeaponAnimation(id, ANIM_RELOAD_NORMAL)

	return HAM_IGNORED
}

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

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, WEAP_LINUX_XTRA_OFF)
	set_pdata_float(entwpn, 47, TimeIdle, WEAP_LINUX_XTRA_OFF)
	set_pdata_float(entwpn, 48, TimeIdle + 0.5, WEAP_LINUX_XTRA_OFF)
}

stock fm_set_weapon_ammo(entity, amount)
{
	set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
}

stock drop_weapons(id, dropwhat)
{
     static weapons[32], num, i, weaponid
     num = 0
     get_user_weapons(id, weapons, num)
     
     for (i = 0; i < num; i++)
     {
          weaponid = weapons[i]
          
          if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
          {
               static wname[32]
               get_weaponname(weaponid, wname, sizeof wname - 1)
               engclient_cmd(id, "drop", wname)
          }
     }
}
Image

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

#2

Post by Night Fury » 5 years ago

Skull 11:
  1. /*
  2.     Plugin generated by AMXX-Studio
  3.     Visit to: Zombie-Mod.ru; Next21.ru; Aghl.ru; ZombieLite.ru
  4.     Skull-11 created by Chrescoe1
  5.     15.03.2015 v0.1
  6. */
  7. #include <zombie_escape>
  8. #include <fakemeta>
  9.  
  10. #define PLUGIN "Skull-11"
  11. #define VERSION "0.1"
  12. #define AUTHOR "Chrescoe1"
  13.  
  14. #define VIP_FLAG "VIP_A"
  15.  
  16. #define weapon_name "weapon_xm1014"
  17. #define weapon_new  "dm_skull11"
  18.  
  19. //Linux extra offsets
  20. #define pData_Player                5
  21. #define pData_Item              4
  22.  
  23. // CWeaponBox
  24. #define pDataKey_WeaponBoxItems         34
  25.  
  26. //CBasePlayerItem
  27. #define pDataKey_iOwner             41
  28. #define pDataKey_iNext              42
  29. #define pDataKey_iId                43
  30.  
  31. //CBasePlayerWeapon
  32. #define pDataKey_flNextPrimaryAttack        46
  33. #define pDataKey_flNextTimeWeaponIdle       48
  34. #define pDataKey_iPrimaryAmmoType       49
  35. #define pDataKey_iClip              51
  36. #define pDataKey_iInReload          54
  37. #define pDataKey_iSpecialReload         55
  38. #define pDataKey_iState             74
  39.  
  40. //CBaseMonster
  41. #define pDataKey_iLastHitGroup          75
  42. #define pDataKey_flNextAttack           83
  43.  
  44. //CBasePlayer
  45. #define pDataKey_iPlayerItems           367
  46. #define pDataKey_iActiveItem            373
  47. #define pDataKey_ibpAmmo            376
  48.  
  49. //Check
  50. #define WEAPON_KEY              195
  51. #define Is_CustomItem(%0)           (pev(%0,pev_impulse)==WEAPON_KEY)
  52.  
  53. #define model_v     "models/dm/v_skull11.mdl"
  54. #define model_p     "models/dm/p_skull11.mdl"
  55. #define model_w     "models/dm/w_skull11.mdl"
  56.  
  57. #define weapon_punchangle   0.8
  58. #define weapon_damage       1.25
  59. #define weapon_damage2      0.75
  60. #define weapon_aspeed       0.325
  61. #define weapon_aspeed2      0.61
  62. #define weapon_ammo     15
  63. #define weapon_bpammo       60
  64. new const sounds_dump[][]={
  65.     "weapons/skull11_boltpull.wav",
  66.     "weapons/skull11_clipin.wav",
  67.     "weapons/skull11_clipout.wav",
  68.     "weapons/skull11_shoot1.wav"
  69. }
  70. #define sound_shot  "weapons/skull11_shoot1.wav"
  71. new const precache_dump[][]={
  72.     "sprites/dm_skull11.txt",
  73.     "sprites/dm/640hud2.spr",
  74.     "sprites/dm/640hud71.spr"
  75. }
  76. new Msg_WeaponList
  77. new g_AllocString_V,g_AllocString_P
  78.  
  79. new bool:sec_attack,abc
  80. new zp_extraitemid
  81. //Amxx
  82. public plugin_precache(){
  83.     engfunc(EngFunc_PrecacheModel,model_v)
  84.     engfunc(EngFunc_PrecacheModel,model_p)
  85.     engfunc(EngFunc_PrecacheModel,model_w)
  86.     g_AllocString_V = engfunc(EngFunc_AllocString, model_v)
  87.     g_AllocString_P = engfunc(EngFunc_AllocString, model_p)
  88.     new i;
  89.     for(i=0;i<sizeof(sounds_dump);i++)engfunc(EngFunc_PrecacheSound,sounds_dump[i])
  90.     for(i=0;i<sizeof(precache_dump);i++)engfunc(EngFunc_PrecacheGeneric,precache_dump[i])
  91.     register_forward(FM_Spawn,"HookFm_Spawn",0)
  92. }
  93. public plugin_init() {
  94.     register_plugin(PLUGIN, VERSION, AUTHOR)
  95.    
  96.     RegisterHam(Ham_Item_Deploy,weapon_name,"HookHam_Weapon_Deploy",1)
  97.     RegisterHam(Ham_Item_AddToPlayer,weapon_name,"HookHam_Weapon_Add",1)
  98.     RegisterHam(Ham_Item_PostFrame,weapon_name,"HookHam_Weapon_Frame",0)
  99.    
  100.     RegisterHam(Ham_Weapon_Reload,weapon_name,"HookHam_Weapon_Reload",0)
  101.     RegisterHam(Ham_Weapon_WeaponIdle,weapon_name,"HookHam_Weapon_Idle",0)
  102.     RegisterHam(Ham_Weapon_PrimaryAttack,weapon_name,"HookHam_Weapon_PrimaryAttack",0)
  103.    
  104.     RegisterHam(Ham_Spawn,"weaponbox","HookHam_WeaponBox_Spawn",1)
  105.    
  106.     register_forward(FM_SetModel,"HookFm_SetModel",0)
  107.     register_forward(FM_UpdateClientData,"HookFm_UpdateClientData",1)
  108.    
  109.     Msg_WeaponList = get_user_msgid("WeaponList");
  110.     zp_extraitemid=ze_register_item("Skull-11",15,0)
  111.     register_clcmd(weapon_new,"hook_item")
  112.     ze_set_item_vip(zp_extraitemid, VIP_FLAG)
  113. }
  114.  
  115. public ze_select_item_pre(id, itemid)
  116. {
  117.     if (itemid != zp_extraitemid)
  118.         return ZE_ITEM_AVAILABLE
  119.  
  120.     if (ze_is_user_zombie(id))
  121.         return ZE_ITEM_DONT_SHOW
  122.  
  123.     return ZE_ITEM_AVAILABLE
  124. }
  125.  
  126. public ze_select_item_post(id, itemid)
  127. {
  128.     if(itemid != zp_extraitemid)
  129.         return
  130.    
  131.     get_item(id)
  132. }
  133.  
  134. //Cl cmds
  135. public get_item(id){
  136.     UTIL_DropWeapon(id,1);
  137.     new weapon=make_weapon();if(weapon<=0) return
  138.     if(!ExecuteHamB(Ham_AddPlayerItem, id, weapon)) {engfunc(EngFunc_RemoveEntity, weapon);return;}
  139.     ExecuteHam(Ham_Item_AttachToPlayer,weapon, id)
  140.     new ammotype = pDataKey_ibpAmmo +get_pdata_int(weapon, pDataKey_iPrimaryAmmoType,pData_Item)
  141.     new ammo=get_pdata_int(id, ammotype,pData_Player)
  142.     if(ammo< weapon_bpammo)set_pdata_int(id, ammotype, weapon_bpammo,pData_Player)
  143.     set_pdata_int(weapon,pDataKey_iClip,weapon_ammo,pData_Item)
  144.     emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  145. }
  146. public hook_item(id){
  147.     engclient_cmd(id,weapon_name)
  148.     return PLUGIN_HANDLED
  149. }
  150. //Ham hooks
  151. public HookHam_Weapon_Deploy(ent){
  152.     if(!Is_CustomItem(ent))return HAM_IGNORED
  153.     static id;id=get_pdata_cbase(ent,pDataKey_iOwner,pData_Item)
  154.  
  155.     set_pev_string(id, pev_viewmodel2, g_AllocString_V)
  156.     set_pev_string(id, pev_weaponmodel2, g_AllocString_P)
  157.     set_pdata_float(ent,pDataKey_flNextPrimaryAttack,1.2,pData_Item)
  158.     set_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,1.2,pData_Item)
  159.     Play_WeaponAnim(id,4)
  160.     return HAM_IGNORED
  161. }
  162. public HookHam_Weapon_Add(ent,id){
  163.     switch(pev(ent, pev_impulse)){
  164.         case WEAPON_KEY:Weaponlist(id,true)
  165.         case 0:Weaponlist(id,false)
  166.     }
  167.     return HAM_IGNORED
  168. }
  169. public HookHam_Weapon_Frame(ent){
  170.     if(!Is_CustomItem(ent)) return HAM_IGNORED;
  171.     static id; id = get_pdata_cbase(ent, pDataKey_iOwner,pData_Item);
  172.     if(get_pdata_int(ent, pDataKey_iInReload,pData_Item)){
  173.         static clip,ammotype,ammo,j
  174.         clip = get_pdata_int(ent, pDataKey_iClip,pData_Item);
  175.         ammotype = pDataKey_ibpAmmo + get_pdata_int(ent, pDataKey_iPrimaryAmmoType,pData_Item);
  176.         ammo = get_pdata_int(id, ammotype,pData_Player);
  177.         j = min(weapon_ammo - clip, ammo);
  178.         set_pdata_int(ent, pDataKey_iClip, clip+j,pData_Item);
  179.         set_pdata_int(id, ammotype, ammo-j,pData_Player);
  180.         set_pdata_int(ent, pDataKey_iInReload,0,pData_Item);
  181.     }else if(pev(id,pev_button)&IN_ATTACK2&&get_pdata_float(ent,pDataKey_flNextPrimaryAttack,pData_Item)<=0.0){
  182.         sec_attack=true
  183.         ExecuteHamB(Ham_Weapon_PrimaryAttack,ent)
  184.         sec_attack=false
  185.     }
  186.     return HAM_IGNORED;
  187. }
  188. public HookHam_Weapon_Reload(ent){
  189.     if(!Is_CustomItem(ent)) return HAM_IGNORED;
  190.    
  191.     static clip; clip = get_pdata_int(ent, pDataKey_iClip, pData_Item);
  192.     if(clip >= weapon_ammo) return HAM_SUPERCEDE;
  193.    
  194.     static id; id = get_pdata_cbase(ent, pDataKey_iOwner, pData_Item);
  195.     if(get_pdata_int(id,pDataKey_ibpAmmo+get_pdata_int(ent,pDataKey_iPrimaryAmmoType,pData_Item),pData_Player)<=0)return HAM_SUPERCEDE
  196.    
  197.     set_pdata_int(ent, pDataKey_iClip, 0, pData_Item);
  198.     ExecuteHam(Ham_Weapon_Reload, ent);
  199.     set_pdata_int(ent, pDataKey_iClip, clip, pData_Item);
  200.     set_pdata_int(ent, pDataKey_iInReload, 1, pData_Item);
  201.     set_pdata_float(ent,pDataKey_flNextPrimaryAttack,3.86,pData_Item)
  202.     set_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,3.86,pData_Item)
  203.     set_pdata_float(id,pDataKey_flNextAttack,3.86,pData_Player)
  204.     Play_WeaponAnim(id,3)
  205.     return HAM_SUPERCEDE;
  206. }
  207. public HookHam_Weapon_Idle(ent){
  208.     if(!Is_CustomItem(ent))return HAM_IGNORED
  209.     if(get_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,pData_Item)>0.0)return HAM_IGNORED
  210.     set_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,1.7,pData_Item)
  211.     Play_WeaponAnim(get_pdata_cbase(ent,pDataKey_iOwner,pData_Item),0)
  212.     return HAM_SUPERCEDE
  213. }
  214. public HookHam_Weapon_PrimaryAttack(ent){
  215.     if(!Is_CustomItem(ent))return HAM_IGNORED
  216.     static ammo;ammo=get_pdata_int(ent,pDataKey_iClip,pData_Item);
  217.     if(ammo<=0){
  218.         ExecuteHam(Ham_Weapon_PlayEmptySound, ent);
  219.         set_pdata_float(ent,pDataKey_flNextPrimaryAttack,sec_attack?weapon_aspeed2:weapon_aspeed,pData_Item)
  220.         return HAM_SUPERCEDE
  221.     }
  222.        
  223.     static id;id=get_pdata_cbase(ent,pDataKey_iOwner,pData_Item);abc=id
  224.     static Float:user_punchangle[3];pev(id,pev_punchangle,user_punchangle)
  225.     static fm_hooktrace;fm_hooktrace=register_forward(FM_TraceLine,"HookFm_TraceLine",true)
  226.     static fm_playbackevent;fm_playbackevent=register_forward(FM_PlaybackEvent,"HookFm_PlayBackEvent",false)
  227.    
  228.     state FireBullets: Enabled;
  229.     ExecuteHam(Ham_Weapon_PrimaryAttack,ent)
  230.     state FireBullets: Disabled;
  231.    
  232.     unregister_forward(FM_TraceLine,fm_hooktrace,true)
  233.     unregister_forward(FM_PlaybackEvent,fm_playbackevent,false)
  234.    
  235.     static Float:user_newpunch[3];pev(id,pev_punchangle,user_newpunch)
  236.     user_newpunch[0]=user_punchangle[0]+(user_newpunch[0]-user_punchangle[0])*weapon_punchangle
  237.     user_newpunch[1]=user_punchangle[1]+(user_newpunch[1]-user_punchangle[1])*weapon_punchangle
  238.     user_newpunch[2]=user_punchangle[2]+(user_newpunch[2]-user_punchangle[2])*weapon_punchangle
  239.     set_pev(id,pev_punchangle,user_newpunch)
  240.    
  241.     emit_sound(id, CHAN_WEAPON,sound_shot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  242.     Play_WeaponAnim(id,random_num(1,2))
  243.    
  244.     set_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,1.03,pData_Item)
  245.     set_pdata_float(ent,pDataKey_flNextPrimaryAttack,sec_attack?weapon_aspeed2:weapon_aspeed,pData_Item)
  246.     set_pdata_int(ent,pDataKey_iClip,ammo-1,pData_Item)
  247.    
  248.     return HAM_SUPERCEDE
  249. }
  250. public HookHam_TakeDamage(victim,inflictor,attacker, Float:damage) <FireBullets: Enabled>{SetHamParamFloat(4,damage*(sec_attack?weapon_damage2:weapon_damage));return HAM_OVERRIDE;}
  251. public HookHam_TakeDamage() <FireBullets: Disabled> { return HAM_IGNORED; }
  252. public HookHam_TakeDamage() <> { return HAM_IGNORED; }
  253.  
  254. public HookHam_WeaponBox_Spawn(ent)state SetModel: Enabled;
  255. //Fakemeta
  256. public HookFm_SetModel(ent,str[]) <SetModel: Enabled>{
  257.     state SetModel: Disabled;
  258.     static i, classname[32], item; pev(ent, pev_classname, classname, 31);
  259.     if(!equal(classname, "weaponbox")) return FMRES_IGNORED;
  260.     for(i = 0; i < 6; i++) {
  261.         item = get_pdata_cbase(ent, pDataKey_WeaponBoxItems + i, 4);
  262.         if(item > 0 && Is_CustomItem(item)) {
  263.             engfunc(EngFunc_SetModel, ent, model_w);
  264.             return FMRES_SUPERCEDE;
  265.         }
  266.     }
  267.     return FMRES_IGNORED;
  268. }
  269. public HookFm_SetModel() <SetModel: Disabled> { return FMRES_IGNORED; }
  270. public HookFm_SetModel() <> { return FMRES_IGNORED; }
  271. public HookFm_PlayBackEvent()return FMRES_SUPERCEDE
  272. public HookFm_TraceLine(Float:tr_start[3],Float:tr_end[3],tr_flag,tr_ignore,tr){
  273.    
  274.     /*No recoil*/
  275.     if(sec_attack==true){
  276.         static Float:Origin[3];pev(abc,pev_origin,Origin)
  277.         static Float:vOfs[3];pev(abc,pev_view_ofs,vOfs)
  278.         static Float:vAngle[3];pev(abc,pev_v_angle,vAngle)
  279.         static Float:VecFow[3];angle_vector(vAngle,ANGLEVECTOR_FORWARD,VecFow)
  280.         VecFow[0]=Origin[0]+vOfs[0]+VecFow[0]*17000.0
  281.         VecFow[1]=Origin[1]+vOfs[1]+VecFow[1]*17000.0
  282.         VecFow[2]=Origin[2]+vOfs[2]+VecFow[2]*17000.0
  283.         engfunc(EngFunc_TraceLine,tr_start,VecFow,tr_flag,tr_ignore,tr)
  284.     }
  285.     /*No recoil end*/
  286.    
  287.     static hit;hit=get_tr2(tr,TR_pHit)
  288.     static Decal
  289.     static glassdecal;if(!glassdecal)glassdecal=engfunc( EngFunc_DecalIndex, "{bproof1" )
  290.     hit=get_tr2(tr,TR_pHit)
  291.     if(hit>0&&pev_valid(hit))
  292.         if(pev(hit,pev_solid)!=SOLID_BSP)return FMRES_IGNORED
  293.         else if(pev(hit,pev_rendermode)!=0)Decal=glassdecal
  294.         else Decal=random_num(41,45)
  295.     else Decal=random_num(41,45)
  296.  
  297.     static Float: vecEnd[3];get_tr2(tr, TR_vecEndPos, vecEnd)
  298.    
  299.     engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
  300.     write_byte(TE_GUNSHOTDECAL)
  301.     engfunc(EngFunc_WriteCoord, vecEnd[0])
  302.     engfunc(EngFunc_WriteCoord, vecEnd[1])
  303.     engfunc(EngFunc_WriteCoord, vecEnd[2])
  304.     write_short(hit>0?hit:0)
  305.     write_byte(Decal)
  306.     message_end()
  307.    
  308.     static Float:WallVector[3];get_tr2(tr, TR_vecPlaneNormal, WallVector)
  309.    
  310.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecEnd, 0);
  311.     write_byte(TE_STREAK_SPLASH)
  312.     engfunc(EngFunc_WriteCoord, vecEnd[0]);
  313.     engfunc(EngFunc_WriteCoord, vecEnd[1]);
  314.     engfunc(EngFunc_WriteCoord, vecEnd[2]);
  315.     engfunc(EngFunc_WriteCoord, WallVector[0]*random_float(25.0,30.0));
  316.     engfunc(EngFunc_WriteCoord, WallVector[1]*random_float(25.0,30.0));
  317.     engfunc(EngFunc_WriteCoord, WallVector[2]*random_float(25.0,30.0));
  318.     write_byte(111) //colorid
  319.     write_short(12) //count
  320.     write_short(3)  //speed
  321.     write_short(75) //random velocity
  322.     message_end()
  323.     return FMRES_IGNORED
  324. }
  325. public HookFm_UpdateClientData(id, SendWeapons, CD_Handle) {
  326.     static item;item=get_pdata_cbase(id, pDataKey_iActiveItem,pData_Player)
  327.     if(item<=0||!Is_CustomItem(item))return FMRES_IGNORED
  328.     set_cd(CD_Handle, CD_flNextAttack,99999.0)
  329.     return FMRES_HANDLED
  330. }
  331. public HookFm_Spawn(id){
  332.     static ClName[32];pev(id,pev_classname,ClName,31)
  333.     if(strlen(ClName)<5)return FMRES_IGNORED
  334.     static Trie:ClBuffer;if(!ClBuffer)ClBuffer = TrieCreate()
  335.     if(!TrieKeyExists(ClBuffer,ClName)){
  336.         TrieSetCell(ClBuffer,ClName, 1)
  337.         RegisterHamFromEntity(Ham_TakeDamage,id,"HookHam_TakeDamage",0)
  338.     }
  339.     return FMRES_IGNORED
  340. }
  341. //stocks
  342. stock make_weapon() {
  343.     static ent;
  344.     static g_AllocString_E;
  345.     if(g_AllocString_E||(g_AllocString_E=engfunc(EngFunc_AllocString,weapon_name)))
  346.         ent = engfunc(EngFunc_CreateNamedEntity, g_AllocString_E)
  347.     else return 0
  348.     if(ent <= 0) return 0;
  349.     set_pev(ent, pev_spawnflags, SF_NORESPAWN);
  350.     set_pev(ent, pev_impulse, WEAPON_KEY);
  351.     ExecuteHam(Ham_Spawn, ent)
  352.     return ent
  353. }
  354. stock UTIL_DropWeapon(id, slot) {
  355.     static iEntity; iEntity = get_pdata_cbase(id, (pDataKey_iPlayerItems + slot), pData_Player);
  356.     if(iEntity > 0) {
  357.         static iNext,szWeaponName[32];
  358.         do{
  359.             iNext = get_pdata_cbase(iEntity, pDataKey_iNext, 4);
  360.             if(get_weaponname(get_pdata_int(iEntity, pDataKey_iId, 4), szWeaponName, 31))
  361.                 engclient_cmd(id, "drop", szWeaponName)
  362.         } while(( iEntity = iNext) > 0);
  363.     }
  364. }
  365. stock Play_WeaponAnim(id,anim){
  366.     set_pev(id, pev_weaponanim,anim)
  367.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
  368.     write_byte(anim)
  369.     write_byte(0)
  370.     message_end()
  371. }
  372. //5,    32, -1, -1, 0, 12,5,  0,    // weapon_xm1014
  373. stock Weaponlist(id,bool:set) {
  374.     if(!is_user_connected(id))return
  375.     message_begin(MSG_ONE, Msg_WeaponList, _, id);
  376.     write_string(set==false?weapon_name:weapon_new);
  377.     write_byte(5);
  378.     write_byte(weapon_bpammo);
  379.     write_byte(-1);
  380.     write_byte(-1);
  381.     write_byte(0);
  382.     write_byte(12);
  383.     write_byte(5);
  384.     write_byte(0);
  385.     message_end();
  386. }
Janus-3 :
  1. #include <zombie_escape>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <fakemeta_util>
  5. #include <fun>
  6. #include <xs>
  7. #include <cstrike>
  8.  
  9. #define VIP_FLAG "VIP_A"
  10.  
  11. #define ENG_NULLENT         -1
  12. #define EV_INT_WEAPONKEY    EV_INT_impulse
  13. #define janus3_WEAPONKEY    5879122
  14. #define MAX_PLAYERS         32
  15. #define WEAPON_ANIMEXT "carbine"
  16.  
  17. const USE_STOPPED = 0
  18. const OFFSET_ACTIVE_ITEM = 373
  19. const OFFSET_WEAPONOWNER = 41
  20. const OFFSET_LINUX = 5
  21. const OFFSET_LINUX_WEAPONS = 4
  22. const m_szAnimExtention = 492
  23.  
  24. #if cellbits == 32
  25. const OFFSET_CLIPAMMO = 51
  26. #else
  27. const OFFSET_CLIPAMMO = 65
  28. #endif
  29.  
  30. #define WEAP_LINUX_XTRA_OFF     4
  31. #define m_fKnown                    44
  32. #define m_flNextPrimaryAttack       46
  33. #define m_flTimeWeaponIdle          48
  34. #define m_iClip                 51
  35. #define m_fInReload             54
  36. #define PLAYER_LINUX_XTRA_OFF   5
  37. #define m_flNextAttack              83
  38. #define janus3_READY 20
  39. #define janus3_RELOAD_TIME  3.0
  40.  
  41. enum
  42. {
  43.     ANIM_IDLE = 0,
  44.     ANIM_RELOAD_NORMAL,
  45.     ANIM_DRAW_NORMAL,
  46.     ANIM_SHOOT_NORMAL,
  47.     ANIM_SHOOT_SIGNAL,
  48.     ANIM_CHANGE_1,
  49.     ANIM_IDLE_B,
  50.     ANIM_DRAW_B,
  51.     ANIM_SHOOT_B,
  52.     ANIM_SHOOT_B2,
  53.     ANIM_SHOOT_B3,
  54.     ANIM_CHANGE_2,
  55.     ANIM_SIGNAL,
  56.     ANIM_RELOAD_SIGNAL,
  57.     ANIM_DRAW_SIGNAL
  58. }
  59.  
  60. #define write_coord_f(%1)   engfunc(EngFunc_WriteCoord,%1)
  61.  
  62. new const Fire_Sounds[][] = { "weapons/janusmk5-12.wav" }
  63. new const Fire_Sounds2[][] = { "weapons/janusmk5-2.wav" }
  64.  
  65. new janus3_V_MODEL[64] = "models/v_janus3.mdl"
  66. new janus3_P_MODEL[64] = "models/p_janus3.mdl"
  67. new janus3_W_MODEL[64] = "models/w_janus3.mdl"
  68.  
  69. new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
  70.  
  71. new cvar_dmg_janus3, cvar_dmg2_janus3, cvar_recoil_janus3, cvar_recoil2_janus3, cvar_clip_janus3, cvar_spd_janus3, cvar_spd2_janus3, cvar_janus3_ammo
  72. new g_MaxPlayers, g_orig_event_janus3, g_IsInPrimaryAttack
  73. new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
  74. new g_has_janus3[33], g_clip_ammo[33], g_janus3_TmpClip[33], oldweap[33], janus3_mode[33], janus3_signal[33], siap_janus3[33]
  75. new gmsgWeaponList, g_Ham_Bot, item_janus
  76.  
  77. const PRIMARY_WEAPONS_BIT_SUM =
  78. (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<
  79. CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
  80. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  81.             "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  82.             "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  83.             "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  84.             "weapon_ak47", "weapon_knife", "weapon_p90" }
  85.  
  86. public plugin_init()
  87. {
  88.     register_plugin("Janus-3", "1.0", "m4m3ts")
  89.     register_cvar("janus3_version", "m4m3ts", FCVAR_SERVER|FCVAR_SPONLY)
  90.     register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
  91.     register_event("CurWeapon","CurrentWeapon","be","1=1")
  92.     RegisterHam(Ham_Spawn, "player", "Player_Spawn", 1)
  93.     RegisterHam(Ham_Item_AddToPlayer, "weapon_galil", "fw_janus3_AddToPlayer")
  94.     RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
  95.     RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
  96.     RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
  97.     RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
  98.     for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  99.     if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
  100.     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil", "fw_janus3_PrimaryAttack")
  101.     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil", "fw_janus3_PrimaryAttack_Post", 1)
  102.     RegisterHam(Ham_Item_PostFrame, "weapon_galil", "janus3_ItemPostFrame")
  103.     RegisterHam(Ham_Weapon_Reload, "weapon_galil", "janus3_Reload")
  104.     RegisterHam(Ham_Weapon_Reload, "weapon_galil", "janus3_Reload_Post", 1)
  105.     RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  106.     RegisterHam(Ham_Weapon_WeaponIdle, "weapon_galil", "fw_janus3idleanim", 1)
  107.     register_forward(FM_SetModel, "fw_SetModel")
  108.     register_forward(FM_CmdStart, "fw_CmdStart")
  109.     register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  110.     register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
  111.    
  112.     RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1)
  113.     RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
  114.     RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
  115.     RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
  116.     RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
  117.     RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
  118.     RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)
  119.  
  120.     cvar_dmg_janus3 = register_cvar("zp_janus3_dmg", "1.0")
  121.     cvar_dmg2_janus3 = register_cvar("zp_janus3_dmg2", "2.0")
  122.     cvar_recoil_janus3 = register_cvar("zp_janus3_recoil", "0.8")
  123.     cvar_recoil2_janus3 = register_cvar("zp_janus3_recoil2", "0.45")
  124.     cvar_clip_janus3 = register_cvar("zp_janus3_clip", "50")
  125.     cvar_spd_janus3 = register_cvar("zp_janus3_spd", "1.1")
  126.     cvar_spd2_janus3 = register_cvar("zp_janus3_spd2", "0.07")
  127.     cvar_janus3_ammo = register_cvar("zp_janus3_ammo", "200")
  128.    
  129.     item_janus = ze_register_item("Janus-3", 20, 0)
  130.     ze_set_item_vip(item_janus, VIP_FLAG)
  131.        
  132.     g_MaxPlayers = get_member_game(m_nMaxPlayers)
  133.         gmsgWeaponList = get_user_msgid("WeaponList")
  134. }
  135.  
  136. public plugin_precache()
  137. {
  138.     precache_model(janus3_V_MODEL)
  139.     precache_model(janus3_P_MODEL)
  140.     precache_model(janus3_W_MODEL)
  141.     for(new i = 0; i < sizeof Fire_Sounds; i++)
  142.     precache_sound(Fire_Sounds[i])
  143.     for(new i = 0; i < sizeof Fire_Sounds2; i++)
  144.     precache_sound(Fire_Sounds2[i])
  145.     precache_sound("weapons/janus3_boltpull1.wav")
  146.     precache_sound("weapons/janus3_boltpull2.wav")
  147.     precache_sound("weapons/janus3_clipin.wav")
  148.     precache_sound("weapons/janus3_clipout.wav")
  149.     precache_sound("weapons/janus3_draw.wav")
  150.     precache_sound("weapons/janus3_change1.wav")
  151.     precache_sound("weapons/janus3_change2.wav")
  152.     m_iBlood[0] = precache_model("sprites/blood.spr")
  153.     m_iBlood[1] = precache_model("sprites/bloodspray.spr")
  154.         precache_generic("sprites/weapon_janus3.txt")
  155.     precache_generic("sprites/640hud109.spr")
  156.         precache_generic("sprites/640hud7.spr")
  157.    
  158.     register_clcmd("weapon_janus3", "weapon_hook") 
  159.     register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
  160.     register_clcmd("m4m3tsjns3", "give_janus3")
  161. }
  162.  
  163. public client_putinserver(id)
  164. {
  165.     if(!g_Ham_Bot && is_user_bot(id))
  166.     {
  167.         g_Ham_Bot = 1
  168.         set_task(0.1, "Do_RegisterHam_Bot", id)
  169.     }
  170. }
  171.  
  172. public Do_RegisterHam_Bot(id)
  173. {
  174.     RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage")
  175. }
  176.  
  177. public weapon_hook(id)
  178. {
  179.         engclient_cmd(id, "weapon_galil")
  180.         return PLUGIN_HANDLED
  181. }
  182.  
  183. public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
  184. {
  185.     if(!is_user_alive(iAttacker))
  186.         return
  187.  
  188.     new g_currentweapon = get_user_weapon(iAttacker)
  189.  
  190.     if(g_currentweapon != CSW_GALIL) return
  191.    
  192.     if(!g_has_janus3[iAttacker]) return
  193.  
  194.     static Float:flEnd[3]
  195.     get_tr2(ptr, TR_vecEndPos, flEnd)
  196.    
  197.     if(iEnt)
  198.     {
  199.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  200.         write_byte(TE_DECAL)
  201.         write_coord_f(flEnd[0])
  202.         write_coord_f(flEnd[1])
  203.         write_coord_f(flEnd[2])
  204.         write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  205.         write_short(iEnt)
  206.         message_end()
  207.     }
  208.     else
  209.     {
  210.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  211.         write_byte(TE_WORLDDECAL)
  212.         write_coord_f(flEnd[0])
  213.         write_coord_f(flEnd[1])
  214.         write_coord_f(flEnd[2])
  215.         write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  216.         message_end()
  217.     }
  218.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  219.     write_byte(TE_GUNSHOTDECAL)
  220.     write_coord_f(flEnd[0])
  221.     write_coord_f(flEnd[1])
  222.     write_coord_f(flEnd[2])
  223.     write_short(iAttacker)
  224.     write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  225.     message_end()
  226. }
  227.  
  228. public Player_Spawn(id)
  229. {
  230.     g_has_janus3[id] = false
  231. }
  232.  
  233. public fwPrecacheEvent_Post(type, const name[])
  234. {
  235.     if (equal("events/galil.sc", name))
  236.     {
  237.         g_orig_event_janus3 = get_orig_retval()
  238.         return FMRES_HANDLED
  239.     }
  240.     return FMRES_IGNORED
  241. }
  242.  
  243. public client_connect(id)
  244. {
  245.     g_has_janus3[id] = false
  246. }
  247.  
  248. public client_disconnected(id)
  249. {
  250.     g_has_janus3[id] = false
  251. }
  252.  
  253. public ze_user_infected(id)
  254. {
  255.     if (ze_is_user_zombie(id))
  256.     {
  257.         g_has_janus3[id] = false
  258.     }
  259. }
  260.  
  261. public ze_select_item_pre(id, itemid)
  262. {
  263.     if (itemid != item_janus)
  264.         return ZE_ITEM_AVAILABLE
  265.  
  266.     if (ze_is_user_zombie(id))
  267.         return ZE_ITEM_DONT_SHOW
  268.  
  269.     return ZE_ITEM_AVAILABLE
  270. }
  271.  
  272. public ze_select_item_post(id, itemid)
  273. {
  274.     if(itemid != item_janus)
  275.         return
  276.  
  277.     give_janus3(id)
  278. }
  279.  
  280. public fw_SetModel(entity, model[])
  281. {
  282.     if(!is_valid_ent(entity))
  283.         return FMRES_IGNORED
  284.    
  285.     static szClassName[33]
  286.     entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  287.        
  288.     if(!equal(szClassName, "weaponbox"))
  289.         return FMRES_IGNORED
  290.    
  291.     static iOwner
  292.    
  293.     iOwner = entity_get_edict(entity, EV_ENT_owner)
  294.    
  295.     if(equal(model, "models/w_galil.mdl"))
  296.     {
  297.         static iStoredAugID
  298.        
  299.         iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_galil", entity)
  300.    
  301.         if(!is_valid_ent(iStoredAugID))
  302.             return FMRES_IGNORED
  303.    
  304.         if(g_has_janus3[iOwner])
  305.         {
  306.             entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, janus3_WEAPONKEY)
  307.            
  308.             g_has_janus3[iOwner] = false
  309.            
  310.             entity_set_model(entity, janus3_W_MODEL)
  311.            
  312.             return FMRES_SUPERCEDE
  313.         }
  314.     }
  315.     return FMRES_IGNORED
  316. }
  317.  
  318. public give_janus3(id)
  319. {
  320.     drop_weapons(id, 1)
  321.     new iWep2 = give_item(id,"weapon_galil")
  322.     if( iWep2 > 0 )
  323.     {
  324.         cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_janus3))
  325.         cs_set_user_bpammo (id, CSW_GALIL, get_pcvar_num(cvar_janus3_ammo))
  326.         UTIL_PlayWeaponAnimation(id, ANIM_DRAW_NORMAL)
  327.         set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
  328.     }
  329.     g_has_janus3[id] = true
  330.     siap_janus3[id] = 1
  331.     janus3_mode[id] = 1
  332.     janus3_signal[id] = 0
  333.     update_ammo(id)
  334.    
  335.     message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  336.     write_string("weapon_janus3")
  337.     write_byte(4)
  338.     write_byte(90)
  339.     write_byte(-1)
  340.     write_byte(-1)
  341.     write_byte(0)
  342.     write_byte(17)
  343.     write_byte(CSW_GALIL)
  344.     write_byte(0)
  345.     message_end()
  346. }
  347.  
  348. public fw_janus3_AddToPlayer(janus3, id)
  349. {
  350.     if(!is_valid_ent(janus3) || !is_user_connected(id))
  351.         return HAM_IGNORED
  352.    
  353.     if(entity_get_int(janus3, EV_INT_WEAPONKEY) == janus3_WEAPONKEY)
  354.     {
  355.         g_has_janus3[id] = true
  356.        
  357.         entity_set_int(janus3, EV_INT_WEAPONKEY, 0)
  358.  
  359.         message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  360.         write_string("weapon_janus3")
  361.         write_byte(4)
  362.         write_byte(90)
  363.         write_byte(-1)
  364.         write_byte(-1)
  365.         write_byte(0)
  366.         write_byte(17)
  367.         write_byte(CSW_GALIL)
  368.         write_byte(0)
  369.         message_end()
  370.        
  371.     }
  372.             else
  373.     {
  374.         message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  375.         write_string("weapon_galil")
  376.         write_byte(4)
  377.         write_byte(90)
  378.         write_byte(-1)
  379.         write_byte(-1)
  380.         write_byte(0)
  381.         write_byte(17)
  382.         write_byte(CSW_GALIL)
  383.         write_byte(0)
  384.         message_end()
  385.     }
  386.     return HAM_IGNORED
  387. }
  388.  
  389. public update_ammo(id)
  390. {
  391.     if(!is_user_alive(id))
  392.         return
  393.    
  394.     static weapon_ent; weapon_ent = fm_get_user_weapon_entity(id, CSW_GALIL)
  395.     if(!pev_valid(weapon_ent)) return
  396.    
  397.     engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id)
  398.     write_byte(1)
  399.     write_byte(CSW_GALIL)
  400.     write_byte(cs_get_weapon_ammo(weapon_ent))
  401.     message_end()
  402.    
  403.     message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("AmmoX"), _, id)
  404.     write_byte(1)
  405.     write_byte(cs_get_user_bpammo(id, CSW_GALIL))
  406.     message_end()
  407. }
  408.  
  409. public fw_UseStationary_Post(entity, caller, activator, use_type)
  410. {
  411.     if (use_type == USE_STOPPED && is_user_connected(caller))
  412.         replace_weapon_models(caller, get_user_weapon(caller))
  413. }
  414.  
  415. public fw_Item_Deploy_Post(weapon_ent)
  416. {
  417.     static owner
  418.     owner = fm_cs_get_weapon_ent_owner(weapon_ent)
  419.    
  420.     static weaponid
  421.     weaponid = cs_get_weapon_id(weapon_ent)
  422.    
  423.     replace_weapon_models(owner, weaponid)
  424. }
  425.  
  426. public CurrentWeapon(id)
  427. {
  428.      replace_weapon_models(id, read_data(2))
  429.  
  430.      if(read_data(2) != CSW_GALIL || !g_has_janus3[id])
  431.           return
  432.      
  433.      static Float:iSpeed
  434.      if(g_has_janus3[id])
  435.           if(janus3_mode[id] != 3) iSpeed = get_pcvar_float(cvar_spd_janus3)
  436.      
  437.      static weapon[32],Ent
  438.      get_weaponname(read_data(2),weapon,31)
  439.      Ent = find_ent_by_owner(-1,weapon,id)
  440.      if(Ent)
  441.      {
  442.           static Float:Delay
  443.           Delay = get_pdata_float( Ent, 46, 4) * iSpeed
  444.           if (Delay > 0.0)
  445.           {
  446.                set_pdata_float(Ent, 46, Delay, 4)
  447.           }
  448.      }
  449. }
  450.  
  451. replace_weapon_models(id, weaponid)
  452. {
  453.     switch (weaponid)
  454.     {
  455.         case CSW_GALIL:
  456.         {
  457.             if (ze_is_user_zombie(id))
  458.                 return
  459.            
  460.             if(g_has_janus3[id])
  461.             {
  462.                 set_pev(id, pev_viewmodel2, janus3_V_MODEL)
  463.                 set_pev(id, pev_weaponmodel2, janus3_P_MODEL)
  464.                 if(oldweap[id] != CSW_GALIL)
  465.                 {
  466.                     if(janus3_mode[id] == 1)
  467.                         UTIL_PlayWeaponAnimation(id, ANIM_DRAW_NORMAL)
  468.  
  469.                     if(janus3_mode[id] == 2)
  470.                         UTIL_PlayWeaponAnimation(id, ANIM_DRAW_SIGNAL)
  471.  
  472.                     if(janus3_mode[id] == 3)
  473.                         UTIL_PlayWeaponAnimation(id, ANIM_DRAW_B)
  474.  
  475.                     set_pdata_string(id, m_szAnimExtention * 4, WEAPON_ANIMEXT, -1 , 20)
  476.                     set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
  477.  
  478.                     message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
  479.                     write_string("weapon_janus3")
  480.                     write_byte(4)
  481.                     write_byte(90)
  482.                     write_byte(-1)
  483.                     write_byte(-1)
  484.                     write_byte(0)
  485.                     write_byte(17)
  486.                     write_byte(CSW_GALIL)
  487.                     write_byte(0)
  488.                     message_end()
  489.  
  490.                 }
  491.             }
  492.         }
  493.     }
  494.     oldweap[id] = weaponid
  495. }
  496.  
  497. public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
  498. {
  499.     if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_GALIL || !g_has_janus3[Player]))
  500.         return FMRES_IGNORED
  501.    
  502.     set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
  503.     return FMRES_HANDLED
  504. }
  505.  
  506. public fw_janus3_PrimaryAttack(Weapon)
  507. {
  508.     new Player = get_pdata_cbase(Weapon, 41, 4)
  509.    
  510.     if (!g_has_janus3[Player])
  511.         return
  512.    
  513.     g_IsInPrimaryAttack = 1
  514.     pev(Player,pev_punchangle,cl_pushangle[Player])
  515.    
  516.     g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
  517. }
  518.  
  519. public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  520. {
  521.     if ((eventid != g_orig_event_janus3) || !g_IsInPrimaryAttack)
  522.         return FMRES_IGNORED
  523.     if (!(1 <= invoker <= g_MaxPlayers))
  524.     return FMRES_IGNORED
  525.  
  526.     playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  527.     return FMRES_SUPERCEDE
  528. }
  529.  
  530. public fw_janus3_PrimaryAttack_Post(Weapon)
  531. {
  532.     g_IsInPrimaryAttack = 0
  533.     new Player = get_pdata_cbase(Weapon, 41, 4)
  534.    
  535.     new szClip, szAmmo
  536.     get_user_weapon(Player, szClip, szAmmo)
  537.    
  538.     if(!is_user_alive(Player))
  539.         return
  540.     if(!g_has_janus3[Player])
  541.         return
  542.  
  543.     if(janus3_mode[Player] != 3)
  544.     {
  545.         if (!g_clip_ammo[Player])
  546.             return
  547.  
  548.         new Float:push[3]
  549.         pev(Player,pev_punchangle,push)
  550.         xs_vec_sub(push,cl_pushangle[Player],push)
  551.        
  552.         xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_janus3),push)
  553.         xs_vec_add(push,cl_pushangle[Player],push)
  554.         set_pev(Player,pev_punchangle,push)
  555.        
  556.         emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  557.         if(janus3_signal[Player] >= janus3_READY && siap_janus3[Player])
  558.         {
  559.             janus3_mode[Player] = 2
  560.             set_task(12.7, "janus3_mode1", Player)
  561.             emit_sound(Player, CHAN_VOICE, "weapons/change1_ready.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  562.             siap_janus3[Player] = 0
  563.         }
  564.        
  565.         if(janus3_mode[Player] == 2) UTIL_PlayWeaponAnimation(Player, ANIM_SHOOT_SIGNAL)
  566.         else UTIL_PlayWeaponAnimation(Player, ANIM_SHOOT_NORMAL)
  567.     }
  568.     else
  569.     {
  570.         if (!g_clip_ammo[Player]) szClip = 2
  571.        
  572.         new Float:push[3]
  573.         pev(Player,pev_punchangle,push)
  574.         xs_vec_sub(push,cl_pushangle[Player],push)
  575.        
  576.         xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil2_janus3),push)
  577.         xs_vec_add(push,cl_pushangle[Player],push)
  578.         set_pev(Player,pev_punchangle,push)
  579.        
  580.         emit_sound(Player, CHAN_WEAPON, Fire_Sounds2[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  581.         fm_set_weapon_ammo(Weapon, szClip++)
  582.         set_weapons_timeidle(Player, CSW_GALIL, get_pcvar_float(cvar_spd2_janus3))
  583.         set_player_nextattackx(Player, get_pcvar_float(cvar_spd2_janus3))
  584.         UTIL_PlayWeaponAnimation(Player, random_num(ANIM_SHOOT_B,ANIM_SHOOT_B3))
  585.     }
  586. }
  587.  
  588. public janus3_mode1(id)
  589. {
  590.     janus3_mode[id] = 1
  591.     janus3_signal[id] = 0
  592.     siap_janus3[id] = 1
  593.     remove_task(id)
  594. }
  595.  
  596. public fw_janus3idleanim(Weapon)
  597. {
  598.     new id = get_pdata_cbase(Weapon, 41, 4)
  599.  
  600.     if(!is_user_alive(id) || ze_is_user_zombie(id) || !g_has_janus3[id] || get_user_weapon(id) != CSW_GALIL)
  601.         return HAM_IGNORED;
  602.  
  603.     if(janus3_mode[id] == 1)
  604.         return HAM_SUPERCEDE;
  605.    
  606.     if(janus3_mode[id] == 3 && get_pdata_float(Weapon, 48, 4) <= 0.25)
  607.     {
  608.         UTIL_PlayWeaponAnimation(id, ANIM_IDLE_B)
  609.         set_pdata_float(Weapon, 48, 20.0, 4)
  610.         return HAM_SUPERCEDE;
  611.     }
  612.    
  613.     if(janus3_mode[id] == 2 && get_pdata_float(Weapon, 48, 4) <= 0.25)
  614.     {
  615.         UTIL_PlayWeaponAnimation(id, ANIM_SIGNAL)
  616.         set_pdata_float(Weapon, 48, 20.0, 4)
  617.         return HAM_SUPERCEDE;
  618.     }
  619.  
  620.     return HAM_IGNORED;
  621. }
  622.  
  623. public fw_CmdStart(id, uc_handle, seed)
  624. {
  625.     if(!is_user_alive(id) || !is_user_connected(id))
  626.         return
  627.     if(get_user_weapon(id) != CSW_GALIL || !g_has_janus3[id])
  628.         return
  629.    
  630.     static ent; ent = fm_get_user_weapon_entity(id, CSW_GALIL)
  631.     if(!pev_valid(ent))
  632.         return
  633.    
  634.     static CurButton
  635.     CurButton = get_uc(uc_handle, UC_Buttons)
  636.  
  637.     if(CurButton & IN_ATTACK2)
  638.     {
  639.         if(janus3_mode[id] == 2 && get_pdata_float(id, 83, 5) <= 0.0)
  640.         {
  641.             remove_task(id)
  642.             UTIL_PlayWeaponAnimation(id, ANIM_CHANGE_1)
  643.             janus3_mode[id] = 3
  644.             set_weapons_timeidle(id, CSW_GALIL, 1.7)
  645.             set_player_nextattackx(id, 1.7)
  646.             set_task(8.7, "back_normal", id)
  647.             set_task(8.7, "back_normal2", id)
  648.         }
  649.     }
  650. }
  651.  
  652. public back_normal(id)
  653. {
  654.     if(get_user_weapon(id) != CSW_GALIL || !g_has_janus3[id])
  655.         return
  656.        
  657.     UTIL_PlayWeaponAnimation(id, ANIM_CHANGE_2)
  658.     set_weapons_timeidle(id, CSW_GALIL, 1.8)
  659.     set_player_nextattackx(id, 1.8)
  660. }
  661.  
  662. public back_normal2(id)
  663. {
  664.     janus3_mode[id] = 1
  665.     janus3_signal[id] = 0
  666.     siap_janus3[id] = 1
  667. }
  668.  
  669. public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
  670. {
  671.     if (victim != attacker && is_user_connected(attacker))
  672.     {
  673.         if(get_user_weapon(attacker) == CSW_GALIL)
  674.         {
  675.             if(g_has_janus3[attacker])
  676.             {
  677.                 if(janus3_mode[attacker] != 3)
  678.                 {
  679.                     SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_janus3))
  680.                     janus3_signal[attacker] ++
  681.                 }
  682.                 else SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg2_janus3))
  683.             }
  684.         }
  685.     }
  686. }
  687.  
  688. public message_DeathMsg(msg_id, msg_dest, id)
  689. {
  690.     static szTruncatedWeapon[33], iAttacker, iVictim
  691.    
  692.     get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  693.    
  694.     iAttacker = get_msg_arg_int(1)
  695.     iVictim = get_msg_arg_int(2)
  696.    
  697.     if(!is_user_connected(iAttacker) || iAttacker == iVictim)
  698.         return PLUGIN_CONTINUE
  699.    
  700.     if(equal(szTruncatedWeapon, "galil") && get_user_weapon(iAttacker) == CSW_GALIL)
  701.     {
  702.         if(g_has_janus3[iAttacker])
  703.             set_msg_arg_string(4, "galil")
  704.     }
  705.     return PLUGIN_CONTINUE
  706. }
  707.  
  708. stock fm_cs_get_current_weapon_ent(id)
  709. {
  710.     return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
  711. }
  712.  
  713. stock fm_cs_get_weapon_ent_owner(ent)
  714. {
  715.     return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
  716. }
  717.  
  718. stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
  719. {
  720.     set_pev(Player, pev_weaponanim, Sequence)
  721.    
  722.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
  723.     write_byte(Sequence)
  724.     write_byte(pev(Player, pev_body))
  725.     message_end()
  726. }
  727.  
  728. public janus3_ItemPostFrame(weapon_entity)
  729. {
  730.      new id = pev(weapon_entity, pev_owner)
  731.      if (!is_user_connected(id))
  732.           return HAM_IGNORED
  733.  
  734.      if (!g_has_janus3[id])
  735.           return HAM_IGNORED
  736.  
  737.      static iClipExtra
  738.      
  739.      iClipExtra = get_pcvar_num(cvar_clip_janus3)
  740.      new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
  741.  
  742.      new iBpAmmo = cs_get_user_bpammo(id, CSW_GALIL)
  743.      new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  744.  
  745.      new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)
  746.  
  747.      if( fInReload && flNextAttack <= 0.0 )
  748.      {
  749.          new j = min(iClipExtra - iClip, iBpAmmo)
  750.    
  751.          set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
  752.          cs_set_user_bpammo(id, CSW_GALIL, iBpAmmo-j)
  753.        
  754.          set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
  755.          fInReload = 0
  756.      }
  757.      return HAM_IGNORED
  758. }
  759.  
  760. public janus3_Reload(weapon_entity)
  761. {
  762.      new id = pev(weapon_entity, pev_owner)
  763.      if (!is_user_connected(id))
  764.           return HAM_IGNORED
  765.  
  766.      if (!g_has_janus3[id])
  767.           return HAM_IGNORED
  768.  
  769.      static iClipExtra
  770.  
  771.      if(g_has_janus3[id])
  772.           iClipExtra = get_pcvar_num(cvar_clip_janus3)
  773.  
  774.      g_janus3_TmpClip[id] = -1
  775.  
  776.      new iBpAmmo = cs_get_user_bpammo(id, CSW_GALIL)
  777.      new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  778.  
  779.      if (iBpAmmo <= 0)
  780.           return HAM_SUPERCEDE
  781.  
  782.      if (iClip >= iClipExtra)
  783.           return HAM_SUPERCEDE
  784.          
  785.      if(janus3_mode[id] == 3)
  786.           return HAM_SUPERCEDE
  787.  
  788.      g_janus3_TmpClip[id] = iClip
  789.  
  790.      return HAM_IGNORED
  791. }
  792.  
  793. public janus3_Reload_Post(weapon_entity)
  794. {
  795.     new id = pev(weapon_entity, pev_owner)
  796.     if (!is_user_connected(id))
  797.         return HAM_IGNORED
  798.  
  799.     if (!g_has_janus3[id])
  800.         return HAM_IGNORED
  801.  
  802.     if (g_janus3_TmpClip[id] == -1)
  803.         return HAM_IGNORED
  804.  
  805.     set_pdata_int(weapon_entity, m_iClip, g_janus3_TmpClip[id], WEAP_LINUX_XTRA_OFF)
  806.    
  807.     set_weapons_timeidle(id, CSW_GALIL, janus3_RELOAD_TIME)
  808.     set_player_nextattackx(id, janus3_RELOAD_TIME)
  809.    
  810.     set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
  811.    
  812.     if(janus3_mode[id] == 2) UTIL_PlayWeaponAnimation(id, ANIM_RELOAD_SIGNAL)
  813.     else UTIL_PlayWeaponAnimation(id, ANIM_RELOAD_NORMAL)
  814.  
  815.     return HAM_IGNORED
  816. }
  817.  
  818. stock set_player_nextattackx(id, Float:nexttime)
  819. {
  820.     if(!is_user_alive(id))
  821.         return
  822.        
  823.     set_pdata_float(id, m_flNextAttack, nexttime, 5)
  824. }
  825.  
  826. stock set_weapons_timeidle(id, WeaponId ,Float:TimeIdle)
  827. {
  828.     if(!is_user_alive(id))
  829.         return
  830.        
  831.     static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
  832.     if(!pev_valid(entwpn))
  833.         return
  834.        
  835.     set_pdata_float(entwpn, 46, TimeIdle, WEAP_LINUX_XTRA_OFF)
  836.     set_pdata_float(entwpn, 47, TimeIdle, WEAP_LINUX_XTRA_OFF)
  837.     set_pdata_float(entwpn, 48, TimeIdle + 0.5, WEAP_LINUX_XTRA_OFF)
  838. }
  839.  
  840. stock fm_set_weapon_ammo(entity, amount)
  841. {
  842.     set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
  843. }
  844.  
  845. stock drop_weapons(id, dropwhat)
  846. {
  847.      static weapons[32], num, i, weaponid
  848.      num = 0
  849.      get_user_weapons(id, weapons, num)
  850.      
  851.      for (i = 0; i < num; i++)
  852.      {
  853.           weaponid = weapons[i]
  854.          
  855.           if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
  856.           {
  857.                static wname[32]
  858.                get_weaponname(weaponid, wname, sizeof wname - 1)
  859.                engclient_cmd(id, "drop", wname)
  860.           }
  861.      }
  862. }
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
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 0 guests