I search for solutions in this order: Past Code, Unreal Source, Wiki, BUF, groups.yahoo, google, screaming at monitor. – RegularX
UE3:UT MDB GR Vampire (UT3)
From Unreal Wiki, The Unreal Engine Documentation Site
Code[edit]
UT_MDB >> UT_MDB_GR_DmgConversion >> UT_MDB_GR_Vampire (custom) |
Contents
- Package:
- UT_GDP_Newtators
//=================================================== // Class: UT_MDB_GR_Vampire // Creation date: 27/11/2007 04:01 // 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/ //--------------------------------------------------- //Modified version of Epics VampireGameRules from 2k4 //-Support for UT3's armour system //-Support for Infantry Vs Vehicle //-Support for Vehicle Vs Vehicle // //-Support for v2.0 //--Knights? Manta's, light armour //--Rooks, Beamoth and juggernauts //TODO: Rampup, more damage = more health returned, armour still blocks. //=================================================== class UT_MDB_GR_Vampire extends UT_MDB_GR_DamageConversion config(GDP_Newtators); `include(MOD.uci) var float AccumulateDamage, /// Track damage accumulated during a tick AccumulationTime; /// Tick time for which damage is being accumulated //Branch 2 function int ModifyDamageTaken(UT_GR_Info.EnemyInfo Enemy, optional pawn Injured) { local int VampHealth, VampMaxHealth, DifHealth; local int tEnemyDamage; local int LogInitHealth;/*, LogDamage, LogConversion;*/ if(Injured == None || !ClassIsChildOf(Injured.class, class'UTPawn')) return Enemy.Damage; VampHealth = Enemy.Pawn.Health; LogInitHealth = VampHealth; if(bUseSuperHealth) VampMaxHealth = UTPawn(Enemy.Pawn).SuperHealthMax; else VampMaxHealth = Enemy.Pawn.HealthMax; //Branch 3 if(Enemy.Type == ET_Infantry) { if(UTPawn(Injured).ShieldBeltArmor > 0) return Super(UT_MDB_GameRules).ModifyDamageTaken(Enemy, Injured); else if(UTPawn(Injured).VestArmor > 0) ConversionRatio = bUseSuperHealth ? 0.1875 : 0.375; else if(UTPawn(Injured).ThighpadArmor > 0) ConversionRatio = bUseSuperHealth ? 0.125 : 0.250; else if(UTPawn(Injured).HelmetArmor > 0) ConversionRatio = bUseSuperHealth ? 0.125 : 0.250; else ConversionRatio = bUseSuperHealth ? 0.5 : 0.35; DifHealth = Enemy.Pawn.Health - VampHealth; } else if(Enemy.Type == ET_Vehicle && bUseForVehicles) { if(Enemy.Pawn == Vehicle(Enemy.Pawn)) { VampHealth = Vehicle(Enemy.Pawn).Health; VampMaxHealth = Vehicle(Enemy.Pawn).HealthMax; ConversionRatio = 0.5; DifHealth = Enemy.Damage*ConversionRatio; } } `Logd("Enemy = "$Enemy.Pawn.name$"; Damage = "$Enemy.Damage$"; ModifiedDamage = "$Enemy.ModifiedDamage$"; ConversionRatio = "$ConversionRatio,,'Vampire'); //TODO: Insert 'fRandPercent(Enemy.Damage, 0.25)' into equation if(!bUseRewardDelay) { //Rule_Standard: Give Infantry/Vehicle Health Straight Away with no Percent Variation. //Rule_Variation: Give Infantry/Vehicle Health Straight Away with Percent Variation. if(Enemy.Type == ET_Infantry) { Enemy.Pawn.Health = Clamp(VampHealth + Enemy.Damage * ConversionRatio, VampHealth, VampMaxHealth); //Enemy.Pawn.Health = Clamp(VampHealth+Enemy.ModifiedDamage*ConversionRatio, VampHealth, VampMaxHealth); } else if(Enemy.Type == ET_Vehicle && bUseForVehicles) { Vehicle(Enemy.Pawn).HealDamage(Enemy.Damage * ConversionRatio, Enemy.Pawn.Controller, Enemy.DamageType); //Vehicle(Enemy.Pawn).HealDamage(Enemy.ModifiedDamage*ConversionRatio, Enemy.Pawn.Controller, Enemy.DamageType); } } else { //Rule_Variation: Give Infantry/Vehicle Health after a Delay with no Percent Variation. //Rule_Variation: Give Infantry/Vehicle Health after a Delay with Percent Variation. if(Enemy.Type == ET_Infantry) { PassReward = Clamp(VampHealth + Enemy.Damage * ConversionRatio, VampHealth, VampMaxHealth); //PassReward = Clamp(VampHealth+Enemy.ModifiedDamage*ConversionRatio, VampHealth, VampMaxHealth); } else if(Enemy.Type == ET_Vehicle && bUseForVehicles) { PassReward = Clamp(Enemy.Damage * ConversionRatio, VampHealth, VampMaxHealth); //PassReward = Clamp(Enemy.ModifiedDamage*ConversionRatio, VampHealth, VampMaxHealth); } } if(bUseRewardDelay) SetTimer(RewardDelay, false, 'RewardTimer'); /* if(!bUseForVehicles) return Super.DamageTaken(Enemy, Injured); else{ //Branch4: Do vehicle code here, optimized? }*/ //Displays a message on the Players Hud informing them of the Amount of Health leached from the Enemy. DifHealth = Enemy.Pawn.Health - VampHealth; if(DifHealth != 0) if(PlayerController(Enemy.Pawn.Controller) != None) PlayerController(Enemy.Pawn.Controller).ReceiveLocalizedMessage(class'`pak1.UT_LMsg_Vampire', DifHealth); //TODO: Support for Rook 2.0 return super.ModifyDamageTaken(Enemy, Injured);// return Super(UT_MDB_GameRules).DamageTaken(Enemy, Injured); } defaultproperties { bUsePercentageReward=True bUseRewardDelay=False bUseFalloff=False }