Major League Campaign update

Prepping for Flashback campaign
This commit is contained in:
Cal Corum 2023-11-05 20:02:43 -06:00
parent eb22960f2c
commit 16225aea13
4 changed files with 114 additions and 40 deletions

View File

@ -317,8 +317,10 @@ async def build_lineup(team_object: dict, game_id: int, league_name: str, sp_nam
# sorted_players = sorted(players.items(), key=lambda x: x[1]['cost'], reverse=True) # sorted_players = sorted(players.items(), key=lambda x: x[1]['cost'], reverse=True)
build_type = 'fun' build_type = 'fun'
l_query = await db_get(f'teams/{team_object["id"]}/lineup/{league_name}?pitcher_name={sp_name}' l_query = await db_get(
f'&build_type={build_type}') f'teams/{team_object["id"]}/lineup/{league_name}?pitcher_name={sp_name}&build_type={build_type}',
timeout=6
)
sorted_players = l_query['array'] sorted_players = l_query['array']
logging.info(f'sorted_players: {sorted_players}') logging.info(f'sorted_players: {sorted_players}')

View File

@ -350,6 +350,38 @@ class Economy(commands.Cog):
) )
await ctx.send(content=None, embed=embed) await ctx.send(content=None, embed=embed)
@pd_help_command.command(name='cardsets', help='Show Cardset Requirements')
@commands.check(legal_channel)
async def help_cardsets(self, ctx: commands.Context):
embed = get_team_embed(f'Paper Dynasty Help')
embed.description = 'Cardset Requirements'
embed.add_field(
name='Ranked Legal',
value='2018 Season, 2023 Season, 2023 Promos',
inline=False
)
embed.add_field(
name='Minor League',
value='Humans: Unlimited\nAI: 2018 Season / 2023 & 2022 Seasons as backup',
inline=False
)
embed.add_field(
name='Major League',
value='Humans: Ranked Legal\nAI: 2023, 2018, 2013, 2008 Seasons / 2022 & 2019 as backup',
inline=False
)
embed.add_field(
name='Flashback',
value='2016, 2013, 2012, 2008 Seasons',
inline=False
)
embed.add_field(
name='Hall of Fame',
value='Humans: Ranked Legal\nAI: Unlimited',
inline=False
)
await ctx.send(content=None, embed=embed)
@commands.hybrid_group(name='donation', help='Mod: Give packs for PD donations') @commands.hybrid_group(name='donation', help='Mod: Give packs for PD donations')
@commands.has_any_role(PD_PLAYERS_ROLE_NAME) @commands.has_any_role(PD_PLAYERS_ROLE_NAME)
async def donation(self, ctx: commands.Context): async def donation(self, ctx: commands.Context):

View File

