// Written by Marco. class ExtProj_SUPERGrenade extends KFProj_FragGrenade hidedropdown; /** On Contact demo skill can turn our grenade into an insta boom device */ var bool bExplodeOnContact; var class<KFProj_Grenade> ClusterNades; var() byte NumClusters; simulated function PostBeginPlay() { local KFPerk InstigatorPerk; local KFPawn InstigatorPawn; InstigatorPawn = KFPawn(Instigator); if (InstigatorPawn != none) { InstigatorPerk = InstigatorPawn.GetPerk(); if (InstigatorPerk != none) bExplodeOnContact = InstigatorPerk.IsOnContactActive(); } Super.PostBeginPlay(); if (Instigator!=None && ExtPlayerReplicationInfo(Instigator.PlayerReplicationInfo)!=None && ExtPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ECurrentPerk!=None) ClusterNades = ExtPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ECurrentPerk.Default.PerkGrenade; } simulated function ProcessTouch(Actor Other, Vector HitLocation, Vector HitNormal) { if (bExplodeOnContact && Other != Instigator && !Other.bWorldGeometry && Pawn(Other)!=None && Pawn(Other).GetTeamNum() != GetTeamNum()) { // For opposing team, make the grenade explode instantly GetExplodeEffectLocation(HitLocation, HitNormal, Other); TriggerExplosion(HitLocation, HitNormal, Other); } else super.ProcessTouch(Other, HitLocation, HitNormal); } simulated function Disintegrate(rotator inDisintegrateEffectRotation); // Nope! simulated function TriggerExplosion(Vector HitLocation, Vector HitNormal, Actor HitActor) { local byte i; local KFProj_Grenade P; if (bHasExploded) return; if (InstigatorController==None && WorldInfo.NetMode!=NM_Client) // Prevent Team-Kill. { Destroy(); return; } Super.TriggerExplosion(HitLocation,HitNormal,HitActor); if (WorldInfo.NetMode!=NM_Client) { for (i=0; i<NumClusters; ++i) { P = Spawn(ClusterNades,,,Location); if (P!=None) { P.InstigatorController = InstigatorController; P.Init(VRand()); } } } bHasExploded = true; } simulated function Destroyed() { local Actor HitActor; local vector HitLocation, HitNormal; // Final Failsafe check for explosion effect if (!bHasExploded && WorldInfo.NetMode==NM_Client) { GetExplodeEffectLocation(HitLocation, HitNormal, HitActor); TriggerExplosion(HitLocation, HitNormal, HitActor); } } defaultproperties { bCanDisintegrate=false ClusterNades=class'KFProj_FragGrenade' DrawScale=2 NumClusters=6 ProjFlightTemplate=ParticleSystem'ZED_Hans_EMIT.FX_Grenade_Explosive_01' Begin Object Name=ExploTemplate0 Damage=500 DamageRadius=1000 End Object }