KF2-Server-Extension/ServerExt/Classes/Ext_PerkRhythmPerkBase.uc

107 lines
3.0 KiB
Ucode
Raw Normal View History

2017-10-20 02:00:49 +00:00
Class Ext_PerkRhythmPerkBase extends Ext_PerkBase;
var byte HeadShotComboCount,MaxRhythmCombo;
2017-10-20 02:00:49 +00:00
var float RhythmComboDmg;
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);
}
function SubstractHeadShotCombo()
{
if( HeadShotComboCount > 0 )
UpdateDmgScale(false);
else
ClearTimer( nameOf( SubstractHeadShotCombo ) );
}
2017-10-20 02:00:49 +00:00
final function UpdateDmgScale( bool bUp )
{
if( bUp )
{
HeadShotComboCount = Min(HeadShotComboCount+1,MaxRhythmCombo);
2017-10-20 02:00:49 +00:00
HeadShotMessage(HeadShotComboCount,false,MaxRhythmCombo);
SetTimer( HeadShotCountdownIntervall, true, nameOf( SubstractHeadShotCombo ) );
2017-10-20 02:00:49 +00:00
}
else if( HeadShotComboCount>0)
2017-10-20 02:00:49 +00:00
{
--HeadShotComboCount;
HeadShotMessage(HeadShotComboCount,true,MaxRhythmCombo);
}
else return;
RhythmComboDmg = HeadShotComboCount*0.075;
2017-10-20 02:00:49 +00:00
}
2017-10-20 02:00:49 +00:00
function UpdatePerkHeadShots( ImpactInfo Impact, class<DamageType> DamageType, int NumHit )
{
local int HitZoneIdx;
2017-10-20 02:00:49 +00:00
local KFPawn_Monster KFPM;
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() )
{
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
{
HeadShotCountdownIntervall=2.f
2017-10-20 02:00:49 +00:00
}