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); } }
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; }
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; }
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))); }
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); }