UE3:UT MDB GR DamageConversion (UT3)

From Unreal Wiki, The Unreal Engine Documentation Site
Revision as of 02:49, 15 January 2010 by 00zX (talk | contribs) (moved UE3:UT MDB GR DmgConversion to UE3:UT MDB GR DmgConversion (UT3): Corrected GameNameSpace for correct InfoBox display.)
UT3 UT_MDB >> UT_MDB_GameRules >> UT_MDB_GR_DmgConversion (custom)
Package:
UT_GameDex
Known custom subclass:
UT_MDB_GR_Vampire (UT3)

Code

<uscript> //=================================================== // Class: UT_MDB_GR_DmgConversion // Creation date: 20/08/2009 14:46 // Last Updated: 17/11/2009 09:34 // Contributors: 00zX //--------------------------------------------------- // Attribution-Noncommercial-Share Alike 3.0 Unported // http://creativecommons.org/licenses/by-nc-sa/3.0/ //--------------------------------------------------- //-Vampire/EnergyLeech, give conversion ratio +/-25% // //-Reward Delays //-TODO: Vampire/EnergyLeech, Falloff based on distance/view of target //=================================================== class UT_MDB_GR_DmgConversion extends UT_MDB_GameRules config(Newtators);

`include(MOD.uci)

/** Conversion of damage to armour, varies depending on armour type. Armour is based on the amount of damage it blocks. */

/** Conversion of damage to health, varies depending on armour. Armour is based on the amount of damage it blocks. */ var float ConversionRatio;

/** The delay between taking the damage and recieving it back as health */ var() bool bUseRewardDelay; var() float RewardDelay; var float PassReward; var pawn EnemyP;

var() bool bUsePercentageReward;

/** Linear falloff for damage conversion based on the distance from the target.*/ //var() interp float FalloffExponent; //var() float MaxConversionDistance; //relevant only with distance falloff! var bool bUseFalloff; var fRange Falloff;

/*struct DmgFalloff { var float Distance; var float Percentage; }; var array<DmgFalloff> Falloff;*/

//Global GameDex: Self Damage Scaling /*function int SelfDamage(UT_GR_Info.EnemyInfo Enemy) { Enemy.Damage = Enemy.Damage * UT_MDB_GameExp(UT_GR_Info(MasterGR).GameExp).SelfDmgMultiplier; return Super.SelfDamage(Enemy); }*/

//Global GameDex: Bot Damage Scaling, Vehicle Damage Scaling function int DamageTaken(UT_GR_Info.EnemyInfo Enemy, optional pawn Injured) { local float FalloffPercent;

/* if(Enemy.bIsBot) Enemy.Damage = Enemy.Damage * UT_MDB_GameExp(UT_GR_Info(MasterGR).GameExp).BotDmgMultiplier;

if(Enemy.Type == ET_Vehicle){ // if(Enemy.Pawn == Vehicle(Enemy.Pawn)){ //TODO: Get value from GameDex, Default 1.0 Enemy.Damage = Enemy.Damage * UT_MDB_GameExp(UT_GR_Info(MasterGR).GameExp).VehicleDmgMultiplier; // } }*/

//Rule_Variation: This is a Percentage Variation on the Damage by +/- 25% Enemy.ModifiedDamage=bUsePercentageReward ? int(fRandPercent(Enemy.Damage, 0.25)) : Enemy.Damage;

//Rule_Variation: Falloff based on Players Distance to the enemy. if(bUseFalloff){ FalloffPercent=1-(DistToEnemy(Enemy, Injured)-Falloff.Min)/Falloff.Max-Falloff.Min; ConversionRatio=ConversionRatio*FalloffPercent; `Logd("Enemy.Damage = "$Enemy.Damage$"; FalloffPercent = "$FalloffPercent$"; ConversionRatio = "$ConversionRatio,, 'DmgConvert'); }

return Super.DamageTaken(Enemy,Injured); }

function RewardTimer() { if(EnemyP != none && Vehicle(EnemyP) == none) EnemyP.Health = PassReward; else if(Vehicle(EnemyP) != none) Vehicle(EnemyP).HealDamage(PassReward, EnemyP.Controller, class'UTDmgType_LinkBeam'); //h4z }

static final function float fRandBetween(float Bottom, float Top) { return FRand()* (Top-Bottom) + Bottom;// return FClamp(FRand(), Bottom, Top); }

//static final simulated function float RandRange( float InMin, float InMax )

//TODO: Vampire/EnergyLeech, give conversion ration +/-25% //25% of Conversion and/or damage final function float PercentConversion(float A, float Percent) { return (Rand(2)>0) ? A+A*Percent : A-A*Percent; }

final function float fRandPercent(float A, float Pcnt) { //return (Rand(2)>0) ? A+A*Rand(Percent) : A-A*Rand(Percent); // return (Rand(2)>0) ? A+A*FClamp(FRand(), A*Percent, A) : A-A*FClamp(FRand(), A*Percent, A); return (Rand(2)>0) ? A+A*fRandBetween(0,Pcnt) : A-A*fRandBetween(0,Pcnt); }

//FROM: Unreal 2 // Randomly modifies the given float by +/- given %. // e.g. PerturbFloatPercent( 100.0, 20.0) will return a value in 80.0..120.0 /*static final function float PerturbFloatPercent(float Num, float PerturbPercent){ local float Perturb;

Perturb = 2.0*PerturbPercent / 100.0; return Num + Num * ( ( Perturb * FRand() - Perturb / 2.0 ) ); }*/

/*static final function int PerturbInt(int Num, int PerturbPlusMinus){ return Num + Rand( 2*PerturbPlusMinus + 1 ) - PerturbPlusMinus; }*/


//TODO: Vampire/EnergyLeech, Falloff based on distance/view of target final function float DistToEnemy(UT_GR_Info.EnemyInfo Enemy, pawn Injured) { local float Dist;

Dist = VSize(Enemy.Pawn.Location-Injured.Location); `Logd("DamageConversion: Distance to Enemy:"$Dist,, 'DmgConvert'); return Dist; }

defaultproperties { bUsePercentageReward=True

bUseRewardDelay=False RewardDelay=0.4

bUseFalloff=True Falloff=(Min=200, Max=1300) } </uscript>