private static void Curaga1(AbilityBuilder builder) { builder.Create(Feat.Curaga1, PerkType.Curaga) .Name("Curaga I") .HasRecastDelay(RecastGroup.Curaga1, 12f) .HasActivationDelay(4.0f) .RequirementMP(12) .UsesActivationType(AbilityActivationType.Casted) .DisplaysVisualEffectWhenActivating() .HasImpactAction((activator, target, level) => { var bonus = GetAbilityModifier(AbilityType.Wisdom, activator); foreach (var member in Party.GetAllPartyMembersWithinRange(activator, 5.0f)) { var amount = Random.D6(2) + bonus; ApplyEffectToObject(DurationType.Instant, GetRacialType(target) == RacialType.Undead ? EffectDamage(amount) : EffectHeal(amount), target); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Healing_S), member); Enmity.ModifyEnmityOnAll(activator, amount); } CombatPoint.AddCombatPointToAllTagged(activator, SkillType.WhiteMagic, 3); }); }
public Dictionary <Feat, AbilityDetail> BuildAbilities() { var builder = new AbilityBuilder() .Create(Feat.Sleep, PerkType.Sleep) .Name("Sleep") .HasRecastDelay(RecastGroup.Sleep, 12f) .HasActivationDelay(2f) .RequirementMP(8) .UsesActivationType(AbilityActivationType.Casted) .DisplaysVisualEffectWhenActivating() .HasImpactAction((activator, target, level) => { var resistance = Resistance.GetResistance(target, ResistanceType.Sleep); var baseDuration = Random.NextFloat(15.0f, 30.0f); var duration = baseDuration * resistance; StatusEffect.Apply(activator, target, StatusEffectType.Sleep, duration); Resistance.ModifyResistance(target, ResistanceType.Sleep, -0.25f); CombatPoint.AddCombatPoint(activator, target, SkillType.BlackMagic, 3); Enmity.ModifyEnmity(activator, target, 18); }); return(builder.Build()); }
private static void Poisona(AbilityBuilder builder) { builder.Create(Feat.Poisona, PerkType.Poisona) .Name("Poisona") .HasRecastDelay(RecastGroup.Raise, 60f) .HasActivationDelay(1f) .RequirementMP(4) .UsesActivationType(AbilityActivationType.Casted) .HasCustomValidation((activator, target, level) => { if (!StatusEffect.HasStatusEffect(target, StatusEffectType.Poison1) && !StatusEffect.HasStatusEffect(target, StatusEffectType.Poison2) && !StatusEffect.HasStatusEffect(target, StatusEffectType.Poison3)) { return("Your target is not poisoned."); } return(string.Empty); }) .HasImpactAction((activator, target, level) => { StatusEffect.Remove(target, StatusEffectType.Poison1); StatusEffect.Remove(target, StatusEffectType.Poison2); StatusEffect.Remove(target, StatusEffectType.Poison3); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Head_Nature), target); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.WhiteMagic, 3); Enmity.ModifyEnmity(activator, target, 6); }); }
private static void Cover3(AbilityBuilder builder) { builder.Create(Feat.Cover3, PerkType.Cover) .Name("Cover III") .HasRecastDelay(RecastGroup.Cover, 120f) .RequirementStamina(12) .UsesActivationType(AbilityActivationType.Casted) .DisplaysVisualEffectWhenActivating(VisualEffect.None) .HasCustomValidation((activator, target, level) => { if (activator == target) { return("You cannot Cover yourself."); } return(string.Empty); }) .HasImpactAction((activator, target, level) => { var length = 60f + GetAbilityModifier(AbilityType.Constitution, activator) * 2f; StatusEffect.Apply(activator, target, StatusEffectType.Cover3, length); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Dur_Prot_Epic_Armor), target); Enmity.ModifyEnmityOnAll(activator, 10); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.Chivalry, 3); }); }
private static void RecoveryStab3(AbilityBuilder builder) { builder.Create(Feat.RecoveryStab3, PerkType.RecoveryStab) .Name("Recovery Stab III") .HasRecastDelay(RecastGroup.RecoveryStab, 60f) .RequirementStamina(16) .UsesActivationType(AbilityActivationType.Weapon) .HasImpactAction((activator, target, level) => { var bonus = GetAbilityModifier(AbilityType.Wisdom, activator); foreach (var member in Party.GetAllPartyMembersWithinRange(activator, 5.0f)) { var amount = Random.D8(3) + bonus; var duration = 24f; if (StatusEffect.HasStatusEffect(activator, StatusEffectType.DeliberateStab)) { duration *= 2f; } ApplyEffectToObject(DurationType.Instant, EffectHeal(amount), member); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Healing_S), member); ApplyEffectToObject(DurationType.Temporary, EffectRegenerate(1, 6f), member, duration); Enmity.ModifyEnmityOnAll(activator, amount + 6); } CombatPoint.AddCombatPointToAllTagged(activator, SkillType.RedMagic, 3); Enmity.ModifyEnmityOnAll(activator, 10); }); }
private static void TransferStamina1(AbilityBuilder builder) { builder.Create(Feat.TransferStamina1, PerkType.TransferStamina) .Name("Transfer Stamina I") .HasRecastDelay(RecastGroup.Transfer, 60f) .RequirementMP(20) .UsesActivationType(AbilityActivationType.Casted) .HasActivationDelay(4f) .HasCustomValidation((activator, target, level) => { if (!GetIsPC(target) || GetIsDM(target)) { return("Only players may be targeted with this ability."); } return(string.Empty); }) .HasImpactAction((activator, target, level) => { const int BaseTransferAmount = 10; var playerId = GetObjectUUID(target); var dbPlayer = DB.Get <Player>(playerId); Stat.RestoreStamina(target, dbPlayer, BaseTransferAmount); DB.Set(playerId, dbPlayer); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.RedMagic, 2); Enmity.ModifyEnmityOnAll(activator, 6); }); }
public static void ApplyLifeStealRecovery() { var target = OBJECT_SELF; var lifeStealAmount = GetLocalFloat(target, LifeStealVariableName); var lifeStealActivator = GetLocalObject(target, LifeStealActivatorVariableName); if (lifeStealAmount <= 0.0f) { return; } var damageDetails = Damage.GetDamageEventData(); if (lifeStealActivator != damageDetails.Damager) { return; } var recoveryAmount = (int)(damageDetails.Total * lifeStealAmount); ApplyEffectToObject(DurationType.Instant, EffectHeal(recoveryAmount), lifeStealActivator); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Healing_S), lifeStealActivator); Enmity.ModifyEnmity(lifeStealActivator, target, recoveryAmount + 6); CombatPoint.AddCombatPoint(lifeStealActivator, target, SkillType.Thievery, 2); DeleteLocalFloat(target, LifeStealVariableName); DeleteLocalObject(target, LifeStealActivatorVariableName); }
private static void Raise(AbilityBuilder builder) { builder.Create(Feat.Raise, PerkType.Raise) .Name("Raise I") .HasRecastDelay(RecastGroup.Raise, 60f) .HasActivationDelay(15f) .RequirementMP(25) .UsesActivationType(AbilityActivationType.Casted) .HasCustomValidation((activator, target, level) => { if (GetCurrentHitPoints(target) > -11 || !GetIsDead(target)) { return("Your target is still alive."); } return(string.Empty); }) .HasImpactAction((activator, target, level) => { ApplyEffectToObject(DurationType.Instant, EffectResurrection(), target); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.WhiteMagic, 5); Enmity.ModifyEnmityOnAll(activator, 60); }); }
private static void Convert(AbilityBuilder builder) { builder.Create(Feat.Convert, PerkType.Convert) .Name("Convert") .HasRecastDelay(RecastGroup.Convert, 600f) .UsesActivationType(AbilityActivationType.Casted) .HasCustomValidation((activator, target, level) => { if (!GetIsPC(activator) || GetIsDM(activator)) { return("Only players may use this ability."); } var playerId = GetObjectUUID(activator); var dbPlayer = DB.Get <Player>(playerId); if (dbPlayer.MP <= 0) { return("Your MP is too low to convert."); } return(string.Empty); }) .HasImpactAction((activator, target, level) => { var playerId = GetObjectUUID(activator); var dbPlayer = DB.Get <Player>(playerId); var currentHP = GetCurrentHitPoints(activator); var currentMP = dbPlayer.MP; // Set MP to 0 then do a restore by the player's HP. dbPlayer.MP = 0; Stat.RestoreMP(activator, dbPlayer, currentHP); DB.Set(playerId, dbPlayer); // Current HP is higher than MP. Deal damage. if (currentHP > currentMP) { var damageAmount = currentHP - currentMP; ApplyEffectToObject(DurationType.Instant, EffectDamage(damageAmount), activator); } // Current HP is lower than MP. Heal damage. else if (currentHP < currentMP) { var recoverAmount = currentMP - currentHP; ApplyEffectToObject(DurationType.Instant, EffectHeal(recoverAmount), activator); } ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Good_Help), activator); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.RedMagic, 5); Enmity.ModifyEnmityOnAll(activator, 10); }); }
private static void AttemptSteal(uint activator, uint target, int baseChance) { var delta = 0.0f; // Players who use this ability have their Thievery skill checked against the CR // of the target. Other users simply have a delta of zero. if (GetIsPC(activator) && !GetIsDM(activator)) { var playerId = GetObjectUUID(activator); var dbPlayer = DB.Get <Player>(playerId); var cr = GetChallengeRating(target) * 3; var thievery = dbPlayer.Skills[SkillType.Thievery]; delta = (thievery.Rank - cr) * 0.01f; } var chance = baseChance + (delta * baseChance); if (chance < 1) { chance = 1; } else if (chance > 95) { chance = 95; } if (Random.D100(1) <= chance) { for (var item = GetFirstItemInInventory(target); GetIsObjectValid(item); item = GetNextItemInInventory(target)) { // This item can be stolen. Copy it to the thief now. if (GetLocalBool(item, "STEAL_ITEM")) { DeleteLocalBool(item, "STEAL_ITEM"); CopyItem(item, activator, true); Messaging.SendMessageNearbyToPlayers(activator, $"{GetName(activator)} successfully steals '{GetName(item)}' from {GetName(target)}."); DestroyObject(item); break; } } } else { SendMessageToPC(activator, $"You failed to steal from {GetName(target)}."); } CombatPoint.AddCombatPoint(activator, target, SkillType.Thievery, 3); Enmity.ModifyEnmity(activator, target, 5); }
private static void Invincible(AbilityBuilder builder) { builder.Create(Feat.Invincible, PerkType.Invincible) .Name("Invincible") .HasRecastDelay(RecastGroup.OneHourAbility, 3600f) .UsesActivationType(AbilityActivationType.Casted) .RequirementStamina(50) .HasImpactAction((activator, target, level) => { StatusEffect.Apply(activator, target, StatusEffectType.Invincible, 30.0f); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.Chivalry, 5); Enmity.ModifyEnmityOnAll(activator, 500); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Fnf_Sound_Burst), target); }); }
private static void WaspSting3(AbilityBuilder builder) { builder.Create(Feat.WaspSting3, PerkType.WaspSting) .Name("Wasp Sting III") .HasRecastDelay(RecastGroup.WaspSting, 60f) .RequirementStamina(12) .UsesActivationType(AbilityActivationType.Weapon) .HasImpactAction((activator, target, level) => { ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Poison_S), target); StatusEffect.Apply(activator, target, StatusEffectType.Poison3, 24f); CombatPoint.AddCombatPoint(activator, target, SkillType.Thievery, 3); Enmity.ModifyEnmity(activator, target, 20); }); }
private static void SubtleBlow2(AbilityBuilder builder) { builder.Create(Feat.SubtleBlow2, PerkType.SubtleBlow) .Name("Subtle Blow II") .HasRecastDelay(RecastGroup.SubtleBlow, 300f) .RequirementStamina(7) .UsesActivationType(AbilityActivationType.Casted) .HasImpactAction((activator, target, level) => { StatusEffect.Apply(activator, target, StatusEffectType.SubtleBlow2, 30f); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Ac_Bonus), target); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.Chi, 3); Enmity.ModifyEnmityOnAll(activator, 8); }); }
private static void Manafont(AbilityBuilder builder) { builder.Create(Feat.Manafont, PerkType.Manafont) .Name("Manafont") .HasRecastDelay(RecastGroup.OneHourAbility, 3600f) .UsesActivationType(AbilityActivationType.Casted) .RequirementMP(50) .HasImpactAction((activator, target, level) => { StatusEffect.Apply(activator, target, StatusEffectType.Manafont, 30f); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Fnf_Sound_Burst), target); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.RedMagic, 5); Enmity.ModifyEnmityOnAll(activator, 100); }); }
private static void Blind1(AbilityBuilder builder) { builder.Create(Feat.Blind1, PerkType.Blind) .Name("Blind I") .HasRecastDelay(RecastGroup.Blind, 12f) .RequirementMP(6) .UsesActivationType(AbilityActivationType.Casted) .HasActivationDelay(2f) .HasImpactAction((activator, target, level) => { StatusEffect.Apply(activator, target, StatusEffectType.Blind1, 15f); Enmity.ModifyEnmity(activator, target, 4); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.RedMagic, 3); }); }
private static void Ironclad1(AbilityBuilder builder) { builder.Create(Feat.Ironclad1, PerkType.Ironclad) .Name("Ironclad I") .HasRecastDelay(RecastGroup.Ironclad, 300f) .RequirementStamina(10) .UsesActivationType(AbilityActivationType.Casted) .HasImpactAction((activator, target, level) => { StatusEffect.Apply(activator, target, StatusEffectType.Ironclad1, 60f); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Death_Ward), target); Enmity.ModifyEnmityOnAll(activator, 8); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.Chivalry, 3); }); }
private static void PerfectDodge(AbilityBuilder builder) { builder.Create(Feat.PerfectDodge, PerkType.PerfectDodge) .Name("Perfect Dodge") .HasRecastDelay(RecastGroup.OneHourAbility, 3600f) .UsesActivationType(AbilityActivationType.Casted) .RequirementStamina(50) .HasImpactAction((activator, target, level) => { ApplyEffectToObject(DurationType.Temporary, EffectACIncrease(20), target, 30f); ApplyEffectToObject(DurationType.Temporary, EffectVisualEffect(VisualEffect.Vfx_Dur_Pixiedust), target, 30f); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.Thievery, 5); Enmity.ModifyEnmityOnAll(activator, 150); }); }
private static void Refresh(AbilityBuilder builder) { builder.Create(Feat.Refresh, PerkType.Refresh) .Name("Refresh") .HasRecastDelay(RecastGroup.Refresh, 18f) .RequirementMP(12) .UsesActivationType(AbilityActivationType.Casted) .HasImpactAction((activator, target, level) => { StatusEffect.Apply(activator, target, StatusEffectType.Refresh, 180f); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Head_Mind), target); Enmity.ModifyEnmityOnAll(activator, 6); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.RedMagic, 3); }); }
private static void Shadowstitch2(AbilityBuilder builder) { builder.Create(Feat.Shadowstitch2, PerkType.Shadowstitch) .Name("Shadowstitch II") .HasRecastDelay(RecastGroup.Shadowstitch, 60f) .RequirementStamina(18) .UsesActivationType(AbilityActivationType.Weapon) .HasImpactAction((activator, target, level) => { var duration = 24f; ApplyEffectToObject(DurationType.Temporary, EffectVisualEffect(VisualEffect.Vfx_Dur_Aura_Magenta), target, duration); ApplyEffectToObject(DurationType.Temporary, EffectCutsceneImmobilize(), target, duration); CombatPoint.AddCombatPoint(activator, target, SkillType.Thievery, 3); Enmity.ModifyEnmity(activator, target, 18); }); }
private static void ElementalSeal(AbilityBuilder builder) { builder.Create(Feat.ElementalSeal, PerkType.ElementalSeal) .Name("Elemental Seal") .DisplaysVisualEffectWhenActivating() .HasRecastDelay(RecastGroup.OneHourAbility, 3600f) .UsesActivationType(AbilityActivationType.Casted) .RequirementMP(50) .HasImpactAction((activator, target, level) => { StatusEffect.Apply(activator, target, StatusEffectType.ElementalSeal, 30f); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Fnf_Howl_Mind), target); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.BlackMagic, 5); Enmity.ModifyEnmityOnAll(activator, 300); }); }
private static void Regen2(AbilityBuilder builder) { builder.Create(Feat.Regen1, PerkType.Regen) .Name("Regen II") .HasRecastDelay(RecastGroup.Regen, 12f) .HasActivationDelay(4f) .RequirementMP(12) .UsesActivationType(AbilityActivationType.Casted) .HasImpactAction((activator, target, level) => { ApplyEffectToObject(DurationType.Temporary, EffectRegenerate(2, 6f), target, 60f); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Holy_Aid), target); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.WhiteMagic, 3); Enmity.ModifyEnmityOnAll(activator, 6); }); }
private static void Flee2(AbilityBuilder builder) { builder.Create(Feat.Flee2, PerkType.Flee) .Name("Flee II") .HasRecastDelay(RecastGroup.Flee, 300f) .RequirementStamina(25) .UsesActivationType(AbilityActivationType.Casted) .HasActivationDelay(2.0f) .HasImpactAction((activator, target, level) => { var duration = 30f + (GetAbilityModifier(AbilityType.Dexterity, activator) * 2); ApplyEffectToObject(DurationType.Temporary, EffectMovementSpeedIncrease(80), target, duration); Enmity.ModifyEnmityOnAll(activator, 8); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.Thievery, 3); }); }
private static void DeliberateStab(AbilityBuilder builder) { builder.Create(Feat.DeliberateStab, PerkType.DeliberateStab) .Name("Deliberate Stab") .HasRecastDelay(RecastGroup.DeliberateStab, 300f) .RequirementStamina(20) .UsesActivationType(AbilityActivationType.Casted) .HasActivationDelay(2f) .HasImpactAction((activator, target, level) => { StatusEffect.Apply(activator, target, StatusEffectType.DeliberateStab, 30f); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Divine_Strike_Holy), activator); Enmity.ModifyEnmityOnAll(activator, 3); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.RedMagic, 3); }); }
private static void PiercingStab3(AbilityBuilder builder) { builder.Create(Feat.PiercingStab3, PerkType.PiercingStab) .Name("Piercing Stab III") .HasRecastDelay(RecastGroup.PiercingStab, 60f) .RequirementStamina(15) .UsesActivationType(AbilityActivationType.Weapon) .HasImpactAction((activator, target, level) => { var duration = CalculateDuration(activator); StatusEffect.Apply(activator, target, StatusEffectType.Bleed3, duration); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Com_Chunk_Red_Small), target); CombatPoint.AddCombatPoint(activator, target, SkillType.RedMagic, 2); Enmity.ModifyEnmity(activator, target, 14); }); }
private static void Blind2(AbilityBuilder builder) { builder.Create(Feat.Blind2, PerkType.Blind) .Name("Blind II") .HasRecastDelay(RecastGroup.Blind, 12f) .RequirementMP(10) .UsesActivationType(AbilityActivationType.Casted) .HasActivationDelay(2f) .HasImpactAction((activator, target, level) => { // Intentional to use Blind I again. StatusEffect.Apply(activator, target, StatusEffectType.Blind1, 30f); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Dazed_S), target); Enmity.ModifyEnmity(activator, target, 6); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.RedMagic, 3); }); }
private static void Protect(AbilityBuilder builder) { builder.Create(Feat.Protect, PerkType.Protect) .Name("Protect") .HasRecastDelay(RecastGroup.Protect, 4f) .HasActivationDelay(2.0f) .RequirementMP(4) .UsesActivationType(AbilityActivationType.Casted) .DisplaysVisualEffectWhenActivating() .HasImpactAction((activator, target, level) => { ApplyEffectToObject(DurationType.Temporary, EffectDamageReduction(4, DamagePower.Normal), target, 1800f); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Ac_Bonus), target); Enmity.ModifyEnmityOnAll(activator, 4); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.RedMagic, 2); }); }
private static void Chakra1(AbilityBuilder builder) { builder.Create(Feat.Chakra1, PerkType.Chakra) .Name("Chakra I") .HasRecastDelay(RecastGroup.Chakra, 30f) .HasActivationDelay(2f) .UsesActivationType(AbilityActivationType.Casted) .RequirementStamina(10) .HasImpactAction((activator, target, level) => { var hpRecover = Random.D6(2); ApplyEffectToObject(DurationType.Instant, EffectHeal(hpRecover), target); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Healing_S), target); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.Chi, 2); Enmity.ModifyEnmityOnAll(activator, 6 + hpRecover); }); }
private static void Dia3(AbilityBuilder builder) { builder.Create(Feat.Dia3, PerkType.Dia) .Name("Dia III") .HasRecastDelay(RecastGroup.Dia, 3f) .HasActivationDelay(1.0f) .RequirementMP(6) .UsesActivationType(AbilityActivationType.Casted) .DisplaysVisualEffectWhenActivating() .HasImpactAction((activator, target, level) => { StatusEffect.Apply(activator, target, StatusEffectType.Dia3, 60f); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Blind_Deaf_M), target); Enmity.ModifyEnmity(activator, target, 10); CombatPoint.AddCombatPoint(activator, target, SkillType.WhiteMagic, 3); }); }
private static void InnerHealing4(AbilityBuilder builder) { builder.Create(Feat.InnerHealing4, PerkType.InnerHealing) .Name("Inner Healing IV") .HasRecastDelay(RecastGroup.InnerHealing, 180f) .HasActivationDelay(2f) .UsesActivationType(AbilityActivationType.Casted) .RequirementStamina(25) .HasImpactAction((activator, target, level) => { var hpRecover = (int)(GetMaxHitPoints(target) * 0.4f); ApplyEffectToObject(DurationType.Instant, EffectHeal(hpRecover), target); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Restoration), target); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.Chi, 8); Enmity.ModifyEnmityOnAll(activator, 25 + hpRecover); }); }
private static void ShockSpikes2(AbilityBuilder builder) { builder.Create(Feat.ShockSpikes2, PerkType.ShockSpikes) .Name("Shock Spikes II") .HasRecastDelay(RecastGroup.ShockSpikes, 10f) .HasActivationDelay(3f) .RequirementMP(12) .UsesActivationType(AbilityActivationType.Casted) .DisplaysVisualEffectWhenActivating() .HasImpactAction((activator, target, level) => { ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Com_Blood_Crt_Yellow), target); ApplyShockSpikes(target, 1, DamageBonus.DAMAGEBONUS_2d4); Enmity.ModifyEnmityOnAll(activator, 8); CombatPoint.AddCombatPointToAllTagged(activator, SkillType.RedMagic, 3); }); }