Exemple #1
0
 public IItem(int sellCount, int value, string name, IItemType type, Immunities bons, IColor clr, IClassType[] spetial)
 {
     this.name       = name;
     this.sellCount  = sellCount;
     this.type       = type;
     this.value      = value;
     this.intro      = "";
     this.bonuses    = bons;
     this.color      = clr;
     this.spetiality = spetial;
 }
Exemple #2
0
 public IItem(int sellCount, int value, string name, IItemType type, IClassType[] spetial)
 {
     this.name       = name;
     this.sellCount  = sellCount;
     this.type       = type;
     this.value      = value;
     this.intro      = "";
     this.bonuses    = new Immunities();
     this.color      = new IColor(1, 1, 1);
     this.spetiality = spetial;
 }
Exemple #3
0
 public int HowMuchWouldYouHitMe(Group s)
 {
     if (Immunities.Contains(s.AttackType))
     {
         return(0);
     }
     else if (Weaknesses.Contains(s.AttackType))
     {
         return(s.EffectivePower * 2);
     }
     {
         return(s.EffectivePower);
     }
 }
        public int CalculateDamageDone(string incomingAttackType, int effectivePower)
        {
            if (Immunities != null && Immunities.Contains(incomingAttackType))
            {
                return(0);
            }

            if (Weaknesses != null && Weaknesses.Contains(incomingAttackType))
            {
                return(effectivePower * 2);
            }

            return(effectivePower);
        }
Exemple #5
0
        /// <summary>
        /// Calculate Damage amount from damage and DamageType
        /// Taking into consideration Resistances and Immunities
        /// </summary>
        /// <param name="damage"></param>
        /// <param name="damageType"></param>
        /// <returns></returns>
        public int CalculateDamage(int damage, DamageType damageType)
        {
            double totalDamage = 0d;

            if (Resistances.Contains(damageType))
            {
                totalDamage = Math.Floor((double)damage / 2d);
            }
            else if (Immunities.Contains(damageType))
            {
            }
            else
            {
                totalDamage = damage;
            }

            return(Convert.ToInt32(totalDamage));
        }
Exemple #6
0
            public int GetDamage(BattleGroup attackingGroup)
            {
                if (attackingGroup.Type == Type)
                {
                    return(0);
                }

                int damage = attackingGroup.EffectivePower;

                if (Immunities.Contains(attackingGroup.AttackType))
                {
                    damage = 0;
                }
                if (Weaknesses.Contains(attackingGroup.AttackType))
                {
                    damage *= 2;
                }
                return(damage);
            }
Exemple #7
0
 public object Clone()
 {
     return(new Group(Units, HitPoints, AttackDamage, AttackType, Initiative, Weaknesses.ToList(), Immunities.ToList()));
 }
Exemple #8
0
 private bool IsImmune(DamageType damageType)
 {
     return(Immunities.Contains(damageType));
 }
Exemple #9
0
        public int CalculateHitPointChange(List <DamageSet> damageSets)
        {
            int hpChange = 0;

            List <DamageSet> damageDone = new List <DamageSet>();

            foreach (DamageSet damageSet in damageSets)
            {
                damageDone.Add(new DamageSet(damageSet));
            }

            List <DamageReduction> damageReductions = DamageReductions.ToList();

            damageReductions.Sort((dr1, dr2) => dr2.Value.CompareTo(dr1.Value));

            List <EnergyResistance> energyResistances = EnergyResistances.ToList();

            foreach (DamageSet damageSet in damageDone)
            {
                foreach (EnergyResistance energyResistance in energyResistances)
                {
                    if (damageSet.DamageDescriptorSet.IsEnergyDamage() &&
                        damageSet.DamageDescriptorSet.Contains(energyResistance.EnergyType))
                    {
                        int numEnergyTypes   = damageSet.DamageDescriptorSet.Count;
                        int thisEnergyDamage = damageSet.Amount / numEnergyTypes;
                        int thisEnergyDamageAfterResistance = thisEnergyDamage - energyResistance.Value;
                        if (thisEnergyDamageAfterResistance < 0)
                        {
                            thisEnergyDamageAfterResistance = 0;
                        }

                        int difference = thisEnergyDamage - thisEnergyDamageAfterResistance;
                        damageSet.Amount -= difference;

                        if (damageSet.Amount < 0)
                        {
                            damageSet.Amount = 0;
                        }
                    }
                }
            }

            foreach (DamageSet damageSet in damageDone)
            {
                if (damageSet.DamageDescriptorSet.IsTyped())
                {
                    foreach (Types.Damage damageType in damageSet.DamageDescriptorSet.ToList())
                    {
                        if (Immunities.Contains(damageType))
                        {
                            damageSet.Amount = 0;
                        }
                    }

                    foreach (DamageReduction dr in damageReductions)
                    {
                        if (!dr.IsBypassedBy(damageSet.DamageDescriptorSet))
                        {
                            damageSet.Amount -= dr.Value;
                            break;
                        }
                    }

                    if (damageSet.Amount < 0)
                    {
                        damageSet.Amount = 0;
                    }
                }
            }

            foreach (DamageSet damageSet in damageDone)
            {
                hpChange -= damageSet.Amount;
            }

            return(hpChange);
        }
