private CombatActionModel applyRegenAbilityEffectToCombatant(AbilityEffectType abilityEffectType, int abilityID,
                                                                     int abilityCombatantOwnerID, int abilityAmount, CombatantModel combatantModel, int turnsRemaining, bool isCrit)
        {
            // Don't consider stat modifiers for regen abilities (if an enemy casts increased spell damage on you,
            // we don't want it to boost the healing you receive)
            CombatActionType combatActionType = CombatActionType.None;

            switch (abilityEffectType)
            {
            case AbilityEffectType.HealthRegen:
                combatantModel.SetCurrentHealth(combatantModel.CurrentHealth + abilityAmount);
                combatActionType = CombatActionType.RegenHealth;
                break;

            case AbilityEffectType.ManaRegen:
                combatantModel.SetCurrentMana(combatantModel.CurrentMana + abilityAmount);
                combatActionType = CombatActionType.RegenMana;
                break;

            default:
                throw new Exception("Invalid AbilityEffectType");
            }
            return(new CombatActionModel(abilityCombatantOwnerID, combatActionType, abilityID,
                                         combatantModel.ID, abilityAmount, turnsRemaining, isCrit));
        }
Beispiel #2
0
 public CharacterAbilityGroupInterval(AbilityEffectType abilityEffectType, CharacterTalent characterTalent, XElement abilityElementGroup) :
     base(abilityEffectType, characterTalent, abilityElementGroup)
 {
     // too many overlapping intervals could cause hitching? maybe randomize a little
     interval    = abilityElementGroup.GetAttributeFloat("interval", 0f);
     effectDelay = abilityElementGroup.GetAttributeFloat("effectdelay", 0f);
 }
        private CombatActionModel applyDamageAbilityEffectToCombatant(AbilityEffectType abilityEffectType, int abilityID,
                                                                      int abilityCombatantOwnerID, int abilityAmount, CombatantModel combatantModel, int turnsRemaining, bool isCrit)
        {
            StatModifiersDeltas statModifiersDeltas = combatantModel.StatModifiersDeltas;
            CombatActionType    combatActionType    = CombatActionType.None;
            int damageDeltaWithStatModifiers        = 0;

            switch (abilityEffectType)
            {
            case AbilityEffectType.MeleeDamage:
                damageDeltaWithStatModifiers = getDamageDeltaWithStatMod(statModifiersDeltas.ArmorStatModifiersDelta, abilityAmount);
                combatActionType             = CombatActionType.ReceiveMeleeDamage;
                break;

            case AbilityEffectType.SpellDamage:
                damageDeltaWithStatModifiers = getDamageDeltaWithStatMod(statModifiersDeltas.SpellResistStatModifiersDelta, abilityAmount);
                combatActionType             = CombatActionType.ReceiveSpellDamage;
                break;

            default:
                throw new Exception("Invalid AbilityEffectType");
            }
            combatantModel.SetCurrentHealth(combatantModel.CurrentHealth + damageDeltaWithStatModifiers);
            Logging.Log.Info("Combatant ID : " + combatantModel.ID + " on team " + combatantModel.TeamID +
                             " receives damage: " + damageDeltaWithStatModifiers + ".  New health = " + combatantModel.CurrentHealth);
            return(new CombatActionModel(
                       abilityCombatantOwnerID, combatActionType, abilityID, combatantModel.ID, damageDeltaWithStatModifiers,
                       turnsRemaining, isCrit));
        }
Beispiel #4
0
 // Constructor
 public AbilityEffect(
     AbilityEffectType effectType,
     bool[] boolParams     = null,
     float[] floatParams   = null,
     string[] stringParams = null
     ) : base(boolParams, floatParams, stringParams)
 {
     this.effectType = effectType;
 }
Beispiel #5
0
 public EffectDatabase.AbilityEff.AbilityEffect GetEffectNew(AbilityEffectType effectType)
 {
     for (int i = 0; i < effectsNew.Count; i++)
     {
         if (effectsNew[i].effectType == effectType)
         {
             return(effectsNew[i]);
         }
     }
     return(null);
 }
Beispiel #6
0
 public AbilityEffect GetEffect(AbilityEffectType effectType)
 {
     for (int i = 0; i < effects.Length; i++)
     {
         if (effects[i].effectType == effectType)
         {
             return(effects[i]);
         }
     }
     return(null);
 }
