Files
battle_royale_sim/entities/event_picker.py
2025-08-10 15:32:47 +02:00

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)