mirror of
https://github.com/Impostor/Impostor.git
synced 2026-10-20 01:46:11 +00:00
Merge pull request #431 from miniduikboot/feature/2021.6.30
This commit is contained in:
26 files changed
+201
-60
No files matched your search
@@ -1,6 +1,6 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<VersionPrefix>1.5.0</VersionPrefix>
|
||||
<VersionPrefix>1.6.0</VersionPrefix>
|
||||
<VersionSuffix>dev</VersionSuffix>
|
||||
<EnforceCodeStyleInBuild Condition="$(MSBuildProjectName)!='Hazel'">true</EnforceCodeStyleInBuild>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -36,6 +36,7 @@ namespace Impostor.Api.Innersloth.Maps
|
||||
{
|
||||
new AirshipTask(AirshipTask.Ids.ElectricalFixWiring, TaskTypes.FixWiring, TaskCategories.CommonTask),
|
||||
new AirshipTask(AirshipTask.Ids.MeetingRoomEnterIDCode, TaskTypes.EnterIdCode, TaskCategories.CommonTask),
|
||||
new AirshipTask(AirshipTask.Ids.ElectricalCalibrateDistributor, TaskTypes.CalibrateDistributor, TaskCategories.LongTask),
|
||||
new AirshipTask(AirshipTask.Ids.ElectricalResetBreakers, TaskTypes.ResetBreakers, TaskCategories.LongTask),
|
||||
new AirshipTask(AirshipTask.Ids.VaultRoomDownloadData, TaskTypes.UploadData, TaskCategories.LongTask),
|
||||
new AirshipTask(AirshipTask.Ids.BrigDownloadData, TaskTypes.UploadData, TaskCategories.LongTask),
|
||||
@@ -50,8 +51,9 @@ namespace Impostor.Api.Innersloth.Maps
|
||||
new AirshipTask(AirshipTask.Ids.MainHallDevelopPhotos, TaskTypes.DevelopPhotos, TaskCategories.LongTask),
|
||||
new AirshipTask(AirshipTask.Ids.CargoBayFuelEngines, TaskTypes.FuelEngines, TaskCategories.LongTask),
|
||||
new AirshipTask(AirshipTask.Ids.SecurityRewindTapes, TaskTypes.RewindTapes, TaskCategories.LongTask),
|
||||
new AirshipTask(AirshipTask.Ids.LoungeEmptyGarbage, TaskTypes.EmptyGarbage, TaskCategories.LongTask),
|
||||
new AirshipTask(AirshipTask.Ids.ShowersEmptyGarbage, TaskTypes.EmptyGarbage, TaskCategories.LongTask),
|
||||
new AirshipTask(AirshipTask.Ids.VaultRoomPolishRuby, TaskTypes.PolishRuby, TaskCategories.ShortTask),
|
||||
new AirshipTask(AirshipTask.Ids.ElectricalCalibrateDistributor, TaskTypes.CalibrateDistributor, TaskCategories.LongTask),
|
||||
new AirshipTask(AirshipTask.Ids.CockpitStabilizeSteering, TaskTypes.StabilizeSteering, TaskCategories.ShortTask),
|
||||
new AirshipTask(AirshipTask.Ids.ArmoryDownloadData, TaskTypes.UploadData, TaskCategories.LongTask),
|
||||
new AirshipTask(AirshipTask.Ids.CockpitDownloadData, TaskTypes.UploadData, TaskCategories.LongTask),
|
||||
@@ -74,6 +76,7 @@ namespace Impostor.Api.Innersloth.Maps
|
||||
new AirshipTask(AirshipTask.Ids.MainHallDecontaminate, TaskTypes.Decontaminate, TaskCategories.ShortTask),
|
||||
new AirshipTask(AirshipTask.Ids.KitchenMakeBurger, TaskTypes.MakeBurger, TaskCategories.ShortTask),
|
||||
new AirshipTask(AirshipTask.Ids.ShowersFixShower, TaskTypes.FixShower, TaskCategories.ShortTask),
|
||||
new AirshipTask(AirshipTask.Ids.CleanVent, TaskTypes.VentCleaning, TaskCategories.ShortTask),
|
||||
};
|
||||
|
||||
Tasks = tasks.ToDictionary(x => x.Id, x => x).AsReadOnly();
|
||||
|
||||
@@ -59,6 +59,7 @@ namespace Impostor.Api.Innersloth.Maps
|
||||
new MiraTask(MiraTask.Ids.OfficeProcessData, TaskTypes.ProcessData, TaskCategories.ShortTask),
|
||||
new MiraTask(MiraTask.Ids.LaunchpadRunDiagnostics, TaskTypes.RunDiagnostics, TaskCategories.LongTask),
|
||||
new MiraTask(MiraTask.Ids.ReactorUnlockManifolds, TaskTypes.UnlockManifolds, TaskCategories.ShortTask),
|
||||
new MiraTask(MiraTask.Ids.CleanVent, TaskTypes.VentCleaning, TaskCategories.ShortTask),
|
||||
};
|
||||
|
||||
Tasks = tasks.ToDictionary(x => x.Id, x => x).AsReadOnly();
|
||||
|
||||
@@ -65,6 +65,7 @@ namespace Impostor.Api.Innersloth.Maps
|
||||
new SkeldTask(SkeldTask.Ids.ElectricalDivertPowerToNavigation, TaskTypes.DivertPower, TaskCategories.ShortTask),
|
||||
new SkeldTask(SkeldTask.Ids.ElectricalDivertPowerToLowerEngine, TaskTypes.DivertPower, TaskCategories.ShortTask),
|
||||
new SkeldTask(SkeldTask.Ids.ElectricalDivertPowerToSecurity, TaskTypes.DivertPower, TaskCategories.ShortTask),
|
||||
new SkeldTask(SkeldTask.Ids.CleanVent, TaskTypes.VentCleaning, TaskCategories.ShortTask),
|
||||
};
|
||||
|
||||
Tasks = tasks.ToDictionary(x => x.Id, x => x).AsReadOnly();
|
||||
|
||||
@@ -15,44 +15,47 @@ namespace Impostor.Api.Innersloth.Maps.Tasks
|
||||
{
|
||||
ElectricalFixWiring = 0,
|
||||
MeetingRoomEnterIDCode = 1,
|
||||
ElectricalResetBreakers = 2,
|
||||
VaultRoomDownloadData = 3,
|
||||
BrigDownloadData = 4,
|
||||
CargoBayDownloadData = 5,
|
||||
GapRoomDownloadData = 6,
|
||||
RecordsDownloadData = 7,
|
||||
CargoBayUnlockSafe = 8,
|
||||
VentilationStartFans = 9,
|
||||
MainHallEmptyGarbage = 10,
|
||||
MedicalEmptyGarbage = 11,
|
||||
KitchenEmptyGarbage = 12,
|
||||
MainHallDevelopPhotos = 13,
|
||||
CargoBayFuelEngines = 14,
|
||||
SecurityRewindTapes = 15,
|
||||
VaultRoomPolishRuby = 16,
|
||||
ElectricalCalibrateDistributor = 17,
|
||||
CockpitStabilizeSteering = 18,
|
||||
ArmoryDownloadData = 19,
|
||||
CockpitDownloadData = 20,
|
||||
CommsDownloadData = 21,
|
||||
MedicalDownloadData = 22,
|
||||
ViewingDeckDownloadData = 23,
|
||||
ElectricalDivertPowerToArmory = 24,
|
||||
ElectricalDivertPowerToCockpit = 25,
|
||||
ElectricalDivertPowerToGapRoom = 26,
|
||||
ElectricalDivertPowerToMainHall = 27,
|
||||
ElectricalDivertPowerToMeetingRoom = 28,
|
||||
ElectricalDivertPowerToShowers = 29,
|
||||
ElectricalDivertPowerToEngine = 30,
|
||||
ShowersPickUpTowels = 31,
|
||||
LoungeCleanToilet = 32,
|
||||
VaultRoomDressMannequin = 33,
|
||||
RecordsSortRecords = 34,
|
||||
ArmoryPutAwayPistols = 35,
|
||||
ArmoryPutAwayRifles = 36,
|
||||
MainHallDecontaminate = 37,
|
||||
KitchenMakeBurger = 38,
|
||||
ShowersFixShower = 39,
|
||||
ElectricalCalibrateDistributor = 2,
|
||||
ElectricalResetBreakers = 3,
|
||||
VaultRoomDownloadData = 4,
|
||||
BrigDownloadData = 5,
|
||||
CargoBayDownloadData = 6,
|
||||
GapRoomDownloadData = 7,
|
||||
RecordsDownloadData = 8,
|
||||
CargoBayUnlockSafe = 9,
|
||||
VentilationStartFans = 10,
|
||||
MainHallEmptyGarbage = 11,
|
||||
MedicalEmptyGarbage = 12,
|
||||
KitchenEmptyGarbage = 13,
|
||||
MainHallDevelopPhotos = 14,
|
||||
CargoBayFuelEngines = 15,
|
||||
SecurityRewindTapes = 16,
|
||||
LoungeEmptyGarbage = 17,
|
||||
ShowersEmptyGarbage = 18,
|
||||
VaultRoomPolishRuby = 19,
|
||||
CockpitStabilizeSteering = 20,
|
||||
ArmoryDownloadData = 21,
|
||||
CockpitDownloadData = 22,
|
||||
CommsDownloadData = 23,
|
||||
MedicalDownloadData = 24,
|
||||
ViewingDeckDownloadData = 25,
|
||||
ElectricalDivertPowerToArmory = 26,
|
||||
ElectricalDivertPowerToCockpit = 27,
|
||||
ElectricalDivertPowerToGapRoom = 28,
|
||||
ElectricalDivertPowerToMainHall = 29,
|
||||
ElectricalDivertPowerToMeetingRoom = 30,
|
||||
ElectricalDivertPowerToShowers = 31,
|
||||
ElectricalDivertPowerToEngine = 32,
|
||||
ShowersPickUpTowels = 33,
|
||||
LoungeCleanToilet = 34,
|
||||
VaultRoomDressMannequin = 35,
|
||||
RecordsSortRecords = 36,
|
||||
ArmoryPutAwayPistols = 37,
|
||||
ArmoryPutAwayRifles = 38,
|
||||
MainHallDecontaminate = 39,
|
||||
KitchenMakeBurger = 40,
|
||||
ShowersFixShower = 41,
|
||||
CleanVent = 42,
|
||||
}
|
||||
|
||||
public Ids Id { get; }
|
||||
|
||||
@@ -39,6 +39,7 @@ namespace Impostor.Api.Innersloth.Maps.Tasks
|
||||
OfficeProcessData = 23,
|
||||
LaunchpadRunDiagnostics = 24,
|
||||
ReactorUnlockManifolds = 25,
|
||||
CleanVent = 26,
|
||||
}
|
||||
|
||||
public Ids Id { get; }
|
||||
|
||||
@@ -42,6 +42,7 @@ namespace Impostor.Api.Innersloth.Maps.Tasks
|
||||
ElectricalDivertPowerToNavigation = 26,
|
||||
ElectricalDivertPowerToLowerEngine = 27,
|
||||
ElectricalDivertPowerToSecurity = 28,
|
||||
CleanVent = 29,
|
||||
}
|
||||
|
||||
public Ids Id { get; }
|
||||
|
||||
@@ -62,5 +62,6 @@ namespace Impostor.Api.Innersloth
|
||||
GetBiggolSword = 57,
|
||||
PutAwayRifles = 58,
|
||||
StopCharles = 59,
|
||||
VentCleaning = 60,
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,16 @@ namespace Impostor.Api.Net
|
||||
/// </remarks>
|
||||
string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the language.
|
||||
/// </summary>
|
||||
Language Language { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the quick chat mode.
|
||||
/// </summary>
|
||||
QuickChatModes ChatMode { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the connection of the client.
|
||||
/// </summary>
|
||||
|
||||
@@ -35,5 +35,7 @@
|
||||
ClimbLadder = 31,
|
||||
UsePlatform = 32,
|
||||
SendQuickChat = 33,
|
||||
BootFromVent = 34,
|
||||
UpdateSystem = 35,
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,40 @@
|
||||
using Impostor.Api.Innersloth;
|
||||
|
||||
namespace Impostor.Api.Net.Messages.C2S
|
||||
{
|
||||
public static class HandshakeC2S
|
||||
{
|
||||
public static void Deserialize(IMessageReader reader, out int clientVersion, out string name, out uint lastNonceReceived)
|
||||
public static void Deserialize(IMessageReader reader, out int clientVersion, out string name, out uint? lastNonceReceived, out Language language, out QuickChatModes chatMode)
|
||||
{
|
||||
clientVersion = reader.ReadInt32();
|
||||
name = reader.ReadString();
|
||||
lastNonceReceived = reader.ReadUInt32();
|
||||
|
||||
if (clientVersion >= Version.V1)
|
||||
{
|
||||
lastNonceReceived = reader.ReadUInt32();
|
||||
}
|
||||
else
|
||||
{
|
||||
lastNonceReceived = null;
|
||||
}
|
||||
|
||||
if (clientVersion >= Version.V2)
|
||||
{
|
||||
language = (Language)reader.ReadUInt32();
|
||||
chatMode = (QuickChatModes)reader.ReadByte();
|
||||
}
|
||||
else
|
||||
{
|
||||
language = Language.English;
|
||||
chatMode = QuickChatModes.FreeChatOrQuickChat;
|
||||
}
|
||||
}
|
||||
|
||||
private static class Version
|
||||
{
|
||||
public static readonly int V1 = GameVersion.GetVersion(2021, 4, 25);
|
||||
|
||||
public static readonly int V2 = GameVersion.GetVersion(2021, 6, 30);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
namespace Impostor.Api.Net.Messages.Rpcs
|
||||
{
|
||||
public static class Rpc34BootFromVent
|
||||
{
|
||||
public static void Serialize(IMessageWriter writer, int ventId)
|
||||
{
|
||||
writer.WritePacked(ventId);
|
||||
}
|
||||
|
||||
public static void Deserialize(IMessageReader reader, out int ventId)
|
||||
{
|
||||
ventId = reader.ReadPackedInt32();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using Impostor.Api.Games;
|
||||
using Impostor.Api.Innersloth;
|
||||
using Impostor.Api.Net.Inner.Objects;
|
||||
|
||||
namespace Impostor.Api.Net.Messages.Rpcs
|
||||
{
|
||||
public static class Rpc35UpdateSystem
|
||||
{
|
||||
public static void Serialize(IMessageWriter writer, SystemTypes systemType, IInnerPlayerControl playerControl, ushort sequenceId, byte state, byte ventId)
|
||||
{
|
||||
writer.Write((byte)systemType);
|
||||
writer.Write(playerControl.NetId);
|
||||
writer.Write(sequenceId);
|
||||
writer.Write(state);
|
||||
writer.Write(ventId);
|
||||
}
|
||||
|
||||
public static void Deserialize(IMessageReader reader, IGame game, out SystemTypes systemType, out IInnerPlayerControl? playerControl, out ushort sequenceId, out byte state, out byte ventId)
|
||||
{
|
||||
systemType = (SystemTypes)reader.ReadByte();
|
||||
playerControl = reader.ReadNetObject<IInnerPlayerControl>(game);
|
||||
sequenceId = reader.ReadUInt16();
|
||||
state = reader.ReadByte();
|
||||
ventId = reader.ReadByte();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ namespace Impostor.Plugins.Example
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services.AddSingleton<IEventListener, GameEventListener>();
|
||||
services.AddSingleton<IEventListener, ClientEventListener>();
|
||||
services.AddSingleton<IEventListener, PlayerEventListener>();
|
||||
services.AddSingleton<IEventListener, MeetingEventListener>();
|
||||
services.AddSingleton<IEventListener, AnnouncementsListener>();
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
using Impostor.Api.Events;
|
||||
using Impostor.Api.Events.Client;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Impostor.Plugins.Example.Handlers
|
||||
{
|
||||
public class ClientEventListener : IEventListener
|
||||
{
|
||||
private readonly ILogger<ClientEventListener> _logger;
|
||||
|
||||
public ClientEventListener(ILogger<ClientEventListener> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
[EventListener]
|
||||
public void OnClientConnected(IClientConnectedEvent e)
|
||||
{
|
||||
_logger.LogInformation("Client {name} > connected (language: {language}, chat mode: {chatMode})", e.Client.Name, e.Client.Language, e.Client.ChatMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -24,8 +24,8 @@ namespace Impostor.Server.Net
|
||||
private readonly GameManager _gameManager;
|
||||
private readonly ICustomMessageManager<ICustomRootMessage> _customMessageManager;
|
||||
|
||||
public Client(ILogger<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, GameManager gameManager, ICustomMessageManager<ICustomRootMessage> customMessageManager, string name, int gameVersion, IHazelConnection connection)
|
||||
: base(name, gameVersion, connection)
|
||||
public Client(ILogger<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, GameManager gameManager, ICustomMessageManager<ICustomRootMessage> customMessageManager, string name, int gameVersion, Language language, QuickChatModes chatMode, IHazelConnection connection)
|
||||
: base(name, gameVersion, language, chatMode, connection)
|
||||
{
|
||||
_logger = logger;
|
||||
_antiCheatConfig = antiCheatOptions.Value;
|
||||
|
||||
@@ -13,10 +13,12 @@ namespace Impostor.Server.Net
|
||||
{
|
||||
internal abstract class ClientBase : IClient
|
||||
{
|
||||
protected ClientBase(string name, int gameVersion, IHazelConnection connection)
|
||||
protected ClientBase(string name, int gameVersion, Language language, QuickChatModes chatMode, IHazelConnection connection)
|
||||
{
|
||||
Name = name;
|
||||
GameVersion = gameVersion;
|
||||
Language = language;
|
||||
ChatMode = chatMode;
|
||||
Connection = connection;
|
||||
Items = new ConcurrentDictionary<object, object>();
|
||||
}
|
||||
@@ -25,6 +27,10 @@ namespace Impostor.Server.Net
|
||||
|
||||
public string Name { get; }
|
||||
|
||||
public Language Language { get; }
|
||||
|
||||
public QuickChatModes ChatMode { get; }
|
||||
|
||||
public int GameVersion { get; }
|
||||
|
||||
public IHazelConnection Connection { get; }
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Impostor.Api.Innersloth;
|
||||
using Impostor.Api.Net;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
@@ -14,9 +15,9 @@ namespace Impostor.Server.Net.Factories
|
||||
_serviceProvider = serviceProvider;
|
||||
}
|
||||
|
||||
public ClientBase Create(IHazelConnection connection, string name, int clientVersion)
|
||||
public ClientBase Create(IHazelConnection connection, string name, int clientVersion, Language language, QuickChatModes chatMode)
|
||||
{
|
||||
var client = ActivatorUtilities.CreateInstance<TClient>(_serviceProvider, name, clientVersion, connection);
|
||||
var client = ActivatorUtilities.CreateInstance<TClient>(_serviceProvider, name, clientVersion, language, chatMode, connection);
|
||||
connection.Client = client;
|
||||
return client;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
using Impostor.Api.Net;
|
||||
using Impostor.Api.Innersloth;
|
||||
using Impostor.Api.Net;
|
||||
|
||||
namespace Impostor.Server.Net.Factories
|
||||
{
|
||||
internal interface IClientFactory
|
||||
{
|
||||
ClientBase Create(IHazelConnection connection, string name, int clientVersion);
|
||||
ClientBase Create(IHazelConnection connection, string name, int clientVersion, Language language, QuickChatModes chatMode);
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,7 @@ namespace Impostor.Server.Net.Inner.Objects.Components
|
||||
|
||||
public override async ValueTask<bool> HandleRpcAsync(ClientPlayer sender, ClientPlayer? target, RpcCalls call, IMessageReader reader)
|
||||
{
|
||||
if (!await ValidateOwnership(call, sender))
|
||||
if (call != RpcCalls.BootFromVent && !await ValidateOwnership(call, sender))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -46,6 +46,7 @@ namespace Impostor.Server.Net.Inner.Objects.Components
|
||||
{
|
||||
case RpcCalls.EnterVent:
|
||||
case RpcCalls.ExitVent:
|
||||
{
|
||||
if (!await ValidateImpostor(call, sender, _playerControl.PlayerInfo))
|
||||
{
|
||||
return false;
|
||||
@@ -86,6 +87,13 @@ namespace Impostor.Server.Net.Inner.Objects.Components
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case RpcCalls.BootFromVent:
|
||||
{
|
||||
Rpc34BootFromVent.Deserialize(reader, out var ventId);
|
||||
break;
|
||||
}
|
||||
|
||||
case RpcCalls.ClimbLadder:
|
||||
Rpc31ClimbLadder.Deserialize(reader, out var ladderId, out var lastClimbLadderSid);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
@@ -105,6 +105,12 @@ namespace Impostor.Server.Net.Inner.Objects.ShipStatus
|
||||
break;
|
||||
}
|
||||
|
||||
case RpcCalls.UpdateSystem:
|
||||
{
|
||||
Rpc35UpdateSystem.Deserialize(reader, Game, out var systemType, out var playerControl, out var sequenceId, out var state, out var ventId);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
return await base.HandleRpcAsync(sender, target, call, reader);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace Impostor.Server.Net.Manager
|
||||
// NOTE: when updating this array, keep the versions ordered from old to new, otherwise the version compare logic doesn't work properly
|
||||
private static readonly int[] SupportedVersions =
|
||||
{
|
||||
GameVersion.GetVersion(2021, 4, 25), // 2021.6.15
|
||||
GameVersion.GetVersion(2021, 6, 30), // 2021.6.30
|
||||
};
|
||||
|
||||
private readonly ILogger<ClientManager> _logger;
|
||||
@@ -65,7 +65,7 @@ namespace Impostor.Server.Net.Manager
|
||||
return clientId;
|
||||
}
|
||||
|
||||
public async ValueTask RegisterConnectionAsync(IHazelConnection connection, string name, int clientVersion)
|
||||
public async ValueTask RegisterConnectionAsync(IHazelConnection connection, string name, int clientVersion, Language language, QuickChatModes chatMode)
|
||||
{
|
||||
var versionCompare = CompareVersion(clientVersion);
|
||||
if (versionCompare != VersionCompareResult.Compatible)
|
||||
@@ -105,7 +105,7 @@ namespace Impostor.Server.Net.Manager
|
||||
return;
|
||||
}
|
||||
|
||||
var client = _clientFactory.Create(connection, name, clientVersion);
|
||||
var client = _clientFactory.Create(connection, name, clientVersion, language, chatMode);
|
||||
var id = NextId();
|
||||
|
||||
client.Id = id;
|
||||
|
||||
@@ -62,14 +62,14 @@ namespace Impostor.Server.Net
|
||||
private async ValueTask OnNewConnection(NewConnectionEventArgs e)
|
||||
{
|
||||
// Handshake.
|
||||
HandshakeC2S.Deserialize(e.HandshakeData, out var clientVersion, out var name, out _);
|
||||
HandshakeC2S.Deserialize(e.HandshakeData, out var clientVersion, out var name, out _, out var language, out var chatMode);
|
||||
|
||||
var connection = new HazelConnection(e.Connection, _connectionLogger);
|
||||
|
||||
await _eventManager.CallAsync(new ClientConnectionEvent(connection, e.HandshakeData));
|
||||
|
||||
// Register client
|
||||
await _clientManager.RegisterConnectionAsync(connection, name, clientVersion);
|
||||
await _clientManager.RegisterConnectionAsync(connection, name, clientVersion, language, chatMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,11 +22,13 @@ namespace Impostor.Server.Net.Redirector
|
||||
public ClientRedirector(
|
||||
string name,
|
||||
int gameVersion,
|
||||
Language language,
|
||||
QuickChatModes chatMode,
|
||||
HazelConnection connection,
|
||||
ClientManager clientManager,
|
||||
INodeProvider nodeProvider,
|
||||
INodeLocator nodeLocator)
|
||||
: base(name, gameVersion, connection)
|
||||
: base(name, gameVersion, language, chatMode, connection)
|
||||
{
|
||||
_clientManager = clientManager;
|
||||
_nodeProvider = nodeProvider;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Threading.Tasks;
|
||||
using Impostor.Api.Innersloth;
|
||||
using Impostor.Api.Net.Custom;
|
||||
using Impostor.Api.Net.Messages;
|
||||
using Impostor.Server.Config;
|
||||
@@ -17,8 +18,8 @@ namespace Impostor.Server.Recorder
|
||||
private bool _createdGame;
|
||||
private bool _recordAfter;
|
||||
|
||||
public ClientRecorder(ILogger<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, ICustomMessageManager<ICustomRootMessage> customMessageManager, GameManager gameManager, string name, int gameVersion, HazelConnection connection, PacketRecorder recorder)
|
||||
: base(logger, antiCheatOptions, clientManager, gameManager, customMessageManager, name, gameVersion, connection)
|
||||
public ClientRecorder(ILogger<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, ICustomMessageManager<ICustomRootMessage> customMessageManager, GameManager gameManager, string name, int gameVersion, Language language, QuickChatModes chatMode, HazelConnection connection, PacketRecorder recorder)
|
||||
: base(logger, antiCheatOptions, clientManager, gameManager, customMessageManager, name, gameVersion, language, chatMode, connection)
|
||||
{
|
||||
_recorder = recorder;
|
||||
_isFirst = true;
|
||||
|
||||
@@ -170,7 +170,7 @@ namespace Impostor.Tools.ServerReplay
|
||||
// Create and register connection.
|
||||
var connection = new MockHazelConnection(address);
|
||||
|
||||
await _clientManager.RegisterConnectionAsync(connection, name, gameVersion);
|
||||
await _clientManager.RegisterConnectionAsync(connection, name, gameVersion, Language.English, QuickChatModes.FreeChatOrQuickChat);
|
||||
|
||||
// Store reference for ourselfs.
|
||||
Connections.Add(clientId, connection);
|
||||
|
||||
Reference in new issue
Block a user