From: js6pak Date: Sun, 7 Mar 2021 15:40:33 +0000 (+0100) Subject: Implement GameData 205 X-Git-Tag: v1.3.0~13^2~1 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=0901be56f509e1b89aed43dbaebb8c81d8a1517e;p=rhonda%2Fimpostor.git Implement GameData 205 --- diff --git a/src/Impostor.Api/Unity/RuntimePlatform.cs b/src/Impostor.Api/Unity/RuntimePlatform.cs new file mode 100644 index 0000000..6951ca2 --- /dev/null +++ b/src/Impostor.Api/Unity/RuntimePlatform.cs @@ -0,0 +1,42 @@ +namespace Impostor.Api.Unity +{ + public enum RuntimePlatform + { + OSXEditor = 0, + OSXPlayer = 1, + WindowsPlayer = 2, + OSXWebPlayer = 3, + OSXDashboardPlayer = 4, + WindowsWebPlayer = 5, + WindowsEditor = 7, + IPhonePlayer = 8, + PS3 = 9, + XBOX360 = 10, + Android = 11, + NaCl = 12, + LinuxPlayer = 13, + FlashPlayer = 15, + LinuxEditor = 16, + WebGLPlayer = 17, + MetroPlayerX86 = 18, + WSAPlayerX86 = 18, + MetroPlayerX64 = 19, + WSAPlayerX64 = 19, + MetroPlayerARM = 20, + WSAPlayerARM = 20, + WP8Player = 21, + BlackBerryPlayer = 22, + TizenPlayer = 23, + PSP2 = 24, + PS4 = 25, + PSM = 26, + XboxOne = 27, + SamsungTVPlayer = 28, + WiiU = 30, + TvOs = 31, + Switch = 32, + Lumin = 33, + Stadia = 34, + CloudRendering = 35, + } +} diff --git a/src/Impostor.Server/Net/Inner/GameDataTag.cs b/src/Impostor.Server/Net/Inner/GameDataTag.cs index fa9ddb8..818f11f 100644 --- a/src/Impostor.Server/Net/Inner/GameDataTag.cs +++ b/src/Impostor.Server/Net/Inner/GameDataTag.cs @@ -9,5 +9,6 @@ public const byte SceneChangeFlag = 6; public const byte ReadyFlag = 7; public const byte ChangeSettingsFlag = 8; + public const byte ClientInfoFlag = 205; } -} \ No newline at end of file +} diff --git a/src/Impostor.Server/Net/State/ClientPlayer.cs b/src/Impostor.Server/Net/State/ClientPlayer.cs index 107edbf..ceb73b4 100644 --- a/src/Impostor.Server/Net/State/ClientPlayer.cs +++ b/src/Impostor.Server/Net/State/ClientPlayer.cs @@ -3,6 +3,7 @@ using System.Threading; using System.Threading.Tasks; using Impostor.Api.Net; using Impostor.Api.Net.Inner; +using Impostor.Api.Unity; using Impostor.Server.Net.Inner.Objects; using Microsoft.Extensions.Logging; @@ -36,6 +37,8 @@ namespace Impostor.Server.Net.State public string Scene { get; internal set; } + public RuntimePlatform? Platform { get; internal set; } + public void InitializeSpawnTimeout() { _spawnTimeout.Change(Constants.SpawnTimeout, -1); diff --git a/src/Impostor.Server/Net/State/Game.Data.cs b/src/Impostor.Server/Net/State/Game.Data.cs index eda8986..a2eaa09 100644 --- a/src/Impostor.Server/Net/State/Game.Data.cs +++ b/src/Impostor.Server/Net/State/Game.Data.cs @@ -7,6 +7,7 @@ using Impostor.Api.Innersloth; using Impostor.Api.Net.Inner; using Impostor.Api.Net.Messages; using Impostor.Api.Net.Messages.S2C; +using Impostor.Api.Unity; using Impostor.Hazel; using Impostor.Server.Events.Meeting; using Impostor.Server.Events.Player; @@ -357,10 +358,21 @@ namespace Impostor.Server.Net.State break; } - case 205: - case 206: + case GameDataTag.ClientInfoFlag: { - // TODO figure out what the hell is going on here + var clientId = reader.ReadPackedInt32(); + var platform = (RuntimePlatform)reader.ReadPackedInt32(); + + if (clientId != sender.Client.Id) + { + if (await sender.Client.ReportCheatAsync(new CheatContext(nameof(GameDataTag.ClientInfoFlag)), "Client sent info with wrong client id")) + { + return false; + } + } + + sender.Platform = platform; + break; }