Yoko
http://forum.yoko.com.ua/

RunUO and Mondain's Legacy workaround.
http://forum.yoko.com.ua/viewtopic.php?f=1&t=7641
Page 1 of 1

Author:  ziemni [ 2006-05-10 12:12:31 ]
Post subject:  RunUO and Mondain's Legacy workaround.

Hi.

Since RunUO sends diffrent damage packets to clients above or equal to "4.0.7a" than old ones (which are causing Injection powered clients to hang), it is easy to avoid it by setting your client version to older one. Problem when your shard demands new client, but it's kind of workaround for most people.

From RunUO code:

Code:
   public sealed class DamagePacketOld : Packet
   {
      public DamagePacketOld( Mobile m, int amount ) : base( 0xBF )
      {
         EnsureCapacity( 11 );

         m_Stream.Write( (short) 0x22 );
         m_Stream.Write( (byte) 1 );
         m_Stream.Write( (int) m.Serial );

         if ( amount > 255 )
            amount = 255;
         else if ( amount < 0 )
            amount = 0;

         m_Stream.Write( (byte)amount );
      }
   }

   public sealed class DamagePacket : Packet
   {
      public static readonly ClientVersion Version = new ClientVersion( "4.0.7a" );

      public DamagePacket( Mobile m, int amount ) : base( 0x0B, 7 )
      {
         m_Stream.Write( (int) m.Serial );

         if ( amount > 0xFFFF )
            amount = 0xFFFF;
         else if ( amount < 0 )
            amount = 0;

         m_Stream.Write( (ushort) amount );
      }

      /*public DamagePacket( Mobile m, int amount ) : base( 0xBF )
      {
         EnsureCapacity( 11 );

         m_Stream.Write( (short) 0x22 );
         m_Stream.Write( (byte) 1 );
         m_Stream.Write( (int) m.Serial );

         if ( amount > 255 )
            amount = 255;
         else if ( amount < 0 )
            amount = 0;

         m_Stream.Write( (byte)amount );
      }*/
   }



and

