Tornado gun from CSO

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

Tornado gun from CSO

#1

Post by czirimbolo » 5 years ago

Can somone please convert this and make it for vips only?

Code: Select all

#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>

#define PLUGIN "Tornado"
#define VERSION "1.0"
#define AUTHOR "GenDa"

#define CustomItem(%0) (pev(%0, pev_impulse) == WEAPON_KEY)


#define m_rgpPlayerItems_CWeaponBox 34


#define m_pPlayer 41
#define m_pNext 42
#define m_iId 43


#define m_flNextPrimaryAttack 46
#define m_flNextSecondaryAttack 47
#define m_flTimeWeaponIdle 48
#define m_iPrimaryAmmoType 49
#define m_iClip 51
#define m_fInReload 54
#define m_iWeaponState 74
#define m_flNextReload 75


#define m_flNextAttack 83


#define m_rpgPlayerItems 367
#define m_pActiveItem 373
#define m_rgAmmo 376
#define m_szAnimExtention 492

#define ANIM_IDLE 2
#define ANIM_ATTACK 5
#define ANIM_ATTACK_END 11
#define ANIM_ATTACK_EMPTY 8
#define ANIM_RELOAD 14
#define ANIM_DRAW 19

#define ANIM_IDLE_TIME 6.04
#define ANIM_RELOAD_TIME 3.54
#define ANIM_DRAW_TIME 1.37

#define WEAPON_KEY 40
#define WEAPON_TORN "weapon_aug"
#define WEAPON_NEW "weapon_tornado"
#define WEAPON_LASER "sprites/tornado-laser.spr"

#define WEAPON_ITEM_NAME "Tornado"
#define WEAPON_ITEM_COST 0

#define WEAPON_MODEL_V "models/v_tornado.mdl"
#define WEAPON_MODEL_P "models/p_tornado.mdl"
#define WEAPON_MODEL_W "models/w_tornado.mdl"
#define WEAPON_SOUND_S "weapons/tornado-3.wav"
#define WEAPON_SOUND_E "weapons/tornado-shoot_end.wav"
#define WEAPON_BODY 0

#define WEAPON_CLIP 70
#define WEAPON_AMMO 210
#define WEAPON_RATE 0.09
#define WEAPON_RECOIL 0.3
#define WEAPON_DAMAGE 1.1

new g_AllocString_V, g_AllocString_P, g_AllocString_E
new HamHook:g_fw_TraceAttack[4]
new g_iMsgID_Weaponlist
new iSpriteIndexTrail
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	RegisterHam(Ham_Item_Deploy, WEAPON_TORN, "fw_Item_Deploy_Post", 1);
	RegisterHam(Ham_Item_Holster, WEAPON_TORN, "fw_Item_Holster_Post", 1);
	RegisterHam(Ham_Item_PostFrame, WEAPON_TORN, "fw_Item_PostFrame");
	RegisterHam(Ham_Item_AddToPlayer, WEAPON_TORN, "fw_Item_AddToPlayer_Post", 1);
	
	RegisterHam(Ham_Weapon_Reload, WEAPON_TORN, "fw_Weapon_Reload");
	RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_TORN, "fw_Weapon_WeaponIdle");
	RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_TORN, "fw_Weapon_PrimaryAttack");
	
	g_fw_TraceAttack[0] = RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack");
	g_fw_TraceAttack[1] = RegisterHam(Ham_TraceAttack, "info_target",    "fw_TraceAttack");
	g_fw_TraceAttack[2] = RegisterHam(Ham_TraceAttack, "player",         "fw_TraceAttack");
	g_fw_TraceAttack[3] = RegisterHam(Ham_TraceAttack, "hostage_entity", "fw_TraceAttack");
	fm_ham_hook(false);
	register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1);
	register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
	register_forward(FM_SetModel, "fw_SetModel");
	g_iMsgID_Weaponlist = get_user_msgid("WeaponList");
	register_clcmd(WEAPON_NEW, "HookSelect");
}
public plugin_precache() {
	g_AllocString_V = engfunc(EngFunc_AllocString, WEAPON_MODEL_V);
	g_AllocString_P = engfunc(EngFunc_AllocString, WEAPON_MODEL_P);
	g_AllocString_E = engfunc(EngFunc_AllocString, WEAPON_TORN);
	iSpriteIndexTrail = engfunc(EngFunc_PrecacheModel, WEAPON_LASER);
	engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_V);
	engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_P);
	engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_W);

	new const WPN_SOUND[][] = {
		"weapons/tornado_clipin.wav",
		"weapons/tornado_clipout.wav",
		"weapons/tornado_draw.wav"
	}
	for(new i = 0; i < sizeof WPN_SOUND;i++) engfunc(EngFunc_PrecacheSound, WPN_SOUND[i]);
	engfunc(EngFunc_PrecacheSound, WEAPON_SOUND_S);
	engfunc(EngFunc_PrecacheSound, WEAPON_SOUND_E);
	precache_generic("sprites/weapon_tornado.txt")
