|
Стабильная сборка |
|
|
Александр Needle™ |
25.7.2017, 23:27
|

       
Mammy's hero
Сообщений: 1.236
Регистрация: 26.5.2009 Группа: Пользователи Наличность: 0 Из: Украина , Одесса
Пользователь №: 11.891
Возраст: 33

|
Доброй ночи, начал ковырять различные версии RunUO с целью найти оптимальный вариант (рабочий!) для поддержки обычного клиента Ultima Online: Reinessainse, он же 2.0.3. (IMG: style_emoticons/default/wink.gif) Начал конечно же с последней версии доступной на официальном сайте RunUO, установил клиент, поставил эмулятор. И.. не запускается, точней ругается на IPv6, ну хорошо, отключил интернет, не горит. Зайти - не заходит, сервер перезапускается при каждом входе. Понял.., через Expansion выставил None, а затем и LBR, и UOR, и все остальные перепробовал на всякий. И ситуация складывается следующая, ставлю версию в Expansion младше AOS, зайти могу, НО: - ни с кем поговорить невозможно (купить/продать) в VendorAI разбирался, все прописано, но не работает - вещи не имеют названий (просто кусочек окна без каких-либо надписей) - "error [TIP]: null string: 145903" при пересечении с npc (на сервере ошибок нет, сам клиент пишет) - при открытии книги, валится клиент И такие пляски с бубмном вплоть до RunUO-1.0 RC0, которая вообще отказалась даже устанавливается, так как ей именно .NET Framework старой версии нужно (1.х.х) тогда как у меня последняя стоит, это ее не волнует и плевать она на это хотела. Единственная версия, которая кое-как работала (относительно) - RunUO Beta 16 но она настолько сырая, что и говорить не приходится. Но на ней остались прежние следующие ошибки: - "error [TIP]: null string: 145903" при пересечении с npc (на сервере ошибок нет, сам клиент пишет) - "error [TIP]: null string: 145903 : 5" в названии любого предмета, правда есть некоторые, которые отображаются нормально. - ни с кем поговорить невозможно - при открытии книги, валится клиент За столько лет, не было попыток создать нормальную версию, которая бы поддерживала полностью старые клиенты? Какой смысл от Expansion, если эта функция не работает? Да и вообще какой смысл пилить поддержку последних клиентов, если эмулятор не в состоянии поддержать рание версии, это как не доделав что-то, браться за другую работу. Накипело, весь день потратил на это и в итоге ничего не добился (IMG: style_emoticons/default/dry.gif) UPD: Использую RunUO 2.0 RC1 Expansion.None Решил этот вопрос с NPC, которые проваливались
Такое решение в DataPath.cs, почему-то сервер не устраивало: Код private static string CustomPath = @"C:\UO"; Решил такой строкой, и вписал в ручную при запуске сервера. Код private static string CustomPath = null; Решил вопрос с такой проблемой: System.Net.Sockets.SocketException: Предпринятая операция не поддерживается для выбранного типа объекта
Изменил ServerList.cs, полностью вариант ниже: Код using System; using System.IO; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; using Server; using Server.Network;
namespace Server.Misc { public class ServerList { public static readonly string Address = null; public static readonly string ServerName = "RunUO TC";
public static readonly bool AutoDetect = true;
public static void Initialize() { if ( Address == null ) { if ( AutoDetect ) AutoDetection(); } else { Resolve( Address, out m_PublicAddress ); }
EventSink.ServerList += new ServerListEventHandler( EventSink_ServerList ); }
private static IPAddress m_PublicAddress;
private static void EventSink_ServerList( ServerListEventArgs e ) { try { NetState ns = e.State; Socket s = ns.Socket;
IPEndPoint ipep = (IPEndPoint)s.LocalEndPoint;
IPAddress localAddress = ipep.Address; int localPort = ipep.Port;
if ( IsPrivateNetwork( localAddress ) ) { ipep = (IPEndPoint)s.RemoteEndPoint; if ( !IsPrivateNetwork( ipep.Address ) && m_PublicAddress != null ) localAddress = m_PublicAddress; }
e.AddServer( ServerName, new IPEndPoint( localAddress, localPort ) ); } catch { e.Rejected = true; } }
private static void AutoDetection() { if ( !HasPublicIPAddress() ) { Console.Write( "ServerList: Auto-detecting public IP address..." ); m_PublicAddress = FindPublicAddress();
if ( m_PublicAddress != null ) Console.WriteLine( "done ({0})", m_PublicAddress.ToString() ); else Console.WriteLine( "failed" ); } }
private static void Resolve( string addr, out IPAddress outValue ) { if ( IPAddress.TryParse( addr, out outValue ) ) return;
try { IPHostEntry iphe = Dns.GetHostEntry( addr );
if ( iphe.AddressList.Length > 0 ) outValue = iphe.AddressList[iphe.AddressList.Length - 1]; } catch { } }
private static bool HasPublicIPAddress() { NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
foreach ( NetworkInterface adapter in adapters ) { IPInterfaceProperties properties = adapter.GetIPProperties();
foreach ( IPAddressInformation unicast in properties.UnicastAddresses ) { IPAddress ip = unicast.Address;
if ( !IPAddress.IsLoopback( ip ) && ip.AddressFamily != AddressFamily.InterNetworkV6 && !IsPrivateNetwork( ip ) ) return true; } }
return false;
/* IPHostEntry iphe = Dns.GetHostEntry( Dns.GetHostName() );
IPAddress[] ips = iphe.AddressList;
for ( int i = 0; i < ips.Length; ++i ) { if ( ips[i].AddressFamily != AddressFamily.InterNetworkV6 && !IsPrivateNetwork( ips[i] ) ) return true; }
return false; */ }
private static bool IsPrivateNetwork( IPAddress ip ) { // 10.0.0.0/8 // 172.16.0.0/12 // 192.168.0.0/16
if ( ip.AddressFamily == AddressFamily.InterNetworkV6 ) return false;
if ( Utility.IPMatch( "192.168.*", ip ) ) return true; else if ( Utility.IPMatch( "10.*", ip ) ) return true; else if ( Utility.IPMatch( "172.16-31.*", ip ) ) return true; else return false; }
private static IPAddress FindPublicAddress() { try { WebRequest req = HttpWebRequest.Create( "http://www.runuo.com/ip.php" ); req.Timeout = 15000;
WebResponse res = req.GetResponse();
Stream s = res.GetResponseStream();
StreamReader sr = new StreamReader( s );
IPAddress ip = IPAddress.Parse( sr.ReadLine() );
sr.Close(); s.Close(); res.Close();
return ip; } catch { return null; } } } } Решил проблему с NPC, которые не реагируют на команды BUY/SELL
Код public override void OnSpeech( SpeechEventArgs e ) { base.OnSpeech( e ); Mobile from = e.Mobile; string speech = e.Speech.ToLower(); if ( m_Mobile is BaseVendor && from.InRange( m_Mobile, Core.AOS ? 1 : 4 ) && !e.Handled ) { if ( e.HasKeyword( 0x014D ) || speech == "sell" ) // *vendor sell* { e.Handled = true;
((BaseVendor)m_Mobile).VendorSell( from ); m_Mobile.FocusMob = from; } else if ( e.HasKeyword( 0x003C ) || speech == "buy" ) // *vendor buy* { e.Handled = true;
((BaseVendor)m_Mobile).VendorBuy( from ); m_Mobile.FocusMob = from; } else if ( WasNamed( e.Speech ) ) { e.Handled = true;
if ( e.HasKeyword( 0x0177 ) || speech == "sell" ) // *sell* ((BaseVendor)m_Mobile).VendorSell( from ); else if ( e.HasKeyword( 0x0171 ) || speech == "buy" ) // *buy* ((BaseVendor)m_Mobile).VendorBuy( from );
m_Mobile.FocusMob = from; } } }
Само решилось при переходе на более новую версию RunUO
- "error [TIP]: null string: 145903" при пересечении с npc (на сервере ошибок нет, сам клиент пишет) НЕ РЕШЕНО
- при открытии меню покупки/продажи зависает клиент, но спокойно реагирует на команды, то есть если продать нечего, меню не появляется и клиент не зависает - вещи не имеют названий (просто кусочек окна без каких-либо надписей) - при открытии книги (обычная книга), валится клиент - "error [TIP]: null string: 145903 : 5" в названии любого предмета, правда есть некоторые, которые отображаются нормально.
|
|
|
|
|
  |
