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) > in needed_health: elegible_events.append(event) if '<' in requirements.get(check) and requirements.get(check) < in 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) > in needed_reputation: elegible_events.append(event) if '<' in requirements.get(check) and requirements.get(check) < in 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)