public static bool Prefix(InnerNetClient __instance, [HarmonyArgument(0)] MessageReader reader) { // If i am host, respond to handshake if (__instance.AmHost && reader.BytesRemaining > 3) { var handshakeReader = MessageReader.Get(reader).ReadMessageAsNewBuffer(); if (handshakeReader.Tag == TOU_ROOT_HANDSHAKE_TAG) { PluginSingleton <TownOfUs> .Instance.Log.LogMessage($"InnerNetClient.HandleMessage.Prefix - Host recieved TOU handshake"); var clientId = handshakeReader.ReadInt32(); var touVersion = handshakeReader.ReadString(); // List<int> HandshakedClients - exists to disconnect legacy clients that don't send handshake PluginSingleton <TownOfUs> .Instance.Log.LogMessage($"InnerNetClient.HandleMessage.Prefix - Adding {clientId} with TOU version {touVersion} to List<int>HandshakedClients"); HandshakedClients.Add(clientId); if (!TownOfUs.GetVersion().Equals(touVersion)) { PluginSingleton <TownOfUs> .Instance.Log.LogMessage($"InnerNetClient.HandleMessage.Prefix - ClientId {clientId} has mismatched TOU version {touVersion}. (Ours is {TownOfUs.GetVersion()})"); __instance.SendCustomDisconnect(clientId); } return(false); } } return(true); }
private static void SendCustomDisconnect(this InnerNetClient innerNetClient, int clientId) { var messageWriter = MessageWriter.Get(SendOption.Reliable); messageWriter.StartMessage(11); messageWriter.Write(innerNetClient.GameId); messageWriter.WritePacked(clientId); messageWriter.Write(false); messageWriter.Write(8); messageWriter.Write($"The host has a different version of Town Of Us ({TownOfUs.GetVersion()})"); messageWriter.EndMessage(); innerNetClient.SendOrDisconnect(messageWriter); messageWriter.Recycle(); }
private static HatBehaviour CreateHat(string name) { System.Console.WriteLine($"Creating Hat {name}"); var sprite = TownOfUs.CreateSprite($"TownOfUs.Resources.Hats.{name}.png", true); var newHat = ScriptableObject.CreateInstance <HatBehaviour>(); newHat.MainImage = sprite; newHat.ProductId = name; newHat.Order = -1; newHat.InFront = true; newHat.NoBounce = false; return(newHat); }
private static HatBehaviour CreateHat(HatData hat, int id) { System.Console.WriteLine($"Creating Hat {hat.name}"); var sprite = TownOfUs.CreateSprite($"TownOfUs.Resources.Hats.hat_{hat.name}.png", true); var newHat = ScriptableObject.CreateInstance <HatBehaviour>(); newHat.MainImage = sprite; newHat.ProductId = hat.name; newHat.Order = 99 + id; newHat.InFront = true; newHat.NoBounce = !hat.bounce; newHat.ChipOffset = hat.offset; return(newHat); }
private static HatBehaviour GenerateHatBehaviour(byte[] mainImg) { //TODO: Move to Graphics Utils class var tex2D = new Texture2D(1, 1, TextureFormat.ARGB32, false); TownOfUs.LoadImage(tex2D, mainImg, false); var sprite = Sprite.Create(tex2D, new Rect(0.0f, 0.0f, tex2D.width, tex2D.height), new Vector2(0.5f, 0.5f), 100); var hat = ScriptableObject.CreateInstance <HatBehaviour>(); hat.MainImage = sprite; hat.ChipOffset = new Vector2(-0.1f, 0.35f); hat.InFront = true; hat.NoBounce = true; return(hat); }
public static void Postfix(AmongUsClient __instance) { if (AmongUsClient.Instance.AmHost) { return; } // If I am client, send handshake PluginSingleton <TownOfUs> .Instance.Log.LogMessage($"AmongUsClient.OnGameJoined.Postfix - Am client, sending handshake"); var messageWriter = MessageWriter.Get(SendOption.Reliable); messageWriter.StartMessage(6); messageWriter.Write(__instance.GameId); messageWriter.WritePacked(__instance.HostId); messageWriter.StartMessage(TOU_ROOT_HANDSHAKE_TAG); messageWriter.Write(AmongUsClient.Instance.ClientId); messageWriter.Write(TownOfUs.GetVersion()); messageWriter.EndMessage(); messageWriter.EndMessage(); __instance.SendOrDisconnect(messageWriter); messageWriter.Recycle(); }