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 QSBMoveToCarry = "QSBMoveToCarry";
|
||||
public static string QSBStartStatue = "QSBStartStatue";
|
||||
public static string QSBPlayerKick = "QSBPlayerKick";
|
||||
}
|
||||
}
|
@ -38,6 +38,7 @@
|
||||
DropItem,
|
||||
SocketItem,
|
||||
MoveToCarry,
|
||||
StartStatue
|
||||
StartStatue,
|
||||
PlayerKick
|
||||
}
|
||||
}
|
@ -79,7 +79,7 @@ namespace QSB.Events
|
||||
}
|
||||
|
||||
if (message.FromId == QSBPlayerManager.LocalPlayerId ||
|
||||
QSBPlayerManager.IsBelongingToLocalPlayer(message.AboutId))
|
||||
QSBPlayerManager.IsBelongingToLocalPlayer(message.FromId))
|
||||
{
|
||||
OnReceiveLocal(QNetworkServer.active, message);
|
||||
return;
|
||||
|
@ -46,6 +46,7 @@ namespace QSB.Events
|
||||
new CrouchEvent(),
|
||||
new ServerTimeEvent(),
|
||||
new PlayerEntangledEvent(),
|
||||
new PlayerKickEvent(),
|
||||
// World Objects
|
||||
new ElevatorEvent(),
|
||||
new GeyserEvent(),
|
||||
|
@ -50,7 +50,7 @@ namespace QSB.OrbSync.Events
|
||||
|
||||
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)
|
||||
{
|
||||
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
|
||||
{
|
||||
AboutId = LocalPlayerId,
|
||||
PlayerName = name
|
||||
PlayerName = name,
|
||||
QSBVersion = QSBCore.QSBVersion
|
||||
};
|
||||
|
||||
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);
|
||||
player.Name = message.PlayerName;
|
||||
DebugLog.ToAll($"{player.Name} joined!", MessageType.Info);
|
||||
|
@ -6,17 +6,20 @@ namespace QSB.Player.Events
|
||||
public class PlayerJoinMessage : PlayerMessage
|
||||
{
|
||||
public string PlayerName { get; set; }
|
||||
public string QSBVersion { get; set; }
|
||||
|
||||
public override void Deserialize(QNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
PlayerName = reader.ReadString();
|
||||
QSBVersion = reader.ReadString();
|
||||
}
|
||||
|
||||
public override void Serialize(QNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
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
|
||||
{
|
||||
@ -10,10 +9,6 @@ namespace QSB.Player
|
||||
public PlayerInfo Player => QSBPlayerManager.GetPlayer(PlayerId);
|
||||
|
||||
protected virtual void Start() => QSBPlayerManager.AddSyncObject(this);
|
||||
protected virtual void OnDestroy()
|
||||
{
|
||||
DebugLog.DebugWrite($"OnDestroy of {GetType().Name} for {PlayerId}");
|
||||
QSBPlayerManager.RemoveSyncObject(this);
|
||||
}
|
||||
protected virtual void OnDestroy() => QSBPlayerManager.RemoveSyncObject(this);
|
||||
}
|
||||
}
|
@ -66,7 +66,7 @@ namespace QSB.Player
|
||||
{
|
||||
var trace = new StackTrace().GetFrame(1).GetMethod();
|
||||
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) =>
|
||||
|
@ -169,7 +169,9 @@
|
||||
<Compile Include="OrbSync\WorldObjects\QSBOrbSlot.cs" />
|
||||
<Compile Include="Patches\QSBPatchManager.cs" />
|
||||
<Compile Include="Player\Events\PlayerEntangledEvent.cs" />
|
||||
<Compile Include="Player\Events\PlayerKickEvent.cs" />
|
||||
<Compile Include="Player\Events\ServerSendPlayerStatesEvent.cs" />
|
||||
<Compile Include="Player\KickReason.cs" />
|
||||
<Compile Include="Player\PlayerEntanglementWatcher.cs" />
|
||||
<Compile Include="Player\PlayerMapMarker.cs" />
|
||||
<Compile Include="Player\PlayerSyncObject.cs" />
|
||||
|
@ -57,6 +57,7 @@ namespace QSB
|
||||
public static bool HasWokenUp { get; set; }
|
||||
public static bool IsServer => QNetworkServer.active;
|
||||
public static bool IsInMultiplayer => QNetworkManager.singleton.isNetworkActive;
|
||||
public static string QSBVersion => Helper.Manifest.Version;
|
||||
public static GameObject GameObjectInstance => _thisInstance.gameObject;
|
||||
|
||||
private static QSBCore _thisInstance;
|
||||
|
@ -13,7 +13,7 @@ namespace QSB.StatueSync.Patches
|
||||
=> QSBCore.Helper.HarmonyHelper.AddPrefix<MemoryUplinkTrigger>("Update", typeof(StatuePatches), nameof(Statue_Update));
|
||||
|
||||
public override void DoUnpatches()
|
||||
=> QSBCore.Helper.HarmonyHelper.Unpatch<MemoryUplinkTrigger>("BeginUplinkSequence");
|
||||
=> QSBCore.Helper.HarmonyHelper.Unpatch<MemoryUplinkTrigger>("Update");
|
||||
|
||||
public static bool Statue_Update(bool ____waitForPlayerGrounded)
|
||||
{
|
||||
|
@ -17,9 +17,12 @@ namespace QSB.TransformSync
|
||||
protected override void OnDestroy()
|
||||
{
|
||||
base.OnDestroy();
|
||||
if (QSBPlayerManager.PlayerExists(PlayerId))
|
||||
{
|
||||
Player.HudMarker?.Remove();
|
||||
QSBPlayerManager.RemovePlayer(PlayerId);
|
||||
}
|
||||
}
|
||||
|
||||
private Transform GetPlayerModel() =>
|
||||
Locator.GetPlayerTransform().Find("Traveller_HEA_Player_v2");
|
||||
|
@ -1,5 +1,4 @@
|
||||
using OWML.Common;
|
||||
using QSB.Player;
|
||||
using QSB.TransformSync;
|
||||
using QuantumUNET;
|
||||
using System;
|
||||
@ -36,11 +35,11 @@ namespace QSB.Utility
|
||||
original.gameObject.InstantiateInactive().transform;
|
||||
|
||||
// QNET
|
||||
public static PlayerInfo GetPlayer(this QNetworkConnection connection)
|
||||
public static uint GetPlayerId(this QNetworkConnection connection)
|
||||
{
|
||||
var go = connection.PlayerControllers[0].Gameobject;
|
||||
var controller = go.GetComponent<PlayerTransformSync>();
|
||||
return QSBPlayerManager.GetPlayer(controller.NetId.Value);
|
||||
return controller.NetId.Value;
|
||||
}
|
||||
|
||||
// C#
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
public static void Debug(string message)
|
||||
{
|
||||
if (_logDebug)
|
||||
if (!_logDebug)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -29,7 +29,7 @@
|
||||
|
||||
public static void Log(string message)
|
||||
{
|
||||
if (_logLog)
|
||||
if (!_logLog)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -38,7 +38,7 @@
|
||||
|
||||
public static void Warning(string message)
|
||||
{
|
||||
if (_logWarning)
|
||||
if (!_logWarning)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -47,7 +47,7 @@
|
||||
|
||||
public static void Error(string message)
|
||||
{
|
||||
if (_logError)
|
||||
if (!_logError)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -56,7 +56,7 @@
|
||||
|
||||
public static void FatalError(string message)
|
||||
{
|
||||
if (_logFatal)
|
||||
if (!_logFatal)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user