Advertisement
Guest User

My Autoshotgun Code

a guest
Sep 29th, 2017
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.12 KB | None | 0 0
  1. #include "extdll.h"
  2. #include "util.h"
  3. #include "cbase.h"
  4. #include "monsters.h"
  5. #include "weapons.h"
  6. #include "nodes.h"
  7. #include "player.h"
  8. #include "gamerules.h"
  9.  
  10.  
  11. enum autoshotgun_e {
  12. SHOTGUN_IDLE = 0,
  13. SHOTGUN_FIRE,
  14. SHOTGUN_FIRE2,
  15. SHOTGUN_RELOAD,
  16. SHOTGUN_PUMP,
  17. SHOTGUN_START_RELOAD,
  18. SHOTGUN_DRAW,
  19. SHOTGUN_HOLSTER,
  20. SHOTGUN_IDLE4,
  21. SHOTGUN_IDLE_DEEP
  22. };
  23.  
  24. LINK_ENTITY_TO_CLASS( weapon_autoshotgun, CAutoShotgun );
  25.  
  26. void CAutoShotgun::Spawn( )
  27. {
  28. Precache( );
  29. m_iId = WEAPON_AUTOSHOTGUN;
  30. SET_MODEL(ENT(pev), "models/w_shotgun.mdl");
  31.  
  32. m_iDefaultAmmo = SHOTGUN_DEFAULT_GIVE;
  33.  
  34. FallInit();// get ready to fall
  35. }
  36.  
  37.  
  38. void CAutoShotgun::Precache( void )
  39. {
  40. PRECACHE_MODEL("models/v_autoshotgun.mdl");
  41. PRECACHE_MODEL("models/w_shotgun.mdl");
  42. PRECACHE_MODEL("models/p_shotgun.mdl");
  43.  
  44. m_iShell = PRECACHE_MODEL ("models/shotgunshell.mdl");// shotgun shell
  45.  
  46. PRECACHE_SOUND("items/9mmclip1.wav");
  47.  
  48. PRECACHE_SOUND ("weapons/dbarrel1.wav");//shotgun
  49. PRECACHE_SOUND ("weapons/sbarrel1.wav");//shotgun
  50.  
  51. PRECACHE_SOUND ("weapons/reload1.wav"); // shotgun reload
  52. PRECACHE_SOUND ("weapons/reload2.wav"); // shotgun reload
  53. PRECACHE_SOUND ("weapons/reload3.wav"); // shotgun reload
  54.  
  55. // PRECACHE_SOUND ("weapons/sshell1.wav"); // shotgun reload - played on client
  56. // PRECACHE_SOUND ("weapons/sshell3.wav"); // shotgun reload - played on client
  57.  
  58. PRECACHE_SOUND ("weapons/357_cock1.wav"); // gun empty sound
  59. PRECACHE_SOUND ("weapons/scock1.wav"); // cock gun
  60.  
  61. m_usAutoShotgun = PRECACHE_EVENT( 1, "events/autoshotgun.sc" );
  62. }
  63.  
  64. int CAutoShotgun::AddToPlayer( CBasePlayer *pPlayer )
  65. {
  66. if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) )
  67. {
  68. MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev );
  69. WRITE_BYTE( m_iId );
  70. MESSAGE_END();
  71. return TRUE;
  72. }
  73. return FALSE;
  74. }
  75.  
  76.  
  77. int CAutoShotgun::GetItemInfo(ItemInfo *p)
  78. {
  79. p->pszName = STRING(pev->classname);
  80. p->pszAmmo1 = "buckshot";
  81. p->iMaxAmmo1 = BUCKSHOT_MAX_CARRY;
  82. p->pszAmmo2 = NULL;
  83. p->iMaxAmmo2 = -1;
  84. p->iMaxClip = SHOTGUN_MAX_CLIP;
  85. p->iSlot = 2;
  86. p->iPosition = 3;
  87. p->iFlags = 0;
  88. p->iId = m_iId = WEAPON_AUTOSHOTGUN;
  89. p->iWeight = SHOTGUN_WEIGHT;
  90.  
  91. return 1;
  92. }
  93.  
  94.  
  95.  
  96. BOOL CAutoShotgun::Deploy( )
  97. {
  98. return DefaultDeploy( "models/v_autoshotgun.mdl", "models/p_shotgun.mdl", SHOTGUN_DRAW, "shotgun" );
  99. }
  100.  
  101. void CAutoShotgun::PrimaryAttack()
  102. {
  103. // don't fire underwater
  104. if (m_pPlayer->pev->waterlevel == 3)
  105. {
  106. PlayEmptySound( );
  107. m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.15;
  108. return;
  109. }
  110.  
  111. if (m_iClip <= 0)
  112. {
  113. Reload( );
  114. if (m_iClip == 0)
  115. PlayEmptySound( );
  116. return;
  117. }
  118.  
  119. m_pPlayer->m_iWeaponVolume = LOUD_GUN_VOLUME;
  120. m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH;
  121.  
  122. m_iClip--;
  123.  
  124. int flags;
  125. #if defined( CLIENT_WEAPONS )
  126. flags = FEV_NOTHOST;
  127. #else
  128. flags = 0;
  129. #endif
  130.  
  131.  
  132. m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH;
  133.  
  134. Vector vecSrc = m_pPlayer->GetGunPosition( );
  135. Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );
  136.  
  137. Vector vecDir;
  138.  
  139.  
  140.  
  141. PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usAutoShotgun, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 );
  142.  
  143.  
  144. if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0)
  145. // HEV suit - indicate out of ammo condition
  146. m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0);
  147.  
  148. if (m_iClip != 0)
  149. m_flPumpTime = gpGlobals->time + 0.5;
  150.  
  151. m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.375;
  152. // m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.75;
  153. if (m_iClip != 0)
  154. m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 5.0;
  155. else
  156. m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.375;
  157. m_fInSpecialReload = 0;
  158. }
  159.  
  160.  
  161.  
  162. void CAutoShotgun::Reload( void )
  163. {
  164. if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == SHOTGUN_MAX_CLIP)
  165. return;
  166.  
  167. // don't reload until recoil is done
  168. if (m_flNextPrimaryAttack > UTIL_WeaponTimeBase())
  169. return;
  170.  
  171. // check to see if we're ready to reload
  172. if (m_fInSpecialReload == 0)
  173. {
  174. SendWeaponAnim( SHOTGUN_START_RELOAD );
  175. m_fInSpecialReload = 1;
  176. m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.6;
  177. m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.6;
  178. m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 1.0;
  179. m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1.0;
  180. return;
  181. }
  182. else if (m_fInSpecialReload == 1)
  183. {
  184. if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase())
  185. return;
  186. // was waiting for gun to move to side
  187. m_fInSpecialReload = 2;
  188.  
  189. if (RANDOM_LONG(0,1))
  190. EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/reload1.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG(0,0x1f));
  191. else
  192. EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/reload3.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG(0,0x1f));
  193.  
  194. SendWeaponAnim( SHOTGUN_RELOAD );
  195.  
  196. m_flNextReload = UTIL_WeaponTimeBase() + 0.5;
  197. m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5;
  198. }
  199. else
  200. {
  201. // Add them to the clip
  202. m_iClip += 1;
  203. m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= 1;
  204. m_fInSpecialReload = 1;
  205. }
  206. }
  207.  
  208.  
  209. void CAutoShotgun::WeaponIdle( void )
  210. {
  211. ResetEmptySound( );
  212.  
  213. m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );
  214.  
  215. if ( m_flPumpTime && m_flPumpTime < gpGlobals->time )
  216. {
  217. // play pumping sound
  218. EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/scock1.wav", 1, ATTN_NORM, 0, 95 + RANDOM_LONG(0,0x1f));
  219. m_flPumpTime = 0;
  220. }
  221.  
  222. if (m_flTimeWeaponIdle < UTIL_WeaponTimeBase() )
  223. {
  224. if (m_iClip == 0 && m_fInSpecialReload == 0 && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType])
  225. {
  226. Reload( );
  227. }
  228. else if (m_fInSpecialReload != 0)
  229. {
  230. if (m_iClip != 8 && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType])
  231. {
  232. Reload( );
  233. }
  234. else
  235. {
  236. // reload debounce has timed out
  237. SendWeaponAnim( SHOTGUN_PUMP );
  238.  
  239. // play cocking sound
  240. EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/scock1.wav", 1, ATTN_NORM, 0, 95 + RANDOM_LONG(0,0x1f));
  241. m_fInSpecialReload = 0;
  242. m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.5;
  243. }
  244. }
  245. else
  246. {
  247. int iAnim;
  248. float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0, 1 );
  249. if (flRand <= 0.8)
  250. {
  251. iAnim = SHOTGUN_IDLE_DEEP;
  252. m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + (60.0/12.0);// * RANDOM_LONG(2, 5);
  253. }
  254. else if (flRand <= 0.95)
  255. {
  256. iAnim = SHOTGUN_IDLE;
  257. m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + (20.0/9.0);
  258. }
  259. else
  260. {
  261. iAnim = SHOTGUN_IDLE4;
  262. m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + (20.0/9.0);
  263. }
  264. SendWeaponAnim( iAnim );
  265. }
  266. }
  267. }
  268.  
  269.  
  270. /*
  271. class CShotgunAmmo : public CBasePlayerAmmo
  272. {
  273. void Spawn( void )
  274. {
  275. Precache( );
  276. SET_MODEL(ENT(pev), "models/w_shotbox.mdl");
  277. CBasePlayerAmmo::Spawn( );
  278. }
  279. void Precache( void )
  280. {
  281. PRECACHE_MODEL ("models/w_shotbox.mdl");
  282. PRECACHE_SOUND("items/9mmclip1.wav");
  283. }
  284. BOOL AddAmmo( CBaseEntity *pOther )
  285. {
  286. if (pOther->GiveAmmo( AMMO_BUCKSHOTBOX_GIVE, "buckshot", BUCKSHOT_MAX_CARRY ) != -1)
  287. {
  288. EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM);
  289. return TRUE;
  290. }
  291. return FALSE;
  292. }
  293. };
  294.  
  295. LINK_ENTITY_TO_CLASS( ammo_buckshot, CShotgunAmmo );
  296.  
  297.  
  298. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement