Welcome to the official Pokémon Forums!

Click here to review our official Rules & Guidelines.
[Pokémon TCG Live] Maintenance Notice

Pokémon TCG Live will be offline for scheduled maintenance from 15:00 ~ 23:00 (UTC) on September 10, 2026.
Please see the Version 1.42.0 - Patch Notes for more information.

Abort game feature in TCG live

FSJon
FSJon Member Posts: 10 ✭✭
Third Anniversary 25 Likes 5 Agrees Name Dropper

Too many times I have had a failed connection on android on mobile data on sign in (rest of games connect fine) this issue has not been resolved for several years. Damaging ELO and streak runs before I've even drawn a card. If no way of fixing connection issue, please implement a game abort if no cards have been drawn for turn 1.

See Sample code:

using System;

public enum GameState

{

Connecting,

Initialization,

InProgress,

Completed,

Aborted

}

public class MatchSession

{

public string MatchId { get; private set; }

public Player Player1 { get; private set; }

public Player Player2 { get; private set; }

public GameState CurrentState { get; private set; }

public int TotalCardsDrawn { get; private set; }

public MatchSession(Player player1, Player player2)

{

MatchId = Guid.NewGuid().ToString();

Player1 = player1;

Player2 = player2;

CurrentState = GameState.Connecting;

TotalCardsDrawn = 0;

}

/// <summary>

/// Simulates a failed connection during load or setup.

/// </summary>

public void HandleConnectionTimeout(Player disconnectingPlayer)

{

// Rule check: If no cards have been drawn yet, abort without penalties

if (TotalCardsDrawn == 0 && CurrentState != GameState.InProgress)

{

AbortMatch($"Opponent ({disconnectingPlayer.Username}) failed to fully connect before game start.");

}

else

{

// If the game had already started, handle as a standard forfeit/concede

ProcessNormalConcede(disconnectingPlayer);

}

}

private void AbortMatch(string reason)

{

CurrentState = GameState.Aborted;

Console.WriteLine($"[MATCH ABORTED] Match {MatchId}: {reason}");

Console.WriteLine("No MMR/Rating adjusted. Win streaks preserved.");

// Log match telemetry for connection diagnostics without updating competitive stats

MatchLogger.LogAbortedMatch(MatchId, Player1.Id, Player2.Id, reason);

// Clean up match resources and notify both clients

Player1.ClientRpc_NotifyMatchAborted("Opponent failed to connect. Match safely aborted.");

Player2.ClientRpc_NotifyMatchAborted("Connection lost before match started.");

}

private void ProcessNormalConcede(Player forfeitingPlayer)

{

CurrentState = GameState.Completed;

// Standard logic that updates MMR, loss records, and win streaks goes here...

}

}