Village settings
This commit is contained in:
		@@ -8,9 +8,6 @@ import { Task } from '../Queue/TaskProvider';
 | 
			
		||||
import { clickSendButton, fillSendResourcesForm, grabMerchantsInfo } from '../Page/BuildingPage/MarketPage';
 | 
			
		||||
import { VillageState } from '../VillageState';
 | 
			
		||||
 | 
			
		||||
const TIMEOUT = 15;
 | 
			
		||||
const AMOUNT_THRESHOLD = 100;
 | 
			
		||||
 | 
			
		||||
@registerAction
 | 
			
		||||
export class SendResourcesAction extends ActionController {
 | 
			
		||||
    async run(args: Args, task: Task): Promise<any> {
 | 
			
		||||
@@ -29,17 +26,18 @@ export class SendResourcesAction extends ActionController {
 | 
			
		||||
        console.log('To transfer res', readyToTransfer);
 | 
			
		||||
 | 
			
		||||
        // Schedule recurrent task
 | 
			
		||||
        this.scheduler.scheduleTask(task.name, task.args, timestamp() + aroundMinutes(TIMEOUT));
 | 
			
		||||
        const timeout = senderVillage.settings.sendResourcesTimeout;
 | 
			
		||||
        this.scheduler.scheduleTask(task.name, task.args, timestamp() + aroundMinutes(timeout));
 | 
			
		||||
 | 
			
		||||
        fillSendResourcesForm(readyToTransfer, coordinates);
 | 
			
		||||
        clickSendButton();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private getMerchantsCapacity(): number {
 | 
			
		||||
    private getMerchantsCapacity(timeout: number): number {
 | 
			
		||||
        const merchants = grabMerchantsInfo();
 | 
			
		||||
        const capacity = merchants.available * merchants.carry;
 | 
			
		||||
        if (!capacity) {
 | 
			
		||||
            throw new TryLaterError(aroundMinutes(TIMEOUT), 'No merchants');
 | 
			
		||||
            throw new TryLaterError(aroundMinutes(timeout), 'No merchants');
 | 
			
		||||
        }
 | 
			
		||||
        return capacity;
 | 
			
		||||
    }
 | 
			
		||||
@@ -53,13 +51,21 @@ export class SendResourcesAction extends ActionController {
 | 
			
		||||
            { name: 'Sender free', ...free },
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        if (free.amount() < AMOUNT_THRESHOLD) {
 | 
			
		||||
            throw new TryLaterError(aroundMinutes(TIMEOUT), 'Little free resources');
 | 
			
		||||
        const amount = free.amount();
 | 
			
		||||
        const threshold = senderState.settings.sendResourcesThreshold;
 | 
			
		||||
        const timeout = senderState.settings.sendResourcesTimeout;
 | 
			
		||||
 | 
			
		||||
        if (amount < threshold) {
 | 
			
		||||
            throw new TryLaterError(
 | 
			
		||||
                aroundMinutes(timeout),
 | 
			
		||||
                `No free resources (amount ${amount} < threshold ${threshold})`
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return free;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private getRecipientRequirements(recipientState: VillageState): Resources {
 | 
			
		||||
    private getRecipientRequirements(recipientState: VillageState, timeout: number): Resources {
 | 
			
		||||
        const maxPossibleToStore = recipientState.storage.capacity.sub(recipientState.performance);
 | 
			
		||||
        const currentResources = recipientState.resources;
 | 
			
		||||
        const incomingResources = recipientState.incomingResources;
 | 
			
		||||
@@ -79,17 +85,18 @@ export class SendResourcesAction extends ActionController {
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        if (missingResources.empty()) {
 | 
			
		||||
            throw new TryLaterError(aroundMinutes(TIMEOUT), 'No missing resources');
 | 
			
		||||
            throw new TryLaterError(aroundMinutes(timeout), 'No missing resources');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return missingResources;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private getResourcesForTransfer(senderState: VillageState, recipientState: VillageState): Resources {
 | 
			
		||||
        const timeout = senderState.settings.sendResourcesTimeout;
 | 
			
		||||
        const senderReadySendResources = this.getSenderAvailableResources(senderState);
 | 
			
		||||
        const recipientNeedsResources = this.getRecipientRequirements(recipientState);
 | 
			
		||||
        const recipientNeedsResources = this.getRecipientRequirements(recipientState, timeout);
 | 
			
		||||
        const contractResources = senderReadySendResources.min(recipientNeedsResources);
 | 
			
		||||
        const merchantsCapacity = this.getMerchantsCapacity();
 | 
			
		||||
        const merchantsCapacity = this.getMerchantsCapacity(timeout);
 | 
			
		||||
 | 
			
		||||
        let readyToTransfer = contractResources;
 | 
			
		||||
        if (contractResources.amount() > merchantsCapacity) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user