Example #1
0
        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);
        }
Example #4
0
        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);
            });
        }
Example #8
0
        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);
            });
        }
Example #10
0
        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);
 }