Example #1
0
        public void ItemUse(Player player, int itemId, WorldPosition position)
        {
            StorageItem i = Global.StorageService.GetItemById(player.Inventory, itemId);

            if (i == null)
            {
                return;
            }

            if (!CanUseItem(player, i, null, true))
            {
                return;
            }

            if (i.ItemTemplate.Id == 98) //Campfire
            {
                if (MapService.TryPutCampfire(player, position))
                {
                    Global.StorageService.RemoveItemById(player, player.Inventory, itemId, 1);
                }

                return;
            }

            ItemTemplate template = i.ItemTemplate;

            SkillStat skillStat = template.CatigorieStat as SkillStat;

            if (skillStat == null && template.CombatItemType != CombatItemType.RECIPE)
            {
                return;
            }

            switch (template.CombatItemType)
            {
            case CombatItemType.SKILLBOOK:
                Global.SkillsLearnService.UseSkillBook(player, template.Id);
                break;

            case CombatItemType.IMMEDIATE:
            case CombatItemType.DISPOSAL:
            {
                Global.SkillEngine.UseSkill(
                    player.Connection,
                    new UseSkillArgs
                    {
                        IsItemSkill   = true,
                        SkillId       = skillStat.SkillId,
                        StartPosition = position,
                    });

                new SpItemCooldown(itemId, template.Cooltime).Send(player);
            }
            break;

            case CombatItemType.NO_COMBAT:
                //new SpSystemNotice("Process use NO_COMBAT item").Send(player.Connection);
                break;

            case CombatItemType.RECIPE:
                Global.CraftService.AddRecipe(player, itemId);
                SystemMessages.YouLearnedToMakeRecipe("@item:" + itemId);
                //new SpSystemNotice("You learned new recipe").Send(player.Connection);
                break;
            }

            int groupId = ItemTemplate.Factory(itemId).CoolTimeGroup;

            if (groupId != 0)
            {
                if (player.ItemCoodowns.ContainsKey(groupId))
                {
                    player.ItemCoodowns[groupId] = RandomUtilities.GetCurrentMilliseconds();
                }
                else
                {
                    player.ItemCoodowns.Add(groupId, RandomUtilities.GetCurrentMilliseconds());
                }
            }

            Global.StorageService.RemoveItemById(player, player.Inventory, itemId, 1);
        }