Beispiel #1
0
    public void FinishCrafting(ItemCraftTask task)
    {
        --task.amount;
        ++task.numCrafted;
        ulong skin     = ItemDefinition.FindSkin(task.blueprint.targetItem.itemid, task.skinID);
        Item  byItemId = ItemManager.CreateByItemID(task.blueprint.targetItem.itemid, 1, skin);

        byItemId.amount = task.blueprint.amountToCreate;
        if (byItemId.hasCondition && (double)task.conditionScale != 1.0)
        {
            byItemId.maxCondition *= task.conditionScale;
            byItemId.condition     = byItemId.maxCondition;
        }
        byItemId.OnVirginSpawn();
        foreach (ItemAmount ingredient in task.blueprint.ingredients)
        {
            int amount = (int)ingredient.amount;
            if (task.takenItems != null)
            {
                foreach (Item takenItem in task.takenItems)
                {
                    if (Object.op_Equality((Object)takenItem.info, (Object)ingredient.itemDef))
                    {
                        int num = Mathf.Min(takenItem.amount, amount);
                        takenItem.UseItem(amount);
                        amount -= num;
                    }
                }
            }
        }
        Analytics.Crafting(task.blueprint.targetItem.shortname, task.skinID);
        task.owner.Command("note.craft_done", (object)task.taskUID, (object)1, (object)task.amount);
        Interface.CallHook("OnItemCraftFinished", (object)task, (object)byItemId);
        if (task.instanceData != null)
        {
            byItemId.instanceData = task.instanceData;
        }
        if (!string.IsNullOrEmpty(task.blueprint.UnlockAchievment))
        {
            task.owner.GiveAchievement(task.blueprint.UnlockAchievment);
        }
        if (task.owner.inventory.GiveItem(byItemId, (ItemContainer)null))
        {
            task.owner.Command("note.inv", (object)byItemId.info.itemid, (object)byItemId.amount);
        }
        else
        {
            ItemContainer itemContainer = this.containers.First <ItemContainer>();
            task.owner.Command("note.inv", (object)byItemId.info.itemid, (object)byItemId.amount);
            task.owner.Command("note.inv", (object)byItemId.info.itemid, (object)-byItemId.amount);
            byItemId.Drop(itemContainer.dropPosition, itemContainer.dropVelocity, (Quaternion)null);
        }
    }