Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ Вопросы по RunUO _ Стабильная сборка

Автор: Александр Needle™ 25.7.2017, 23:27

Доброй ночи, начал ковырять различные версии RunUO с целью найти оптимальный вариант (рабочий!) для поддержки обычного клиента Ultima Online: Reinessainse, он же 2.0.3. 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, если эта функция не работает? Да и вообще какой смысл пилить поддержку последних клиентов, если эмулятор не в состоянии поддержать рание версии, это как не доделав что-то, браться за другую работу.
Накипело, весь день потратил на это и в итоге ничего не добился 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" в названии любого предмета, правда есть некоторые, которые отображаются нормально.

Автор: Mirage 26.7.2017, 9:33

Берешь последнюю ранку или sunuo и меняешь в паре файлов эру на до аосную. То что error всего скорее отсутствия в клилоке клиента надписи. Там по дефолту всякие окошки с хелпами лезут для новых клиентов, свойства резистов... Вырубать надо для старого.
Я делал для 203 клиента, день протрахался, завел, и удалил. Многие интересные и нужные вещи из новых клиентов в ренесансе отсутствуют. И ранка оптимизированней работает с 4-7 клиентами. Оптимальнее всего 6 и 7 до uop клиенты. Там и новые мобы, и резисты, и всякие удачи, новые монстры и боссы.

Насчет buy - нпс по дефолту настроены на клик. Что бы включить голосовое управление надо либо эру опускать либо файл НПС править. Мне кажется проще сделать через даблклик по НПС открытие списка торговли или гампа окна.

Цитата
Да и вообще какой смысл пилить поддержку последних клиентов, если эмулятор не в состоянии поддержать рание версии

Ты никогда не пробовал на ssd/Core i7/GF1070 ставить windows 3.11 ? Зафига компьютеру поддержка десятки если он так хреново со старыми операционками работает? rolleyes.gif

Автор: Александр Needle™ 26.7.2017, 14:13

Цитата(Mirage @ 26.7.2017, 9:33) *

Берешь последнюю ранку или sunuo и меняешь в паре файлов эру на до аосную. То что error всего скорее отсутствия в клилоке клиента надписи. Там по дефолту всякие окошки с хелпами лезут для новых клиентов, свойства резистов... Вырубать надо для старого.
Я делал для 203 клиента, день протрахался, завел, и удалил. Многие интересные и нужные вещи из новых клиентов в ренесансе отсутствуют. И ранка оптимизированней работает с 4-7 клиентами. Оптимальнее всего 6 и 7 до uop клиенты. Там и новые мобы, и резисты, и всякие удачи, новые монстры и боссы.

Насчет buy - нпс по дефолту настроены на клик. Что бы включить голосовое управление надо либо эру опускать либо файл НПС править. Мне кажется проще сделать через даблклик по НПС открытие списка торговли или гампа окна.
Ты никогда не пробовал на ssd/Core i7/GF1070 ставить windows 3.11 ? Зафига компьютеру поддержка десятки если он так хреново со старыми операционками работает? rolleyes.gif

Как уже писал в самом начале я менял, это ничего не решает, проблемы не уходят. Новых НПЦ, резисты, удачу и тп, все можно прикрутить к старому клиенту, если захотеть, да и опять же, идея была запустить именно старый клиент с его полной поддержкой, без новых вещей и тп.

Эру уже опускал, в файле НПС прописано голосовое управление, но оно не реагирует. Про дабл-клик запишу, хорошая идея.

Ты кое что перепутал, я намекаю на связь старый компьютер - старый Windows, никак иначе wink.gif
Почему трудно было догадаться сделать например так, взять клиент Renaissance, оптимизировать RunUO полностью, все доделать, понятное дело баги останутся, но хотя бы 90% сделать и закрыть эту разработку финальной версией. И написать, эта версия поддерживает 90% клиент с [ 2.0.0 - 3.0.0] Renaissance, и дальше продолжить разработку уже с максимально возможной поддержкой клиента [ 3.0.0 - 3.0.7b] Third Dawn. То есть, оптимизировал, закрепил, стабильности добились и тогда выпустили версию.

