This commit is contained in:
2025-12-14 21:04:22 +01:00
parent c4eb7e944d
commit 3a7b81bfd7
112 changed files with 12 additions and 16665 deletions

View File

@@ -1,32 +0,0 @@
using KCM.Packets.Handlers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace KCM.Packets.Lobby
{
public class ChatMessage : Packet
{
public override ushort packetId => (int)Enums.Packets.ChatMessage;
public string PlayerName { get; set; }
public string Message { get; set; }
public override void HandlePacketServer()
{
//Main.helper.Log("Received chat packet: " + Message);
//SendToAll(KCClient.client.Id);
//LobbyHandler.AddChatMessage(clientId, PlayerName, Message);
}
public override void HandlePacketClient()
{
Main.helper.Log("Received chat packet: " + Message);
LobbyHandler.AddChatMessage(clientId, PlayerName, Message);
}
}
}

View File

@@ -1,26 +0,0 @@
using KCM.Packets.Handlers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace KCM.Packets.Lobby
{
public class ChatSystemMessage : Packet
{
public override ushort packetId => (int)Enums.Packets.ChatSystemMessage;
public string Message { get; set; }
public override void HandlePacketServer()
{
//LobbyHandler.AddSystemMessage(Message);
}
public override void HandlePacketClient()
{
LobbyHandler.AddSystemMessage(Message);
}
}
}

View File

@@ -1,38 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace KCM.Packets.Lobby
{
public class KingdomName : Packet
{
public override ushort packetId => (int)Enums.Packets.KingdomName;
public string kingdomName { get; set; }
public override void HandlePacketServer()
{
if (player == null)
return;
Main.helper.Log("Received kingdom name packet");
//SendToAll(KCClient.client.Id);
player.kingdomName = kingdomName;
}
public override void HandlePacketClient()
{
if (player == null)
return;
Main.helper.Log("Received kingdom name packet");
player.kingdomName = kingdomName;
Main.helper.Log($"Player {player.name} has joined with their kingdom {player.kingdomName}");
}
}
}

View File

@@ -1,31 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace KCM.Packets.Lobby
{
public class PlayerBanner : Packet
{
public override ushort packetId => (int)Enums.Packets.PlayerBanner;
public int banner { get; set; }
public override void HandlePacketServer()
{
//SendToAll(KCClient.client.Id);
//player.banner = banner;
//player.inst.PlayerLandmassOwner.SetBannerIdx(banner);
}
public override void HandlePacketClient()
{
player.banner = banner;
player.inst.PlayerLandmassOwner.SetBannerIdx(banner);
Main.helper.Log($"Player {clientId} ({player.id}) has set banner to {player.banner}");
}
}
}

View File

@@ -1,58 +0,0 @@
using KCM.Packets.Handlers;
using Steamworks;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace KCM.Packets.Lobby
{
public class PlayerList : Packet
{
public override ushort packetId => (int)Enums.Packets.PlayerList;
public List<bool> playersReady { get; set; }
public List<string> playersName { get; set; }
public List<int> playersBanner { get; set; }
public List<ushort> playersId { get; set; }
public List<string> playersKingdomName { get; set; }
public List<string> steamIds { get; set; }
public override void HandlePacketServer()
{
}
public override void HandlePacketClient()
{
LobbyHandler.ClearPlayerList();
for (int i = 0; i < playersId.Count; i++)
{
Main.helper.Log("PlayerList: " + playersName[i] + " " + playersId[i] + " " + steamIds[i]);
Main.kCPlayers.Add(steamIds[i], new KCPlayer(playersName[i], playersId[i], steamIds[i])
{
name = playersName[i],
ready = playersReady[i],
banner = playersBanner[i],
kingdomName = playersKingdomName[i]
});
if (Main.clientSteamIds.ContainsKey(playersId[i]))
Main.clientSteamIds[playersId[i]] = steamIds[i];
else
Main.clientSteamIds.Add(playersId[i], steamIds[i]);
Main.kCPlayers[steamIds[i]].inst.PlayerLandmassOwner.SetBannerIdx(playersBanner[i]);
LobbyHandler.AddPlayerEntry(playersId[i]);
}
}
}
}

View File

