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; }); } }
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; }); } }