93 lines
2.9 KiB
Ucode
93 lines
2.9 KiB
Ucode
class KF_Slot_AmmoPickup extends KFAmmoPickup;
|
|
|
|
var() byte AmmoMultiplier; // Multiply the amount of ammo received by this number
|
|
|
|
// Overridden so KF_Slot_AmmoPickup is never added to the AmmoPickups array
|
|
event PostBeginPlay(){}
|
|
|
|
auto state Pickup
|
|
{
|
|
// Overridden so we do not try and access AmmoPickups
|
|
function Touch(Actor Other)
|
|
{
|
|
local Inventory CurInv;
|
|
local bool bPickedUp;
|
|
local int AmmoPickupAmount;
|
|
local Boomstick DBShotty;
|
|
local bool bResuppliedBoomstick;
|
|
local float VeterancyMod;
|
|
|
|
if ( Pawn(Other) != none && Pawn(Other).bCanPickupInventory && Pawn(Other).Controller != none &&
|
|
FastTrace(Other.Location, Location) )
|
|
{
|
|
for ( CurInv = Other.Inventory; CurInv != none; CurInv = CurInv.Inventory )
|
|
{
|
|
if( Boomstick(CurInv) != none )
|
|
{
|
|
DBShotty = Boomstick(CurInv);
|
|
}
|
|
|
|
if ( KFAmmunition(CurInv) != none && KFAmmunition(CurInv).bAcceptsAmmoPickups )
|
|
{
|
|
if ( KFAmmunition(CurInv).AmmoPickupAmount > 1 )
|
|
{
|
|
if ( KFAmmunition(CurInv).AmmoAmount < KFAmmunition(CurInv).MaxAmmo )
|
|
{
|
|
if ( KFPlayerReplicationInfo(Pawn(Other).PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Pawn(Other).PlayerReplicationInfo).ClientVeteranSkill != none )
|
|
{
|
|
VeterancyMod = KFPlayerReplicationInfo(Pawn(Other).PlayerReplicationInfo).ClientVeteranSkill.static.GetAmmoPickupMod(KFPlayerReplicationInfo(Pawn(Other).PlayerReplicationInfo), KFAmmunition(CurInv));
|
|
AmmoPickupAmount = float(KFAmmunition(CurInv).AmmoPickupAmount) * VeterancyMod * AmmoMultiplier;
|
|
}
|
|
else
|
|
{
|
|
AmmoPickupAmount = KFAmmunition(CurInv).AmmoPickupAmount * AmmoMultiplier;
|
|
}
|
|
|
|
KFAmmunition(CurInv).AmmoAmount = Min(KFAmmunition(CurInv).MaxAmmo, KFAmmunition(CurInv).AmmoAmount + AmmoPickupAmount);
|
|
if( DBShotgunAmmo(CurInv) != none )
|
|
{
|
|
bResuppliedBoomstick = true;
|
|
}
|
|
bPickedUp = true;
|
|
}
|
|
}
|
|
else if ( KFAmmunition(CurInv).AmmoAmount < KFAmmunition(CurInv).MaxAmmo )
|
|
{
|
|
bPickedUp = true;
|
|
|
|
if ( FRand() <= (1.0 / Level.Game.GameDifficulty) )
|
|
{
|
|
AmmoPickupAmount = KFAmmunition(CurInv).AmmoAmount + AmmoPickupAmount * AmmoMultiplier;
|
|
KFAmmunition(CurInv).AmmoAmount = Min(KFAmmunition(CurInv).MaxAmmo, AmmoPickupAmount);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( bPickedUp )
|
|
{
|
|
if( bResuppliedBoomstick && DBShotty != none )
|
|
{
|
|
DBShotty.AmmoPickedUp();
|
|
}
|
|
|
|
AnnouncePickup(Pawn(Other));
|
|
if(RespawnTime > 0)
|
|
{
|
|
GotoState('Sleeping', 'Begin');
|
|
}
|
|
else
|
|
{
|
|
Destroy();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
AmmoMultiplier=1
|
|
RespawnTime=0.000000
|
|
}
|