示例#1
0
        public virtual IResult Enchant(IItem item)
        {
            IResult result = null;

            if (Success(item))
            {
                IEnchantment randomEnchantment = MakeRandomEnchantment(item);

                if (randomEnchantment != null)
                {
                    item.Enchantments.Add(randomEnchantment);
                    result = new Result(EnchantmentSuccess, false);
                }
                else
                {
                    result = null;
                }
            }
            else
            {
                result = new Result(EnchantmentFail, false);
            }

            return(result);
        }
示例#2
0
文件: Enchantery.cs 项目: crybx/mud
        public IResult Enchant(IItem item)
        {
            IResult result      = null;
            int     successRate = (int)(Math.Pow(Math.Pow(item.Enchantments.Count + 1, .9), 2) * 100);

            if (GlobalReference.GlobalValues.Random.PercentDiceRoll(successRate))
            {
                IEnchantment randomEnchantment = MakeRandomEnchantment(item);

                if (randomEnchantment != null)
                {
                    item.Enchantments.Add(randomEnchantment);
                    result = new Result(true, EnchantmentSuccess);
                }
                else
                {
                    result = null;
                }
            }
            else
            {
                result = new Result(false, EnchantmentFail);
            }

            return(result);
        }
示例#3
0
        protected IEnchantment EnchantArmor(IItem item)
        {
            IEnchantment enchantment = null;
            IArmor       armor       = item as IArmor;

            if (armor != null)
            {
                switch (GlobalReference.GlobalValues.Random.Next(2))
                {
                case 0:
                    enchantment                = new DamageReceivedBeforeDefenseEnchantment();
                    enchantment.Effect         = GetRandomDefenseEffect();
                    enchantment.Parameter.Dice = GlobalReference.GlobalValues.DefaultValues.DiceForArmorLevel(item.Level);
                    break;

                case 1:
                    enchantment        = new DamageReceivedAfterDefenseEnchantment();
                    enchantment.Effect = new Effect.Damage();
                    Damage.Damage damage = new Damage.Damage();
                    damage.Dice = GlobalReference.GlobalValues.DefaultValues.DiceForWeaponLevel(item.Level);
                    damage.Type = GetRandomDamageType();
                    break;
                }
            }

            return(enchantment);
        }
示例#4
0
        private static void VerifyEnchantment(IEnchantment enchantment)
        {
            string type = "Enchantment";

            if (enchantment.Effect is Objects.Effect.Damage)
            {
                if (enchantment.Parameter.Description == null)
                {
                    ThrowConfigException(enchantment, type, $"Enchantments with effect damage must have a damage description.");
                }
            }
        }
示例#5
0
        public void ThrowDirt_AdditionalEffect()
        {
            throwDirt.Testable_AdditionalEffect(performer.Object, target.Object);

            notify.Verify(e => e.Mob(target.Object, It.Is <ITranslationMessage>(f => f.Message == "message")), Times.Once);
            Assert.AreEqual(1, enchantments.Count);
            IEnchantment enchantment = enchantments[0];

            Assert.IsTrue(enchantment is HeartbeatBigTickEnchantment);
            Assert.IsTrue(enchantment.Effect is Blindness);
            Assert.AreEqual(100, enchantment.ActivationPercent);
            Assert.AreEqual(9999, enchantment.EnchantmentEndingDateTime.Year);
            Assert.AreEqual(performer.Object.StrengthEffective, enchantment.DefeatInfo.CurrentEnchantmentPoints);
            Assert.AreEqual(Stat.Constitution, enchantment.DefeatInfo.MobStat);
        }
示例#6
0
        public void SpittingCobra_AdditionalEffect()
        {
            spittingCobra.Testable_AdditionalEffect(performer.Object, target.Object);

            Assert.AreEqual(1, enchantments.Count);

            IEnchantment addedEnchantment = enchantments[0];

            Assert.AreEqual(100, addedEnchantment.ActivationPercent);
            Assert.IsTrue(addedEnchantment.Effect is Objects.Effect.Damage);
            Assert.AreEqual(new DateTime(9999, 1, 1), addedEnchantment.EnchantmentEndingDateTime);

            Assert.AreEqual(Stats.Stat.Constitution, addedEnchantment.DefeatInfo.MobStat);
            Assert.AreEqual(9, addedEnchantment.DefeatInfo.CurrentEnchantmentPoints);

            Assert.AreEqual("Poison burns your face.", addedEnchantment.Parameter.TargetMessage.Message);
            Assert.IsNotNull(addedEnchantment.Parameter.Damage);
            Assert.AreSame(dice.Object, addedEnchantment.Parameter.Damage.Dice);
            Assert.AreEqual(DamageType.Poison, addedEnchantment.Parameter.Damage.Type);
        }
