• Please make sure you are familiar with the forum rules. You can find them here: https://forums.tripwireinteractive.com/index.php?threads/forum-rules.2334636/

Code Mutator Editing

Snebbers

Member
Jul 27, 2011
23
0
Okay I require a bit of help with compiling if somebody could be gracious enough to lend me a hand (considering that I am very new to coding with Unreal (If anything I can do a bit of HTML and that is it....))

I have started editing Custom ServerPerksV4 made by Marco. What I wanted to do was edit the XP requirements, damage boosts, discounts, etc, etc.

To begin with I started editing SRVetBezerker.uc so I could run some tests and see the effects of editing on the perk during play.

Here is the file supplied as default when downloaded
Code:
class SRVetBerserker extends SRVeterancyTypes
    abstract;

static function int GetPerkProgressInt( ClientPerkRepLink StatOther, out int FinalInt, byte CurLevel, byte ReqNum )
{
    switch( CurLevel )
    {
    case 0:
        FinalInt = 5000;
        break;
    case 1:
        FinalInt = 25000;
        break;
    case 2:
        FinalInt = 100000;
        break;
    case 3:
        FinalInt = 500000;
        break;
    case 4:
        FinalInt = 1500000;
        break;
    case 5:
        FinalInt = 3500000;
        break;
    case 6:
        FinalInt = 5500000;
        break;
    default:
        FinalInt = 5500000+GetDoubleScaling(CurLevel,500000);
    }
    return Min(StatOther.RMeleeDamageStat,FinalInt);
}

static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType)
{
    if( class<KFWeaponDamageType>(DmgType) != none && class<KFWeaponDamageType>(DmgType).default.bIsMeleeDamage )
    {
        if ( KFPRI.ClientVeteranSkillLevel == 0 )
            return float(InDamage) * 1.10;
        if( KFPRI.ClientVeteranSkillLevel>6 )
            return float(InDamage) * (1.7 + (0.05 * KFPRI.ClientVeteranSkillLevel));

        // Up to 100% increase in Melee Damage
        return float(InDamage) * (1.0 + (0.20 * float(Min(KFPRI.ClientVeteranSkillLevel, 5))));
    }
    return InDamage;
}

static function float GetFireSpeedMod(KFPlayerReplicationInfo KFPRI, Weapon Other)
{
    if ( KFMeleeGun(Other) != none )
    {
        switch ( KFPRI.ClientVeteranSkillLevel )
        {
            case 1:
                return 1.05;
            case 2:
            case 3:
                return 1.10;
            case 4:
                return 1.15;
            case 5:
                return 1.20;
            case 6:
                return 1.25; // 25% increase in wielding Melee Weapon
            default:
                return 0.95+0.05*float(KFPRI.ClientVeteranSkillLevel);
        }
    }

    return 1.0;
}

static function float GetMeleeMovementSpeedModifier(KFPlayerReplicationInfo KFPRI)
{
    if ( KFPRI.ClientVeteranSkillLevel == 0 )
        return 0.0;
    else if ( KFPRI.ClientVeteranSkillLevel == 1 )
        return 0.05;
    else if ( KFPRI.ClientVeteranSkillLevel == 2 )
        return 0.10;
    else if ( KFPRI.ClientVeteranSkillLevel >= 6 )
        return 0.25; // Level 6 - 25% increase in movement speed while wielding Melee Weapon

    return 0.15;
}

static function int ReduceDamage(KFPlayerReplicationInfo KFPRI, KFPawn Injured, KFMonster DamageTaker, int InDamage, class<DamageType> DmgType)
{
    if ( DmgType == class'DamTypeVomit' )
    {
        switch ( KFPRI.ClientVeteranSkillLevel )
        {
            case 0:
                return float(InDamage) * 0.90;
            case 1:
                return float(InDamage) * 0.75;
            case 2:
                return float(InDamage) * 0.65;
            case 3:
                return float(InDamage) * 0.50;
            case 4:
                return float(InDamage) * 0.35;
            case 5:
                return float(InDamage) * 0.25;
            default:
                return float(InDamage) * 0.20; // 80% reduced Bloat Bile damage
        }
    }

    return float(InDamage) * 1.f - FMax(float(KFPRI.ClientVeteranSkillLevel)*0.05f,0.35f);
}

static function bool CanBeGrabbed(KFPlayerReplicationInfo KFPRI, KFMonster Other)
{
    return !Other.IsA('ZombieClot');
}

// Set number times Zed Time can be extended
static function int ZedTimeExtensions(KFPlayerReplicationInfo KFPRI)
{
    return Min(KFPRI.ClientVeteranSkillLevel, 4);
}