Exemple #10
0
        public override void ReadXML(XmlNode xmlNode)
        {
            base.ReadXML(xmlNode);

            try
            {
                foreach (XmlNode childNode in xmlNode.ChildNodes)
                {
                    if (childNode.Name == "Type")
                    {
                        try
                        {
                            Type = Methods.GetCreatureTypeFromString(childNode.InnerText);
                        }
                        catch (FormatException)
                        {
                            Type = Types.Creature.Humanoid;
                        }
                    }
                    else if (childNode.Name == "ChallengeRating")
                    {
                        ChallengeRating = Convert.ToSingle(childNode.InnerText);
                    }
                    else if (childNode.Name == "AttackSets")
                    {
                        AttackSets.Clear();
                        foreach (XmlNode attackSetNode in childNode.ChildNodes)
                        {
                            if (attackSetNode.Name == "AttackSet")
                            {
                                AttackSets.Add(new AttackSet(attackSetNode));
                            }
                        }
                    }
                    else if (childNode.Name == "Strength")
                    {
                        Strength = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "Dexterity")
                    {
                        Dexterity = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "Constitution")
                    {
                        Constitution = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "Intelligence")
                    {
                        Intelligence = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "Wisdom")
                    {
                        Wisdom = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "Charisma")
                    {
                        Charisma = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "BaseAttackBonus")
                    {
                        BaseAttackBonus = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "GrappleModifier")
                    {
                        GrappleModifier = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "HitPoints")
                    {
                        HitPoints = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "HitDice")
                    {
                        HitDice = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "HitDieType")
                    {
                        HitDieType = Methods.GetDieTypeFromString(childNode.InnerText);
                    }
                    else if (childNode.Name == "ArmorClass")
                    {
                        ArmorClass = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "TouchArmorClass")
                    {
                        TouchArmorClass = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "FlatFootedArmorClass")
                    {
                        FlatFootedArmorClass = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "Speed")
                    {
                        Speed.ReadXML(childNode);
                    }
                    else if (childNode.Name == "FortitudeSave")
                    {
                        FortitudeSave = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "ReflexSave")
                    {
                        ReflexSave = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "WillSave")
                    {
                        WillSave = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "Feats")
                    {
                        foreach (XmlNode featNode in childNode.ChildNodes)
                        {
                            if (featNode.Name == "Feat")
                            {
                                Feats.Add(featNode.InnerText);
                            }
                        }
                    }
                    else if (childNode.Name == "Space")
                    {
                        Space = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "Reach")
                    {
                        Reach = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "Size")
                    {
                        Size = Methods.GetSizeFromString(childNode.InnerText);
                    }
                    else if (childNode.Name == "DamageReductions")
                    {
                        foreach (XmlNode drNode in childNode.ChildNodes)
                        {
                            if (drNode.Name == "DamageReduction")
                            {
                                DamageReduction dr = new DamageReduction();
                                dr.ReadXML(drNode);
                                DamageReductions.Add(dr);
                            }
                        }
                    }
                    else if (childNode.Name == "Immunities")
                    {
                        Immunities.ReadXML(childNode);
                    }
                    else if (childNode.Name == "EnergyResistances")
                    {
                        foreach (XmlNode erNode in childNode.ChildNodes)
                        {
                            if (erNode.Name == "EnergyResistance")
                            {
                                EnergyResistance er = new EnergyResistance();
                                er.ReadXML(erNode);
                                EnergyResistances.Add(er);
                            }
                        }
                    }
                    else if (childNode.Name == "SpellResistance")
                    {
                        SpellResistance = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "FastHealing")
                    {
                        FastHealing = Convert.ToInt32(childNode.InnerText);
                    }
                    else if (childNode.Name == "SpecialAttacks")
                    {
                        SpecialAttacks = childNode.InnerText;
                    }
                    else if (childNode.Name == "SpecialQualities")
                    {
                        foreach (string specialQuality in childNode.InnerText.Split(','))
                        {
                            SpecialQualities.Add(specialQuality.Trim());
                        }
                    }
                }
            }
            catch (XmlException e)
            {
                MessageBox.Show(e.ToString());
            }
        }