示例#7
0
        protected IEnchantment MakeRandomEnchantment(IItem item)
        {
            IEnchantment enchantment = null;

            if (item as IWeapon != null)
            {
                enchantment = EnchantWeapon(item);
            }
            else if (item as IArmor != null)
            {
                enchantment = EnchantArmor(item);
            }

            if (enchantment != null)
            {
                enchantment.ActivationPercent = GlobalReference.GlobalValues.Random.Next(100) + 1;
            }

            return(enchantment);
        }
示例#8
0
文件: World.cs 项目: elavanis/Mud
 private void CleanupEnchantments(IMobileObject mob)
 {
     if (mob.Enchantments.Count > 0)
     {
         for (int i = mob.Enchantments.Count; i > 0; i--)
         {
             IEnchantment enchantment = mob.Enchantments[i - 1];
             if (enchantment.EnchantmentEndingDateTime <= DateTime.UtcNow)
             {
                 mob.Enchantments.RemoveAt(i - 1);
             }
             else if (enchantment.DefeatInfo != null)
             {
                 if (enchantment.DefeatInfo.DoesPayerDefeatEnchantment(mob))
                 {
                     mob.Enchantments.RemoveAt(i - 1);
                 }
             }
         }
     }
 }
示例#9
0
 public Sword(IEnchantment enchantment)
 {
     this._enchantment = enchantment;
 }
示例#10
0
 public Sword(IEnchantment enchantment)
 {
     _enchantment = enchantment;
 }
示例#11
0
 public Hammer(IEnchantment enchantment)
 {
     _enchantment = enchantment;
 }
示例#12
0
 public Sword(IEnchantment enchantment = null)
 {
     Enchantment = enchantment;
 }
示例#13
0
 public Hammer(IEnchantment enchantment = null)
 {
     Enchantment = enchantment;
 }
示例#14
0
文件: Event.cs 项目: crybx/mud
        private static void RunEnchantment(IEnchantment enchantment, EventType eventType, EventParamerters paramerter)
        {
            switch (eventType)
            {
            case EventType.AttemptToFollow:
                enchantment.AttemptToFollow(paramerter.Direction, paramerter.Performer, paramerter.FollowedTarget);
                break;

            case EventType.Cast:
                enchantment.Cast(paramerter.Performer, paramerter.SpellName);
                break;

            case EventType.DamageDealtAfterDefense:
                enchantment.DamageDealtAfterDefense(paramerter.Attacker, paramerter.Defender, paramerter.DamageAmount);
                break;

            case EventType.DamageDealtBeforeDefense:
                enchantment.DamageDealtBeforeDefense(paramerter.Attacker, paramerter.Defender, paramerter.DamageAmount);
                break;

            case EventType.DamageReceivedAfterDefense:
                enchantment.DamageReceivedAfterDefense(paramerter.Attacker, paramerter.Defender, paramerter.DamageAmount);
                break;

            case EventType.DamageReceivedBeforeDefense:
                enchantment.DamageReceivedBeforeDefense(paramerter.Attacker, paramerter.Defender, paramerter.DamageAmount);
                break;

            case EventType.Drop:
                enchantment.Drop(paramerter.Performer, paramerter.Item);
                break;

            case EventType.EnterRoom:
                enchantment.EnterRoom(paramerter.Performer);
                break;

            case EventType.Equip:
                enchantment.Equip(paramerter.Performer, paramerter.Item);
                break;

            case EventType.Get:
                enchantment.Get(paramerter.Performer, paramerter.Item);
                break;

            case EventType.HeartbeatBigTick:
                enchantment.HeartbeatBigTick(paramerter.Performer);
                break;

            case EventType.LeaveRoom:
                enchantment.LeaveRoom(paramerter.Performer, paramerter.Direction);
                break;

            case EventType.OnDeath:
                enchantment.OnDeath(paramerter.Performer);
                break;

            case EventType.Perform:
                enchantment.Perform(paramerter.Performer, paramerter.SkillName);
                break;

            case EventType.ProcessedCommand:
                enchantment.ProcessedCommand(paramerter.Performer, paramerter.Command);
                break;

            case EventType.ProcessedCommunication:
                enchantment.ProcessedCommunication(paramerter.Performer, paramerter.Communication);
                break;

            case EventType.Relax:
                enchantment.Relax(paramerter.Performer);
                break;

            case EventType.ReturnedMessage:
                enchantment.ReturnedMessage(paramerter.Performer, paramerter.Message);
                break;

            case EventType.Sit:
                enchantment.Sit(paramerter.Performer);
                break;

            case EventType.Sleep:
                enchantment.Sleep(paramerter.Performer);
                break;

            case EventType.Stand:
                enchantment.Stand(paramerter.Performer);
                break;

            case EventType.Unequip:
                enchantment.Unequip(paramerter.Performer, paramerter.Item);
                break;
            }
        }
示例#15
0
 public Gun(IEnchantment enchantment)
 {
     _enchantment = enchantment;
 }