Beispiel #7
0
    public List <EffectDatabase.AbilityEff.AbilityEffect> GetEffectsNew(AbilityEffectType effectType)
    {
        List <EffectDatabase.AbilityEff.AbilityEffect> effects = new List <EffectDatabase.AbilityEff.AbilityEffect>();

        for (int i = 0; i < effectsNew.Count; i++)
        {
            if (effectsNew[i].effectType == effectType)
            {
                effects.Add(effectsNew[i]);
            }
        }
        return(effects);
    }
        public CharacterAbilityGroup(AbilityEffectType abilityEffectType, CharacterTalent characterTalent, XElement abilityElementGroup)
        {
            AbilityEffectType = abilityEffectType;
            CharacterTalent   = characterTalent;
            Character         = CharacterTalent.Character;
            maxTriggerCount   = abilityElementGroup.GetAttributeInt("maxtriggercount", int.MaxValue);
            foreach (XElement subElement in abilityElementGroup.Elements())
            {
                switch (subElement.Name.ToString().ToLowerInvariant())
                {
                case "abilities":
                    LoadAbilities(subElement);
                    break;

                case "conditions":
                    LoadConditions(subElement);
                    break;
                }
            }
        }
        private void appendDeltasByEffectType(int amount, AbilityEffectType abilityEffectType)
        {
            switch (abilityEffectType)
            {
            case AbilityEffectType.ArmorModifier: ArmorStatModifiersDelta += amount; break;

            case AbilityEffectType.SpellResistModifier: SpellResistStatModifiersDelta += amount; break;

            case AbilityEffectType.MeleeDamageModifier: MeleeDamageStatModifiersDelta += amount; break;

            case AbilityEffectType.MeleeCrit: MeleeCritStatModifiersDelta += amount; break;

            case AbilityEffectType.SpellDamageModifier: SpellDamageStatModifiersDelta += amount; break;

            case AbilityEffectType.SpellCrit: SpellCritStatModifiersDelta += amount; break;

            case AbilityEffectType.AbilityCoolDownTurnsPercentModifier: AbilityCoolDownTurnsPercentModifier += amount; break;

            case AbilityEffectType.AbilityCastTurnsPercentModifier: AbilityCastTurnsPercentModifierDelta += amount; break;
            }
        }
        protected override void copyExtendedProperties(ItemModel sourceItemModel)
        {
            AbilityItemModel abilityItemModel = sourceItemModel as AbilityItemModel;

            if (abilityItemModel == null)
            {
                throw new InvalidCastException("Invalid type.");
            }
            AbilityEffectType    = abilityItemModel.AbilityEffectType;
            AbilityTargetType    = abilityItemModel.AbilityTargetType;
            AbilityDurationType  = abilityItemModel.AbilityDurationType;
            CastTurns            = abilityItemModel.CastTurns;
            CoolDownTurns        = abilityItemModel.CoolDownTurns;
            CoolDownTurnsElapsed = abilityItemModel.CoolDownTurnsElapsed;
            ImmediateAmout       = abilityItemModel.ImmediateAmout;
            IsSpellBased         = abilityItemModel.IsSpellBased;

            if (AbilityDurationType == AbilityDurationType.MultiTurn)
            {
                AbilityDurationData = abilityItemModel.AbilityDurationData.Clone(false);
            }
        }
        public AbilityItemModel(int ID, string name, string description, RarityType rarityType, int stackedCount, int level,
                                AbilityEffectType abilityEffectType, AbilityTargetType abilityTargetType, AbilityDurationType abilityDurationType,
                                int castTurns, int coolDownTurns, int immediateAmount, bool isSpellBased, int perTickAmount, int turnsPerTick, int maxTicks) : base(ID, name, description, level, rarityType, stackedCount)
        {
            this.AbilityEffectType   = abilityEffectType;
            this.AbilityTargetType   = abilityTargetType;
            this.AbilityDurationType = abilityDurationType;
            this.CastTurns           = castTurns;
            this.CoolDownTurns       = coolDownTurns;
            this.ImmediateAmout      = immediateAmount;
            this.IsSpellBased        = isSpellBased;

            if (abilityDurationType == AbilityDurationType.MultiTurn)
            {
                this.AbilityDurationData = new AbilityDurationData();
                this.AbilityDurationData.OriginAbilityID   = ID;
                this.AbilityDurationData.PerTickAmount     = perTickAmount;
                this.AbilityDurationData.TurnsPerTick      = turnsPerTick;
                this.AbilityDurationData.MaxTicks          = maxTicks;
                this.AbilityDurationData.AbilityEffectType = abilityEffectType;
                this.AbilityDurationData.AbilityTargetType = abilityTargetType;
            }
        }
Beispiel #12
0
 public AbilityEffect(AbilityEffectType type, int parameter)
 {
     Type = type;
     Parameter = parameter;
 }
Beispiel #13
0
 public void SetAbilityEffectType(AbilityEffectType aet)
 {
     abilityEffectType = aet;
 }
 public void RemoveModifier(int amount, AbilityEffectType abilityEffectType)
 {
     appendDeltasByEffectType(-amount, abilityEffectType);
 }
 public void AddModifier(int amount, AbilityEffectType abilityEffectType)
 {
     appendDeltasByEffectType(amount, abilityEffectType);
 }
Beispiel #16
0
 public AbilityEffect(AbilityEffectType type)
 {
     Type = type;
     Parameter = null;
 }
 public CharacterAbilityGroupEffect(AbilityEffectType abilityEffectType, CharacterTalent characterTalent, XElement abilityElementGroup) :
     base(abilityEffectType, characterTalent, abilityElementGroup)
 {
 }