Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Buttons/Explore.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,12 @@ async def exploreTile(game: GamestateHelper, player, interaction: discord.Intera
player = game.get_player(interaction.user.id,interaction)
msg = customID.split("_")
position = msg[1]

# Lock turn restart because of exposed hidden tile information.
player_helper = PlayerHelper(game.get_player_from_color(player['color']), player)
player_helper.setCannotRestart(True)
game.update_player(player_helper)

if len(msg) > 2:
tileID = msg[2]
game.tile_discard(msg[3])
Expand Down
5 changes: 5 additions & 0 deletions Buttons/Research.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,9 @@ async def handle_specific_tech_selection(interaction: discord.Interaction, game:
game.addDiscTile(game.getLocationFromID(player["home_planet"]))
await DiscoveryTileButtons.exploreDiscoveryTile(game, game.getLocationFromID(player["home_planet"]),
interaction, player)
# Lock turn restart because of exposed hidden tile information.
player_helper.setCannotRestart(True)
game.update_player(player_helper)
lenTech = len(player[f"{tech_type}_tech"])
if lenTech == 4 and "magDiscTileUsed" in player and not player.get("magDiscTileUsed"):
await interaction.channel.send(player["player_name"] + " due to researching your fourth tech"
Expand All @@ -119,6 +122,8 @@ async def handle_specific_tech_selection(interaction: discord.Interaction, game:
game.useMagDisc(str(interaction.user.id))
await DiscoveryTileButtons.exploreDiscoveryTile(game, game.getLocationFromID(player["home_planet"]),
interaction, player)
player_helper.setCannotRestart(True)
game.update_player(player_helper)

@staticmethod
async def placeWarpPortal(interaction: discord.Interaction, game: GamestateHelper, player, customID):
Expand Down
15 changes: 15 additions & 0 deletions Buttons/Turn.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,15 @@ def getFirstPlayer(game: GamestateHelper):

@staticmethod
async def restartTurn(player, game: GamestateHelper, interaction: discord.Interaction):
player_helper = PlayerHelper(game.getPlayersID(player), player)
# Enforce rule: No turn resets allowed after gaining tile information
if player_helper.cannotRestart():
await interaction.followup.send(
f"❌ {player['player_name']}, you cannot restart your turn after revealing a tile!",
ephemeral=True
)
return

try:
await interaction.message.delete()
game.backUpToLastSaveFile()
Expand All @@ -55,6 +64,12 @@ async def restartTurn(player, game: GamestateHelper, interaction: discord.Intera
async def endTurn(player, game: GamestateHelper, interaction: discord.Interaction):
from helpers.CombatHelper import Combat
nextPlayer = game.get_next_player(player)

# Clear the restart lockout flag when the turn successfully concludes
player_helper = PlayerHelper(game.getPlayersID(player), player)
player_helper.setCannotRestart(False)
game.update_player(player_helper)

await game.updateNamesAndOutRimTiles(interaction)
game.initilizeKey("20MinReminder")
if nextPlayer is not None and not game.is_everyone_passed():
Expand Down
13 changes: 13 additions & 0 deletions commands/player_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,19 @@ async def set_traitor(self, interaction: discord.Interaction, traitor: bool,
game.update_player(player_helper)
await interaction.response.send_message(f"{player.mention} set traitor status to {traitor}.")

@app_commands.command(name="set_cannot_restart")
async def set_cannot_restart(self, interaction: discord.Interaction, cannot_restart: bool,
player: Optional[discord.Member] = None):
if player is None:
player = interaction.user
game = GamestateHelper(interaction.channel)
p1 = game.get_player(player.id,interaction)
player_helper = PlayerHelper(player.id, p1)
player_helper.setCannotRestart(cannot_restart)
game.update_player(player_helper)
await interaction.response.send_message(f"{player.mention} set cannot_restart status to {cannot_restart}.")


@app_commands.command(name="draw_reputation")
async def draw_reputation(self, interaction: discord.Interaction, num_options: int):
game = GamestateHelper(interaction.channel)
Expand Down
9 changes: 9 additions & 0 deletions helpers/PlayerHelper.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ def isTraitor(self):
else:
return False

def cannotRestart(self):
if self.stats.get("cannot_restart"):
return True
else:
return False

def adjust_materials(self, adjustment):
before = self.stats["materials"]
self.stats["materials"] += adjustment
Expand Down Expand Up @@ -131,6 +137,9 @@ def passTurn(self, passed: bool):

def setTraitor(self, traitor: bool):
self.stats["traitor"] = traitor

def setCannotRestart(self, cannot_restart: bool):
self.stats["cannot_restart"] = cannot_restart

def setEliminated(self, eliminated: bool):
self.stats["eliminated"] = eliminated
Expand Down