示例#1
0
        public Form1()
        {
            Form = this;

            InitializeComponent();

            _upnp            = new UPnPWrapper();
            _upnp.Available += UpnpOnAvailable;
            if (_upnp.UPnPAvailable)
            {
                UpnpOnAvailable(_upnp, EventArgs.Empty);
            }
            _upnp.Initialize();

            //if Patches does not exist, make it!
            Directory.CreateDirectory(PATCHES_DIR);
            string[] fileEntries = Directory.GetFiles(PATCHES_DIR);

            foreach (var file in fileEntries)
            {
                string fileName           = Path.GetFileName(file); //file is the full path of the file, fileName is only the file's name (with extension)
                string ressourcesParallel = RESSOURCES_DIR + fileName;
                byte[] buffer             = File.ReadAllBytes(file);

                //this version allows overwriting existing files in Ressources. Not uncommenting just in case this method is unfavored.
                //File.Copy(file, ressourcesParallel, true);

                if (File.Exists(ressourcesParallel))
                {
                    File.Delete(ressourcesParallel);
                }

                for (int i = 0; i < buffer.Length; i += 4)
                {
                    byte[] newBuffer = buffer.Skip(i).Take(4).ToArray();
                    newBuffer = newBuffer.Reverse().ToArray();
                    using (var fs = new FileStream(ressourcesParallel, FileMode.OpenOrCreate, FileAccess.Write))
                    {
                        fs.Seek(i, SeekOrigin.Current);
                        fs.Write(newBuffer, 0, newBuffer.Length);
                    }
                }
            }

            //moving this outside so we don't read the bans file for every file in the patches directory!
            if (File.Exists(BANDS_FILE))
            {
                foreach (var line in File.ReadAllLines(BANDS_FILE))
                {
                    _bands += line + " ";
                }
            }

            // TODO: Change this according to OS
            _memory = new WindowsEmulatorAccessor();

            this.Text = "Net64 Tool v" + Form1.MAJOR_VERSION + "." + Form1.MINOR_VERSION + " Hotfix";
        }
示例#2
0
        public ServerConnection(string address, string port, IEmulatorAccessor memory, Form1 gui)
        {
            _ws            = new WebSocket("ws://" + address + ":" + port);
            _gui           = gui;
            _memory        = memory;
            _ws.OnMessage += (sender, e) =>
            {
                onMessage(e);
            };
            _ws.OnOpen += (sender, e) =>
            {
                //Console.WriteLine("Connected");
                _gui.AddChatMessage("[SERVER]", "Connected");

                byte[] payload = new byte[Form1.HANDSHAKE_LENGTH];
                payload[0] = (byte)PacketType.Handshake;
                payload[1] = (byte)Form1.COMPAT_MAJOR_VERSION;
                payload[2] = (byte)Form1.COMPAT_MINOR_VERSION;
                payload[3] = (byte)_gui.GetCharacter();

                string username = _gui.GetUsername();

                if (string.IsNullOrWhiteSpace(username))
                {
                    username = getRandomUsername();
                    _gui.SetUsername(username);
                }

                byte[] usernameBytes = Encoding.ASCII.GetBytes(username);
                int    len           = usernameBytes.Length;
                if (len > 24) // Arbitrary max length
                {
                    len = 24;
                }

                payload[4] = (byte)len;
                Array.Copy(usernameBytes, 0, payload, 5, len);
                _ws.Send(payload);
                SetMessage("connected");
            };
            _ws.OnError += (sender, e) =>
            {
                MessageBox.Show(null, e.Message + "\n\n" + e.Exception, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            };
            _ws.OnClose += (sender, e) =>
            {
                _memory.WriteMemory(0x365FFC, new byte[1], 1);
                _gui.AddChatMessage("[SERVER]", "Disconnected");
                SetMessage("disconnected");
                MessageBox.Show(null, "Server closed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            };
            _ws.Connect();
        }
示例#3
0
 public static void setCharacter(string character, IEmulatorAccessor mem)
 {
     if (character == "Mario")
     {
         //int bytesWritten = 0;
         mem.WriteMemory(0x365FF3, new byte[] { 0x01 }, 1);
     }
     if (character == "Luigi")
     {
         //int bytesWritten = 0;
         mem.WriteMemory(0x365FF3, new byte[] { 0x02 }, 1);
     }
     if (character == "Yoshi")
     {
         //int bytesWritten = 0;
         mem.WriteMemory(0x365FF3, new byte[] { 0x03 }, 1);
     }
     if (character == "Wario")
     {
         //int bytesWritten = 0;
         mem.WriteMemory(0x365FF3, new byte[] { 0x04 }, 1);
     }
     if (character == "Peach")
     {
         //int bytesWritten = 0;
         mem.WriteMemory(0x365FF3, new byte[] { 0x05 }, 1);
     }
     if (character == "Toad")
     {
         //int bytesWritten = 0;
         mem.WriteMemory(0x365FF3, new byte[] { 0x06 }, 1);
     }
     if (character == "Waluigi")
     {
         //int bytesWritten = 0;
         mem.WriteMemory(0x365FF3, new byte[] { 0x07 }, 1);
     }
     if (character == "Rosalina")
     {
         //int bytesWritten = 0;
         mem.WriteMemory(0x365FF3, new byte[] { 0x08 }, 1);
     }
 }
示例#4
0
        public static void setMessage(string msg, IEmulatorAccessor mem)
        {
            //int bytesWritten = 0;
            byte[] buffer = Encoding.ASCII.GetBytes(msg.Where(isPrintable).ToArray());

            byte[] newArray = new byte[buffer.Length + 4];
            buffer.CopyTo(newArray, 0);

            for (int i = 0; i < newArray.Length; i += 4)
            {
                byte[] newBuffer = newArray.Skip(i).Take(4).ToArray();
                newBuffer = newBuffer.Reverse().ToArray();
                mem.WriteMemory(0x367684 + i, newBuffer, newBuffer.Length);
            }

            byte[] overWriteBuffer = new byte[] { 0x00, 0x00, 0x00, 0x00 };
            //overWriteBuffer = overWriteBuffer.Reverse().ToArray();
            mem.WriteMemory(0x367680, overWriteBuffer, overWriteBuffer.Length);
        }
示例#5
0
 public static void setCharacterAll(int character, IEmulatorAccessor mem)
 {
     mem.WriteMemory(0x365FF3, new byte[] { (byte)character }, 1);
 }