// Token: 0x060039B7 RID: 14775 RVA: 0x000CB508 File Offset: 0x000C9708
    public override global::InventoryItem.MergeResult TryCombine(global::IInventoryItem other)
    {
        global::ItemDataBlock db = other.datablock;
        DB db2 = this.datablock;

        global::ItemDataBlock.CombineRecipe matchingRecipe = db2.GetMatchingRecipe(db);
        if (matchingRecipe == null)
        {
            return(global::InventoryItem.MergeResult.Failed);
        }
        int uses = other.uses;

        if (uses < matchingRecipe.amountToLoseOther)
        {
            return(global::InventoryItem.MergeResult.Failed);
        }
        if (base.uses < matchingRecipe.amountToLose)
        {
            return(global::InventoryItem.MergeResult.Failed);
        }
        global::Inventory inventory = other.inventory;
        int num  = base.uses / matchingRecipe.amountToLose;
        int num2 = uses / matchingRecipe.amountToLoseOther;
        int num3 = Mathf.Min(num, num2);
        int num4 = 0;

        if (matchingRecipe.resultItem.IsSplittable())
        {
            num4 = Mathf.CeilToInt((float)num3 / (float)num4);
        }
        else
        {
            num4 = num3;
        }
        int vacantSlotCount = inventory.vacantSlotCount;

        if (num4 > vacantSlotCount)
        {
            return(global::InventoryItem.MergeResult.Failed);
        }
        int num5 = num3 * matchingRecipe.amountToLoseOther;

        if (other.Consume(ref num5))
        {
            inventory.RemoveItem(other.slot);
        }
        inventory.AddItemAmount(matchingRecipe.resultItem, num3, global::Inventory.AmountMode.Default);
        int num6 = num3 * matchingRecipe.amountToLose;

        if (base.Consume(ref num6))
        {
            base.inventory.RemoveItem(base.slot);
        }
        return(global::InventoryItem.MergeResult.Failed);
    }