Code:
            if ( amount > 0 && (ourState != null || theirState != null) )
            {
              Packet p = null;// = new DamagePacket( this, amount );

              if ( ourState != null )
              {
                bool newPacket = ( ourState.Version != null && ourState.Version >= DamagePacket.Version );

                if ( newPacket )
                  p = new DamagePacket( this, amount );
                else
                  p = new DamagePacketOld( this, amount );

                ourState.Send( p );
              }

              if ( theirState != null && theirState != ourState )
              {
                bool newPacket = ( theirState.Version != null && theirState.x >= DamagePacket.Version );

                if ( newPacket && ( p == null || !(p is DamagePacket) ) )
                  p = new DamagePacket( this, amount );
                else if ( !newPacket && ( p == null || !(p is DamagePacketOld) ) )
                  p = new DamagePacketOld( this, amount );
                        
                theirState.Send( p );
              }

Author:  omi4 [ 2006-05-16 11:29:30 ]
Post subject: 

Исходники которые доступны умеют обрабатывать пакеты до 0xCC, текущая версия для меня тайна. Но то, что она не понимает пакеты 0xDC, 0xDD это точно. Вот и получаем краш.

Вот те пакеты что отсутствуют в доступной версии исходников…
Code:
//-------------------------------------------------------------
/* 0xCD */ UMSG(0x02), // Unknown
/* 0xCE */ UMSG(0x02), // Unknown
/* 0xCF */ SMSGH("Account Login 2", 0x3e, handle_first_login),
         /* Login to the login server. At present, OSI really uses 0x80 packets,
         but this one absolutely identified to 0x80. */
/* 0xD0 */ BMSG("Configuration File", 0x02),
/* 0xD1 */ BMSG("Logout Status", 0x02),
/* 0xD2 */ UMSG(0x02), // Unknown
/* 0xD3 */ UMSG(0x02), // Unknown
/* 0xD4 */ BMSG("Book Header", SIZE_VARIABLE),
/* 0xD5 */ UMSG(0x02), // Unknown

/* 0xD6 */ BMSG("Batch Query Properties", SIZE_VARIABLE),
         /*
         D6 - Batch Query Properties
         Batch Query Properties (Client version)
         Client sends serials of items from 0x3C packet and server sends Object
         Properties packet as answer
         */

/* 0xD6 */ // BMSG("Object Properties", SIZE_VARIABLE),
         /*
         D6 - Object Properties
         Object Properties (Server version)
         */

/* 0xD7 */ BMSG("Generic Command", SIZE_VARIABLE),
/* 0xD8 */ BMSG("Design State Detailed", SIZE_VARIABLE),
/* 0xD9 */ BMSG("Hardware Info", SIZE_VARIABLE),
/* 0xDA */ BMSG("Mahjong Game Commands", SIZE_VARIABLE),
/* 0xDB */ UMSG(0x02), // Unknown
/* 0xDC */ BMSG("OPLInfo - since 4.0.5a client", SIZE_VARIABLE),
/* 0xDD */ BMSG("Generic Gump - since 5.0.0a client", SIZE_VARIABLE),
// --------------------------------------------------------------


Damage Packet влияет только на 4.0.7a client !! По идее можно на это забить. Без этого клиента жить можно.

Code:
/* 0x0B */ UMSG(0x10a),
/* 0x0B */             
/* - Damage Packet : since 4.0.7a client !!
Damage Packet
0x7 bytes
byte   ID (0B)
dword   Serial
word   Amount of damage
*/


Есть еще один хитрый пакет 0xD3, в данный момент его ранка не использует. По причине отсутствия понимания его цели. Вот его описание.

http://kec.cz/tartaros/steamengine/uploads/Keirs%20packet%20guide/www.kairtech.com/uo/info/packetd3.htm

Author:  Edred [ 2006-05-16 12:04:12 ]
Post subject: 

Ты все здорово ему описал, только он, если ты не заметил, по-русски не понимает... :cry:

Author:  omi4 [ 2006-05-16 12:46:07 ]
Post subject: 

Edred wrote:
Ты все здорово ему описал, только он, если ты не заметил, по-русски не понимает... :cry:


Он переводчиком читает.

Может Yoko прочтет и поправит 3 строчки в 2х файлах. И будет у нас версия 505.19 которая хотя бы не падает на новых клиентах...

Author:  Edred [ 2006-05-16 18:42:30 ]
Post subject: 

ты имел в виду 605.16 наверное :wink:

Author:  omi4 [ 2006-05-16 20:23:51 ]
Post subject: 

Edred wrote:
ты имел в виду 605.16 наверное :wink:


последняя 505.18 вроде?

Author:  SLAK [ 2006-05-16 20:42:37 ]
Post subject: 

omi4 wrote:
Последняя 505.18 вроде?

выпущенная 18 числа 05 месяца 2005 года... подумай откуда я это взял? :wink:

Author:  omi4 [ 2006-05-16 20:59:50 ]
Post subject: 

SLAK wrote:
omi4 wrote:
Последняя 505.18 вроде?

выпущенная 18 числа 05 месяца 2005 года... подумай откуда я это взял? :wink:


Не знаю где взял..
505.18 имет дату 11 июля 2005 г., 9:31:26

Author:  Edred [ 2006-05-17 00:10:45 ]
Post subject: 

omi4 wrote:
Не знаю где взял..
505.18 имет дату 11 июля 2005 г., 9:31:26


Что означает только, что Йоко при компиляции забыл исправить номер версии... Стандартная "ошибка" программистов, сам совершал ее множество раз.

Author:  omi4 [ 2006-05-17 12:12:09 ]
Post subject: 

Наоборот исправил. Вендор собрал 505.16 о чем сообщено в топе Update, но видимо рука дрогнула и он исправил на 605. Yoko вернул нумерацию на место.

Вендор поправил только момент соединения с сервером, клиенты 4.х.х немного по другому регистрируются на сервере и использовал новую библиотеку libexpat.dll. Просто старый expat скачать негде, да и незачем. Новая ДЛЛ похоже более устойчивая, хмл не терялся не разу после ее установки.

Author:  forbmannn1 [ 2006-07-07 01:02:25 ]
Post subject: 

really?:)

Page 1 of 1 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/