2.8: relay bought/consumed items (stored for joiners), crash damage, job values, traffic (world authority only); tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+14
-2
@@ -12,7 +12,7 @@ namespace MSCO.Server;
|
||||
/// </summary>
|
||||
public sealed class GameServer
|
||||
{
|
||||
public const string ModVersion = "2.7"; // muss mit MSCO.ModVersion übereinstimmen
|
||||
public const string ModVersion = "2.8"; // muss mit MSCO.ModVersion übereinstimmen
|
||||
public const int ServerId = 0; // Absender-ID des Servers; Spieler bekommen 1, 2, ...
|
||||
|
||||
static readonly string[] SaveFiles = { "defaultES2File.txt", "items.txt", "meshsave.txt", "graveyard.txt", "notepad.txt" };
|
||||
@@ -287,7 +287,8 @@ public sealed class GameServer
|
||||
static bool IsGameMessage(MsgType t) =>
|
||||
t is MsgType.Player or MsgType.ObjStates or MsgType.ObjOwn or MsgType.ObjRelease or MsgType.FsmEvent
|
||||
or MsgType.VehicleFx or MsgType.WorldTime or MsgType.MoneyDelta or MsgType.DoorState or MsgType.Chat or MsgType.VarSync
|
||||
or MsgType.SpawnItem;
|
||||
or MsgType.SpawnItem or MsgType.ItemAppeared or MsgType.ObjDestroy or MsgType.VehicleDamage
|
||||
or MsgType.TrafficStates or MsgType.WorldVars;
|
||||
|
||||
/// <summary>Uhrzeit/Wetter gibt der Spieler mit der kleinsten ID vor (so rechnen es auch die Clients).</summary>
|
||||
int WorldAuthorityId => clients.Values.Where(c => c.State == ClientState.Joined).Select(c => c.Id).DefaultIfEmpty(-1).Min();
|
||||
@@ -403,10 +404,21 @@ public sealed class GameServer
|
||||
world.AddSpawn(m.Payload);
|
||||
Log($"{c.Name} spawned {SpawnName(m.Payload)}");
|
||||
break;
|
||||
case MsgType.ItemAppeared:
|
||||
if (m.Payload.Length > 256) return;
|
||||
world.AddAppeared(m.Payload);
|
||||
break;
|
||||
case MsgType.ObjDestroy:
|
||||
if (m.Payload.Length != 4) return;
|
||||
world.AddDestroyed(BitConverter.ToInt32(m.Payload, 0));
|
||||
break;
|
||||
case MsgType.Chat:
|
||||
if (m.Payload.Length > 1024) return; // Spam/Unsinn nicht weiterleiten
|
||||
Log($"[chat] {c.Name}: {m.Reader().ReadString()}");
|
||||
break;
|
||||
case MsgType.TrafficStates:
|
||||
if (c.Id != WorldAuthorityId) return; // nur einer simuliert den Verkehr
|
||||
break;
|
||||
case MsgType.WorldTime:
|
||||
if (c.Id != WorldAuthorityId) return; // nur einer gibt Uhrzeit/Wetter vor
|
||||
lastWorldTime = m.Payload;
|
||||
|
||||
Reference in New Issue
Block a user