Add quick actions and mass resources to level upgrade
This commit is contained in:
		
							
								
								
									
										51
									
								
								src/Action/UpgradeResourceToLevel.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								src/Action/UpgradeResourceToLevel.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| import { ActionController, registerAction } from './ActionController'; | ||||
| import { Args } from '../Common'; | ||||
| import { ActionError, GrabError, TryLaterError } from '../Errors'; | ||||
| import { Task } from '../Storage/TaskQueue'; | ||||
| import { clickUpgradeButton } from '../Page/BuildingPage'; | ||||
| import { grabResourceDeposits } from '../Page/SlotBlock'; | ||||
| import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; | ||||
|  | ||||
| @registerAction | ||||
| export class UpgradeResourceToLevel extends ActionController { | ||||
|     async run(args: Args, task: Task): Promise<any> { | ||||
|         const deposits = grabResourceDeposits(); | ||||
|         if (deposits.length === 0) { | ||||
|             throw new ActionError(task.id, 'No deposits'); | ||||
|         } | ||||
|  | ||||
|         const villageId = args.villageId; | ||||
|         const requiredLevel = args.level; | ||||
|         const tasks = this.scheduler.getTaskItems(); | ||||
|  | ||||
|         const allUpgraded = deposits.reduce((memo, dep) => memo && dep.level >= requiredLevel, true); | ||||
|  | ||||
|         if (allUpgraded) { | ||||
|             this.scheduler.completeTask(task.id); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         const available = deposits | ||||
|             .sort((x, y) => x.level - y.level) | ||||
|             .filter(dep => dep.ready) | ||||
|             .filter( | ||||
|                 dep => | ||||
|                     tasks.find( | ||||
|                         t => | ||||
|                             t.name === UpgradeBuildingTask.name && | ||||
|                             t.args.villageId === villageId && | ||||
|                             t.args.buildId === dep.buildId | ||||
|                     ) === undefined | ||||
|             ); | ||||
|  | ||||
|         if (available.length === 0) { | ||||
|             throw new TryLaterError(task.id, 10 * 60, 'No available deposits'); | ||||
|         } | ||||
|  | ||||
|         const targetDep = available[0]; | ||||
|  | ||||
|         this.scheduler.scheduleTask(UpgradeBuildingTask.name, { villageId, buildId: targetDep.buildId }); | ||||
|  | ||||
|         throw new TryLaterError(task.id, 20 * 60, 'Sleep for next round'); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user