Давно не играл на 1.3.6, но если не ошибаюсь надо или выйти сразу после свадьбы и не заходить 30 мин или не выходить из игры 30 мин паре персов, решение со стороны игрока, лучше бы взял какую то 1.4.+ и срезал то что не нравится. Я сам с 1.3.6 не возился
На самом деле фикс есть, но это отлов пакетов на сколько я помню или чтения лога, и отправка пакета на сервак, таким еще Арх занимался, и где то у меня даже валялся этот костыль. --- добавлено: 8 июл 2017 в 13:11 --- Вот, держи, я думаю уже некто не будет против. 代码: using System; using System.Net.Sockets; using System.Runtime.CompilerServices; using System.Threading; namespace coord { class Program { public static void Sender(byte[] send, out byte[] recivd, out int bytescount_out, out int bytescount_in, out int errcode) { string str = "127.0.0.1"; int i = 29400; errcode = 0; byte[] bs = new byte[20000]; TcpClient tcpClient = new TcpClient(); Console.WriteLine("\r\nConnecting to server..."); try { tcpClient.Connect(str, i); } catch { Console.WriteLine(String.Concat(new object[] { "Cannot connect to remote host: ", str, " port:", i })); Console.WriteLine("Press \'Enter\'..."); Console.ReadLine(); tcpClient.Close(); errcode = 1; } Socket socket = tcpClient.Client; socket.Send(send); bytescount_out = (int)send.Length; bytescount_in = socket.Receive(bs); recivd = bs; socket.Close(); tcpClient.Close(); } public static string DecToHex(int dec) { return Convert.ToString(dec, 16).Replace("-", ""); } public static void PrintHexBytes(byte[] bytes, int bytescount) { bool flag = (bytes != null) ? ((int)bytes.Length == 0 == false) : false; if (!flag) { Console.WriteLine(""); goto IL_0046; } int i = 0; do { Console.Write("{0:X2} ", bytes[i]); i++; IL_003d: flag = i < bytescount; } while (flag); IL_0046: return; } public static void BAToSingle(byte[] bytes, int index) { float f = BitConverter.ToSingle(bytes, index); Console.WriteLine(BitConverter.ToString(bytes, index, 4), f); } private static void Main(string[] args) { byte[] bs1; int k1; int i1 = 0; int j1 = 0; bool flag = (int)args.Length == 0 == false; if (!flag) { Console.WriteLine("Please enter rid1 and rid2."); Console.WriteLine("Usage: rid1 rid2"); Console.WriteLine("Press \'Enter\'..."); Console.ReadLine(); } int i2 = Convert.ToInt32(args[0]); int j2 = Convert.ToInt32(args[1]); byte[] bs2 = new byte[] { 139, 197, 8, 128, 0, 0, 1, 0, 0, 0, 0 }; byte[] bs3 = BitConverter.GetBytes(i2); byte[] bs4 = BitConverter.GetBytes(j2); Array.Reverse(bs3); Array.Reverse(bs4); Array.Copy(bs3, 0, bs2, 7, 4); Sender(bs2, out bs1, out j1, out i1, out k1); object[] locals = new object[] { "GRoleBase ", i2, ", bytes send: ", j1 }; Console.WriteLine(String.Format(String.Concat(locals), new object[0])); Console.WriteLine(String.Format("{0} bytes recived", i1)); int k2 = i1; byte[] bs6 = new byte[4]; Array.Copy(bs1, k2 - 12, bs6, 0, 4); Array.Reverse(bs6); int i3 = BitConverter.ToInt32(bs6, 0); locals = new object[] { "Current spouse id ", i2, ": ", i3 }; Console.WriteLine(String.Concat(locals)); byte[] bs13 = new byte[] { 196 }; byte[] bs7 = bs13; bs13 = new byte[] { 128 }; byte[] bs8 = bs13; bs13 = new byte[] { 75 }; byte[] bs9 = bs13; bs13 = new byte[4]; byte[] bs10 = bs13; Array.Copy(bs7, 0, bs1, 1, 1); Array.Copy(bs8, 0, bs1, 4, 1); Array.Copy(bs9, 0, bs1, 7, 1); flag = i3 == j2 == false; if (!flag) { locals = new object[] { "Clear spouse ", i2, " and ", j2 }; Console.WriteLine(String.Concat(locals)); Array.Copy(bs3, 0, bs1, 8, 4); Array.Copy(bs10, 0, bs1, k2 - 12, 4); } else { Array.Copy(bs3, 0, bs1, 8, 4); Array.Copy(bs4, 0, bs1, k2 - 12, 4); Console.WriteLine(String.Concat("PutSpouse ", i2)); } Sender(bs1, out bs1, out j1, out i1, out k1); Thread.Sleep(1000); Array.Copy(bs4, 0, bs2, 7, 4); Sender(bs2, out bs1, out j1, out i1, out k1); locals = new object[] { "GRoleBase ", j2, ", bytes send: ", j1 }; Console.WriteLine(String.Format(String.Concat(locals), new object[0])); Console.WriteLine(String.Format("{0} bytes recived", i1)); int j3 = i1; byte[] bs12 = new byte[4]; Array.Copy(bs1, j3 - 12, bs12, 0, 4); Array.Reverse(bs12); int k3 = BitConverter.ToInt32(bs12, 0); locals = new object[] { "Current spouse id ", j2, ": ", k3 }; Console.WriteLine(String.Concat(locals)); Array.Copy(bs7, 0, bs1, 1, 1); Array.Copy(bs8, 0, bs1, 4, 1); Array.Copy(bs9, 0, bs1, 7, 1); flag = k3 == i2 == false; if (!flag) { locals = new object[] { "Clear spouse ", j2, " and ", i2 }; Console.WriteLine(String.Concat(locals)); Array.Copy(bs4, 0, bs1, 8, 4); Array.Copy(bs10, 0, bs1, j3 - 12, 4); } else { Array.Copy(bs4, 0, bs1, 8, 4); Array.Copy(bs3, 0, bs1, j3 - 12, 4); Console.WriteLine(String.Concat("PutSpouse ", j2)); } Sender(bs1, out bs1, out j1, out i1, out k1); } } }