// Change the cost of particular items
static function float GetCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item)
{
    if ( Item == class'ChainsawPickup' || Item == class'KatanaPickup')
        return FMax(0.9 - (0.10 * float(KFPRI.ClientVeteranSkillLevel)),0.1); // Up to 70% discount on Melee Weapons
    return 1.0;
}

// Give Extra Items as default
static function AddDefaultInventory(KFPlayerReplicationInfo KFPRI, Pawn P)
{
    // If Level 5 or 6, give them Chainsaw
    if ( KFPRI.ClientVeteranSkillLevel >= 5 )
        KFHumanPawn(P).CreateInventoryVeterancy("KFMod.Chainsaw", GetCostScaling(KFPRI, class'ChainsawPickup'));

    // If Level 6, give them Body Armor
    if ( KFPRI.ClientVeteranSkillLevel >= 6 )
        P.ShieldStrength = 100;
}

static function string GetCustomLevelInfo( byte Level )
{
    local string S;

    S = Default.CustomLevelInfo;
    ReplaceText(S,"%s",GetPercentStr(0.05 * float(Level)-0.05));
    ReplaceText(S,"%d",GetPercentStr(0.1+FMin(0.1 * float(Level),0.8f)));
    ReplaceText(S,"%r",GetPercentStr(0.7 + 0.05*float(Level)));
    ReplaceText(S,"%l",GetPercentStr(FMin(0.05*float(Level),0.65f)));
    return S;
}

defaultproperties
{
    PerkIndex=4

    OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Berserker'
    OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Berserker_Gold'
    VeterancyName="Berserker"
    Requirements(0)="Deal %x damage with melee weapons"

    LevelEffects(0)="10% extra melee damage|10% less damage from Bloat Bile|10% discount on Katana/Chainsaw|Can't be grabbed by Clots"
    LevelEffects(1)="20% extra melee damage|5% faster melee attacks|15% faster melee movement|25% less damage from Bloat Bile|5% resistance to all damage|20% discount on Katana/Chainsaw|Can't be grabbed by Clots"
    LevelEffects(2)="40% extra melee damage|10% faster melee attacks|15% faster melee movement|35% less damage from Bloat Bile|10% resistance to all damage|30% discount on Katana/Chainsaw|Can't be grabbed by Clots|Zed-Time can be extended by killing an enemy while in slow motion"
    LevelEffects(3)="60% extra melee damage|10% faster melee attacks|15% faster melee movement|50% less damage from Bloat Bile|15% resistance to all damage|40% discount on Katana/Chainsaw|Can't be grabbed by Clots|Up to 2 Zed-Time Extensions"
    LevelEffects(4)="80% extra melee damage|15% faster melee attacks|15% faster melee movement|65% less damage from Bloat Bile|15% resistance to all damage|50% discount on Katana/Chainsaw|Can't be grabbed by Clots|Up to 3 Zed-Time Extensions"
    LevelEffects(5)="100% extra melee damage|20% faster melee attacks|15% faster melee movement|75% less damage from Bloat Bile|20% resistance to all damage|60% discount on Katana/Chainsaw|Spawn with a Chainsaw|Can't be grabbed by Clots|Up to 4 Zed-Time Extensions"
    LevelEffects(6)="100% extra melee damage|25% faster melee attacks|20% faster melee movement|80% less damage from Bloat Bile|25% resistance to all damage|70% discount on Katana/Chainsaw|Spawn with a Chainsaw and Body Armor|Can't be grabbed by Clots|Up to 4 Zed-Time Extensions"
    CustomLevelInfo="%r extra melee damage|%s faster melee attacks|20% faster melee movement|80% less damage from Bloat Bile|%l resistance to all damage|%d discount on Katana/Chainsaw|Spawn with a Chainsaw and Body Armor|Can't be grabbed by Clots|Up to 4 Zed-Time Extensions"
}

And here is what I have edited it to
Code:
class SRVetBerserker extends SRVeterancyTypes
    abstract;