Я понимаю, разработчики RunUO хотели как лучше, аля менять эпохи в пару кликов, но это ни черта не работает, в случае с вещами/нпц тянет ошибки. Может им и не нужна поддержка старых клиентов, а мне вот нужна smile.gif

VendorAI.cs

Код
// Temporary 
        public override void OnSpeech( SpeechEventArgs e )
        {
            base.OnSpeech( e );

            Mobile from = e.Mobile;

            if ( m_Mobile is BaseVendor && from.InRange( m_Mobile, Core.AOS ? 1 : 4 ) && !e.Handled )
            {
                if ( e.HasKeyword( 0x14D ) ) // *vendor sell*
                {
                    e.Handled = true;

                    ((BaseVendor)m_Mobile).VendorSell( from );
                    m_Mobile.FocusMob = from;
                }
                else if ( e.HasKeyword( 0x3C ) )
                {
                    e.Handled = true;

                    ((BaseVendor)m_Mobile).VendorBuy( from );
                    m_Mobile.FocusMob = from;
                }
                else if ( WasNamed( e.Speech ) )
                {
                    e.Handled = true;

                    if ( e.HasKeyword( 0x177 ) ) // *sell*
                        ((BaseVendor)m_Mobile).VendorSell( from );
                    else if ( e.HasKeyword( 0x171 ) ) // *buy*
                        ((BaseVendor)m_Mobile).VendorBuy( from );

                    m_Mobile.FocusMob = from;
                }
            }
        }


Автор: Juzzver 26.7.2017, 20:17

Цитата
Я понимаю, разработчики RunUO хотели как лучше, аля менять эпохи в пару кликов, но это ни черта не работает, в случае с вещами/нпц тянет ошибки. Может им и не нужна поддержка старых клиентов, а мне вот нужна smile.gif

Эпохи меняются в один клик, но причем тут клиенты? Ставь хоть 7й клиент себе и меняй эпохи.

По поводу прочих вопросов, ты их уже подымал в мае и был дан ответ.
Возможно попросту в 2.0.3 версии отсутствуют speech кейворды:
Код
if ( e.HasKeyword( 0x14D ) ) // *vendor sell*

попробуй просто переписать их под стринговые

Автор: Александр Needle™ 26.7.2017, 22:20

Цитата(Juzzver @ 26.7.2017, 20:17) *

Эпохи меняются в один клик, но причем тут клиенты? Ставь хоть 7й клиент себе и меняй эпохи.
По поводу прочих вопросов, ты их уже подымал в мае и был дан ответ.
Возможно попросту в 2.0.3 версии отсутствуют speech кейворды: попробуй просто переписать их под стринговые

Вся мякотка в том, что хочу использовать именно старый клиент с verdata.mul и потому нужна поддержка старых клиентов. Да, все верно, я тогда не обратил внимания и из памяти выпало, но спасибо тебе, напомнил. Все работает, решение добавил в первом сообщении.

Теперь новый баг, при открытии меню покупки/продажи зависает клиент, но спокойно реагирует на команды, то есть если продать нечего, меню не появляется и клиент не зависает.

Автор: Wap 27.7.2017, 0:32

А смысл в этих извращениях? Мейнстрим в рунете уже давно перешел на 6-7 клиенты, UORPG на 7.0.23.1 HS, Антарес на 6 клиенте (ML), UoGames на 7 клиентах (ну там конечно без вопросов, там OSI-Style).

Автор: Александр Needle™ 27.7.2017, 1:01

Цитата(Wap @ 27.7.2017, 0:32) *

А смысл в этих извращениях? Мейнстрим в рунете уже давно перешел на 6-7 клиенты, UORPG на 7.0.23.1 HS, Антарес на 6 клиенте (ML), UoGames на 7 клиентах (ну там конечно без вопросов, там OSI-Style).

Ну вот такой я извращенец rolleyes.gif
Хочу начать с низов, так мне кажется проще, да и просто люблю старый Renaissance клиент.

Автор: Mirage 27.7.2017, 1:43

Если взять 6 клиент и опустить эпоху то разницы ты не почуешь. Не будет ни самураев ни вампиров ни дополнительных миров, тултипы минимальны либо вообще отсутствуют. Зато нормальная карта и возможность все вернуть взад.
заморачиваться со старым клиентом имеет место быть только если у тебя какой то неепически наполненныый клиент с артами гампами и мапами и тебе лома все переделывать на новый. Если ты более менее дефолтный клиент используешь то это вода в решете.
PS по мне перенести необходимое с клиента на клиент все таки проще чем переписывать треть кода сервера что бы было ощущения 51-55 сферы с блжкджеком и багами. Теряется смысл действа.

Автор: Александр Needle™ 27.7.2017, 3:18

Цитата(Mirage @ 27.7.2017, 1:43) *

Если взять 6 клиент и опустить эпоху то разницы ты не почуешь. Не будет ни самураев ни вампиров ни дополнительных миров, тултипы минимальны либо вообще отсутствуют. Зато нормальная карта и возможность все вернуть взад.
заморачиваться со старым клиентом имеет место быть только если у тебя какой то неепически наполненныый клиент с артами гампами и мапами и тебе лома все переделывать на новый. Если ты более менее дефолтный клиент используешь то это вода в решете.
PS по мне перенести необходимое с клиента на клиент все таки проще чем переписывать треть кода сервера что бы было ощущения 51-55 сферы с блжкджеком и багами. Теряется смысл действа.

Только что установил последнюю версию ML, на сервере менял эпоху на UOR, UOTD, T2A все как было так и осталось. Меню все остались, в самом начале, при создании персонажа мне предложили выбрать нинзю, самурая, некромансера и паладина, очень похоже на клиент эпохи Ренессанса. Большое меню характеристик персонажа, добавилось меню сверху, и многое другое. А так все остальное похоже обычный старый клиент, хехе, сарказм wink.gif

Переписывать ничего не нужно, просто отключить то, что не нужно, тем более, что как я только что доказал, это все равно придется делать. Что толку, если поддержки старого клиента нет ни с какой версией клиента и сервера?

Лучше уже начать со старой версией клиента, а когда потребуется, все включу и обновлю клиент. А карта, пфф, не столько сейчас онлайна на серверах, что им мало места будет на одной Felucce.

Автор: Juzzver 27.7.2017, 3:41

Цитата
Меню все остались, в самом начале, при создании персонажа мне предложили выбрать нинзю, самурая, некромансера и паладина, очень похоже на клиент эпохи Ренессанса.

Эти гампы вшиты в клиент, но сервер не даст выбрать профессии или расы и т.д., которых нет в выбранной эре. Так же и с особенностями, типа резистов, абилок, тултипов и т.д. - все эти пакеты будут отключены.

Автор: Александр Needle™ 27.7.2017, 3:52

Цитата(Juzzver @ 27.7.2017, 3:41) *

Эти гампы вшиты в клиент, но сервер не даст выбрать профессии или расы и т.д., которых нет в выбранной эре. Так же и с особенностями, типа резистов, абилок, тултипов и т.д. - все эти пакеты будут отключены.

Да ты прав, но это и понятно, но я добиваюсь классической сборки клиента 2.0.3

Автор: Aimed 27.7.2017, 13:04

Ты на ServUO пробовал ставить экспансию Т2А какое нибудь и под 2.0.3 клиент запускать?
Там обратная совместимость протокола вроде нормально должна работать.

Автор: Александр Needle™ 27.7.2017, 14:50

Цитата(Aimed @ 27.7.2017, 13:04) *

Ты на ServUO пробовал ставить экспансию Т2А какое нибудь и под 2.0.3 клиент запускать?
Там обратная совместимость протокола вроде нормально должна работать.

Никогда не работал с ServUO, попробую, спасибо.

Автор: Aimed 29.7.2017, 19:44

Цитата(Александр Needle™ @ 27.7.2017, 13:50) *

Никогда не работал с ServUO, попробую, спасибо.


Как успехи?

Автор: Mirage 29.7.2017, 21:58

