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(self): 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.players)) self.already_picked_players.append(the_player) return the_player def pick_event(self, the_player): player_inventory = the_player.get_inventory() status = the_player.get_health() reputation = the_player.get_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') #NOTE: this is only to compensate a double type of needed_players # check NOTE on assets/events.py if isinstance(needed_players, list): if len(needed_players) < len(self.players): elegible_events.append(event) else: if needed_players < len(self.players): elegible_events.append(event) the_event = _random.choice(elegible_events) return the_event def pick_targets(self, number_of_targets): _random.shuffle(self.players) return list(self.players[0:number_of_targets]) def resolve_event(self): 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) # FIXME this is not implemented #event_instance = _event.Event(assigned_event, playing_player)