forked from Cryz/battle_royale_sim
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from assets.events import EVENTS
 | |
| import random as _random
 | |
| 
 | |
| class ArenaEventPicker():
 | |
|   def __init__(self, players):
 | |
|     self.players = players
 | |
|     self.event_list = EVENTS
 | |
|     self.already_picked_players =  []
 | |
| 
 | |
|   def pick_a_player():
 | |
|     the_player = _random.choice(self.players)
 | |
|     the_player_id = the_player.get('id')
 | |
| 
 | |
|     self.players = list(filter(lambda x : x.get('id') != the_player_id))
 | |
| 
 | |
|     self.already_picked_players.append(the_player)
 | |
|     
 | |
|     return the_player
 | |
| 
 | |
|   def pick_event(the_player):
 | |
| 
 | |
|     player_inventory  = the_player.get('inventory') or []
 | |
|     status            = the_player['health']
 | |
|     reputation        = the_player['reputation']
 | |
| 
 | |
|     elegible_events = []
 | |
|     for event in EVENTS:
 | |
|       requirements = event['requirements']
 | |
| 
 | |
|       keys_to_check = ['item', 'weapon', 'status', 'reputation', 'affected_players']
 | |
| 
 | |
|       for check in keys_to_check:
 | |
|         if requirements.get(check) and check == 'item':
 | |
|           needed_items = requirements.get('check')
 | |
|           if needed_items in player_inventory:
 | |
|             elegible_events.append(event)
 | |
| 
 | |
|         if requirements.get(check) and check == 'weapon':
 | |
|           needed_weapons = requirements.get('check')
 | |
|           if needed_items in player_inventory:
 | |
|             elegible_events.append(event)
 | |
| 
 | |
|         if requirements.get(check) and check == 'status':
 | |
|           needed_health = requirements.get('check')
 | |
|           if '>' in requirements.get(check) and requirements.get(check) > needed_health:
 | |
|             elegible_events.append(event)
 | |
|           if '<' in requirements.get(check) and requirements.get(check) < needed_health:
 | |
|             elegible_events.append(event)
 | |
| 
 | |
|         if requirements.get(check) and check == 'reputation':
 | |
|           needed_reputation = requirements.get('reputation')
 | |
|           if '>' in requirements.get(check) and requirements.get(check) > needed_reputation:
 | |
|             elegible_events.append(event)
 | |
|           if '<' in requirements.get(check) and requirements.get(check) < needed_reputation:
 | |
|             elegible_events.append(event)
 | |
|         
 | |
|         if check == 'affected_players':
 | |
|           needed_players = event.get('affected_players')
 | |
|           if needed_players < len(self.players):
 | |
|             elegible_events.append(event)
 | |
| 
 | |
|     the_event = _random.choice(elegible_events)
 | |
|     return the_event
 | |
| 
 | |
|   def pick_targets(number_of_targets):
 | |
|     random.shuffle(self.players)
 | |
|     return list(self.players[0:number_of_targets])
 | |
| 
 | |
|   def resolve_event():
 | |
|     playing_player = self.pick_a_player()
 | |
|     assigned_event = self.pick_event(playing_player)
 | |
| 
 | |
|     affected_players = assigned_event['affected_players']
 | |
|     if isinstance(affected_players,list):
 | |
|       affected_players = _random.choice(affected_players)
 | |
| 
 | |
|     targeted_players = self.pick_targets(affected_players)
 | |
| 
 | |
|     event_instance = _event.Event(assigned_event, playing_player)
 | |
|     
 | |
| 
 |