Beispiel #2
0
    // Token: 0x060036F8 RID: 14072 RVA: 0x000C5E84 File Offset: 0x000C4084
    public override bool CompleteWork(global::IToolItem tool, global::Inventory workbenchInv)
    {
        if (!this.CanWork(tool, workbenchInv))
        {
            return(false);
        }
        global::IInventoryItem     firstItemNotTool = base.GetFirstItemNotTool(tool, workbenchInv);
        global::BlueprintDataBlock blueprintDataBlock;

        global::BlueprintDataBlock.FindBlueprintForItem <global::BlueprintDataBlock>(firstItemNotTool.datablock, out blueprintDataBlock);
        int num = 1;

        if (firstItemNotTool.datablock.IsSplittable())
        {
            num = firstItemNotTool.uses;
        }
        for (int i = 0; i < num; i++)
        {
            foreach (global::BlueprintDataBlock.IngredientEntry ingredientEntry in blueprintDataBlock.ingredients)
            {
                int num2 = Random.Range(0, 4);
                if (num2 != 0)
                {
                    if (num2 == 1 || num2 == 2 || num2 == 3)
                    {
                        workbenchInv.AddItemAmount(ingredientEntry.Ingredient, ingredientEntry.amount);
                    }
                }
            }
        }
        int num3;

        if (!firstItemNotTool.datablock.IsSplittable())
        {
            num3 = firstItemNotTool.uses;
        }
        else
        {
            num3 = num;
        }
        if (firstItemNotTool.Consume(ref num3))
        {
            firstItemNotTool.inventory.RemoveItem(firstItemNotTool.slot);
        }
        return(true);
    }
    // Token: 0x06003CED RID: 15597 RVA: 0x000DA0FC File Offset: 0x000D82FC
    public bool CompleteRepair(global::Inventory ingredientInv)
    {
        if (!this.CanRepair(ingredientInv))
        {
            return(false);
        }
        global::IInventoryItem     repairItem = this.GetRepairItem();
        global::BlueprintDataBlock blueprintDataBlock;

        if (!global::BlueprintDataBlock.FindBlueprintForItem <global::BlueprintDataBlock>(repairItem.datablock, out blueprintDataBlock))
        {
            return(false);
        }
        for (int i = 0; i < blueprintDataBlock.ingredients.Length; i++)
        {
            global::BlueprintDataBlock.IngredientEntry ingredientEntry = blueprintDataBlock.ingredients[i];
            int j = Mathf.RoundToInt((float)blueprintDataBlock.ingredients[i].amount * this.GetResourceScalar());
            if (j > 0)
            {
                while (j > 0)
                {
                    int num = 0;
                    global::IInventoryItem inventoryItem = ingredientInv.FindItem(ingredientEntry.Ingredient, out num);
                    if (inventoryItem == null)
                    {
                        return(false);
                    }
                    if (inventoryItem.Consume(ref j))
                    {
                        ingredientInv.RemoveItem(inventoryItem.slot);
                    }
                }
            }
        }
        float num2 = repairItem.maxcondition - repairItem.condition;
        float num3 = num2 * 0.2f + 0.05f;

        repairItem.SetMaxCondition(repairItem.maxcondition - num3);
        repairItem.SetCondition(repairItem.maxcondition);
        return(true);
    }
	// Token: 0x0600390C RID: 14604 RVA: 0x000C9F9C File Offset: 0x000C819C
	public virtual void ActualReload_COD()
	{
		this.reloadStartTime = Time.time;
		base.nextPrimaryAttackTime = Time.time + this.datablock.reloadDuration;
		global::Inventory inventory = base.inventory;
		int i = base.uses;
		int maxClipAmmo = this.datablock.maxClipAmmo;
		if (i == maxClipAmmo)
		{
			return;
		}
		int num = maxClipAmmo - i;
		int num2 = 0;
		while (i < maxClipAmmo)
		{
			global::IInventoryItem inventoryItem = inventory.FindItem(this.datablock.ammoType);
			if (inventoryItem == null)
			{
				break;
			}
			int num3 = num;
			if (inventoryItem.Consume(ref num))
			{
				inventory.RemoveItem(inventoryItem.slot);
			}
			num2 += num3 - num;
			if (num == 0)
			{
				break;
			}
		}
		if (num2 > 0)
		{
			base.AddUses(num2);
		}
		inventory.Refresh();
	}
    // Token: 0x060038F1 RID: 14577 RVA: 0x000C9ADC File Offset: 0x000C7CDC
    public override void ItemPreFrame(ref global::HumanController.InputSample sample)
    {
        global::ViewModel viewModelInstance = base.viewModelInstance;

        if (sample.attack && base.nextPrimaryAttackTime <= Time.time)
        {
            if (this.IsArrowDrawn())
            {
                float num = Time.time - this.completeDrawTime;
                if (num > 1f)
                {
                    T datablock = this.datablock;
                    datablock.Local_GetTired(viewModelInstance, base.itemRepresentation, this.iface as global::IBowWeaponItem, ref sample);
                    this.tired = true;
                }
                if (num > this.datablock.tooTiredLength)
                {
                    T datablock2 = this.datablock;
                    datablock2.Local_CancelArrow(viewModelInstance, base.itemRepresentation, this.iface as global::IBowWeaponItem, ref sample);
                }
            }
            else if (!this.IsArrowDrawn() && !this.IsArrowDrawing())
            {
                if (this.FindAmmo() == null)
                {
                    Rust.Notice.Popup("", "No Arrows!", 4f);
                    this.MakeReadyIn(2f);
                }
                else
                {
                    T datablock3 = this.datablock;
                    datablock3.Local_ReadyArrow(viewModelInstance, base.itemRepresentation, this.iface as global::IBowWeaponItem, ref sample);
                }
            }
            else if (this.completeDrawTime < Time.time)
            {
                this.arrowDrawn = true;
            }
            if (this.IsArrowDrawingOrDrawn() && Time.time - (this.completeDrawTime - 1f) > 0.5f)
            {
                sample.aim = true;
            }
        }
        else
        {
            if (this.IsArrowDrawn())
            {
                global::IInventoryItem inventoryItem = this.FindAmmo();
                if (inventoryItem == null)
                {
                    Rust.Notice.Popup("", "No Arrows!", 4f);
                    T datablock4 = this.datablock;
                    datablock4.Local_CancelArrow(viewModelInstance, base.itemRepresentation, this.iface as global::IBowWeaponItem, ref sample);
                }
                else
                {
                    int num2 = 1;
                    if (inventoryItem.Consume(ref num2))
                    {
                        base.inventory.RemoveItem(inventoryItem.slot);
                    }
                    T datablock5 = this.datablock;
                    datablock5.Local_FireArrow(viewModelInstance, base.itemRepresentation, this.iface as global::IBowWeaponItem, ref sample);
                }
            }
            else if (this.IsArrowDrawingOrDrawn())
            {
                T datablock6 = this.datablock;
                datablock6.Local_CancelArrow(viewModelInstance, base.itemRepresentation, this.iface as global::IBowWeaponItem, ref sample);
            }
            sample.aim = false;
        }
        if (sample.aim)
        {
            sample.yaw   *= this.datablock.aimSensitivtyPercent;
            sample.pitch *= this.datablock.aimSensitivtyPercent;
        }
    }