public SkillInstance(Skill skill) { Skill = skill; }
public SkillInstance(Skill skill, SkillAI ai) { Skill = skill; AI = ai; }
public static void OneHit(Mob attacker, Mob target, Skill skill) { OneHit(attacker, target, skill, GetOneHit(attacker, target, skill)); }
public static void OneHit(Mob attacker, Mob target, Skill skill, int dam) { if (CheckValidTarget(attacker, target) == false) return; if (attacker.Battle == null || attacker.Battle is RealtimeBattle) StartRealtimeCombat(attacker, target); else if (attacker.Battle == null || attacker.Battle is TurnBattle) StartTurnCombat(attacker, target); DoOneHit(attacker, target, skill, dam); }
/// <summary> /// Heal one target notifying the room /// </summary> /// <param name="healer"></param> /// <param name="target"></param> /// <param name="skill"></param> public static void OneHeal(Mob healer, Mob target, Skill skill) { if (CheckValidTarget(healer, target, TargetType.Ally) == false) return; SetTargetAlly(healer, target); // if either char is IN battle, we need to add the other to that same battle if (healer.Battle != null || target.Battle != null) { AddOrCreateRealtimeBattle(new Mob[] { healer, target }); } DoHeal(healer, target, GetHeal(healer, target, skill), skill); }
/// <summary> /// Returns the damage of the provided skill used by the attacker against the target, performing all necessary damage calculations /// </summary> /// <param name="attacker"></param> /// <param name="target"></param> /// <param name="skill"></param> /// <returns></returns> public static int GetOneHit(Mob attacker, Mob target, Skill skill) { if (target == null) return 0; double damage = 0; int critDamage = 2000; bool crit = false; bool autoPhys = false; bool autoMag = false; if (skill.Components.ContainsKey("Autoattack")) { int highestStat = 0; bool physical = false; if (attacker.PhysicalPower >= highestStat) { highestStat = attacker.PhysicalPower; physical = true; } if (attacker.MagicPower > highestStat) { highestStat = attacker.MagicPower; physical = false; } if (physical == true) { //addStatMods += attacker.PhysicalPower; autoPhys = true; } else { //addStatMods += attacker.MagicPower; autoMag = true; } damage *= 100; } if (skill.Components.ContainsKey("DamageTypePhysical") || autoPhys) { int damageTypePhysical = 0; if (autoPhys) damageTypePhysical = 100; else damageTypePhysical = ((int)skill.Components["DamageTypePhysical"]); damage += attacker.PhysicalPower * damageTypePhysical; damage /= 100; damage *= 10000 / ((target.Armor * damageTypePhysical / 100) + 100); damage /= 100; if (Combat.Random.Next(0, 1000) <= attacker.PhysicalCritical * damageTypePhysical / 100) { crit = true; critDamage += attacker.PhysicalCriticalDamage * damageTypePhysical / 100; } } if (skill.Components.ContainsKey("DamageTypeMagical") || autoMag) { int damageTypeMagical = 0; if (autoMag) damageTypeMagical = 100; else damageTypeMagical = ((int)skill.Components["DamageTypeMagical"]); damage += attacker.MagicPower * damageTypeMagical; damage /= 100; damage *= 10000 / ((target.Resistance * damageTypeMagical / 100) + 100); damage /= 100; if (!skill.Components.ContainsKey("NoCritical")) { if (Combat.Random.Next(0, 1000) <= attacker.MagicalCritical * damageTypeMagical / 100) { crit = true; critDamage += attacker.MagicalCriticalDamage * damageTypeMagical; } } } if (crit) { damage *= critDamage; damage /= 1000; attacker.SendMessage("Crit! "); } if (skill.Components.ContainsKey("Randomize")) { int mod = Random.Next(100 - (int)skill.Components["Randomize"] / 2, 100 + (int)skill.Components["Randomize"] / 2); damage *= mod; damage /= 100; } if (damage <= 0) damage = 1; if (skill.Components.ContainsKey("DamageTypePhysical") || autoPhys) { int damageTypePhysical = 0; if (autoPhys) damageTypePhysical = 100; else damageTypePhysical = ((int)skill.Components["DamageTypePhysical"]); } if (skill.Components.ContainsKey("DamageTypeMagical") || autoMag) { int damageTypeMagical = 0; if (autoMag) damageTypeMagical = 100; else damageTypeMagical = ((int)skill.Components["DamageTypeMagical"]); } return Convert.ToInt32(damage); }
public static int GetHeal(Mob attacker, Mob target, Skill skill) { double heal = 0; int critHeal = 2000; bool crit = false; if (skill.Components.ContainsKey("DamageTypePhysical")) { int damageTypePhysical = ((int)skill.Components["DamageTypePhysical"]); heal += attacker.PhysicalPower * damageTypePhysical; heal /= 100; if (Combat.Random.Next(0, 1000) <= attacker.PhysicalCritical * damageTypePhysical / 100) { crit = true; critHeal += attacker.PhysicalCriticalDamage * damageTypePhysical / 100; } } if (skill.Components.ContainsKey("DamageTypeMagical")) { int damageTypeMagical = ((int)skill.Components["DamageTypeMagical"]); heal += attacker.MagicPower * damageTypeMagical; heal /= 100; if (!skill.Components.ContainsKey("NoCritical")) { if (Combat.Random.Next(0, 1000) <= attacker.MagicalCritical * damageTypeMagical / 100) { crit = true; critHeal += attacker.MagicalCriticalDamage * damageTypeMagical; } } } if (crit) { heal *= critHeal; heal /= 1000; attacker.SendMessage("Crit! "); } if (skill.Components.ContainsKey("Randomize")) { int mod = Random.Next(100 - (int)skill.Components["Randomize"] / 2, 100 + (int)skill.Components["Randomize"] / 2); heal *= mod; heal /= 100; } if (heal <= 0) heal = 1; if (skill.Components.ContainsKey("DamageTypePhysical")) { int damageTypePhysical = ((int)skill.Components["DamageTypePhysical"]); } if (skill.Components.ContainsKey("DamageTypeMagical")) { int damageTypeMagical = ((int)skill.Components["DamageTypeMagical"]); } return Convert.ToInt32(heal); }
public static void DoOneHit(Mob attacker, Mob target, Skill skill, int damage) { if (damage > 0) { string damMessage = ""; if (skill == null) damMessage = "hits"; else { damMessage = skill.UseMessage; } target.Room.SendMessage(attacker.Name + " " + damMessage + " " + target.Name + "! (" + damage + ")\n\r", "dupe"); Damage(attacker, target, damage); } else { target.Room.SendMessage(attacker.Name + " misses " + target.Name + ". (-)\n\r", "dupe"); } }
public static void DoHeal(Mob attacker, Mob target, int heal, Skill skill) { string damMessage = ""; if (skill == null) damMessage = "heals"; else { damMessage = skill.UseMessage; } target.Room.SendMessage(attacker.Name + " " + damMessage + " " + target.Name + "! + " + heal + " +\n\r", "dupe"); Heal(attacker, target, heal); }