private static Ability Joker(uint cooldown) { return(new Ability { Name = string.Empty, Cooldown = (int)cooldown, Type = Ability.Types.AbilityType.Support, ProcessEffects = (caim, targetIndex, raidActions) => { if (caim.GlobalState.ContainsKey("beginning_of_joker")) { EndOfJoker().Cast(caim, raidActions); caim.GlobalState.Remove("beginning_of_joker"); caim.Raid.Allies.ApplyStatusEffectsFromTemplate( new StatusEffectSnapshot { IsBuff = true, TurnDuration = 3, }, raidActions, (StatusEffectLibrary.AttackUpSummon, ModifierLibrary.AttackBoost, 30), (StatusEffectLibrary.DefenseUpSummon, ModifierLibrary.FlatDefenseBoost, 30), (StatusEffectLibrary.TripleAttackRateUpSummon, ModifierLibrary.FlatTripleAttackRateBoost, 20), (StatusEffectLibrary.DamageCapUpSummon, ModifierLibrary.FlatDamageCapBoost, 10), (StatusEffectLibrary.Uplifted, ModifierLibrary.ChargeBarSpedUp, 15)); caim.Raid.Allies.ApplyStatusEffects( new StatusEffectSnapshot { Id = StatusEffectLibrary.RevitalizeSummon, IsBuff = true, Strength = 500, TurnDuration = 3, ExtraData = new Revitalize { BoostChargeGaugeAtFullHp = true, HealingCap = 500, }.ToByteString(), }, raidActions); caim.Raid.Allies.ApplyStatusEffects( new StatusEffectSnapshot { Id = StatusEffectLibrary.Veil, IsBuff = true, TurnDuration = int.MaxValue, }, raidActions); } else { var lastAbility = caim.Raid.GetLastAbilityUsed(heroIdToExclude: caim.Hero.Id); lastAbility?.Cast(caim, raidActions, doNotRenderCastAbilityEffect: true); caim.GlobalState["beginning_of_joker"] = TypedValue.FromBool(true); } }, DoNotRenderAbilityCastEffect = true, });
public static Hero NewInstance() { return(new Hero { Id = ByteString.CopyFrom(Id.ToByteArray()), Name = "Maria Theresa", Races = { Race.Draph }, Gender = Gender.Female, MaxAttack = 11222, MaxHp = 2222, MaxLevel = 80, BaseDoubleAttackRate = 6, BaseTripleAttackRate = 4.5, Element = Element.Water, WeaponProficiencies = { EquipmentType.Staff, EquipmentType.Sword }, AvailablePerkIds = { ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.HpBoost, ExtendedMasteryPerks.DoubleAttackRateBoost, ExtendedMasteryPerks.DebuffResistanceBoost, ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.HpBoost, ExtendedMasteryPerks.FireDamageReduction, ExtendedMasteryPerks.CriticalHitRateBoost, ExtendedMasteryPerks.HpBoost, ExtendedMasteryPerks.HpBoost, ExtendedMasteryPerks.CriticalHitRateBoost, ExtendedMasteryPerks.ChargeAttackDamageBoost, ExtendedMasteryPerks.SupportSkill, }, PassiveAbilities = { new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.SupportSkill, Name = "Aurum Sword", Description = "Water damage to all foes when an ally casts a buff-removing skill. Inflict Status Unrighteousness (Local) 3.pngUnrighteousness.", }, new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.BacklineEffect, Name = "Justice Reversed", Description = "When Sub Ally: Water damage to all foes when a Water ally casts a buff-removing skill. Inflict Attack Down and Defense Down.", }, new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.TriggerOnEnteringFrontline, Name = "The Empress Upright", Description = "When Switching to Main Ally: All Water allies gain Status Righteous Indignation.", }, }, ModelMetadata = { new ModelMetadata { JsAssetPath = "npc/ebbe21c2-f8ef-44e6-b947-b1323ef8c070/model/0/npc_3040160000_02.js", ConstructorName = "mc_npc_3040160000_02", ImageAssets = { new ImageAsset { Name = "npc_3040160000_02_a", Path = "npc/ebbe21c2-f8ef-44e6-b947-b1323ef8c070/model/0/npc_3040160000_02_a.png", }, new ImageAsset { Name = "npc_3040160000_02_b", Path = "npc/ebbe21c2-f8ef-44e6-b947-b1323ef8c070/model/0/npc_3040160000_02_b.png", }, }, }, }, OnHitEffectModelMetadata = { new ModelMetadata { JsAssetPath = "npc/ebbe21c2-f8ef-44e6-b947-b1323ef8c070/model/0/phit_3040160000.js", ConstructorName = "mc_phit_3040160000_effect", ImageAssets = { new ImageAsset { Name = "phit_3040160000", Path = "npc/ebbe21c2-f8ef-44e6-b947-b1323ef8c070/model/0/phit_3040160000.png", }, }, }, }, SpecialAbility = new SpecialAbility { Name = string.Empty, HitCount = { 4 }, ModelMetadata = { new ModelMetadata { JsAssetPath = "npc/ebbe21c2-f8ef-44e6-b947-b1323ef8c070/model/0/nsp_3040160000_02_s2.js", ConstructorName = "mc_nsp_3040160000_02_s2_special", ImageAssets = { new ImageAsset { Name = "nsp_3040160000_02_s2_a", Path = "npc/ebbe21c2-f8ef-44e6-b947-b1323ef8c070/model/0/nsp_3040160000_02_s2_a.png", }, new ImageAsset { Name = "nsp_3040160000_02_s2_b", Path = "npc/ebbe21c2-f8ef-44e6-b947-b1323ef8c070/model/0/nsp_3040160000_02_s2_b.png", }, new ImageAsset { Name = "nsp_3040160000_02_s2_c", Path = "npc/ebbe21c2-f8ef-44e6-b947-b1323ef8c070/model/0/nsp_3040160000_02_s2_c.png", }, }, }, }, }, Abilities = { Abraxas(cooldown: 6), Uguale(cooldown: 8), Fedelta(cooldown: 5), }, UpgradedAbilities = { new AbilityUpgrade { RequiredLevel = 55, Ability = Abraxas(cooldown: 5), UpgradedAbilityIndex = 0, }, new AbilityUpgrade { RequiredLevel = 75, Ability = Uguale(cooldown: 7), UpgradedAbilityIndex = 1, }, }, OnEnteringFrontline = (mariaTheresa, raidActions) => { if (mariaTheresa.GlobalState.ContainsKey("nonce")) { return; } mariaTheresa.GlobalState["nonce"] = TypedValue.FromBool(true); TheEmpressUpright().Cast(mariaTheresa, raidActions); }, OnAbilityEnd = (mariaTheresa, ability, raidActions) => { if (!mariaTheresa.IsAlive()) { return; } if (ability.Effects.Where(e => e.Type == AbilityEffect.Types.AbilityEffectType.ApplyStatusEffect) .Any(e => ApplyStatusEffect.ParseFrom(e.ExtraData).Id == StatusEffectLibrary.Dispel)) { AurumSword().Cast(mariaTheresa, mariaTheresa.CurrentTargetPositionInFrontline, raidActions); } }, OnOtherAllyAbilityEnd = (mariaTheresa, caster, ability, raidActions) => { if (!mariaTheresa.IsAlive()) { return; } if (ability.Effects.Where(e => e.Type == AbilityEffect.Types.AbilityEffectType.ApplyStatusEffect) .Any(e => ApplyStatusEffect.ParseFrom(e.ExtraData).Id == StatusEffectLibrary.Dispel)) { if (mariaTheresa.PositionInFrontline >= 4) { JusticeReversed().Cast(mariaTheresa, raidActions); } else { AurumSword().Cast(mariaTheresa, raidActions); } } }, OnDeath = (mariaTheresa, raidActions) => { }, }); }
public static Hero NewInstance() { return(new Hero { Id = ByteString.CopyFrom(Id.ToByteArray()), Name = "Caim", Races = { Race.Human }, Gender = Gender.Male, MaxAttack = 10000, MaxHp = 1412, MaxLevel = 80, BaseDoubleAttackRate = 6, BaseTripleAttackRate = 4.5, Element = Element.Earth, WeaponProficiencies = { (EquipmentType[])Enum.GetValues(typeof(EquipmentType)) }, AvailablePerkIds = { ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.HpBoost, ExtendedMasteryPerks.DoubleAttackRateBoost, ExtendedMasteryPerks.CriticalHitRateBoost, ExtendedMasteryPerks.HealingBoost, ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.HpBoost, ExtendedMasteryPerks.DoubleAttackRateBoost, ExtendedMasteryPerks.CriticalHitRateBoost, ExtendedMasteryPerks.HealingBoost, ExtendedMasteryPerks.DebuffSuccessRateBoost, ExtendedMasteryPerks.DebuffSuccessRateBoost, ExtendedMasteryPerks.HostilityBoost, ExtendedMasteryPerks.HostilityBoost, ExtendedMasteryPerks.SupportSkill, }, PassiveAbilities = { new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.SupportSkill, Name = "Wild Card", Description = "Subject to all specialty weapon-, style-, and race-related weapon skills", }, new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.BacklineEffect, Name = "The Hanged Man Reversed", Description = "When Sub Ally: When all equipped weapons are different, boost to Earth allies' ATK, DEF and damage cap", }, new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.TriggerOnEnteringFrontline, Name = "The Fool Upright ", Description = "When Switching to Main Ally: Caim gains 1-4 ranks of Spade, Heart, Diamond, Club each.", }, }, ModelMetadata = { new ModelMetadata { JsAssetPath = "npc/411f6619-d3f5-4044-b290-34c39cbef856/model/0/npc_3040164000_02.js", ConstructorName = "mc_npc_3040164000_02", ImageAssets = { new ImageAsset { Name = "npc_3040164000_02", Path = "npc/411f6619-d3f5-4044-b290-34c39cbef856/model/0/npc_3040164000_02.png", }, }, }, }, OnHitEffectModelMetadata = { new ModelMetadata { JsAssetPath = "npc/411f6619-d3f5-4044-b290-34c39cbef856/model/0/phit_3040164000.js", ConstructorName = "mc_phit_3040164000_effect", ImageAssets = { new ImageAsset { Name = "phit_3040164000", Path = "npc/411f6619-d3f5-4044-b290-34c39cbef856/model/0/phit_3040164000.png", }, }, }, }, SpecialAbility = new SpecialAbility { Name = string.Empty, HitCount = { 1 }, ModelMetadata = { new ModelMetadata { JsAssetPath = "npc/411f6619-d3f5-4044-b290-34c39cbef856/model/0/nsp_3040164000_02_s2.js", ConstructorName = "mc_nsp_3040164000_02_s2_special", ImageAssets = { new ImageAsset { Name = "nsp_3040164000_02_s2_a", Path = "npc/411f6619-d3f5-4044-b290-34c39cbef856/model/0/nsp_3040164000_02_s2_a.png", }, new ImageAsset { Name = "nsp_3040164000_02_s2_b", Path = "npc/411f6619-d3f5-4044-b290-34c39cbef856/model/0/nsp_3040164000_02_s2_b.png", }, new ImageAsset { Name = "nsp_3040164000_02_s2_c", Path = "npc/411f6619-d3f5-4044-b290-34c39cbef856/model/0/nsp_3040164000_02_s2_c.png", }, }, }, }, }, Abilities = { DoubleDeal(initialCooldown: 4), Joker(cooldown: 8), BlankFaceTrick(), }, UpgradedAbilities = { new AbilityUpgrade { RequiredLevel = 55, Ability = DoubleDeal(initialCooldown: 3), UpgradedAbilityIndex = 0, }, new AbilityUpgrade { RequiredLevel = 75, Ability = Joker(cooldown: 7), UpgradedAbilityIndex = 1, }, }, OnActionStart = (caim, raidActions) => ProcessPassiveEffects(caim), OnTurnEnd = (caim, raidActions) => { }, OnSetup = (caim, allies, loadout) => { caim.GlobalState[TheHangedManReversedId] = TypedValue.FromBool(true); }, OnEnteringFrontline = (caim, raidActions) => { if (caim.GlobalState.ContainsKey("nonce")) { return; } caim.GlobalState["nonce"] = TypedValue.FromBool(true); TheFoolUpright().Cast(caim, raidActions); }, OnAttackEnd = (caim, attackResult, raidActions) => { }, OnAttackActionEnd = (caim, raidActions) => { }, OnOtherAllyAbilityEnd = (caim, caster, ability, raidActions) => { BlankFace(caim, raidActions); }, OnDeath = (caim, raidActions) => { }, }); }
public static Hero NewInstance() { return(new Hero { Id = ByteString.CopyFrom(Id.ToByteArray()), Name = "Haaselia", Races = { Race.Harvin }, Gender = Gender.Female, MaxAttack = 10402, MaxHp = 1318, MaxLevel = 80, BaseDoubleAttackRate = 6, BaseTripleAttackRate = 4.5, Element = Element.Water, WeaponProficiencies = { EquipmentType.Staff, EquipmentType.Melee }, AvailablePerkIds = { ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.DebuffResistanceBoost, ExtendedMasteryPerks.AttackBoostAgainstFoesInOverdriveMode, ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.DoubleAttackRateBoost, ExtendedMasteryPerks.WaterAttackBoost, ExtendedMasteryPerks.ChargeAttackDamageBoost, ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.HpBoost, ExtendedMasteryPerks.HpBoost, ExtendedMasteryPerks.Reflect, ExtendedMasteryPerks.SupportSkill, }, PassiveAbilities = { new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.SupportSkill, Name = "Lunar Raiment", Description = "Boost to Water allies' DEF specs based on the moon phase", }, new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.BacklineEffect, Name = "The Moon Reversed", Description = "When Sub Ally: Boost to Water allies' ATK and DEF based on number of turns passed", }, new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.TriggerOnEnteringFrontline, Name = "The High Priestess Upright", Description = "When Switching to Main Ally: Haaselia gains Torah", }, }, ModelMetadata = { new ModelMetadata { JsAssetPath = "npc/ec77d956-5a29-4591-ad5b-231f1d39ab6f/model/0/npc_3040168000_02.js", ConstructorName = "mc_npc_3040168000_02", ImageAssets = { new ImageAsset { Name = "npc_3040168000_02", Path = "npc/ec77d956-5a29-4591-ad5b-231f1d39ab6f/model/0/npc_3040168000_02.png", }, }, }, }, OnHitEffectModelMetadata = { new ModelMetadata { JsAssetPath = "npc/ec77d956-5a29-4591-ad5b-231f1d39ab6f/model/0/phit_3040168000.js", ConstructorName = "mc_phit_3040168000_effect", ImageAssets = { new ImageAsset { Name = "phit_3040168000", Path = "npc/ec77d956-5a29-4591-ad5b-231f1d39ab6f/model/0/phit_3040168000.png", }, }, }, }, SpecialAbility = new SpecialAbility { HitCount = { 1 }, ModelMetadata = { new ModelMetadata { JsAssetPath = "npc/ec77d956-5a29-4591-ad5b-231f1d39ab6f/model/0/nsp_3040168000_02_s2.js", ConstructorName = "mc_nsp_3040168000_02_s2_special", ImageAssets = { new ImageAsset { Name = "nsp_3040168000_02_s2_a", Path = "npc/ec77d956-5a29-4591-ad5b-231f1d39ab6f/model/0/nsp_3040168000_02_s2_a.png", }, new ImageAsset { Name = "nsp_3040168000_02_s2_b", Path = "npc/ec77d956-5a29-4591-ad5b-231f1d39ab6f/model/0/nsp_3040168000_02_s2_b.png", }, new ImageAsset { Name = "nsp_3040168000_02_s2_c", Path = "npc/ec77d956-5a29-4591-ad5b-231f1d39ab6f/model/0/nsp_3040168000_02_s2_c.png", }, }, }, }, ProcessEffects = (haaselia, raidActions) => { foreach (var ally in haaselia.Raid.Allies) { if (!ally.IsAlive() || ally.PositionInFrontline >= 4 || ally.Element != Element.Water) { continue; } ally.ApplyStatusEffect( new StatusEffectSnapshot { Id = StatusEffectLibrary.Moon, TurnDuration = 6, IsUndispellable = true, }); } ProcessMoonEffects(haaselia); }, }, Abilities = { Boaz(), Jachin(), PhasesOfTheMoon(), }, UpgradedAbilities = { new AbilityUpgrade { RequiredLevel = 55, Ability = Boaz(upgradeEffect: true), UpgradedAbilityIndex = 0, }, new AbilityUpgrade { RequiredLevel = 75, Ability = Jachin(upgradedEffect: true), UpgradedAbilityIndex = 1, }, }, OnActionStart = (haaselia, _, raidActions) => ProcessPassiveEffects(haaselia), OnTurnEnd = (haaselia, raidActions) => { haaselia.GlobalState[TorahId + "/1"].BooleanValue = false; haaselia.GlobalState[TorahId + "/2"].BooleanValue = false; haaselia.GlobalState[TorahId + "/3"].BooleanValue = false; }, OnSetup = (haaselia, allies, loadout) => { haaselia.GlobalState.Add(TorahId + "/1", TypedValue.FromBool(false)); haaselia.GlobalState.Add(TorahId + "/2", TypedValue.FromBool(false)); haaselia.GlobalState.Add(TorahId + "/3", TypedValue.FromBool(false)); }, OnEnteringFrontline = (haaselia, raidActions) => { Torah().Cast(haaselia, raidActions); }, OnAbilityEnd = (haaselia, ability, raidActions) => { if (haaselia.GetStatusEffect(TorahId) != null) { for (var abilityIndex = 0; abilityIndex < 2; ++abilityIndex) { if (haaselia.AbilityCooldowns[abilityIndex] == ability.Cooldown && !haaselia.GlobalState[TorahId + "/" + (abilityIndex + 1)].BooleanValue) { haaselia.GlobalState[TorahId + "/" + (abilityIndex + 1)].BooleanValue = true; // Haaselia's first and second ability cooldowns are linked haaselia.AbilityCooldowns[abilityIndex] = 0; if (abilityIndex == 0) { haaselia.AbilityCooldowns[0] = 0; haaselia.AbilityCooldowns[1] = 0; haaselia.GlobalState[TorahId + "/1"].BooleanValue = true; haaselia.GlobalState[TorahId + "/2"].BooleanValue = true; } break; } } } }, }); }
public static Hero NewInstance() { return(new Hero { Id = ByteString.CopyFrom(Id.ToByteArray()), Name = "Threo", Races = { Race.Draph }, Gender = Gender.Female, MaxAttack = 13333, AttackLevels = { 11333 }, MaxHp = 1833, HpLevels = { 1533 }, MaxLevel = 100, BaseDoubleAttackRate = 6, BaseTripleAttackRate = 4.5, Element = Element.Earth, WeaponProficiencies = { EquipmentType.Axe, EquipmentType.Sword }, AvailablePerkIds = { ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.DoubleAttackRateBoost, ExtendedMasteryPerks.CriticalHitRateBoost, ExtendedMasteryPerks.ChargeAttackDamageBoost, ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.HpBoost, ExtendedMasteryPerks.CriticalHitRateBoost, ExtendedMasteryPerks.WaterDamageReduction, ExtendedMasteryPerks.AttackBoostAndDefenseDown, ExtendedMasteryPerks.AttackBoostAndDefenseDown, ExtendedMasteryPerks.ChargeAttackDamageBoost, ExtendedMasteryPerks.ChargeAttackDamageCapBoost, ExtendedMasteryPerks.SupportSkill, }, PassiveAbilities = { new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.SupportSkill, Name = "Passive ability 1", Description = "Passive ability 1 description", }, new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.SupportSkill, Name = "Passive ability 2", Description = "Passive ability 2 description", }, }, UpgradedPassiveAbilities = { new PassiveAbilityUpgrade { Ability = new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.SupportSkill, Name = "Upgraded passive ability 2", Description = "Upgraded passive ability 2 description", }, RequiredLevel = 85, RequiredRank = 5, UpgradedPassiveAbilityIndex = 2, }, new PassiveAbilityUpgrade { Ability = new PassiveAbility { Type = PassiveAbility.Types.PassiveAbilityType.SupportSkill, Name = "Passive ability 3", Description = "Passive ability 3 description", }, RequiredLevel = 95, RequiredRank = 5, UpgradedPassiveAbilityIndex = 3, }, }, ModelMetadata = { AxeFormModel, }, OnHitEffectModelMetadata = { AxeFormOnHitModel, }, SpecialAbility = new SpecialAbility { Name = string.Empty, HitCount = { 1 }, ModelMetadata = { AxeFormChargeAttackModel, }, ProcessEffects = (threo, raidActions) => { if (threo.GlobalState["::axe_form"].BooleanValue) { threo.GlobalState["::axe_form"].BooleanValue = false; threo.ApplyStatusEffect( new StatusEffectSnapshot { Id = StatusEffectLibrary.EarthAttackUpNpc, Strength = 20, TurnDuration = 4, }, raidActions); threo.PlayAnimation("change_1", raidActions); threo.ChangeForm( new ModelMetadata { JsAssetPath = "npc/612d0c88-d7ef-43ec-bf20-7d630c7c5200/model/0/npc_3040032000_03_f1.js", ConstructorName = "mc_npc_3040032000_03_f1", ImageAssets = { new ImageAsset { Name = "npc_3040032000_03_f1", Path = "npc/612d0c88-d7ef-43ec-bf20-7d630c7c5200/model/0/npc_3040032000_03_f1.png", }, }, }, raidActions, onHitEffectModel: new ModelMetadata { JsAssetPath = "npc/612d0c88-d7ef-43ec-bf20-7d630c7c5200/model/0/phit_3040032000_03_f1.js", ConstructorName = "mc_phit_3040032000_03_f1_effect", ImageAssets = { new ImageAsset { Name = "phit_3040032000_03_f1", Path = "npc/612d0c88-d7ef-43ec-bf20-7d630c7c5200/model/0/phit_3040032000_03_f1.png", }, }, }, specialAbility: new SpecialAbility { HitCount = { 2 }, ModelMetadata = { new ModelMetadata { JsAssetPath = "npc/612d0c88-d7ef-43ec-bf20-7d630c7c5200/model/0/nsp_3040032000_03_f1.js", ConstructorName = "mc_nsp_3040032000_03_f1_special", ImageAssets = { new ImageAsset { Name = "nsp_3040032000_03_f1", Path = "npc/612d0c88-d7ef-43ec-bf20-7d630c7c5200/model/0/nsp_3040032000_03_f1.png", }, }, }, }, ShouldRepositionSpriteAnimationOnTarget = true, }); threo.ChangeAbilityIcon(1, "npc/612d0c88-d7ef-43ec-bf20-7d630c7c5200/abilities/1a.png"); } else { threo.GlobalState["::axe_form"].BooleanValue = true; var currentTarget = threo.ResolveEnemyTarget(threo.CurrentTargetPositionInFrontline); if (currentTarget.IsAlive()) { MeteorThrust().Cast(threo, currentTarget.PositionInFrontline, raidActions); } threo.PlayAnimation("change_2", raidActions); threo.ChangeForm( AxeFormModel, raidActions, onHitEffectModel: AxeFormOnHitModel, specialAbility: new SpecialAbility { HitCount = { 1 }, ModelMetadata = { AxeFormChargeAttackModel, }, ShouldRepositionSpriteAnimationOnTarget = true, }); threo.ChangeAbilityIcon(1, "npc/612d0c88-d7ef-43ec-bf20-7d630c7c5200/abilities/1.png"); } }, ShouldRepositionSpriteAnimationOnTarget = true, }, Abilities = { VorpalRage(), BerserkForge(cooldown: 7), GroundZero(cooldown: 8), }, UpgradedAbilities = { new AbilityUpgrade { RequiredLevel = 85, Ability = BerserkForge(cooldown: 6), UpgradedAbilityIndex = 1, }, new AbilityUpgrade { RequiredLevel = 95, Ability = GroundZero(cooldown: 7), UpgradedAbilityIndex = 2, }, new AbilityUpgrade { RequiredLevel = 100, Ability = ThreeTigerBlessing(0), UpgradedAbilityIndex = 3, }, }, OnAttackEnd = (threo, attackResult, raidActions) => { if (!threo.IsAlive() || threo.PositionInFrontline >= 4 || (attackResult != EntitySnapshot.AttackResult.Single && attackResult != EntitySnapshot.AttackResult.Double && attackResult != EntitySnapshot.AttackResult.Triple && attackResult != EntitySnapshot.AttackResult.MultiAttack)) { return; } var supportSkillRank = threo.Hero.GetSupportSkillRank(); if (supportSkillRank > 0 && ThreadSafeRandom.NextDouble() < (1 + supportSkillRank) * 0.025) { threo.ApplyStatusEffect( new StatusEffectSnapshot { Id = "threo/atk_up", TurnDuration = int.MaxValue, IsStackable = true, Strength = 10, Modifier = ModifierLibrary.FlatAttackBoost, StackingCap = 30, }, raidActions); } }, OnSetup = (threo, allies, loadout) => { threo.GlobalState.Add("::axe_form", TypedValue.FromBool(true)); if (threo.Hero.Level >= 95) { // 20% boost to damage against Water foes, non stackable with Seraphic effects from weapons threo.OverrideWeaponSeraphicModifier(20); } }, }); }
public static Hero NewInstance() { return(new Hero { Id = ByteString.CopyFrom(Id.ToByteArray()), Name = "Narmaya", Races = { Race.Draph }, Gender = Gender.Female, MaxAttack = 12200, AttackLevels = { 10240 }, MaxHp = 1330, HpLevels = { 1120 }, MaxLevel = 100, BaseDoubleAttackRate = 6, BaseTripleAttackRate = 4.5, Element = Element.Dark, WeaponProficiencies = { EquipmentType.Katana }, AvailablePerkIds = { ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.DoubleAttackRateBoost, ExtendedMasteryPerks.CriticalHitRateBoost, ExtendedMasteryPerks.ChargeAttackDamageBoost, ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.HpBoost, ExtendedMasteryPerks.CriticalHitRateBoost, ExtendedMasteryPerks.LightDamageReduction, ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.DarkAttackBoost, ExtendedMasteryPerks.Reflect, ExtendedMasteryPerks.HostilityReduction, ExtendedMasteryPerks.SupportSkill, }, ModelMetadata = { new ModelMetadata { JsAssetPath = "npc/4eb50ec0-501e-4a4d-9935-48f1456d6b3f/model/0/npc_3040063000_03.js", ConstructorName = "mc_npc_3040063000_03", ImageAssets = { new ImageAsset { Name = "npc_3040063000_03_a", Path = "npc/4eb50ec0-501e-4a4d-9935-48f1456d6b3f/model/0/npc_3040063000_03_a.png", }, new ImageAsset { Name = "npc_3040063000_03_b", Path = "npc/4eb50ec0-501e-4a4d-9935-48f1456d6b3f/model/0/npc_3040063000_03_b.png", }, }, }, }, OnHitEffectModelMetadata = { new ModelMetadata { JsAssetPath = "npc/4eb50ec0-501e-4a4d-9935-48f1456d6b3f/model/0/phit_3040063000.js", ConstructorName = "mc_phit_3040063000_effect", ImageAssets = { new ImageAsset { Name = "phit_3040063000", Path = "npc/4eb50ec0-501e-4a4d-9935-48f1456d6b3f/model/0/phit_3040063000.png", }, }, }, }, SpecialAbility = new SpecialAbility { Name = string.Empty, HitCount = { 1 }, ModelMetadata = { new ModelMetadata { JsAssetPath = "npc/4eb50ec0-501e-4a4d-9935-48f1456d6b3f/model/0/nsp_3040063000_03_s2.js", ConstructorName = "mc_nsp_3040063000_03_s2_special", ImageAssets = { new ImageAsset { Name = "nsp_3040063000_03_s2", Path = "npc/4eb50ec0-501e-4a4d-9935-48f1456d6b3f/model/0/nsp_3040063000_03_s2.png", }, }, }, }, ProcessEffects = (narmaya, raidActions) => { if (narmaya.GlobalState[DawnflyDance].BooleanValue) { narmaya.ApplyStatusEffect( new StatusEffectSnapshot { Id = StackableAttackUp, Strength = 15, StackingCap = 50, IsStackable = true, TurnDuration = int.MaxValue, Modifier = ModifierLibrary.FlatAttackBoost, }, raidActions); if (narmaya.Hero.Rank == 5) { narmaya.ApplyStatusEffect( new StatusEffectSnapshot { Id = StatusEffectLibrary.DarkAttackUpNpc, Strength = 30, TurnDuration = 4, }, raidActions); } } else { narmaya.RemoveStatusEffect(StackableDefenseDown); if (narmaya.Hero.Rank == 5) { narmaya.ApplyStatusEffect( new StatusEffectSnapshot { Id = StatusEffectLibrary.MirrorImage, Strength = 2, TurnDuration = int.MaxValue, }, raidActions); } } }, }, Abilities = { ButterflyEffect(skillSealDuration: 2), Transient(), Kyogasuigetsu(), }, UpgradedAbilities = { new AbilityUpgrade { RequiredLevel = 45, Ability = Kyogasuigetsu(), UpgradedAbilityIndex = 2, }, new AbilityUpgrade { RequiredLevel = 55, Ability = ButterflyEffect(skillSealDuration: 1), UpgradedAbilityIndex = 0, }, new AbilityUpgrade { RequiredLevel = 100, Ability = GlasswingWaltz(), UpgradedAbilityIndex = 3, }, }, OnActionStart = (narmaya, _, raidActions) => ProcessPassiveEffects(narmaya), OnSetup = (narmaya, allies, loadout) => { narmaya.GlobalState.Add(DawnflyDance, TypedValue.FromBool(true)); if (narmaya.Hero.Level >= 90) { narmaya.ApplyStatusEffect( new StatusEffectSnapshot { Id = StatusEffectLibrary.Tenacity, TurnDuration = int.MaxValue, }); } }, OnEnteringFrontline = (narmaya, raidActions) => ProcessPassiveEffects(narmaya), OnDeath = (narmaya, raidActions) => { foreach (var ally in narmaya.Raid.Allies) { if (ally.IsAlive() && ally.PositionInFrontline < 4) { ally.RemoveStatusEffect(FortifiedVigor); } } }, }); }
public static Hero NewInstance() { return(new Hero { Id = ByteString.CopyFrom(Id.ToByteArray()), Name = "Nier", Description = "A young woman who had her existence denied at every turn, thus leading to an overwhelming desire for love and acceptance which gradually warped the very fabric of her being. As her sense of morality began to wane, she came upon the Arcarum grim reaper who grants death to all. The two now stand together like lovers, hell-bent on creating a new world that will fully acknowledge them.", Races = { Race.Erune }, Gender = Gender.Female, MaxAttack = 8906, MaxHp = 1313, MaxLevel = 80, BaseDoubleAttackRate = 6, BaseTripleAttackRate = 4.5, Element = Element.Dark, WeaponProficiencies = { EquipmentType.Axe, EquipmentType.Dagger }, AvailablePerkIds = { ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.DebuffResistanceBoost, ExtendedMasteryPerks.AttackBoostAgainstFoesInOverdriveMode, ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.AttackBoost, ExtendedMasteryPerks.DefenseBoost, ExtendedMasteryPerks.DoubleAttackRateBoost, ExtendedMasteryPerks.TripleAttackRateBoost, ExtendedMasteryPerks.DarkAttackBoost, ExtendedMasteryPerks.CriticalHitRateBoost, ExtendedMasteryPerks.CriticalHitRateBoost, ExtendedMasteryPerks.ChargeAttackDamageCapBoost, ExtendedMasteryPerks.ChargeAttackDamageCapBoost, ExtendedMasteryPerks.SupportSkill, }, ModelMetadata = { new ModelMetadata { JsAssetPath = "npc/0269f30f-3c61-45ac-9c75-9290516e8985/model/0/npc_3040169000_02.js", ConstructorName = "mc_npc_3040169000_02", ImageAssets = { new ImageAsset { Name = "npc_3040169000_02", Path = "npc/0269f30f-3c61-45ac-9c75-9290516e8985/model/0/npc_3040169000_02.png", }, }, }, }, OnHitEffectModelMetadata = { new ModelMetadata { JsAssetPath = "npc/0269f30f-3c61-45ac-9c75-9290516e8985/model/0/phit_3040169000.js", ConstructorName = "phit_3040169000_effect", ImageAssets = { new ImageAsset { Name = "phit_3040169000", Path = "npc/0269f30f-3c61-45ac-9c75-9290516e8985/model/0/phit_3040169000.png", }, }, }, }, SpecialAbility = new SpecialAbility { Name = string.Empty, HitCount = { 1 }, ModelMetadata = { new ModelMetadata { JsAssetPath = "npc/0269f30f-3c61-45ac-9c75-9290516e8985/model/0/nsp_3040169000_02_s2.js", ConstructorName = "mc_nsp_3040169000_02_s2_special", ImageAssets = { new ImageAsset { Name = "nsp_3040169000_02_s2_a", Path = "npc/0269f30f-3c61-45ac-9c75-9290516e8985/model/0/nsp_3040169000_02_s2_a.png", }, new ImageAsset { Name = "nsp_3040169000_02_s2_b", Path = "npc/0269f30f-3c61-45ac-9c75-9290516e8985/model/0/nsp_3040169000_02_s2_b.png", }, }, }, }, }, Abilities = { WorldOfDeathAndLove(cooldown: 7), Beloved(cooldown: 6), new Ability { Name = "Last Love", Cooldown = 4, Type = Ability.Types.AbilityType.Support, ModelMetadata = new ModelMetadata { JsAssetPath = "npc/0269f30f-3c61-45ac-9c75-9290516e8985/abilities/2/ab_3040169000_02.js", ConstructorName = "mc_ab_3040169000_02_effect", ImageAssets = { new ImageAsset { Name = "ab_3040169000_02", Path = "npc/0269f30f-3c61-45ac-9c75-9290516e8985/abilities/2/ab_3040169000_02.png", }, }, }, ShouldRepositionSpriteAnimation = true, RepositionOnTarget = true, AbilityTargetting = AbilityTargettingType.TargetSingleAliveFrontLineMember, Effects = { new AbilityEffect { Type = AbilityEffect.Types.AbilityEffectType.ApplyStatusEffect, ExtraData = new ApplyStatusEffect { Id = StatusEffectLibrary.ChargeAttackReactivation, EffectTargettingType = EffectTargettingType.OnSelectedAlly, TurnDuration = int.MaxValue, }.ToByteString(), }, }, ProcessEffects = (nier, target, raidActions) => { IncrementLoveRedemption(nier, -1, raidActions); }, AnimationName = "ab_motion", }, }, UpgradedAbilities = { new AbilityUpgrade { RequiredLevel = 55, Ability = WorldOfDeathAndLove(cooldown: 6), UpgradedAbilityIndex = 0, }, new AbilityUpgrade { RequiredLevel = 75, Ability = Beloved(cooldown: 5), UpgradedAbilityIndex = 1, }, }, PassiveAbilities = { new PassiveAbility { Name = "Will to Love", Description = "Love's Redemption lowers by 2 each turn. Nier will be knocked out when its count reaches 0. DMG taken is lowered while in effect.", }, new PassiveAbility { Name = "Death Reversed", Description = "When Sub Ally: When above 25% HP and Dark element, the main character can withstand lethal damage.", Type = PassiveAbility.Types.PassiveAbilityType.BacklineEffect, }, new PassiveAbility { Name = "The Lovers Upright", Description = "When Switching to Main Ally: All Dark allies gain Thirsting.", Type = PassiveAbility.Types.PassiveAbilityType.TriggerOnEnteringFrontline, }, }, OnActionStart = (nier, _, raidActions) => ProcessLoveRedemptionEffects(nier), OnSetup = (nier, allies, loadout) => SetupLoveRedemptionStacks(nier), OnTurnEnd = (nier, raidActions) => { if (!nier.IsAlive() || nier.PositionInFrontline >= 4) { return; } IncrementLoveRedemption(nier, -2, raidActions); if ((int)nier.GetStatusEffectStrength(LoveRedemptionId) <= 0) { nier.Kill(raidActions); } }, OnAbilityEnd = (nier, ability, raidActions) => { if (nier.IsAlive() && nier.PositionInFrontline < 4 && (int)nier.GetStatusEffectStrength(LoveRedemptionId) <= 0) { nier.Kill(raidActions); } }, OnDeath = (nier, raidActions) => { if ((int)nier.GetStatusEffectStrength(LoveRedemptionId) > 0) { UnfinishedBusiness().Cast(nier, raidActions); } }, OnEnteringFrontline = (nier, raidActions) => { SetupLoveRedemptionStacks(nier); if (nier.GlobalState.ContainsKey("nonce")) { return; } nier.GlobalState["nonce"] = TypedValue.FromBool(true); Thirsting().Cast(nier, raidActions); }, }); }