//============================================================================= // Modified MP7 MedicGun Inventory class //============================================================================= class MP7MMedicGun extends KFMedicGun; // Return a float value representing the current healing charge amount simulated function float ChargeBar() { return FClamp(float(HealAmmoCharge)/float(MaxAmmoCount),0,1); } simulated function MaxOutAmmo() { if ( bNoAmmoInstances ) { if ( AmmoClass[0] != None ) AmmoCharge[0] = MaxAmmo(0); return; } if ( Ammo[0] != None ) Ammo[0].AmmoAmount = Ammo[0].MaxAmmo; HealAmmoCharge = MaxAmmoCount; } simulated function SuperMaxOutAmmo() { HealAmmoCharge = 999; if ( bNoAmmoInstances ) { if ( AmmoClass[0] != None ) AmmoCharge[0] = 999; return; } if ( Ammo[0] != None ) Ammo[0].AmmoAmount = 999; } simulated function int MaxAmmo(int mode) { if( Mode == 1 ) { return MaxAmmoCount; } else { return super.MaxAmmo(mode); } } simulated function FillToInitialAmmo() { if ( bNoAmmoInstances ) { if ( AmmoClass[0] != None ) AmmoCharge[0] = Max(AmmoCharge[0], AmmoClass[0].Default.InitialAmount); HealAmmoCharge = MaxAmmoCount; return; } if ( Ammo[0] != None ) Ammo[0].AmmoAmount = Ammo[0].AmmoAmount; HealAmmoCharge = MaxAmmoCount; } simulated function int AmmoAmount(int mode) { if( Mode == 1 ) { return HealAmmoCharge; } else { return super.AmmoAmount(mode); } } simulated function bool AmmoMaxed(int mode) { if( Mode == 1 ) { return HealAmmoCharge>=MaxAmmoCount; } else { return super.AmmoMaxed(mode); } } simulated function float AmmoStatus(optional int Mode) // returns float value for ammo amount { if( Mode == 1 ) { return float(HealAmmoCharge)/float(MaxAmmoCount); } else { return super.AmmoStatus(Mode); } } simulated function bool ConsumeAmmo(int Mode, float load, optional bool bAmountNeededIsMax) { if( Mode == 1 ) { if( Load>HealAmmoCharge ) { return false; } HealAmmoCharge-=Load; Return True; } else { return super.ConsumeAmmo(Mode, load, bAmountNeededIsMax); } } function bool AddAmmo(int AmmoToAdd, int Mode) { if( Mode == 1 ) { if( HealAmmoChargeMaxAmmoCount ) { HealAmmoCharge = MaxAmmoCount; } } return true; } else { return super.AddAmmo(AmmoToAdd,Mode); } } simulated function bool HasAmmo() { if( HealAmmoCharge > 0 ) { return true; } if ( bNoAmmoInstances ) { return ( (AmmoClass[0] != none && FireMode[0] != none && AmmoCharge[0] >= FireMode[0].AmmoPerFire) ); } return (Ammo[0] != none && FireMode[0] != none && Ammo[0].AmmoAmount >= FireMode[0].AmmoPerFire); } simulated function CheckOutOfAmmo() { return; } simulated function Tick(float dt) { if ( Level.NetMode!=NM_Client && HealAmmoCharge MaxAmmoCount ) { HealAmmoCharge = MaxAmmoCount; } } } simulated function bool StartFire(int Mode) { if( Mode == 1 ) return super.StartFire(Mode); if( !super.StartFire(Mode) ) // returns false when mag is empty return false; if( AmmoAmount(0) <= 0 ) { return false; } AnimStopLooping(); if( !FireMode[Mode].IsInState('FireLoop') && (AmmoAmount(0) > 0) ) { FireMode[Mode].StartFiring(); return true; } else { return false; } return true; } simulated function AnimEnd(int channel) { local name anim; local float frame, rate; if(!FireMode[0].IsInState('FireLoop')) { GetAnimParams(0, anim, frame, rate); if (ClientState == WS_ReadyToFire) { if ((FireMode[0] == None || !FireMode[0].bIsFiring) && (FireMode[1] == None || !FireMode[1].bIsFiring)) { PlayIdle(); } } } } simulated event OnZoomOutFinished() { local name anim; local float frame, rate; GetAnimParams(0, anim, frame, rate); if (ClientState == WS_ReadyToFire) { // Play the regular idle anim when we're finished zooming out if (anim == IdleAimAnim) { PlayIdle(); } // Switch looping fire anims if we switched to/from zoomed else if( FireMode[0].IsInState('FireLoop') && anim == 'Fire_Iron_Loop') { LoopAnim('Fire_Loop', FireMode[0].FireLoopAnimRate, FireMode[0].TweenTime); } } } /** * Called by the native code when the interpolation of the first person weapon to the zoomed position finishes */ simulated event OnZoomInFinished() { local name anim; local float frame, rate; GetAnimParams(0, anim, frame, rate); if (ClientState == WS_ReadyToFire) { // Play the iron idle anim when we're finished zooming in if (anim == IdleAnim) { PlayIdle(); } // Switch looping fire anims if we switched to/from zoomed else if( FireMode[0].IsInState('FireLoop') && anim == 'Fire_Loop' ) { LoopAnim('Fire_Iron_Loop', FireMode[0].FireLoopAnimRate, FireMode[0].TweenTime); } } } defaultproperties { HealAmmoCharge=500 AmmoRegenRate=0.300000 HealBoostAmount=20 SkinRefs(0)="KF_Weapons2_Trip_T.Special.MP_7_cmb" SkinRefs(1)="KF_Weapons2_Trip_T.Special.Aimpoint_sight_shdr" SleeveNum=2 WeaponReloadAnim=Reload_MP7 IdleAimAnim=Idle_Iron MagCapacity=20 ReloadRate=3.166 ReloadAnim="Reload" ReloadAnimRate=1.000000 Weight=3.000000 bModeZeroCanDryFire=True FireModeClass(0)=Class'KFMod.MP7MFire' FireModeClass(1)=Class'KFMod.MP7MAltFire' PutDownAnim="PutDown" SelectSoundRef="KF_MP7Snd.MP7_Select" SelectForce="SwitchToAssaultRifle" bShowChargingBar=True Description="An advanced prototype submachine gun. Modified to fire healing darts." EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000) Priority=90 InventoryGroup=3 GroupOffset=5 PickupClass=Class'KFMod.MP7MPickup' PlayerViewOffset=(X=25.000000,Y=20.000000,Z=-6.000000) BobDamping=6.000000 AttachmentClass=Class'KFMod.MP7MAttachment' IconCoords=(X1=245,Y1=39,X2=329,Y2=79) ItemName="MP7M Medic Gun" MeshRef="KF_Weapons2_Trip.MP7_Trip" DrawScale=1.00000 TransientSoundVolume=1.250000 AmbientGlow=0 AIRating=0.55 CurrentRating=0.55 DisplayFOV=55.000000 StandardDisplayFOV=55.0//60.0 PlayerIronSightFOV=65 ZoomTime=0.25 FastZoomOutTime=0.2 ZoomInRotation=(Pitch=-910,Yaw=0,Roll=2910) bHasAimingMode=true ZoomedDisplayFOV=45 HudImageRef="KillingFloor2HUD.WeaponSelect.MP7m_unselected" SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.MP7m" TraderInfoTexture=texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_MP7m' SuccessfulHealMessage="You healed " bIsTier2Weapon=true }