1
0
KF2-Dev-Scripts/KFGame/Classes/KFDroppedPickup_Cash.uc

130 lines
3.7 KiB
Ucode
Raw Permalink Normal View History

2020-12-13 15:01:13 +00:00
//=============================================================================
// KFDroppedPickup_Cash
//=============================================================================
// The KFDroppedPickup_Cash is used to throw dosh at other players
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
// - Christian "schneidzekk" Schneider
//=============================================================================
class KFDroppedPickup_Cash extends KFDroppedPickup;
var int CashAmount; // How much?
var PlayerReplicationInfo TosserPRI; // The giver
var AkEvent PickupSound;
/** Instead of adding to inventory, apply score directly to PRI */
function GiveTo( Pawn P )
{
local KFPawn_Human KFPH;
local KFPlayerReplicationInfo KFPRI;
if ( P.PlayerReplicationInfo != none )
{
KFPH = KFPawn_Human(P);
KFPRI = KFPlayerReplicationInfo(P.PlayerReplicationInfo);
// @todo (?): for now, play "catch dosh" dialog whenever you pick some up
if( KFPRI != none && KFPRI != TosserPRI && KFPH != none )
{
KFPH.UpdateDoshCaught( CashAmount, TosserPRI );
AddDoshForBenefector( TosserPRI );
}
if( KFPRI != none )
{
KFPRI.AddDosh( CashAmount );
`AnalyticsLog(("dosh_picked_up", KFPRI, "#"$CashAmount));
}
bForceNetUpdate = true;
P.PlaySoundBase(PickUpSound);
}
PickedUpBy(P);
}
protected function AddDoshForBenefector( PlayerReplicationInfo MyTosserPRI )
{
local KFPlayerController KFPC;
if( MyTosserPRI != none )
{
KFPC = KFPlayerController(MyTosserPRI.Owner);
if( KFPC != none )
{
KFPC.UpdateBenefactor( CashAmount );
}
}
}
/**
* sets the pickups mesh and makes it the collision component so we can run rigid body physics on it
*/
simulated function SetPickupMesh(PrimitiveComponent NewPickupMesh)
{
Super.SetPickupMesh(NewPickupMesh);
// Collide with other dosh! (just while they are both awake)
CollisionComponent.SetRBCollidesWithChannel(RBCC_Pickup, TRUE);
}
event Destroyed()
{
// don't destroy the inventory item
TosserPRI = none;
Inventory = none;
}
/*********************************************************************************************
* Minigame Support
*
* Kind of a best worst case fix here. One of our minigames is client-authority for win
* condition. Using the thrown cash's owner (thrower PC) to notify the server that the
* game is complete for victory condition.
********************************************************************************************/
simulated function NotifyMinigameHit(KFInterface_MinigameTarget MinigameTarget)
{
if (MinigameTarget.IsAlive())
{
ServerNotifyMinigameHit(Actor(MinigameTarget));
}
}
reliable private server function ServerNotifyMinigameHit(Actor MinigameTarget)
{
if (KFInterface_MinigameTarget(MinigameTarget) != none)
{
KFInterface_MinigameTarget(MinigameTarget).ValidHit(Controller(Owner), self);
}
}
/*********************************************************************************************
* State Pickup
* Pickup is active
*********************************************************************************************/
auto state Pickup
{
/** Allow instigator to pick up dosh thrown at feet */
event OnSleepRBPhysics()
{
local Pawn P;
Global.OnSleepRBPhysics();
foreach TouchingActors(class'Pawn', P)
{
if ( P == Instigator )
{
Touch( P, None, Location, vect(0,0,1) );
}
}
}
}
DefaultProperties
{
LifeSpan=120
bUseLowHealthDelay=FALSE
PickupSound=AkEvent'WW_UI_PlayerCharacter.Play_UI_Pickup_Dosh'
}