104 lines
2.5 KiB
Ucode
104 lines
2.5 KiB
Ucode
class ScrnFrag extends Frag;
|
|
|
|
var transient float CookExplodeTimer;
|
|
var transient bool bCooking, bThrowingCooked;
|
|
var transient bool bBlewInHands; //client didn't throw nade - it blew up in his hands
|
|
//var float CookThrowRate; //how faster we throwing a cooked nade comparing with regular throw
|
|
|
|
replication
|
|
{
|
|
reliable if(Role < ROLE_Authority)
|
|
ServerCookNade;
|
|
|
|
reliable if(Role == ROLE_Authority)
|
|
ClientThrowCooked;
|
|
}
|
|
|
|
//executed on client-side only
|
|
simulated function CookNade()
|
|
{
|
|
if( !Instigator.IsLocallyControlled() )
|
|
return;
|
|
|
|
HandleSleeveSwapping(); // use proper arms
|
|
|
|
ServerCookNade();
|
|
if( Role < ROLE_Authority ) {
|
|
CookExplodeTimer = Level.TimeSeconds + class'ScrnBalanceSrv.ScrnNade'.default.ExplodeTimer;
|
|
bCooking = true;
|
|
bThrowingCooked = false;
|
|
}
|
|
KFPawn(Instigator).SecondaryItem = self; //it'll be replicated
|
|
PlayAnim(TossAnim, 10, 0.0, 0);
|
|
FreezeAnimAt(4.8, 0);
|
|
}
|
|
|
|
//server
|
|
function ServerCookNade()
|
|
{
|
|
CookExplodeTimer = Level.TimeSeconds + class'ScrnBalanceSrv.ScrnNade'.default.ExplodeTimer;
|
|
bCooking = true;
|
|
bThrowingCooked = false;
|
|
bBlewInHands = false;
|
|
}
|
|
|
|
function Tick( float DeltaTime )
|
|
{
|
|
super.Tick(DeltaTime);
|
|
|
|
//server: tell client to throw nade, when countdown reached
|
|
if (bCooking && !bThrowingCooked && Level.TimeSeconds >= CookExplodeTimer) {
|
|
bBlewInHands = true;
|
|
ClientThrowCooked();
|
|
}
|
|
}
|
|
|
|
|
|
simulated function ClientThrowCooked()
|
|
{
|
|
if( !Instigator.IsLocallyControlled() )
|
|
return;
|
|
|
|
bThrowingCooked = true;
|
|
StartThrow();
|
|
if( Role < ROLE_Authority )
|
|
bCooking = false; //set here to immediately hide progress bar from the HUD
|
|
}
|
|
|
|
|
|
simulated function StartThrow()
|
|
{
|
|
if (bCooking && !bThrowingCooked)
|
|
return; //can't throw nade while cooking
|
|
|
|
HandleSleeveSwapping(); // use proper arms
|
|
|
|
super.StartThrow();
|
|
}
|
|
|
|
function ServerStartThrow()
|
|
{
|
|
if( !Instigator.IsLocallyControlled() ) {
|
|
bThrowingCooked = bCooking;
|
|
}
|
|
super.ServerStartThrow();
|
|
}
|
|
|
|
function ServerThrow()
|
|
{
|
|
if ( HasAmmo() ) {
|
|
ConsumeAmmo(0, 1);
|
|
FireMode[0].DoFireEffect();
|
|
PlaySound(ThrowSound,SLOT_Interact,2.0);
|
|
}
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
Weight=0.000000
|
|
FireModeClass(0)=Class'ScrnBalanceSrv.ScrnFragFire'
|
|
PickupClass=Class'ScrnBalanceSrv.ScrnFragPickup'
|
|
ItemName="Frag Grenade SE"
|
|
bAlwaysRelevant=True
|
|
}
|