Added Backyard Baseball Gauntlet

This commit is contained in:
Cal Corum 2024-03-08 00:47:58 -06:00
parent 710d759d57
commit f65ec66724
3 changed files with 229 additions and 10 deletions

View File

@ -1531,7 +1531,8 @@ class Gameplay(commands.Cog):
@group_new_game.command(name='gauntlet', description='Start a new Gauntlet game against an AI')
@commands.has_any_role(PD_PLAYERS_ROLE_NAME)
async def new_game_gauntlet_command(
self, interaction: discord.Interaction, event_name: Literal['Taste of 2018'], sp_card_id: int):
self, interaction: discord.Interaction, event_name: Literal['Taste of 2018', 'Super Ultra Championship'],
sp_card_id: int):
await interaction.response.defer()
conflict = get_one_game(channel_id=interaction.channel.id, active=True)

View File

@ -416,9 +416,9 @@ class Players(commands.Cog):
@app_commands.checks.has_any_role(PD_PLAYERS_ROLE_NAME)
async def player_slash_command(
self, interaction: discord.Interaction, player_name: str,
cardset: Literal['All', '2008 Season', '2012 Season', '2013 Season', '2016 Season', '2018 Live', '2019 Season',
'2021 Season', '2022 Season', '2022 Promos', '2023 Season', '2023 Promos',
'Mario Super Sluggers', 'Sams Choice'] = 'All'):
cardset: Literal['All', '2008 Season', '2012 Season', '2013 Season', '2016 Season', '2018 Season',
'2019 Season', '2021 Season', '2022 Season', '2022 Promos', '2023 Season', '2023 Promos',
'Backyard Baseball', 'Mario Super Sluggers', 'Sams Choice'] = 'All'):
# min_rarity: Literal['Replacement', 'Reserve', 'Starter', 'All-Star', 'MVP'] = None):
ephemeral = False
if interaction.channel.name in ['paper-dynasty-chat', 'pd-news-ticker']:
@ -913,7 +913,7 @@ class Players(commands.Cog):
@group_gauntlet.command(name='start', description='Start a new Gauntlet run')
@app_commands.checks.has_any_role(PD_PLAYERS_ROLE_NAME)
async def gauntlet_start_command(
self, interaction: discord.Interaction, event_name: Literal['Taste of 2018']):
self, interaction: discord.Interaction, event_name: Literal['Taste of 2018', 'Super Ultra Championship']):
if 'hello' not in interaction.channel.name:
await interaction.response.send_message(
content='The draft will probably take you about 15 minutes. Why don\'t you head to your private '

View File

@ -240,6 +240,11 @@ async def run_draft(interaction: discord.Interaction, main_team, this_event, dra
embed_title = f'{main_team["lname"]} - {this_event["name"]} Draft'
embed_description = f'{this_event["name"]}'
base_params = [('cardset_id', 8), ('cardset_id', 13), ('cardset_id', 14), ('cardset_id', 15), ('limit', 8)]
elif this_event['id'] == 4:
embed_title = f'{main_team["lname"]} - {this_event["name"]} Draft'
embed_description = f'{this_event["name"]}'
base_params = [('cardset_id', 3), ('cardset_id', 4), ('cardset_id', 6), ('cardset_id', 16),
('cardset_id', 15), ('limit', 8)]
else:
logging.error(f'run_draft - Event ID {this_event["id"]} not recognized')
raise KeyError(f'Draft data not found for Gauntlet {this_event["id"]}')
@ -350,7 +355,7 @@ async def run_draft(interaction: discord.Interaction, main_team, this_event, dra
for z in helpers.get_all_pos(y):
all_str[z] += f'{name_string}\n'
if this_event['id'] == 3:
if this_event['id'] in [3, 4]:
top_embed.add_field(name=f'HoFs ({counts["Hall of Fame"]}/1)', value=all_str['Hall of Fame'], inline=False)
top_embed.add_field(name=f'MVPs ({counts["MVP"]}/1)', value=all_str['MVP'], inline=False)
else:
@ -381,6 +386,8 @@ async def run_draft(interaction: discord.Interaction, main_team, this_event, dra
last_message = await interaction.channel.send(content=None, embeds=get_embeds(include_links=False))
logging.info(f'going into draft')
backyard_round = None
custom_player_round = None
if this_event['id'] == 1:
mario_round = None
while round_num <= 26 and counter < 50:
@ -900,6 +907,204 @@ async def run_draft(interaction: discord.Interaction, main_team, this_event, dra
counts[p_choice['rarity']['name']] += 1
all_players.append(p_choice)
if p_choice['pos_1'] in ['SP', 'RP']:
counts[p_choice['pos_1']] += 1
else:
for x in helpers.get_all_pos(p_choice):
if x in counts:
counts[x] += 1
# Update roster embed
round_num += 1
await last_message.edit(content=None, embeds=get_embeds(include_links=False))
elif this_event['id'] == 4:
while round_num <= 26 and counter < 50:
counter += 1
params = copy.deepcopy(base_params)
# Set rarity param based on round number
if round_num == 1:
params.extend([
('min_rarity', RARITY['HoF']), ('max_rarity', RARITY['HoF'])
])
elif round_num == 2:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 5:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num == 6:
if random.randint(1, 2) == 1:
params = [
('min_rarity', RARITY['MVP']), ('max_rarity', RARITY['MVP']), ('cardset_id', 16)
]
backyard_round = 6
else:
params.extend([
('min_rarity', RARITY['MVP']), ('max_rarity', RARITY['MVP']), ('pos_exc', 'RP')
])
elif round_num == 7:
if random.randint(1, 2) == 1 and backyard_round is None:
params = [
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star']), ('cardset_id', 16)
]
backyard_round = 7
else:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num == 8:
if backyard_round is None:
params = [
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter']), ('cardset_id', 16)
]
backyard_round = 8
else:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 11:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 15:
params.extend([
('min_rarity', RARITY['Reserve']), ('max_rarity', RARITY['Reserve'])
])
elif round_num <= 18:
params.extend([
('min_rarity', RARITY['Replacement']), ('max_rarity', RARITY['Replacement'])
])
elif round_num == 19:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 21:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 24:
params.extend([
('min_rarity', RARITY['Reserve']), ('max_rarity', RARITY['Reserve'])
])
elif round_num <= 26:
params.extend([
('min_rarity', RARITY['Replacement']), ('max_rarity', RARITY['Replacement'])
])
this_batch = []
for x in ['SP', 'RP', 'IF', 'OF']:
# Slot 1 - SP
if x == 'SP':
if counts['SP'] > 5:
slot_params = [('pos_exc', 'RP')]
if counts['RP'] > 7:
slot_params = [('pos_exc', 'SP')]
else:
slot_params = [('pos_inc', 'SP')]
# if counts['SP'] > 5:
# slot_params = [('pos_exc', 'SP')]
# elif counts['RP'] < 6:
# slot_params = [('pos_inc', 'RP')]
# else:
# slot_params = [('pos_exc', 'SP'), ('pos_exc', 'RP')]
# Slot 2 - RP
elif x == 'RP':
logging.info(f'counts[RP]: {counts["RP"]}')
if counts['RP'] > 7:
slot_params = [('pos_exc', 'RP')]
if counts['SP'] > 5:
slot_params = [('pos_exc', 'SP')]
else:
slot_params = [('pos_inc', 'RP')]
# Slot 3 - IF
elif x == 'IF':
slot_params = []
for y in ['1B', '2B', '3B', 'SS', 'C']:
if (counts[y] > 1) and 0 in [
counts['C'], counts['1B'], counts['2B'], counts['3B'], counts['SS']
]:
slot_params.append(('pos_exc', y))
elif (y == 'C' and counts['C'] < 3) or (y != 'C' and counts[y] < 4):
slot_params.append(('pos_inc', y))
# if counts['C'] < 2:
# slot_params.append(('pos_inc', 'C'))
# if len(slot_params) == 0:
# slot_params = [('pos_exc', 'C'), ('pos_exc', '1B'), ('pos_exc', '2B'), ('pos_exc', '3B'),
# ('pos_exc', 'SS')]
# Slot 4 - OF
else:
slot_params = []
for y in ['LF', 'CF', 'RF']:
if counts[y] > 4:
slot_params.append(('pos_exc', y))
elif counts[y] > 1 and 0 in [counts['LF'], counts['CF'], counts['RF']]:
slot_params.append(('pos_exc', y))
elif counts[y] < 5:
slot_params.append(('pos_inc', y))
# if len(slot_params) == 0:
# slot_params = [('pos_exc', 'LF'), ('pos_exc', 'CF'), ('pos_exc', 'RF')]
logging.info(f'this_batch: {this_batch}')
logging.info(f'slot_params: {slot_params}')
logging.info(f'params: {params}')
# No position explicitly requested or denied
if len(slot_params) == 0:
if (counts['SP'] + counts['RP']) > (
counts['C'] + counts['1B'] + counts['2B'] + counts['SS'] + counts['LF'] + counts['CF'] +
counts['RF']):
pos_counts = [
('C', counts['C']), ('1B', counts['1B']), ('2B', counts['2B']), ('3B', counts['3B']),
('SS', counts['SS']), ('LF', counts['LF']), ('CF', counts['CF']), ('RF', counts['RF'])
]
pos_counts.sort(key=lambda z: z[1])
slot_params = [('pos_inc', pos_counts[0][0])]
else:
if counts['SP'] >= counts['RP']:
slot_params = [('pos_inc', 'RP')]
else:
slot_params = [('pos_inc', 'SP')]
slot_params.extend(params)
p_query = await db_get('players/random', params=slot_params)
if p_query['count'] > 0:
# test_player_list = ''
# for z in p_query['players']:
# test_player_list += f'{z["rarity"]["name"]} - {z["description"]} - {helpers.get_all_pos(x)}\n'
# Collect 1 cards with no repeat player names
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
break
if len(this_batch) < 4:
logging.error(f'Pulled less than 4 players in gauntlet draft')
p_query = await db_get('players/random', params=params)
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
if len(this_batch) >= 4:
break
if len(this_batch) < 4:
raise KeyError(f'This is embarassing, but I couldn\'t find enough players for you to draft from.')
# Present choices and capture selection
p_choice = await helpers.get_choice_from_cards(interaction, this_batch, delete_message=True)
# Add player to list and update counts
p_names.append(p_choice['p_name'])
counts[p_choice['rarity']['name']] += 1
all_players.append(p_choice)
if p_choice['pos_1'] in ['SP', 'RP']:
counts[p_choice['pos_1']] += 1
else:
@ -1044,16 +1249,29 @@ async def post_result(run_id: int, is_win: bool, this_team, bot, channel):
await db_post(f'teams/{main_team["id"]}/money/{x["reward"]["money"]}')
reward_string += f'- {x["reward"]["money"]}\n'
elif x['reward']['player']:
# TODO: add give player code
pass
elif x['reward']['pack_type'] and this_event['id'] == 3:
this_pack = await db_post(
'packs/one',
payload={
'team_id': main_team['id'],
'pack_type_id': 4,
'open_time': datetime.datetime.timestamp(datetime.datetime.now()) * 1000}
)
await helpers.give_cards_to_team(
main_team, player_ids=x['reward']['player']['player_id'], pack_id=this_pack['id'])
reward_string += f'- {helpers.player_desc(x["reward"]["player"])}\n'
elif x['reward']['pack_type'] and this_event['id'] in [3, 4]:
if this_event['id'] == 3:
cardset_id = 13
else:
cardset_id = 16
await db_post(
'packs', payload={'packs': [{
'team_id': main_team['id'],
'pack_type_id': x['reward']['pack_type']['id'],
'pack_cardset_id': 13
'pack_cardset_id': cardset_id
}]}
)
reward_string += f'- 1x {x["reward"]["pack_type"]["name"]} Pack'
elif x['reward']['pack_type']:
await helpers.give_packs(main_team, 1, x['reward']['pack_type'])
reward_string += f'- 1x {x["reward"]["pack_type"]["name"]} Pack'