Class Ext_PerkFieldMedic extends Ext_PerkBase; var float RepairArmorRate,AirborneAgentHealRate; var byte AirborneAgentLevel; var bool bHealingBoost,bHealingDamageBoost,bHealingShield; var byte HealingShield; var const float SelfHealingSurgePct,MaxHealingSpeedBoost,HealingSpeedBoostDuration,MaxHealingDamageBoost,HealingDamageBoostDuration,MaxHealingShield,HealingShieldDuration; var float HealingSpeedBoostPct, HealingDamageBoostPct, HealingShieldPct; var bool bUseToxicDamage,bUseSlug,bUseAirborneAgent; var const class ToxicDmgTypeClass; simulated function ModifyDamageGiven(out int InDamage, optional Actor DamageCauser, optional KFPawn_Monster MyKFPM, optional KFPlayerController DamageInstigator, optional class DamageType, optional int HitZoneIdx) { local float TempDamage; TempDamage = InDamage; if (bUseSlug && WorldInfo.TimeDilation < 1.f && DamageType != none && ClassIsChildOf(DamageType, class'KFDT_Toxic')) TempDamage += InDamage * 100; InDamage = Round(TempDamage); Super.ModifyDamageGiven(InDamage, DamageCauser, MyKFPM, DamageInstigator, DamageType, HitZoneIdx); } simulated function ModifyMagSizeAndNumber(KFWeapon KFW, out int MagazineCapacity, optional array< Class > WeaponPerkClass, optional bool bSecondary=false, optional name WeaponClassname) { if (MagazineCapacity>2 && (KFW==None ? WeaponPerkClass.Find(BasePerk)>=0 : IsWeaponOnPerk(KFW))) // Skip boomstick for this. MagazineCapacity = Min(MagazineCapacity*Modifiers[10], bSecondary ? 150 : 255); } function bool RepairArmor(Pawn HealTarget) { local KFPawn_Human KFPH; if (RepairArmorRate>0) { KFPH = KFPawn_Human(Healtarget); if (KFPH != none && KFPH.Armor < KFPH.MaxArmor) { KFPH.AddArmor(Round(float(KFPH.MaxArmor) * RepairArmorRate)); return true; } } return false; } function bool ModifyHealAmount(out float HealAmount) { HealAmount*=Modifiers[9]; return (RepairArmorRate>0); } // Di // simulated function ModifyHealerRechargeTime(out float RechargeRate) // { // super.ModifyHealerRechargeTime(RechargeRate) // RechargeRate /= Clamp(Modifiers[9] * 2, 1.f, 3.f); // } function CheckForAirborneAgent(KFPawn HealTarget, class DamType, int HealAmount) { if ((AirborneAgentLevel==1 && WorldInfo.TimeDilation<1.f) || AirborneAgentLevel>1) GiveMedicAirborneAgentHealth(HealTarget, DamType, HealAmount); } function GiveMedicAirborneAgentHealth(KFPawn HealTarget, class DamType, int HealAmount) { local KFPawn KFP; local int RoundedExtraHealAmount; RoundedExtraHealAmount = FCeil(float(HealAmount) * AirborneAgentHealRate); foreach WorldInfo.Allpawns(class'KFPawn', KFP, HealTarget.Location, 500.f) { if (KFP.IsAliveAndWell() && WorldInfo.GRI.OnSameTeam(HealTarget, KFP)) { if (HealTarget == KFP) KFP.HealDamage(RoundedExtraHealAmount, PlayerOwner, DamType); else KFP.HealDamage(RoundedExtraHealAmount + HealAmount, PlayerOwner, DamType); } } } static function class GetToxicDmgTypeClass() { return default.ToxicDmgTypeClass; } static function int ModifyToxicDmg(int ToxicDamage) { local float TempDamage; TempDamage = float(ToxicDamage) * 1.2; return FCeil(TempDamage); } function NotifyZedTimeStarted() { local KFPawn_Human HPawn; HPawn = KFPawn_Human(PlayerOwner.Pawn); if (bUseAirborneAgent && HPawn != none && HPawn.IsAliveAndWell()) HPawn.StartAirBorneAgentEvent(); } simulated function float GetSnarePower(optional class DamageType, optional byte HitZoneIdx) { if (bUseSlug && WorldInfo.TimeDilation < 1.f && class(DamageType)!=None && class(DamageType).Default.ModifierPerkList.Find(BasePerk)>=0) return 100; return 0.f; } function AddDefaultInventory(KFPawn P) { local int i; i = P.DefaultInventory.Find(class'ExtWeap_Pistol_9mm'); if (i != -1) P.DefaultInventory[i] = class'ExtWeap_Pistol_MedicS'; super.AddDefaultInventory(P); } simulated function bool GetHealingSpeedBoostActive() { return bHealingBoost; } simulated function byte GetHealingSpeedBoost() { return byte(HealingSpeedBoostPct); } simulated function byte GetMaxHealingSpeedBoost() { return MaxHealingSpeedBoost; } simulated function float GetHealingSpeedBoostDuration() { return HealingSpeedBoostDuration; } simulated function bool GetHealingDamageBoostActive() { return bHealingDamageBoost; } simulated function byte GetHealingDamageBoost() { return byte(HealingDamageBoostPct); } simulated function byte GetMaxHealingDamageBoost() { return MaxHealingDamageBoost; } simulated function float GetHealingDamageBoostDuration() { return HealingDamageBoostDuration; } simulated function bool GetHealingShieldActive() { return bHealingShield; } simulated function byte GetHealingShield() { return byte(HealingShieldPct); } simulated function byte GetMaxHealingShield() { return MaxHealingShield; } simulated function float GetHealingShieldDuration() { return HealingShieldDuration; } simulated function float GetSelfHealingSurgePct() { return SelfHealingSurgePct; } defaultproperties { PerkIcon=Texture2D'UI_PerkIcons_TEX.UI_PerkIcon_Medic' DefTraitList.Remove(class'Ext_TraitMedicPistol') DefTraitList.Add(class'Ext_TraitAirborne') DefTraitList.Add(class'Ext_TraitWPMedic') DefTraitList.Add(class'Ext_TraitAcidicCompound') DefTraitList.Add(class'Ext_TraitMedBoost') DefTraitList.Add(class'Ext_TraitMedDamBoost') DefTraitList.Add(class'Ext_TraitMedShield') DefTraitList.Add(class'Ext_TraitZedative') DefTraitList.Add(class'Ext_TraitAirborneAgent') DefTraitList.Add(class'Ext_TraitArmorRep') BasePerk=class'KFPerk_FieldMedic' HealExpUpNum=3 HealingSpeedBoostPct = 10.0f HealingDamageBoostPct = 5.0f HealingShieldPct = 10.0f ToxicDmgTypeClass=class'KFDT_Toxic_AcidicRounds' SelfHealingSurgePct=0.1f MaxHealingSpeedBoost=30 HealingSpeedBoostDuration=5.f MaxHealingDamageBoost=20 HealingDamageBoostDuration=5.f MaxHealingShield=30 HealingShieldDuration=5.0f DefPerkStats(0)=(MaxValue=70) DefPerkStats(9)=(bHiddenConfig=false) // Heal efficiency DefPerkStats(15)=(bHiddenConfig=false) // Toxic resistance DefPerkStats(16)=(bHiddenConfig=false) // Sonic resistance DefPerkStats(17)=(bHiddenConfig=false) // Fire resistance DefPerkStats(20)=(bHiddenConfig=false) // Heal recharge PrimaryMelee=class'KFWeap_Knife_FieldMedic' PrimaryWeapon=None PerkGrenade=class'KFProj_MedicGrenade' SuperGrenade=class'ExtProj_SUPERMedGrenade' SecondaryWeaponDef=class'ExtWeapDef_MedicPistol' PrimaryWeaponDef=None KnifeWeaponDef=class'KFWeapDef_Knife_Medic' GrenadeWeaponDef=class'KFWeapDef_Grenade_Medic' AutoBuyLoadOutPath=(class'KFWeapDef_MedicSMG', class'KFWeapDef_MedicShotgun', class'KFWeapDef_MedicRifle') }