//public string despGeneral=""; public UnitStat(){ stun=new Stun(); crit=new Critical(); slow=new Slow(); dot=new Dot(); buff=new Buff(); }
public void Process(){ if(processed) return; processed=true; damage=Random.Range(srcUnit.GetDamageMin(), srcUnit.GetDamageMax()); damage/=(float)srcUnit.GetShootPointCount(); //divide the damage by number of shootPoint float critChance=srcUnit.GetCritChance(); if(tgtUnit.immuneToCrit) critChance=-1f; if(Random.Range(0f, 1f)<critChance){ critical=true; damage*=srcUnit.GetCritMultiplier(); } if(damage>=tgtUnit.shield){ damageShield=tgtUnit.shield; damageHP=damage-tgtUnit.shield; } else{ damageShield=damage; damageHP=0; } if(damageHP>=tgtUnit.HP){ destroy=true; return; } stunned=srcUnit.GetStun().IsApplicable(); if(tgtUnit.immuneToStun) stunned=false; slowed=srcUnit.GetSlow().IsValid(); if(tgtUnit.immuneToSlow) slowed=false; if(srcUnit.GetDot().GetTotalDamage()>0) dotted=true; if(stunned) stun=srcUnit.GetStun().Clone(); if(slowed) slow=srcUnit.GetSlow().Clone(); if(dotted) dot=srcUnit.GetDot().Clone(); }
//stats processing for attack from fps-weapon public void Process_SrcWeapon() { if(srcWeapon.GetInstantKill().IsApplicable(tgtUnit.HP, tgtUnit.fullHP)){ damage=tgtUnit.HP; instantKill=true; destroy=true; return; } damage=Random.Range(srcWeapon.GetDamageMin(), srcWeapon.GetDamageMax()); damage/=(float)srcWeapon.GetShootPointCount(); //divide the damage by number of shootPoint if(damage>=tgtUnit.HP){ destroy=true; return; } if(srcWeapon.GetDot().GetTotalDamage()>0) dotted=true; if(dotted) dot=srcWeapon.GetDot().Clone(); }
public static Dot ModifyDotWithPerkBonus(Dot dot, int prefabID, int type=0){ Dot dotMod=new Dot(); if(type==0) dotMod=GetTowerDotMultiplier(prefabID); else if(type==1) dotMod=GetFPSWeaponDotMultiplier(prefabID); else if(type==2) dotMod=GetAbilityDotMultiplier(prefabID); dot.duration*=(1+dotMod.duration); //dot.interval*=(1+dotMod.interval); dot.value*=(1+dotMod.value); return dot; }
private Dot ModifyDotWithPerkBonus(Dot dot) { return IsTower() ? PerkManager.ModifyDotWithPerkBonus(dot.Clone(), unitT.prefabID) : dot; }
IEnumerator DotRoutine(Dot dot) { int count=(int)Mathf.Floor(dot.duration/dot.interval); for(int i=0; i<count; i++){ yield return new WaitForSeconds(dot.interval); if(dead) break; DamageHP(dot.value); if(HP<=0){ Dead(); break; } } }
public void ApplyDot(Dot dot) { StartCoroutine(DotRoutine(dot)); }
//stats processing for attack from fps-weapon public void Process_SrcWeapon(){ if(srcWeapon.GetInstantKill().IsApplicable(tgtUnit.HP, tgtUnit.fullHP)){ damage=tgtUnit.HP; damageHP=tgtUnit.HP; instantKill=true; destroy=true; return; } damage=Random.Range(srcWeapon.GetDamageMin(), srcWeapon.GetDamageMax()); damage/=(float)srcWeapon.GetShootPointCount(); //divide the damage by number of shootPoint float critChance=srcWeapon.GetCritChance(); if(tgtUnit.immuneToCrit) critChance=-1f; if(Random.Range(0f, 1f)<critChance){ critical=true; damage*=srcWeapon.GetCritMultiplier(); //new TextOverlay(impactPoint, "Critical", new Color(1f, .6f, 0f, 1f)); } float dmgModifier=DamageTable.GetModifier(tgtUnit.armorType, srcWeapon.damageType); damage*=dmgModifier; if(damage>=tgtUnit.shield){ damageShield=tgtUnit.shield; damageHP=damage-tgtUnit.shield; } else{ damageShield=damage; damageHP=0; } if(Random.Range(0f, 1f)<srcWeapon.GetShieldPierce() && damageShield>0){ damageHP+=damageShield; damageShield=0; pierceShield=true; //new TextOverlay(impactPoint,"Shield Pierced", new Color(0f, 1f, 1f, 1f)); } if(srcWeapon.DamageShieldOnly()) damageHP=0; if(damageHP>=tgtUnit.HP){ destroy=true; return; } if(Random.Range(0f, 1f)<srcWeapon.GetShieldBreak() && tgtUnit.fullShield>0) breakShield=true; stunned=srcWeapon.GetStun().IsApplicable(); if(tgtUnit.immuneToStun) stunned=false; slowed=srcWeapon.GetSlow().IsValid(); if(tgtUnit.immuneToSlow) slowed=false; if(srcWeapon.GetDot().GetTotalDamage()>0) dotted=true; if(stunned) stun=srcWeapon.GetStun().Clone(); if(slowed) slow=srcWeapon.GetSlow().Clone(); if(dotted) dot=srcWeapon.GetDot().Clone(); }
public Dot Clone(){ Dot clone=new Dot(); clone.effectID=effectID; clone.duration=duration; clone.interval=interval; clone.value=value; return clone; }