ServUO грустный эмулятор. Ставишь, запускаешь и не знаешь ем бы еще позаниматься. Там почти все есть. Респы разве что попереставлять...

Автор: Александр Needle™ 30.7.2017, 2:17

Цитата(Aimed @ 29.7.2017, 19:44) *

Как успехи?

Да как-то не очень, все пестрое после RunUO, открываешь любой скрипт в блокноте (нет, я не извращенец, просто если исправить всего пару букв, то нафига Visual Studio запускать из-за этого) он не читабелен, все одной строкой прописано, приходится запускать программу. Понатыканы всякие скипты на фермерство и подобное. И да, на сервер не удалось зайти, разбираться не стал.

Немного позже повторю попытку, сейчас тренирую пару человек по mul-файлам. Потом уже перейду снова к клиенту и буду пробовать.

Автор: StaticZ 30.7.2017, 14:33

Цитата(Александр 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;

Автор: Александр Needle™ 30.7.2017, 15:06

Цитата(StaticZ @ 30.7.2017, 14:33) *

RunUO та еще помойка, одна скорость оружия в каждом скрипте задается по 5 раз, при этом само ядро просто пестрит ошибками на которые все давно уже наклали. ServUO дальнейшее развитие данной концепции на ядро всем как было абсолютно до фени так и осталось а левых систем понапихали отовсюду откуда только можно.

Что касается старых эпох, то на самом деле простой смены экспаншена там не обойтись, а проблемы с ipv6 фиксястся легко, все что надо это добавить проверку на семейство адресов при формировании списка адресов сетевым движком ( (ip.AddressFamily == AddressFamily.InterNetwork) делает как раз что надо ):

Отлично, добавлю к списку решенных вопросов, спасибо!

Автор: Aimed 31.7.2017, 22:52

Цитата(Александр Needle™ @ 30.7.2017, 1:17) *

Да как-то не очень, все пестрое после RunUO, открываешь любой скрипт в блокноте (нет, я не извращенец, просто если исправить всего пару букв, то нафига Visual Studio запускать из-за этого) он не читабелен, все одной строкой прописано, приходится запускать программу.

Нормальным блокнотом нужно пользоваться.


Автор: Aimed 31.7.2017, 23:02

Цитата(StaticZ @ 30.7.2017, 13:33) *

RunUO та еще помойка, одна скорость оружия в каждом скрипте задается по 5 раз, при этом само ядро просто пестрит ошибками на которые все давно уже наклали. ServUO дальнейшее развитие данной концепции на ядро всем как было абсолютно до фени так и осталось а левых систем понапихали отовсюду откуда только можно.


В чем смысл этой критики? Тем кому это действительно важно и так об этом знают, да и обсуждалось это неоднократно. Альтернатив все равно нет, Сфера или ПОЛ не лучше в этом плане.

Всяко лучше нежели РанУО 2.0, на котором он в первую очередь это пробовал реализовать.

Автор: Александр Needle™ 31.7.2017, 23:49

Цитата(Aimed @ 31.7.2017, 23:02) *

В чем смысл этой критики? Тем кому это действительно важно и так об этом знают, да и обсуждалось это неоднократно. Альтернатив все равно нет, Сфера или ПОЛ не лучше в этом плане.

Всяко лучше нежели РанУО 2.0, на котором он в первую очередь это пробовал реализовать.

К полу пока нареканий нет wink.gif он пока единственный кто запустился сразу без танцев с бубном поддерживая старый клиент, я про 095 говорю, если что, но как сервер меня терзают сомнения.
Я сейчас пробую RunUO 1.0 вообще, которая создавалась когда клиента старше LBR не было, думаю может она хоть как-то поддерживает клиент biggrin.gif

Автор: StaticZ 1.8.2017, 2:21

Цитата(Aimed @ 31.7.2017, 23:02) *

В чем смысл этой критики? Тем кому это действительно важно и так об этом знают, да и обсуждалось это неоднократно. Альтернатив все равно нет, Сфера или ПОЛ не лучше в этом плане.

Всяко лучше нежели РанУО 2.0, на котором он в первую очередь это пробовал реализовать.
Вы меня немного не верно поняли, лично я считаю RunUO лучшим эмулятором среди прочих, однако это не означает, что он идеален. Такой проблемой и является некая помоешность, я уже давно слежу за развитием и RunUO и ServUO и не вижу никаких существенных изменений на уровне ядра (хотя багов там пруд пруди в том числе и критических, но уверен с этим дела у полов и сфер не лучше) лишь все больше и больше скриптового мусора плодиться, вместе с костылями на костылях. А это очень сильно мешает переделывать изменять или писать что-то свое, в том числе и реализовать на базе данного сервера старые эпохи вроде Т2А, чем и собирался заняться автор данной темы. Да в сервере есть возможность смены эпохи, однако все что это делает это обеспечивает совместимость протокола и включает какие-то куски старого кода который уже фиг знает сколько лет никто не проверял не тестировал и даже не парился на счет обратной совместимости нового кода. Поэтому для разработки сервера старых эпох советую выбирать RunUO, а не ServUO. А проблемы с ipv6 решить не сложно, по моему ее даже нет уже в последних версиях RunUO.

Автор: Артемий Шан 2.8.2017, 14:45

Я бы сейчас точно брал сервер на runuo, знание C++ в жизни пригодится.
Но если хочешь по легче, то бери сферу, там всё гораздо проще в реализации smile.gif

Автор: Mirage 2.8.2017, 16:41

Цитата(Артемий Шан @ 2.8.2017, 14:45) *
smile.gif


Хммм боюсь тебя расстроить...
Сфера на С++
Ранка на С#. Это чуть другой уровень скилла.

rolleyes.gif biggrin.gif


И так то он не спрашивает где проще. Просто пытается разобраться. Ранку стоит выбирать в друх случаях - если нет вообще никакого знания языка но очень хочется, либо есть начальный уровень в С++ и хочется чего то больше. По мне сфера вполне себе сервер. Но посчупав ранку на сферу возвращаться не захочется. smile.gif У меня валяется почти готовый проект на сфере, куча трудов вложено и моих и предыдущих девов. Но после ServUO и её "изкоробочки" набора сфера как кислое яблоко выглядит. Да росло в своем саду. Но ведь есть забесплатные ананасы... wink.gif

Автор: StaticZ 2.8.2017, 18:27

Цитата(Mirage @ 2.8.2017, 16:41) *

Хммм боюсь тебя расстроить...
Сфера на С++
Ранка на С#. Это чуть другой уровень скилла.
Тут нужна оговорка, что хоть и сфера написана на С++ большая часть игровой логики в скриптах на бреинсфаке, которым и придется большую часть времени заниматься, а С++ если только потребуется изменить, что-то на уровне ядра, например прокачать бреинсфак до уровня бреинсфак "вася едишин".


Цитата(Mirage @ 2.8.2017, 16:41) *
И так то он не спрашивает где проще. Просто пытается разобраться. Ранку стоит выбирать в друх случаях - если нет вообще никакого знания языка но очень хочется, либо есть начальный уровень в С++ и хочется чего то больше.
Как по мне ранка проще, но возможно для тех кто не имеет опыта программирования и не хочет этому учиться сфера покажется легче (а возможно и нет тут надо спрашивать какраз впечатления у таких людей).

Автор: Aimed 2.8.2017, 21:14

Цитата(StaticZ @ 2.8.2017, 17:27) *

Тут нужна оговорка, что хоть и сфера написана на С++ большая часть игровой логики в скриптах на бреинсфаке, которым и придется большую часть времени заниматься, а С++ если только потребуется изменить, что-то на уровне ядра, например прокачать бреинсфак до уровня бреинсфак "вася едишин".

laugh.gif


Цитата(StaticZ @ 2.8.2017, 17:27) *

Как по мне ранка проще, но возможно для тех кто не имеет опыта программирования и не хочет этому учиться сфера покажется легче (а возможно и нет тут надо спрашивать какраз впечатления у таких людей).

Я могу себя к таким прировнять. Я начинал со Сферы как полный 0 в программировании. Скрипты на инже и изиуо я почти не писал с 0 ( не умел ). Обычно кое-как переписывал скрипты других людей под свои нужды.
Начал я со Сферы и было это заданием от Вапа. Довольно простое задание, которое даже с 0 писать не надо было. Нужно было его дописать с небольшим копипастом. Но заняло оно у меня дохрена времени, потому что никаких учебников по сферскрипту нету, сфервики тоже не очень в этом плане, а тот курс из 10 глав что на сфервики есть, не сильно помогал. В итоге все уперается в обучение методом тыка.

Чуть позже я взял учебники по C# и полез в РанУО. Ощущения были намного приятнее и читая код, представление о его выполнении было гораздо лучше. А так-же я в итоге через год устроился программистом и хорошо теперь живу этим, совместил полезное + приятное. Справедливости ради скажу ещё что когда начал изучать шарпы и РанУО, я так-же поступил на вечернее обучение, факультет информатики. Это тоже тоже сыграло роль во всем этом но там почти все было на джаве и через 1.5 года я забил на него. Слишком много времени на учебу уходило, а 70% того что я там изучал не использовалось на работе и по сей день.
8 месяцев возни с различными UML схемами, в итоге уже вторая работа и нигде ним не пользуются, как и самой джавой ( в моем случае имеется в виду ).
В итоге по полезности обучения вышло где-то так:
35% на проекте конверта УОРПГ и сейчас Орионе.
15% за 1.5 года вечерней информатики.
50% я получил уже на самой работе.

Автор: Артемий Шан 5.8.2017, 3:10

Да, точно, C#. Но он в любом случае полезен не менее C++, а может даже и больше.

Как человек, не знающий на должном уровне не один язык программирования могу сказать, что со сферой стоит связываться только в том случае, если вы себя в роли полноценного программиста в дальнейшем не видите...


Автор: Александр Needle™ 8.8.2017, 6:38

И такс, все сделал, настроил RunUO 2.2
Все работает, кроме одного - русский текст над головой персонажа - ???? ????
В клиенте есть поддержка русского языка (отображение) на стандартной сборке текст выводится нормально, то есть проблема чисто серверная.

Автор: Aimed 8.8.2017, 8:25

Цитата(Александр Needle™ @ 8.8.2017, 5:38) *

И такс, все сделал, настроил RunUO 2.2
Все работает, кроме одного - русский текст над головой персонажа - ???? ????
В клиенте есть поддержка русского языка (отображение) на стандартной сборке текст выводится нормально, то есть проблема чисто серверная.


Посмотри какой там фонт файл используется при спиче и есть-ли он в твоих клиентских файлах.
Не нашёл исходников 2.2 версии, но либо этот пакет,
либо через юникод что чуть ниже https://github.com/runuo/runuo/blob/master/Server/Network/Packets.cs#L3734
И в клиенте номер фонта не существует либо какой-то левый, где char код букв из кирилицы вне ренжа фонт файла и идёт возврат картинок со знаками вопросов.

Если у себя в PacketHandlers.cs отладку поставишь на хендлере пакета 0xAD, то тебя выведет на отсылку пакетов спича ascii/unicode и данные о номере фонт файла.

Автор: Александр Needle™ 8.8.2017, 9:46

Цитата(Aimed @ 8.8.2017, 8:25) *

Посмотри какой там фонт файл используется при спиче и есть-ли он в твоих клиентских файлах.
Не нашёл исходников 2.2 версии, но либо этот пакет,
либо через юникод что чуть ниже https://github.com/runuo/runuo/blob/master/Server/Network/Packets.cs#L3734
И в клиенте номер фонта не существует либо какой-то левый, где char код букв из кирилицы вне ренжа фонт файла и идёт возврат картинок со знаками вопросов.

Если у себя в PacketHandlers.cs отладку поставишь на хендлере пакета 0xAD, то тебя выведет на отсылку пакетов спича ascii/unicode и данные о номере фонт файла.

Fonts.mul имеют русские буквы, более того вводимый текст отображается, но только не сверху персонажа. Сейчас проверил, даже в чате пишется русский язык и выводится, то есть проблема только с отображением над персонажем. Буду пробовать ковырять файлы сервера.

Прикрепленное изображение Прикрепленное изображение

Автор: Aimed 8.8.2017, 10:00

Цитата(Александр Needle™ @ 8.8.2017, 8:46) *

Fonts.mul имеют русские буквы, более того вводимый текст отображается, но только не сверху персонажа. Сейчас проверил, даже в чате пишется русский язык и выводится, то есть проблема только с отображением над персонажем. Буду пробовать ковырять файлы сервера.

Прикрепленное изображение Прикрепленное изображение


То что ты печатаешь и то что ты над головой персонажа видишь совершенно разные вещи. Первое делает клиент до связи с сервером, а второе отображается по команде сервера. Сервер говорит клиенту бери из фонтс мул, из файла ascii или unicode номер такого-то фонта. Открой фиддлер, закладку Fonts - поймешь о чем я.
Так вот тебе сервер говорит использовать левый фонт и картинки букв рисовать над персонажем таким то. Это хард кодом прописано.
Инструкции из моего прошлого поста помогут тебе понять что конкретно сервак шлет клиенту.

За чат совершенно другой код отвечает, скорее всего там юникод 3 посылается.

Автор: Александр Needle™ 9.8.2017, 17:24

Долго я копал и колдовал над всем этим, вообщем добился я русского языка в клиенте. Оказалось все намного проще. Когда я делал архив клиента, перед этим удалил uo.cfg и некоторые другие файлы, для так сказать чистой сборки, но не рассчитывал что из-за этого слетит русский текст. Файл восстановил из оригинальной сборки (образ диска) И все заработало как надо, везде одинаковый шрифт, читаемый и красивый. Прикрепил скриншот для наглядности, справа uo.cfg который создавался сам при первом открытии клиента, слева - оригинальный (ну немного модифицированный мной, но суть та же)
Прикрепленное изображение

Автор: Aimed 10.8.2017, 12:16

Цитата(Александр Needle™ @ 9.8.2017, 16:24) *

Долго я копал и колдовал над всем этим, вообщем добился я русского языка в клиенте. Оказалось все намного проще. Когда я делал архив клиента, перед этим удалил uo.cfg и некоторые другие файлы, для так сказать чистой сборки, но не рассчитывал что из-за этого слетит русский текст. Файл восстановил из оригинальной сборки (образ диска) И все заработало как надо, везде одинаковый шрифт, читаемый и красивый. Прикрепил скриншот для наглядности, справа uo.cfg который создавался сам при первом открытии клиента, слева - оригинальный (ну немного модифицированный мной, но суть та же)
Прикрепленное изображение


Если ты сейчас удалишь uo.cfg у тебя вместо нормального фонта снова знаки вопросов будут?
Просто я на твой скриншот смотрю и что-то не вижу как по представленной информации клиент вдруг что-то по другому стал делать в плане использования фонтов.

Автор: Александр Needle™ 10.8.2017, 12:53

Цитата(Aimed @ 10.8.2017, 12:16) *

Если ты сейчас удалишь uo.cfg у тебя вместо нормального фонта снова знаки вопросов будут?
Просто я на твой скриншот смотрю и что-то не вижу как по представленной информации клиент вдруг что-то по другому стал делать в плане использования фонтов.

Да именно так, я уже сидел игрался с удалением этого файла.

Автор: Aimed 10.8.2017, 13:14

Цитата(Александр Needle™ @ 10.8.2017, 11:53) *

Да именно так, я уже сидел игрался с удалением этого файла.


Цитата
UnicodeSpeech=on

Вот эта строка в нем, скорее всего.

Автор: Александр Needle™ 10.8.2017, 13:47

Цитата(Aimed @ 10.8.2017, 13:14) *

Вот эта строка в нем, скорее всего.

Именно! smile.gif

Автор: Aimed 10.8.2017, 14:00

Цитата(Александр Needle™ @ 10.8.2017, 12:47) *

Именно! smile.gif


Предпологаю что эту настройку ввели исключительно для жителей США, возможно для других англоязычных стран, которым ASCII фонт больше нравится.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)