UE3:UT MDB GR DamageConversion (UT3): Difference between revisions
m moved UE3:UT MDB GR DmgConversion (UT3) to UE3:UT MDB GR DamageConversion (UT3): yeahyeah |
No edit summary |
||
Line 1: | Line 1: | ||
{{Infobox class | {{Infobox class | ||
| package = UT_GameDex | | package = UT_GameDex | ||
| class = | | class = UT_MDB_GR_DamageConversion | ||
| game = UT3 | | game = UT3 | ||
| engine = UE3 | | engine = UE3 | ||
Line 7: | Line 7: | ||
| parent1 = UT_MDB_GameRules | | parent1 = UT_MDB_GameRules | ||
| parent2 = UT_MDB | | parent2 = UT_MDB | ||
| parent3 = Object | |||
}} | }} | ||
Line 12: | Line 13: | ||
<uscript> | <uscript> | ||
//=================================================== | //=================================================== | ||
// Class: | // Class: UT_MDB_GR_DamageConversion | ||
// Creation date: 20/08/2009 14:46 | // Creation date: 20/08/2009 14:46 | ||
// Last Updated: | // Last Updated: 14/04/2010 06:58 | ||
// Contributors: 00zX | // Contributors: 00zX | ||
//--------------------------------------------------- | //--------------------------------------------------- | ||
Line 25: | Line 26: | ||
//-TODO: Vampire/EnergyLeech, Falloff based on distance/view of target | //-TODO: Vampire/EnergyLeech, Falloff based on distance/view of target | ||
//=================================================== | //=================================================== | ||
class | class UT_MDB_GR_DamageConversion extends UT_MDB_GameRules | ||
config( | implements(MDIB_GR_ModifyDamage) | ||
config(GameDex); | |||
var config bool bUseSuperHealth, | |||
bUseForVehicles, //Infantry Vs Vehicle || Vehicle Vs Vehicle Damage! | |||
bUseForKnights, | |||
bUseForRooks; //Castles cant have vampire :S | |||
/** Conversion of damage to armour | /** Conversion of damage to armour or damage to health, varies depending on armour. | ||
Armour is based on the amount of damage it blocks. */ | Armour is based on the amount of damage it blocks. */ | ||
var float ConversionRatio; | var float ConversionRatio; | ||
Line 58: | Line 60: | ||
var array<DmgFalloff> Falloff;*/ | var array<DmgFalloff> Falloff;*/ | ||
function int ModifyDamageTaken(UT_GR_Info.EnemyInfo Enemy, optional pawn Injured) | |||
{ | { | ||
local float FalloffPercent; | local float FalloffPercent; | ||
//Rule_Variation: This is a Percentage Variation on the Damage by +/- 25% | //Rule_Variation: This is a Percentage Variation on the Damage by +/- 25% | ||
Enemy.ModifiedDamage=bUsePercentageReward ? int(fRandPercent(Enemy.Damage, 0.25)) : Enemy.Damage; | Enemy.Damage = bUsePercentageReward ? int(fRandPercent(Enemy.Damage, 0.25)) : Enemy.Damage; | ||
//Enemy.ModifiedDamage = bUsePercentageReward ? int(fRandPercent(Enemy.Damage, 0.25)) : Enemy.Damage; | |||
//Rule_Variation: Falloff based on Players Distance to the enemy. | //Rule_Variation: Falloff based on Players Distance to the enemy. | ||
if(bUseFalloff){ | if(bUseFalloff) | ||
FalloffPercent=1-( | { | ||
ConversionRatio=ConversionRatio*FalloffPercent; | FalloffPercent = ((1 - (VSize(Enemy.Pawn.Location - Injured.Location) - Falloff.Min)) / (Falloff.Max - Falloff.Min)); | ||
ConversionRatio = ConversionRatio * FalloffPercent; | |||
`Logd("Enemy.Damage = "$Enemy.Damage$"; FalloffPercent = "$FalloffPercent$"; ConversionRatio = "$ConversionRatio,, 'DmgConvert'); | `Logd("Enemy.Damage = "$Enemy.Damage$"; FalloffPercent = "$FalloffPercent$"; ConversionRatio = "$ConversionRatio,, 'DmgConvert'); | ||
//`Logd("DamageConversion: Distance to Enemy:"$VSize(Enemy.Pawn.Location-Injured.Location),, 'DmgConvert'); | |||
} | } | ||
return | return super.ModifyDamageTaken(Enemy,Injured); | ||
} | } | ||
Line 101: | Line 88: | ||
} | } | ||
static final function float fRandBetween(float | static final function float fRandBetween(float Min, float Max) | ||
{ | { | ||
return FRand()* ( | return FRand() * (Max - Min) + Min; | ||
} | } | ||
Line 114: | Line 101: | ||
} | } | ||
final function float fRandPercent(float A, float | final function float fRandPercent(float A, float Percent) | ||
{ | { | ||
//return (Rand(2)>0) ? A+A*Rand(Percent) : A-A*Rand(Percent); | //return (Rand(2)>0) ? A+A*Rand(Percent) : A-A*Rand(Percent); | ||
return (Rand(2)>0) ? A+A*fRandBetween(0, Percent) : A-A*fRandBetween(0, Percent); | |||
return (Rand(2)>0) ? A+A*fRandBetween(0, | |||
} | } | ||
Line 135: | Line 121: | ||
}*/ | }*/ | ||
/*function CausePainTo(Actor Other) | |||
/ | |||
{ | { | ||
if (DamagePerSec > 0) | |||
{ | |||
if ( WorldInfo.bSoftKillZ && (Other.Physics != PHYS_Walking) ) | |||
return; | |||
if ( (DamageType == None) || (DamageType == class'DamageType') ) | |||
} | `log("No valid damagetype specified for "$self); | ||
Other.TakeDamage(DamagePerSec, DamageInstigator, Location, vect(0,0,0), DamageType); | |||
} | |||
else | |||
{ | |||
Other.HealDamage(DamagePerSec, DamageInstigator, DamageType); | |||
} | |||
}*/ | |||
defaultproperties | defaultproperties | ||
Line 153: | Line 144: | ||
RewardDelay=0.4 | RewardDelay=0.4 | ||
bUseFalloff= | bUseFalloff=False | ||
Falloff=(Min=200, Max=1300) | Falloff=(Min=200, Max=1300) | ||
} | } | ||
</uscript> | </uscript> |
Latest revision as of 07:13, 21 April 2010
![]() |
Object >> UT_MDB >> UT_MDB_GameRules >> UT_MDB_GR_DamageConversion (custom) |
- Package:
- UT_GameDex
- Known custom subclass:
- UT_MDB_GR_GlobalDamage (UT3)
Code
<uscript> //=================================================== // Class: UT_MDB_GR_DamageConversion // Creation date: 20/08/2009 14:46 // Last Updated: 14/04/2010 06:58 // 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_DamageConversion extends UT_MDB_GameRules implements(MDIB_GR_ModifyDamage) config(GameDex);
var config bool bUseSuperHealth, bUseForVehicles, //Infantry Vs Vehicle || Vehicle Vs Vehicle Damage! bUseForKnights, bUseForRooks; //Castles cant have vampire :S
/** Conversion of damage to armour or 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;*/
function int ModifyDamageTaken(UT_GR_Info.EnemyInfo Enemy, optional pawn Injured) { local float FalloffPercent;
//Rule_Variation: This is a Percentage Variation on the Damage by +/- 25% Enemy.Damage = bUsePercentageReward ? int(fRandPercent(Enemy.Damage, 0.25)) : Enemy.Damage; //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 - (VSize(Enemy.Pawn.Location - Injured.Location) - Falloff.Min)) / (Falloff.Max - Falloff.Min)); ConversionRatio = ConversionRatio * FalloffPercent; `Logd("Enemy.Damage = "$Enemy.Damage$"; FalloffPercent = "$FalloffPercent$"; ConversionRatio = "$ConversionRatio,, 'DmgConvert'); //`Logd("DamageConversion: Distance to Enemy:"$VSize(Enemy.Pawn.Location-Injured.Location),, 'DmgConvert'); }
return super.ModifyDamageTaken(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 Min, float Max) { return FRand() * (Max - Min) + Min; }
//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 Percent) { //return (Rand(2)>0) ? A+A*Rand(Percent) : A-A*Rand(Percent); return (Rand(2)>0) ? A+A*fRandBetween(0, Percent) : A-A*fRandBetween(0, Percent); }
//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; }*/
/*function CausePainTo(Actor Other) { if (DamagePerSec > 0) { if ( WorldInfo.bSoftKillZ && (Other.Physics != PHYS_Walking) ) return; if ( (DamageType == None) || (DamageType == class'DamageType') ) `log("No valid damagetype specified for "$self); Other.TakeDamage(DamagePerSec, DamageInstigator, Location, vect(0,0,0), DamageType); } else { Other.HealDamage(DamagePerSec, DamageInstigator, DamageType); } }*/
defaultproperties { bUsePercentageReward=True
bUseRewardDelay=False RewardDelay=0.4
bUseFalloff=False Falloff=(Min=200, Max=1300) } </uscript>