Ответов
Александр Needle™ |
30.7.2017, 2:17
|

       
Mammy's hero
Сообщений: 1.236
Регистрация: 26.5.2009 Группа: Пользователи Наличность: 0 Из: Украина , Одесса
Пользователь №: 11.891
Возраст: 33

|
Цитата(Aimed @ 29.7.2017, 19:44)  Как успехи?
Да как-то не очень, все пестрое после RunUO, открываешь любой скрипт в блокноте (нет, я не извращенец, просто если исправить всего пару букв, то нафига Visual Studio запускать из-за этого) он не читабелен, все одной строкой прописано, приходится запускать программу. Понатыканы всякие скипты на фермерство и подобное. И да, на сервер не удалось зайти, разбираться не стал. Немного позже повторю попытку, сейчас тренирую пару человек по mul-файлам. Потом уже перейду снова к клиенту и буду пробовать.
|
|
|
|
StaticZ |
30.7.2017, 14:33
|

        
Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009 Группа: Пользователи Наличность: 0 Из: РФ, Москва
Пользователь №: 11.948

|
Цитата(Александр Needle™ @ 30.7.2017, 2:17)  Да как-то не очень, все пестрое после RunUO, открываешь любой скрипт в блокноте (нет, я не извращенец, просто если исправить всего пару букв, то нафига Visual Studio запускать из-за этого) он не читабелен, все одной строкой прописано, приходится запускать программу. Понатыканы всякие скипты на фермерство и подобное. И да, на сервер не удалось зайти, разбираться не стал.
Немного позже повторю попытку, сейчас тренирую пару человек по mul-файлам. Потом уже перейду снова к клиенту и буду пробовать.
RunUO та еще помойка, одна скорость оружия в каждом скрипте задается по 5 раз, при этом само ядро просто пестрит ошибками на которые все давно уже наклали. ServUO дальнейшее развитие данной концепции на ядро всем как было абсолютно до фени так и осталось а левых систем понапихали отовсюду откуда только можно. Что касается старых эпох, то на самом деле простой смены экспаншена там не обойтись, а проблемы с ipv6 фиксястся легко, все что надо это добавить проверку на семейство адресов при формировании списка адресов сетевым движком ( (ip.AddressFamily == AddressFamily.InterNetwork) делает как раз что надо ): Код /// <summary> /// Сведения о глобальном внешнем адресе машины /// </summary> public static IPHostEntry HostEntry { get { if (m_HostEntry == null) { m_HostEntry = new IPHostEntry(); m_HostEntry.HostName = Core.Localhost ? "localhost" : "login.uoquint.ru"; m_HostEntry.Aliases = new string[] { Core.Localhost ? "localhost" : "login2.uoquint.ru" }; List<IPAddress> addressList = new List<IPAddress>(); foreach (IPAddress ip in Dns.GetHostByName(m_HostEntry.HostName).AddressList) if (ip.AddressFamily == AddressFamily.InterNetwork) addressList.Add(ip); m_HostEntry.AddressList = addressList.ToArray(); } return m_HostEntry; } } public static IPHostEntry m_HostEntry = null;
/// <summary> /// Сведения о локальном внутренем адресе машины /// </summary> public static IPHostEntry LocalEntry { get { if (m_LocalEntry == null) { m_LocalEntry = new IPHostEntry(); m_LocalEntry.HostName = Core.Localhost ? "localhost" : Dns.GetHostName(); List<IPAddress> addressList = new List<IPAddress>(); foreach (IPAddress ip in Dns.GetHostByName(m_LocalEntry.HostName).AddressList) if (ip.AddressFamily == AddressFamily.InterNetwork && ip.GetAddressBytes()[2] == 0) addressList.Add(ip); m_LocalEntry.AddressList = addressList.ToArray(); } return m_LocalEntry; } } public static IPHostEntry m_LocalEntry = null;
--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.Game isn't a dream, it is the reality, reality which is coming while we dream...
|
|
|
|
StaticZ |
1.8.2017, 2:21
|

        
Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009 Группа: Пользователи Наличность: 0 Из: РФ, Москва
Пользователь №: 11.948

