185 lines
5.2 KiB
Ucode
185 lines
5.2 KiB
Ucode
class ScrnAmmoPickup extends KFAmmoPickup;
|
|
|
|
function float GetRespawnTime()
|
|
{
|
|
return RespawnTime / clamp(Level.Game.NumPlayers, 1, 6);
|
|
}
|
|
|
|
state Pickup
|
|
{
|
|
function BeginState()
|
|
{
|
|
super.BeginState();
|
|
if ( ScrnGameType(Level.Game) != none )
|
|
ScrnGameType(Level.Game).CurrentAmmoBoxCount++;
|
|
}
|
|
|
|
function EndState()
|
|
{
|
|
super.EndState();
|
|
if ( ScrnGameType(Level.Game) != none )
|
|
ScrnGameType(Level.Game).CurrentAmmoBoxCount--;
|
|
}
|
|
|
|
// When touched by an actor.
|
|
function Touch(Actor Other)
|
|
{
|
|
local Inventory CurInv;
|
|
local bool bPickedUp;
|
|
local int AmmoPickupAmount;
|
|
local Boomstick DBShotty;
|
|
local bool bResuppliedBoomstick;
|
|
local KFAmmunition ammo;
|
|
local KFPlayerReplicationInfo KFPRI;
|
|
|
|
if ( Pawn(Other) != none && Pawn(Other).bCanPickupInventory && Pawn(Other).Controller != none &&
|
|
FastTrace(Other.Location, Location) )
|
|
{
|
|
KFPRI = KFPlayerReplicationInfo(Pawn(Other).PlayerReplicationInfo);
|
|
|
|
for ( CurInv = Other.Inventory; CurInv != none; CurInv = CurInv.Inventory )
|
|
{
|
|
if( Boomstick(CurInv) != none )
|
|
{
|
|
DBShotty = Boomstick(CurInv);
|
|
}
|
|
|
|
ammo = KFAmmunition(CurInv);
|
|
if ( ammo != none && ammo.bAcceptsAmmoPickups )
|
|
{
|
|
// changed from 1 to 0 -- PooSH
|
|
if ( ammo.AmmoPickupAmount > 0 )
|
|
{
|
|
if ( ammo.AmmoAmount < ammo.MaxAmmo )
|
|
{
|
|
if ( KFPRI != none && KFPRI.ClientVeteranSkill != none )
|
|
{
|
|
AmmoPickupAmount = float(ammo.AmmoPickupAmount) * KFPRI.ClientVeteranSkill.static.GetAmmoPickupMod(KFPRI, ammo);
|
|
}
|
|
else
|
|
{
|
|
AmmoPickupAmount = ammo.AmmoPickupAmount;
|
|
}
|
|
|
|
ammo.AmmoAmount = Min(ammo.MaxAmmo, ammo.AmmoAmount + AmmoPickupAmount);
|
|
if( DBShotgunAmmo(CurInv) != none )
|
|
{
|
|
bResuppliedBoomstick = true;
|
|
}
|
|
bPickedUp = true;
|
|
}
|
|
}
|
|
else if ( ammo.AmmoAmount < ammo.MaxAmmo )
|
|
{
|
|
bPickedUp = true;
|
|
|
|
if ( FRand() <= (1.0 / Level.Game.GameDifficulty) )
|
|
{
|
|
ammo.AmmoAmount++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( bPickedUp )
|
|
{
|
|
// TODO: test if this KF hack is still needed in ScrN
|
|
// if( bResuppliedBoomstick && DBShotty != none )
|
|
// {
|
|
// DBShotty.AmmoPickedUp();
|
|
// }
|
|
|
|
AnnouncePickup(Pawn(Other));
|
|
GotoState('Sleeping', 'Begin');
|
|
|
|
if ( KFGameType(Level.Game) != none )
|
|
{
|
|
KFGameType(Level.Game).AmmoPickedUp(self);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
auto state Sleeping
|
|
{
|
|
ignores Touch;
|
|
|
|
function bool ReadyToPickup(float MaxWait)
|
|
{
|
|
return (bPredictRespawns && LatentFloat < MaxWait);
|
|
}
|
|
|
|
function StartSleeping() {}
|
|
|
|
function BeginState()
|
|
{
|
|
local int i;
|
|
|
|
NetUpdateTime = Level.TimeSeconds - 1;
|
|
bHidden = true;
|
|
bSleeping = true;
|
|
SetCollision(false, false);
|
|
|
|
for ( i = 0; i < 4; i++ )
|
|
{
|
|
TeamOwner[i] = None;
|
|
}
|
|
}
|
|
|
|
function EndState()
|
|
{
|
|
NetUpdateTime = Level.TimeSeconds - 1;
|
|
bHidden = false;
|
|
bSleeping = false;
|
|
SetCollision(default.bCollideActors, default.bBlockActors);
|
|
}
|
|
|
|
Begin:
|
|
bSleeping = true;
|
|
Sleep(1000000.0); // Sleep for 11.5 days(never wake up)
|
|
|
|
DelayedSpawn:
|
|
bSleeping = false;
|
|
Sleep(GetRespawnTime()); // Delay before respawning
|
|
goto('Respawn');
|
|
|
|
TryToRespawnAgain:
|
|
Sleep(1.0);
|
|
|
|
Respawn:
|
|
bShowPickup = true;
|
|
// ignore player visibility here -- PooSH
|
|
// for ( OtherPlayer = Level.ControllerList; OtherPlayer != none; OtherPlayer=OtherPlayer.NextController )
|
|
// {
|
|
// if ( PlayerController(OtherPlayer) != none && OtherPlayer.Pawn != none )
|
|
// {
|
|
// if ( FastTrace(self.Location, OtherPlayer.Pawn.Location) )
|
|
// {
|
|
// bShowPickup = false;
|
|
// break;
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
if ( bShowPickup )
|
|
{
|
|
RespawnEffect();
|
|
Sleep(RespawnEffectTime);
|
|
|
|
if ( PickUpBase != none )
|
|
{
|
|
PickUpBase.TurnOn();
|
|
}
|
|
|
|
GotoState('Pickup');
|
|
}
|
|
else
|
|
Goto('TryToRespawnAgain');
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
RotationRate=(Yaw=0)
|
|
}
|