precache_generic("sprites/640hud149.spr")
precache_generic("sprites/640hud17.spr")
// Get
	register_clcmd("tornado", "give_weapon")
}
public plugin_natives() {
	register_native("tornado", "give_weapon", 1);
}
public HookSelect(iPlayer) {
	engclient_cmd(iPlayer, WEAPON_TORN);
	return PLUGIN_HANDLED;
}
public give_weapon(iPlayer) {
	static iEnt; iEnt = engfunc(EngFunc_CreateNamedEntity, g_AllocString_E);
	if(iEnt <= 0) return 0;
	set_pev(iEnt, pev_spawnflags, SF_NORESPAWN);
	set_pev(iEnt, pev_impulse, WEAPON_KEY);
	ExecuteHam(Ham_Spawn, iEnt);
	UTIL_DropWeapon(iPlayer, 1);
	if(!ExecuteHamB(Ham_AddPlayerItem, iPlayer, iEnt)) {
		engfunc(EngFunc_RemoveEntity, iEnt);
		return 0;
	}
	ExecuteHamB(Ham_Item_AttachToPlayer, iEnt, iPlayer);
	set_pdata_int(iEnt, m_iClip, WEAPON_CLIP, 4);
	new iAmmoType = m_rgAmmo +get_pdata_int(iEnt, m_iPrimaryAmmoType, 4);
	if(get_pdata_int(iPlayer, m_rgAmmo, 5) < WEAPON_AMMO)
	set_pdata_int(iPlayer, iAmmoType, WEAPON_AMMO, 5);
	emit_sound(iPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
	return 1;
}
public fw_Item_Deploy_Post(iItem) {
	if(!CustomItem(iItem)) return;
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
	set_pev_string(iPlayer, pev_viewmodel2, g_AllocString_V);
	set_pev_string(iPlayer, pev_weaponmodel2, g_AllocString_P);
	set_pdata_string(iPlayer, m_szAnimExtention * 4, "m249", -1, 20);
	UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW);
	set_pdata_float(iPlayer, m_flNextAttack, ANIM_DRAW_TIME, 5);
	set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_DRAW_TIME, 4);
	set_pdata_float(iItem, m_flNextReload, 0.0, 4);
	set_pdata_int(iItem, m_iWeaponState, 0, 4);
}
public fw_Item_Holster_Post(iItem) {
	if(!CustomItem(iItem)) return HAM_IGNORED;
	new iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
	emit_sound(iPlayer, CHAN_WEAPON, "common/null.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
	return HAM_IGNORED;
}
public fw_Item_PostFrame(iItem) {
	if(!CustomItem(iItem)) return HAM_IGNORED;
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
	if(get_pdata_int(iItem, m_fInReload, 4) == 1) {
		static iClip; iClip = get_pdata_int(iItem, m_iClip, 4);
		static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, 4);
		static iAmmo; iAmmo = get_pdata_int(iPlayer, iAmmoType, 5);
		static j; j = min(WEAPON_CLIP - iClip, iAmmo);
		set_pdata_int(iItem, m_iClip, iClip+j, 4);
		set_pdata_int(iPlayer, iAmmoType, iAmmo-j, 5);
		set_pdata_int(iItem, m_fInReload, 0, 4);
	}
	if(!(pev(iPlayer, pev_oldbuttons) & IN_ATTACK)) {
		if(get_pdata_int(iItem, m_iWeaponState, 4) == 1) {
			set_pdata_int(iItem, m_iWeaponState, 0, 4);
			emit_sound(iPlayer, CHAN_WEAPON, WEAPON_SOUND_E, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
			UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK_END);
			set_pdata_float(iItem, m_flTimeWeaponIdle, 0.7, 4);
			set_pdata_float(iItem, m_flNextReload, 0.0, 4);
			set_pdata_float(iPlayer, m_flNextAttack, 0.7, 5);
		}
	}
	return HAM_IGNORED;
}
public fw_Item_AddToPlayer_Post(iItem, iPlayer) {
	switch(pev(iItem, pev_impulse)) {
		case WEAPON_KEY: s_weaponlist(iPlayer, true);
		case 0: s_weaponlist(iPlayer, false);
	}
}
public fw_Weapon_Reload(iItem) {
	if(!CustomItem(iItem)) return HAM_IGNORED;
	static iClip; iClip = get_pdata_int(iItem, m_iClip, 4);
	if(iClip >= WEAPON_CLIP) return HAM_SUPERCEDE;
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
	static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, 4);
	if(get_pdata_int(iPlayer, iAmmoType, 5) <= 0) return HAM_SUPERCEDE

	set_pdata_int(iItem, m_iClip, 0, 4);
	ExecuteHam(Ham_Weapon_Reload, iItem);
	set_pdata_int(iItem, m_iClip, iClip, 4);
	set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_RELOAD_TIME, 4);
	set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_RELOAD_TIME, 4);
	set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_RELOAD_TIME, 4);
	set_pdata_float(iPlayer, m_flNextAttack, ANIM_RELOAD_TIME, 5);

	UTIL_SendWeaponAnim(iPlayer, ANIM_RELOAD);
	return HAM_SUPERCEDE;
}
public fw_Weapon_WeaponIdle(iItem) {
	if(!CustomItem(iItem) || get_pdata_float(iItem, m_flTimeWeaponIdle, 4) > 0.0) return HAM_IGNORED;
	UTIL_SendWeaponAnim(get_pdata_cbase(iItem, m_pPlayer, 4), ANIM_IDLE);
	set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_IDLE_TIME, 4);
	return HAM_SUPERCEDE;
}
public fw_Weapon_PrimaryAttack(iItem) {
	if(!CustomItem(iItem)) return HAM_IGNORED;
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
	if(get_pdata_int(iItem, m_iClip, 4) == 0) {
		ExecuteHam(Ham_Weapon_PlayEmptySound, iItem);
		set_pdata_float(iItem, m_flNextPrimaryAttack, 0.2, 4);
		if(pev(iPlayer, pev_weaponanim) != ANIM_ATTACK_EMPTY) {
			UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK_EMPTY);
		}
		return HAM_SUPERCEDE;
	}
	static fw_TraceLine; fw_TraceLine = register_forward(FM_TraceLine, "fw_TraceLine_Post", 1);
	fm_ham_hook(true);
	state FireBullets: Enabled;
	ExecuteHam(Ham_Weapon_PrimaryAttack, iItem);
	state FireBullets: Disabled;
	unregister_forward(FM_TraceLine, fw_TraceLine, 1);
	fm_ham_hook(false);
	static Float:vecPunchangle[3];
	static Float:vecOrigin[3]; fm_get_aim_origin(iPlayer, vecOrigin);

	pev(iPlayer, pev_punchangle, vecPunchangle);
	vecPunchangle[0] *= WEAPON_RECOIL;
	vecPunchangle[1] *= WEAPON_RECOIL;
	vecPunchangle[2] *= WEAPON_RECOIL;
	set_pev(iPlayer, pev_punchangle, vecPunchangle);
	if(get_pdata_float(iItem, m_flNextReload, 4) <= get_gametime()) {
		emit_sound(iPlayer, CHAN_WEAPON, WEAPON_SOUND_S, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		set_pdata_float(iItem, m_flNextReload, get_gametime() + 10.0, 4);
	}
	if(pev(iPlayer, pev_weaponanim) != ANIM_ATTACK) {
		UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK);
	}

	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(TE_BEAMENTPOINT);
	write_short(iPlayer | 0x1000);
	engfunc(EngFunc_WriteCoord, vecOrigin[0]);
	engfunc(EngFunc_WriteCoord, vecOrigin[1]);
	engfunc(EngFunc_WriteCoord, vecOrigin[2]);
	write_short(iSpriteIndexTrail);
	write_byte(0); // framestart
	write_byte(1); // framerate
	write_byte(2); // life
	write_byte(10); // width
	write_byte(3); // noise
	write_byte(0); // red
	write_byte(128); // green
	write_byte(255); // blue
	write_byte(200); // brightness
	write_byte(10); // speed
	message_end();

	set_pdata_int(iItem, m_iWeaponState, 1, 4);
	set_pdata_float(iItem, m_flNextPrimaryAttack, WEAPON_RATE, 4);
	set_pdata_float(iItem, m_flTimeWeaponIdle, 0.5, 4);

	return HAM_SUPERCEDE;
}
public fw_PlaybackEvent() <FireBullets: Enabled> { return FMRES_SUPERCEDE; }
public fw_PlaybackEvent() <FireBullets: Disabled> { return FMRES_IGNORED; }
public fw_PlaybackEvent() <> { return FMRES_IGNORED; }
public fw_TraceAttack(iVictim, iAttacker, Float:flDamage) {
	if(!is_user_connected(iAttacker)) return;
	static iItem; iItem = get_pdata_cbase(iAttacker, m_pActiveItem, 5);
	if(iItem <= 0 || !CustomItem(iItem)) return;
        SetHamParamFloat(3, flDamage * WEAPON_DAMAGE);
}
public fw_UpdateClientData_Post(iPlayer, SendWeapons, CD_Handle) {
	if(get_cd(CD_Handle, CD_DeadFlag) != DEAD_NO) return;
	static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, 5);
	if(iItem <= 0 || !CustomItem(iItem)) return;
	set_cd(CD_Handle, CD_flNextAttack, 999999.0);
}
public fw_SetModel(iEnt) {
	static i, szClassname[32], iItem; 
	pev(iEnt, pev_classname, szClassname, 31);
	if(!equal(szClassname, "weaponbox")) return FMRES_IGNORED;
	for(i = 0; i < 6; i++) {
		iItem = get_pdata_cbase(iEnt, m_rgpPlayerItems_CWeaponBox + i, 4);
		if(iItem > 0 && CustomItem(iItem)) {
			engfunc(EngFunc_SetModel, iEnt, WEAPON_MODEL_W);
			set_pev(iEnt, pev_body, WEAPON_BODY);
			return FMRES_SUPERCEDE;
		}
	}
	return FMRES_IGNORED;
}
public fw_TraceLine_Post(const Float:flOrigin1[3], const Float:flOrigin2[3], iFrag, iIgnore, tr) {
	if(iFrag & IGNORE_MONSTERS) return FMRES_IGNORED;
	static pHit; pHit = get_tr2(tr, TR_pHit);
	if(pHit > 0) {
		if(pev(pHit, pev_solid) != SOLID_BSP) return FMRES_IGNORED;
	}
	return FMRES_IGNORED;
}
public fm_ham_hook(bool:on) {
	if(on) {
		EnableHamForward(g_fw_TraceAttack[0]);
		EnableHamForward(g_fw_TraceAttack[1]);
		EnableHamForward(g_fw_TraceAttack[2]);
		EnableHamForward(g_fw_TraceAttack[3]);
	}
	else {
		DisableHamForward(g_fw_TraceAttack[0]);
		DisableHamForward(g_fw_TraceAttack[1]);
		DisableHamForward(g_fw_TraceAttack[2]);
		DisableHamForward(g_fw_TraceAttack[3]);
	}
}
stock UTIL_SendWeaponAnim(iPlayer, iSequence) {
	set_pev(iPlayer, pev_weaponanim, iSequence);
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, iPlayer);
	write_byte(iSequence);
	write_byte(0);
	message_end();
}
stock UTIL_DropWeapon(iPlayer, iSlot) {
	static iEntity, iNext, szWeaponName[32]; 
	iEntity = get_pdata_cbase(iPlayer, m_rpgPlayerItems + iSlot, 5);
	if(iEntity > 0) {       
                do{
                        iNext = get_pdata_cbase(iEntity, m_pNext, 4)
                        if(get_weaponname(get_pdata_int(iEntity, m_iId, 4), szWeaponName, 31)) {  
                                engclient_cmd(iPlayer, "drop", szWeaponName);
			}
                } while(( iEntity = iNext) > 0);
	}
}
//  4,  90, -1, -1, 0, 14,8,  0, // weapon_aug
stock s_weaponlist(iPlayer, bool:on) {
	message_begin(MSG_ONE, g_iMsgID_Weaponlist, _, iPlayer);
	write_string(on ? WEAPON_NEW : WEAPON_TORN);
	write_byte(4);
	write_byte(on ? WEAPON_AMMO : 90);
	write_byte(-1);
	write_byte(-1);
	write_byte(0);
	write_byte(14);
	write_byte(8);
	write_byte(0);
	message_end();
}
Image

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

