Change Enforcer's skills for patch 0.2.70

This commit is contained in:
Anton Tarasenko 2020-04-21 13:52:35 +07:00
parent 5ceb49b2c3
commit e7d1c539e8
19 changed files with 303 additions and 115 deletions

View File

@ -102,11 +102,25 @@ event Tick(float DeltaTime){
} }
function Killed(Controller Killer, Controller Killed, Pawn KilledPawn, class<DamageType> dmgType){ function Killed(Controller Killer, Controller Killed, Pawn KilledPawn, class<DamageType> dmgType){
local GameRules rules; local GameRules rules;
local NicePlayerController nicePlayer;
local NiceAvoidMarkerCarnage AvoidArea;
local ScrnGameRules scrnRules; local ScrnGameRules scrnRules;
local KFSteamStatsAndAchievements StatsAndAchievements; local KFSteamStatsAndAchievements StatsAndAchievements;
Super.Killed(Killer, Killed, KilledPawn, dmgType); Super.Killed(Killer, Killed, KilledPawn, dmgType);
if(PlayerController(Killer) != none){ if(PlayerController(Killer) != none){
nicePlayer = NicePlayerController(killer);
if(NiceMonster(KilledPawn) != none && Killed != Killer){ if(NiceMonster(KilledPawn) != none && Killed != Killer){
// Brutal carnage
if (nicePlayer != none && killer.pawn != none && nicePlayer.abilityManager != none && nicePlayer.abilityManager.IsAbilityActive("carnage"))
{
AvoidArea = Spawn(class'NiceAvoidMarkerCarnage', killer.pawn);
AvoidArea.SetLocation(KilledPawn.location);
AvoidArea.healthLevel = killedPawn.default.health;
AvoidArea.SetCollisionSize( class'NicePack.NiceSkillEnforcerBrutalCarnageA'.default.avoidRadius,
class'NicePack.NiceSkillEnforcerBrutalCarnageA'.default.avoidRadius);
AvoidArea.StartleBots();
}
// Rest
StatsAndAchievements = KFSteamStatsAndAchievements(PlayerController(Killer).SteamStatsAndAchievements); StatsAndAchievements = KFSteamStatsAndAchievements(PlayerController(Killer).SteamStatsAndAchievements);
if(StatsAndAchievements != none){ if(StatsAndAchievements != none){
if(KilledPawn.IsA('NiceZombieStalker') || KilledPawn.IsA('MeanZombieStalker')){ if(KilledPawn.IsA('NiceZombieStalker') || KilledPawn.IsA('MeanZombieStalker')){

View File

@ -44,6 +44,9 @@ struct InvincExtentions{
}; };
var array<InvincExtentions> zedInvExtList; var array<InvincExtentions> zedInvExtList;
var int headshotStack; var int headshotStack;
var float remainingFCArmor;
var float remainingFCTime;
var float brutalCranageTimer;
replication{ replication{
reliable if(Role == ROLE_Authority) reliable if(Role == ROLE_Authority)
headshotStack, hmgShieldLevel, forcedZedTimeCountDown, maniacTimeout, invincibilityTimer, safeMeleeMisses, ffScale, headshotStack, hmgShieldLevel, forcedZedTimeCountDown, maniacTimeout, invincibilityTimer, safeMeleeMisses, ffScale,
@ -225,6 +228,31 @@ simulated function Tick(float deltaTime){
local NicePlayerController nicePlayer; local NicePlayerController nicePlayer;
nicePlayer = NicePlayerController(Controller); nicePlayer = NicePlayerController(Controller);
if(Role == Role_AUTHORITY){ if(Role == Role_AUTHORITY){
// Brutal carnage
if (brutalCranageTimer > 0)
{
brutalCranageTimer -= deltaTime;
if (brutalCranageTimer <= 0)
{
if(nicePlayer != none && nicePlayer.abilityManager != none)
{
nicePlayer.abilityManager.SetAbilityState(1, ASTATE_COOLDOWN);
}
}
}
// Full counter remainingFCTime
if (remainingFCTime > 0)
{
remainingFCTime -= deltaTime;
if (remainingFCTime <= 0)
{
remainingFCArmor = 0;
if(nicePlayer != none && nicePlayer.abilityManager != none)
{
nicePlayer.abilityManager.SetAbilityState(0, ASTATE_COOLDOWN);
}
}
}
// Calibration // Calibration
if( currentCalibrationState == CALSTATE_ACTIVE if( currentCalibrationState == CALSTATE_ACTIVE
&& calibrationRemainingTime > 0.0){ && calibrationRemainingTime > 0.0){
@ -663,10 +691,10 @@ simulated function ModifyVelocity(float DeltaTime, vector OldVelocity){
MovementMod *= TraderSpeedBoost; MovementMod *= TraderSpeedBoost;
if(Health < HealthMax && medicAdrenaliteTime > 0){ if(Health < HealthMax && medicAdrenaliteTime > 0){
// Calulate boos from adrenaline // Calulate boos from adrenaline
adrSpeedBonus = Health * (1 - class'NiceSkillMedicAdrenalineShot'.default.speedBoost) + adrSpeedBonus = Health * (1 - class'NiceSkillCommandoAdrenalineShot'.default.speedBoost) +
(100 * class'NiceSkillMedicAdrenalineShot'.default.speedBoost - class'NiceSkillMedicAdrenalineShot'.default.minHealth); (100 * class'NiceSkillCommandoAdrenalineShot'.default.speedBoost - class'NiceSkillCommandoAdrenalineShot'.default.minHealth);
adrSpeedBonus /= (100 - class'NiceSkillMedicAdrenalineShot'.default.minHealth); adrSpeedBonus /= (100 - class'NiceSkillCommandoAdrenalineShot'.default.minHealth);
adrSpeedBonus = FMin(adrSpeedBonus, class'NiceSkillMedicAdrenalineShot'.default.speedBoost); adrSpeedBonus = FMin(adrSpeedBonus, class'NiceSkillCommandoAdrenalineShot'.default.speedBoost);
adrSpeedBonus = FMax(adrSpeedBonus, 1.0); adrSpeedBonus = FMax(adrSpeedBonus, 1.0);
MovementMod *= adrSpeedBonus; MovementMod *= adrSpeedBonus;
} }
@ -690,6 +718,7 @@ function getFreeJacket(){
} }
} }
simulated function TakeDamage(int Damage, Pawn InstigatedBy, Vector Hitlocation, Vector Momentum, class<DamageType> damageType, optional int HitIndex){ simulated function TakeDamage(int Damage, Pawn InstigatedBy, Vector Hitlocation, Vector Momentum, class<DamageType> damageType, optional int HitIndex){
local float FCArmorAbsorb;
local int needArmor; local int needArmor;
local int healAmount; local int healAmount;
local float healPotency; local float healPotency;
@ -708,35 +737,33 @@ simulated function TakeDamage(int Damage, Pawn InstigatedBy, Vector Hitlocation,
} }
// Adrenaline damage decrease // Adrenaline damage decrease
if(medicAdrenaliteTime > 0){ if(medicAdrenaliteTime > 0){
adrResistance = Health * (1 - class'NiceSkillMedicAdrenalineShot'.default.resistBoost) + adrResistance = Health * (1 - class'NiceSkillCommandoAdrenalineShot'.default.resistBoost) +
(100 * class'NiceSkillMedicAdrenalineShot'.default.resistBoost - class'NiceSkillMedicAdrenalineShot'.default.minHealth); (100 * class'NiceSkillCommandoAdrenalineShot'.default.resistBoost - class'NiceSkillCommandoAdrenalineShot'.default.minHealth);
adrResistance /= (100 - class'NiceSkillMedicAdrenalineShot'.default.minHealth); adrResistance /= (100 - class'NiceSkillCommandoAdrenalineShot'.default.minHealth);
adrResistance = FMin(adrResistance, class'NiceSkillMedicAdrenalineShot'.default.resistBoost); adrResistance = FMin(adrResistance, class'NiceSkillCommandoAdrenalineShot'.default.resistBoost);
adrResistance = FMax(adrResistance, 1.0); adrResistance = FMax(adrResistance, 1.0);
Damage *= adrResistance; Damage *= adrResistance;
} }
if(nicePlayer != none && nicePlayer.IsZedTimeActive() if(nicePlayer != none && nicePlayer.IsZedTimeActive()
&& class'NiceVeterancyTypes'.static.HasSkill(nicePlayer, class'NiceSkillZerkZEDUnbreakable')) && class'NiceVeterancyTypes'.static.HasSkill(nicePlayer, class'NiceSkillZerkZEDUnbreakable'))
return; return;
if(hmgShieldLevel > 0 && class'NiceVeterancyTypes'.static.HasSkill(nicePlayer, class'NiceSkillEnforcerFullCounter')){
if(Damage < 20 && InstigatedBy.default.HealthMax < 1500){
Damage *= class'NiceSkillEnforcerFullCounter'.default.damageReduction;
hmgShieldLevel --;
}
else{
if(hmgShieldLevel == class'NiceSkillEnforcerFullCounter'.default.layersAmount)
Damage *= class'NiceSkillEnforcerFullCounter'.default.damageReduction * float(hmgShieldLevel) /
float(class'NiceSkillEnforcerFullCounter'.default.layersAmount);
hmgShieldLevel = 0;
}
}
lastHMGShieldUpdateTime = Level.TimeSeconds; lastHMGShieldUpdateTime = Level.TimeSeconds;
if(damageType != none && class<NiceDamTypeDrug>(damageType) == none){ if(damageType != none && class<NiceDamTypeDrug>(damageType) == none){
bOldArmorStops = damageType.default.bArmorStops; bOldArmorStops = damageType.default.bArmorStops;
if(class'NiceVeterancyTypes'.static.HasSkill(nicePlayer, class'NiceSkillHeavyCoating')) if(class'NiceVeterancyTypes'.static.HasSkill(nicePlayer, class'NiceSkillEnforcerCoating'))
damageType.default.bArmorStops = true; damageType.default.bArmorStops = true;
} }
lastExplosionDistance = 0.0; // hack, but scrn fucks with usotherwise lastExplosionDistance = 0.0; // hack, but scrn fucks with usotherwise
if (remainingFCArmor > 0 && remainingFCTime > 0)
{
FCArmorAbsorb = FMin(Damage, remainingFCArmor);
Damage -= FCArmorAbsorb;
remainingFCArmor -= FCArmorAbsorb;
if(remainingFCArmor <= 0 && nicePlayer != none && nicePlayer.abilityManager != none)
{
nicePlayer.abilityManager.SetAbilityState(0, ASTATE_COOLDOWN);
}
}
super.TakeDamage(Damage, InstigatedBy, hitLocation, Momentum, damageType, HitIndex); super.TakeDamage(Damage, InstigatedBy, hitLocation, Momentum, damageType, HitIndex);
// Commando's zed time // Commando's zed time
if( forcedZedTimeCountDown <= 0.0 if( forcedZedTimeCountDown <= 0.0
@ -783,11 +810,6 @@ function Timer(){
} }
SetAmmoStatus(); SetAmmoStatus();
ApplyWeaponFlashlight(true); ApplyWeaponFlashlight(true);
// Regenerate HMG's full counter shield
if(hmgShieldLevel < class'NiceSkillEnforcerFullCounter'.default.layersAmount && Level.TimeSeconds - lastHMGShieldUpdateTime > class'NiceSkillEnforcerFullCounter'.default.coolDown){
lastHMGShieldUpdateTime = Level.TimeSeconds;
hmgShieldLevel ++;
}
} }
simulated function Fire(optional float F){ simulated function Fire(optional float F){
local bool bRecManualReload; local bool bRecManualReload;

View File

@ -186,6 +186,7 @@ simulated function PostBeginPlay(){
class'NicePack.NiceSCARMK17Pickup'.default.VariantClasses[class'NicePack.NiceSCARMK17Pickup'.default.VariantClasses.length] = class'NicePack.SkinCamoSCARMK17Pickup'; class'NicePack.NiceSCARMK17Pickup'.default.VariantClasses[class'NicePack.NiceSCARMK17Pickup'.default.VariantClasses.length] = class'NicePack.SkinCamoSCARMK17Pickup';
// Abilities // Abilities
class'NiceAbilityManager'.default.events.static.AddAdapter(class'NiceSharpshooterAbilitiesAdapter', level); class'NiceAbilityManager'.default.events.static.AddAdapter(class'NiceSharpshooterAbilitiesAdapter', level);
class'NiceAbilityManager'.default.events.static.AddAdapter(class'NiceEnforcerAbilitiesAdapter', level);
SetTimer(0.25, true); SetTimer(0.25, true);
if(Role < ROLE_Authority) if(Role < ROLE_Authority)
return; return;
@ -761,9 +762,6 @@ function WaveStart(){
nicePawn.getFreeJacket(); nicePawn.getFreeJacket();
nicePawn.bReactiveArmorUsed = false; nicePawn.bReactiveArmorUsed = false;
} }
// Update HMG's 'Full counter' level
if(nicePawn != none)
nicePawn.hmgShieldLevel = class'NiceSkillEnforcerFullCounter'.default.layersAmount;
} }
} }
if(KFGameType(Level.Game).WaveNum == KFGameType(Level.Game).FinalWave && !bAppliedPlayersMult){ if(KFGameType(Level.Game).WaveNum == KFGameType(Level.Game).FinalWave && !bAppliedPlayersMult){

View File

@ -0,0 +1,17 @@
class NiceAvoidMarkerCarnage extends NiceAvoidMarker;
var float healthLevel;
function bool RelevantTo(Pawn P){
local NiceMonster niceZed;
niceZed = NiceMonster(P);
if (niceZed != none && niceZed.default.health <= healthLevel)
{
return true;
}
return false;
}
defaultproperties
{
lifespan = 2.5
}

View File

@ -0,0 +1,93 @@
//==============================================================================
// NicePack / NiceSharpshooterAbilitiesAdapter
//==============================================================================
// Temporary stand-in for future functionality.
// Use this class to catch events from sharpshooter players' abilities.
//==============================================================================
// 'Nice pack' source
// Do whatever the fuck you want with it
// Author: dkanus
// E-mail: dkanus@gmail.com
//==============================================================================
class NiceEnforcerAbilitiesAdapter extends NiceAbilitiesAdapter;
static function AbilityActivated( string abilityID,
NicePlayerController relatedPlayer){
local NiceHumanPawn nicePawn;
local NiceMonster victim;
if(relatedPlayer == none) return;
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
if(nicePawn == none)
return;
if(abilityID == "fullcounter"){
nicePawn.remainingFCArmor = 100.0;
nicePawn.remainingFCTime = 1.0;
}
if(abilityID == "carnage"){
nicePawn.brutalCranageTimer = 10.0;
}
if(abilityID == class'NiceSkillEnforcerStuporA'.default.abilityID){
relatedPlayer.abilityManager.SetAbilityState(1, ASTATE_COOLDOWN);
foreach relatedPlayer.CollidingActors(class'NiceMonster', victim, class'NicePack.NiceSkillEnforcerStuporA'.default.radius, relatedPlayer.pawn.location)
{
if (victim == none) continue;
victim.DoRightPainReaction(class'NicePack.NiceSkillEnforcerStuporA'.default.painScore,
relatedPlayer.pawn, victim.location, Vect(0,0,0), none, 0.0,
KFPlayerReplicationInfo(relatedPlayer.PlayerReplicationInfo));
}
}
}/*
static function AbilityAdded( string abilityID,
NicePlayerController relatedPlayer){
local NiceHumanPawn nicePawn;
if(relatedPlayer == none) return;
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
if(nicePawn == none)
return;
if(abilityID == "Calibration"){
nicePawn.currentCalibrationState = CALSTATE_FINISHED;
nicePawn.calibrationScore = 3;
}
}
static function AbilityRemoved( string abilityID,
NicePlayerController relatedPlayer){
local NiceHumanPawn nicePawn;
if(relatedPlayer == none) return;
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
if(nicePawn == none)
return;
if(abilityID == "Calibration")
nicePawn.currentCalibrationState = CALSTATE_NOABILITY;
if(abilityID == class'NiceSkillSharpshooterGunslingerA'.default.abilityID){
nicePawn.gunslingerTimer = 0.0;
}
}
static function ModAbilityCooldown( string abilityID,
NicePlayerController relatedPlayer,
out float cooldown){
local NiceHumanPawn nicePawn;
if(relatedPlayer == none) return;
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
if( abilityID != class'NiceSkillSharpshooterGunslingerA'.default.abilityID
&& abilityID != class'NiceSkillSharpshooterReaperA'.default.abilityID)
return;
switch(nicePawn.calibrationScore){
case 2:
cooldown *= 0.85;
break;
case 3:
cooldown *= 0.7;
break;
case 4:
cooldown *= 0.5;
break;
case 5:
cooldown *= 0.25;
break;
}
// Reduce calibration score
if(nicePawn.calibrationScore > 3)
nicePawn.calibrationScore -= 1;
}*/
defaultproperties
{
}

View File

@ -46,7 +46,7 @@ static function float AddExtraAmmoFor(KFPlayerReplicationInfo KFPRI, Class<Ammun
local float bonusNades; local float bonusNades;
// Default bonus // Default bonus
bonusNades = 2; bonusNades = 2;
if(AmmoType == class'NicePack.NiceCryoNade' || AmmoType == class'NicePack.NiceNailNade') if(AmmoType == class'FragAmmo')
return 1.0 + 0.2 * bonusNades; return 1.0 + 0.2 * bonusNades;
return 1.0; return 1.0;
} }
@ -56,11 +56,11 @@ static function int ReduceDamage(KFPlayerReplicationInfo KFPRI, KFPawn Injured,
InDamage *= (1 - class'NiceSkillEnforcerDetermination'.default.addedResist); InDamage *= (1 - class'NiceSkillEnforcerDetermination'.default.addedResist);
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerUnshakable')) if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerUnshakable'))
InDamage *= (1 - class'NiceSkillEnforcerUnshakable'.default.skillResist); InDamage *= (1 - class'NiceSkillEnforcerUnshakable'.default.skillResist);
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillHeavyCoating') && Injured.ShieldStrength > 0){ if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerCoating') && Injured.ShieldStrength > 0){
if( class<KFWeaponDamageType>(DmgType) != none if( class<KFWeaponDamageType>(DmgType) != none
&& ((class<KFWeaponDamageType>(DmgType).default.bDealBurningDamage && KFMonster(Instigator) != none) && ((class<KFWeaponDamageType>(DmgType).default.bDealBurningDamage && KFMonster(Instigator) != none)
|| DmgType == class'NiceZombieTeslaHusk'.default.MyDamageType) ) || DmgType == class'NiceZombieTeslaHusk'.default.MyDamageType) )
InDamage *= (1 - class'NiceSkillHeavyCoating'.default.huskResist); InDamage *= (1 - class'NiceSkillEnforcerCoating'.default.huskResist);
} }
return InDamage; return InDamage;
} }
@ -123,16 +123,32 @@ static function float SlowingModifier(KFPlayerReplicationInfo KFPRI){
static function string GetCustomLevelInfo(byte Level){ static function string GetCustomLevelInfo(byte Level){
return default.CustomLevelInfo; return default.CustomLevelInfo;
} }
static function SetupAbilities(KFPlayerReplicationInfo KFPRI){
local NicePlayerController nicePlayer;
local NiceAbilityManager.NiceAbilityDescription fullcounter;
if(KFPRI != none)
nicePlayer = NicePlayerController(KFPRI.Owner);
if(nicePlayer == none || nicePlayer.abilityManager == none)
return;
fullcounter.ID = "fullcounter";
fullcounter.icon = Texture'NicePackT.HudCounter.fullCounter';
fullcounter.cooldownLength = 30.0;
fullcounter.canBeCancelled = false;
nicePlayer.abilityManager.AddAbility(fullcounter);
}
defaultproperties defaultproperties
{ {
bNewTypePerk=True bNewTypePerk=True
SkillGroupA(0)=Class'NicePack.NiceSkillEnforcerUnstoppable' SkillGroupA(0)=Class'NicePack.NiceSkillEnforcerUnstoppable'
SkillGroupA(1)=Class'NicePack.NiceSkillEnforcerBombard' SkillGroupA(1)=Class'NicePack.NiceSkillEnforcerBombard'
SkillGroupA(2)=Class'NicePack.NiceSkillEnforcerFullCounter' SkillGroupA(2)=Class'NicePack.NiceSkillEnforcerCoating'
SkillGroupA(3)=Class'NicePack.NiceSkillEnforcerStuporA'
SkillGroupA(4)=Class'NicePack.NiceSkillEnforcerZEDBarrage' SkillGroupA(4)=Class'NicePack.NiceSkillEnforcerZEDBarrage'
SkillGroupB(0)=Class'NicePack.NiceSkillEnforcerUnshakable' SkillGroupB(0)=Class'NicePack.NiceSkillEnforcerUnshakable'
SkillGroupB(1)=Class'NicePack.NiceSkillEnforcerMultitasker' SkillGroupB(1)=Class'NicePack.NiceSkillEnforcerMultitasker'
SkillGroupB(2)=Class'NicePack.NiceSkillEnforcerDetermination' SkillGroupB(2)=Class'NicePack.NiceSkillEnforcerDetermination'
SkillGroupB(3)=Class'NicePack.NiceSkillEnforcerBrutalCarnageA'
SkillGroupB(4)=Class'NicePack.NiceSkillEnforcerZEDJuggernaut' SkillGroupB(4)=Class'NicePack.NiceSkillEnforcerZEDJuggernaut'
progressArray0(0)=100 progressArray0(0)=100
progressArray0(1)=1000 progressArray0(1)=1000

View File

@ -0,0 +1,30 @@
class NiceSkillEnforcerBrutalCarnageA extends NiceSkill
abstract;
var string abilityID;
var float coolDown;
var float avoidRadius;
function static SkillSelected(NicePlayerController nicePlayer){
local NiceAbilityManager.NiceAbilityDescription carnage;
if(nicePlayer == none) return;
if(nicePlayer.abilityManager == none) return;
carnage.ID = default.abilityID;
carnage.icon = Texture'NicePackT.HudCounter.demo';
carnage.cooldownLength = default.cooldown;
carnage.canBeCancelled = false;
nicePlayer.abilityManager.AddAbility(carnage);
}
function static SkillDeSelected(NicePlayerController nicePlayer){
if(nicePlayer == none) return;
if(nicePlayer.abilityManager == none) return;
nicePlayer.abilityManager.RemoveAbility(default.abilityID);
}
defaultproperties
{
abilityID="carnage"
cooldown=60.000000
avoidRadius=600.0
SkillName="Brutal carnage"
SkillEffects="Every zed killed withing next 10 seconds will cause other zeds to fear the killspot for 2.5 seconds."
}

View File

@ -0,0 +1,9 @@
class NiceSkillEnforcerCoating extends NiceSkill
abstract;
var float huskResist;
defaultproperties
{
huskResist=1.000000
SkillName="Coating"
SkillEffects="You get resistance against fire damage when you wear armor. Strength of resistance is proportional to the amount of armor, up to a full immunity."
}

View File

@ -0,0 +1,32 @@
class NiceSkillEnforcerStuporA extends NiceSkill
abstract;
var string abilityID;
var float coolDown;
var float radius;
var float painScore;
function static SkillSelected(NicePlayerController nicePlayer){
local NiceAbilityManager.NiceAbilityDescription stupor;
if(nicePlayer == none) return;
if(nicePlayer.abilityManager == none) return;
stupor.ID = default.abilityID;
stupor.icon = Texture'NicePackT.HudCounter.demo';
stupor.cooldownLength = default.cooldown;
stupor.canBeCancelled = false;
nicePlayer.abilityManager.AddAbility(stupor);
}
function static SkillDeSelected(NicePlayerController nicePlayer){
if(nicePlayer == none) return;
if(nicePlayer.abilityManager == none) return;
nicePlayer.abilityManager.RemoveAbility(default.abilityID);
}
defaultproperties
{
abilityID="stupor"
cooldown=30.000000
radius=800.000000 // ~16 meters, I think
painScore=600.0
SkillName="Stupor"
SkillEffects="Stun or flinch small zeds in 16 meter radius around you."
}

View File

@ -1,43 +0,0 @@
class NiceSkillEnforcerFullCounter extends NiceSkill
abstract;
var int layersAmount;
var float coolDown;
var float damageReduction;
var float damageReductionWeak;
function static SkillSelected(NicePlayerController nicePlayer){
local NicePack niceMutator;
local NiceHumanPawn nicePawn;
super.SkillSelected(nicePlayer);
niceMutator = class'NicePack'.static.Myself(nicePlayer.Level);
if(nicePlayer != none)
nicePawn = NiceHumanPawn(nicePlayer.pawn);
if(nicePawn != none)
nicePawn.hmgShieldLevel = default.layersAmount;
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY)
return;
niceMutator.AddCounter("npHMGFullCounter", Texture'NicePackT.HudCounter.fullCounter', true, default.class);
}
function static SkillDeSelected(NicePlayerController nicePlayer){
local NicePack niceMutator;
super.SkillDeSelected(nicePlayer);
niceMutator = class'NicePack'.static.Myself(nicePlayer.Level);
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY)
return;
niceMutator.RemoveCounter("npHMGFullCounter");
}
function static int UpdateCounterValue(string counterName, NicePlayerController nicePlayer){
local NiceHumanPawn nicePawn;
if(nicePlayer == none || counterName != "npHMGFullCounter")
return 0;
nicePawn = NiceHumanPawn(nicePlayer.pawn);
if(nicePawn == none)
return 0;
return nicePawn.hmgShieldLevel;
}
defaultproperties
{
layersAmount=5
cooldown=15.000000
SkillName="Full counter"
SkillEffects="Gives you 5 protection layers, each of which can block a weak hit. One layer restores 15 seconds after you've been hit. Can't withstand strong attacks or attacks of huge enough zeds."
}