static function int GetPerkProgressInt( ClientPerkRepLink StatOther, out int FinalInt, byte CurLevel, byte ReqNum )
{
    switch( CurLevel )
    {
    case 0:
        FinalInt = 1000;
        break;
    case 1:
        FinalInt = 5000;
        break;
    case 2:
        FinalInt = 30000;
        break;
    case 3:
        FinalInt = 75000;
        break;
    case 4:
        FinalInt = 150000;
        break;
    case 5:
        FinalInt = 350000;
        break;
    case 6:
        FinalInt = 650000;
        break;
    case 7:
        FinalInt = 1000000;
        break;
    case 8:
        FinalInt = 1450000;
        break;
    case 9:
        FinalInt = 1900000;
        break;
    case 10:
        FinalInt = 2450000;
        break;
    case 11:
        FinalInt = 3000000;
        break;
    case 12:
        FinalInt = 3600000;
        break;
    case 13:
        FinalInt = 4200000;
        break;
    case 14:
        FinalInt = 4800000;
        break;
    case 15:
        FinalInt = 5500000;
        break;
    case 16:
        FinalInt = 6200000;
        break;
    case 17:
        FinalInt = 7000000;
        break;
    case 18:
        FinalInt = 7800000;
        break;
    case 19:
        FinalInt = 8600000;
        break;
    case 20:
        FinalInt = 9500000;
        break;
    default:
        FinalInt = 9500000+GetDoubleScaling(CurLevel,500000);
    }
    return Min(StatOther.RMeleeDamageStat,FinalInt);
}

static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType)
{
    if( class<KFWeaponDamageType>(DmgType) != none && class<KFWeaponDamageType>(DmgType).default.bIsMeleeDamage )
    {
        if ( KFPRI.ClientVeteranSkillLevel == 0 )
            return float(InDamage) * 1.10;
        if( KFPRI.ClientVeteranSkillLevel>6 )
            return float(InDamage) * (1.7 + (0.05 * KFPRI.ClientVeteranSkillLevel));

        // Up to 100% increase in Melee Damage
        return float(InDamage) * (1.0 + (0.20 * float(Min(KFPRI.ClientVeteranSkillLevel, 5))));
    }
    return InDamage;
}

static function float GetFireSpeedMod(KFPlayerReplicationInfo KFPRI, Weapon Other)
{
    if ( KFMeleeGun(Other) != none )
    {
        switch ( KFPRI.ClientVeteranSkillLevel )
        {
            case 1:
                return 1.05;
            case 2:
            case 3:
                return 1.10;
            case 4:
                return 1.15;
            case 5:
                return 1.20;
            case 6:
                return 1.25; // 25% increase in wielding Melee Weapon
            case 7:
                return 1.30;
            case 8:
                return 1.35;
            case 9:
                return 1.40;
            case 10:
                return 1.45;
            case 11:
                return 1.50;
            case 12:
                return 1.55;
            case 13:
                return 1.60;
            case 14:
                return 1.65;
            case 15:
                return 1.70;
            case 16:
                return 1.75;
            case 17:
                return 1.80;
            case 18:
                return 1.85;
            case 19:
                return 1.90;
            case 20:
                return 2.00;
            default:
                return 0.95+0.05*float(KFPRI.ClientVeteranSkillLevel);
        }
    }

    return 1.0;
}

static function float GetMeleeMovementSpeedModifier(KFPlayerReplicationInfo KFPRI)
{
    if ( KFPRI.ClientVeteranSkillLevel == 0 )
        return 0.0;
    else if ( KFPRI.ClientVeteranSkillLevel == 1 )
        return 0.05;
    else if ( KFPRI.ClientVeteranSkillLevel == 2 )
        return 0.10;
    else if ( KFPRI.ClientVeteranSkillLevel >= 6 )
        return 0.25; // Level 6 - 25% increase in movement speed while wielding Melee Weapon
    else if ( KFPRI.ClientVeteranSkillLevel >= 20 )
        return 1.00; // Level 20 - 100% increase in movement speed while wielding Melee Weapon

    return 0.15;
}

static function int ReduceDamage(KFPlayerReplicationInfo KFPRI, KFPawn Injured, KFMonster DamageTaker, int InDamage, class<DamageType> DmgType)
{
    if ( DmgType == class'DamTypeVomit' )
    {
        switch ( KFPRI.ClientVeteranSkillLevel )
        {
            case 0:
                return float(InDamage) * 0.90;
            case 1:
                return float(InDamage) * 0.85;
            case 2:
                return float(InDamage) * 0.80;
            case 3:
                return float(InDamage) * 0.75;
            case 4:
                return float(InDamage) * 0.70;
            case 5:
                return float(InDamage) * 0.65;
            case 6:
                return float(InDamage) * 0.60; // 40% reduced Bloat Bile damage
            case 7:
                return float(InDamage) * 0.55;
            case 8:
                return float(InDamage) * 0.50;
            case 9:
                return float(InDamage) * 0.50;
            case 10:
                return float(InDamage) * 0.45;
            case 11:
                return float(InDamage) * 0.40;
            case 12:
                return float(InDamage) * 0.35;
            case 13:
                return float(InDamage) * 0.30;
            case 14:
                return float(InDamage) * 0.30;
            case 15:
                return float(InDamage) * 0.25;
            case 16:
                return float(InDamage) * 0.25;
            case 17:
                return float(InDamage) * 0.20;
            case 18:
                return float(InDamage) * 0.15;
            case 19:
                return float(InDamage) * 0.10;
            case 20:
                return float(InDamage) * 0.05;
            default:
                return float(InDamage) * 0.00; // 100% reduced Bloat Bile damage
        }
    }

    return float(InDamage) * 1.f - FMax(float(KFPRI.ClientVeteranSkillLevel)*0.05f,0.35f);
}

