Exp Multiplier. Leveling multiplier

Exp Multiplier. Leveling multiplier

  • Topic closed
  • You cannot reply to this topic

Exp Multiplier. Leveling multiplier Exp Multiplier. Leveling multiplier The multiplier can be anything. At least 1000 (I checked at 1000 to be sure that I didn’t forget about some parameter of some perk) ) You can even set it to 0 or negative. It will w...

Geekrainian #1

    • Group: Admin
    • Posts: 800

    Posted:

    Exp Multiplier. Leveling multiplier

    The multiplier can be anything. At least 1000 (I checked at 1000 to be sure that I didn’t forget about some parameter of some perk) ) You can even set it to 0 or negative. It will work for many parameters)

    That’s just what I thought I see 2 ways to use this mutator 1. On holidays, give everyone a gift in the form of increased pumping 2. VIP list of players (often these players pay money) and increased quality for them

    I quite like the first method, but not the second. Therefore, those who want a VIP list - here is the link or attach the list yourself:

    class MultipliedExpMut extends Mutator config(MultipliedExpMut);
    var config int nExp;
    var MeXGameRules RulesMod;
    function PostBeginPlay()
    {
        if( RulesMod==None )
            RulesMod = Spawn(Class'MeXGameRules');
        RulesMod.nExp=nExp;
        if(KFGameType(Level.Game)==None) Destroyed();
        class'KFMod.Welder'.default.FireModeClass[0]=Class'MultipliedExpMut.newWeldFire';
        class'KFMod.Welder'.default.FireModeClass[1]=Class'MultipliedExpMut.newUnWeldFire';
        class'KFMod.Syringe'.default.FireModeClass[0]=Class'MultipliedExpMut.newSyringeFire';
        class'KFMod.KrissMAltFire'.default.ProjectileClass=Class'MultipliedExpMut.newKrissMHealingProjectile';
        class'KFMod.M7A3MAltFire'.default.ProjectileClass=Class'MultipliedExpMut.newM7A3MHealinglProjectile';
        class'KFMod.MP5MAltFire'.default.ProjectileClass=Class'MultipliedExpMut.newMP5MHealinglProjectile';
        class'KFMod.MP7MAltFire'.default.ProjectileClass=Class'MultipliedExpMut.newMP7MHealinglProjectile';
        class'MultipliedExpMut.newWeldFire'.default.nExp=nExp;
        class'MultipliedExpMut.newSyringeFire'.default.nExp=nExp;
        Class'MultipliedExpMut.newKrissMHealingProjectile'.default.nExp=nExp;
        Class'MultipliedExpMut.newM7A3MHealinglProjectile'.default.nExp=nExp;
        Class'MultipliedExpMut.newMP5MHealinglProjectile'.default.nExp=nExp;
        Class'MultipliedExpMut.newMP7MHealinglProjectile'.default.nExp=nExp;
        Class'MultipliedExpMut.newMedicNade'.default.nExp=nExp;
        Super.PostBeginPlay();
    }
    defaultproperties
    {
        nExp=2
        bAddToServerPackages=True
        GroupName="KF-Exp"
        FriendlyName="MultipliedExpMut"
        Description="Multiplies experience of all players"
    }
    class MeXGameRules extends GameRules;
    var array<KFMonster> DecapitatedMonsters;
    var int nExp;
    function PostBeginPlay()
    {
        if( Level.Game.GameRulesModifiers==None )
            Level.Game.GameRulesModifiers = Self;
        else Level.Game.GameRulesModifiers.AddGameRules(Self);
    }
    function AddGameRules(GameRules GR)
    {
        if ( GR!=Self )
            Super.AddGameRules(GR);
    }
    function bool PreventDeath(Pawn Killed, Controller Killer, class<DamageType> damageType, vector HitLocation)
    {
        local KFSteamStatsAndAchievements KFStatsAndAchievements;
        local PlayerController PC;
        local int i;
        //Чистим список обезглавленых от уже мёртвых
        CleanDecapitatedList();
        if(damageType==None || Killer==None || Killed==None)
        {
            if ( NextGameRules != None)
                return NextGameRules.PreventDeath(Killed,Killer,damageType,HitLocation);
            return false;
        }
        PC=PlayerController(Killer);
        if(PC!=None)
            KFStatsAndAchievements = KFSteamStatsAndAchievements(PC.SteamStatsAndAchievements);
        if( PC==None || KFStatsAndAchievements==None )
        {
            if ( NextGameRules != None)
                return NextGameRules.PreventDeath(Killed,Killer,damageType,HitLocation);
            return false;
        }
        // Commando
        if    (
                DamageType.Name == 'DamTypeBullpup'                    ||
                DamageType.Name == 'DamTypeAK47AssaultRifle'        ||
                DamageType.Name == 'DamTypeFNFALAssaultRifle'        ||
                DamageType.Name == 'DamTypeSCARMK17AssaultRifle'    ||
                DamageType.Name == 'DamTypeM4AssaultRifle'            ||
                DamageType.Name == 'DamTypeThompson'                ||
                DamageType.Name == 'DamTypeMKb42AssaultRifle'
            )
        {
            if( Killed.IsA('ZombieStalker') )
            {
                for(i=0;i<nExp-1;i++)
                    KFStatsAndAchievements.AddStalkerKill();
            }
        }
        if ( NextGameRules != None)
            return NextGameRules.PreventDeath(Killed,Killer, damageType,HitLocation);
        return false;
    }
    function int NetDamage( int OriginalDamage, int Damage, Pawn Injured, Pawn InstigatedBy, vector HitLocation, out vector Momentum, class<DamageType> DamageType )
    {
        local KFSteamStatsAndAchievements KFStatsAndAchievements;
        local PlayerController PC;
        local int i;
        if(Injured==None || InstigatedBy==None)
        {
            if ( NextGameRules != None)
                return NextGameRules.NetDamage(OriginalDamage, Damage, injured, instigatedBy, HitLocation, Momentum, DamageType);
            return Damage;
        }
        if    (
                Injured.IsA('KFMonster')                        &&
                InstigatedBy.IsA('KFHumanPawn')                    &&
                InstigatedBy.Controller.IsA('PlayerController')    &&
                Damage>0
            )
        {
            PC=PlayerController(InstigatedBy.Controller);
            if(PC!=None)
                KFStatsAndAchievements = KFSteamStatsAndAchievements(PC.SteamStatsAndAchievements);
            if( PC==None || KFStatsAndAchievements==None )
            {
                if ( NextGameRules != None)
                    return NextGameRules.NetDamage(OriginalDamage, Damage, injured, instigatedBy, HitLocation, Momentum, DamageType);
                return Damage;
            }
            // SupportSpec
            if    (
                    class<KFWeaponDamageType>(DamageType)!=none    &&
                    class<KFWeaponDamageType>(DamageType).default.bIsPowerWeapon
                )
                KFStatsAndAchievements.AddShotgunDamage((nExp-1) * Min(Damage,Injured.Health));
            // Berserker
            else if    (
                        class<KFWeaponDamageType>(DamageType) != none &&
                        class<KFWeaponDamageType>(DamageType).default.bIsMeleeDamage
                    )
                KFStatsAndAchievements.AddMeleeDamage((nExp-1) * Min(Damage,Injured.Health));
            // Commando
            else if    (
                        DamageType.Name == 'DamTypeBullpup'                    ||
                        DamageType.Name == 'DamTypeAK47AssaultRifle'        ||
                        DamageType.Name == 'DamTypeFNFALAssaultRifle'        ||
                        DamageType.Name == 'DamTypeSCARMK17AssaultRifle'    ||
                        DamageType.Name == 'DamTypeM4AssaultRifle'            ||
                        DamageType.Name == 'DamTypeThompson'                ||
                        DamageType.Name == 'DamTypeMKb42AssaultRifle'
                    )
                KFStatsAndAchievements.AddBullpupDamage((nExp-1) * Min(Damage,Injured.Health));
            // Firebug
            else if    (
                        class<KFWeaponDamageType>(DamageType)!=None &&
                        class<KFWeaponDamageType>(DamageType).default.bDealBurningDamage
                    )
                KFStatsAndAchievements.AddFlameThrowerDamage((nExp-1) * Min(Damage,Injured.Health));
            // Sharpshooter
            else if    (
                        class<KFWeaponDamageType>(DamageType)!=None &&
                        class<KFWeaponDamageType>(DamageType).default.bSniperWeapon
                    )
            {
                if(KFMonster(Injured).bDecapitated && !InDecapitatedList(KFMonster(Injured)))
                {
                    DecapitatedMonsters[DecapitatedMonsters.Length]=KFMonster(Injured);
                    for(i=0;i<nExp-1;i++)
                        KFStatsAndAchievements.AddHeadshotKill(false);
                }
            }
            // Demolitions
            else if    (
                        class<KFWeaponDamageType>(DamageType)!=none &&
                        class<KFWeaponDamageType>(DamageType).default.bIsExplosive
                    )
                KFStatsAndAchievements.AddExplosivesDamage((nExp-1) * Min(Damage,Injured.Health));
        }
        if ( NextGameRules != None )
            return NextGameRules.NetDamage( OriginalDamage, Damage,injured,instigatedBy,HitLocation,Momentum,DamageType );
        return Damage;
    }
    function bool InDecapitatedList(KFMonster M)
    {
        local int i;
        for(i=0;i<DecapitatedMonsters.Length;i++)
            if(DecapitatedMonsters[i]==M) return true;
        return false;
    }
    function CleanDecapitatedList()
    {
        local int i;
        for (i=0; i<DecapitatedMonsters.Length; i++)
        {
            if (DecapitatedMonsters[i]==none)
            {
                DecapitatedMonsters.Remove(i,1);
                i--;
            }
        }
    }

    For the medic and in the case of welding - I replace either the Fire or Projectile classes Then maybe I’ll post a version that bypasses this But in principle it’s not bad

    This mutator only takes into account classic weapons - register the rest by analogy Although in general this applies to commando weapons, medic weapons and new welds Everything else will work most likely anyway. To use honey. grenade - must be registered in ServerPerksP.SRVetFieldMedic:

    static function class<Grenade> GetNadeType(KFPlayerReplicationInfo KFPRI)
    {
        local class<Grenade> gClass;
        gClass = class<Grenade>(DynamicLoadObject("MultipliedExpMut.newMedicNade", class'Class'));
        if(gClass!=none)
            return gClass;
        return Super.GetNadeType(KFPRI);
    }

    Download compiled version: link, mirror

    Add a mutator in the form MultipliedExpMut.MultipliedExpMut

    The nExp multiplier is set in the ini file

    Author: Flame

    Back