rott/kf_sources/KFMod/Classes/M7A3MMedicGun.uc
2026-07-14 20:27:09 +07:00

393 lines
9.5 KiB
Ucode

//=============================================================================
// M7A3MMedicGun
//=============================================================================
// M7 Prototype assault rifle medic gun Inventory Class
//=============================================================================
// Killing Floor Source
// Copyright (C) 2012 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson and IJC
//=============================================================================
class M7A3MMedicGun extends KFMedicGun;
//#exec OBJ LOAD FILE="..\Textures\IJCWeaponPackTexW2.utx"
var localized string ReloadMessage;
var localized string EmptyMessage;
var() Material ScopeGreen;
var() Material ScopeRed;
var() ScriptedTexture MyScriptedTexture;
//var() Shader AmmoCounter;
var string MyMessage;
var int MyHealth;
var Font MyFont;
var Font MyFont2;
var Font SmallMyFont;
var color MyFontColor;
var color MyFontColor2;
var int OldValue;
static function PreloadAssets(Inventory Inv, optional bool bSkipRefCount)
{
default.ScopeGreen = Material(DynamicLoadObject("KF_Weapons5_Scopes_Trip_T.M7A3.Scope_Finall", class'Material', true));
default.ScopeRed = Material(DynamicLoadObject("KF_Weapons5_Scopes_Trip_T.M7A3.ScopeRed_Shader", class'Material', true));
default.MyScriptedTexture = ScriptedTexture(DynamicLoadObject("KF_Weapons5_Scopes_Trip_T.M7A3_Ammo_Script.AmmoNumber", class'ScriptedTexture', true));
default.MyFont = Font(DynamicLoadObject("IJCFonts.DigitalBig", class'Font', true));
default.MyFont2 = Font(DynamicLoadObject("IJCFonts.DigitalBig", class'Font', true));
default.SmallMyFont = Font(DynamicLoadObject("IJCFonts.DigitalMed", class'Font', true));
if ( M7A3MMedicGun(Inv) != none )
{
M7A3MMedicGun(Inv).ScopeGreen = default.ScopeGreen;
M7A3MMedicGun(Inv).ScopeRed = default.ScopeRed;
M7A3MMedicGun(Inv).MyScriptedTexture = default.MyScriptedTexture;
M7A3MMedicGun(Inv).MyFont = default.MyFont;
M7A3MMedicGun(Inv).MyFont2 = default.MyFont2;
M7A3MMedicGun(Inv).SmallMyFont = default.SmallMyFont;
}
super.PreloadAssets(Inv, bSkipRefCount);
}
static function bool UnloadAssets()
{
if ( super.UnloadAssets() )
{
default.ScopeGreen = none;
default.ScopeRed = none;
default.MyScriptedTexture = none;
default.MyFont = none;
default.MyFont2 = none;
default.SmallMyFont = none;
return true;
}
return false;
}
// The server lets the client know they successfully healed someone
simulated function ClientSuccessfulHeal(String HealedName)
{
if( PlayerController(Instigator.Controller) != none )
{
PlayerController(Instigator.controller).ClientMessage(SuccessfulHealMessage$HealedName, 'CriticalEvent');
}
}
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;
MyHealth = ChargeBar() * 100;
}
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( HealAmmoCharge<MaxAmmoCount )
{
HealAmmoCharge+=AmmoToAdd;
if( HealAmmoCharge>MaxAmmoCount )
{
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 final function SetTextColor( byte R, byte G, byte B )
{
MyFontColor.R = R;
MyFontColor.G = G;
MyFontColor.B = B;
MyFontColor.A = 255;
}
simulated final function SetTextColor2( byte R, byte G, byte B )
{
MyFontColor2.R = R;
MyFontColor2.G = G;
MyFontColor2.B = B;
MyFontColor2.A = 255;
}
simulated function RenderOverlays( Canvas Canvas )
{
if( HealAmmoCharge >=250 )
{
MyHealth = ChargeBar() * 100;
SetTextColor2(76,148,177);
++MyScriptedTexture.Revision;
}
else
{
MyHealth = ChargeBar() * 100;
SetTextColor2(218,18,18);
++MyScriptedTexture.Revision;
}
if( AmmoAmount(0) <= 0 )
{
if( OldValue!=-5 )
{
OldValue = -5;
Skins[2] = ScopeRed;
MyFont = SmallMyFont;
SetTextColor(218,18,18);
MyMessage = EmptyMessage;
++MyScriptedTexture.Revision;
}
}
else if( bIsReloading )
{
if( OldValue!=-4 )
{
OldValue = -4;
MyFont = SmallMyFont;
SetTextColor(32,187,112);
MyMessage = ReloadMessage;
++MyScriptedTexture.Revision;
}
}
else if( OldValue!=(MagAmmoRemaining+1) )
{
OldValue = MagAmmoRemaining+1;
Skins[2] = ScopeGreen;
MyFont = Default.MyFont;
if ((MagAmmoRemaining ) <= (MagCapacity/2))
SetTextColor(32,187,112);
if ((MagAmmoRemaining ) <= (MagCapacity/3))
{
SetTextColor(218,18,18);
Skins[2] = ScopeRed;
}
if ((MagAmmoRemaining ) >= (MagCapacity/2))
SetTextColor(76,148,177);
MyMessage = String(MagAmmoRemaining);
++MyScriptedTexture.Revision;
}
MyScriptedTexture.Client = Self;
Super.RenderOverlays(Canvas);
MyScriptedTexture.Client = None;
}
simulated function RenderTexture( ScriptedTexture Tex )
{
local int w, h;
// Ammo
Tex.TextSize( MyMessage, MyFont, w, h );
Tex.DrawText( ( Tex.USize / 2 ) - ( w / 2 ), ( Tex.VSize / 2 ) - ( h / 1.2 ),MyMessage, MyFont, MyFontColor );
// Health
Tex.TextSize( MyHealth, MyFont2, w, h );
Tex.DrawText( ( Tex.USize / 2 ) - ( w / 2 ), ( Tex.VSize / 2 ) - 8 ,MyHealth, MyFont2, MyFontColor2 );
}
defaultproperties
{
HealAmmoCharge=500
AmmoRegenRate=0.300000
HealBoostAmount=30
SkinRefs(0)="KF_Weapons5_Trip_T.Weapons.M7A3_cmb"
SkinRefs(1)="KF_Weapons5_Scopes_Trip_T.M7A3_Ammo_Script.AmmoShader"
SkinRefs(2)="KF_Weapons5_Scopes_Trip_T.M7A3.Scope_Finall"
SleeveNum=3
//KF_Weapons5_Scopes_Trip_T.M7A3.ScopeRed_Shader
WeaponReloadAnim=Reload_M7A3
IdleAimAnim=Idle_Iron
MagCapacity=15
ReloadRate=3.066000
ReloadAnim="Reload"
ReloadAnimRate=1.000000
Weight=6.000000
bModeZeroCanDryFire=True
FireModeClass(0)=Class'KFMod.M7A3MFire'
FireModeClass(1)=Class'KFMod.M7A3MAltFire'
PutDownAnim="PutDown"
SelectSoundRef="KF_M7A3Snd.M7A3_Select"
SelectForce="SwitchToAssaultRifle"
bShowChargingBar=True
Description="An advanced Horzine prototype assault rifle. Modified to fire healing darts."
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
Priority=100
InventoryGroup=4
GroupOffset=13
PickupClass=Class'KFMod.M7A3MPickup'
PlayerViewOffset=(X=20.000000,Y=15.000000,Z=-5.000000)
BobDamping=6.000000
AttachmentClass=Class'KFMod.M7A3MAttachment'
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
ItemName="M7A3 Medic Gun"
MeshRef="KF_Wep_M7A3.M7A3"
DrawScale=1.00000
TransientSoundVolume=1.250000
AmbientGlow=0
AIRating=0.55
CurrentRating=0.55
DisplayFOV=55.000000
StandardDisplayFOV=55.000000
PlayerIronSightFOV=65.000000
ZoomTime=0.25
FastZoomOutTime=0.2
ZoomInRotation=(Pitch=-910,Yaw=0,Roll=2910)
bHasAimingMode=true
ZoomedDisplayFOV=45
HudImageRef="KillingFloor2HUD.WeaponSelect.M7A3_unselected"
SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.M7A3"
TraderInfoTexture=texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_M7A3'
SuccessfulHealMessage="You healed "
ReloadMessage="REL"
EmptyMessage="Empty"
bIsTier3Weapon=true
MyFontColor=(B=177,G=148,R=76,A=255)
MyFontColor2=(B=177,G=148,R=76,A=255)
}