I search for solutions in this order: Past Code, Unreal Source, Wiki, BUF, groups.yahoo, google, screaming at monitor. – RegularX
Difference between revisions of "UE3:UT MDB GR GlobalDamage (UT3)"
From Unreal Wiki, The Unreal Engine Documentation Site
(Created page with '==Code== {{Infobox class | package = UT_GameDex | class = UT_MDB_GR_GlobalDamage | game = UT3 | engine = UE3 | custom = yes | parent1 = UT_MDB_GR_DmgConversion | parent2 =…') |
|||
Line 14: | Line 14: | ||
<uscript> | <uscript> | ||
//=================================================== | //=================================================== | ||
− | // Class: | + | // Class: UT_MDB_GR_DamageConversion |
− | // Creation date: 08 | + | // Creation date: 20/08/2009 14:46 |
− | // Last Updated: | + | // Last Updated: 14/04/2010 06:58 |
// Contributors: 00zX | // Contributors: 00zX | ||
//--------------------------------------------------- | //--------------------------------------------------- | ||
// Attribution-Noncommercial-Share Alike 3.0 Unported | // Attribution-Noncommercial-Share Alike 3.0 Unported | ||
// http://creativecommons.org/licenses/by-nc-sa/3.0/ | // 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 | + | class UT_MDB_GR_DamageConversion extends UT_MDB_GameRules |
+ | config(Newtators); | ||
− | // | + | `include(MOD.uci) |
− | + | ||
+ | var globalconfig bool bUseSuperHealth; | ||
+ | var globalconfig bool bUseForVehicles; //Infantry Vs Vehicle || Vehicle Vs Vehicle Damage! | ||
+ | var globalconfig bool bUseForKnights; | ||
+ | var globalconfig bool 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) | |
− | function int | + | |
{ | { | ||
− | + | 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; | ||
− | if( | + | //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> | </uscript> |
Revision as of 23:09, 18 April 2010
Code
UT_MDB >> UT_MDB_GameRules >> UT_MDB_GR_DmgConversion >> UT_MDB_GR_GlobalDamage (custom) |
- Package:
- UT_GameDex
Script
//=================================================== // 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 config(Newtators); `include(MOD.uci) var globalconfig bool bUseSuperHealth; var globalconfig bool bUseForVehicles; //Infantry Vs Vehicle || Vehicle Vs Vehicle Damage! var globalconfig bool bUseForKnights; var globalconfig bool 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) }