Ejemplo n.º 1
0
        public override void Ready(bool ready, ushort step)
        {
            List<CharacterItemRecord> results = new List<CharacterItemRecord>();
            Dictionary<uint, uint> removed = new Dictionary<uint, uint>();

            if (ready)
            {
                var recipe = GetRecipe();

                if (recipe != null && recipe.ResultLevel <= CharacterJob.Level)
                {
                    for (int i = 0; i < Count; i++)
                    {
                        if (Character.IsInExchange(ExchangeTypeEnum.CRAFT))
                        {
                            results.Add(recipe.Result.GetCharacterItem(Character.Id, 1, true)); // True = jet parfait

                            foreach (var ingredient in CraftedItems.GetItems())
                            {
                                if (!removed.ContainsKey(ingredient.UId))
                                    removed.Add(ingredient.UId, ingredient.Quantity);
                                else
                                    removed[ingredient.UId] += ingredient.Quantity;
                            }
                        }
                        else
                            return;
                    }

                    CraftedItems.Clear(false);

                    Character.Inventory.RemoveItems(removed);
                    Character.Inventory.AddItems(results);

                    OnCraftResulted(CraftResultEnum.CRAFT_SUCCESS, results.Last());

                    Character.SendMap(new ExchangeCraftInformationObjectMessage((sbyte)CraftResultEnum.CRAFT_SUCCESS, recipe.ResultId, (ulong)Character.Id));

                    int craftXpRatio = recipe.Result.Weapon ? WeaponRecord.GetWeapon(recipe.ResultId).CraftXpRatio : -1;
                    int exp = FormulasProvider.Instance.GetCraftXpByJobLevel(recipe.ResultLevel, CharacterJob.Level, craftXpRatio);
                    Character.AddJobExp(JobType, (ulong)(exp * Count));
                    SetCount(1);
                }
                else
                {
                    OnCraftResulted(CraftResultEnum.CRAFT_FAILED);
                }
            }
            else
            {
                OnCraftResulted(CraftResultEnum.CRAFT_FAILED);
            }
        }
Ejemplo n.º 2
0
        private RecipeRecord GetRecipe()
        {
            Dictionary<ushort, uint> ingredients = new Dictionary<ushort, uint>();

            foreach (var item in CraftedItems.GetItems())
            {
                if (!ingredients.ContainsKey(item.GId))
                    ingredients.Add(item.GId, item.Quantity);
            }

            var template = RecipeRecord.Recipes.Find(x => x.Ingredients.ScramEqualDictionary(ingredients) && x.SkillId == SkillId);
            return template;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// FAILLE WPE
        /// </summary>
        /// <param name="gid"></param>
        public void SetRecipe(ushort gid)
        {
            var recipe = RecipeRecord.GetRecipe(gid);

            if (recipe != null && recipe.ResultLevel <= Character.GetJob(JobType).Level)
            {
                foreach (var ingredient in recipe.Ingredients)
                {
                    CharacterItemRecord item = Character.Inventory.GetFirstItem(ingredient.Key, ingredient.Value);
                    if (item != null)
                    {
                        CraftedItems.AddItem(item, ingredient.Value);
                    }
                }
                SetCount(1);
            }
        }