mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-26 06:40:23 +00:00
commit
5723f3a237
@ -54,5 +54,6 @@
|
|||||||
public static string QSBSocketItem = "QSBSocketItem";
|
public static string QSBSocketItem = "QSBSocketItem";
|
||||||
public static string QSBMoveToCarry = "QSBMoveToCarry";
|
public static string QSBMoveToCarry = "QSBMoveToCarry";
|
||||||
public static string QSBStartStatue = "QSBStartStatue";
|
public static string QSBStartStatue = "QSBStartStatue";
|
||||||
|
public static string QSBPlayerKick = "QSBPlayerKick";
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -38,6 +38,7 @@
|
|||||||
DropItem,
|
DropItem,
|
||||||
SocketItem,
|
SocketItem,
|
||||||
MoveToCarry,
|
MoveToCarry,
|
||||||
StartStatue
|
StartStatue,
|
||||||
|
PlayerKick
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -79,7 +79,7 @@ namespace QSB.Events
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (message.FromId == QSBPlayerManager.LocalPlayerId ||
|
if (message.FromId == QSBPlayerManager.LocalPlayerId ||
|
||||||
QSBPlayerManager.IsBelongingToLocalPlayer(message.AboutId))
|
QSBPlayerManager.IsBelongingToLocalPlayer(message.FromId))
|
||||||
{
|
{
|
||||||
OnReceiveLocal(QNetworkServer.active, message);
|
OnReceiveLocal(QNetworkServer.active, message);
|
||||||
return;
|
return;
|
||||||
|
@ -46,6 +46,7 @@ namespace QSB.Events
|
|||||||
new CrouchEvent(),
|
new CrouchEvent(),
|
||||||
new ServerTimeEvent(),
|
new ServerTimeEvent(),
|
||||||
new PlayerEntangledEvent(),
|
new PlayerEntangledEvent(),
|
||||||
|
new PlayerKickEvent(),
|
||||||
// World Objects
|
// World Objects
|
||||||
new ElevatorEvent(),
|
new ElevatorEvent(),
|
||||||
new GeyserEvent(),
|
new GeyserEvent(),
|
||||||
|
@ -50,7 +50,7 @@ namespace QSB.OrbSync.Events
|
|||||||
|
|
||||||
private static void HandleServer(WorldObjectMessage message)
|
private static void HandleServer(WorldObjectMessage message)
|
||||||
{
|
{
|
||||||
var fromPlayer = QNetworkServer.connections.First(x => x.GetPlayer().PlayerId == message.FromId);
|
var fromPlayer = QNetworkServer.connections.First(x => x.GetPlayerId() == message.FromId);
|
||||||
if (QSBWorldSync.OrbSyncList.Count == 0)
|
if (QSBWorldSync.OrbSyncList.Count == 0)
|
||||||
{
|
{
|
||||||
DebugLog.ToConsole($"Error - OrbSyncList is empty. (ID {message.ObjectId})", MessageType.Error);
|
DebugLog.ToConsole($"Error - OrbSyncList is empty. (ID {message.ObjectId})", MessageType.Error);
|
||||||
|
@ -16,11 +16,18 @@ namespace QSB.Player.Events
|
|||||||
private PlayerJoinMessage CreateMessage(string name) => new PlayerJoinMessage
|
private PlayerJoinMessage CreateMessage(string name) => new PlayerJoinMessage
|
||||||
{
|
{
|
||||||
AboutId = LocalPlayerId,
|
AboutId = LocalPlayerId,
|
||||||
PlayerName = name
|
PlayerName = name,
|
||||||
|
QSBVersion = QSBCore.QSBVersion
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(bool server, PlayerJoinMessage message)
|
public override void OnReceiveRemote(bool server, PlayerJoinMessage message)
|
||||||
{
|
{
|
||||||
|
if (server && (message.QSBVersion != QSBCore.QSBVersion))
|
||||||
|
{
|
||||||
|
DebugLog.DebugWrite($"Error - Client {message.PlayerName} connecting with wrong version. (Client:{message.QSBVersion}, Server:{QSBCore.QSBVersion})", MessageType.Error);
|
||||||
|
QSBEventManager.FireEvent(EventNames.QSBPlayerKick, message.AboutId, KickReason.VersionNotMatching);
|
||||||
|
return;
|
||||||
|
}
|
||||||
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
||||||
player.Name = message.PlayerName;
|
player.Name = message.PlayerName;
|
||||||
DebugLog.ToAll($"{player.Name} joined!", MessageType.Info);
|
DebugLog.ToAll($"{player.Name} joined!", MessageType.Info);
|
||||||
|
@ -6,17 +6,20 @@ namespace QSB.Player.Events
|
|||||||
public class PlayerJoinMessage : PlayerMessage
|
public class PlayerJoinMessage : PlayerMessage
|
||||||
{
|
{
|
||||||
public string PlayerName { get; set; }
|
public string PlayerName { get; set; }
|
||||||
|
public string QSBVersion { get; set; }
|
||||||
|
|
||||||
public override void Deserialize(QNetworkReader reader)
|
public override void Deserialize(QNetworkReader reader)
|
||||||
{
|
{
|
||||||
base.Deserialize(reader);
|
base.Deserialize(reader);
|
||||||
PlayerName = reader.ReadString();
|
PlayerName = reader.ReadString();
|
||||||
|
QSBVersion = reader.ReadString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Serialize(QNetworkWriter writer)
|
public override void Serialize(QNetworkWriter writer)
|
||||||
{
|
{
|
||||||
base.Serialize(writer);
|
base.Serialize(writer);
|
||||||
writer.Write(PlayerName);
|
writer.Write(PlayerName);
|
||||||
|
writer.Write(QSBVersion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
51
QSB/Player/Events/PlayerKickEvent.cs
Normal file
51
QSB/Player/Events/PlayerKickEvent.cs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
using QSB.Events;
|
||||||
|
using QSB.Messaging;
|
||||||
|
using QSB.Utility;
|
||||||
|
using QuantumUNET;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace QSB.Player.Events
|
||||||
|
{
|
||||||
|
internal class PlayerKickEvent : QSBEvent<EnumMessage<KickReason>>
|
||||||
|
{
|
||||||
|
public override EventType Type => EventType.PlayerKick;
|
||||||
|
|
||||||
|
public override void SetupListener() => GlobalMessenger<uint, KickReason>.AddListener(EventNames.QSBPlayerKick, Handler);
|
||||||
|
public override void CloseListener() => GlobalMessenger<uint, KickReason>.RemoveListener(EventNames.QSBPlayerKick, Handler);
|
||||||
|
|
||||||
|
private void Handler(uint player, KickReason reason) => SendEvent(CreateMessage(player, reason));
|
||||||
|
|
||||||
|
private EnumMessage<KickReason> CreateMessage(uint player, KickReason reason) => new EnumMessage<KickReason>
|
||||||
|
{
|
||||||
|
AboutId = player,
|
||||||
|
Value = reason
|
||||||
|
};
|
||||||
|
|
||||||
|
public override void OnReceiveLocal(bool server, EnumMessage<KickReason> message)
|
||||||
|
{
|
||||||
|
if (!server)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QSBCore.Helper.Events.Unity.FireInNUpdates(() => KickPlayer(message.AboutId), 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void KickPlayer(uint id)
|
||||||
|
=> QNetworkServer.connections.First(x => x.GetPlayerId() == id).Disconnect();
|
||||||
|
|
||||||
|
public override void OnReceiveRemote(bool server, EnumMessage<KickReason> message)
|
||||||
|
{
|
||||||
|
if (message.AboutId != QSBPlayerManager.LocalPlayerId)
|
||||||
|
{
|
||||||
|
if (QSBPlayerManager.PlayerExists(message.AboutId))
|
||||||
|
{
|
||||||
|
DebugLog.ToAll($"{QSBPlayerManager.GetPlayer(message.AboutId).Name} was kicked.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DebugLog.ToAll($"Player id:{message.AboutId} was kicked.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DebugLog.ToAll($"Kicked from server. Reason : {message.Value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
7
QSB/Player/KickReason.cs
Normal file
7
QSB/Player/KickReason.cs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
namespace QSB.Player
|
||||||
|
{
|
||||||
|
public enum KickReason
|
||||||
|
{
|
||||||
|
VersionNotMatching
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,4 @@
|
|||||||
using QSB.Utility;
|
using QuantumUNET;
|
||||||
using QuantumUNET;
|
|
||||||
|
|
||||||
namespace QSB.Player
|
namespace QSB.Player
|
||||||
{
|
{
|
||||||
@ -10,10 +9,6 @@ namespace QSB.Player
|
|||||||
public PlayerInfo Player => QSBPlayerManager.GetPlayer(PlayerId);
|
public PlayerInfo Player => QSBPlayerManager.GetPlayer(PlayerId);
|
||||||
|
|
||||||
protected virtual void Start() => QSBPlayerManager.AddSyncObject(this);
|
protected virtual void Start() => QSBPlayerManager.AddSyncObject(this);
|
||||||
protected virtual void OnDestroy()
|
protected virtual void OnDestroy() => QSBPlayerManager.RemoveSyncObject(this);
|
||||||
{
|
|
||||||
DebugLog.DebugWrite($"OnDestroy of {GetType().Name} for {PlayerId}");
|
|
||||||
QSBPlayerManager.RemoveSyncObject(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -66,7 +66,7 @@ namespace QSB.Player
|
|||||||
{
|
{
|
||||||
var trace = new StackTrace().GetFrame(1).GetMethod();
|
var trace = new StackTrace().GetFrame(1).GetMethod();
|
||||||
DebugLog.DebugWrite($"Remove Player : id<{id}> (Called from {trace.DeclaringType.Name}.{trace.Name})", MessageType.Info);
|
DebugLog.DebugWrite($"Remove Player : id<{id}> (Called from {trace.DeclaringType.Name}.{trace.Name})", MessageType.Info);
|
||||||
PlayerList.Remove(GetPlayer(id));
|
PlayerList.RemoveAll(x => x.PlayerId == id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool PlayerExists(uint id) =>
|
public static bool PlayerExists(uint id) =>
|
||||||
|
@ -169,7 +169,9 @@
|
|||||||
<Compile Include="OrbSync\WorldObjects\QSBOrbSlot.cs" />
|
<Compile Include="OrbSync\WorldObjects\QSBOrbSlot.cs" />
|
||||||
<Compile Include="Patches\QSBPatchManager.cs" />
|
<Compile Include="Patches\QSBPatchManager.cs" />
|
||||||
<Compile Include="Player\Events\PlayerEntangledEvent.cs" />
|
<Compile Include="Player\Events\PlayerEntangledEvent.cs" />
|
||||||
|
<Compile Include="Player\Events\PlayerKickEvent.cs" />
|
||||||
<Compile Include="Player\Events\ServerSendPlayerStatesEvent.cs" />
|
<Compile Include="Player\Events\ServerSendPlayerStatesEvent.cs" />
|
||||||
|
<Compile Include="Player\KickReason.cs" />
|
||||||
<Compile Include="Player\PlayerEntanglementWatcher.cs" />
|
<Compile Include="Player\PlayerEntanglementWatcher.cs" />
|
||||||
<Compile Include="Player\PlayerMapMarker.cs" />
|
<Compile Include="Player\PlayerMapMarker.cs" />
|
||||||
<Compile Include="Player\PlayerSyncObject.cs" />
|
<Compile Include="Player\PlayerSyncObject.cs" />
|
||||||
|
@ -57,6 +57,7 @@ namespace QSB
|
|||||||
public static bool HasWokenUp { get; set; }
|
public static bool HasWokenUp { get; set; }
|
||||||
public static bool IsServer => QNetworkServer.active;
|
public static bool IsServer => QNetworkServer.active;
|
||||||
public static bool IsInMultiplayer => QNetworkManager.singleton.isNetworkActive;
|
public static bool IsInMultiplayer => QNetworkManager.singleton.isNetworkActive;
|
||||||
|
public static string QSBVersion => Helper.Manifest.Version;
|
||||||
public static GameObject GameObjectInstance => _thisInstance.gameObject;
|
public static GameObject GameObjectInstance => _thisInstance.gameObject;
|
||||||
|
|
||||||
private static QSBCore _thisInstance;
|
private static QSBCore _thisInstance;
|
||||||
|
@ -13,7 +13,7 @@ namespace QSB.StatueSync.Patches
|
|||||||
=> QSBCore.Helper.HarmonyHelper.AddPrefix<MemoryUplinkTrigger>("Update", typeof(StatuePatches), nameof(Statue_Update));
|
=> QSBCore.Helper.HarmonyHelper.AddPrefix<MemoryUplinkTrigger>("Update", typeof(StatuePatches), nameof(Statue_Update));
|
||||||
|
|
||||||
public override void DoUnpatches()
|
public override void DoUnpatches()
|
||||||
=> QSBCore.Helper.HarmonyHelper.Unpatch<MemoryUplinkTrigger>("BeginUplinkSequence");
|
=> QSBCore.Helper.HarmonyHelper.Unpatch<MemoryUplinkTrigger>("Update");
|
||||||
|
|
||||||
public static bool Statue_Update(bool ____waitForPlayerGrounded)
|
public static bool Statue_Update(bool ____waitForPlayerGrounded)
|
||||||
{
|
{
|
||||||
|
@ -17,8 +17,11 @@ namespace QSB.TransformSync
|
|||||||
protected override void OnDestroy()
|
protected override void OnDestroy()
|
||||||
{
|
{
|
||||||
base.OnDestroy();
|
base.OnDestroy();
|
||||||
Player.HudMarker?.Remove();
|
if (QSBPlayerManager.PlayerExists(PlayerId))
|
||||||
QSBPlayerManager.RemovePlayer(PlayerId);
|
{
|
||||||
|
Player.HudMarker?.Remove();
|
||||||
|
QSBPlayerManager.RemovePlayer(PlayerId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Transform GetPlayerModel() =>
|
private Transform GetPlayerModel() =>
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using QSB.Player;
|
|
||||||
using QSB.TransformSync;
|
using QSB.TransformSync;
|
||||||
using QuantumUNET;
|
using QuantumUNET;
|
||||||
using System;
|
using System;
|
||||||
@ -36,11 +35,11 @@ namespace QSB.Utility
|
|||||||
original.gameObject.InstantiateInactive().transform;
|
original.gameObject.InstantiateInactive().transform;
|
||||||
|
|
||||||
// QNET
|
// QNET
|
||||||
public static PlayerInfo GetPlayer(this QNetworkConnection connection)
|
public static uint GetPlayerId(this QNetworkConnection connection)
|
||||||
{
|
{
|
||||||
var go = connection.PlayerControllers[0].Gameobject;
|
var go = connection.PlayerControllers[0].Gameobject;
|
||||||
var controller = go.GetComponent<PlayerTransformSync>();
|
var controller = go.GetComponent<PlayerTransformSync>();
|
||||||
return QSBPlayerManager.GetPlayer(controller.NetId.Value);
|
return controller.NetId.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
// C#
|
// C#
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
public static void Debug(string message)
|
public static void Debug(string message)
|
||||||
{
|
{
|
||||||
if (_logDebug)
|
if (!_logDebug)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
public static void Log(string message)
|
public static void Log(string message)
|
||||||
{
|
{
|
||||||
if (_logLog)
|
if (!_logLog)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
public static void Warning(string message)
|
public static void Warning(string message)
|
||||||
{
|
{
|
||||||
if (_logWarning)
|
if (!_logWarning)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -47,7 +47,7 @@
|
|||||||
|
|
||||||
public static void Error(string message)
|
public static void Error(string message)
|
||||||
{
|
{
|
||||||
if (_logError)
|
if (!_logError)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
public static void FatalError(string message)
|
public static void FatalError(string message)
|
||||||
{
|
{
|
||||||
if (_logFatal)
|
if (!_logFatal)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user