@@ -1,28 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace KCM.Packets.Lobby
{
public class PlayerReady : Packet
{
public override ushort packetId => (int)Enums.Packets.PlayerReady;
public bool IsReady { get; set; }
public override void HandlePacketServer()
{
IsReady = !player.ready;
//SendToAll(KCClient.client.Id);
player.ready = IsReady;
}
public override void HandlePacketClient()
{
player.ready = IsReady;
}
}
}

View File

@@ -1,114 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static KCM.Main;
namespace KCM.Packets.Lobby
{
public class SaveTransferPacket : Packet
{
public override ushort packetId => (ushort)Enums.Packets.SaveTransferPacket;
public static byte[] saveData = new byte[1];
public static bool[] chunksReceived = new bool[1];
public static bool loadingSave = false;
public static int received = 0;
public int chunkId { get; set; }
public int chunkSize { get; set; }
public int saveSize { get; set; }
public int saveDataIndex { get; set; }
public int totalChunks { get; set; }
public byte[] saveDataChunk { get; set; }
public override void HandlePacketClient()
{
float savePercent = (float)received / (float)saveSize;
// Initialize saveData and chunksReceived on the first packet received
if (saveData.Length == 1)
{
Main.helper.Log("Save Transfer started!");
loadingSave = true;
ServerLobbyScript.LoadingSave.SetActive(true);
// save percentage
saveData = new byte[saveSize];
chunksReceived = new bool[totalChunks];
}
// Copy the chunk data into the correct position in saveData
Array.Copy(saveDataChunk, 0, saveData, saveDataIndex, saveDataChunk.Length);
// Mark this chunk as received
chunksReceived[chunkId] = true;
// Seek to the next position to write to
received += chunkSize;
ServerLobbyScript.ProgressBar.fillAmount = savePercent;
ServerLobbyScript.ProgressBarText.text = (savePercent * 100).ToString("0.00") + "%";
ServerLobbyScript.ProgressText.text = $"{((float)(received / 1000)).ToString("0.00")} KB / {((float)(saveSize / 1000)).ToString("0.00")} KB";
if (chunkId + 1 == totalChunks)
{
Main.helper.Log($"Received last save transfer packet.");
Main.helper.Log(WhichIsNotComplete());
}
// Check if all chunks have been received
if (IsTransferComplete())
{
// Handle completed transfer here
Main.helper.Log("Save Transfer complete!");
LoadSaveLoadHook.saveBytes = saveData;
LoadSaveLoadHook.memoryStreamHook = true;
LoadSave.Load();
LoadSaveLoadHook.saveContainer.Unpack(null);
Broadcast.OnLoadedEvent.Broadcast(new OnLoadedEvent());
ServerLobbyScript.LoadingSave.SetActive(false);
}
}
public static bool IsTransferComplete()
{
return chunksReceived.All(x => x == true);
}
public static string WhichIsNotComplete()
{
string notComplete = "";
for (int i = 0; i < chunksReceived.Length; i++)
{
if (!chunksReceived[i])
{
notComplete += i + ", ";
}
}
return notComplete;
}
public override void HandlePacketServer()
{
}
}
}

View File

@@ -1,48 +0,0 @@
using KCM.Packets.Handlers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace KCM.Packets.Lobby
{
public class ServerSettings : Packet
{
public override ushort packetId => (int)Enums.Packets.ServerSettings;
public string ServerName { get; set; }
public int MaxPlayers { get; set; }
public bool Locked { get; set; }
public string Password { get; set; }
public int Difficulty { get; set; }
public string WorldSeed { get; set; }
public World.MapSize WorldSize { get; set; }
public World.MapBias WorldType { get; set; }
public World.MapRiverLakes WorldRivers { get; set; }
public int PlacementType { get; set; }
public bool FogOfWar { get; set; }
public ServerSettings() { this.MaxPlayers = 2; this.Password = " "; this.WorldRivers = World.MapRiverLakes.Some; }
public override void HandlePacketServer()
{
//SetServerSettings();
}
public override void HandlePacketClient()
{
SetServerSettings();
}
public void SetServerSettings()
{
LobbyHandler.ServerSettings = this;
World.inst.mapSize = WorldSize;
World.inst.mapBias = WorldType;
World.inst.mapRiverLakes = WorldRivers;
}
}
}

View File