@ -914,7 +914,7 @@ class Gameplay(commands.Cog):
logging.debug(f'calling of embed') logging.debug(f'calling of embed')
await show_outfield_cards(interaction, this_play) await show_outfield_cards(interaction, this_play)
logging.debug(f'done with of embed') logging.debug(f'done with of embed')
ai_hint = '' ai_hint = ''
if ai_batting(this_game, this_play): if ai_batting(this_game, this_play):
ai_hint = f'*The runner will {get_manager(this_game).tag_from_third(this_play.starting_outs + 1)}*' ai_hint = f'*The runner will {get_manager(this_game).tag_from_third(this_play.starting_outs + 1)}*'
@ -959,7 +959,8 @@ class Gameplay(commands.Cog):
sp_card_id='Light gray number to the left of the pitcher\'s name on your depth chart') sp_card_id='Light gray number to the left of the pitcher\'s name on your depth chart')
@commands.has_any_role(PD_PLAYERS_ROLE_NAME) @commands.has_any_role(PD_PLAYERS_ROLE_NAME)
async def new_game_campaign_command( async def new_game_campaign_command(
self, interaction: discord.Interaction, league: Literal['Minor League', 'Major League', 'Hall of Fame'], self, interaction: discord.Interaction,
league: Literal['Minor League', 'Flashback', 'Major League', 'Hall of Fame'],
away_team_abbrev: str, home_team_abbrev: str, num_innings: Literal[9, 3], sp_card_id: int): away_team_abbrev: str, home_team_abbrev: str, num_innings: Literal[9, 3], sp_card_id: int):
await interaction.response.defer() await interaction.response.defer()
@ -1036,38 +1037,47 @@ class Gameplay(commands.Cog):
if 'Minor' in league: if 'Minor' in league:
league_name = 'minor-league' league_name = 'minor-league'
elif 'Flashback' in league:
await interaction.edit_original_response(
content='The **Flashback Campaign** will pit you against all 30 MLB clubs with both you and the AI '
'being limited to the 2008, 2012, 2013, and 2016 cardsets. This campaign will open up in '
'mid-November!'
)
return
elif 'Major' in league:
can_play = False
for x in interaction.user.roles:
if x.name == 'PD - Major League':
can_play = True
if not can_play:
await interaction.edit_original_response(
content=f'Ope. Looks like you haven\'t received the **PD - Major League** role, yet!\n\n'
f'To play **Major League** games, you need to defeat all 30 MLB teams in the Minor League '
f'campaign. You can see your progress with `/record`.\n\n'
f'If you have completed the Minor League campaign, go ping Cal to get your new role!')
return
league_name = 'major-league'
else: else:
await interaction.edit_original_response( await interaction.edit_original_response(
content=f'Gold star for speed running the Minor Leagues! The Major League campaign will release soon!') content='The **Hall of Fame Campaign** will pit you against all 30 MLB clubs with you '
'being limited to ranked-legal cardsets (2023 & 2018) and the AI having no limits. '
'This campaign will open up in December!'
)
return return
# elif 'Major' in league: can_play = False
# can_play = False for x in interaction.user.roles:
# for x in interaction.user.roles: if x.name == 'PD - Hall of Fame':
# if x.name == 'PD - Major League': can_play = True
# can_play = True
# if not can_play:
# if not can_play: await interaction.edit_original_response(
# await interaction.edit_original_response( content=f'Ope. Looks like you haven\'t received the **PD - Hall of Fame** role, yet!\n\n'
# content=f'Ope. Looks like you haven\'t received the **PD - Major League** role, yet!\n\n' f'To play **Hall of Fame** games, you need to defeat all 30 MLB teams in the Minor League '
# f'To play **Major League** games, you need to defeat all 30 MLB teams in the Minor League ' f'and Major League campaign. You can see your progress with `/record`.\n\n'
# f'campaign. You can see your progress with `/record`.\n\n' f'If you have completed the Major League campaign, go ping Cal to get your new role!')
# f'If you have completed the Minor League campaign, go ping Cal to get your new role!') return
# return league_name = 'hall-of-fame'
# league_name = 'major-league'
# else:
# can_play = False
# for x in interaction.user.roles:
# if x.name == 'PD - Hall of Fame':
# can_play = True
#
# if not can_play:
# await interaction.edit_original_response(
# content=f'Ope. Looks like you haven\'t received the **PD - Hall of Fame** role, yet!\n\n'
# f'To play **Hall of Fame** games, you need to defeat all 30 MLB teams in the Minor League '
# f'and Major League campaign. You can see your progress with `/record`.\n\n'
# f'If you have completed the Major League campaign, go ping Cal to get your new role!')
# return
# league_name = 'hall-of-fame'
this_game = post_game({ this_game = post_game({
'away_team_id': away_team['id'], 'away_team_id': away_team['id'],
@ -1082,7 +1092,8 @@ class Gameplay(commands.Cog):
'game_type': league_name 'game_type': league_name
}) })
logging.info( logging.info(
f'Game {this_game.id} between {away_team_abbrev.upper()} and {home_team_abbrev.upper()} is posted!' f'Game {this_game.id} ({league_name}) between {away_team_abbrev.upper()} and '
f'{home_team_abbrev.upper()} is posted!'
) )
away_role = await team_role(interaction, away_team) away_role = await team_role(interaction, away_team)
home_role = await team_role(interaction, home_team) home_role = await team_role(interaction, home_team)
@ -1095,17 +1106,29 @@ class Gameplay(commands.Cog):
logging.error( logging.error(
f'Card_id {sp_card_id} does not belong to {human_team["abbrev"]} in Game {this_game.id}' f'Card_id {sp_card_id} does not belong to {human_team["abbrev"]} in Game {this_game.id}'
) )
patch_game(this_game.id, active=False)
await interaction.channel.send( await interaction.channel.send(
f'Uh oh. Card ID {sp_card_id} is {human_team["player"]["p_name"]} and belongs to ' f'Uh oh. Card ID {sp_card_id} is {human_team["player"]["p_name"]} and belongs to '
f'{human_sp_card["team"]["sname"]}. Will you double check that before we get started?') f'{human_sp_card["team"]["sname"]}. Will you double check that before we get started?')
return return
if this_game.game_type in ['major-league', 'hall-of-fame']: if this_game.game_type in ['major-league', 'hall-of-fame']:
l_check = await legal_check([human_sp_card['id']]) l_check = await legal_check([human_sp_card['id']], 'ranked')
if not l_check['legal']: if not l_check['legal']:
patch_game(this_game.id, active=False)
await interaction.edit_original_response( await interaction.edit_original_response(
content=f'It looks like this is a Ranked Legal game and {player_desc(human_sp_card["player"])} is ' content=f'It looks like this is a Ranked Legal game and {player_desc(human_sp_card["player"])} is '
f'not legal in Ranked. You can start a new game once you get a new SP.' f'not legal in Ranked. You can start a new game once you pick a new SP.'
)
return
if this_game.game_type == 'flashback':
l_check = await legal_check([human_sp_card['id']], 'flashback')
if not l_check['legal']:
patch_game(this_game.id, active=False)
await interaction.edit_original_response(
content=f'It looks like this is a Flashback game and {player_desc(human_sp_card["player"])} is '
f'not legal in Flashback. You can start a new game once you pick a new SP.'
) )
return return
@ -2447,6 +2470,11 @@ class Gameplay(commands.Cog):
f'update and set the lineup again.') f'update and set the lineup again.')
this_card = await db_get(f'cards', object_id=int(row[1])) this_card = await db_get(f'cards', object_id=int(row[1]))
if this_card is None:
raise LookupError(
f'Your {row[0].upper()} has a Card ID or {int(row[1])} and I cannot find that card. Did you sell '
f'that card by chance? Or did you sell a duplicate and the bot sold the one you were using?'
)
if this_card['team']['id'] != lineup_team['id']: if this_card['team']['id'] != lineup_team['id']:
raise SyntaxError(f'Easy there, champ. Looks like card ID {row[1]} belongs to the ' raise SyntaxError(f'Easy there, champ. Looks like card ID {row[1]} belongs to the '
f'{this_card["team"]["sname"]}. Try again with only cards you own.') f'{this_card["team"]["sname"]}. Try again with only cards you own.')
@ -2473,7 +2501,7 @@ class Gameplay(commands.Cog):
# Check roster legality # Check roster legality
if this_game.game_type in ['major-league', 'hall-of-fame']: if this_game.game_type in ['major-league', 'hall-of-fame']:
l_check = await legal_check(card_ids) l_check = await legal_check(card_ids, 'ranked')
if not l_check['legal']: if not l_check['legal']:
await interaction.edit_original_response( await interaction.edit_original_response(
content=f'It looks like this is a Ranked Legal game and I see the following cards as illegal. ' content=f'It looks like this is a Ranked Legal game and I see the following cards as illegal. '
@ -2482,6 +2510,17 @@ class Gameplay(commands.Cog):
) )
return return
if this_game.game_type == 'flashback':
l_check = await legal_check(card_ids, 'flashback')
if not l_check['legal']:
patch_game(this_game.id, active=False)
await interaction.edit_original_response(
content=f'It looks like this is a Flashback game and I see the following cards as illegal. '
f'Please adjust your lineup and re-submit!\n\n'
f'- {l_check["error_string"]}'
)
return
logging.debug(f'Setting lineup for {lineup_team["sname"]} in PD game') logging.debug(f'Setting lineup for {lineup_team["sname"]} in PD game')
post_lineups(all_lineups) post_lineups(all_lineups)

View File

@ -169,9 +169,10 @@ def get_pitcher(this_game: StratGame, this_play: StratPlay):
return db_calls_gameplay.get_one_lineup(this_game.id, team_id=p_team_id, position='P', active=True) return db_calls_gameplay.get_one_lineup(this_game.id, team_id=p_team_id, position='P', active=True)
async def legal_check(card_ids: list): async def legal_check(card_ids: list, difficulty_name: str):
l_string = "&card_id=".join(card_ids) all_ids = [str(x) for x in card_ids]
legality = await db_post(f'cards/legal-check/ranked?card_id={l_string}') l_string = "&card_id=".join(all_ids)
legality = await db_post(f'cards/legal-check/{difficulty_name}?card_id={l_string}')
r_val = {'legal': True, 'error_string': None} r_val = {'legal': True, 'error_string': None}
if legality['count'] > 0: if legality['count'] > 0: