class ScrnZedDoshPickup extends ScrnCashPickup; var() bool bZedPickup; // are zeds allowed to pickup cash? var() float ZedHealthMult; // dosh makes zeds stronger :) var() float ZedHeadHealthMult; // dosh makes zeds stronger :) var() float MaxHealthMult; function GiveCashTo( Pawn Other ) { // You all love the mental-mad typecasting XD if( !bDroppedCash ) { CashAmount = (rand(0.5 * default.CashAmount) + default.CashAmount) * (KFGameReplicationInfo(Level.GRI).GameDiff * 0.5) ; } else if ( Other.PlayerReplicationInfo != none && DroppedBy != none && DroppedBy.PlayerReplicationInfo != none && ((DroppedBy.PlayerReplicationInfo.Score + float(CashAmount)) / Other.PlayerReplicationInfo.Score) >= 0.50 && PlayerController(DroppedBy) != none && KFSteamStatsAndAchievements(PlayerController(DroppedBy).SteamStatsAndAchievements) != none ) { if ( Other.PlayerReplicationInfo != DroppedBy.PlayerReplicationInfo ) { KFSteamStatsAndAchievements(PlayerController(DroppedBy).SteamStatsAndAchievements).AddDonatedCash(CashAmount); } } if( Other.Controller!=None && Other.Controller.PlayerReplicationInfo!=none ) { CashAmount *= 2; // both player and team parts go into the team wallet Other.Controller.PlayerReplicationInfo.Team.Score += CashAmount; Other.Controller.PlayerReplicationInfo.Team.NetUpdateTime = Level.TimeSeconds - 1; } else if ( KFMonster(Other) != none ) { GiveCashToZed(KFMonster(Other)); } AnnouncePickup(Other); SetRespawn(); } function GiveCashToZed( KFMonster M ) { if ( M == none ) return; if ( ZedHealthMult > 0 && M.ScoringValue > 0 && M.Health < M.HealthMax * MaxHealthMult) { M.Health = min(M.Health + M.Health * ZedHealthMult * float(CashAmount) / M.ScoringValue, M.HealthMax * MaxHealthMult); M.HeadHealth *= 1.0 + ZedHeadHealthMult * float(CashAmount) / M.ScoringValue; } M.ScoringValue += CashAmount; } auto state Pickup { function bool ValidTouch(Actor Other) { local bool result; local KFMonster M; if ( !bZedPickup ) return super.ValidTouch(Other); M = KFMonster(Other); if ( M == none ) return super.ValidTouch(Other); if ( M.Health <= 0 || M.bDecapitated ) return false; // no money for dead meat // hack to allow zed picking up dosh M.bCanPickupInventory = true; result = super.ValidTouch(Other); M.bCanPickupInventory = false; return result; } } state FallingPickup { function BeginState() { SetTimer(15, false); } } defaultproperties { ZedHealthMult=0.500000 ZedHeadHealthMult=0.500000 MaxHealthMult=5.000000 FadeOutTime=30.000000 bAutoFadeOutTime=False bDroppedCash=True }