Beispiel #1
0
        internal C_CHECK_VERSION(Tera.Game.Messages.C_CHECK_VERSION message)
        {
            Debug.WriteLine("VERSION0 = " + message.Versions[0]);
            //            Debug.WriteLine("VERSION1 = " + message.Versions[1]);
            OpcodeDownloader.DownloadIfNotExist(message.Versions[0], Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/"));
            if (!File.Exists(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/{message.Versions[0]}.txt")) && !File.Exists(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/protocol.{message.Versions[0]}.map")) ||
                !File.Exists(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/smt_{message.Versions[0]}.txt")) && !File.Exists(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/sysmsg.{message.Versions[0]}.map")))
            {
                BasicTeraData.LogError("Unknown client version: " + message.Versions[0]);
                MessageBox.Show(LP.Unknown_client_version + message.Versions[0]);
                PacketProcessor.Instance.Exit();
                return;
            }
            var opCodeNamer = new OpCodeNamer(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/{message.Versions[0]}.txt"));
            var sysMsgNamer = new OpCodeNamer(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/smt_{message.Versions[0]}.txt"));

            TeraSniffer.Instance.Connected          = true;
            PacketProcessor.Instance.MessageFactory = new MessageFactory(opCodeNamer, PacketProcessor.Instance.Server.Region, message.Versions[0], false, sysMsgNamer);

            if (TeraSniffer.Instance.ClientProxyOverhead + TeraSniffer.Instance.ServerProxyOverhead > 0x1000)
            {
                BasicTeraData.LogError("Client Proxy overhead: " + TeraSniffer.Instance.ClientProxyOverhead + "\r\nServer Proxy overhead: " +
                                       TeraSniffer.Instance.ServerProxyOverhead);
            }
        }
Beispiel #2
0
 internal C_LOGIN_ARBITER(Tera.Game.Messages.C_LOGIN_ARBITER message)
 {
     if (OpcodeDownloader.DownloadSysmsg(PacketProcessor.Instance.MessageFactory.Version, PacketProcessor.Instance.MessageFactory.ReleaseVersion,
                                         Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/")))
     {
         PacketProcessor.Instance.MessageFactory.ReloadSysMsg();
     }
     ;
     BasicTeraData.Instance.Servers.Language = message.Language;
 }
Beispiel #3
0
 public LoginArbiterMessage(C_LOGIN_ARBITER message)
 {
     if (OpcodeDownloader.DownloadSysmsg(PacketProcessor.Factory.Version,
                                         Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/"), PacketProcessor.Factory.ReleaseVersion))
     {
         PacketProcessor.Factory.ReloadSysMsg();
     }
     ;
     BasicTeraData.Instance.Servers.Language = message.Language;
 }
Beispiel #4
0
        private static async void OnCheckVersion(C_CHECK_VERSION p)
        {
            var opcPath = Path.Combine(App.DataPath, $"opcodes/protocol.{p.Versions[0]}.map").Replace("\\", "/");

            if (!File.Exists(opcPath))
            {
                if (Sniffer is ToolboxSniffer tbs)
                {
                    if (!Directory.Exists(Path.Combine(App.DataPath, "opcodes")))
                    {
                        Directory.CreateDirectory(Path.Combine(App.DataPath, "opcodes"));
                    }
                    if (!await tbs.ControlConnection.DumpMap(opcPath, "protocol"))
                    {
                        TccMessageBox.Show(SR.UnknownClientVersion(p.Versions[0]), MessageBoxType.Error);
                        App.Close();
                        return;
                    }
                }
                else
                {
                    if (OpcodeDownloader.DownloadOpcodesIfNotExist(p.Versions[0], Path.Combine(App.DataPath, "opcodes/")))
                    {
                        return;
                    }
                    TccMessageBox.Show(SR.UnknownClientVersion(p.Versions[0]), MessageBoxType.Error);
                    App.Close();
                    return;
                }
            }

            OpCodeNamer opcNamer;

            try
            {
                opcNamer = new OpCodeNamer(opcPath);
            }
            catch (Exception ex)
            {
                switch (ex)
                {
                case OverflowException _:
                case ArgumentException _:
                    TccMessageBox.Show(SR.InvalidOpcodeFile(ex.Message), MessageBoxType.Error);
                    Log.F(ex.ToString());
                    App.Close();
                    break;
                }
                return;
            }

            Factory.Set(p.Versions[0], opcNamer);
            Sniffer.Connected = true;
        }
        internal C_CHECK_VERSION(TeraMessageReader reader) : base(reader)
        {
            Versions = new Dictionary <uint, uint>();
            var count  = reader.ReadUInt16();
            var offset = reader.ReadUInt16();

            for (var i = 1; i <= count; i++)
            {
                reader.BaseStream.Position = offset - 4;
                var pointer = reader.ReadUInt16();
                Trace.Assert(pointer == offset);//should be the same
                var nextOffset   = reader.ReadUInt16();
                var VersionKey   = reader.ReadUInt32();
                var VersionValue = reader.ReadUInt32();
                Versions.Add(VersionKey, VersionValue);
                offset = nextOffset;
            }

            Trace.WriteLine(BasicTeraData.Instance.ResourceDirectory);
            {
                if (!Directory.Exists(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/")))
                {
                    Directory.CreateDirectory(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/"));
                }

                OpcodeDownloader.DownloadIfNotExist(Versions[0], Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/"));
                if (!File.Exists(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/{Versions[0]}.txt")) && !File.Exists(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/protocol.{Versions[0]}.map")))
                {
                    Trace.Write("Unknown client version: " + Versions[0]);
                    PacketProcessor.Instance.Exit();
                    return;
                }
                var         opCodeNamer = new OpCodeNamer(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/{Versions[0]}.txt"));
                OpCodeNamer sysMsgNamer = null; //new OpCodeNamer(Path.Combine(BasicTeraData.Instance.ResourceDirectory, $"data/opcodes/smt_{Versions[0]}.txt"));
                TeraSniffer.Instance.Connected          = true;
                PacketProcessor.Instance.MessageFactory = new MessageFactory(opCodeNamer, PacketProcessor.Instance.Server.Region, Versions[0], sysMsgNamer);

                if (TeraSniffer.Instance.ClientProxyOverhead + TeraSniffer.Instance.ServerProxyOverhead > 0x1000)
                {
                    Trace.Write("Client Proxy overhead: " + TeraSniffer.Instance.ClientProxyOverhead + "\r\nServer Proxy overhead: " +
                                TeraSniffer.Instance.ServerProxyOverhead);
                }
                Trace.WriteLine("protocol version = " + Versions[0]);
            }
            //Trace.WriteLine(Versions.Aggregate(new StringBuilder(), (sb, x) => sb.Append(x.Key + " - " + x.Value + " | "), sb => sb.ToString(0, sb.Length - 1)));
        }
Beispiel #6
0
        private static async void OnLoginArbiter(C_LOGIN_ARBITER p)
        {
            var rvSysMsgPath = Path.Combine(App.DataPath, $"opcodes/sysmsg.{Factory.ReleaseVersion / 100}.map");
            var pvSysMsgPath = Path.Combine(App.DataPath, $"opcodes/sysmsg.{Factory.Version}.map");

            var path = File.Exists(rvSysMsgPath)
                       ? rvSysMsgPath
                       : File.Exists(pvSysMsgPath)
                           ? pvSysMsgPath
                           : "";

            if (path == "")
            {
                var destPath = pvSysMsgPath.Replace("\\", "/");


                if (Sniffer.Connected && Sniffer is ToolboxSniffer tbs)
                {
                    if (await tbs.ControlConnection.DumpMap(destPath, "sysmsg"))
                    {
                        Factory.SystemMessageNamer = new OpCodeNamer(destPath);
                        return;
                    }
                }
                else
                {
                    if (OpcodeDownloader.DownloadSysmsgIfNotExist(Factory.Version, Path.Combine(App.DataPath, "opcodes/"), Factory.ReleaseVersion))
                    {
                        Factory.SystemMessageNamer = new OpCodeNamer(destPath);
                        return;
                    }
                }

                TccMessageBox.Show(SR.InvalidSysMsgFile(Factory.ReleaseVersion / 100, Factory.Version), MessageBoxType.Error);
                App.Close();
                return;
            }
            Factory.ReloadSysMsg(path);
        }