Inheritance: Thing
コード例 #1
0
ファイル: SkillInstance.cs プロジェクト: carriercomm/PolaMUD
 public SkillInstance(Skill skill)
 {
     Skill = skill;
 }
コード例 #2
0
ファイル: SkillInstance.cs プロジェクト: carriercomm/PolaMUD
 public SkillInstance(Skill skill, SkillAI ai)
 {
     Skill = skill;
     AI = ai;
 }
コード例 #3
0
ファイル: Combat.cs プロジェクト: Entroper/PolaMUD
 public static void OneHit(Mob attacker, Mob target, Skill skill)
 {
     OneHit(attacker, target, skill, GetOneHit(attacker, target, skill));
 }
コード例 #4
0
ファイル: Combat.cs プロジェクト: Entroper/PolaMUD
        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);
        }
コード例 #5
0
ファイル: Combat.cs プロジェクト: Entroper/PolaMUD
        /// <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);
        }
コード例 #6
0
ファイル: Combat.cs プロジェクト: Entroper/PolaMUD
        /// <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);
        }
コード例 #7
0
ファイル: Combat.cs プロジェクト: Entroper/PolaMUD
        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);
        }
コード例 #8
0
ファイル: Combat.cs プロジェクト: Entroper/PolaMUD
 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");
     }
 }
コード例 #9
0
ファイル: Combat.cs プロジェクト: Entroper/PolaMUD
 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);
 }