static function bool CanBeGrabbed(KFPlayerReplicationInfo KFPRI, KFMonster Other)
{
    return !Other.IsA('ZombieClot');
}

// Set number times Zed Time can be extended
static function int ZedTimeExtensions(KFPlayerReplicationInfo KFPRI)
{
    return Min(KFPRI.ClientVeteranSkillLevel, 4);
}

// Change the cost of particular items
static function float GetCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item)
{
    if ( Item == class'ChainsawPickup' || Item == class'KatanaPickup')
        return FMax(0.9 - (0.10 * float(KFPRI.ClientVeteranSkillLevel)),0.1); // Up to 70% discount on Melee Weapons
    return 1.0;
}

// Give Extra Items as default
static function AddDefaultInventory(KFPlayerReplicationInfo KFPRI, Pawn P)
{
    // If Level 6, give them Chainsaw
    if ( KFPRI.ClientVeteranSkillLevel >= 6 )
        KFHumanPawn(P).CreateInventoryVeterancy("KFMod.Chainsaw", GetCostScaling(KFPRI, class'ChainsawPickup'));

    //If Level 10, give them Katana
    if ( KFPRI.ClientVeteranSkillLevel >= 10 )
        KFHumanPawn(P).CreateInventoryVeterancy("KFMod.Katana", GetCostScaling(KFPRI, class'KatanaPickup'));
        
    // If Level 10, give them Body Armor
    if ( KFPRI.ClientVeteranSkillLevel >= 12 )
        P.ShieldStrength = 100;
}

static function string GetCustomLevelInfo( byte Level )
{
    local string S;

    S = Default.CustomLevelInfo;
    ReplaceText(S,"%s",GetPercentStr(0.05 * float(Level)-0.05));
    ReplaceText(S,"%d",GetPercentStr(0.1+FMin(0.1 * float(Level),0.8f)));
    ReplaceText(S,"%r",GetPercentStr(0.7 + 0.05*float(Level)));
    ReplaceText(S,"%l",GetPercentStr(FMin(0.05*float(Level),0.65f)));
    return S;
}

defaultproperties
{
    PerkIndex=4

    OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Berserker'
    OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Berserker_Gold'
    VeterancyName="Berserker"
    Requirements(0)="Deal %x damage with melee weapons"

    LevelEffects(0)="10% extra melee damage|10% less damage from Bloat Bile|10% discount on Katana/Chainsaw|Can't be grabbed by Clots"
    LevelEffects(1)="20% extra melee damage|5% faster melee attacks|15% faster melee movement|25% less damage from Bloat Bile|5% resistance to all damage|20% discount on Katana/Chainsaw|Can't be grabbed by Clots"
    LevelEffects(2)="40% extra melee damage|10% faster melee attacks|15% faster melee movement|35% less damage from Bloat Bile|10% resistance to all damage|30% discount on Katana/Chainsaw|Can't be grabbed by Clots|Zed-Time can be extended by killing an enemy while in slow motion"
    LevelEffects(3)="60% extra melee damage|10% faster melee attacks|15% faster melee movement|50% less damage from Bloat Bile|15% resistance to all damage|40% discount on Katana/Chainsaw|Can't be grabbed by Clots|Up to 2 Zed-Time Extensions"
    LevelEffects(4)="80% extra melee damage|15% faster melee attacks|15% faster melee movement|65% less damage from Bloat Bile|15% resistance to all damage|50% discount on Katana/Chainsaw|Can't be grabbed by Clots|Up to 3 Zed-Time Extensions"
    LevelEffects(5)="100% extra melee damage|20% faster melee attacks|15% faster melee movement|75% less damage from Bloat Bile|20% resistance to all damage|60% discount on Katana/Chainsaw|Spawn with a Chainsaw|Can't be grabbed by Clots|Up to 4 Zed-Time Extensions"
    LevelEffects(6)="100% extra melee damage|25% faster melee attacks|20% faster melee movement|80% less damage from Bloat Bile|25% resistance to all damage|70% discount on Katana/Chainsaw|Spawn with a Chainsaw and Body Armor|Can't be grabbed by Clots|Up to 4 Zed-Time Extensions"
    LevelEffects(7)=""
    LevelEffects(8)=""
    LevelEffects(9)=""
    LevelEffects(10)=""
    LevelEffects(11)=""
    LevelEffects(12)=""
    LevelEffects(13)=""
    LevelEffects(14)=""
    LevelEffects(15)=""
    LevelEffects(16)=""
    LevelEffects(17)=""
    LevelEffects(18)=""
    LevelEffects(19)=""
    LevelEffects(20)=""
    CustomLevelInfo="%r extra melee damage|%s faster melee attacks|20% faster melee movement|80% less damage from Bloat Bile|%l resistance to all damage|%d discount on Katana/Chainsaw|Spawn with a Chainsaw and Body Armor|Can't be grabbed by Clots|Up to 4 Zed-Time Extensions"
}

