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; }
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; }
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); }
/// <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)); }
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); }
public object Clone() { return(new Group(Units, HitPoints, AttackDamage, AttackType, Initiative, Weaknesses.ToList(), Immunities.ToList())); }
private bool IsImmune(DamageType damageType) { return(Immunities.Contains(damageType)); }
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); }
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()); } }
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(); }
public bool IsImmuneTo(Attack attack) => Immunities.Contains(attack);
public void AddImmunity(DamageTypes damageType) { Immunities.Add(damageType); }
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; }
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; }
// 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; }