87 lines
3.1 KiB
Python
87 lines
3.1 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(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)
|