public void CopySubMessage() { const byte Test1 = 12; const byte Test2 = 146; var msg = new MessageWriter(2048); msg.StartMessage(1); msg.StartMessage(2); msg.Write(Test1); msg.Write(Test2); msg.EndMessage(); msg.EndMessage(); var readerPool = CreateReaderPool(); var handleReader = readerPool.Get(); handleReader.Update(msg.Buffer); var handleMessage = handleReader.ReadMessage(); Assert.Equal(1, handleMessage.Tag); using var parentReader = handleMessage.Copy(); Assert.Equal(1, parentReader.Tag); var reader = parentReader.ReadMessage(); Assert.Equal(2, reader.Tag); Assert.Equal(Test1, reader.ReadByte()); Assert.Equal(Test2, reader.ReadByte()); }
public void ReadMessageLength() { var msg = new MessageWriter(2048); msg.StartMessage(1); msg.Write(65534); msg.StartMessage(2); msg.Write("HO"); msg.EndMessage(); msg.StartMessage(2); msg.Write("NO"); msg.EndMessage(); msg.EndMessage(); Assert.AreEqual(msg.Length, msg.Position); MessageReader reader = MessageReader.Get(msg.Buffer, 0); Assert.AreEqual(1, reader.Tag); Assert.AreEqual(65534, reader.ReadInt32()); // Content var sub = reader.ReadMessage(); Assert.AreEqual(3, sub.Length); Assert.AreEqual(2, sub.Tag); Assert.AreEqual("HO", sub.ReadString()); sub = reader.ReadMessage(); Assert.AreEqual(3, sub.Length); Assert.AreEqual(2, sub.Tag); Assert.AreEqual("NO", sub.ReadString()); }
public static void Serialize(MessageWriter writer, IEnumerable <Game> games) { writer.StartMessage(MessageFlags.GetGameListV2); // Count writer.StartMessage(1); writer.Write(123); // The Skeld writer.Write(456); // Mira HQ writer.Write(789); // Polus writer.EndMessage(); // Listing writer.StartMessage(0); foreach (var game in games) { writer.StartMessage(0); writer.Write(game.PublicIp.Address.GetAddressBytes()); writer.Write((ushort)game.PublicIp.Port); writer.Write(game.Code); writer.Write(game.Host.Client.Name); writer.Write((byte)game.PlayerCount); writer.WritePacked(1); // TODO: What does Age do? writer.Write((byte)game.Options.MapId); writer.Write((byte)game.Options.NumImpostors); writer.Write((byte)game.Options.MaxPlayers); writer.EndMessage(); } writer.EndMessage(); writer.EndMessage(); }
public static void Postfix(Il2CppReferenceArray <GameData.Nested_1> FMAOEJEHPAO) { if (!Jester.jesterEnabled) { return; } Jester.introDone = false; PlayerController.InitPlayers(); List <Player> crewmates = getCrewMates(FMAOEJEHPAO); var jesterid = new System.Random().Next(0, crewmates.Count); Player jester = crewmates[jesterid]; MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SetJester, Hazel.SendOption.Reliable); writer.Write(jester.playerdata.PlayerId); writer.EndMessage(); jester.components.Add("Jester"); Jester.localPlayers.Clear(); Jester.localPlayer = PlayerControl.LocalPlayer; foreach (var player in PlayerControl.AllPlayerControls) { Jester.localPlayers.Add(player); } writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SetLocalPlayersJester, Hazel.SendOption.Reliable); writer.WriteBytesAndSize(Jester.localPlayers.Select(player => player.PlayerId).ToArray()); writer.EndMessage(); }
public void CopyMessage() { var readerPool = CreateReaderPool(); // Create message. const int msgLength = 18; const byte Test1 = 12; const byte Test2 = 146; var msg = new MessageWriter(2048); msg.StartMessage(1); msg.StartMessage(2); msg.Write(Test1); msg.Write(Test2); msg.StartMessage(2); msg.Write(Test1); msg.Write(Test2); msg.StartMessage(2); msg.Write(Test1); msg.Write(Test2); msg.EndMessage(); msg.EndMessage(); msg.EndMessage(); msg.EndMessage(); // Read message. using var reader = readerPool.Get(); reader.Update(msg.Buffer); // Read first message. using var messageOne = reader.ReadMessage(); Assert.Equal(1, messageOne.Tag); Assert.Equal(0, messageOne.Position); Assert.Equal(3, messageOne.Offset); Assert.Equal(msgLength - 3, messageOne.Length); using var messageTwo = messageOne.ReadMessage(); Assert.Equal(2, messageTwo.Tag); Assert.Equal(0, messageTwo.Position); Assert.Equal(6, messageTwo.Offset); Assert.Equal(msgLength - 6, messageTwo.Length); Assert.Equal(Test1, messageTwo.ReadByte()); Assert.Equal(Test2, messageTwo.ReadByte()); using var messageThree = messageTwo.ReadMessage(); Assert.Equal(2, messageThree.Tag); Assert.Equal(0, messageThree.Position); Assert.Equal(11, messageThree.Offset); Assert.Equal(msgLength - 11, messageThree.Length); Assert.Equal(Test1, messageThree.ReadByte()); Assert.Equal(Test2, messageThree.ReadByte()); }
public static bool Prefix(Vent __instance) { bool flag; bool flag2; __instance.CanUse(PlayerControl.LocalPlayer.PPMOEEPBHJO, out flag, out flag2); if (!flag) { return(true); // Continue with default method } bool isEnter = !PlayerControl.LocalPlayer.inVent; if (isEnter) { localVentEnterTimePoint = DateTime.UtcNow; } if (!__instance.name.StartsWith("JackInTheBoxVent_")) { return(true); // Continue with default method } __instance.SetButtons(isEnter); MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.UseUncheckedVent, Hazel.SendOption.Reliable); writer.WritePacked(__instance.Id); writer.Write(PlayerControl.LocalPlayer.PlayerId); writer.Write(isEnter ? byte.MaxValue : (byte)0); writer.EndMessage(); RPCProcedure.useUncheckedVent(__instance.Id, PlayerControl.LocalPlayer.PlayerId, isEnter ? byte.MaxValue : (byte)0); return(false); }
public static void Postfix(Il2CppReferenceArray <PlayerInfo> BHNEINNHPIJ) { Metamorphosis.Logger.LogDebug($"RcpSetInfected postfix start"); InitMetamorphs(); List <byte> infectedIds = new List <byte>(); List <PlayerControl> infected = GetInfected(BHNEINNHPIJ, ref infectedIds); foreach (PlayerControl playerControl in infected) { Metamorph metamorph = new Metamorph(playerControl); Metamorphs.Add(metamorph); Metamorphosis.Logger.LogDebug($"RcpSetInfected postfix: {metamorph.PlayerId} added"); if (playerControl.PlayerId == PlayerControl.LocalPlayer.PlayerId) { Metamorphosis.Logger.LogDebug($"RcpSetInfected postfix: Metamorph is a local player {metamorph.PlayerId}"); Metamorph.LocalMetamorph = metamorph; if (HudManagerPatch.MorphButton != null) { HudManagerPatch.MorphButton.StartCooldown(CustomGameOptions.MorphCooldown + 9.0f); HudManagerPatch.MorphButton.EffectDuration = CustomGameOptions.MorphDuration; HudManagerPatch.MorphButton.CooldownDuration = CustomGameOptions.MorphCooldown; } } } MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SetMetamorphs, Hazel.SendOption.Reliable); writer.WriteBytesAndSize(infectedIds.ToArray()); writer.EndMessage(); Metamorphosis.Logger.LogDebug("RcpSetInfected postfix"); }
static bool Prefix(PlayerPhysics __instance) { ModdedPlayerClass moddedController = Main.Instance.ModdedPlayerById(__instance.myPlayer.PlayerId); if (__instance.myPlayer != PlayerControl.LocalPlayer || moddedController?.Role?.RoleName != "Bellatrix" || ((Bellatrix)moddedController.Role).MindControlledPlayer == null) { return(true); } PlayerPhysics controlledPlayer = ((Bellatrix)moddedController.Role).MindControlledPlayer._Object.MyPhysics; GameData.PlayerInfo data = moddedController._Object.Data; bool flag = data != null && data.IsDead; Vector2 vel = HudManager.Instance.joystick.Delta * __instance.TrueSpeed; controlledPlayer.body.velocity = vel; MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)Packets.MoveControlledPlayer, Hazel.SendOption.Reliable); writer.Write(controlledPlayer.myPlayer.PlayerId); writer.Write(vel.x); writer.Write(vel.y); writer.EndMessage(); return(false); }
public void RpcDestroyCrucio() { DestroyCrucio(); MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)Packets.DestroyCrucio, SendOption.Reliable); writer.EndMessage(); }
public override void Use() { System.Console.WriteLine("Used Deluminator"); this.Delete(); switch (Main.Instance.IsLightsSabotaged()) { case true: var switchSystem = ShipStatus.Instance.Systems[SystemTypes.Electrical].Cast <SwitchSystem>(); switchSystem.ActualSwitches = switchSystem.ExpectedSwitches; MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)Packets.FixLightsRpc, SendOption.Reliable); writer.EndMessage(); break; case false: byte b = 4; for (var i = 0; i < 5; i++) { if (new System.Random().Next(0, 2) == 0) { b |= (byte)(1 << i); } } ShipStatus.Instance.RpcRepairSystem(SystemTypes.Electrical, b | 128); break; } }
public void Setup() { var message = new MessageWriter(1024); message.StartMessage(1); message.Write((ushort)3100); message.Write((byte)100); message.Write((int)int.MaxValue); message.WritePacked(int.MaxValue); message.EndMessage(); _data = message.ToByteArray(true); MessageReader_Bytes_Pooled.Return(MessageReader_Bytes_Pooled.Get(_data)); // Services var services = new ServiceCollection(); services.AddSingleton <ObjectPoolProvider>(new DefaultObjectPoolProvider()); services.AddSingleton(serviceProvider => { var provider = serviceProvider.GetRequiredService <ObjectPoolProvider>(); var policy = new MessageReader_Bytes_Pooled_ImprovedPolicy(serviceProvider); return(provider.Create(policy)); }); _pool = services .BuildServiceProvider() .GetRequiredService <ObjectPool <MessageReader_Bytes_Pooled_Improved> >(); }
public void ReadProperInt() { const int Test1 = int.MaxValue; const int Test2 = int.MinValue; var msg = new MessageWriter(128); msg.StartMessage(1); msg.Write(Test1); msg.Write(Test2); msg.EndMessage(); Assert.Equal(11, msg.Length); Assert.Equal(msg.Length, msg.Position); var readerPool = CreateReaderPool(); var reader = readerPool.Get(); reader.Update(msg.Buffer); Assert.Equal(byte.MaxValue, reader.Tag); var message = reader.ReadMessage(); Assert.Equal(1, message.Tag); Assert.Equal(Test1, message.ReadInt32()); Assert.Equal(Test2, message.ReadInt32()); }
static bool Prefix(MeetingHud __instance) { if (__instance.DHCOPOOJCLN.All((PlayerVoteArea ps) => ps.isDead || ps.didVote)) { byte[] self = calculateVotes(__instance); bool tie; int maxIdx = IndexOfMax(self, (byte p) => (int)p, out tie) - 1; GameData.OFKOJOKOOAK exiled = null; foreach (GameData.OFKOJOKOOAK pi in GameData.Instance.AllPlayers) { if (pi.GMBAIPNOKLP == maxIdx) { exiled = pi; break; } } byte[] array = new byte[10]; for (int i = 0; i < __instance.DHCOPOOJCLN.Length; i++) { PlayerVoteArea playerVoteArea = __instance.DHCOPOOJCLN[i]; array[(int)playerVoteArea.HMPHKKGPLAG] = playerVoteArea.GetState(); } // RPCVotingComplete if (AmongUsClient.Instance.HNMILJEOEKN) { __instance.MJIJGEBBMAO(array, exiled, tie); } MessageWriter messageWriter = AmongUsClient.Instance.StartRpc(__instance.NetId, 23, Hazel.SendOption.Reliable); messageWriter.WriteBytesAndSize(array); messageWriter.Write((exiled != null) ? exiled.GMBAIPNOKLP : byte.MaxValue); messageWriter.Write(tie); messageWriter.EndMessage(); } return(false); }
/// <summary> /// Writes a join game request to the specified message writer. /// </summary> private void JoinGame(MessageWriter writer) { writer.StartMessage((byte)MMTags.JoinGame); writer.Write(_lobbyCode); writer.WritePacked(0x7); // map ownership flags writer.EndMessage(); }
public void ReadProperString() { const string Test1 = "Hello"; string Test2 = new string(' ', 1024); var msg = new MessageWriter(2048); msg.StartMessage(1); msg.Write(Test1); msg.Write(Test2); msg.Write(string.Empty); msg.EndMessage(); Assert.Equal(msg.Length, msg.Position); var readerPool = CreateReaderPool(); var reader = readerPool.Get(); reader.Update(msg.Buffer); Assert.Equal(byte.MaxValue, reader.Tag); var message = reader.ReadMessage(); Assert.Equal(1, message.Tag); Assert.Equal(Test1, message.ReadString()); Assert.Equal(Test2, message.ReadString()); Assert.Equal(string.Empty, message.ReadString()); }
public static bool Prefix(MeetingHud __instance) { if (!__instance.playerStates.All(ps => ps.isDead || ps.didVote)) { return(false); } byte[] self = calculateVotes(__instance.playerStates); int maxIdx = indexOfMax(self, out bool tie) - 1; GameData.PlayerInfo exiled = GameData.Instance.GetPlayerById((byte)maxIdx); byte[] states = __instance.playerStates.Select(s => s.GetState()).ToArray(); byte[] votes = __instance.playerStates.Select(s => (byte)s.votedFor).ToArray(); if (AmongUsClient.Instance.AmHost) { MessageWriter messageWriter = AmongUsClient.Instance.StartRpc(__instance.NetId, 23, SendOption.Reliable); messageWriter.WriteBytesAndSize(states); messageWriter.WriteBytesAndSize(votes); //Added because of the state's 4 bit vote id limit messageWriter.Write(exiled?.PlayerId ?? byte.MaxValue); messageWriter.Write(tie); messageWriter.EndMessage(); } MeetingHudHandleRpcPatch.VotingComplete(__instance, states, votes, exiled, tie); return(false); }
public MessageWriter Write() { _writer.StartMessage((byte)_flag); WriteMessage(_writer); _writer.EndMessage(); return(_writer); }
public static void RpcSetModActive(bool active) { MessageWriter messageWriter = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)CustomRpc.SetModActive, SendOption.Reliable); messageWriter.Write(active); messageWriter.EndMessage(); }
public void ReadProperBool() { const bool Test1 = true; const bool Test2 = false; var msg = new MessageWriter(128); msg.StartMessage(1); msg.Write(Test1); msg.Write(Test2); msg.EndMessage(); Assert.Equal(5, msg.Length); Assert.Equal(msg.Length, msg.Position); var readerPool = CreateReaderPool(); var reader = readerPool.Get(); reader.Update(msg.Buffer); Assert.Equal(byte.MaxValue, reader.Tag); var message = reader.ReadMessage(); Assert.Equal(1, message.Tag); Assert.Equal(Test1, message.ReadBoolean()); Assert.Equal(Test2, message.ReadBoolean()); }
public void RpcDefensiveDuelist(PlayerControl player) { DefensiveDuelist(player); MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)Packets.DefensiveDuelist, SendOption.Reliable); writer.Write(player.PlayerId); writer.EndMessage(); }
public static void RpcHostSetSkin(byte playerId, uint skinId) { MessageWriter messageWriter = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)CustomRpc.HostSetSkin, SendOption.Reliable); messageWriter.WritePacked(playerId); messageWriter.WritePacked(skinId); messageWriter.EndMessage(); }
public void RpcCrucioBlind(PlayerControl target) { CrucioBlind(target); MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)Packets.DeactivatePlayer, SendOption.Reliable); writer.Write(target.PlayerId); writer.EndMessage(); }
public void RpcInvisPlayer(PlayerControl target) { InvisPlayer(target); MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)Packets.InvisPlayer, SendOption.Reliable); writer.Write(target.PlayerId); writer.EndMessage(); }
public void RpcControlPlayer(PlayerControl controller, PlayerControl target) { ControlPlayer(controller, target); MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)Packets.StartControlling, SendOption.Reliable); writer.Write(controller.PlayerId); writer.Write(target.PlayerId); writer.EndMessage(); }
public static void Serialize(MessageWriter writer, string serverName, string serverVersion, int pluginCount) { writer.StartMessage(byte.MaxValue); writer.Write((byte)ReactorMessageFlags.Handshake); writer.Write(serverName); writer.Write(serverVersion); writer.WritePacked(pluginCount); writer.EndMessage(); }
public void RpcForceAllVotes(sbyte playerId) { GetLocalModdedPlayer().Inventory.Find(x => x.Id == 3).Delete(); ForceAllVotes(playerId); MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)Packets.ForceAllVotes, SendOption.Reliable); writer.Write(playerId); writer.EndMessage(); }
public static void Postfix(GameOptionsData OMFKMPLOPPM) { if (PlayerControl.AllPlayerControls.Count > 1) { MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SyncCustomSettingsJester, Hazel.SendOption.Reliable); writer.Write(Jester.jesterEnabled); writer.EndMessage(); } }
public static void Postfix(Il2CppReferenceArray <GameData.LGBOMGHJELL> BHNEINNHPIJ) { PlayerController.InitPlayers(); CustomGameObjectManager.deleteAll(); EndGameManagerPatch.LoveCoupleWins = false; List <Player> crewmates = getCrewMates(BHNEINNHPIJ); int lover1idx = (byte)new System.Random().Next(0, crewmates.Count); int lover2idx = (byte)new System.Random().Next(0, crewmates.Count); if (lover1idx == lover2idx) { lover2idx = (lover2idx + 1) % crewmates.Count; } Player[] impostors = PlayerController.getImpostors(); byte r = (byte)new System.Random().Next(0, 3); if (r == 0) { lover2idx = (byte)new System.Random().Next(0, impostors.Length); } Player lover1 = crewmates[lover1idx]; Player lover2 = crewmates[lover2idx]; if (r == 0) { lover2 = impostors[lover2idx]; } MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SetCouple, Hazel.SendOption.Reliable); writer.Write(lover1.playerdata.PlayerId); writer.Write(lover2.playerdata.PlayerId); writer.Write(r); writer.EndMessage(); lover1.components.Add(new Love(lover1, lover2)); lover2.components.Add(new Love(lover2, lover1)); HudManagerPatch.LoadSprites(); var localplayer = PlayerController.getLocalPlayer(); if (lover1 == localplayer | lover2 == localplayer) { CustomGameObjectManager.AddObject(new Heart(lover1.playerdata.nameText)); CustomGameObjectManager.AddObject(new Heart(lover2.playerdata.nameText)); } }
public void RpcKillPlayer(PlayerControl killer, PlayerControl target, bool isCurseKill = true) { KillPlayer(killer, target, isCurseKill); MessageWriter writer = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte)Packets.KillPlayerUnsafe, SendOption.Reliable); writer.Write(killer.PlayerId); writer.Write(target.PlayerId); writer.Write(isCurseKill); writer.EndMessage(); }
public static void Postfix(CEIOGGEDKAN DJGAEEMDIDF) { if (PlayerControl.AllPlayerControls.Count > 1) { MessageWriter writer = AmongUsClient.Instance.StartRpc(InnerPlayerControl.LocalPlayer.NetId, (byte)CustomRPC.SyncCustomSettings, Hazel.SendOption.Reliable); writer.Write(CustomGameOptions.BothLoversDie); writer.EndMessage(); } }