Exemple #11
0
        public override void WritePropertyXML(XmlWriter xmlWriter)
        {
            base.WritePropertyXML(xmlWriter);

            xmlWriter.WriteStartElement("Type");
            xmlWriter.WriteString(Methods.GetCreatureTypeString(Type));
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("ChallengeRating");
            xmlWriter.WriteString(ChallengeRating.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("AttackSets");
            foreach (AttackSet attackSet in AttackSets)
            {
                attackSet.WriteXML(xmlWriter);
            }
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Strength");
            xmlWriter.WriteString(Strength.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Dexterity");
            xmlWriter.WriteString(Dexterity.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Constitution");
            xmlWriter.WriteString(Constitution.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Intelligence");
            xmlWriter.WriteString(Intelligence.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Wisdom");
            xmlWriter.WriteString(Wisdom.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Charisma");
            xmlWriter.WriteString(Charisma.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("BaseAttackBonus");
            xmlWriter.WriteString(BaseAttackBonus.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("GrappleModifier");
            xmlWriter.WriteString(GrappleModifier.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("HitPoints");
            xmlWriter.WriteString(HitPoints.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("HitDice");
            xmlWriter.WriteString(HitDice.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("HitDieType");
            xmlWriter.WriteString(Methods.GetDieTypeString(HitDieType));
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("ArmorClass");
            xmlWriter.WriteString(ArmorClass.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("TouchArmorClass");
            xmlWriter.WriteString(TouchArmorClass.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("FlatFootedArmorClass");
            xmlWriter.WriteString(FlatFootedArmorClass.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Speed");
            Speed.WriteXML(xmlWriter);
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("FortitudeSave");
            xmlWriter.WriteString(FortitudeSave.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("ReflexSave");
            xmlWriter.WriteString(ReflexSave.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("WillSave");
            xmlWriter.WriteString(WillSave.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Feats");
            foreach (string feat in Feats)
            {
                xmlWriter.WriteStartElement("Feat");
                xmlWriter.WriteString(feat);
                xmlWriter.WriteEndElement();
            }
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Space");
            xmlWriter.WriteString(Space.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Reach");
            xmlWriter.WriteString(Reach.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Size");
            xmlWriter.WriteString(Methods.GetSizeString(Size));
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("DamageReductions");
            foreach (DamageReduction dr in DamageReductions)
            {
                dr.WriteXML(xmlWriter);
            }
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("Immunities");
            Immunities.WriteXML(xmlWriter);
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("EnergyResistances");
            foreach (EnergyResistance er in EnergyResistances)
            {
                er.WriteXML(xmlWriter);
            }
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("SpellResistance");
            xmlWriter.WriteString(SpellResistance.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("FastHealing");
            xmlWriter.WriteString(FastHealing.ToString());
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("SpecialAttacks");
            xmlWriter.WriteString(SpecialAttacks);
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("SpecialQualities");
            xmlWriter.WriteString(String.Join(", ", SpecialQualities));
            xmlWriter.WriteEndElement();
        }
Exemple #12
0
 public bool IsImmuneTo(Attack attack) => Immunities.Contains(attack);
Exemple #13
0
 public void AddImmunity(DamageTypes damageType)
 {
     Immunities.Add(damageType);
 }
Exemple #14
0
    void UpdateStats(bool reapply = false)
    {
        //set each stat to its base then apply effects
        maxHP = baseHP;
        maxMana = baseMana;
        movespeed = baseMove;
        armourDamageReduction = baseArmour;
        init = baseInit;
        maxAP = baseAP;
        damageDealtMod = 1;
        damageRecievedMod = 1;
        healingRecievedMod = 1;
        healingDealtMod = 1;
        cooldownSpeed = 1;
        shield = 0;
        dodgeChance = baseDodge;
        blockChance = baseBlock;
        sight = baseSight;
        immune = baseImmune;

        //apply the effects
        foreach (Effect eff in myEffects)
        {
            eff.RunEffect(this);
        }

        // if maxhp is now lower than current hp
        if (hp > maxHP)
        {
            hp = maxHP;
        }

        // if maxmana is now lower than current mana
        if (mana > maxMana)
        {
            mana = maxMana;
        }

        //stop the unit gaining hp
        if (damageDealtMod < 0) {
            damageDealtMod = 0;
        }
        //stop the unit gaining hp
        if (damageRecievedMod < 0) {
            damageRecievedMod = 0;
        }

        //guard points
        blockChance += 4 * guardPoints;

        // reset move and action
        remainingMove = movespeed;
        actionPoints = maxAP;
    }
Exemple #15
0
    void Start()
    {
        hp = maxHP;
        mana = maxMana;
        remainingMove = movespeed;
        actionPoints = maxAP;
        healthBar = transform.FindChild("UnitCanvas").FindChild ("HealthBar").GetComponent<Image> ();
        hpText = transform.FindChild("UnitCanvas").FindChild ("HPText").GetComponent<Text> ();

        manaBar = transform.FindChild("UnitCanvas").FindChild ("ManaBar").GetComponent<Image> ();
        manaText = transform.FindChild("UnitCanvas").FindChild ("ManaText").GetComponent<Text> ();

        shieldBar = transform.FindChild("UnitCanvas").FindChild ("ShieldBar").GetComponent<Image> ();

        //update status bars
        UpdateHealthBar ();
        UpdateManaBar();

        baseImmune.Stun = baseImmuneStun;
        baseImmune.Snare = baseImmuneSnare;
        baseImmune.Sleep = baseImmuneSleep;

        immune = baseImmune;
    }
Exemple #16
0
    // applies the specified effect, or stacks and refreshes it if it is already on
    public bool ApplyEffect(Effect eff)
    {
        //first check if the unit is immune
        if (eff.description.Contains ("Stunned") && immune.Stun) {
            ShowCombatText("Immune", statusCombatText);
            return false;
        } else if (eff.description.Contains ("Snare") && immune.Snare) {
            ShowCombatText("Immune", statusCombatText);
            return false;
        } else if (eff.description.Contains ("Sleep") && immune.Sleep) {
            ShowCombatText("Immune", statusCombatText);
            return false;
        }

        //need to reaply all the buffs

        //set each stat to its base then apply effects
        maxHP = baseHP;
        maxMana = baseMana;
        movespeed = baseMove;
        armourDamageReduction = baseArmour;
        init = baseInit;
        maxAP = baseAP;
        damageDealtMod = 1;
        damageRecievedMod = 1;
        healingRecievedMod = 1;
        healingDealtMod = 1;
        cooldownSpeed = 1;
        bool alreadyHad = false;
        shield = 0;
        dodgeChance = baseDodge;
        blockChance = baseBlock;
        sight = baseSight;
        immune = baseImmune;

        //loop through all the current effects
        foreach (Effect currentEffect in myEffects) {
            // if the new effect already exists add a stack
            if (currentEffect.name.Contains(eff.name)) {
                currentEffect.AddStack();
                alreadyHad = true;
            }
            currentEffect.RunEffect(this, true);
        }

        //if the unit didnt already have the effect add it
        if (!alreadyHad) {
            //if its a shield of damage recieved effect they need to be added at the start
            if (eff.description.Contains("Damage Shield") || eff.description.Contains("Damage Recieved Mod")) {
                myEffects.Insert(0, eff);
            } else {
                myEffects.Add(eff);
            }
            eff.RunEffect(this, true);
        }

        //stop the unit gaining hp
        if (damageDealtMod < 0) {
            damageDealtMod = 0;
        }
        //stop the unit gaining hp
        if (damageRecievedMod < 0) {
            damageRecievedMod = 0;
        }

        //guard points
        blockChance += 4 * guardPoints;

        ShowDebuffs ();

        return true;
    }