#2

Post by Night Fury » 5 years ago

Tornado:
  1. #include <zombie_escape>
  2. #include <fakemeta_util>
  3.  
  4. #define PLUGIN "Tornado"
  5. #define VERSION "1.0"
  6. #define AUTHOR "GenDa"
  7.  
  8. #define CustomItem(%0) (pev(%0, pev_impulse) == WEAPON_KEY)
  9.  
  10. #define VIP_FLAG "VIP_A"
  11.  
  12. #define m_rgpPlayerItems_CWeaponBox 34
  13.  
  14.  
  15. #define m_pPlayer 41
  16. #define m_pNext 42
  17. #define m_iId 43
  18.  
  19.  
  20. #define m_flNextPrimaryAttack 46
  21. #define m_flNextSecondaryAttack 47
  22. #define m_flTimeWeaponIdle 48
  23. #define m_iPrimaryAmmoType 49
  24. #define m_iClip 51
  25. #define m_fInReload 54
  26. #define m_iWeaponState 74
  27. #define m_flNextReload 75
  28.  
  29.  
  30. #define m_flNextAttack 83
  31.  
  32.  
  33. #define m_rpgPlayerItems 367
  34. #define m_pActiveItem 373
  35. #define m_rgAmmo 376
  36. #define m_szAnimExtention 492
  37.  
  38. #define ANIM_IDLE 2
  39. #define ANIM_ATTACK 5
  40. #define ANIM_ATTACK_END 11
  41. #define ANIM_ATTACK_EMPTY 8
  42. #define ANIM_RELOAD 14
  43. #define ANIM_DRAW 19
  44.  
  45. #define ANIM_IDLE_TIME 6.04
  46. #define ANIM_RELOAD_TIME 3.54
  47. #define ANIM_DRAW_TIME 1.37
  48.  
  49. #define WEAPON_KEY 40
  50. #define WEAPON_TORN "weapon_aug"
  51. #define WEAPON_NEW "weapon_tornado"
  52. #define WEAPON_LASER "sprites/tornado-laser.spr"
  53.  
  54. #define WEAPON_ITEM_NAME "Tornado"
  55. #define WEAPON_ITEM_COST 0
  56.  
  57. #define WEAPON_MODEL_V "models/v_tornado.mdl"
  58. #define WEAPON_MODEL_P "models/p_tornado.mdl"
  59. #define WEAPON_MODEL_W "models/w_tornado.mdl"
  60. #define WEAPON_SOUND_S "weapons/tornado-3.wav"
  61. #define WEAPON_SOUND_E "weapons/tornado-shoot_end.wav"
  62. #define WEAPON_BODY 0
  63.  
  64. #define WEAPON_CLIP 70
  65. #define WEAPON_AMMO 210
  66. #define WEAPON_RATE 0.09
  67. #define WEAPON_RECOIL 0.3
  68. #define WEAPON_DAMAGE 1.1
  69.  
  70. new g_AllocString_V, g_AllocString_P, g_AllocString_E
  71. new HamHook:g_fw_TraceAttack[4]
  72. new g_iMsgID_Weaponlist
  73. new iSpriteIndexTrail
  74. new g_iItemID
  75. public plugin_init() {
  76.     register_plugin(PLUGIN, VERSION, AUTHOR);
  77.     RegisterHam(Ham_Item_Deploy, WEAPON_TORN, "fw_Item_Deploy_Post", 1);
  78.     RegisterHam(Ham_Item_Holster, WEAPON_TORN, "fw_Item_Holster_Post", 1);
  79.     RegisterHam(Ham_Item_PostFrame, WEAPON_TORN, "fw_Item_PostFrame");
  80.     RegisterHam(Ham_Item_AddToPlayer, WEAPON_TORN, "fw_Item_AddToPlayer_Post", 1);
  81.    
  82.     RegisterHam(Ham_Weapon_Reload, WEAPON_TORN, "fw_Weapon_Reload");
  83.     RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_TORN, "fw_Weapon_WeaponIdle");
  84.     RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_TORN, "fw_Weapon_PrimaryAttack");
  85.    
  86.     g_fw_TraceAttack[0] = RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack");
  87.     g_fw_TraceAttack[1] = RegisterHam(Ham_TraceAttack, "info_target",    "fw_TraceAttack");
  88.     g_fw_TraceAttack[2] = RegisterHam(Ham_TraceAttack, "player",         "fw_TraceAttack");
  89.     g_fw_TraceAttack[3] = RegisterHam(Ham_TraceAttack, "hostage_entity", "fw_TraceAttack");
  90.     fm_ham_hook(false);
  91.     register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1);
  92.     register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
  93.     register_forward(FM_SetModel, "fw_SetModel");
  94.     g_iMsgID_Weaponlist = get_user_msgid("WeaponList");
  95.     register_clcmd(WEAPON_NEW, "HookSelect");
  96.  
  97.     g_iItemID = ze_register_item("Tornado", 50, 0)
  98.     ze_set_item_vip(g_iItemID, VIP_FLAG)
  99. }
  100.  
  101. public ze_select_item_pre(id, item)
  102. {
  103.     if (item != g_iItemID)
  104.         return ZE_ITEM_AVAILABLE
  105.  
  106.     if (ze_is_user_zombie(id))
  107.         return ZE_ITEM_DONT_SHOW
  108.  
  109.     return ZE_ITEM_AVAILABLE
  110. }
  111.  
  112. public ze_select_item_post(id, item)
  113. {
  114.     if (item != g_iItemID)
  115.         return
  116.  
  117.     give_weapon(id)
  118. }
  119.  
  120. public plugin_precache() {
  121.     g_AllocString_V = engfunc(EngFunc_AllocString, WEAPON_MODEL_V);
  122.     g_AllocString_P = engfunc(EngFunc_AllocString, WEAPON_MODEL_P);
  123.     g_AllocString_E = engfunc(EngFunc_AllocString, WEAPON_TORN);
  124.     iSpriteIndexTrail = engfunc(EngFunc_PrecacheModel, WEAPON_LASER);
  125.     engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_V);
  126.     engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_P);
  127.     engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_W);
  128.  
  129.     new const WPN_SOUND[][] = {
  130.         "weapons/tornado_clipin.wav",
  131.         "weapons/tornado_clipout.wav",
  132.         "weapons/tornado_draw.wav"
  133.     }
  134.     for(new i = 0; i < sizeof WPN_SOUND;i++) engfunc(EngFunc_PrecacheSound, WPN_SOUND[i]);
  135.     engfunc(EngFunc_PrecacheSound, WEAPON_SOUND_S);
  136.     engfunc(EngFunc_PrecacheSound, WEAPON_SOUND_E);
  137.     precache_generic("sprites/weapon_tornado.txt")
  138.     precache_generic("sprites/640hud149.spr")
  139.     precache_generic("sprites/640hud17.spr")
  140. // Get
  141.     register_clcmd("tornado", "give_weapon")
  142. }
  143. public plugin_natives() {
  144.     register_native("tornado", "give_weapon", 1);
  145. }
  146. public HookSelect(iPlayer) {
  147.     engclient_cmd(iPlayer, WEAPON_TORN);
  148.     return PLUGIN_HANDLED;
  149. }
  150. public give_weapon(iPlayer) {
  151.     static iEnt; iEnt = engfunc(EngFunc_CreateNamedEntity, g_AllocString_E);
  152.     if(iEnt <= 0) return 0;
  153.     set_pev(iEnt, pev_spawnflags, SF_NORESPAWN);
  154.     set_pev(iEnt, pev_impulse, WEAPON_KEY);
  155.     ExecuteHam(Ham_Spawn, iEnt);
  156.     UTIL_DropWeapon(iPlayer, 1);
  157.     if(!ExecuteHamB(Ham_AddPlayerItem, iPlayer, iEnt)) {
  158.         engfunc(EngFunc_RemoveEntity, iEnt);
  159.         return 0;
  160.     }
  161.     ExecuteHamB(Ham_Item_AttachToPlayer, iEnt, iPlayer);
  162.     set_pdata_int(iEnt, m_iClip, WEAPON_CLIP, 4);
  163.     new iAmmoType = m_rgAmmo +get_pdata_int(iEnt, m_iPrimaryAmmoType, 4);
  164.     if(get_pdata_int(iPlayer, m_rgAmmo, 5) < WEAPON_AMMO)
  165.     set_pdata_int(iPlayer, iAmmoType, WEAPON_AMMO, 5);
  166.     emit_sound(iPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  167.     return 1;
  168. }
  169. public fw_Item_Deploy_Post(iItem) {
  170.     if(!CustomItem(iItem)) return;
  171.     static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
  172.     set_pev_string(iPlayer, pev_viewmodel2, g_AllocString_V);
  173.     set_pev_string(iPlayer, pev_weaponmodel2, g_AllocString_P);
  174.     set_pdata_string(iPlayer, m_szAnimExtention * 4, "m249", -1, 20);
  175.     UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW);
  176.     set_pdata_float(iPlayer, m_flNextAttack, ANIM_DRAW_TIME, 5);
  177.     set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_DRAW_TIME, 4);
  178.     set_pdata_float(iItem, m_flNextReload, 0.0, 4);
  179.     set_pdata_int(iItem, m_iWeaponState, 0, 4);
  180. }
  181. public fw_Item_Holster_Post(iItem) {
  182.     if(!CustomItem(iItem)) return HAM_IGNORED;
  183.     new iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
  184.     emit_sound(iPlayer, CHAN_WEAPON, "common/null.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
  185.     return HAM_IGNORED;
  186. }
  187. public fw_Item_PostFrame(iItem) {
  188.     if(!CustomItem(iItem)) return HAM_IGNORED;
  189.     static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
  190.     if(get_pdata_int(iItem, m_fInReload, 4) == 1) {
  191.         static iClip; iClip = get_pdata_int(iItem, m_iClip, 4);
  192.         static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, 4);
  193.         static iAmmo; iAmmo = get_pdata_int(iPlayer, iAmmoType, 5);
  194.         static j; j = min(WEAPON_CLIP - iClip, iAmmo);
  195.         set_pdata_int(iItem, m_iClip, iClip+j, 4);
  196.         set_pdata_int(iPlayer, iAmmoType, iAmmo-j, 5);
  197.         set_pdata_int(iItem, m_fInReload, 0, 4);
  198.     }
  199.     if(!(pev(iPlayer, pev_oldbuttons) & IN_ATTACK)) {
  200.         if(get_pdata_int(iItem, m_iWeaponState, 4) == 1) {
  201.             set_pdata_int(iItem, m_iWeaponState, 0, 4);
  202.             emit_sound(iPlayer, CHAN_WEAPON, WEAPON_SOUND_E, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  203.             UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK_END);
  204.             set_pdata_float(iItem, m_flTimeWeaponIdle, 0.7, 4);
  205.             set_pdata_float(iItem, m_flNextReload, 0.0, 4);
  206.             set_pdata_float(iPlayer, m_flNextAttack, 0.7, 5);
  207.         }
  208.     }
  209.     return HAM_IGNORED;
  210. }
  211. public fw_Item_AddToPlayer_Post(iItem, iPlayer) {
  212.     switch(pev(iItem, pev_impulse)) {
  213.         case WEAPON_KEY: s_weaponlist(iPlayer, true);
  214.         case 0: s_weaponlist(iPlayer, false);
  215.     }
  216. }
  217. public fw_Weapon_Reload(iItem) {
  218.     if(!CustomItem(iItem)) return HAM_IGNORED;
  219.     static iClip; iClip = get_pdata_int(iItem, m_iClip, 4);
  220.     if(iClip >= WEAPON_CLIP) return HAM_SUPERCEDE;
  221.     static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
  222.     static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, 4);
  223.     if(get_pdata_int(iPlayer, iAmmoType, 5) <= 0) return HAM_SUPERCEDE
  224.  
  225.     set_pdata_int(iItem, m_iClip, 0, 4);
  226.     ExecuteHam(Ham_Weapon_Reload, iItem);
  227.     set_pdata_int(iItem, m_iClip, iClip, 4);
  228.     set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_RELOAD_TIME, 4);
  229.     set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_RELOAD_TIME, 4);
  230.     set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_RELOAD_TIME, 4);
  231.     set_pdata_float(iPlayer, m_flNextAttack, ANIM_RELOAD_TIME, 5);
  232.  
  233.     UTIL_SendWeaponAnim(iPlayer, ANIM_RELOAD);
  234.     return HAM_SUPERCEDE;
  235. }
  236. public fw_Weapon_WeaponIdle(iItem) {
  237.     if(!CustomItem(iItem) || get_pdata_float(iItem, m_flTimeWeaponIdle, 4) > 0.0) return HAM_IGNORED;
  238.     UTIL_SendWeaponAnim(get_pdata_cbase(iItem, m_pPlayer, 4), ANIM_IDLE);
  239.     set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_IDLE_TIME, 4);
  240.     return HAM_SUPERCEDE;
  241. }
  242. public fw_Weapon_PrimaryAttack(iItem) {
  243.     if(!CustomItem(iItem)) return HAM_IGNORED;
  244.     static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
  245.     if(get_pdata_int(iItem, m_iClip, 4) == 0) {
  246.         ExecuteHam(Ham_Weapon_PlayEmptySound, iItem);
  247.         set_pdata_float(iItem, m_flNextPrimaryAttack, 0.2, 4);
  248.         if(pev(iPlayer, pev_weaponanim) != ANIM_ATTACK_EMPTY) {
  249.             UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK_EMPTY);
  250.         }
  251.         return HAM_SUPERCEDE;
  252.     }
  253.     static fw_TraceLine; fw_TraceLine = register_forward(FM_TraceLine, "fw_TraceLine_Post", 1);
  254.     fm_ham_hook(true);
  255.     state FireBullets: Enabled;
  256.     ExecuteHam(Ham_Weapon_PrimaryAttack, iItem);
  257.     state FireBullets: Disabled;
  258.     unregister_forward(FM_TraceLine, fw_TraceLine, 1);
  259.     fm_ham_hook(false);
  260.     static Float:vecPunchangle[3];
  261.     static Float:vecOrigin[3]; fm_get_aim_origin(iPlayer, vecOrigin);
  262.  
  263.     pev(iPlayer, pev_punchangle, vecPunchangle);
  264.     vecPunchangle[0] *= WEAPON_RECOIL;
  265.     vecPunchangle[1] *= WEAPON_RECOIL;
  266.     vecPunchangle[2] *= WEAPON_RECOIL;
  267.     set_pev(iPlayer, pev_punchangle, vecPunchangle);
  268.     if(get_pdata_float(iItem, m_flNextReload, 4) <= get_gametime()) {
  269.         emit_sound(iPlayer, CHAN_WEAPON, WEAPON_SOUND_S, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  270.         set_pdata_float(iItem, m_flNextReload, get_gametime() + 10.0, 4);
  271.     }
  272.     if(pev(iPlayer, pev_weaponanim) != ANIM_ATTACK) {
  273.         UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK);
  274.     }
  275.  
  276.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  277.     write_byte(TE_BEAMENTPOINT);
  278.     write_short(iPlayer | 0x1000);
  279.     engfunc(EngFunc_WriteCoord, vecOrigin[0]);
  280.     engfunc(EngFunc_WriteCoord, vecOrigin[1]);
  281.     engfunc(EngFunc_WriteCoord, vecOrigin[2]);
  282.     write_short(iSpriteIndexTrail);
  283.     write_byte(0); // framestart
  284.     write_byte(1); // framerate
  285.     write_byte(2); // life
  286.     write_byte(10); // width
  287.     write_byte(3); // noise
  288.     write_byte(0); // red
  289.     write_byte(128); // green
  290.     write_byte(255); // blue
  291.     write_byte(200); // brightness
  292.     write_byte(10); // speed
  293.     message_end();
  294.  
  295.     set_pdata_int(iItem, m_iWeaponState, 1, 4);
  296.     set_pdata_float(iItem, m_flNextPrimaryAttack, WEAPON_RATE, 4);
  297.     set_pdata_float(iItem, m_flTimeWeaponIdle, 0.5, 4);
  298.  
  299.     return HAM_SUPERCEDE;
  300. }
  301. public fw_PlaybackEvent() <FireBullets: Enabled> { return FMRES_SUPERCEDE; }
  302. public fw_PlaybackEvent() <FireBullets: Disabled> { return FMRES_IGNORED; }
  303. public fw_PlaybackEvent() <> { return FMRES_IGNORED; }
  304. public fw_TraceAttack(iVictim, iAttacker, Float:flDamage) {
  305.     if(!is_user_connected(iAttacker)) return;
  306.     static iItem; iItem = get_pdata_cbase(iAttacker, m_pActiveItem, 5);
  307.     if(iItem <= 0 || !CustomItem(iItem)) return;
  308.         SetHamParamFloat(3, flDamage * WEAPON_DAMAGE);
  309. }
  310. public fw_UpdateClientData_Post(iPlayer, SendWeapons, CD_Handle) {
  311.     if(get_cd(CD_Handle, CD_DeadFlag) != DEAD_NO) return;
  312.     static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, 5);
  313.     if(iItem <= 0 || !CustomItem(iItem)) return;
  314.     set_cd(CD_Handle, CD_flNextAttack, 999999.0);
  315. }
  316. public fw_SetModel(iEnt) {
  317.     static i, szClassname[32], iItem;
  318.     pev(iEnt, pev_classname, szClassname, 31);
  319.     if(!equal(szClassname, "weaponbox")) return FMRES_IGNORED;
  320.     for(i = 0; i < 6; i++) {
  321.         iItem = get_pdata_cbase(iEnt, m_rgpPlayerItems_CWeaponBox + i, 4);
  322.         if(iItem > 0 && CustomItem(iItem)) {
  323.             engfunc(EngFunc_SetModel, iEnt, WEAPON_MODEL_W);
  324.             set_pev(iEnt, pev_body, WEAPON_BODY);
  325.             return FMRES_SUPERCEDE;
  326.         }
  327.     }
  328.     return FMRES_IGNORED;
  329. }
  330. public fw_TraceLine_Post(const Float:flOrigin1[3], const Float:flOrigin2[3], iFrag, iIgnore, tr) {
  331.     if(iFrag & IGNORE_MONSTERS) return FMRES_IGNORED;
  332.     static pHit; pHit = get_tr2(tr, TR_pHit);
  333.     if(pHit > 0) {
  334.         if(pev(pHit, pev_solid) != SOLID_BSP) return FMRES_IGNORED;
  335.     }
  336.     return FMRES_IGNORED;
  337. }
  338. public fm_ham_hook(bool:on) {
  339.     if(on) {
  340.         EnableHamForward(g_fw_TraceAttack[0]);
  341.         EnableHamForward(g_fw_TraceAttack[1]);
  342.         EnableHamForward(g_fw_TraceAttack[2]);
  343.         EnableHamForward(g_fw_TraceAttack[3]);
  344.     }
  345.     else {
  346.         DisableHamForward(g_fw_TraceAttack[0]);
  347.         DisableHamForward(g_fw_TraceAttack[1]);
  348.         DisableHamForward(g_fw_TraceAttack[2]);
  349.         DisableHamForward(g_fw_TraceAttack[3]);
  350.     }
  351. }
  352. stock UTIL_SendWeaponAnim(iPlayer, iSequence) {
  353.     set_pev(iPlayer, pev_weaponanim, iSequence);
  354.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, iPlayer);
  355.     write_byte(iSequence);
  356.     write_byte(0);
  357.     message_end();
  358. }
  359. stock UTIL_DropWeapon(iPlayer, iSlot) {
  360.     static iEntity, iNext, szWeaponName[32];
  361.     iEntity = get_pdata_cbase(iPlayer, m_rpgPlayerItems + iSlot, 5);
  362.     if(iEntity > 0) {      
  363.                 do{
  364.                         iNext = get_pdata_cbase(iEntity, m_pNext, 4)
  365.                         if(get_weaponname(get_pdata_int(iEntity, m_iId, 4), szWeaponName, 31)) {  
  366.                                 engclient_cmd(iPlayer, "drop", szWeaponName);
  367.             }
  368.                 } while(( iEntity = iNext) > 0);
  369.     }
  370. }
  371. //  4,  90, -1, -1, 0, 14,8,  0, // weapon_aug
  372. stock s_weaponlist(iPlayer, bool:on) {
  373.     message_begin(MSG_ONE, g_iMsgID_Weaponlist, _, iPlayer);
  374.     write_string(on ? WEAPON_NEW : WEAPON_TORN);
  375.     write_byte(4);
  376.     write_byte(on ? WEAPON_AMMO : 90);
  377.     write_byte(-1);
  378.     write_byte(-1);
  379.     write_byte(0);
  380.     write_byte(14);
  381.     write_byte(8);
  382.     write_byte(0);
  383.     message_end();
  384. }
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 3 guests