However when I compile I recieve this error, and I am not entirely sure what it is telling me...

Code:
C:\Program Files (x86)\Steam\steamapps\common\killingfloor\ServerPackagesV4>del
"C:\Program Files (x86)\Steam\steamapps\common\killingfloor\System\ExampleMutato
r.u"
Could Not Find C:\Program Files (x86)\Steam\steamapps\common\killingfloor\System
\ExampleMutator.u

C:\Program Files (x86)\Steam\steamapps\common\killingfloor\ServerPackagesV4>"C:\
Program Files (x86)\Steam\steamapps\common\killingfloor\System\UCC.exe" make
----------------------------Core - Release----------------------------
---------------------------Engine - Release---------------------------
----------------------------Fire - Release----------------------------
---------------------------Editor - Release---------------------------
--------------------------UnrealEd - Release--------------------------
---------------------------IpDrv - Release----------------------------
----------------------------UWeb - Release----------------------------
--------------------------GamePlay - Release--------------------------
-------------------------UnrealGame - Release-------------------------
---------------------------XGame - Release----------------------------
-------------------------XInterface - Release-------------------------
---------------------------XAdmin - Release---------------------------
-------------------------XWebAdmin - Release--------------------------
---------------------------GUI2K4 - Release---------------------------
--------------------------xVoting - Release---------------------------
--------------------------UTV2004c - Release--------------------------
--------------------------UTV2004s - Release--------------------------
-------------------------ROEffects - Release--------------------------
--------------------------ROEngine - Release--------------------------
------------------------ROInterface - Release-------------------------
---------------------------Old2k4 - Release---------------------------
---------------------------KFMod - Release----------------------------
---------------------------KFChar - Release---------------------------
---------------------------KFGui - Release----------------------------
-------------------------GoodKarma - Release--------------------------
-------------------------KFMutators - Release-------------------------
----------------------ServerPackagesV4 - Release----------------------
Analyzing...
Parsing ClientPerkRepLink
Parsing ServerPerksMut
Parsing DatabaseUdpLink
Parsing KFVetEarnedMessageSR
Parsing SRVeterancyTypes
Parsing SRVetBerserker
Parsing SRVetCommando
Parsing SRVetDemolitions
Parsing SRVetFieldMedic
Parsing SRVetFirebug
Parsing SRVetSharpshooter
Parsing SRVetSupportSpec
Parsing KFPCServ
Parsing SRHUDKillingFloor
Parsing ServerStStats
Parsing ServerTempStats
Parsing SRTab_MidGamePerks
Parsing SRTab_MidGameStats
Parsing SRKFTab_BuyMenu
Parsing SRTab_Profile
Parsing SRKFTab_Perks
Parsing SRLobbyFooter
Parsing SRLobbyMenu
Parsing SRGUIBuyMenu
Parsing SRInvasionLoginMenu
Parsing SRProfilePage
Parsing SRKFBuyMenuInvListBox
Parsing SRPerkSelectListBox
Parsing SRBuyMenuSaleListBox
Parsing SRPerkProgressListBox
Parsing SRStatListBox
Parsing SRKFQuickPerkSelect
Parsing SRKFBuyMenuInvList
Parsing SRBuyMenuSaleList
Parsing SRPerkSelectList
Parsing SRPerkProgressList
Parsing SRStatList
Parsing StatsObject
Compiling ClientPerkRepLink
Compiling ServerPerksMut
Compiling DatabaseUdpLink
Compiling KFVetEarnedMessageSR
Compiling SRVeterancyTypes
Compiling SRVetBerserker
Compiling SRVetCommando
Compiling SRVetDemolitions
Compiling SRVetFieldMedic
Compiling SRVetFirebug
Compiling SRVetSharpshooter
Compiling SRVetSupportSpec
Compiling KFPCServ
Compiling SRHUDKillingFloor
Compiling ServerStStats
Compiling ServerTempStats
Compiling SRTab_MidGamePerks
Compiling SRTab_MidGameStats
Compiling SRKFTab_BuyMenu
Compiling SRTab_Profile
Compiling SRKFTab_Perks
Compiling SRLobbyFooter
Compiling SRLobbyMenu
Compiling SRGUIBuyMenu
Compiling SRInvasionLoginMenu
Compiling SRProfilePage
Compiling SRKFBuyMenuInvListBox
Compiling SRPerkSelectListBox
Compiling SRBuyMenuSaleListBox
Compiling SRPerkProgressListBox
Compiling SRStatListBox
Compiling SRKFQuickPerkSelect
Compiling SRKFBuyMenuInvList
Compiling SRBuyMenuSaleList
Compiling SRPerkSelectList
Compiling SRPerkProgressList
Compiling SRStatList
Compiling StatsObject
Importing Defaults for ClientPerkRepLink
Importing Defaults for ServerPerksMut
Importing Defaults for DatabaseUdpLink
Importing Defaults for KFVetEarnedMessageSR
Importing Defaults for SRVeterancyTypes
Importing Defaults for SRVetBerserker
ServerPackagesV4.SRVetBerserker: Out of bound array default property (7/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (8/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (9/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (10/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (11/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (12/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (13/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (14/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (15/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (16/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (17/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (18/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (19/7)
ServerPackagesV4.SRVetBerserker: Out of bound array default property (20/7)
Importing Defaults for SRVetCommando
Importing Defaults for SRVetDemolitions
Importing Defaults for SRVetFieldMedic
Importing Defaults for SRVetFirebug
Importing Defaults for SRVetSharpshooter
Importing Defaults for SRVetSupportSpec
Importing Defaults for KFPCServ
Importing Defaults for SRHUDKillingFloor
Importing Defaults for ServerStStats
Importing Defaults for ServerTempStats
Importing Defaults for SRTab_MidGamePerks
... deferring
Importing Defaults for SRTab_MidGameStats
... deferring
Importing Defaults for SRKFTab_BuyMenu
... deferring
Importing Defaults for SRTab_Profile
... deferring
Importing Defaults for SRKFTab_Perks
... deferring
Importing Defaults for SRLobbyFooter
Importing Defaults for SRLobbyMenu
Importing Defaults for SRGUIBuyMenu
... deferring
Importing Defaults for SRInvasionLoginMenu
Importing Defaults for SRProfilePage
... deferring
Importing Defaults for SRKFBuyMenuInvListBox
Importing Defaults for SRPerkSelectListBox
Importing Defaults for SRBuyMenuSaleListBox
Importing Defaults for SRPerkProgressListBox
Importing Defaults for SRStatListBox
Importing Defaults for SRKFQuickPerkSelect
Importing Defaults for SRKFBuyMenuInvList
Importing Defaults for SRBuyMenuSaleList
Importing Defaults for SRPerkSelectList
Importing Defaults for SRPerkProgressList
Importing Defaults for SRStatList
Importing Defaults for StatsObject
Importing Defaults for SRTab_MidGamePerks
Importing Defaults for SRTab_MidGameStats
Importing Defaults for SRKFTab_BuyMenu
Importing Defaults for SRTab_Profile
Importing Defaults for SRKFTab_Perks
Importing Defaults for SRGUIBuyMenu
Importing Defaults for SRProfilePage
Compile aborted due to errors.
Failure - 14 error(s), 0 warning(s)

C:\Program Files (x86)\Steam\steamapps\common\killingfloor\ServerPackagesV4>del
"C:\Program Files (x86)\Steam\steamapps\common\killingfloor\System\steam_appid.t
xt"

C:\Program Files (x86)\Steam\steamapps\common\killingfloor\ServerPackagesV4>paus
e
Press any key to continue . . .

Could somebody please lend me a hand or two?
 
The problem is that you do not need to have
Code:
LevelEffects(7)=""
LevelEffects(8)=""
LevelEffects(9)=""
LevelEffects(10)=""
LevelEffects(11)=""
LevelEffects(12)=""
LevelEffects(13)=""
LevelEffects(14)=""
LevelEffects(15)=""
LevelEffects(16)=""
LevelEffects(17)=""
LevelEffects(18)=""
LevelEffects(19)=""
LevelEffects(20)=""
This part of the code handles the descriptions for levels 7 to 20
Code:
 CustomLevelInfo="%r extra melee damage|%s faster melee attacks|20% faster melee movement|80% less damage from Bloat Bile|%l resistance to all damage|%d discount on Katana/Chainsaw|Spawn with a Chainsaw and Body Armor|Can't be grabbed by Clots|Up to 4 Zed-Time Extensions"
 
Upvote 0
Right your problem is that the way this system works is that it can only handle up to level 6 for the information. There is two options to this:
1.) Use the custom description (which is probably easier BUT may cause problems if you can't figure out the equations) OR
2.) Add a variable that you can override the standard descriptions with a higher amount (which is the route I took and if you want to know more, ask away :))
 
  • Like
Reactions: Snebbers
Upvote 0
Another problem. Unrelated to ServerPerksV4

Another problem. Unrelated to ServerPerksV4

Haha, thanks for your help guys. By the time my post was actually posted on the forums (As it had to go under moderation because I am a new user) I had already solved every problem that I had came across and configured it. I even Decompiled the InformativeScoreboardSP Mutator that works with ServerPerksV4 and edited the perk colours so it matches my perk system and so that the stars don't go off the screen. I have a hunch on how to fix the bug on it-

EDIT: I fixed it already. Nevermind. If someone would like to know how to change InformativeScoreboardSP, so that your killcount, cash amount and time in game stays white, instead of changing to green for example. Just ask me and I'll post it. I'm unsure if the maker of the mutator would like it though.

And Marco, you missed out the part for reduction from All types of damage, so I'll put it here.

Code:
static function int ReduceDamage(KFPlayerReplicationInfo KFPRI, KFPawn Injured, KFMonster DamageTaker, int InDamage, class<DamageType> DmgType)
{
    if ( DmgType == class'DamTypeVomit' )
    {
        switch ( KFPRI.ClientVeteranSkillLevel )
        {
            case 0:
                return float(InDamage) * 0.90;
            case 1:
                return float(InDamage) * 0.75;
            case 2:
                return float(InDamage) * 0.65;
            case 3:
                return float(InDamage) * 0.50;
            case 4:
                return float(InDamage) * 0.35;
            case 5:
                return float(InDamage) * 0.25;
            case 6:
                return float(InDamage) * 0.20; // 80% reduced Bloat Bile damage
            
        }
    }
    switch ( KFPRI.ClientVeteranSkillLevel )
    {
        case 0:
            return float(InDamage) * 1.00;
        case 1:
            return float(InDamage) * 0.95;
        case 2:
            return float(InDamage) * 0.90;
        case 3:
            return float(InDamage) * 0.85;
        case 4:
            return float(InDamage) * 0.80;
        case 5:
            return float(InDamage) * 0.70;
        case 6:
            return float(InDamage) * 0.60; // 40% reduced Damage
    }

    return InDamage;
}

I'd be a lot more impressed, if everything wasn't sitting in the killingfloor folders. So much information is just copied and pasted.
 
Last edited:
Upvote 0
Haha, thanks for your help guys. By the time my post was actually posted on the forums (As it had to go under moderation because I am a new user) I had already solved every problem that I had came across and configured it. I even Decompiled the InformativeScoreboardSP Mutator that works with ServerPerksV4 and edited the perk colours so it matches my perk system and so that the stars don't go off the screen. I have a hunch on how to fix the bug on it-

EDIT: I fixed it already. Nevermind. If someone would like to know how to change InformativeScoreboardSP, so that your killcount, cash amount and time in game stays white, instead of changing to green for example. Just ask me and I'll post it. I'm unsure if the maker of the mutator would like it though.

Hey mate, I am the creator of the InformativeScoreboard mutator. I was told of any bugs or anything so could you show me exactly what the problem is?
 
Upvote 0
Hey mate, I am the creator of the InformativeScoreboard mutator. I was told of any bugs or anything so could you show me exactly what the problem is?

It's easy beans, just change this piece of code

Code:
// draw kills
        if( bDisplayWithKills )
        {
            Canvas.StrLen(KFPlayerReplicationInfo(GRI.PRIArray[i]).Kills, KillWidthX, YL);
            Canvas.SetPos(KillsXPos - 0.5 * KillWidthX, (PlayerBoxSizeY + BoxSpaceY) * i + BoxTextOffsetY);
            Canvas.DrawText(KFPlayerReplicationInfo(GRI.PRIArray[i]).Kills, true);
        }
        
        // draw cash
        Canvas.SetPos(ScoreXPos, (PlayerBoxSizeY + BoxSpaceY)*i + BoxTextOffsetY);
        Canvas.DrawText(int(GRI.PRIArray[i].Score),true);
        
        // Draw time
        PlayerTime = FormatTime(GRI.ElapsedTime - KFPlayerReplicationInfo(GRI.PRIArray[i]).StartTime);
        Canvas.StrLen(PlayerTime, TimeWidthX, YL);
        Canvas.SetPos(TimeXPos - 0.5 * TimeWidthX, (PlayerBoxSizeY + BoxSpaceY) * i + BoxTextOffsetY);
        Canvas.DrawText(PlayerTime, true);

to this

Code:
// draw kills
        if( bDisplayWithKills )
        {
            Canvas.SetDrawColor(255, 255, 255, Canvas.DrawColor.A);
            Canvas.StrLen(KFPlayerReplicationInfo(GRI.PRIArray[i]).Kills, KillWidthX, YL);
            Canvas.SetPos(KillsXPos - 0.5 * KillWidthX, (PlayerBoxSizeY + BoxSpaceY) * i + BoxTextOffsetY);
            Canvas.DrawText(KFPlayerReplicationInfo(GRI.PRIArray[i]).Kills, true);
        }
        
        // draw cash
        Canvas.SetDrawColor(255, 255, 255, Canvas.DrawColor.A);
        Canvas.SetPos(ScoreXPos, (PlayerBoxSizeY + BoxSpaceY)*i + BoxTextOffsetY);
        Canvas.DrawText(int(GRI.PRIArray[i].Score),true);
        
        // Draw time
        Canvas.SetDrawColor(255, 255, 255, Canvas.DrawColor.A);
        PlayerTime = FormatTime(GRI.ElapsedTime - KFPlayerReplicationInfo(GRI.PRIArray[i]).StartTime);
        Canvas.StrLen(PlayerTime, TimeWidthX, YL);
        Canvas.SetPos(TimeXPos - 0.5 * TimeWidthX, (PlayerBoxSizeY + BoxSpaceY) * i + BoxTextOffsetY);
        Canvas.DrawText(PlayerTime, true);

Probably not very tidy, But user end, people don't care as long as it works.
 
Upvote 0
It's easy beans, just change this piece of code

Code:
// draw kills
        if( bDisplayWithKills )
        {
            Canvas.StrLen(KFPlayerReplicationInfo(GRI.PRIArray[i]).Kills, KillWidthX, YL);
            Canvas.SetPos(KillsXPos - 0.5 * KillWidthX, (PlayerBoxSizeY + BoxSpaceY) * i + BoxTextOffsetY);
            Canvas.DrawText(KFPlayerReplicationInfo(GRI.PRIArray[i]).Kills, true);
        }
 
        // draw cash
        Canvas.SetPos(ScoreXPos, (PlayerBoxSizeY + BoxSpaceY)*i + BoxTextOffsetY);
        Canvas.DrawText(int(GRI.PRIArray[i].Score),true);
 
        // Draw time
        PlayerTime = FormatTime(GRI.ElapsedTime - KFPlayerReplicationInfo(GRI.PRIArray[i]).StartTime);
        Canvas.StrLen(PlayerTime, TimeWidthX, YL);
        Canvas.SetPos(TimeXPos - 0.5 * TimeWidthX, (PlayerBoxSizeY + BoxSpaceY) * i + BoxTextOffsetY);
        Canvas.DrawText(PlayerTime, true);

to this

Code:
// draw kills
        if( bDisplayWithKills )
        {
            Canvas.SetDrawColor(255, 255, 255, Canvas.DrawColor.A);
            Canvas.StrLen(KFPlayerReplicationInfo(GRI.PRIArray[i]).Kills, KillWidthX, YL);
            Canvas.SetPos(KillsXPos - 0.5 * KillWidthX, (PlayerBoxSizeY + BoxSpaceY) * i + BoxTextOffsetY);
            Canvas.DrawText(KFPlayerReplicationInfo(GRI.PRIArray[i]).Kills, true);
        }
 
        // draw cash
        Canvas.SetDrawColor(255, 255, 255, Canvas.DrawColor.A);
        Canvas.SetPos(ScoreXPos, (PlayerBoxSizeY + BoxSpaceY)*i + BoxTextOffsetY);
        Canvas.DrawText(int(GRI.PRIArray[i].Score),true);
 
        // Draw time
        Canvas.SetDrawColor(255, 255, 255, Canvas.DrawColor.A);
        PlayerTime = FormatTime(GRI.ElapsedTime - KFPlayerReplicationInfo(GRI.PRIArray[i]).StartTime);
        Canvas.StrLen(PlayerTime, TimeWidthX, YL);
        Canvas.SetPos(TimeXPos - 0.5 * TimeWidthX, (PlayerBoxSizeY + BoxSpaceY) * i + BoxTextOffsetY);
        Canvas.DrawText(PlayerTime, true);

Probably not very tidy, But user end, people don't care as long as it works.
Mate you did not explain to me what the "bug" is? I can't fix something I have no clue about lol.
 
Upvote 0