public Func <LiveImplementation.FullCombatCharacter, List <LiveImplementation.FullCombatCharacter>, LiveImplementation.CombatData, List <Interfaces.IEffect> > executeCommand(Interfaces.SelectedCommand command)
        {
            AbilityInfo ai;

            switch (command.commandName)
            {
            case "Magic Dart":
                ai = new AbilityInfo()
                {
                    name             = "Magic Dart",
                    message          = "{Name} has dealt {Damage} to {Target} with a Magic Dart.",
                    ranged           = true,
                    damageMultiplier = 5,
                    maxTargets       = 1,
                    damageType       = AbilityInfo.DamageType.Magical
                };

                return(ai.getCommand());

            case "Magic Missile":
                ai = new AbilityInfo()
                {
                    name               = "Magic Dart",
                    message            = "{Name} has dealt {Damage} to {Target} with a Magic Missile.",
                    ranged             = true,
                    damageMultiplier   = 15,
                    maxTargets         = 1,
                    mpCost             = 1,
                    requiredClassLevel = 3,
                    damageType         = AbilityInfo.DamageType.Magical
                };

                return(ai.getCommand());

            case "Arcane Prison":
                ai = new AbilityInfo()
                {
                    name               = "Arcane Prison",
                    message            = "{Name} has sealed {Target} in an arcane prison.",
                    ranged             = false,
                    maxTargets         = 1,
                    cooldown           = "Arcane Prison",
                    cooldownDuration   = 180,
                    requiredClassLevel = 7,
                    preExecute         = ((FullCombatCharacter source, List <FullCombatCharacter> target, CombatData combatData, List <IEffect> effects, AbilityInfo abilityInfo) =>
                    {
                        foreach (FullCombatCharacter t in target)
                        {
                            if (!BasicModificationsGeneration.hasMod(t, "Disarmed"))
                            {
                                List <PlayerModels.CombatDataModels.CombatConditionModel> conditions = new List <PlayerModels.CombatDataModels.CombatConditionModel>();
                                conditions.Add(new PlayerModels.CombatDataModels.CombatConditionModel()
                                {
                                    name = "Time",
                                    state = (source.nextAttackTime + 100).ToString()
                                });
                                t.mods.Add(new PlayerModels.CombatDataModels.CombatModificationsModel()
                                {
                                    name = "Arcane Prison",
                                    conditions = conditions
                                });
                            }
                        }
                        return(AbilityInfo.ProcessResult.Normal);
                    })
                };

                return(ai.getCommand());

            default:
                return((FullCombatCharacter source, List <FullCombatCharacter> target, CombatData combatData) =>
                {
                    List <IEffect> effects = new List <IEffect>();
                    return effects;
                });
            }
        }