|
Цитата(Aimed @ 31.7.2017, 23:02)  В чем смысл этой критики? Тем кому это действительно важно и так об этом знают, да и обсуждалось это неоднократно. Альтернатив все равно нет, Сфера или ПОЛ не лучше в этом плане.
Всяко лучше нежели РанУО 2.0, на котором он в первую очередь это пробовал реализовать.
Вы меня немного не верно поняли, лично я считаю RunUO лучшим эмулятором среди прочих, однако это не означает, что он идеален. Такой проблемой и является некая помоешность, я уже давно слежу за развитием и RunUO и ServUO и не вижу никаких существенных изменений на уровне ядра (хотя багов там пруд пруди в том числе и критических, но уверен с этим дела у полов и сфер не лучше) лишь все больше и больше скриптового мусора плодиться, вместе с костылями на костылях. А это очень сильно мешает переделывать изменять или писать что-то свое, в том числе и реализовать на базе данного сервера старые эпохи вроде Т2А, чем и собирался заняться автор данной темы. Да в сервере есть возможность смены эпохи, однако все что это делает это обеспечивает совместимость протокола и включает какие-то куски старого кода который уже фиг знает сколько лет никто не проверял не тестировал и даже не парился на счет обратной совместимости нового кода. Поэтому для разработки сервера старых эпох советую выбирать RunUO, а не ServUO. А проблемы с ipv6 решить не сложно, по моему ее даже нет уже в последних версиях RunUO.
--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.Game isn't a dream, it is the reality, reality which is coming while we dream...
|
|
|
|
Сообщений в этой теме
Александр Needle™ Стабильная сборка 25.7.2017, 23:27 Mirage Берешь последнюю ранку или sunuo и меняешь в паре ... 26.7.2017, 9:33 Александр Needle™
Берешь последнюю ранку или sunuo и меняешь в паре... 26.7.2017, 14:13 Juzzver
Эпохи меняются в один клик, но причем тут клиенты... 26.7.2017, 20:17 Александр Needle™
Эпохи меняются в один клик, но причем тут клиенты... 26.7.2017, 22:20 Wap А смысл в этих извращениях? Мейнстрим в рунете уже... 27.7.2017, 0:32 Александр Needle™
А смысл в этих извращениях? Мейнстрим в рунете уж... 27.7.2017, 1:01 Mirage Если взять 6 клиент и опустить эпоху то разницы ты... 27.7.2017, 1:43 Александр Needle™
Если взять 6 клиент и опустить эпоху то разницы т... 27.7.2017, 3:18 Juzzver
Эти гампы вшиты в клиент, но сервер не даст выбра... 27.7.2017, 3:41 Александр Needle™
Эти гампы вшиты в клиент, но сервер не даст выбра... 27.7.2017, 3:52     Александр Needle™
RunUO та еще помойка, одна скорость оружия в кажд... 30.7.2017, 15:06      Александр Needle™
В чем смысл этой критики? Тем кому это действител... 31.7.2017, 23:49    Aimed
Да как-то не очень, все пестрое после RunUO, откр... 31.7.2017, 22:52 Mirage ServUO грустный эмулятор. Ставишь, запускаешь и не... 29.7.2017, 21:58 Артемий Шан Я бы сейчас точно брал сервер на runuo, знание C++... 2.8.2017, 14:45 Mirage :)
Хммм боюсь тебя расстроить...
Сфера на С++
Р... 2.8.2017, 16:41  StaticZ
Хммм боюсь тебя расстроить...
Сфера на С++
Ранка ... 2.8.2017, 18:27   Aimed
Тут нужна оговорка, что хоть и сфера написана на ... 2.8.2017, 21:14 Артемий Шан Да, точно, C#. Но он в любом случае полезен не мен... 5.8.2017, 3:10 Александр Needle™ И такс, все сделал, настроил RunUO 2.2
Все работае... 8.8.2017, 6:38 Aimed
И такс, все сделал, настроил RunUO 2.2
Все работа... 8.8.2017, 8:25  Александр Needle™
Посмотри какой там фонт файл используется при спи... 8.8.2017, 9:46   Aimed
Fonts.mul имеют русские буквы, более того вводимы... 8.8.2017, 10:00 Александр Needle™ Долго я копал и колдовал над всем этим, вообщем до... 9.8.2017, 17:24 Aimed
Долго я копал и колдовал над всем этим, вообщем д... 10.8.2017, 12:16  Александр Needle™
Если ты сейчас удалишь uo.cfg у тебя вместо норма... 10.8.2017, 12:53   Aimed
Да именно так, я уже сидел игрался с удалением эт... 10.8.2017, 13:14    Александр Needle™
Вот эта строка в нем, скорее всего.
Именно! ... 10.8.2017, 13:47     Aimed
Именно! :)
Предпологаю что эту настройку в... 10.8.2017, 14:00
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|