Change Enforcer's skills for patch 0.2.70
This commit is contained in:
parent
5ceb49b2c3
commit
e7d1c539e8
@ -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')){
|
||||||
|
@ -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;
|
||||||
|
@ -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){
|
||||||
|
17
sources/Perks/Enforcer/NiceAvoidMarkerCarnage.uc
Normal file
17
sources/Perks/Enforcer/NiceAvoidMarkerCarnage.uc
Normal 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
|
||||||
|
}
|
93
sources/Perks/Enforcer/NiceEnforcerAbilitiesAdapter.uc
Normal file
93
sources/Perks/Enforcer/NiceEnforcerAbilitiesAdapter.uc
Normal 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
|
||||||
|
{
|
||||||
|
}
|
@ -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
|
||||||
|
@ -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."
|
||||||
|
}
|
@ -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."
|
||||||
|
}
|
32
sources/Perks/Enforcer/Skills/NiceSkillEnforcerStuporA.uc
Normal file
32
sources/Perks/Enforcer/Skills/NiceSkillEnforcerStuporA.uc
Normal 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."
|
||||||
|
}
|
@ -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."
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user