Exemple #2
0
        public Func <LiveImplementation.FullCombatCharacter, List <LiveImplementation.FullCombatCharacter>, LiveImplementation.CombatData, List <Interfaces.IEffect> > executeCommand(Interfaces.SelectedCommand command)
        {
            AbilityInfo ai;

            switch (command.commandName)
            {
            case "Disarming Blow":
                ai = new AbilityInfo()
                {
                    name               = "Disarming Blow",
                    message            = "{Name} has dealt {Damage} damage to {Target} with a disarming blow.",
                    requiredClassLevel = 3,
                    damageMultiplier   = 5,
                    damageType         = AbilityInfo.DamageType.Physical,
                    cooldown           = "Disarming Blow",
                    cooldownDuration   = 60,
                    preExecute         = ((FullCombatCharacter source, List <FullCombatCharacter> target, CombatData combatData, List <IEffect> effects, AbilityInfo abilityInfo) =>
                    {
                        foreach (FullCombatCharacter t in target)
                        {
                            if (!BasicModificationsGeneration.hasMod(t, "Disarmed"))
                            {
                                List <PlayerModels.CombatDataModels.CombatConditionModel> conditions = new List <PlayerModels.CombatDataModels.CombatConditionModel>();
                                conditions.Add(new PlayerModels.CombatDataModels.CombatConditionModel()
                                {
                                    name = "Time",
                                    state = (source.nextAttackTime + 60).ToString()
                                });
                                t.mods.Add(new PlayerModels.CombatDataModels.CombatModificationsModel()
                                {
                                    name = "Disarmed",
                                    conditions = conditions
                                });
                            }
                        }
                        return(AbilityInfo.ProcessResult.Normal);
                    })
                };

                return(ai.getCommand());

            case "One-Two Punch":
                ai = new AbilityInfo()
                {
                    name               = "One-Two Punch",
                    message            = "{Name} has dealt {HitCount}x{Damage} damage to {Target} with a One-Two Punch.",
                    requiredClassLevel = 7,
                    damageMultiplier   = 5,
                    damageCoefficient  = 0.75f,
                    damageType         = AbilityInfo.DamageType.Physical,
                    cooldown           = "One-Two Punch",
                    cooldownDuration   = 120,
                    hits               = 2
                };

                return(ai.getCommand());

            case "Sweep":
                ai = new AbilityInfo()
                {
                    name                  = "Sweep",
                    message               = "{Name} dealt damage to all enemies with a sweeping blow!",
                    requiredClassLevel    = 9,
                    maxTargets            = 10,
                    damageMultiplier      = 5,
                    damageCoefficient     = 0.5f,
                    attackTimeCoefficient = 1.5f,
                    damageType            = AbilityInfo.DamageType.Physical,
                    cooldown              = "Sweep",
                    cooldownDuration      = 180
                };

                return(ai.getCommand());

            case "Preemptive Strike":
                ai = new AbilityInfo()
                {
                    name               = "Preemptive Strike",
                    message            = "{Name} dealt {Damage} damage to {Target} with a Preemptive Strike!",
                    requiredClassLevel = 13,
                    damageMultiplier   = 5,
                    damageCoefficient  = 1.5f,
                    damageType         = AbilityInfo.DamageType.Physical,
                    cooldown           = "Preemptive Strike",
                    cooldownDuration   = 120,
                    preExecute         = ((FullCombatCharacter source, List <FullCombatCharacter> target, CombatData combatData, List <IEffect> effects, AbilityInfo abilityInfo) =>
                    {
                        FullCombatCharacter currentTarget = target[0];
                        foreach (FullCombatCharacter t in target)
                        {
                            if (currentTarget.nextAttackTime > t.nextAttackTime)
                            {
                                currentTarget = t;
                            }
                        }

                        target.Clear();
                        target.Add(currentTarget);

                        return(AbilityInfo.ProcessResult.Normal);
                    })
                };

                return(ai.getCommand());

            case "Vicious Blow":
                ai = new AbilityInfo()
                {
                    name               = "Vicious Blow",
                    message            = "{Name} dealt {Damage} damage to {Target} with a Vicious Blow!",
                    requiredClassLevel = 15,
                    damageMultiplier   = 5,
                    damageCoefficient  = 1.5f,
                    damageType         = AbilityInfo.DamageType.Physical,
                    cooldown           = "Vicious Blow",
                    cooldownDuration   = 180,
                    preExecute         = ((FullCombatCharacter source, List <FullCombatCharacter> target, CombatData combatData, List <IEffect> effects, AbilityInfo abilityInfo) =>
                    {
                        FullCombatCharacter currentTarget = target[0];

                        if (currentTarget.hp * 2 > currentTarget.maxHP)
                        {
                            abilityInfo.message = "{Name}'s vicious blow missed {Target}!";
                            abilityInfo.damageCoefficient = 0.0f;
                        }

                        return(AbilityInfo.ProcessResult.Normal);
                    })
                };

                return(ai.getCommand());

            case "Adrenaline":
                ai = new AbilityInfo()
                {
                    name               = "Adrenaline",
                    message            = "Adrenaline pumps through {Name}!",
                    requiredClassLevel = 17,
                    oncePerRest        = "Adrenaline",
                    preExecute         = ((FullCombatCharacter source, List <FullCombatCharacter> target, CombatData combatData, List <IEffect> effects, AbilityInfo abilityInfo) =>
                    {
                        source.mods.Add(BasicModificationsGeneration.getAdrenalineModification((source.nextAttackTime + 60).ToString()));

                        return(AbilityInfo.ProcessResult.Normal);
                    })
                };

                return(ai.getCommand());

            default:
                return((FullCombatCharacter source, List <FullCombatCharacter> target, CombatData combatData) =>
                {
                    List <IEffect> effects = new List <IEffect>();
                    return effects;
                });
            }
        }