297 lines
9.3 KiB
Ucode
297 lines
9.3 KiB
Ucode
//=============================================================================
|
|
// ZEDMKIIWeapon
|
|
//=============================================================================
|
|
// Inventory class for the Zed Gun Mark II Weapon
|
|
//=============================================================================
|
|
// Killing Floor Source
|
|
// Copyright (C) 2013 Tripwire Interactive LLC
|
|
// - John "Ramm-Jaeger" Gibson
|
|
//=============================================================================
|
|
class ZEDMKIIWeapon extends KFWeapon;
|
|
|
|
var float EnemyUpdateTime;
|
|
|
|
var() sound AlarmSound; // An alarm that sounds when big guys get near
|
|
var float NextAlarmTime; // The next time this alarm goes off
|
|
var float LastAlarmTime; // The last time the alarm went off
|
|
var bool bAlarmStatus;
|
|
var bool bOldAlarmStatus;
|
|
|
|
// LED lights
|
|
var() Material LedOnMaterial;
|
|
var() Material LedOffMaterial;
|
|
// References to led lights
|
|
var string LedOnMaterialRef;
|
|
var string LedOffMaterialRef;
|
|
|
|
replication
|
|
{
|
|
reliable if(Role == ROLE_Authority)
|
|
ClientAlarmSound;
|
|
}
|
|
|
|
static function PreloadAssets(Inventory Inv, optional bool bSkipRefCount)
|
|
{
|
|
default.LedOnMaterial = Material(DynamicLoadObject(default.LedOnMaterialRef, class'Material', true));
|
|
default.LedOffMaterial = Material(DynamicLoadObject(default.LedOffMaterialRef, class'Material', true));
|
|
|
|
if ( ZEDMKIIWeapon(Inv) != none )
|
|
{
|
|
ZEDMKIIWeapon(Inv).LedOnMaterial = default.LedOnMaterial;
|
|
ZEDMKIIWeapon(Inv).LedOffMaterial = default.LedOffMaterial;
|
|
}
|
|
|
|
super.PreloadAssets(Inv, bSkipRefCount);
|
|
}
|
|
|
|
static function bool UnloadAssets()
|
|
{
|
|
if ( super.UnloadAssets() )
|
|
{
|
|
default.LedOnMaterial = none;
|
|
default.LedOffMaterial = none;
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// Overridden to handle reducing the ammo for the secondary fire
|
|
simulated function bool ConsumeAmmo( int Mode, float Load, optional bool bAmountNeededIsMax )
|
|
{
|
|
local Inventory Inv;
|
|
local bool bOutOfAmmo;
|
|
local KFWeapon KFWeap;
|
|
|
|
if ( Super(Weapon).ConsumeAmmo(Mode, Load, bAmountNeededIsMax) )
|
|
{
|
|
if ( Load > 0 && (Mode == 0 || bReduceMagAmmoOnSecondaryFire) )
|
|
MagAmmoRemaining -= Load;
|
|
|
|
NetUpdateTime = Level.TimeSeconds - 1;
|
|
|
|
if ( FireMode[Mode].AmmoPerFire > 0 && InventoryGroup > 0 && !bMeleeWeapon && bConsumesPhysicalAmmo &&
|
|
(Ammo[0] == none || FireMode[0] == none || FireMode[0].AmmoPerFire <= 0 || Ammo[0].AmmoAmount < FireMode[0].AmmoPerFire) &&
|
|
(Ammo[1] == none || FireMode[1] == none || FireMode[1].AmmoPerFire <= 0 || Ammo[1].AmmoAmount < FireMode[1].AmmoPerFire) )
|
|
{
|
|
bOutOfAmmo = true;
|
|
|
|
for ( Inv = Instigator.Inventory; Inv != none; Inv = Inv.Inventory )
|
|
{
|
|
KFWeap = KFWeapon(Inv);
|
|
|
|
if ( Inv.InventoryGroup > 0 && KFWeap != none && !KFWeap.bMeleeWeapon && KFWeap.bConsumesPhysicalAmmo &&
|
|
((KFWeap.Ammo[0] != none && KFWeap.FireMode[0] != none && KFWeap.FireMode[0].AmmoPerFire > 0 &&KFWeap.Ammo[0].AmmoAmount >= KFWeap.FireMode[0].AmmoPerFire) ||
|
|
(KFWeap.Ammo[1] != none && KFWeap.FireMode[1] != none && KFWeap.FireMode[1].AmmoPerFire > 0 && KFWeap.Ammo[1].AmmoAmount >= KFWeap.FireMode[1].AmmoPerFire)) )
|
|
{
|
|
bOutOfAmmo = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( bOutOfAmmo )
|
|
{
|
|
PlayerController(Instigator.Controller).Speech('AUTO', 3, "");
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Allow this weapon to auto reload on alt fire
|
|
simulated function AltFire(float F)
|
|
{
|
|
if( !bIsReloading &&
|
|
FireMode[1].NextFireTime <= Level.TimeSeconds )
|
|
{
|
|
// We're dry, ask the server to autoreload
|
|
if( MagAmmoRemaining < 1 )
|
|
{
|
|
ServerRequestAutoReload();
|
|
PlayOwnedSound(FireMode[1].NoAmmoSound,SLOT_None,2.0,,,,false);
|
|
}
|
|
else if( MagAmmoRemaining < FireMode[1].AmmoPerFire )
|
|
{
|
|
PlayOwnedSound(FireMode[1].NoAmmoSound,SLOT_None,2.0,,,,false);
|
|
}
|
|
}
|
|
|
|
super.AltFire(F);
|
|
}
|
|
|
|
|
|
simulated function WeaponTick(float dt)
|
|
{
|
|
local int TeamIndex, i;
|
|
local Pawn EnemyPawn;
|
|
local KFPlayerController KFPC;
|
|
local float MaxThreat, HighestThreatDist;
|
|
local float UsedAlarmTime;
|
|
|
|
super.WeaponTick(dt);
|
|
|
|
// Update the motion tracker screen
|
|
if ( ROLE == ROLE_Authority && Instigator != none )
|
|
{
|
|
if( EnemyUpdateTime <= 0 )
|
|
{
|
|
EnemyUpdateTime = 0.2;
|
|
|
|
TeamIndex = Instigator.GetTeamNum();
|
|
|
|
KFPC = KFPlayerController(Instigator.Controller);
|
|
if ( KFPC != none )
|
|
{
|
|
foreach Instigator.CollidingActors(class'Pawn', EnemyPawn, 1875)
|
|
{
|
|
if ( EnemyPawn.Health > 0 && EnemyPawn.GetTeamNum() != TeamIndex )
|
|
{
|
|
if( KFMonster(EnemyPawn) != none )
|
|
{
|
|
|
|
if( KFMonster(EnemyPawn).MotionDetectorThreat > MaxThreat ||
|
|
(KFMonster(EnemyPawn).MotionDetectorThreat >= 3.0 && (VSize(EnemyPawn.Location - Instigator.Location) < HighestThreatDist)) )
|
|
{
|
|
HighestThreatDist = VSize( EnemyPawn.Location - Instigator.Location );
|
|
MaxThreat = KFMonster(EnemyPawn).MotionDetectorThreat;
|
|
|
|
}
|
|
}
|
|
i+=1;
|
|
}
|
|
}
|
|
|
|
if( MaxThreat >= 3.0 )
|
|
{
|
|
UsedAlarmTime = Level.TimeSeconds - NextAlarmTime;
|
|
|
|
if( UsedAlarmTime >= 0 )
|
|
{
|
|
if( HighestThreatDist < 500 )
|
|
{
|
|
if( MaxThreat >= 5.0 )
|
|
{
|
|
NextAlarmTime = Level.TimeSeconds + 0.5;
|
|
}
|
|
else
|
|
{
|
|
NextAlarmTime = Level.TimeSeconds + 1.0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
NextAlarmTime = Level.TimeSeconds + 2.0;
|
|
}
|
|
|
|
if( Level.NetMode == NM_DedicatedServer )
|
|
{
|
|
ClientAlarmSound();
|
|
}
|
|
PlayOwnedSound(AlarmSound,SLOT_None,2.0,,TransientSoundRadius,,false);
|
|
|
|
if( Instigator.IsLocallyControlled() && Level.NetMode != NM_DedicatedServer )
|
|
{
|
|
LastAlarmTime = Level.TimeSeconds;
|
|
bAlarmStatus = true;
|
|
Skins[1] = LedOnMaterial;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
EnemyUpdateTime -= dt;
|
|
}
|
|
}
|
|
|
|
if( bAlarmStatus != bOldAlarmStatus && Instigator.IsLocallyControlled()
|
|
&& Level.NetMode != NM_DedicatedServer)
|
|
{
|
|
if( bAlarmStatus && ((Level.TimeSeconds - LastAlarmTime) > 0.2) )
|
|
{
|
|
bAlarmStatus = false;
|
|
bOldAlarmStatus = bAlarmStatus;
|
|
Skins[1] = LedOffMaterial;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
simulated function ClientAlarmSound()
|
|
{
|
|
PlayOwnedSound(AlarmSound,SLOT_None,2.0,,TransientSoundRadius,,false);
|
|
|
|
LastAlarmTime = Level.TimeSeconds;
|
|
bAlarmStatus = true;
|
|
Skins[1] = LedOnMaterial;
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
SkinRefs(0)="KF_IJC_Halloween_Weapons2.ZEDV2.ZEDV2_SHDR"
|
|
SkinRefs(1)="KF_IJC_Halloween_Weapons2.ZEDV2.ZEDV2_LED"
|
|
SkinRefs(2)="KF_IJC_Halloween_Weapons2.ZEDV2.ZEDV2_Sight_SHDR"
|
|
SleeveNum=3
|
|
|
|
LedOnMaterialRef="KF_IJC_Halloween_Weapons2.ZEDV2.ZED_V2_LED_ON_SHDR"
|
|
LedOffMaterialRef="'KF_IJC_Halloween_Weapons2.ZEDV2.ZEDV2_LED"
|
|
|
|
WeaponReloadAnim=Reload_IJC_ZEDV2
|
|
IdleAimAnim=Idle_Iron
|
|
|
|
MagCapacity=30
|
|
ReloadRate=1.9
|
|
ReloadAnim="Reload"
|
|
ReloadAnimRate=1.000000
|
|
|
|
Weight=6.000000
|
|
bModeZeroCanDryFire=True
|
|
FireModeClass(0)=Class'KFMod.ZEDMKIIFire'
|
|
FireModeClass(1)=Class'KFMod.ZEDMKIIAltFire'
|
|
PutDownAnim="PutDown"
|
|
SelectSoundRef="KF_FY_ZEDV2SND.WEP_ZEDV2_Foley_Select"
|
|
SelectForce="SwitchToAssaultRifle"
|
|
bShowChargingBar=True
|
|
Description="The second revision of the ZED gun. Smaller and more light weight, but not quite as powerful as the original."
|
|
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
|
Priority=132
|
|
InventoryGroup=3
|
|
GroupOffset=23
|
|
PickupClass=Class'KFMod.ZEDMKIIPickup'
|
|
PlayerViewOffset=(X=25.000000,Y=20.000000,Z=-2.000000)
|
|
BobDamping=6.000000
|
|
AttachmentClass=Class'KFMod.ZEDMKIIAttachment'
|
|
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
|
ItemName="ZED GUN MKII"
|
|
MeshRef="KF_IJC_Halloween_Weps_2.ZEDV2"
|
|
DrawScale=1.00000
|
|
TransientSoundVolume=1.250000
|
|
AmbientGlow=0
|
|
AlarmSound=Sound'KF_FY_ZEDV2SND.WEP_ZEDV2_Alert'
|
|
|
|
AIRating=0.55
|
|
CurrentRating=0.55
|
|
|
|
DisplayFOV=65.000000
|
|
StandardDisplayFOV=65.0//60.0
|
|
PlayerIronSightFOV=80
|
|
ZoomTime=0.25
|
|
FastZoomOutTime=0.2
|
|
ZoomInRotation=(Pitch=-910,Yaw=0,Roll=2910)
|
|
bHasAimingMode=true
|
|
ZoomedDisplayFOV=45
|
|
|
|
HudImageRef="KF_IJC_HUD.WeaponSelect.ZEDV2_unselected"
|
|
SelectedHudImageRef="KF_IJC_HUD.WeaponSelect.ZEDV2"
|
|
TraderInfoTexture=texture'KF_IJC_HUD.Trader_Weapon_Icons.Trader_ZEDV2'
|
|
|
|
// Achievement Helpers
|
|
bIsTier2Weapon=true
|
|
|
|
AppID=258751
|
|
}
|