Jump to content
McKay Development

TF2AutoBot : Trying to implement auto crafting


Recommended Posts

Posted

Hi,

I am trying to auto craft Vaccinators on start and when a new trade offer is accepted.

// craftVaccinators.ts
import Bot from '../../Bot';
export default function craftVaccinators(bot: Bot): Promise<void> {
    return new Promise(resolve => {
        if (!bot.options.crafting.weapons.enable) {
            return resolve();
        }

        const inventory = bot.inventoryManager.getInventory;
        const quickFix = inventory.currenciesFindBySKU('411;6');
        const reclaimed = inventory.currenciesFindBySKU('5001;6');

        const amountToCraft = Math.min(Math.trunc(quickFix.length / 3), reclaimed.length);

        for (let i = 0; i < amountToCraft; i++) {
            bot.tf2gc.craftVaccinators();
        }

        return resolve();
    });
}

I am calling craftVaccinators at onReady and onTradeOfferChanged

// MyHandler.ts
if (this.isCraftingManual === false) {
	// Smelt / combine metal
    keepMetalSupply(this.bot, this.minimumScrap, this.minimumReclaimed, this.combineThreshold);

    // Craft duplicate weapons
    craftDuplicateWeapons(this.bot)
    	.then(() => {
        	return craftClassWeapons(this.bot).then(() => {
            	return craftVaccinators(this.bot);
            });
       	})
        .catch(err => {
        	log.warn('Failed to craft duplicated craft/class weapons', err);
        });
}

Which create jobs handled by handleCraftVaccinators

// TF2GC.ts
private handleCraftVaccinators(job: Job): void {
        const inventory = this.bot.inventoryManager.getInventory;

        const assetids1 = inventory.findBySKU('411;6', true).filter(assetid => !this.bot.trades.isInTrade(assetid));
        const assetids2 = inventory.findBySKU('5001;6', true).filter(assetid => !this.bot.trades.isInTrade(assetid));

        if (assetids1.length < 3 || assetids2.length < 1) {
            return this.finishedProcessingJob(new Error("Can't process job"));
        }

        const ids = [...assetids1.splice(0, 3), ...assetids2.splice(0, 1)];
        log.debug('Sending vaccinator craft request');
        this.bot.tf2.craft(ids);

        const gainSKU = '998;6';
        this.listenForEvent(
            'craftingComplete',
            (recipe: number, itemsGained: string[]) => {
                log.debug('itemsGained', itemsGained);
                if (itemsGained.length > 0) {
                    // Remove items used for recipe
                    ids.forEach(assetid => inventory.removeItem(assetid));

                    // Add items gained
                    itemsGained.forEach(assetid => inventory.addItem(gainSKU, assetid));
                }

                this.finishedProcessingJob();
            },
            err => {
                this.finishedProcessingJob(err);
            }
        );
    }

 

My issue is that most of the time, craftingComplete is emitted but the Vaccinator has not been crafted and itemsGained is empty.

Any idea what I am doing wrong ?

Thanks.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...