130 lines
3.7 KiB
Ucode
130 lines
3.7 KiB
Ucode
//=============================================================================
|
|
// 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'
|
|
}
|