1
0
This commit is contained in:
2024-01-23 19:25:12 +03:00
parent cde088c1f4
commit 722a3bf4a7
101 changed files with 1438 additions and 669 deletions

View File

@ -49,6 +49,8 @@ defaultproperties
BurnDamageType=class'KFDT_Fire_ThermiteImpactDoT'
SelfDamageReductionValue=0.05f //0.25f
ModifierPerkList(0)=class'KFPerk_FireBug'
WeaponDef=class'KFWeapDef_ThermiteBore'

View File

@ -24,6 +24,8 @@ defaultproperties
KnockdownPower=150
StumblePower=400
SelfDamageReductionValue=0.5f //0.75f
//Perk
ModifierPerkList(0)=class'KFPerk_Demolitionist'

View File

@ -27,6 +27,8 @@ defaultproperties
KDeathVel=200
StumblePower=200
SelfDamageReductionValue=0.075f
ModifierPerkList(0)=class'KFPerk_Demolitionist'
WeaponDef=class'KFWeapDef_GravityImploder'

View File

@ -23,6 +23,7 @@ defaultproperties
KnockdownPower=400
SelfDamageReductionValue=0.075f
//Perk
ModifierPerkList(0)=class'KFPerk_Demolitionist'
WeaponDef=class'KFWeapDef_GravityImploder'

View File

@ -24,6 +24,8 @@ defaultproperties
KnockdownPower = 100
StumblePower = 200
SelfDamageReductionValue = 0.25f;
//Perk
ModifierPerkList(0) = class'KFPerk_Demolitionist'

View File

@ -37,4 +37,7 @@ defaultproperties
bCausesFracture=false
bCanPlayDeadHitEffects=false
SelfDamageReductionValue = 0f;
}

View File

@ -20,8 +20,8 @@ defaultproperties
KDeathUpKick=1000
KDeathVel=300
StunPower=160
StumblePower=40
StunPower=200
StumblePower=100
//Perk
ModifierPerkList(0)=class'KFPerk_SWAT'

View File

@ -50,7 +50,8 @@ defaultproperties
ModifierPerkList(0) = class'KFPerk_Firebug'
ModifierPerkList(1)=class'KFPerk_Demolitionist'
SelfDamageReductionValue=0.1f
WeaponDef=class'KFWeapDef_HuskCannon'
BurnDamageType = class'KFDT_HuskCannonDot'

View File

@ -24,6 +24,8 @@ defaultproperties
KnockdownPower = 150
StumblePower = 400
SelfDamageReductionValue = 0.25f
//Perk
ModifierPerkList(0) = class'KFPerk_Demolitionist'

View File

@ -35,6 +35,8 @@ defaultproperties
DoT_Interval=0.5
DoT_DamageScale=0.2
SelfDamageReductionValue=0.05f //0.25f
BurnPower=10
}

View File

@ -22,4 +22,6 @@ defaultproperties
WeaponDef=class'KFWeapDef_ChiappaRhino'
ModifierPerkList(0)=class'KFPerk_Gunslinger'
bAnyPerk = true
}

View File

@ -21,6 +21,8 @@ defaultproperties
DoT_Duration=2.0 //1.0
DoT_Interval=0.5 //1.0
DoT_DamageScale=0.1
SelfDamageReductionValue=0.1f
ModifierPerkList(0)=class'KFPerk_FieldMedic'
WeaponDef=class'KFWeapDef_HRG_Vampire'

View File

@ -36,6 +36,8 @@ defaultproperties
DoT_Duration=4.0 //5.0 //1.7
DoT_Interval=1.0 //1.0 //0.4
DoT_DamageScale=0.1 //1.5
SelfDamageReductionValue=0.1f
ModifierPerkList(0)=class'KFPerk_FieldMedic'
WeaponDef=class'KFWeapDef_Mine_Reconstructor'

View File

@ -1087,6 +1087,12 @@ function WaveStarted()
}
`QALog("Player Name:" @ KFPC.PlayerReplicationInfo.PlayerName @ "Dosh" @ KFPC.PlayerReplicationInfo.Score, bLogScoring);
if (KFPC.IsInState('Spectating') == false
&& KFPC.PlayerReplicationInfo.bOnlySpectator == false)
{
KFPC.GetPerk().SetWaveDefaults();
}
}

View File

@ -22,7 +22,6 @@ enum ETurretState
};
var SkeletalMeshComponent TurretMesh;
var Controller InstigatorController;
/** Speed to rise the drone in Z axis after thrown */
var const float DeployZSpeed;
@ -164,6 +163,8 @@ simulated event PreBeginPlay()
if (Role == ROLE_Authority)
{
SetCollisionType(COLLIDE_NoCollision);
Weapon = Spawn(WeaponClass, self);
TurretWeapon = KFWeap_AutoTurretWeapon(Weapon);
MyKFWeapon = TurretWeapon;
@ -390,6 +391,7 @@ simulated state Deploy
{
local float CurrentHeight;
local vector LocationNext;
local bool bTraceOk;
super.Tick(DeltaTime);
@ -404,7 +406,12 @@ simulated state Deploy
LocationNext.z += Velocity.z * DeltaTime;
// If we are going to collide stop
if (!FastTrace(LocationNext, Location, vect(25,25,25)))
SetCollisionType(COLLIDE_CustomDefault);
bTraceOk = FastTrace(LocationNext, Location, vect(25,25,25));
SetCollisionType(COLLIDE_NoCollision);
if (!bTraceOk)
{
SetTurretState(ETS_TargetSearch);
return;
@ -507,7 +514,9 @@ simulated function bool TargetValidWithGeometry(Actor Target, vector MuzzleLoc,
local bool bTraderFound;
local int IteratorTrader;
SetCollisionType(COLLIDE_CustomDefault);
HitActor = Trace(HitLocation, HitNormal, ReferencePosition, MuzzleLoc,,,,TRACEFLAG_Bullet);
SetCollisionType(COLLIDE_NoCollision);
if (HitActor == none || KFPawn_Monster(HitActor) == none)
{
@ -804,6 +813,8 @@ function CheckForTargets()
TurretWeapon.GetMuzzleLocAndRot(MuzzleLoc, MuzzleRot);
SetCollisionType(COLLIDE_CustomDefault);
foreach CollidingActors(class'KFPawn_Monster', CurrentTarget, EffectiveRadius, Location, true,, HitInfo)
{
// Visible by local player or team
@ -834,6 +845,8 @@ function CheckForTargets()
}
}
SetCollisionType(COLLIDE_NoCollision);
if (EnemyTarget != none)
{
SetTurretState(ETS_Combat);
@ -882,14 +895,18 @@ simulated function CheckEnemiesWithinExplosionRadius()
//DrawDebugSphere(CheckExplosionLocation, ExplosiveRadius, 10, 255, 255, 0 );
SetCollisionType(COLLIDE_CustomDefault);
foreach CollidingActors(class'KFPawn_Monster', KFPM, ExplosiveRadius, CheckExplosionLocation, true,,)
{
if(KFPM != none && KFPM.IsAliveAndWell())
{
SetTurretState(ETS_Detonate);
return;
break;
}
}
SetCollisionType(COLLIDE_NoCollision);
}
simulated function StartIdleAnim()
@ -996,6 +1013,12 @@ simulated function UpdateRotation(float DeltaTime)
}
}
}
else
{
NewRotation = Rotation;
NewRotation.Roll = 0.0f;
SetRotation(NewRotation);
}
}
simulated function RotateByTime(rotator NewRotation, float Time)
@ -1074,11 +1097,6 @@ simulated function bool CanInteractWithPawnGrapple()
return false;
}
simulated function bool CanInteractWithZoneVelocity()
{
return false;
}
function bool CanBeGrabbed(KFPawn GrabbingPawn, optional bool bIgnoreFalling, optional bool bAllowSameTeamGrab)
{
return false;

View File

@ -22,7 +22,6 @@ enum ETurretState
};
var SkeletalMeshComponent TurretMesh;
var Controller InstigatorController;
/** Speed to rise the drone in Z axis after thrown */
var const float DeployZSpeed;
@ -170,6 +169,8 @@ simulated event PreBeginPlay()
if (Role == ROLE_Authority)
{
SetCollisionType(COLLIDE_NoCollision);
Weapon = Spawn(WeaponClass, self);
TurretWeapon = KFWeap_HRG_WarthogWeapon(Weapon);
MyKFWeapon = TurretWeapon;
@ -396,6 +397,7 @@ simulated state Deploy
{
local float CurrentHeight;
local vector LocationNext;
local bool bTraceOk;
super.Tick(DeltaTime);
@ -410,7 +412,11 @@ simulated state Deploy
LocationNext.z += Velocity.z * DeltaTime;
// If we are going to collide stop
if (!FastTrace(LocationNext, Location, vect(25,25,25)))
SetCollisionType(COLLIDE_CustomDefault);
bTraceOk = FastTrace(LocationNext, Location, vect(25,25,25));
SetCollisionType(COLLIDE_NoCollision);
if (!bTraceOk)
{
SetTurretState(ETS_TargetSearch);
return;
@ -511,7 +517,9 @@ simulated function bool TargetValidWithGeometry(Actor Target, vector MuzzleLoc,
local bool bTraderFound;
local int IteratorTrader;
SetCollisionType(COLLIDE_CustomDefault);
HitActor = Trace(HitLocation, HitNormal, ReferencePosition, MuzzleLoc,,,,TRACEFLAG_Bullet);
SetCollisionType(COLLIDE_NoCollision);
if (HitActor == none || KFPawn_Monster(HitActor) == none)
{
@ -909,6 +917,8 @@ function CheckForTargets()
TurretWeapon.GetMuzzleLocAndRot(MuzzleLoc, MuzzleRot);
SetCollisionType(COLLIDE_CustomDefault);
foreach CollidingActors(class'KFPawn_Monster', CurrentTarget, EffectiveRadius, Location, true,, HitInfo)
{
// Visible by local player or team
@ -939,6 +949,8 @@ function CheckForTargets()
}
}
SetCollisionType(COLLIDE_NoCollision);
if (EnemyTarget != none)
{
SetTurretState(ETS_Combat);
@ -987,14 +999,18 @@ simulated function CheckEnemiesWithinExplosionRadius()
//DrawDebugSphere(CheckExplosionLocation, ExplosiveRadius, 10, 255, 255, 0 );
SetCollisionType(COLLIDE_CustomDefault);
foreach CollidingActors(class'KFPawn_Monster', KFPM, ExplosiveRadius, CheckExplosionLocation, true,,)
{
if(KFPM != none && KFPM.IsAliveAndWell())
{
SetTurretState(ETS_Detonate);
return;
break;
}
}
SetCollisionType(COLLIDE_NoCollision);
}
simulated function StartIdleAnim()
@ -1101,6 +1117,12 @@ simulated function UpdateRotation(float DeltaTime)
}
}
}
else
{
NewRotation = Rotation;
NewRotation.Roll = 0.0f;
SetRotation(NewRotation);
}
}
simulated function RotateByTime(rotator NewRotation, float Time)
@ -1179,11 +1201,6 @@ simulated function bool CanInteractWithPawnGrapple()
return false;
}
simulated function bool CanInteractWithZoneVelocity()
{
return false;
}
function bool CanBeGrabbed(KFPawn GrabbingPawn, optional bool bIgnoreFalling, optional bool bAllowSameTeamGrab)
{
return false;

View File

@ -580,6 +580,17 @@ simulated function string GetIconPath()
return "ZED_Patriarch_UI.ZED-VS_Icon_Boss";
}
simulated event EndSpecialMove(optional ESpecialMove SpecialMoveToEnd, optional bool bForceNetSync)
{
// Wait for the anim to finish
if ( SpecialMove == SM_RecoverFromRagdoll && SpecialMoveToEnd != SM_RecoverFromRagdoll)
{
return;
}
Super.EndSpecialMove(SpecialMoveToEnd, bForceNetSync);
}
defaultproperties
{
LocalizationKey=KFPawn_ZedBloatKing

View File

@ -230,4 +230,6 @@ defaultproperties
bCanRage=true
EnragedSoundEvent=AkEvent'WW_ZED_Clot_Alpha.Play_Alpha_Clot_Special_Enrage'
ElitePawnClass.Empty
}

View File

@ -126,4 +126,6 @@ defaultproperties
MonsterArchPath="ZED_ARCH.ZED_CrawlerKing_Archetype"
ControllerClass=class'KFAIController_ZedCrawlerKing'
DifficultySettings=class'KFDifficulty_CrawlerKing'
ElitePawnClass.Empty
}

View File

@ -8,6 +8,27 @@
//=============================================================================
class KFPawn_ZedGorefastDualBlade extends KFPawn_ZedGorefast;
var protected AKEvent StopWhirlwindEvent;
/**
Whirlwind attack can be parried but the initial sfx is not stopped.
As we don't have an event to stop it, it has been assigned to the
'hips' bone so it can be stopped.
*/
function bool NotifyAttackParried(Pawn InstigatedBy, byte InParryStrength)
{
local bool Result;
Result = Super.NotifyAttackParried(InstigatedBy, InParryStrength);
if (StopWhirlwindEvent != none)
{
PlayAkEvent( StopWhirlwindEvent );
}
return Result;
}
defaultproperties
{
LocalizationKey=KFPawn_ZedGorefastDualBlade
@ -106,6 +127,7 @@ defaultproperties
// Block Settings
MinBlockFOV=0.1f
StopWhirlwindEvent = AkEvent'WW_ZED_GoreFast_2.Stop_Gorefast_2_Whirl';
ElitePawnClass.Empty
}

View File

@ -1079,7 +1079,7 @@ function CallOutCloakingExpired()
/** Handle cloaking materials */
simulated function UpdateGameplayMICParams()
{
local int i;
local int i, NumRepeats;
local bool bIsSpotted;
local bool bWasCloaked;
local KFCharacterInfo_Monster MonsterInfo;
@ -1096,7 +1096,8 @@ simulated function UpdateGameplayMICParams()
bIsSpotted = (bIsCloakingSpottedByLP || bIsCloakingSpottedByTeam);
if ((!bIsCloaking || IsImpaired()) && CharacterMICs[0].Parent != MonsterInfo.Skins[0])
{
for (i = 0; i < MonsterInfo.Skins.Length; ++i)
NumRepeats = Min(CharacterMICs.Length, MonsterInfo.Skins.Length);
for (i = 0; i < NumRepeats; ++i)
{
bWasCloaked = bWasCloaked ||
(CharacterMICs[i].Parent == MonsterInfo.CloakedSkins[i]) ||
@ -1126,6 +1127,8 @@ simulated function UpdateGameplayMICParams()
}
else if (bIsCloaking && bIsSpotted && CharacterMICs[0].Parent != MonsterInfo.SpottedSkins[0])
{
NumRepeats = Min(CharacterMICs.Length, MonsterInfo.SpottedSkins.Length);
for (i = 0; i < MonsterInfo.SpottedSkins.Length; ++i)
{
CharacterMICs[i].SetParent(MonsterInfo.SpottedSkins[i]);
@ -1148,6 +1151,8 @@ simulated function UpdateGameplayMICParams()
}
else if (bIsCloaking && !bIsSpotted && CharacterMICs[0].Parent != MonsterInfo.CloakedSkins[0])
{
NumRepeats = Min(CharacterMICs.Length, MonsterInfo.CloakedSkins.Length);
for (i = 0; i < MonsterInfo.CloakedSkins.Length; ++i)
{
CharacterMICs[i].SetParent(MonsterInfo.CloakedSkins[i]);

View File

@ -35,23 +35,10 @@ function CausePainTo(Actor Other)
}
}
simulated event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal )
{
local KFPawn KFP;
KFP = KFPawn(Other);
if (KFP != none && KFP.CanInteractWithZoneVelocity() == false)
{
return;
}
Super.Touch(Other, OtherComp, HitLocation, HitNormal);
}
simulated event UnTouch(Actor Other)
{
local int RecentHitIdx;
super.UnTouch(Other);
RecentHitIdx = RecentUntouchEvents.Find('HitActor', Other);

View File

@ -0,0 +1,89 @@
//=============================================================================
// KFPickupFactory_Cash
//=============================================================================
// Pickup that gives some ammo for all weapons in inventory
//=============================================================================
// Killing Floor 2
// Copyright (C) 2023 Tripwire Interactive LLC
//=============================================================================
class KFPickupFactory_Cash extends KFPickupFactory;
/** Sound to play when picºng up cash */
var() AkEvent CashPickupSound;
var() int CashAmount;
var() StaticMeshComponent CashMeshComponent;
simulated function InitializePickup()
{
}
/** Bypass PickupFactory implementation. This class doesn't use InventoryType. */
simulated event SetInitialState()
{
super.SetInitialState();
bScriptInitialized = true;
}
/** give pickup to player */
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 && KFPH != none )
{
KFPH.UpdateDoshCaught( CashAmount, none );
}
if( KFPRI != none )
{
KFPRI.AddDosh( CashAmount );
`AnalyticsLog(("dosh_picked_up", KFPRI, "#"$CashAmount));
}
bForceNetUpdate = true;
P.PlaySoundBase(CashPickupSound);
}
SetPickupHidden();
GotoState('Disabled');
SetCollision(false, false);
}
function bool CurrentPickupIsCash()
{
return true;
}
defaultproperties
{
CashPickupSound=AkEvent'WW_UI_PlayerCharacter.Play_UI_Pickup_Ammo'
Begin Object Class=StaticMeshComponent Name=MyStaticMeshComponent
StaticMesh=StaticMesh'ENV_Horzine_MESH.crates.ENV_Horzine_Equiptment_Crate_02'
bCastDynamicShadow=FALSE
CollideActors=FALSE
End Object
CashMeshComponent=MyStaticMeshComponent
PickupMesh=MyStaticMeshComponent
Components.Add(MyStaticMeshComponent)
Begin Object NAME=CollisionCylinder
CollisionRadius=100.f
CollisionHeight=50.f
End Object
bNotBased=TRUE
bEnabledAtStart=true
bKismetDriven=true
}

View File

@ -317,6 +317,28 @@ simulated event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLoca
{
local Pawn P;
// If touched by ballistic bouncer, explode
if (KFProj_HRG_BallisticBouncer(Other) != none)
{
// Make sure not touching through wall
if (`TimeSince(CreationTime) >= 0.1f && FastTrace( Other.Location, Location,, true ))
{
TriggerExplosion( Location, vect(0,0,1), KFProj_HRG_BallisticBouncer(Other) );
return;
}
}
// If touched by mine reconstructor, explode
if (KFProj_Mine_Reconstructor(Other) != none)
{
// Make sure not touching through wall
if (`TimeSince(CreationTime) >= 0.1f && FastTrace( Other.Location, Location,, true ))
{
TriggerExplosion( Location, vect(0,0,1), KFProj_Mine_Reconstructor(Other) );
return;
}
}
// If touched by an enemy pawn, explode
P = Pawn( Other );
if( P != None )

View File

@ -36,7 +36,7 @@ defaultproperties
ProjFlightTemplate=ParticleSystem'WEP_Frost_Shotgun_Axe_EMIT.FX_FrostFang_Tracer_01'
ProjFlightTemplateZedTime=ParticleSystem'WEP_Frost_Shotgun_Axe_EMIT.FX_FrostFang_Tracer_Zedtime_01'
ImpactEffects=KFImpactEffectInfo'WEP_Frost_Shotgun_Axe_ARCH.WEP_FrostFang_Projectile_Impact'
oFrozenSound=AkEvent'WW_WEP_SA_CompoundBow.Play_Arrow_Impact_Cryo'
oFrozenSound=AkEvent'WW_WEP_FrostFang.Play_FrostFang_Frozen_Impact'
AssociatedPerkClass=class'KFPerk_Support'
}

View File

@ -45,4 +45,13 @@ defaultproperties
AmbientSoundPlayEvent=none
AmbientSoundStopEvent=none
bWaitForEffects=false
ProjEffectsFadeOutDuration=0.25
bSyncToOriginalLocation=true
bSyncToThirdPersonMuzzleLocation=true
bRotationFollowsVelocity=true
bNoReplicationToInstigator=false
bUseClientSideHitDetection=true
}

View File

@ -398,6 +398,13 @@ defaultproperties
DampenFactorParallel=0
WallHitDampenFactor=0.5
WallHitDampenFactorParallel=0.5
ExtraLineCollisionOffsets.Add((Y=-30))
ExtraLineCollisionOffsets.Add((Y=30))
ExtraLineCollisionOffsets.Add((Z=-30))
ExtraLineCollisionOffsets.Add((Z=30))
// Since we're still using an extent cylinder, we need a line at 0
ExtraLineCollisionOffsets.Add(())
bNetTemporary=False
NetPriority=5

View File

@ -10,6 +10,36 @@
class KFProj_CaulkNBurn_GroundFire extends KFProj_GroundFire;
simulated protected function PrepareExplosionActor(GameExplosionActor GEA)
{
local KFExplosionActorLingering KFE_GroundFire;
local KFPlayerController KFPC;
local KFPerk InstigatorPerk;
super.PrepareExplosionActor(GEA);
KFE_GroundFire = KFExplosionActorLingering( GEA );
if( KFE_GroundFire != none )
{
if (Instigator != none && Instigator.Controller != none)
{
KFPC = KFPlayerController(Instigator.Controller);
if (KFPC != none)
{
InstigatorPerk = KFPC.GetPerk();
if (InstigatorPerk != none && InstigatorPerk.IsRangeActive())
{
KFE_GroundFire.MaxTime = KFE_GroundFire.default.MaxTime * InstigatorPerk.GetRangeGroundFireDurationMod();
KFE_GroundFire.FadeOutTime = KFE_GroundFire.MaxTime * 0.25f;
KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_3P_Molotov_EMIT.FX_Molotov_ground_fire_01';
//KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_Flamethrower_EMIT.FX_Ground_fire_Splash_01';
}
}
}
}
}
defaultproperties
{
bWarnAIWhenFired=true

View File

@ -10,6 +10,36 @@
class KFProj_FlameThrower_GroundFire extends KFProj_GroundFire;
simulated protected function PrepareExplosionActor(GameExplosionActor GEA)
{
local KFExplosionActorLingering KFE_GroundFire;
local KFPlayerController KFPC;
local KFPerk InstigatorPerk;
super.PrepareExplosionActor(GEA);
KFE_GroundFire = KFExplosionActorLingering( GEA );
if( KFE_GroundFire != none )
{
if (Instigator != none && Instigator.Controller != none)
{
KFPC = KFPlayerController(Instigator.Controller);
if (KFPC != none)
{
InstigatorPerk = KFPC.GetPerk();
if (InstigatorPerk != none && InstigatorPerk.IsRangeActive())
{
KFE_GroundFire.MaxTime = KFE_GroundFire.default.MaxTime * InstigatorPerk.GetRangeGroundFireDurationMod();
KFE_GroundFire.FadeOutTime = KFE_GroundFire.MaxTime * 0.25f;
KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_3P_Molotov_EMIT.FX_Molotov_ground_fire_01';
//KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_Flamethrower_EMIT.FX_Ground_fire_Splash_01';
}
}
}
}
}
defaultproperties
{
bWarnAIWhenFired=true

View File

@ -54,7 +54,12 @@ simulated state VortexState
{
foreach CollidingActors(class'Actor', Victim, VortexRadius, Location, true,, HitInfo)
{
if (KFPawn_Human(Victim) == none && Victim.CollisionComponent != none && !Victim.bWorldGeometry)
if (KFPawn_Human(Victim) == none
&& Victim.CollisionComponent != none
&& !Victim.bWorldGeometry
&& KFPawn_Scripted(Victim) == none
&& KFPawn_AutoTurret(Victim) == none
&& KFPawn_HRG_Warthog(Victim) == none)
{
Victim.CollisionComponent.AddRadialImpulse(Location, VortexRadius, VortexImpulseStrength, RIF_Constant, true);
}

View File

@ -316,6 +316,9 @@ simulated state ImplodingState
&& Victim != Instigator
&& KFP != None
&& KFPawn_Human(Victim) == none // No player's character
&& KFPawn_Scripted(Victim) == none
&& KFPawn_AutoTurret(Victim) == none
&& KFPawn_HRG_Warthog(Victim) == none
&& (KFPM == none || VortexTime < VortexDuration*KFPM.GetVortexAttractionModifier()) )
{
KFP.GetBoundingCylinder(ColRadius, ColHeight);

View File

@ -8,6 +8,36 @@
//=============================================================================
class KFProj_MicrowaveGun_GroundFire extends KFProj_GroundFire;
simulated protected function PrepareExplosionActor(GameExplosionActor GEA)
{
local KFExplosionActorLingering KFE_GroundFire;
local KFPlayerController KFPC;
local KFPerk InstigatorPerk;
super.PrepareExplosionActor(GEA);
KFE_GroundFire = KFExplosionActorLingering( GEA );
if( KFE_GroundFire != none )
{
if (Instigator != none && Instigator.Controller != none)
{
KFPC = KFPlayerController(Instigator.Controller);
if (KFPC != none)
{
InstigatorPerk = KFPC.GetPerk();
if (InstigatorPerk != none && InstigatorPerk.IsRangeActive())
{
KFE_GroundFire.MaxTime = KFE_GroundFire.default.MaxTime * InstigatorPerk.GetRangeGroundFireDurationMod();
KFE_GroundFire.FadeOutTime = KFE_GroundFire.MaxTime * 0.25f;
KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_3P_Molotov_EMIT.FX_Molotov_ground_fire_01';
//KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_Flamethrower_EMIT.FX_Ground_fire_Splash_01';
}
}
}
}
}
defaultproperties
{
bWarnAIWhenFired=true

View File

@ -337,11 +337,18 @@ simulated function Stick( vector StuckLocation, vector StuckNormal )
local KFProj_Mine_Reconstructor PukeMine;
local rotator RandRot;
if( Role != ROLE_Authority ) return;
if( Role != ROLE_Authority )
{
return;
}
//we added a scapegoat that fixes the problem of hitwall not calling always in client, so we need to check it in case it comes
//to not call it twice
if(bSticked == true) return;
if(bSticked == true)
{
return;
}
RotationRate = rot(0,0,0);
// Modify the collision so it can be detonated by the player
@ -351,7 +358,6 @@ simulated function Stick( vector StuckLocation, vector StuckNormal )
bCollideComplex = false;
bBounce = false;
SetPhysics( PHYS_None );
SetOwner( none );
// Optimize for network
NetUpdateFrequency = 10;
@ -410,7 +416,11 @@ reliable client function StickInClient(vector StuckLocation, vector StuckNormal)
//we added a scapegoat that fixes the problem of hitwall not calling always in client, so we need to check it in case it comes
//to not call it twice
if(bSticked == true) return;
if(bSticked == true)
{
return;
}
RotationRate = rot(0,0,0);
SetLocation(StuckLocation);
// Modify the collision so it can be detonated by the player
@ -419,7 +429,6 @@ reliable client function StickInClient(vector StuckLocation, vector StuckNormal)
CylinderComponent.SetActorCollision( true, false );
bCollideComplex = false;
bBounce = false;
SetOwner( none );
// Optimize for network
NetUpdateFrequency = 0.25f;
@ -541,7 +550,6 @@ simulated function bool ValidTouch( Pawn Other )
}
else
{
if(bCantDetonateOnFullHP)
{
if(Other.GetTeamNum() == TeamNum && Other.Health >= Other.HealthMax )
@ -558,6 +566,7 @@ simulated function bool ValidTouch( Pawn Other )
// Make sure not touching through wall
return FastTrace( Other.Location, Location,, true );
}
return FastTrace( Other.Location, Location,, true );
}
@ -566,6 +575,35 @@ simulated event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLoca
{
local Pawn P;
// If touched by ballistic bouncer, explode
if (KFProj_HRG_BallisticBouncer(Other) != none
|| KFProj_BloatPukeMine(Other) != none)
{
if (KFProj_BloatPukeMine(Other) != none)
{
// Force Touch, as by itself doesn't detect the Mine..
KFProj_BloatPukeMine(Other).Touch(self, none, HitLocation, HitNormal);
}
if (`TimeSince(CreationTime) >= 0.1f)
{
if ( WorldInfo.NetMode != NM_DedicatedServer )
{
// Use ImpactEffectManager to handle material based impacts
`ImpactEffectManager.PlayImpactEffects(HitLocation, Instigator,, ImpactEffects);
}
if (ExplosionTemplate != None && Role == ROLE_Authority)
{
TriggerExplosion(HitLocation, HitNormal, Other);
}
Shutdown(); // cleanup/destroy projectile
return;
}
}
// If touched by an enemy pawn, explode
P = Pawn( Other );
if( P != None )
@ -886,9 +924,9 @@ defaultproperties
// Camera Shake
CamShake=CameraShake'WEP_Mine_Reconstructor_Arch.Camera_Shake'
CamShakeInnerRadius=0
CamShakeOuterRadius=0
CamShakeFalloff=1.f
CamShakeInnerRadius=100
CamShakeOuterRadius=450
CamShakeFalloff=1.5f
bOrientCameraShakeTowardsEpicenter=true
End Object
ExplosionTemplate=ExploTemplate0

View File

@ -137,4 +137,4 @@ defaultproperties
RateLimiter=0.1
bKnockdownZeds=true
bExcludeAnyBoss=true
}
}

View File

@ -17,7 +17,7 @@ simulated state WeaponSingleFiring
if (WorldInfo.NetMode == NM_Client && bAllowClientAmmoTracking && FireInterval[CurrentFireMode] <= MinFireIntervalToTriggerSync)
{
SyncCurrentAmmoCount(CurrentFireMode, AmmoCount[CurrentFireMode]);
SyncCurrentAmmoCount(CurrentFireMode, AmmoCount[GetAmmoType(CurrentFireMode)]);
}
}
}

View File

@ -270,18 +270,6 @@ function SetOriginalValuesFromPickup( KFWeapon PickedUpWeapon )
// charge alerts (beep, light) need current instigator
WeaponPawn.Instigator = Instigator;
WeaponPawn.SetOwner(self);
if (Instigator.Controller != none)
{
if (KFPawn_HRG_Warthog(KFPC.DeployedTurrets[i]) != none)
{
KFPawn_HRG_Warthog(KFPC.DeployedTurrets[i]).InstigatorController = Instigator.Controller;
}
else if (KFPawn_Autoturret(KFPC.DeployedTurrets[i]) != none)
{
KFPawn_Autoturret(KFPC.DeployedTurrets[i]).InstigatorController = Instigator.Controller;
}
}
}
}
}

View File

@ -427,8 +427,8 @@ defaultproperties
DistortTrailParticle = none
WhiteTrailParticle = none
BlueTrailParticle = none
RedTrailParticle = none
// BlueTrailParticle = none
// RedTrailParticle = none
FoldedTrailParticleSystem=ParticleSystem'WEP_Scythe_EMIT.FX_Scythe_Custom_R_01'
UnfoldedTrailParticleSystem=ParticleSystem'WEP_Scythe_EMIT.FX_Scythe_Custom_Unfold_01';

View File

@ -11,9 +11,6 @@ class KFWeap_GravityImploder extends KFWeapon;
`define GRAVITYIMPLODER_MIC_LED_INDEX 1
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
var float SelfDamageReductionValue;
/** Weapons material colors for each fire mode. */
var LinearColor DefaultFireMaterialColor;
var LinearColor AltFireMaterialColor;
@ -70,17 +67,6 @@ simulated function AltFireMode()
StartFire(ALTFIRE_FIREMODE);
}
// Reduce damage to self
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
{
super.AdjustDamage(InDamage, DamageType, DamageCauser);
if (Instigator != none && DamageCauser != none && DamageCauser.Instigator == Instigator)
{
InDamage *= SelfDamageReductionValue;
}
}
defaultproperties
{
// Content
@ -179,9 +165,7 @@ defaultproperties
bHasFlashlight=false
WeaponFireWaveForm=ForceFeedbackWaveform'FX_ForceFeedback_ARCH.Gunfire.Medium_Recoil'
SelfDamageReductionValue=0.075f //0.f
bLastFireWasAlt=false
DefaultFireMaterialColor = (R = 0.965f,G = 0.2972f, B = 0.0f)
AltFireMaterialColor = (R = 0.0f, G = 0.9631f, B = 0.96581f)

View File

@ -9,8 +9,6 @@
class KFWeap_HRG_Crossboom extends KFWeap_ScopedBase;
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
var() float SelfDamageReductionValue;
/** Return true if this weapon should play the fire last animation for this shoot animation */
simulated function bool ShouldPlayFireLast(byte FireModeNum)
@ -49,19 +47,6 @@ simulated function AltFireMode()
StartFire(ALTFIRE_FIREMODE);
}
/**
Reduce the damage received and apply it to the shield
*/
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
{
super.AdjustDamage(InDamage, DamageType, DamageCauser);
if (Instigator != none && DamageCauser.Instigator == Instigator)
{
InDamage *= SelfDamageReductionValue;
}
}
defaultproperties
{
// Inventory
@ -186,6 +171,4 @@ defaultproperties
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.15f), (Stat=EWUS_Damage1, Scale=1.15f), (Stat=EWUS_Weight, Add=1)))
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.3f), (Stat=EWUS_Damage1, Scale=1.3f), (Stat=EWUS_Weight, Add=2)))
SelfDamageReductionValue = 0.25f;
}

View File

@ -48,9 +48,6 @@ var AkComponent IronsightsComponent;
var AkEvent IronsightsZoomInSound;
var AkEvent IronsightsZoomOutSound;
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
var() float SelfDamageReductionValue;
/**
* Toggle between DEFAULT and ALTFIRE
*/
@ -527,19 +524,6 @@ simulated state WeaponBurstFiring
}
}
/**
Reduce the damage received and apply it to the shield
*/
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
{
super.AdjustDamage(InDamage, DamageType, DamageCauser);
if (Instigator != none && DamageCauser.Instigator == Instigator)
{
InDamage *= SelfDamageReductionValue;
}
}
defaultproperties
{
ForceReloadTime=0.4f
@ -680,5 +664,4 @@ defaultproperties
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.15f), (Stat=EWUS_Damage1, Scale=1.15f), (Stat=EWUS_Weight, Add=1)))
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.3f), (Stat=EWUS_Damage1, Scale=1.3f), (Stat=EWUS_Weight, Add=2)))
SelfDamageReductionValue = 0f;
}

View File

@ -123,7 +123,7 @@ defaultproperties
PenetrationPower(ALTFIRE_FIREMODE)=0
FireInterval(ALTFIRE_FIREMODE)=0.5
Spread(ALTFIRE_FIREMODE)=0.025
AmmoCost(ALTFIRE_FIREMODE)=5 //3
AmmoCost(ALTFIRE_FIREMODE)=3 //3
// Shotgun
NumPellets(ALTFIRE_FIREMODE)=1

View File

@ -71,8 +71,6 @@ var const WeaponFireSndInfo BloodSuctionLoopNoAmmoAndBloodBallChargedSound;
var bool bIsSprayDisabled;
var float SelfDamageReductionValue;
var float FullChargedTimerInterval;
var float ChargePercentage;
@ -1339,7 +1337,6 @@ defaultproperties
//BLOOD BALL
ChargingSound=(DefaultCue = AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Loop_3P', FirstPersonCue=AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Loop_1P')
ChargedSound=(DefaultCue = AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Charged_3P', FirstPersonCue=AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Charged_1P')
SelfDamageReductionValue=0.1f
//MaxChargeTime=0.6 //0.8
MinDamageWhileChargingThreshold=0.12 //10% of MaxChargeTime

View File

@ -275,18 +275,6 @@ function SetOriginalValuesFromPickup( KFWeapon PickedUpWeapon )
// charge alerts (beep, light) need current instigator
WeaponPawn.Instigator = Instigator;
WeaponPawn.SetOwner(self);
if (Instigator.Controller != none)
{
if (KFPawn_HRG_Warthog(KFPC.DeployedTurrets[i]) != none)
{
KFPawn_HRG_Warthog(KFPC.DeployedTurrets[i]).InstigatorController = Instigator.Controller;
}
else if (KFPawn_Autoturret(KFPC.DeployedTurrets[i]) != none)
{
KFPawn_Autoturret(KFPC.DeployedTurrets[i]).InstigatorController = Instigator.Controller;
}
}
}
}
}

View File

@ -32,7 +32,6 @@ var transient bool bIsFullyCharged;
var const WeaponFireSndInfo FullyChargedSound;
var float SelfDamageReductionValue;
var float FullChargedTimerInterval;
@ -377,16 +376,6 @@ simulated function int GetChargeFXLevel()
}
}
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
{
super.AdjustDamage(InDamage, DamageType, DamageCauser);
if (Instigator != none && DamageCauser != none && DamageCauser.Instigator == Instigator ) //self
{
InDamage *= SelfDamageReductionValue;
}
}
// increase the instant hit damage based on the charge level
simulated function int GetModifiedDamage(byte FireModeNum, optional vector RayDir)
{
@ -403,7 +392,6 @@ simulated function int GetModifiedDamage(byte FireModeNum, optional vector RayDi
defaultproperties
{
SelfDamageReductionValue=0.1f
//Gameplay Props
MaxChargeTime=1.0
ValueIncreaseTime=0.2

View File

@ -32,8 +32,6 @@ var transient bool bIsFullyCharged;
var const WeaponFireSndInfo FullyChargedSound;
var float SelfDamageReductionValue;
var float FullChargedTimerInterval;
var float FXScalingFactorByCharge, ChargePercentage;
var float MinScale, MaxScale;
@ -289,7 +287,7 @@ simulated function BeginFire(Byte FireModeNum)
simulated function StartFire(byte FiremodeNum)
{
if (IsTimerActive('RefireCheckTimer') || bBlocked)
if (bBlocked)
{
return;
}
@ -308,8 +306,6 @@ simulated function StartFire(byte FiremodeNum)
{
bBlocked = false;
}
}
simulated function RefireCheckTimer()
@ -513,6 +509,7 @@ simulated state MineReconstructorCharge extends WeaponFiring
global.Tick(DeltaTime);
if(bIsFullyCharged) return;
if(PendingFire(ALTFIRE_FIREMODE)) return;
// Don't charge unless we're holding down the button
if (PendingFire(CurrentFireMode))
@ -803,6 +800,11 @@ simulated function AltFireMode()
return;
}
if (PendingFire(DEFAULT_FIREMODE))
{
return;
}
StartFire(ALTFIRE_FIREMODE);
}
@ -831,11 +833,8 @@ state WeaponSingleFiring
}
}
defaultproperties
{
SelfDamageReductionValue=0.1f
//Gameplay Props
MaxChargeTime=1.2
AmmoIncreasePerCharge=1
@ -906,6 +905,7 @@ defaultproperties
WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_Projectile
WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Mine_Reconstructor'
FireInterval(DEFAULT_FIREMODE)=+0.2 //+0.33
Spread(DEFAULT_FIREMODE)=0.0
InstantHitDamage(DEFAULT_FIREMODE)=120
PenetrationPower(DEFAULT_FIREMODE)=0.0;
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Toxic_MineReconstructorImpact'
@ -915,6 +915,7 @@ defaultproperties
FiringStatesArray(ALTFIRE_FIREMODE)=WeaponSingleFiring
WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_Custom
FireInterval(ALTFIRE_FIREMODE)=+0.15 //+0.25
Spread(ALTFIRE_FIREMODE)=0.0
AmmoCost(ALTFIRE_FIREMODE)=0
// BASH_FIREMODE

View File

@ -138,6 +138,7 @@ defaultproperties
// Fire Effects
MuzzleFlashTemplate=KFMuzzleFlash'WEP_L85A2_ARCH.Wep_L85A2_MuzzleFlash'
WeaponFireSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_ZED_Patriarch.Play_Mini_Gun_LP', FirstPersonCue=AkEvent'WW_ZED_Patriarch.Play_Mini_Gun_LP')
WeaponFireSnd(ALTFIRE_FIREMODE) = (DefaultCue=AkEvent'WW_WEP_Stoner.Play_WEP_Stoner_Fire_3P_Single', FirstPersonCue=AkEvent'WW_WEP_Stoner.Play_WEP_Stoner_Fire_3P_Single')
WeaponDryFireSnd(DEFAULT_FIREMODE)=AkEvent'WW_WEP_SA_AK12.Play_WEP_SA_AK12_Handling_DryFire'
WeaponDryFireSnd(ALTFIRE_FIREMODE)=AkEvent'WW_WEP_SA_AK12.Play_WEP_SA_AK12_Handling_DryFire'

View File

@ -28,9 +28,6 @@ var bool bCannonballConvertedToTimeBomb;
/** flag indicating that the player released the button and the cannonbal can't be configured as a timed bomb **/
var bool bForceStandardCannonbal;
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
var float SelfDamageReductionValue;
/** Amount of time we hold the fire button on this fire state, used in BlunderbussDeployAndDetonate **/
var transient float FireHoldTime;
@ -369,16 +366,6 @@ simulated function HandleProjectileImpact(byte ProjectileFireMode, ImpactInfo Im
}
}
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
{
super.AdjustDamage(InDamage, DamageType, DamageCauser);
if (Instigator != none && DamageCauser != none && DamageCauser.Instigator == Instigator)
{
InDamage *= SelfDamageReductionValue;
}
}
simulated function KFProjectile SpawnAllProjectiles(class<KFProjectile> KFProjClass, vector RealStartLoc, vector AimDir)
{
local KFPerk InstigatorPerk;
@ -467,7 +454,6 @@ defaultproperties
bIsBackupWeapon=false
// Gameplay
SelfDamageReductionValue=0.5f //0.75f
TimedDetonationThresholdTime=0.01f
// FOV

View File

@ -19,9 +19,6 @@ var array<KFProj_Rocket_SealSqueal> DeployedHarpoons;
/** Same as DeployedHarpoons.Length, but replicated because harpoons are only tracked on server */
var int NumDeployedHarpoons;
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
var float SelfDamageReductionValue;
/** Camera shake when detonating the harpoons */
var CameraAnim DetonateCameraAnim;
var float DetonateCameraAnimPlayRate;
@ -81,15 +78,6 @@ simulated function name GetReloadAnimName(bool bTacticalReload)
}
}
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
{
super.AdjustDamage(InDamage, DamageType, DamageCauser);
if (Instigator != none && DamageCauser != none && DamageCauser.Instigator == Instigator)
{
InDamage *= SelfDamageReductionValue;
}
}
/*********************************************************************************************
* State WeaponDetonating
@ -338,8 +326,6 @@ defaultproperties
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.15f), (Stat=EWUS_Weight, Add=1)))
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.3f), (Stat=EWUS_Weight, Add=2)))
SelfDamageReductionValue=0.25f
DetonateCameraAnim=CameraAnim'WEP_1P_Seal_Squeal_ANIM.Shoot_MB500'
DetonateCameraAnimPlayRate=2.0f
DetonateCameraAnimScale=0.4f

View File

@ -15,9 +15,6 @@ var array<KFProj_Rocket_ThermiteBore> DeployedHarpoons;
/** Same as DeployedHarpoons.Length, but replicated because harpoons are only tracked on server */
var int NumDeployedHarpoons;
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
var float SelfDamageReductionValue;
var(Animations) const editconst name DetonateAnim;
var(Animations) const editconst name DetonateAnimLast;
var(Animations) const editconst name DetonateAnimIron;
@ -77,16 +74,6 @@ simulated function name GetReloadAnimName(bool bTacticalReload)
}
}
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
{
super.AdjustDamage(InDamage, DamageType, DamageCauser);
if (Instigator != none && DamageCauser != none && DamageCauser.Instigator == Instigator)
{
InDamage *= SelfDamageReductionValue;
}
}
/*********************************************************************************************
* State WeaponDetonating
* The weapon is in this state while detonating a charge
@ -315,8 +302,6 @@ defaultproperties
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.125f), (Stat=EWUS_Weight, Add=1)))
SelfDamageReductionValue=0.05f //0.25f
DetonateAnim=Alt_Fire
DetonateAnimLast=Alt_Fire_Last
DetonateAnimIron=Alt_Fire_Iron

View File

@ -168,7 +168,7 @@ defaultproperties
FireInterval(ALTFIRE_FIREMODE)=0.25 // 240 RPM
NumPellets(ALTFIRE_FIREMODE)=24
Spread(ALTFIRE_FIREMODE)=0.19
AmmoCost(ALTFIRE_FIREMODE)=4
AmmoCost(ALTFIRE_FIREMODE)=1
DoubleBarrelKickMomentum=1000
FallingMomentumReduction=0.5