static bool WeaponTriangle(TroopScript Attacker, TroopScript Defender) { bool bonusattack = false; WeaponType atkwpn = Attacker.GetWeapon().weapType; WeaponType defwpn = Defender.GetWeapon().weapType; if ((atkwpn == WeaponType.Spear && defwpn == WeaponType.Sword) || (atkwpn == WeaponType.Sword && defwpn == WeaponType.Axe) || (atkwpn == WeaponType.Axe && defwpn == WeaponType.Spear)) bonusattack = true; return bonusattack; }
static bool EquipTriangleOffensive(TroopScript Attacker, TroopScript Defender) { bool bonusattack = false; WeaponType atkwpn = Attacker.GetWeapon().weapType; ArmorType defarmr = Defender.GetArmor().armrType; if ((atkwpn == WeaponType.Sword && defarmr == ArmorType.NoArmor)|| (atkwpn == WeaponType.Axe && defarmr == ArmorType.NoArmor)|| (atkwpn == WeaponType.Mace && defarmr == ArmorType.Heavy)|| (atkwpn == WeaponType.Spear && defarmr == ArmorType.Light)|| (atkwpn == WeaponType.Bow && defarmr == ArmorType.NoArmor)) bonusattack = true; return bonusattack; }
static int CalculateDamage(TroopScript Attacker, TroopScript Defender, Skill Skillused, int BattlefieldEffect) { TroopScript thisGuysTerrain; int TroopDamage = 0; if (Skillused.SkillMaxRange > 1) thisGuysTerrain = Attacker; else thisGuysTerrain = Defender; int AdjustedTroopSize= CalculateAdjustedTroopSize ( Attacker.GetNumber(),ReturnPeoplePerLine(thisGuysTerrain),Attacker.GetChief().GetMuhReturns()); bool isPhysical = Skillused.isPhysical; if (isPhysical && Skillused.PiercesDefence == false) TroopDamage = Mathf.RoundToInt ((AdjustedTroopSize*((float)CalculateAttack(Attacker.GetClass().GetAttack(),Attacker.GetChief().GetAttack(),Attacker.GetDirectAttackBuff())-(float)CalculateDefense(Defender.GetClass().GetDefense(),Defender.GetChief().GetDefense(),Defender.GetDefenseBuff(),Defender.GetPhalanx()))/15)); else if (isPhysical && Skillused.PiercesDefence == true) TroopDamage = Mathf.RoundToInt ((AdjustedTroopSize*((float)CalculateAttack(Attacker.GetClass().GetAttack(),Attacker.GetChief().GetAttack(),Attacker.GetDirectAttackBuff())-(float)CalculatePiercedDefense(Defender.GetClass().GetDefense(),Defender.GetChief().GetDefense(),Defender.GetDefenseBuff())/15))); else if (!isPhysical) TroopDamage = Mathf.RoundToInt((AdjustedTroopSize*(((float)CalculateMagicAttack(Attacker.GetClass().GetIntelligence(),Attacker.GetChief().GetIntelligence(),Attacker.GetDirectMatkBuff())-(float)CalculateMagicDefense(Defender.GetChief().GetIntelligence(),Defender.GetMdefBuff()))/15))); if (TroopDamage>Attacker.GetNumber()) TroopDamage = Attacker.GetNumber(); int flatWeaponValue = Attacker.GetWeapon().Attack*((isPhysical&&Attacker.GetWeapon().physical||!Attacker.GetWeapon().physical&&!isPhysical)?1:0); int Final = Mathf.RoundToInt(((TroopDamage*Attacker.GetWeapon().AttackModifier+flatWeaponValue)*Skillused.DamageScaling)*BattlefieldEffect); return Final; }
static int CalculateCounterDamage(TroopScript Attacker, TroopScript Defender, float CounterAtkScale, int BattlefieldEffect) { int AdjustedTroopSize= CalculateAdjustedTroopSize ( Attacker.GetNumber(),ReturnPeoplePerLine(Attacker),Attacker.GetChief().GetMuhReturns()); int TroopDamage = 0; if (Attacker.GetClass().GetIfItsPhysical()) TroopDamage = Mathf.RoundToInt ((AdjustedTroopSize*((float)CalculateAttack(Attacker.GetClass().GetAttack(),Attacker.GetChief().GetAttack(),Attacker.GetCounterAttackBuff())-(float)CalculateDefense(Defender.GetClass().GetDefense(),Defender.GetChief().GetDefense(),Defender.GetDefenseBuff(),Defender.GetPhalanx()))/15)); else TroopDamage = Mathf.RoundToInt((AdjustedTroopSize*(((float)CalculateMagicAttack(Attacker.GetClass().GetIntelligence(),Attacker.GetChief().GetIntelligence(),Attacker.GetCounterMatkBuff())-(float)CalculateMagicDefense(Defender.GetChief().GetIntelligence(),Defender.GetMdefBuff()))/15))); if (TroopDamage>Attacker.GetNumber()) TroopDamage = Attacker.GetNumber(); int flatWeaponValue = Attacker.GetWeapon().Attack*((Attacker.GetClass().GetIfItsPhysical()&&Attacker.GetWeapon().physical||!Attacker.GetWeapon().physical&&!Attacker.GetClass().GetIfItsPhysical())?1:0); int Final = Mathf.RoundToInt(((TroopDamage*Attacker.GetWeapon().AttackModifier+flatWeaponValue)*CounterAtkScale)*BattlefieldEffect); return Final; }
static int CalculateAccurateShotDamage(TroopScript Attacker, TroopScript Defender, float _skillDamage, int BattlefieldEffect) { int AdjustedTroopSize = CalculateAdjustedTroopSize (Attacker.GetNumber(),ReturnPeoplePerLine(Attacker), Attacker.GetChief().GetMuhReturns()); int TroopDamage = Mathf.RoundToInt ((AdjustedTroopSize*((float)CalculateAttack(Attacker.GetClass().GetAttack(),Attacker.GetChief().GetAttack(),Attacker.GetDirectAttackBuff())-(float)CalculateDefense(Defender.GetClass().GetDefense(),Defender.GetChief().GetDefense(),Defender.GetDefenseBuff()))/15)); int flatWeaponValue = Attacker.GetWeapon().Attack; int Final = Mathf.RoundToInt(((TroopDamage*Attacker.GetWeapon().AttackModifier+flatWeaponValue)*_skillDamage)*BattlefieldEffect); return Final; }
public static void MeleeFightingScript(TroopScript Attacker, TroopScript Defender, Skill SkillUsed) { int AttackerBattlefieldEffect = 1; //still to impement int DefenderBattlefieldEffect = 1; //still to impement int DamageOnAtk = 0; int DamageOnDef = 0; TroopScript DefenderGuarder = Defender.GuardedBy; float DefenderGuardPercent = (float)Defender.GuardedByPercent/100; if (SkillUsed.CancelsPreparation == true && Defender.isMagicGuarded == false){ Defender.CancelPreparation(); Defender.FlushPreparationTarget(); } if (SkillUsed.ReducesEnergy == true && Defender.isMagicGuarded == false){ Defender.SetEnergy(Defender.GetEnergy()-1); if (Defender.GetEnergy() <0) Defender.SetEnergy(0); } if (SkillUsed.RemoveBuffs == true && Defender.isMagicGuarded == false)Defender.RemoveAllbuffs(); if (SkillUsed.AppliesPoison == true && Defender.Poisoned == 0) Defender.Poisoned = 1; if (SkillUsed.Freezes == true && !Defender.Frozen) Defender.Frozen = true; if (SkillUsed.Penetrating == true || DefenderGuarder == null){ DamageOnDef = CalculateDamage(Attacker,Defender,SkillUsed,AttackerBattlefieldEffect); Debug.Log("Damage on "+Defender.GetChief().GetName()+":"+DamageOnDef); Defender.SetNumber(Defender.GetNumber()-DamageOnDef); if (Defender.GetNumber()<0) Defender.SetNumber(0); if (CanCounter(Attacker,Defender,SkillUsed)){ float CounterScaling = CounterAttackDamage(Defender.GetChief().GetCounterAttack(),Defender.GetArmor().CounterAttackValue+Defender.GetWeapon().CounterAttackValue); DamageOnAtk = CalculateCounterDamage(Defender,Attacker,CounterScaling,DefenderBattlefieldEffect); Attacker.SetNumber(Attacker.GetNumber()-DamageOnAtk); if (Attacker.GetNumber()<0) Attacker.SetNumber(0);}} else if (SkillUsed.Penetrating == false && DefenderGuarder != null){ DamageOnDef = CalculateDamage(Attacker,Defender,SkillUsed,AttackerBattlefieldEffect); if (SkillUsed.AffectRating) RatingFromDamage(Attacker,DamageOnDef); if (DefenderGuarder){ if (DefenderGuarder.GetNumber()<= 0){ Defender.GuardedBy = null; Defender.GuardedByPercent = 0; DamageOnDef = CalculateDamage(Attacker,Defender,SkillUsed,AttackerBattlefieldEffect); Debug.Log("Damage on "+Defender.GetChief().GetName()+":"+DamageOnDef); Defender.SetNumber(Defender.GetNumber()-DamageOnDef); if (Defender.GetNumber()<0) Defender.SetNumber(0); if (CanCounter(Attacker,Defender,SkillUsed)){ float CounterScaling = CounterAttackDamage(Defender.GetChief().GetCounterAttack(),Defender.GetArmor().CounterAttackValue+Defender.GetWeapon().CounterAttackValue); DamageOnAtk = CalculateCounterDamage(Defender,Attacker,CounterScaling,DefenderBattlefieldEffect); Attacker.SetNumber(Attacker.GetNumber()-DamageOnAtk); if (Attacker.GetNumber()<0) Attacker.SetNumber(0);} }else{ DefenderGuarder.SetNumber(DefenderGuarder.GetNumber()-Mathf.RoundToInt(DamageOnDef*DefenderGuardPercent)); if (DefenderGuarder.GetNumber()<0) DefenderGuarder.SetNumber(0); Defender.SetNumber(Defender.GetNumber()-Mathf.RoundToInt(DamageOnDef*(1-DefenderGuardPercent))); if (Defender.GetNumber()<0) Defender.SetNumber(0); if (CanCounter(Attacker,DefenderGuarder,SkillUsed)){ float CounterScaling = CounterAttackDamage(DefenderGuarder.GetChief().GetCounterAttack(),DefenderGuarder.GetArmor().CounterAttackValue+DefenderGuarder.GetWeapon().CounterAttackValue); DamageOnAtk = CalculateCounterDamage(DefenderGuarder,Attacker,CounterScaling,DefenderBattlefieldEffect); Attacker.SetNumber(Attacker.GetNumber()-DamageOnAtk); if (Attacker.GetNumber()<0) Attacker.SetNumber(0); } }} } }