//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(); }
public static Slow ModifySlowWithPerkBonus(Slow slow, int prefabID, int type=0){ Slow slowMod=new Slow(); if(type==0) slowMod=GetTowerSlowMultiplier(prefabID); else if(type==1) slowMod=GetFPSWeaponSlowMultiplier(prefabID); else if(type==2) slowMod=GetAbilitySlowMultiplier(prefabID); slow.slowMultiplier*=(1-slowMod.slowMultiplier); slow.duration*=(1+slowMod.duration); return slow; }
private Slow ModifySlowWithPerkBonus(Slow slow) { return IsTower() ? PerkManager.ModifySlowWithPerkBonus(slow.Clone(), unitT.prefabID) : slow; }
public void ApplySlow(Slow slow) { StartCoroutine(SlowRoutine(slow)); }
IEnumerator SlowRoutine(Slow slow) { slowEffectList.Add(slow); ResetSlowMultiplier(); yield return new WaitForSeconds(slow.duration); slowEffectList.Remove(slow); ResetSlowMultiplier(); }
//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 Slow Clone(){ Slow clone=new Slow(); clone.effectID=effectID; clone.slowMultiplier=slowMultiplier; clone.duration=duration; //~ clone.timeEnd=timeEnd; return clone; }