KF2-Server-Extension/ServerExt/Classes/Ext_PerkRhythmPerkBase.uc
inklesspen1scripter 847c8b3cff Traits changes
Rack'em Up doesn't reducing when miss anymore
Trait "MedicPistol" replacing (don't removing) 9mm from default inventory so players with this trait will spawn with medic pistol in hands
Optimized code of Rack'em Up trait
2020-07-07 20:49:25 +03:00

107 lines
3.0 KiB
Ucode

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