Skip to content

Commit e67a728

Browse files
committed
Implemented working online battles with mods
1 parent f09d591 commit e67a728

4 files changed

Lines changed: 108 additions & 316 deletions

File tree

src/Multiplayer/Client.cs

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,14 +234,25 @@ private static async System.Threading.Tasks.Task HandleSendCommandModded(
234234

235235
var serializedGameSummary = SerializationHelpers.ToByteArray(stateSummary, gameState.Version);
236236

237-
var setupGameDataViewModel = new SetupGameStateViewModel
237+
238+
client.GameState.TryGetPlayer(client.GameState.CurrentPlayer, out PlayerState playerState);
239+
var currentPlayerId = "";
240+
if(playerState.AccountId.HasValue)
241+
{
242+
currentPlayerId = playerState.AccountId.Value.ToString();
243+
}
244+
var setupGameDataViewModel = new ModdedGameStateViewModel
238245
{
239246
gameId = client.gameId.ToString(),
240247
serializedGameState = serializedGameState,
241248
serializedGameSummary = serializedGameSummary,
242-
gameSettingsJson = ""
249+
gameSettingsJson = "",
250+
currentPlayerId = currentPlayerId,
251+
IsEndTurnCommand = command.GetCommandType() == CommandType.EndTurn
243252
};
244253

254+
255+
245256
var setupData = System.Text.Json.JsonSerializer.Serialize(setupGameDataViewModel);
246257

247258
var serverResponse = await PolytopiaBackendAdapter.Instance.HubConnection.InvokeAsync<ServerResponse<BoolResponseViewModel>>(
@@ -303,7 +314,7 @@ private static async System.Threading.Tasks.Task HandleStartLobbyGameModded(
303314
out GameStateSummary stateSummary, out var gameState);
304315

305316
var serializedGameSummary = SerializationHelpers.ToByteArray(stateSummary, gameState.Version);
306-
var setupGameDataViewModel = new SetupGameStateViewModel
317+
var setupGameDataViewModel = new ModdedGameStateViewModel
307318
{
308319
lobbyId = lobbyGameViewModel.Id.ToString(),
309320
serializedGameState = serializedGameState,
@@ -346,7 +357,7 @@ public static (byte[] serializedGameState, string gameSettingsJson) CreateMultip
346357
state = PlayerDataFriendshipState.Accepted,
347358
knownTribe = true,
348359
tribe = (TribeType)participatorViewModel.SelectedTribe,
349-
tribeMix = (TribeType)participatorViewModel.SelectedTribe,
360+
tribeMix = TribeType.None, // TribeMix is byte too
350361
skinType = (SkinType)participatorViewModel.SelectedTribeSkin,
351362
defaultName = participatorViewModel.GetNameInternal()
352363
};
@@ -454,4 +465,36 @@ public static (byte[] serializedGameState, string gameSettingsJson) CreateMultip
454465
return (serializedGameState,
455466
JsonConvert.SerializeObject(gameState.Settings));
456467
}
468+
469+
// FIX FOR NATURE PLAYER. BOTS ARENT IMPLEMENTED YET
470+
471+
[HarmonyPrefix]
472+
[HarmonyPatch(typeof(GameState), nameof(GameState.EndPlayerTurn))]
473+
private static bool GameState_EndPlayerTurn(GameState __instance, bool newTurn = false)
474+
{
475+
Console.Write("GameState_EndPlayerTurn");
476+
__instance.CurrentPlayerIndex++;
477+
if (__instance.CurrentPlayerIndex >=__instance. PlayerStates.Count)
478+
{
479+
__instance.CurrentPlayerIndex = 0;
480+
newTurn = true;
481+
}
482+
483+
var currentPlayer = __instance.PlayerStates[__instance.CurrentPlayerIndex];
484+
if (!currentPlayer.IsAlive(__instance))
485+
{
486+
__instance.EndPlayerTurn(newTurn);
487+
}
488+
else if (newTurn)
489+
{
490+
__instance.CurrentTurn++;
491+
}
492+
493+
if(currentPlayer.AutoPlay)
494+
{
495+
__instance.CommandStack.Add(new EndTurnCommand(currentPlayer.Id));
496+
}
497+
Console.Write("finished");
498+
return false;
499+
}
457500
}

0 commit comments

Comments
 (0)