Fix order of grabbing supplies and checking barrels
This commit is contained in:
		
							
								
								
									
										1
									
								
								game.py
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								game.py
									
									
									
									
									
								
							| @@ -75,6 +75,7 @@ class MCWorld: | ||||
|                 continue | ||||
|             if distance and utils.phyp(center, block) > distance: | ||||
|                 continue | ||||
|             if block not in result: | ||||
|                 result.append(block) | ||||
|  | ||||
|         result.sort(key=lambda x: utils.phyp(center, x)) | ||||
|   | ||||
							
								
								
									
										93
									
								
								jobs.py
									
									
									
									
									
								
							
							
						
						
									
										93
									
								
								jobs.py
									
									
									
									
									
								
							| @@ -743,7 +743,7 @@ class SleepWithBedStates: | ||||
|  | ||||
|         self.beds = [] | ||||
|         for bed in result: | ||||
|             if bed not in self.beds and bed not in self.bad_beds: | ||||
|             if bed not in self.bad_beds: | ||||
|                 self.beds.append(bed) | ||||
|  | ||||
|         print('Found:', self.beds) | ||||
| @@ -1121,6 +1121,8 @@ class GrabSuppliesStates: | ||||
|         return None | ||||
|  | ||||
|     def init(self): | ||||
|         self.checked_barrels = [] | ||||
|  | ||||
|         if self.supplies: | ||||
|             self.state = self.check_supplies | ||||
|         else: | ||||
| @@ -1128,33 +1130,22 @@ class GrabSuppliesStates: | ||||
|             self.state = self.cleanup | ||||
|  | ||||
|     def check_supplies(self): | ||||
|          | ||||
|         # TODO: only visit each barrel once | ||||
|         # switch the supplies and barrels steps | ||||
|  | ||||
|         # check if we need to grab anything | ||||
|         for items, limits in self.supplies.items(): | ||||
|             minimum, maximum = limits | ||||
|             print('Checking items:', items) | ||||
|             num_items = self.g.game.count_items(items) | ||||
|             print('Have:', num_items) | ||||
|  | ||||
|             if items in self.checked_supplies: | ||||
|                 print('Already checked, skipping') | ||||
|                 continue | ||||
|  | ||||
|             if num_items >= minimum: | ||||
|                 print('Have enough, skipping') | ||||
|                 continue | ||||
|  | ||||
|             self.target_items = items | ||||
|             self.checked_supplies.append(items) | ||||
|             self.maximum_items = maximum | ||||
|             self.count = 0 | ||||
|             print('Need at least one item') | ||||
|             self.state = self.find_barrels | ||||
|             return | ||||
|  | ||||
|         self.checked_supplies = [] | ||||
|         print('Aborting, don\'t need any more supplies') | ||||
|         print('Aborting, dont need any supplies') | ||||
|         self.state = self.cleanup | ||||
|  | ||||
|     def find_barrels(self): | ||||
| @@ -1168,16 +1159,26 @@ class GrabSuppliesStates: | ||||
|  | ||||
|     def choose_barrel(self): | ||||
|         print('Choosing a barrel...') | ||||
|         for barrel in self.barrels: | ||||
|             if barrel in self.checked_barrels: | ||||
|                 continue | ||||
|             if barrel in self.bad_barrels: | ||||
|                 continue | ||||
|  | ||||
|             self.barrel = barrel | ||||
|             self.state = self.path_to_barrel | ||||
|             return | ||||
|  | ||||
|         print('No barrels') | ||||
|         self.state = self.cleanup | ||||
|  | ||||
|     def path_to_barrel(self): | ||||
|         print('Finding path to barrel') | ||||
|         w = self.g.world | ||||
|         p = utils.pint(self.g.pos) | ||||
|         c = self.g.chunks | ||||
|  | ||||
|         if not len(self.barrels): | ||||
|             print('No barrels') | ||||
|             self.state = self.no_more_barrels | ||||
|             return | ||||
|  | ||||
|         barrel = self.barrels[0] | ||||
|         barrel = self.barrel | ||||
|  | ||||
|         tmp = c.get_block_at(*barrel) | ||||
|         c.set_block_at(*barrel, blocks.AIR) | ||||
| @@ -1189,11 +1190,15 @@ class GrabSuppliesStates: | ||||
|         if navpath: | ||||
|             self.g.path = navpath[:-1] | ||||
|             self.opening = self.g.path[-1] | ||||
|             self.checked_barrels.append(barrel) | ||||
|             self.area = barrel | ||||
|             self.state = self.going_to_barrel | ||||
|             self.checked_supplies = [] | ||||
|             return | ||||
|         else: | ||||
|             self.barrels.pop(0) | ||||
|             print('No path, blacklisting barrel') | ||||
|             self.bad_barrels.append(barrel) | ||||
|             self.state = self.choose_barrel | ||||
|  | ||||
|     def going_to_barrel(self): | ||||
|         if utils.pint(self.g.pos) == self.opening: | ||||
| @@ -1207,11 +1212,38 @@ class GrabSuppliesStates: | ||||
|         self.state = self.wait | ||||
|  | ||||
|     def wait(self): | ||||
|         # wait for server to send us barrel contents | ||||
|         # wait for server to send us inventory contents | ||||
|         if self.wait_time > 0: | ||||
|             self.wait_time -= utils.TICK | ||||
|         else: | ||||
|             self.state = self.choose_items | ||||
|  | ||||
|     def choose_items(self): | ||||
|         print('Selecting next item') | ||||
|         for items, limits in self.supplies.items(): | ||||
|             minimum, maximum = limits | ||||
|             print('Checking items:', items) | ||||
|             num_items = self.g.game.count_items(items) | ||||
|             print('Have:', num_items) | ||||
|  | ||||
|             if num_items >= minimum: | ||||
|                 print('Have enough, skipping') | ||||
|                 continue | ||||
|  | ||||
|             if items in self.checked_supplies: | ||||
|                 print('Already checked, skipping') | ||||
|                 continue | ||||
|  | ||||
|             print('Need some') | ||||
|             self.checked_supplies.append(items) | ||||
|             self.target_items = items | ||||
|             self.maximum_items = maximum | ||||
|             self.count = 0 | ||||
|             self.state = self.grab_items | ||||
|             return | ||||
|  | ||||
|         print('Aborting, dont need any more supplies') | ||||
|         self.state = self.close_barrel | ||||
|  | ||||
|     def grab_items(self): | ||||
|         if self.g.item_lock: return | ||||
| @@ -1251,8 +1283,9 @@ class GrabSuppliesStates: | ||||
|             self.g.game.click_window(slot_num, 0, 1, slot) | ||||
|             return | ||||
|  | ||||
|         print('Nothing left to move') | ||||
|         self.state = self.close_barrel | ||||
|         print('None left to move') | ||||
|         self.wait_time = 0.25 | ||||
|         self.state = self.wait | ||||
|  | ||||
|     def close_barrel(self): | ||||
|         print('Closing barrel') | ||||
| @@ -1261,9 +1294,6 @@ class GrabSuppliesStates: | ||||
|         self.barrels.pop(0) | ||||
|         self.state = self.choose_barrel | ||||
|  | ||||
|     def no_more_barrels(self): | ||||
|         self.state = self.check_supplies | ||||
|  | ||||
|     def cleanup(self): | ||||
|         self.state = self.done | ||||
|  | ||||
| @@ -1275,14 +1305,15 @@ class GrabSuppliesStates: | ||||
|         self.g = global_state | ||||
|         self.state = self.idle | ||||
|  | ||||
|         self.checked_supplies = [] | ||||
|         self.supplies = {} | ||||
|         self.barrels = [] | ||||
|  | ||||
|         self.checked_barrels = [] | ||||
|         self.bad_barrels = [] | ||||
|         self.barrel = None | ||||
|         self.checked_supplies = [] | ||||
|         self.target_items = None | ||||
|         self.maximum_items = 0 | ||||
|         self.count = 0 | ||||
|  | ||||
|         self.area = None | ||||
|         self.opening = None | ||||
|         self.wait_time = 0 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user