Здравствуйте, гость ( Вход | Регистрация )

> Tiledata
Александр Needle™
сообщение 22.10.2017, 0:59
Сообщение #1


********

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



del
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Frog
сообщение 24.10.2017, 21:14
Сообщение #2


****

Apprentice
Сообщений: 266
Регистрация: 6.9.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 4.172
Возраст: 25



По полям тайлдаты тут кое-что есть, но не все поля на 100% изучены.
Брал напрямую из клиента 203, в 6ххх и может даже 7ххх проверял - кроме размера поля Flags ничего не изменилось.
Подкреплю кусочком псевдокода:
Код
char LoadTiledata()
{
  FILE *file; // esi@1
  char result; // al@2
  char landIndex; // bl@3
  signed int landOffset; // edi@3
  char statiscIndex; // bl@7
  signed int staticsOffset; // edi@7

  file = OpenFile(aTiledata_mul, g_Text_rb);
  if ( file )
  {
    landIndex = 0;
    landOffset = 0;
    do
    {
      if ( !(landIndex & 0x1F) )
        SeekFile(file, 4, 1);
      ReadFileData(&g_LandTiledata[landOffset], 4u, 1u, file);
      ReadFileData(&g_LandTiledata[landOffset].TextureID, 2u, 1u, file);
      ReadFileData(g_LandTiledata[landOffset].Name, 20u, 1u, file);
      ++landOffset;
      ++landIndex;
    }
    while ( landOffset < 0x4000 );
    statiscIndex = 0;
    staticsOffset = 0;
    do
    {
      if ( !(statiscIndex & 0x1F) )
        SeekFile(file, 4, 1);
      ReadFileData(&g_StaticTiledata[staticsOffset], 4u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].Weight, 1u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].QualityOrLayer, 1u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].Count, 4u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].AnimID, 2u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].Hue, 2u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].LightIndex, 2u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].Height, 1u, 1u, file);
      ReadFileData(g_StaticTiledata[staticsOffset].Name, 20u, 1u, file);
      ++staticsOffset;
      ++statiscIndex;
    }
    while ( staticsOffset < 0x4000 );
    result = FileManager__CloseFile(file);
  }
  else
  {
    result = TraceUOReportError(aCobjectmanag_0, aTiledata_mul);
  }
  return result;
}


И чуть подробнее о некоторых полях:
Weight - используется для определения статуса Locked предметов, на уровне тайлдаты и при просчете шага
Count, Hue - предположительно, для стандартного количества и цвета (если не задан) для компонент мульти. На 100% не уверен, но использование только в конструкторе объекта статики (в клиенте конечно же).
LightIndex - судя по коду клиента - ИД источника света, но по факту пока не сходится, может быть еще нужно пошаманить с этим значением.


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 24.10.2017, 21:37
Сообщение #3


*********

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



Цитата(Frog @ 24.10.2017, 21:14) *

По полям тайлдаты тут кое-что есть, но не все поля на 100% изучены.
Брал напрямую из клиента 203, в 6ххх и может даже 7ххх проверял - кроме размера поля Flags ничего не изменилось.
Подкреплю кусочком псевдокода:
Код
char LoadTiledata()
{
  FILE *file; // esi@1
  char result; // al@2
  char landIndex; // bl@3
  signed int landOffset; // edi@3
  char statiscIndex; // bl@7
  signed int staticsOffset; // edi@7

  file = OpenFile(aTiledata_mul, g_Text_rb);
  if ( file )
  {
    landIndex = 0;
    landOffset = 0;
    do
    {
      if ( !(landIndex & 0x1F) )
        SeekFile(file, 4, 1);
      ReadFileData(&g_LandTiledata[landOffset], 4u, 1u, file);
      ReadFileData(&g_LandTiledata[landOffset].TextureID, 2u, 1u, file);
      ReadFileData(g_LandTiledata[landOffset].Name, 20u, 1u, file);
      ++landOffset;
      ++landIndex;
    }
    while ( landOffset < 0x4000 );
    statiscIndex = 0;
    staticsOffset = 0;
    do
    {
      if ( !(statiscIndex & 0x1F) )
        SeekFile(file, 4, 1);
      ReadFileData(&g_StaticTiledata[staticsOffset], 4u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].Weight, 1u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].QualityOrLayer, 1u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].Count, 4u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].AnimID, 2u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].Hue, 2u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].LightIndex, 2u, 1u, file);
      ReadFileData(&g_StaticTiledata[staticsOffset].Height, 1u, 1u, file);
      ReadFileData(g_StaticTiledata[staticsOffset].Name, 20u, 1u, file);
      ++staticsOffset;
      ++statiscIndex;
    }
    while ( staticsOffset < 0x4000 );
    result = FileManager__CloseFile(file);
  }
  else
  {
    result = TraceUOReportError(aCobjectmanag_0, aTiledata_mul);
  }
  return result;
}


И чуть подробнее о некоторых полях:
Weight - используется для определения статуса Locked предметов, на уровне тайлдаты и при просчете шага
Count, Hue - предположительно, для стандартного количества и цвета (если не задан) для компонент мульти. На 100% не уверен, но использование только в конструкторе объекта статики (в клиенте конечно же).
LightIndex - судя по коду клиента - ИД источника света, но по факту пока не сходится, может быть еще нужно пошаманить с этим значением.






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

Weight -> Weight
QualityOrLayer -> Quality
Count -> Miscdata | (Unkn1 << 8) | (Quantity << 16)
AnimID -> Animation
Hue -> Unk2 | (Hue << 8)
LightIndex -> StackingOff | (Value << 8)
Height -> Height

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


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
Александр Needle™   Tiledata   22.10.2017, 0:59
Aimed   Сообщений ни от кого не поступило, нашел информац...   23.10.2017, 19:36
Александр Needle™   Это все в фиддлере уже сто лет как отображается, ...   23.10.2017, 19:42
Sirocco   Зачем ты прокомментировал его сообщение, тем более...   23.10.2017, 19:39
Aimed   Зачем ты прокомментировал его сообщение, тем боле...   23.10.2017, 20:32
Александр Needle™   Притом самое смешное, что реально толку от такого...   23.10.2017, 22:03
Aimed   Это не перевод, взял из старой статьи. Практическ...   23.10.2017, 23:08
Александр Needle™   А где ты это спрашивал то? Я не могу найти эту те...   23.10.2017, 23:19
StaticZ   На форуме конечно крайне скудная возможность по оф...   24.10.2017, 15:15
Sirocco   Name Anim Weight StackOff - это не относится к ...   24.10.2017, 11:10
Александр Needle™   del   24.10.2017, 16:17
StaticZ   Тут скорей спрос с фидлера, например в клиенте фла...   24.10.2017, 18:00
Александр Needle™   del   24.10.2017, 18:28
StaticZ   Так что если рассматривать клиент в этот период, т...   24.10.2017, 19:59
Sirocco   > Height не делает предмет непроходимым , это д...   24.10.2017, 18:52
Александр Needle™   > Height не делает предмет непроходимым , это ...   24.10.2017, 23:55
Sirocco   Попробовал, не проходит. Вот ты сам написал, ...   25.10.2017, 8:20
Александр Needle™   Вот ты сам написал, что обсуждаешь клиент - так и...   25.10.2017, 11:49
Sirocco   Ну да конечно... я поменяю тайлдату под Wall Stone...   25.10.2017, 12:13
Александр Needle™   del   25.10.2017, 12:27
Sirocco   Вот кстати даже сервер использует этот параметр дл...   25.10.2017, 12:44


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 1.6.2024, 22:04
Designed by Nickostyle