fix payment for already found hints
This commit is contained in:
		
							parent
							
								
									e02025c534
								
							
						
					
					
						commit
						9842399d8b
					
				|  | @ -85,14 +85,16 @@ class Context: | |||
|         self.commandprocessor = ServerCommandProcessor(self) | ||||
| 
 | ||||
|     def get_save(self) -> dict: | ||||
|         return { | ||||
|         d = { | ||||
|             "rom_names": list(self.rom_names.items()), | ||||
|             "received_items": tuple((k, v) for k, v in self.received_items.items()), | ||||
|             "hints_used": tuple((key, value) for key, value in self.hints_used.items()), | ||||
|             "hints": tuple((key, value) for key, value in self.hints.items()), | ||||
|             "hints": tuple((key, list(value)) for key, value in self.hints.items()), | ||||
|             "location_checks": tuple((key, tuple(value)) for key, value in self.location_checks.items()) | ||||
|         } | ||||
| 
 | ||||
|         return d | ||||
| 
 | ||||
|     def set_save(self, savedata: dict): | ||||
|         rom_names = savedata["rom_names"] | ||||
|         received_items = {tuple(k): [ReceivedItem(*i) for i in v] for k, v in savedata["received_items"]} | ||||
|  | @ -557,38 +559,36 @@ class ClientMessageProcessor(CommandProcessor): | |||
|                     hints = collect_hints_location(self.ctx, self.client.team, self.client.slot, item_name) | ||||
| 
 | ||||
|                 if hints: | ||||
|                     if item_name in self.ctx.hints[self.client.team, self.client.slot]: | ||||
|                         notify_hints(self.ctx, self.client.team, hints) | ||||
|                         self.output("Hint was previously used, no points deducted.") | ||||
|                         return True | ||||
|                     else: | ||||
|                         found = 0 | ||||
|                         for hint in hints: | ||||
|                             found += 1 - hint.found | ||||
|                         if not found: | ||||
|                             notify_hints(self.ctx, self.client.team, hints) | ||||
|                             self.output("No new items found, no points deducted.") | ||||
|                             return False | ||||
|                     new_hints = set(hints) - self.ctx.hints[self.client.team, self.client.slot] | ||||
|                     old_hints = set(hints) - new_hints | ||||
|                     if old_hints: | ||||
|                         notify_hints(self.ctx, self.client.team, list(old_hints)) | ||||
|                         if not new_hints: | ||||
|                             self.output("Hint was previously used, no points deducted.") | ||||
|                     if new_hints: | ||||
|                         found_hints = sum(not hint.found for hint in new_hints) | ||||
|                         if not found_hints:  # everything's been found, no need to pay | ||||
|                             can_pay = True | ||||
|                         elif self.ctx.hint_cost: | ||||
|                             can_pay = points_available // (self.ctx.hint_cost * found_hints) >= 1 | ||||
|                         else: | ||||
|                             if self.ctx.hint_cost: | ||||
|                                 can_pay = points_available // (self.ctx.hint_cost * found) >= 1 | ||||
|                             else: | ||||
|                                 can_pay = True | ||||
|                             can_pay = True | ||||
| 
 | ||||
|                             if can_pay: | ||||
|                                 self.ctx.hints_used[self.client.team, self.client.slot] += found | ||||
|                         if can_pay: | ||||
|                             self.ctx.hints_used[self.client.team, self.client.slot] += found_hints | ||||
| 
 | ||||
|                                 for hint in hints: | ||||
|                             for hint in new_hints: | ||||
|                                 if not hint.found: | ||||
|                                     self.ctx.hints[self.client.team, hint.finding_player].add(hint) | ||||
|                                     self.ctx.hints[self.client.team, hint.receiving_player].add(hint) | ||||
|                                 notify_hints(self.ctx, self.client.team, hints) | ||||
|                                 save(self.ctx) | ||||
|                             else: | ||||
|                                 notify_client(self.client, f"You can't afford the hint. " | ||||
|                                                            f"You have {points_available} points and need at least " | ||||
|                                                            f"{self.ctx.hint_cost}, " | ||||
|                                                            f"more if multiple items are still to be found.") | ||||
|                             return True | ||||
|                             notify_hints(self.ctx, self.client.team, list(new_hints)) | ||||
|                             save(self.ctx) | ||||
|                         else: | ||||
|                             notify_client(self.client, f"You can't afford the hint. " | ||||
|                                                        f"You have {points_available} points and need at least " | ||||
|                                                        f"{self.ctx.hint_cost}, " | ||||
|                                                        f"more if multiple items are still to be found.") | ||||
|                         return True | ||||
|                 else: | ||||
|                     self.output("Nothing found. Item/Location may not exist.") | ||||
|                     return False | ||||
|  |  | |||
							
								
								
									
										3
									
								
								Utils.py
								
								
								
								
							
							
						
						
									
										3
									
								
								Utils.py
								
								
								
								
							|  | @ -168,6 +168,9 @@ class Hint(typing.NamedTuple): | |||
|             return Hint(self.receiving_player, self.finding_player, self.location, self.item, found) | ||||
|         return self | ||||
| 
 | ||||
|     def __hash__(self): | ||||
|         return hash((self.receiving_player, self.finding_player, self.location, self.item)) | ||||
| 
 | ||||
| def get_public_ipv4() -> str: | ||||
|     import socket | ||||
|     import urllib.request | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue