Пример #1
0
        private static ItemSlotEquip ToItemSlot(
            this ItemEquipTemplate template,
            ItemVariationType type = ItemVariationType.None
            )
        {
            var variation = new ItemVariation(Rand32.Create(), type);

            return(new ItemSlotEquip
            {
                TemplateID = template.ID,

                RUC = template.TUC,
                STR = (short)variation.Get(template.IncSTR),
                DEX = (short)variation.Get(template.IncDEX),
                INT = (short)variation.Get(template.IncINT),
                LUK = (short)variation.Get(template.IncLUK),
                MaxHP = (short)variation.Get(template.IncMaxHP),
                MaxMP = (short)variation.Get(template.IncMaxMP),
                PAD = (short)variation.Get(template.IncPAD),
                MAD = (short)variation.Get(template.IncMAD),
                PDD = (short)variation.Get(template.IncPDD),
                MDD = (short)variation.Get(template.IncMDD),
                ACC = (short)variation.Get(template.IncACC),
                EVA = (short)variation.Get(template.IncEVA),
                Craft = (short)variation.Get(template.IncCraft),
                Speed = (short)variation.Get(template.IncSpeed),
                Jump = (short)variation.Get(template.IncJump),
                Durability = 100
            });
        }
Пример #2
0
        public void DefaultVariationResultIsAccurate()
        {
            var rand      = new Rand32(100, 200, 300);
            var variation = new ItemVariation(rand, ItemVariationType.None);

            Assert.Equal(10, variation.Get(10));
            Assert.Equal(10, variation.Get(10));
            Assert.Equal(10, variation.Get(10));
        }
Пример #3
0
        public void GachaponVariationResultIsAccurate()
        {
            var rand      = new Rand32(100, 200, 300);
            var variation = new ItemVariation(rand, ItemVariationType.Gachapon);

            Assert.Equal(12, variation.Get(10));
            Assert.Equal(11, variation.Get(10));
            Assert.Equal(10, variation.Get(10));
        }
Пример #4
0
 public static ItemVariation Map(dynamic value)
 {
     var variation = new ItemVariation()
     {
         Id = value.VariationId,
         ItemId = value.ItemId,
         Price = value.VariationPrice,
         Quantity = value.VariationOrdinal,
         Sku = value.VariationSku,
         VariationName = value.VariationName
     };
     return variation;
 }
Пример #5
0
        public override void GiveStats(ItemVariation enOption)
        {
            if (!BaseDataProvider.Equips.TryGetValue(ItemID, out EquipData data))
            {
                return;
            }

            Slots  = data.Slots;
            Amount = 1; // Force it to be 1.

            if (enOption != ItemVariation.None)
            {
                Str   = GetVariation(data.Strength, enOption);
                Dex   = GetVariation(data.Dexterity, enOption);
                Int   = GetVariation(data.Intellect, enOption);
                Luk   = GetVariation(data.Luck, enOption);
                HP    = GetVariation(data.HP, enOption);
                MP    = GetVariation(data.MP, enOption);
                Watk  = GetVariation(data.WeaponAttack, enOption);
                Wdef  = GetVariation(data.WeaponDefense, enOption);
                Matk  = GetVariation(data.MagicAttack, enOption);
                Mdef  = GetVariation(data.MagicDefense, enOption);
                Acc   = GetVariation(data.Accuracy, enOption);
                Avo   = GetVariation(data.Avoidance, enOption);
                Hands = GetVariation(data.Hands, enOption);
                Speed = GetVariation(data.Speed, enOption);
                Jump  = GetVariation(data.Jump, enOption);
            }
            else
            {
                Str   = data.Strength;
                Dex   = data.Dexterity;
                Int   = data.Intellect;
                Luk   = data.Luck;
                HP    = data.HP;
                MP    = data.MP;
                Watk  = data.WeaponAttack;
                Wdef  = data.WeaponDefense;
                Matk  = data.MagicAttack;
                Mdef  = data.MagicDefense;
                Acc   = data.Accuracy;
                Avo   = data.Avoidance;
                Hands = data.Hands;
                Speed = data.Speed;
                Jump  = data.Jump;
            }
        }
        public async Task GetDefinitionForVersionAsnyc_GivenVersion_ReturnsItems()
        {
            VersionDefinition result = await GetDefinitionsForVersion();

            Assert.NotEmpty(result.Items);

            // Test against Coal
            Item item = result.Items.First(i => i.Id == 263);

            Assert.Equal(263, item.Id);
            Assert.Equal("Coal", item.DisplayName);
            Assert.Equal(64, item.StackSize);
            Assert.Equal("coal", item.Name);
            Assert.NotEmpty(item.Variations);

            ItemVariation variation = item.Variations.First();

            Assert.Equal(0, variation.Metadata);
            Assert.Equal("Coal", variation.DisplayName);
        }
Пример #7
0
        public static short GetVariation(short v, ItemVariation enOption)
        {
            if (v <= 0)
            {
                return(0);
            }
            if (enOption == ItemVariation.Gachapon)
            {
                // TODO: Gacha
                return(v);
            }
            // This logic has 2 bonus bits.

            int maxDiff = Math.Min(v / 10 + 1, 5); // Max stat

            // Maximum amount of bits to set
            // Note:
            // Default: 1 << (1 + 2) == 0x08 (3 bits)
            // Max:     1 << (5 + 2) == 0x80 (7 bits)
            uint maxBits  = (uint)(1 << (maxDiff + 2));
            int  randBits = (int)(Rand32.Next() % maxBits);

            // Trace.WriteLine($"{(v11 >> 6) & 1} {(v11 >> 5) & 1} | {(v11 >> 4) & 1} {(v11 >> 3) & 1} {(v11 >> 2) & 1} {(v11 >> 1) & 1} {(v11 >> 0) & 1} ");

            // 0 - 3 range
            int calculatedBoost =
                0
                + ((randBits >> 4) & 1)
                + ((randBits >> 3) & 1)
                + ((randBits >> 2) & 1)
                + ((randBits >> 1) & 1)
                + ((randBits >> 0) & 1)
                // Additional bonus
                - 2
                + ((randBits >> 5) & 1)
                + ((randBits >> 6) & 1);

            // Trace.WriteLine($"Boost w/ bonus: {calculatedBoost}");

            // Make sure we don't give negative boost
            calculatedBoost = Math.Max(0, calculatedBoost);

            //Trace.WriteLine($"Actual boost: {calculatedBoost}");


            // Normal is the only one that can go down. The rest goes up
            if (enOption == ItemVariation.Normal)
            {
                if ((Rand32.Next() & 1) == 0)
                {
                    return((short)(v - calculatedBoost));
                }
                else
                {
                    return((short)(v + calculatedBoost));
                }
            }
            else if (enOption == ItemVariation.Better)
            {
                if ((Rand32.Next() % 10) < 3)
                {
                    return(v);
                }
                else
                {
                    return((short)(v + calculatedBoost));
                }
            }
            else if (enOption == ItemVariation.Great)
            {
                if ((Rand32.Next() % 10) < 1)
                {
                    return(v);
                }
                else
                {
                    return((short)(v + calculatedBoost));
                }
            }
            else
            {
                throw new Exception("Invalid ItemVariation");
            }
        }
Пример #8
0
 public virtual void GiveStats(ItemVariation enOption)
 {
 }