diff --git a/KoogleApp/Games/GameProgress.cs b/KoogleApp/Games/GameProgress.cs index 3fcf6e1..60e8628 100644 --- a/KoogleApp/Games/GameProgress.cs +++ b/KoogleApp/Games/GameProgress.cs @@ -23,13 +23,13 @@ namespace KoogleApp.Games // NextThrowState is used to store the state for the next throw, that is modified by game logic or a user interaction. It overrides the default behaviour of resetting pins etc. public ThrowPanelState? NextThrowState { get; set; } = NextThrowState; - public SelectedNextPlayerIds NextPlayer(Func getNextPlayer) + public SelectedNextPlayerIdsAction? NextPlayer(Func getNextPlayer) { var newPlayersList = getNextPlayer(AfterParticipantsState, StartParams.ParticipantsMode); AfterParticipantsState = AfterParticipantsState with { PlayerIds = newPlayersList }; - return new SelectedNextPlayerIds(AfterParticipantsState); + return new SelectedNextPlayerIdsAction(AfterParticipantsState); } } diff --git a/KoogleApp/Games/Shit/Setup.razor b/KoogleApp/Games/Shit/Setup.razor index 57e0b5b..1e86458 100644 --- a/KoogleApp/Games/Shit/Setup.razor +++ b/KoogleApp/Games/Shit/Setup.razor @@ -11,9 +11,15 @@ + + + + @code { int _shitNumber = 5; + int _startNumber = 50; + public IGameSetupModel GameSetupModel => new ShitSetupState() { @@ -23,7 +29,8 @@ } with { - ShitNumber = _shitNumber + ShitNumber = _shitNumber, + StartNumber = _startNumber }; } diff --git a/KoogleApp/Games/Shit/ShitGameModel.cs b/KoogleApp/Games/Shit/ShitGameModel.cs index 60e225e..000bfd1 100644 --- a/KoogleApp/Games/Shit/ShitGameModel.cs +++ b/KoogleApp/Games/Shit/ShitGameModel.cs @@ -19,7 +19,7 @@ namespace KoogleApp.Games.Shit //public string PlayerName { get; set; } } - + [FeatureState] public record ShitGameState( Dictionary Points, int CollectedPoints, @@ -92,6 +92,8 @@ namespace KoogleApp.Games.Shit public record ShitSetupState: GameSetupModelBase { public int ShitNumber { get; set; } = 5; + + public int StartNumber { get; set; } = 50; } diff --git a/KoogleApp/Games/Shit/ShitGameService.cs b/KoogleApp/Games/Shit/ShitGameService.cs index 2405c81..969fb7b 100644 --- a/KoogleApp/Games/Shit/ShitGameService.cs +++ b/KoogleApp/Games/Shit/ShitGameService.cs @@ -15,6 +15,7 @@ namespace KoogleApp.Games.Shit public GameProgress HandleThrow(GameProgress progress, IDispatcher dispatcher) { + var actions = new List(); if (progress.GameModel is not ShitGameModel) { throw new InvalidOperationException("game service does not match game model"); @@ -26,21 +27,21 @@ namespace KoogleApp.Games.Shit var isShit = progress.PinCount() == ((ShitSetupState)progress.StartParams).ShitNumber; if (isShit) { - // status.Points += GameModel.CollectedPoints; gameModel.Points[playerId].Points += gameModel.CollectedPoints; - gameModel.CollectedPoints = 0; + + SelectPlayerAndUpdateGameModel(progress, actions, gameModel); } else { gameModel.CollectedPoints += pinCount; + gameModel.PreviewPointsOk -= Math.Max(pinCount, 0); + gameModel.PreviewPointsShit += pinCount; } - gameModel.PreviewPointsOk -= pinCount; - gameModel.PreviewPointsShit += pinCount; - //if (GameModel.PreviewPointsOk <= 0) - //{ - // EndOfGame(); + if (gameModel.PreviewPointsOk <= 0) + { + EndOfGame(); //GameModel.Points.ForEach(_ => { // if (_.PlayerId.Equals(CurrentPlayer.Id)) @@ -55,31 +56,48 @@ namespace KoogleApp.Games.Shit // ExpenseTriggers = new[] { ExpenseTrigger.ExpensePoint } // }); //}); - //} + } + + foreach (var action in actions) + { + dispatcher.Dispatch(action); + } return progress; } + private static void SelectPlayerAndUpdateGameModel(GameProgress progress, List actions, ShitGameModel gameModel) + { + var nextPlayerAction = NextPlayer(progress, actions); + if (nextPlayerAction != null) + { + UpdateGameModelForSelectedPlayer(gameModel, nextPlayerAction.ParticipantsState.PlayerIds.First()); + } + } + + private static void UpdateGameModelForSelectedPlayer(ShitGameModel gameModel, int playerId) + { + gameModel.PreviewPointsOk = gameModel.Points[playerId].Points; + gameModel.PreviewPointsShit = gameModel.Points[playerId].Points; + gameModel.CollectedPoints = 0; + } + public IGameModel InitGameModel(IGameSetupModel startParams, IDispatcher dispatcher) { var dict = new Dictionary(); + var startModel = startParams as ShitSetupState; foreach (var participant in startParams.Participants) { - var tm = new PointStatus() with { PlayerId = participant }; + var tm = new PointStatus() with { PlayerId = participant, Points = startModel.StartNumber }; dict.Add(participant, tm); } - var newModel = new ShitGameModel(dict,0,0,0); + var newModel = new ShitGameModel(dict,0, startModel.StartNumber, startModel.StartNumber); return newModel; } - private void NextPlayerClick() - { - - } - public IGameModel FinalizeGameModel() { return null; @@ -89,16 +107,29 @@ namespace KoogleApp.Games.Shit { var actions = new List(); - if (progress.AfterThrowState.ThrowCounterPerRound < 4) // three throws are at least required { return progress; } - - //var playerId = progress.GetCurrentPlayerId(); + // erreichte Punkte mitnehmen + var playerId = progress.GetCurrentPlayerId(); + var gameModel = progress.GameModel as ShitGameModel; + gameModel.Points[playerId].Points -= gameModel.CollectedPoints; + SelectPlayerAndUpdateGameModel(progress, actions, gameModel); + + foreach (var action in actions) + { + dispatcher.Dispatch(action); + } + + return progress; + } + + private static SelectedNextPlayerIdsAction? NextPlayer(GameProgress progress, List actions) + { // neue Runde starten: nächster Spieler und ThrowCounterPerRound zurücksetzen var nextPlayerAction = progress.NextPlayer(NextPlayerHandler.GetNextPlayerIndex); if (nextPlayerAction != null) @@ -110,14 +141,7 @@ namespace KoogleApp.Games.Shit 0, 0, progress.BeforeThrowState.ThrowMode, ThrowPanelStateStatus.BeforeThrow, progress.AfterThrowState.ThrowCounter, progress.BeforeThrowState.DayId); } - - - foreach (var action in actions) - { - dispatcher.Dispatch(action); - } - - return progress; + return nextPlayerAction; } } } diff --git a/KoogleApp/Games/Training/GameTrainingService.cs b/KoogleApp/Games/Training/GameTrainingService.cs index 0399d25..81646cd 100644 --- a/KoogleApp/Games/Training/GameTrainingService.cs +++ b/KoogleApp/Games/Training/GameTrainingService.cs @@ -61,7 +61,7 @@ namespace KoogleApp.Games.Training //afterParticipantsState = progress.AfterParticipantsState with { PlayerIds = newPlayersList }; //progress.AfterParticipantsState = afterParticipantsState; - //actions.Add(new SelectedNextPlayerIds(afterParticipantsState)); + //actions.Add(new SelectedNextPlayerIdsAction(afterParticipantsState)); } var playerId = progress.GetCurrentPlayerId(); diff --git a/KoogleApp/Store/Game/Participants/Actions.cs b/KoogleApp/Store/Game/Participants/Actions.cs index ca9b0ba..d5467ee 100644 --- a/KoogleApp/Store/Game/Participants/Actions.cs +++ b/KoogleApp/Store/Game/Participants/Actions.cs @@ -19,6 +19,6 @@ namespace KoogleApp.Store.Game.Participants public record SelectedPlayerChangedAction(ParticipantsState ParticipantsState, int NewId); - public record SelectedNextPlayerIds(ParticipantsState ParticipantsState); + public record SelectedNextPlayerIdsAction(ParticipantsState ParticipantsState); } diff --git a/KoogleApp/Store/Game/Participants/Reducers.cs b/KoogleApp/Store/Game/Participants/Reducers.cs index fe12c56..e27041b 100644 --- a/KoogleApp/Store/Game/Participants/Reducers.cs +++ b/KoogleApp/Store/Game/Participants/Reducers.cs @@ -42,7 +42,7 @@ namespace KoogleApp.Store.Game.Participants } [ReducerMethod] - public static ParticipantsState OnSelectedNextPlayerIds(ParticipantsState state, SelectedNextPlayerIds action) + public static ParticipantsState OnSelectedNextPlayerIds(ParticipantsState state, SelectedNextPlayerIdsAction action) { return action.ParticipantsState; } diff --git a/KoogleApp/Store/Game/ThrowPanel/Effects.cs b/KoogleApp/Store/Game/ThrowPanel/Effects.cs index 8a467a0..fd9ef9c 100644 --- a/KoogleApp/Store/Game/ThrowPanel/Effects.cs +++ b/KoogleApp/Store/Game/ThrowPanel/Effects.cs @@ -186,9 +186,9 @@ namespace KoogleApp.Store.Game.ThrowPanel //foreach (var action in actions) //{ - // if (action is SelectedNextPlayerIds) + // if (action is SelectedNextPlayerIdsAction) // { - // participants = ((SelectedNextPlayerIds)action).ParticipantsState; + // participants = ((SelectedNextPlayerIdsAction)action).ParticipantsState; // } // dispatcher.Dispatch(action); //} diff --git a/KoogleApp/ThrowPanelState.json b/KoogleApp/ThrowPanelState.json deleted file mode 100644 index e6da803..0000000 --- a/KoogleApp/ThrowPanelState.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "IsStated": true, - "BellValue": false, - "Pin1State": 1, - "Pin2State": 1, - "Pin3State": 1, - "Pin4State": 1, - "Pin5State": 1, - "Pin6State": 1, - "Pin7State": 1, - "Pin8State": 1, - "Pin9State": 1, - "ThrowsPerRound": 2, - "ThrowCounterPerRound": 1, - "ThrowMode": 0, - "ThrowPanelStateStatus": 2, - "ThrowCounter": 6, - "DayId": 35 -} \ No newline at end of file diff --git a/KoogleApp/appdata.json b/KoogleApp/appdata.json index 66ade4f..dc26aff 100644 --- a/KoogleApp/appdata.json +++ b/KoogleApp/appdata.json @@ -14,62 +14,54 @@ "Pin7State": 0, "Pin8State": 0, "Pin9State": 0, - "ThrowsPerRound": 2, - "ThrowCounterPerRound": 1, + "ThrowsPerRound": 2147483647, + "ThrowCounterPerRound": 3, "ThrowMode": 0, "ThrowPanelStateStatus": 3, - "ThrowCounter": 6, + "ThrowCounter": 2, "DayId": 35 }, "ParticipantsState": { "PlayerIds": [ 5, + 3, + 10, 12, 9 ], "Eliminated": [] }, "GameState": { - "$type": "TrainingGameState", - "Throws": { + "$type": "ShitGameState", + "Points": { "5": { "PlayerId": 5, - "TeamNr": 0, - "PinCount": 2, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 + "Points": 10 + }, + "3": { + "PlayerId": 3, + "Points": 10 + }, + "10": { + "PlayerId": 10, + "Points": 10 }, "12": { "PlayerId": 12, - "TeamNr": 0, - "PinCount": 4, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 + "Points": 10 }, "9": { "PlayerId": 9, - "TeamNr": 0, - "PinCount": 6, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 + "Points": 10 } - } + }, + "CollectedPoints": 15, + "PreviewPointsOk": -5, + "PreviewPointsShit": 25 } }, - "Version": 13, - "LastModified": "2025-12-07T15:32:49.3392888+01:00", + "Version": 5, + "LastModified": "2025-12-08T13:56:04.9404743+01:00", "LastModifiedBy": "test1@test.de" }, "UndoHistory": [ @@ -79,600 +71,16 @@ "ThrowPanelState": { "IsStated": true, "BellValue": false, - "Pin1State": 0, - "Pin2State": 0, - "Pin3State": 0, - "Pin4State": 0, - "Pin5State": 0, - "Pin6State": 0, - "Pin7State": 1, - "Pin8State": 1, - "Pin9State": 1, - "ThrowsPerRound": 2, - "ThrowCounterPerRound": 2, - "ThrowMode": 0, - "ThrowPanelStateStatus": 2, - "ThrowCounter": 5, - "DayId": 35 - }, - "ParticipantsState": { - "PlayerIds": [ - 9, - 5, - 12 - ], - "Eliminated": [] - }, - "GameState": { - "$type": "TrainingGameState", - "Throws": { - "5": { - "PlayerId": 5, - "TeamNr": 0, - "PinCount": 2, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "12": { - "PlayerId": 12, - "TeamNr": 0, - "PinCount": 4, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "9": { - "PlayerId": 9, - "TeamNr": 0, - "PinCount": 3, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 1, - "BellCount": 0 - } - } - } - }, - "Version": 12, - "LastModified": "2025-12-07T15:32:49.3357235+01:00", - "LastModifiedBy": "test1@test.de" - }, - { - "Status": { - "SetupModel": null, - "ThrowPanelState": { - "IsStated": true, - "BellValue": false, - "Pin1State": 0, - "Pin2State": 0, - "Pin3State": 0, - "Pin4State": 0, - "Pin5State": 0, - "Pin6State": 0, + "Pin1State": 1, + "Pin2State": 1, + "Pin3State": 1, + "Pin4State": 1, + "Pin5State": 1, + "Pin6State": 1, "Pin7State": 0, "Pin8State": 0, "Pin9State": 0, - "ThrowsPerRound": 2, - "ThrowCounterPerRound": 2, - "ThrowMode": 0, - "ThrowPanelStateStatus": 3, - "ThrowCounter": 5, - "DayId": 35 - }, - "ParticipantsState": { - "PlayerIds": [ - 9, - 5, - 12 - ], - "Eliminated": [] - }, - "GameState": { - "$type": "TrainingGameState", - "Throws": { - "5": { - "PlayerId": 5, - "TeamNr": 0, - "PinCount": 2, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "12": { - "PlayerId": 12, - "TeamNr": 0, - "PinCount": 4, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "9": { - "PlayerId": 9, - "TeamNr": 0, - "PinCount": 3, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 1, - "BellCount": 0 - } - } - } - }, - "Version": 11, - "LastModified": "2025-12-07T15:32:46.7964786+01:00", - "LastModifiedBy": "test1@test.de" - }, - { - "Status": { - "SetupModel": null, - "ThrowPanelState": { - "IsStated": true, - "BellValue": false, - "Pin1State": 0, - "Pin2State": 0, - "Pin3State": 0, - "Pin4State": 0, - "Pin5State": 0, - "Pin6State": 0, - "Pin7State": 1, - "Pin8State": 1, - "Pin9State": 1, - "ThrowsPerRound": 2, - "ThrowCounterPerRound": 1, - "ThrowMode": 0, - "ThrowPanelStateStatus": 2, - "ThrowCounter": 4, - "DayId": 35 - }, - "ParticipantsState": { - "PlayerIds": [ - 9, - 5, - 12 - ], - "Eliminated": [] - }, - "GameState": { - "$type": "TrainingGameState", - "Throws": { - "5": { - "PlayerId": 5, - "TeamNr": 0, - "PinCount": 2, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "12": { - "PlayerId": 12, - "TeamNr": 0, - "PinCount": 4, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "9": { - "PlayerId": 9, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 - } - } - } - }, - "Version": 10, - "LastModified": "2025-12-07T15:32:46.7914734+01:00", - "LastModifiedBy": "test1@test.de" - }, - { - "Status": { - "SetupModel": null, - "ThrowPanelState": { - "IsStated": true, - "BellValue": false, - "Pin1State": 0, - "Pin2State": 0, - "Pin3State": 0, - "Pin4State": 0, - "Pin5State": 0, - "Pin6State": 0, - "Pin7State": 0, - "Pin8State": 0, - "Pin9State": 0, - "ThrowsPerRound": 2, - "ThrowCounterPerRound": 1, - "ThrowMode": 0, - "ThrowPanelStateStatus": 3, - "ThrowCounter": 4, - "DayId": 35 - }, - "ParticipantsState": { - "PlayerIds": [ - 9, - 5, - 12 - ], - "Eliminated": [] - }, - "GameState": { - "$type": "TrainingGameState", - "Throws": { - "5": { - "PlayerId": 5, - "TeamNr": 0, - "PinCount": 2, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "12": { - "PlayerId": 12, - "TeamNr": 0, - "PinCount": 4, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "9": { - "PlayerId": 9, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 - } - } - } - }, - "Version": 9, - "LastModified": "2025-12-07T15:32:40.8346925+01:00", - "LastModifiedBy": "test1@test.de" - }, - { - "Status": { - "SetupModel": null, - "ThrowPanelState": { - "IsStated": true, - "BellValue": false, - "Pin1State": 0, - "Pin2State": 0, - "Pin3State": 0, - "Pin4State": 0, - "Pin5State": 0, - "Pin6State": 0, - "Pin7State": 0, - "Pin8State": 1, - "Pin9State": 1, - "ThrowsPerRound": 2, - "ThrowCounterPerRound": 2, - "ThrowMode": 0, - "ThrowPanelStateStatus": 2, - "ThrowCounter": 3, - "DayId": 35 - }, - "ParticipantsState": { - "PlayerIds": [ - 12, - 9, - 5 - ], - "Eliminated": [] - }, - "GameState": { - "$type": "TrainingGameState", - "Throws": { - "5": { - "PlayerId": 5, - "TeamNr": 0, - "PinCount": 2, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "12": { - "PlayerId": 12, - "TeamNr": 0, - "PinCount": 2, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 1, - "BellCount": 0 - }, - "9": { - "PlayerId": 9, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 - } - } - } - }, - "Version": 8, - "LastModified": "2025-12-07T15:32:40.8312023+01:00", - "LastModifiedBy": "test1@test.de" - }, - { - "Status": { - "SetupModel": null, - "ThrowPanelState": { - "IsStated": true, - "BellValue": false, - "Pin1State": 0, - "Pin2State": 0, - "Pin3State": 0, - "Pin4State": 0, - "Pin5State": 0, - "Pin6State": 0, - "Pin7State": 0, - "Pin8State": 0, - "Pin9State": 0, - "ThrowsPerRound": 2, - "ThrowCounterPerRound": 2, - "ThrowMode": 0, - "ThrowPanelStateStatus": 3, - "ThrowCounter": 3, - "DayId": 35 - }, - "ParticipantsState": { - "PlayerIds": [ - 12, - 9, - 5 - ], - "Eliminated": [] - }, - "GameState": { - "$type": "TrainingGameState", - "Throws": { - "5": { - "PlayerId": 5, - "TeamNr": 0, - "PinCount": 2, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "12": { - "PlayerId": 12, - "TeamNr": 0, - "PinCount": 2, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 1, - "BellCount": 0 - }, - "9": { - "PlayerId": 9, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 - } - } - } - }, - "Version": 7, - "LastModified": "2025-12-07T15:32:37.7465343+01:00", - "LastModifiedBy": "test1@test.de" - }, - { - "Status": { - "SetupModel": null, - "ThrowPanelState": { - "IsStated": true, - "BellValue": false, - "Pin1State": 0, - "Pin2State": 0, - "Pin3State": 0, - "Pin4State": 0, - "Pin5State": 0, - "Pin6State": 0, - "Pin7State": 0, - "Pin8State": 1, - "Pin9State": 1, - "ThrowsPerRound": 2, - "ThrowCounterPerRound": 1, - "ThrowMode": 0, - "ThrowPanelStateStatus": 2, - "ThrowCounter": 2, - "DayId": 35 - }, - "ParticipantsState": { - "PlayerIds": [ - 12, - 9, - 5 - ], - "Eliminated": [] - }, - "GameState": { - "$type": "TrainingGameState", - "Throws": { - "5": { - "PlayerId": 5, - "TeamNr": 0, - "PinCount": 2, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "12": { - "PlayerId": 12, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 - }, - "9": { - "PlayerId": 9, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 - } - } - } - }, - "Version": 6, - "LastModified": "2025-12-07T15:32:37.7429288+01:00", - "LastModifiedBy": "test1@test.de" - }, - { - "Status": { - "SetupModel": null, - "ThrowPanelState": { - "IsStated": true, - "BellValue": false, - "Pin1State": 0, - "Pin2State": 0, - "Pin3State": 0, - "Pin4State": 0, - "Pin5State": 0, - "Pin6State": 0, - "Pin7State": 0, - "Pin8State": 0, - "Pin9State": 0, - "ThrowsPerRound": 2, - "ThrowCounterPerRound": 1, - "ThrowMode": 0, - "ThrowPanelStateStatus": 3, - "ThrowCounter": 2, - "DayId": 35 - }, - "ParticipantsState": { - "PlayerIds": [ - 12, - 9, - 5 - ], - "Eliminated": [] - }, - "GameState": { - "$type": "TrainingGameState", - "Throws": { - "5": { - "PlayerId": 5, - "TeamNr": 0, - "PinCount": 2, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 2, - "BellCount": 0 - }, - "12": { - "PlayerId": 12, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 - }, - "9": { - "PlayerId": 9, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 - } - } - } - }, - "Version": 5, - "LastModified": "2025-12-07T15:32:32.3822457+01:00", - "LastModifiedBy": "test1@test.de" - }, - { - "Status": { - "SetupModel": null, - "ThrowPanelState": { - "IsStated": true, - "BellValue": false, - "Pin1State": 0, - "Pin2State": 0, - "Pin3State": 0, - "Pin4State": 0, - "Pin5State": 0, - "Pin6State": 0, - "Pin7State": 0, - "Pin8State": 0, - "Pin9State": 1, - "ThrowsPerRound": 2, + "ThrowsPerRound": 2147483647, "ThrowCounterPerRound": 2, "ThrowMode": 0, "ThrowPanelStateStatus": 2, @@ -682,52 +90,44 @@ "ParticipantsState": { "PlayerIds": [ 5, + 3, + 10, 12, 9 ], "Eliminated": [] }, "GameState": { - "$type": "TrainingGameState", - "Throws": { + "$type": "ShitGameState", + "Points": { "5": { "PlayerId": 5, - "TeamNr": 0, - "PinCount": 1, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 1, - "BellCount": 0 + "Points": 10 + }, + "3": { + "PlayerId": 3, + "Points": 10 + }, + "10": { + "PlayerId": 10, + "Points": 10 }, "12": { "PlayerId": 12, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 + "Points": 10 }, "9": { "PlayerId": 9, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 + "Points": 10 } - } + }, + "CollectedPoints": 9, + "PreviewPointsOk": 1, + "PreviewPointsShit": 19 } }, "Version": 4, - "LastModified": "2025-12-07T15:32:32.3789341+01:00", + "LastModified": "2025-12-08T13:56:04.9241169+01:00", "LastModifiedBy": "test1@test.de" }, { @@ -745,7 +145,7 @@ "Pin7State": 0, "Pin8State": 0, "Pin9State": 0, - "ThrowsPerRound": 2, + "ThrowsPerRound": 2147483647, "ThrowCounterPerRound": 2, "ThrowMode": 0, "ThrowPanelStateStatus": 3, @@ -755,52 +155,44 @@ "ParticipantsState": { "PlayerIds": [ 5, + 3, + 10, 12, 9 ], "Eliminated": [] }, "GameState": { - "$type": "TrainingGameState", - "Throws": { + "$type": "ShitGameState", + "Points": { "5": { "PlayerId": 5, - "TeamNr": 0, - "PinCount": 1, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 1, - "BellCount": 0 + "Points": 10 + }, + "3": { + "PlayerId": 3, + "Points": 10 + }, + "10": { + "PlayerId": 10, + "Points": 10 }, "12": { "PlayerId": 12, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 + "Points": 10 }, "9": { "PlayerId": 9, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 + "Points": 10 } - } + }, + "CollectedPoints": 9, + "PreviewPointsOk": 1, + "PreviewPointsShit": 19 } }, "Version": 3, - "LastModified": "2025-12-07T15:32:28.1256786+01:00", + "LastModified": "2025-12-08T13:55:41.9582921+01:00", "LastModifiedBy": "test1@test.de" }, { @@ -809,16 +201,16 @@ "ThrowPanelState": { "IsStated": true, "BellValue": false, - "Pin1State": 0, - "Pin2State": 0, - "Pin3State": 0, - "Pin4State": 0, - "Pin5State": 0, - "Pin6State": 0, - "Pin7State": 0, - "Pin8State": 0, + "Pin1State": 1, + "Pin2State": 1, + "Pin3State": 1, + "Pin4State": 1, + "Pin5State": 1, + "Pin6State": 1, + "Pin7State": 1, + "Pin8State": 1, "Pin9State": 1, - "ThrowsPerRound": 2, + "ThrowsPerRound": 2147483647, "ThrowCounterPerRound": 1, "ThrowMode": 0, "ThrowPanelStateStatus": 2, @@ -828,68 +220,64 @@ "ParticipantsState": { "PlayerIds": [ 5, + 3, + 10, 12, 9 ], "Eliminated": [] }, "GameState": { - "$type": "TrainingGameState", - "Throws": { + "$type": "ShitGameState", + "Points": { "5": { "PlayerId": 5, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 + "Points": 10 + }, + "3": { + "PlayerId": 3, + "Points": 10 + }, + "10": { + "PlayerId": 10, + "Points": 10 }, "12": { "PlayerId": 12, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 + "Points": 10 }, "9": { "PlayerId": 9, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 + "Points": 10 } - } + }, + "CollectedPoints": 0, + "PreviewPointsOk": 10, + "PreviewPointsShit": 10 } }, "Version": 2, - "LastModified": "2025-12-07T15:32:28.0959541+01:00", + "LastModified": "2025-12-08T13:55:41.9540295+01:00", "LastModifiedBy": "test1@test.de" }, { "Status": { "SetupModel": { - "$type": "TrainingSetupState", + "$type": "ShitSetupState", + "ShitNumber": 5, + "StartNumber": 10, "DayId": 35, "ThrowMode": 0, - "ThrowsPerRound": 2, + "ThrowsPerRound": 2147483647, "Participants": [ 5, + 3, + 10, 12, 9 ], "ParticipantsMode": 0, - "KnownGameType": "GameTraining" + "KnownGameType": "ShitGame" }, "ThrowPanelState": { "IsStated": true, @@ -903,7 +291,7 @@ "Pin7State": 0, "Pin8State": 0, "Pin9State": 0, - "ThrowsPerRound": 2, + "ThrowsPerRound": 2147483647, "ThrowCounterPerRound": 1, "ThrowMode": 0, "ThrowPanelStateStatus": 1, @@ -913,52 +301,44 @@ "ParticipantsState": { "PlayerIds": [ 5, + 3, + 10, 12, 9 ], "Eliminated": [] }, "GameState": { - "$type": "TrainingGameState", - "Throws": { + "$type": "ShitGameState", + "Points": { "5": { "PlayerId": 5, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 + "Points": 10 + }, + "3": { + "PlayerId": 3, + "Points": 10 + }, + "10": { + "PlayerId": 10, + "Points": 10 }, "12": { "PlayerId": 12, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 + "Points": 10 }, "9": { "PlayerId": 9, - "TeamNr": 0, - "PinCount": 0, - "CircleCount": 0, - "SinkCount": 0, - "StrikeCount": 0, - "ClearedCount": 0, - "ThrowCount": 0, - "BellCount": 0 + "Points": 10 } - } + }, + "CollectedPoints": 0, + "PreviewPointsOk": 10, + "PreviewPointsShit": 10 } }, "Version": 1, - "LastModified": "2025-12-07T14:32:08.3508469Z", + "LastModified": "2025-12-08T12:55:39.8489529Z", "LastModifiedBy": "test1@test.de" } ],