//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();
			
		}
示例#3
0
		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;
		}
示例#4
0
 private Slow ModifySlowWithPerkBonus(Slow slow)
 {
     return IsTower() ? PerkManager.ModifySlowWithPerkBonus(slow.Clone(), unitT.prefabID) : slow;
 }
示例#5
0
 public void ApplySlow(Slow slow)
 {
     StartCoroutine(SlowRoutine(slow));
 }
示例#6
0
 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;
		}