@@ -1,91 +0,0 @@
using KCM.Enums;
using Riptide.Demos.Steam.PlayerHosted;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace KCM.Packets.Lobby
{
public class StartGame : Packet
{
public override ushort packetId => (int)Enums.Packets.StartGame;
public void Start()
{
Main.helper.Log("Starting multiplayer game...");
try
{
// For multiplayer, we don't call MainMenuMode.StartGame() because:
// 1. Clients never go through the "Choose Your Map" screen
// 2. MainMenuMode.StartGame() expects that screen's state to be initialized
// 3. Calling it causes NullReferenceException
// Instead, we transition directly to playing mode like when loading saves
SpeedControlUI.inst.SetSpeed(0);
// Transition to playing mode
GameState.inst.SetNewMode(GameState.inst.playingMode);
SpeedControlUI.inst.SetSpeed(0);
Main.helper.Log("Successfully started multiplayer game");
}
catch (Exception ex)
{
Main.helper.Log("Error starting multiplayer game:");
Main.helper.Log(ex.Message.ToString());
Main.helper.Log(ex.ToString());
}
}
public override void HandlePacketClient()
{
Start();
}
public override void HandlePacketServer()
{
//Start();
/*AIBrainsContainer.PreStartAIConfig aiConfig = new AIBrainsContainer.PreStartAIConfig();
int count = 0;
for (int i = 0; i < RivalKingdomSettingsUI.inst.rivalItems.Length; i++)
{
RivalItemUI r = RivalKingdomSettingsUI.inst.rivalItems[i];
bool flag = r.Enabled && !r.Locked;
if (flag)
{
count++;
}
}
int idx = 0;
aiConfig.startData = new AIBrainsContainer.PreStartAIConfig.AIStartData[count];
for (int j = 0; j < RivalKingdomSettingsUI.inst.rivalItems.Length; j++)
{
RivalItemUI item = RivalKingdomSettingsUI.inst.rivalItems[j];
bool flag2 = item.Enabled && !item.Locked;
if (flag2)
{
aiConfig.startData[idx] = new AIBrainsContainer.PreStartAIConfig.AIStartData();
aiConfig.startData[idx].landmass = item.flag.landmass;
aiConfig.startData[idx].bioCode = item.bannerIdx;
aiConfig.startData[idx].personalityKey = PersonalityCollection.aiPersonalityKeys[0];
aiConfig.startData[idx].skillLevel = item.GetSkillLevel();
idx++;
}
}
AIBrainsContainer.inst.aiStartInfo = aiConfig;
bool isControllerActive = GamepadControl.inst.isControllerActive;
if (isControllerActive)
{
ConsoleCursorMenu.inst.PrepForGamepad();
}*/
}
}
}

View File

@@ -1,60 +0,0 @@
using KCM.Packets.Handlers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace KCM.Packets.Lobby
{
public class WorldSeed : Packet
{
public override ushort packetId => (int)Enums.Packets.WorldSeed;
public int Seed { get; set; }
// Map parameters to ensure correct generation
public World.MapSize WorldSize { get; set; }
public World.MapBias WorldType { get; set; }
public World.MapRiverLakes WorldRivers { get; set; }
public override void HandlePacketServer()
{
//SetWorldSeed();
}
public override void HandlePacketClient()
{
SetWorldSeed();
}
public void SetWorldSeed()
{
try
{
// Set map parameters BEFORE generating to ensure correct world
World.inst.mapSize = WorldSize;
World.inst.mapBias = WorldType;
World.inst.mapRiverLakes = WorldRivers;
Main.helper.Log($"[WORLD SYNC] Generating world - Seed: {Seed}, Size: {WorldSize}, Type: {WorldType}, Rivers: {WorldRivers}");
foreach (var player in Main.kCPlayers.Values)
player.inst.Reset();
World.inst.Generate(Seed);
Vector3 center = World.inst.GetCellData(World.inst.GridWidth / 2, World.inst.GridHeight / 2).Center;
Cam.inst.SetTrackingPos(center);
Main.helper.Log("[WORLD SYNC] World generation complete");
}
catch (Exception e)
{
Main.helper.Log("Set world seed packet error");
Main.helper.Log(e.Message);
Main.helper.Log(e.StackTrace);
Main.helper.Log(e.ToString());
}
}
}
}