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()); }
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 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 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 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 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 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 ElectricFist1(AbilityBuilder builder) { builder.Create(Feat.ElectricFist1, PerkType.ElectricFist) .Name("Electric Fist I") .HasRecastDelay(RecastGroup.ElectricFist, 60f) .UsesActivationType(AbilityActivationType.Weapon) .RequirementStamina(3) .HasImpactAction((activator, target, level) => { var modifier = GetAbilityModifier(AbilityType.Wisdom, activator); modifier = modifier > 0 ? modifier : 0; var damage = Random.D4(2) + modifier; ApplyEffectToObject(DurationType.Instant, EffectDamage(damage, DamageType.Electrical), target); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Com_Hit_Electrical), target); CombatPoint.AddCombatPoint(activator, target, SkillType.Chi, 3); Enmity.ModifyEnmityOnAll(activator, 6 + damage); }); }
private static void Jolt3(AbilityBuilder builder) { builder.Create(Feat.Jolt3, PerkType.Jolt) .Name("Jolt III") .HasRecastDelay(RecastGroup.Jolt, 4f) .RequirementMP(12) .UsesActivationType(AbilityActivationType.Casted) .HasActivationDelay(2f) .HasImpactAction((activator, target, level) => { var damage = Random.D10(2); ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Com_Hit_Electrical), target); ApplyEffectToObject(DurationType.Instant, EffectDamage(damage), target); Enmity.ModifyEnmity(activator, target, damage + 8); CombatPoint.AddCombatPoint(activator, target, SkillType.RedMagic, 3); }); }
private static void Bash(AbilityBuilder builder) { builder.Create(Feat.Bash, PerkType.Bash) .Name("Bash") .HasRecastDelay(RecastGroup.Bash, 12f) .RequirementStamina(5) .UsesActivationType(AbilityActivationType.Weapon) .HasImpactAction((activator, target, level) => { var damage = Random.D4(1); var length = 1f + GetAbilityModifier(AbilityType.Constitution, activator) * 0.5f; ApplyEffectToObject(DurationType.Instant, EffectVisualEffect(VisualEffect.Vfx_Imp_Confusion_S), target); ApplyEffectToObject(DurationType.Temporary, EffectStunned(), target, length); ApplyEffectToObject(DurationType.Instant, EffectDamage(damage, DamageType.Bludgeoning), target); Enmity.ModifyEnmity(activator, target, 4); CombatPoint.AddCombatPoint(activator, target, SkillType.Chivalry, 2); }); }
private static void ApplyBlizzardEffects(uint activator, uint target, int baseDamage, int enmity, float slowLength) { var multiplier = 1; if (StatusEffect.HasStatusEffect(activator, StatusEffectType.ElementalSeal)) { multiplier = 3; } var damage = baseDamage * multiplier; ApplyDamage(activator, target, damage); if (slowLength > 0.0f) { ApplyEffectToObject(DurationType.Temporary, EffectMovementSpeedDecrease(25), target, slowLength); } CombatPoint.AddCombatPoint(activator, target, SkillType.BlackMagic, 3); Enmity.ModifyEnmity(activator, target, enmity); }
private static void ApplyFireEffects(uint activator, uint target, int baseDamage, int enmity, float burnLength) { var multiplier = 1; if (StatusEffect.HasStatusEffect(activator, StatusEffectType.ElementalSeal)) { multiplier = 3; } var damage = baseDamage * multiplier; ApplyDamage(activator, target, damage); if (burnLength > 0.0f) { StatusEffect.Apply(activator, target, StatusEffectType.Burn, burnLength); } CombatPoint.AddCombatPoint(activator, target, SkillType.BlackMagic, 3); Enmity.ModifyEnmity(activator, target, enmity); }
private static void SneakAttack2(AbilityBuilder builder) { builder.Create(Feat.SneakAttack2, PerkType.SneakAttack) .Name("Sneak Attack II") .HasRecastDelay(RecastGroup.SneakAttack, 60f) .RequirementStamina(18) .UsesActivationType(AbilityActivationType.Weapon) .HasImpactAction((activator, target, level) => { var percentIncrease = 0.15f; if (IsBehindTarget(activator, target)) { percentIncrease = 0.50f; } SetLocalFloat(target, SneakAttackVariableName, percentIncrease); CombatPoint.AddCombatPoint(activator, target, SkillType.Thievery, 3); Enmity.ModifyEnmity(activator, target, 13); }); }
private static void ApplyStoneEffects(uint activator, uint target, int damage, int enmity) { ApplyDamage(activator, target, damage); CombatPoint.AddCombatPoint(activator, target, SkillType.WhiteMagic, 3); Enmity.ModifyEnmity(activator, target, enmity); }