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 }); }
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)); }
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)); }
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; }
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); }
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"); } }
public virtual void GiveStats(ItemVariation enOption) { }