Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * The original Half-Life version of the mp5
- */
- enum Mp5Animation
- {
- MP5_LONGIDLE = 0,
- MP5_IDLE1,
- MP5_LAUNCH,
- MP5_RELOAD,
- MP5_DEPLOY,
- MP5_FIRE1,
- MP5_FIRE2,
- MP5_FIRE3,
- };
- const int MP5_DEFAULT_GIVE = 150;
- const int MP5_DEFAULT_GIVE2 = 2;
- const int MP5_MAX_CARRY = 300;
- const int MP5_MAX_CARRY2 = 10;
- const int MP5_MAX_AMMO = 450;
- const int MP5_MAX_AMMO2 = 30;
- const int MP5_MAX_CLIP = 150;
- const int MP5_WEIGHT = 5;
- class weapon_mp5inator : ScriptBasePlayerWeaponEntity
- {
- float m_flNextAnimTime;
- int m_iShell;
- int m_iSecondaryAmmo;
- void Spawn()
- {
- Precache();
- g_EntityFuncs.SetModel( self, "models/w_9mmAR.mdl" );
- self.m_iDefaultAmmo = MP5_DEFAULT_GIVE;
- self.m_iSecondaryAmmoType = 0;
- self.FallInit();
- }
- void Precache()
- {
- self.PrecacheCustomModels();
- g_Game.PrecacheModel( "models/v_9mmAR.mdl" );
- g_Game.PrecacheModel( "models/w_9mmAR.mdl" );
- g_Game.PrecacheModel( "models/gonome.mdl" );
- g_Game.PrecacheModel( "models/gman.mdl" );
- g_Game.PrecacheModel( "models/pit_drone.mdl" );
- g_Game.PrecacheModel( "models/big_mom.mdl" );
- g_Game.PrecacheModel( "models/controller.mdl" );
- g_Game.PrecacheModel( "models/garg.mdl" );
- g_Game.PrecacheModel( "models/houndeye.mdl" );
- g_Game.PrecacheModel( "models/strooper.mdl" );
- g_Game.PrecacheModel( "models/headcrab.mdl" );
- m_iShell = g_Game.PrecacheModel( "models/shell.mdl" );
- g_Game.PrecacheModel( "models/grenade.mdl" );
- g_Game.PrecacheModel( "models/w_9mmARclip.mdl" );
- g_SoundSystem.PrecacheSound( "items/9mmclip1.wav" );
- //These are played by the model, needs changing there
- g_SoundSystem.PrecacheSound( "items/clipinsert1.wav" );
- g_SoundSystem.PrecacheSound( "items/cliprelease1.wav" );
- g_SoundSystem.PrecacheSound( "items/guncock1.wav" );
- g_SoundSystem.PrecacheSound( "weapons/hks1.wav" );
- g_SoundSystem.PrecacheSound( "weapons/hks2.wav" );
- g_SoundSystem.PrecacheSound( "weapons/hks3.wav" );
- g_SoundSystem.PrecacheSound( "weapons/glauncher.wav" );
- g_SoundSystem.PrecacheSound( "weapons/glauncher2.wav" );
- g_SoundSystem.PrecacheSound( "weapons/357_cock1.wav" );
- }
- bool GetItemInfo( ItemInfo& out info )
- {
- info.iMaxAmmo1 = MP5_MAX_AMMO;
- info.iMaxAmmo2 = MP5_MAX_AMMO2;
- info.iMaxClip = MP5_MAX_CLIP;
- info.iSlot = 2;
- info.iPosition = 4;
- info.iFlags = 0;
- info.iWeight = MP5_WEIGHT;
- return true;
- }
- bool AddToPlayer( CBasePlayer@ pPlayer )
- {
- if( BaseClass.AddToPlayer( pPlayer ) )
- {
- NetworkMessage message( MSG_ONE, NetworkMessages::WeapPickup, pPlayer.edict() );
- message.WriteLong( self.m_iId );
- message.End();
- return true;
- }
- return false;
- }
- bool PlayEmptySound()
- {
- if( self.m_bPlayEmptySound )
- {
- self.m_bPlayEmptySound = false;
- g_SoundSystem.EmitSoundDyn( self.m_pPlayer.edict(), CHAN_WEAPON, "weapons/357_cock1.wav", 0.8, ATTN_NORM, 0, PITCH_NORM );
- }
- return false;
- }
- bool Deploy()
- {
- float test;
- test = Math.RandomLong(0 ,8);
- switch(int(test))
- {
- case 0: return self.DefaultDeploy( self.GetV_Model( "models/v_9mmAR.mdl" ), self.GetP_Model( "models/gman.mdl" ), MP5_DEPLOY, "mp5" );
- case 1: return self.DefaultDeploy( self.GetV_Model( "models/v_9mmAR.mdl" ), self.GetP_Model( "models/gonome.mdl" ), MP5_DEPLOY, "mp5" );
- case 2: return self.DefaultDeploy( self.GetV_Model( "models/v_9mmAR.mdl" ), self.GetP_Model( "models/controller.mdl" ), MP5_DEPLOY, "mp5" );
- case 3: return self.DefaultDeploy( self.GetV_Model( "models/v_9mmAR.mdl" ), self.GetP_Model( "models/strooper.mdl" ), MP5_DEPLOY, "mp5" );
- case 4: return self.DefaultDeploy( self.GetV_Model( "models/v_9mmAR.mdl" ), self.GetP_Model( "models/big_mom.mdl" ), MP5_DEPLOY, "mp5" );
- case 5: return self.DefaultDeploy( self.GetV_Model( "models/v_9mmAR.mdl" ), self.GetP_Model( "models/garg.mdl" ), MP5_DEPLOY, "mp5" );
- case 6: return self.DefaultDeploy( self.GetV_Model( "models/v_9mmAR.mdl" ), self.GetP_Model( "models/pit_drone.mdl" ), MP5_DEPLOY, "mp5" );
- case 7: return self.DefaultDeploy( self.GetV_Model( "models/v_9mmAR.mdl" ), self.GetP_Model( "models/houndeye.mdl" ), MP5_DEPLOY, "mp5" );
- case 8: return self.DefaultDeploy( self.GetV_Model( "models/v_9mmAR.mdl" ), self.GetP_Model( "models/headcrab.mdl" ), MP5_DEPLOY, "mp5" );
- }
- return self.DefaultDeploy( self.GetV_Model( "models/v_9mmAR.mdl" ), self.GetP_Model( "models/big_mom.mdl" ), MP5_DEPLOY, "mp5" );
- }
- float WeaponTimeBase()
- {
- return g_Engine.time; //g_WeaponFuncs.WeaponTimeBase();
- }
- void PrimaryAttack()
- {
- // don't fire underwater
- if( self.m_pPlayer.pev.waterlevel == WATERLEVEL_HEAD )
- {
- self.PlayEmptySound( );
- self.m_flNextPrimaryAttack = WeaponTimeBase() + 0.05;
- return;
- }
- if( self.m_iClip <= 0 )
- {
- self.PlayEmptySound();
- self.m_flNextPrimaryAttack = WeaponTimeBase() + 0.05;
- return;
- }
- self.m_pPlayer.m_iWeaponVolume = NORMAL_GUN_VOLUME;
- self.m_pPlayer.m_iWeaponFlash = NORMAL_GUN_FLASH;
- --self.m_iClip;
- switch ( g_PlayerFuncs.SharedRandomLong( self.m_pPlayer.random_seed, 0, 2 ) )
- {
- case 0: self.SendWeaponAnim( MP5_FIRE1, 0, 0 ); break;
- case 1: self.SendWeaponAnim( MP5_FIRE2, 0, 0 ); break;
- case 2: self.SendWeaponAnim( MP5_FIRE3, 0, 0 ); break;
- }
- g_SoundSystem.EmitSoundDyn( self.m_pPlayer.edict(), CHAN_WEAPON, "weapons/357_shot1.wav", 1.0, ATTN_NORM, 0, 95 + Math.RandomLong( 0, 10 ) );
- // player "shoot" animation
- self.m_pPlayer.SetAnimation( PLAYER_ATTACK1 );
- Vector vecSrc = self.m_pPlayer.GetGunPosition();
- Vector vecAiming = self.m_pPlayer.GetAutoaimVector( AUTOAIM_2DEGREES );
- // optimized multiplayer. Widened to make it easier to hit a moving player
- self.m_pPlayer.FireBullets( 1, vecSrc, vecAiming, VECTOR_CONE_1DEGREES, 8192, BULLET_PLAYER_357, 2 );
- if( self.m_iClip == 0 && self.m_pPlayer.m_rgAmmo( self.m_iPrimaryAmmoType ) <= 0 )
- // HEV suit - indicate out of ammo condition
- self.m_pPlayer.SetSuitUpdate( "!HEV_AMO0", false, 0 );
- self.m_flNextPrimaryAttack = g_Engine.time + 0.05;
- if( self.m_flNextPrimaryAttack < WeaponTimeBase() )
- self.m_flNextPrimaryAttack = WeaponTimeBase() + 0.05;
- self.m_flTimeWeaponIdle = WeaponTimeBase() + g_PlayerFuncs.SharedRandomFloat( self.m_pPlayer.random_seed, 10, 15 );
- TraceResult tr;
- float x, y;
- g_Utility.GetCircularGaussianSpread( x, y );
- Vector vecDir = vecAiming
- + x * VECTOR_CONE_1DEGREES.x * g_Engine.v_right
- + y * VECTOR_CONE_1DEGREES.y * g_Engine.v_up;
- Vector vecEnd = vecSrc + vecDir * 4096;
- g_Utility.TraceLine( vecSrc, vecEnd, dont_ignore_monsters, self.m_pPlayer.edict(), tr );
- if( tr.flFraction < 1.0 )
- {
- if( tr.pHit !is null )
- {
- CBaseEntity@ pHit = g_EntityFuncs.Instance( tr.pHit );
- if( pHit is null || pHit.IsBSPModel() )
- g_WeaponFuncs.DecalGunshot( tr, BULLET_PLAYER_MP5 );
- }
- }
- }
- void SecondaryAttack()
- {
- // don't fire underwater
- if( self.m_pPlayer.pev.waterlevel == WATERLEVEL_HEAD )
- {
- self.PlayEmptySound();
- self.m_flNextPrimaryAttack = WeaponTimeBase() + 0.15;
- return;
- }
- if( self.m_pPlayer.m_rgAmmo(self.m_iSecondaryAmmoType) <= 0 )
- {
- self.PlayEmptySound();
- return;
- }
- self.m_pPlayer.m_iWeaponVolume = NORMAL_GUN_VOLUME;
- self.m_pPlayer.m_iWeaponFlash = BRIGHT_GUN_FLASH;
- self.m_pPlayer.m_iExtraSoundTypes = bits_SOUND_DANGER;
- self.m_pPlayer.m_flStopExtraSoundTime = WeaponTimeBase() + 0.2;
- self.m_pPlayer.m_rgAmmo( self.m_iSecondaryAmmoType, self.m_pPlayer.m_rgAmmo( self.m_iSecondaryAmmoType ) - 1 );
- self.SendWeaponAnim( MP5_LAUNCH );
- // player "shoot" animation
- self.m_pPlayer.SetAnimation( PLAYER_ATTACK1 );
- if ( g_PlayerFuncs.SharedRandomLong( self.m_pPlayer.random_seed, 0, 1 ) != 0 )
- {
- // play this sound through BODY channel so we can hear it if player didn't stop firing MP3
- g_SoundSystem.EmitSoundDyn( self.m_pPlayer.edict(), CHAN_WEAPON, "weapons/glauncher.wav", 0.8, ATTN_NORM, 0, PITCH_NORM );
- }
- else
- {
- // play this sound through BODY channel so we can hear it if player didn't stop firing MP3
- g_SoundSystem.EmitSoundDyn( self.m_pPlayer.edict(), CHAN_WEAPON, "weapons/glauncher2.wav", 0.8, ATTN_NORM, 0, PITCH_NORM );
- }
- Math.MakeVectors( self.m_pPlayer.pev.v_angle + self.m_pPlayer.pev.punchangle );
- // we don't add in player velocity anymore.
- if( ( self.m_pPlayer.pev.button & IN_DUCK ) != 0 )
- {
- g_EntityFuncs.ShootContact( self.m_pPlayer.pev,
- self.m_pPlayer.pev.origin + g_Engine.v_forward * 16 + g_Engine.v_right * 6,
- g_Engine.v_forward * 900 ); //800
- }
- else
- {
- g_EntityFuncs.ShootContact( self.m_pPlayer.pev,
- self.m_pPlayer.pev.origin + self.m_pPlayer.pev.view_ofs * 0.5 + g_Engine.v_forward * 16 + g_Engine.v_right * 6,
- g_Engine.v_forward * 900 ); //800
- }
- self.m_flNextPrimaryAttack = WeaponTimeBase() + 0.01;
- self.m_flNextSecondaryAttack = WeaponTimeBase() + 0.25;
- self.m_flTimeWeaponIdle = WeaponTimeBase() + 5;// idle pretty soon after shooting.
- if( self.m_pPlayer.m_rgAmmo(self.m_iSecondaryAmmoType) <= 0 )
- // HEV suit - indicate out of ammo condition
- self.m_pPlayer.SetSuitUpdate( "!HEV_AMO0", false, 0 );
- }
- void Reload()
- {
- self.DefaultReload( MP5_MAX_CLIP, MP5_RELOAD, 1.5, 0 );
- //Set 3rd person reloading animation -Sniper
- BaseClass.Reload();
- }
- void WeaponIdle()
- {
- self.ResetEmptySound();
- self.m_pPlayer.GetAutoaimVector( AUTOAIM_5DEGREES );
- if( self.m_flTimeWeaponIdle > WeaponTimeBase() )
- return;
- int iAnim;
- switch( g_PlayerFuncs.SharedRandomLong( self.m_pPlayer.random_seed, 0, 1 ) )
- {
- case 0:
- iAnim = MP5_LONGIDLE;
- break;
- case 1:
- iAnim = MP5_IDLE1;
- break;
- default:
- iAnim = MP5_IDLE1;
- break;
- }
- self.SendWeaponAnim( iAnim );
- self.m_flTimeWeaponIdle = WeaponTimeBase() + g_PlayerFuncs.SharedRandomFloat( self.m_pPlayer.random_seed, 10, 15 );// how long till we do this again.
- }
- }
- class MP5AmmoBox : ScriptBasePlayerAmmoEntity
- {
- void Spawn()
- {
- Precache();
- g_EntityFuncs.SetModel( self, "models/w_9mmbox.mdl" );
- BaseClass.Spawn();
- }
- void Precache()
- {
- g_Game.PrecacheModel( "models/w_9mmbox.mdl" );
- g_SoundSystem.PrecacheSound( "items/9mmclip1.wav" );
- }
- bool AddAmmo( CBaseEntity@ pither )
- {
- int iGive;
- iGive = MP5_DEFAULT_GIVE;
- if( pither.GiveAmmo( iGive, "ammo_mp5inator", MP5_MAX_CARRY ) != -1 )
- {
- g_SoundSystem.EmitSound( self.edict(), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM );
- return true;
- }
- return false;
- }
- }
- class MP5Grenades : ScriptBasePlayerAmmoEntity
- {
- void Spawn()
- {
- Precache();
- g_EntityFuncs.SetModel( self, "models/w_argrenade.mdl" );
- BaseClass.Spawn();
- }
- void Precache()
- {
- g_Game.PrecacheModel( "models/w_argrenade.mdl" );
- g_SoundSystem.PrecacheSound( "items/9mmclip1.wav" );
- }
- bool AddAmmo( CBaseEntity@ pither )
- {
- int iGive;
- iGive = MP5_DEFAULT_GIVE2;
- if( pither.GiveAmmo( iGive, "ammo_mp5nades", MP5_MAX_CARRY2 ) != -1 )
- {
- g_SoundSystem.EmitSound( self.edict(), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM );
- return true;
- }
- return false;
- }
- }
- string GetName()
- {
- return "weapon_mp5inator";
- }
- string GetAmmoName()
- {
- return "ammo_mp5inator";
- }
- string GetAmmo2Name()
- {
- return "ammo_mp5nades";
- }
- void RegisterMP5()
- {
- g_CustomEntityFuncs.RegisterCustomEntity( GetName(), GetName() );
- g_ItemRegistry.RegisterWeapon( GetName(), "hl_weapons", GetAmmoName(), GetAmmo2Name);
- }
- void RegisterMP5AmmoBox()
- {
- g_CustomEntityFuncs.RegisterCustomEntity( "MP5AmmoBox", GetAmmoName() );
- }
- Void RegisterMP5Grenades()
- {
- g_CustomEntityFuncs.RegisterCustomEntity( "MP5Grenades", GetAmmo2Name() );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement