2017-10-20 02:00:49 +00:00
|
|
|
Class Ext_PerkRhythmPerkBase extends Ext_PerkBase;
|
|
|
|
|
2020-07-07 17:49:25 +00:00
|
|
|
var byte HeadShotComboCount,MaxRhythmCombo;
|
2017-10-20 02:00:49 +00:00
|
|
|
var float RhythmComboDmg;
|
2020-06-30 07:43:48 +00:00
|
|
|
var private const float HeadShotCountdownIntervall;
|
2017-10-20 02:00:49 +00:00
|
|
|
|
|
|
|
simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCauser, optional KFPawn_Monster MyKFPM, optional KFPlayerController DamageInstigator, optional class<KFDamageType> DamageType, optional int HitZoneIdx )
|
|
|
|
{
|
|
|
|
Super.ModifyDamageGiven(InDamage,DamageCauser,MyKFPM,DamageInstigator,DamageType,HitZoneIdx);
|
|
|
|
if( RhythmComboDmg>0 && BasePerk==None || (DamageType!=None && DamageType.Default.ModifierPerkList.Find(BasePerk)>=0) || IsWeaponOnPerk(KFWeapon(DamageCauser)) )
|
|
|
|
InDamage *= (1.f+RhythmComboDmg);
|
|
|
|
}
|
|
|
|
|
|
|
|
final function SetMaxRhythm( byte MaxCombo )
|
|
|
|
{
|
|
|
|
MaxRhythmCombo = MaxCombo;
|
|
|
|
}
|
|
|
|
final function ResetRhythm()
|
|
|
|
{
|
|
|
|
MaxRhythmCombo = 0;
|
|
|
|
HeadShotComboCount = 0;
|
|
|
|
RhythmComboDmg = 0;
|
|
|
|
HeadShotMessage(0,true,1);
|
|
|
|
}
|
|
|
|
|
2020-06-30 07:43:48 +00:00
|
|
|
function SubstractHeadShotCombo()
|
|
|
|
{
|
|
|
|
if( HeadShotComboCount > 0 )
|
2020-07-07 17:49:25 +00:00
|
|
|
UpdateDmgScale(false);
|
|
|
|
else
|
2020-06-30 07:43:48 +00:00
|
|
|
ClearTimer( nameOf( SubstractHeadShotCombo ) );
|
|
|
|
}
|
|
|
|
|
2017-10-20 02:00:49 +00:00
|
|
|
final function UpdateDmgScale( bool bUp )
|
|
|
|
{
|
|
|
|
if( bUp )
|
|
|
|
{
|
2020-07-07 17:49:25 +00:00
|
|
|
HeadShotComboCount = Min(HeadShotComboCount+1,MaxRhythmCombo);
|
2017-10-20 02:00:49 +00:00
|
|
|
HeadShotMessage(HeadShotComboCount,false,MaxRhythmCombo);
|
2020-06-30 07:43:48 +00:00
|
|
|
SetTimer( HeadShotCountdownIntervall, true, nameOf( SubstractHeadShotCombo ) );
|
2017-10-20 02:00:49 +00:00
|
|
|
}
|
2020-07-07 17:49:25 +00:00
|
|
|
else if( HeadShotComboCount>0)
|
2017-10-20 02:00:49 +00:00
|
|
|
{
|
|
|
|
--HeadShotComboCount;
|
|
|
|
HeadShotMessage(HeadShotComboCount,true,MaxRhythmCombo);
|
|
|
|
}
|
|
|
|
else return;
|
2020-07-07 17:49:25 +00:00
|
|
|
RhythmComboDmg = HeadShotComboCount*0.075;
|
2017-10-20 02:00:49 +00:00
|
|
|
}
|
2020-06-30 07:43:48 +00:00
|
|
|
|
2017-10-20 02:00:49 +00:00
|
|
|
function UpdatePerkHeadShots( ImpactInfo Impact, class<DamageType> DamageType, int NumHit )
|
|
|
|
{
|
2020-06-21 19:06:43 +00:00
|
|
|
local int HitZoneIdx;
|
2017-10-20 02:00:49 +00:00
|
|
|
local KFPawn_Monster KFPM;
|
2020-06-21 19:06:43 +00:00
|
|
|
|
2017-10-20 02:00:49 +00:00
|
|
|
if( MaxRhythmCombo<=0 )
|
|
|
|
return;
|
|
|
|
KFPM = KFPawn_Monster(Impact.HitActor);
|
|
|
|
if( KFPM==none || KFPM.GetTeamNum()==0 )
|
|
|
|
return;
|
|
|
|
|
|
|
|
HitZoneIdx = KFPM.HitZones.Find('ZoneName', Impact.HitInfo.BoneName);
|
|
|
|
if( HitZoneIdx == HZI_Head && KFPM.IsAliveAndWell() )
|
|
|
|
{
|
2020-07-07 17:49:25 +00:00
|
|
|
if( class<KFDamageType>(DamageType)!=None && (class<KFDamageType>(DamageType).Default.ModifierPerkList.Find(BasePerk)>=0))
|
2017-10-20 02:00:49 +00:00
|
|
|
UpdateDmgScale(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
reliable client function HeadShotMessage( byte HeadShotNum, bool bMissed, byte MaxHits )
|
|
|
|
{
|
|
|
|
local AkEvent TempAkEvent;
|
|
|
|
local KFPlayerController PC;
|
|
|
|
|
|
|
|
PC = KFPlayerController(PlayerOwner);
|
|
|
|
if( PC==none || PC.MyGFxHUD==none )
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
PC.MyGFxHUD.RhythmCounterWidget.SetInt("count", HeadShotNum);
|
|
|
|
PC.MyGFxHUD.RhythmCounterWidget.SetBonusPercentage(float(HeadShotNum) / float(MaxHits));
|
|
|
|
|
|
|
|
if( HeadshotNum==0 )
|
|
|
|
TempAkEvent = AkEvent'WW_UI_PlayerCharacter.Play_R_Method_Reset';
|
|
|
|
else if( HeadShotNum<MaxHits )
|
|
|
|
{
|
|
|
|
if( !bMissed )
|
|
|
|
{
|
|
|
|
//PC.ClientSpawnCameraLensEffect(class'KFCameraLensEmit_RackemHeadShot');
|
|
|
|
TempAkEvent = AkEvent'WW_UI_PlayerCharacter.Play_R_Method_Hit';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if( !bMissed )
|
|
|
|
{
|
|
|
|
//PC.ClientSpawnCameraLensEffect(class'KFCameraLensEmit_RackemHeadShotPing');
|
|
|
|
TempAkEvent = AkEvent'WW_UI_PlayerCharacter.Play_R_Method_Top';
|
|
|
|
HeadshotNum = 6;
|
|
|
|
}
|
|
|
|
|
|
|
|
if( TempAkEvent != none )
|
|
|
|
PC.PlayRMEffect( TempAkEvent, 'R_Method', HeadshotNum );
|
|
|
|
}
|
|
|
|
|
|
|
|
defaultproperties
|
|
|
|
{
|
2020-06-30 07:43:48 +00:00
|
|
|
HeadShotCountdownIntervall=2.f
|
2017-10-20 02:00:49 +00:00
|
|
|
}
|