Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи > Патчи на рассмотрении

Важная информация

Патчи на рассмотрении Рассматриваемые к принятию патчи

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.03.2011, 15:11   #1
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию [patch]real usage of MapDifficulty.dbc

Что-то тут совсем скучно стало. Попробую повеселить
собственно сабж.
внимание! патч не полностью совместим с чистым ядром, но наложить вручную можно. при наличии интереса Team сделаю версию для clean core.
https://github.com/rsa/mangos/commit...739a20c957e2dd
оно же диффом
https://github.com/rsa/mangos/commit...0c957e2dd.diff
Что делает патч? Да в общем-то почти и ничего. Просто вместо использования специально подготавливаемого обрезка таблицы из темы, мы используем всю таблицу (а в ней есть некоторые данные, нужные серверу, так в частности верные сообщения при запрете входа в инстанс, а также флаг наличия кондиций для входа)
ну и некоторые эти данные уже используются (хотя их использование в HandleAreaTriggerOpcode() с моей точки зрения грязный хак, но так уж сделано в оригинале).
использование остальных данных уже требует custom патчей на календарь от LordJZ, верный расчет времени сброса инстансов и находящийся в наст. время в работе патч на CMSG_SET_SAVED_INSTANCE_EXTEND.
rsa вне форума   Ответить с цитированием
Старый 07.03.2011, 15:57   #2
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Код:
-    //uint32      textFlags;                                // 19
+    uint32      mapDifficultyFlags;                         // 19
уже в корне неверно. Это битмаска, как-то связанная с локализацией и не имеет ничего общего с тем, как вы эти данные используете...

И вообще почему тема в разделе скриптов?

Последний раз редактировалось TOM_RUS; 07.03.2011 в 16:00.
TOM_RUS вне форума   Ответить с цитированием
Старый 07.03.2011, 16:48   #3
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от TOM_RUS Посмотреть сообщение
Код:
-    //uint32      textFlags;                                // 19
+    uint32      mapDifficultyFlags;                         // 19
уже в корне неверно. Это битмаска, как-то связанная с локализацией и не имеет ничего общего с тем, как вы эти данные используете...

И вообще почему тема в разделе скриптов?
из нее используется только 1 битфлаг, который говорит что на пару сложности есть текстовое сообщение. но не факт что в дальнейшем не будет другого. а в разделе скриптов - сорри, промазал
tempura, пожалуйста, перекинь если не трудно...
rsa вне форума   Ответить с цитированием
Старый 07.03.2011, 17:27   #4
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Насколько я помню "char* areaTriggerText" сам клиент выдает на TRANSFER_ABORT_DIFFICULTY
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Старый 07.03.2011, 17:45   #5
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Vladimir Посмотреть сообщение
Насколько я помню "char* areaTriggerText" сам клиент выдает на TRANSFER_ABORT_DIFFICULTY
возможно и выдает, но не на TRANSFER_ABORT_DIFFICULTY точно, а на что именно - я не знаю. знал бы - естественно вставил бы его. получать при входе в HOR или яму сарона сообщение о недостаточном уровне как-то поднадоело, раз в ДБЦ есть совершенно легальное сообщение о требуемом квесте.
rsa вне форума   Ответить с цитированием
Старый 07.03.2011, 17:53   #6
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Код:
signed int __cdecl Packet_SMSG_TRANSFER_ABORTED(int _4D4, int a2, int a3, CDataStore *a4)
{
  MapEntry *mapEntry; // edi@3
  char *luaText2; // eax@10
  MapDifficultyEntry *mapDiffEntry; // eax@13
  char *luaText; // [sp-10h] [bp-4DCh]@5
  signed int v9; // [sp-Ch] [bp-4D8h]@5
  int v10; // [sp-8h] [bp-4D4h]@5
  char buf[1024]; // [sp+4h] [bp-4C8h]@23
  char a1[64]; // [sp+404h] [bp-C8h]@10
  char v13[64]; // [sp+444h] [bp-88h]@17
  char v14[64]; // [sp+484h] [bp-48h]@16
  int mapId; // [sp+4C4h] [bp-8h]@1
  unsigned __int8 v16; // [sp+4C8h] [bp-4h]@17
  unsigned __int8 v17; // [sp+4C9h] [bp-3h]@10
  char reason; // [sp+4CAh] [bp-2h]@1
  unsigned __int8 diff; // [sp+4CBh] [bp-1h]@13

  CDataStore__GetInt32(a4, (int)&mapId);
  CDataStore__GetInt8(a4, (int)&reason);
  if ( mapId >= g_MapDB.minIndex )
  {
    if ( mapId <= g_MapDB.maxIndex )
    {
      mapEntry = (MapEntry *)g_MapDB.Rows[mapId - g_MapDB.minIndex];
      if ( mapEntry )
      {
        switch ( reason )
        {
          case 1:
            v10 = 0;
            v9 = -1;
            luaText = "TRANSFER_ABORT_ERROR";
            goto LABEL_20;
          case 2:
            v10 = 0;
            v9 = -1;
            luaText = "TRANSFER_ABORT_MAX_PLAYERS";
            goto LABEL_20;
          case 3:
          case 0xC:
          case 0xD:
          case 0xE:
            v10 = 0;
            v9 = -1;
            luaText = "TRANSFER_ABORT_NOT_FOUND";
            goto LABEL_20;
          case 4:
            v10 = 0;
            v9 = -1;
            luaText = "TRANSFER_ABORT_TOO_MANY_INSTANCES";
            goto LABEL_20;
          case 6:
            v10 = 0;
            v9 = -1;
            luaText = "TRANSFER_ABORT_ZONE_IN_COMBAT";
            goto LABEL_20;
          case 7:
            CDataStore__GetInt8(a4, (int)&v17);
            SStrPrintf(a1, 64, "TRANSFER_ABORT_INSUF_EXPAN_LVL%d", v17);
            luaText2 = FrameScript__GetText(a1, -1, 0);
            goto LABEL_21;
          case 0xB:
            v10 = 0;
            v9 = -1;
            luaText = "TRANSFER_ABORT_NEED_GROUP";
            goto LABEL_20;
          case 0xF:
            v10 = 0;
            v9 = -1;
            luaText = "TRANSFER_ABORT_REALM_ONLY";
            goto LABEL_20;
          case 8:
            CDataStore__GetInt8(a4, (int)&diff);
            mapDiffEntry = (MapDifficultyEntry *)GetMapDifficultyInfoByMapIdAndDifficulty(mapEntry->MapID, diff, 0);
            if ( !mapDiffEntry || (luaText2 = mapDiffEntry->areaTriggerText, !luaText2) || !*luaText2 )
            {
              SStrPrintf(v14, 64, "TRANSFER_ABORT_DIFFICULTY%d", diff + 1);
              luaText2 = FrameScript__GetText(v14, -1, 0);
            }
            goto LABEL_21;
          case 9:
            CDataStore__GetInt8(a4, (int)&v16);
            SStrPrintf(v13, 64, "TRANSFER_ABORT_UNIQUE_MESSAGE%d", v16);
            luaText2 = FrameScript__GetText(v13, -1, 0);
            goto LABEL_21;
          case 0xA:
            v10 = 0;
            v9 = -1;
            luaText = "TRANSFER_ABORT_TOO_MANY_REALM_INSTANCES";
            goto LABEL_20;
          case 0x10:
            v10 = 0;
            v9 = -1;
            luaText = "TRANSFER_ABORT_MAP_NOT_ALLOWED";
LABEL_20:
            luaText2 = FrameScript__GetText(luaText, v9, v10);
LABEL_21:
            if ( luaText2 )
            {
              if ( *luaText2 )
              {
                SStrPrintf(buf, 1024, luaText2, mapEntry->name);
                ChatFrame__AddMessage(buf, 0, 0, 0, 0, 0, 0, 0i64, 0, 0i64, 0, 0, 0);
              }
            }
            break;
          default:
            break;
        }
      }
    }
  }
  ConsolePrintf("World transfer aborted...");
  sub_409550();
  return 1;
}
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
rsa (07.03.2011)
Старый 07.03.2011, 17:59   #7
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Значит будем копать Player::SendTransferAborted
поскольку сообщение приходит левое.

Разобрался. Приходит (и видимо проблема моя). Но в чате... Категорически некрасиво, себе лучше оставлю как здесь опубликовано.
А для общественности - часть в MisсHandler() не читать, остальное в силе.

Последний раз редактировалось rsa; 07.03.2011 в 19:08.
rsa вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[10717] Revert "[10716][10688] New version of patch for send real diff from last update." newsbot CMaNGOS Commits 0 10.11.2010 06:00
[10688] New version of patch for send real diff from last update. newsbot CMaNGOS Commits 8 07.11.2010 23:30
[a bit of research] ACE Reactor usage. Astellar Патчи 4 25.06.2010 09:14
[10081][idea] Drop usage of DOTCONFDocument. Astellar Принятые патчи 8 20.06.2010 00:55


Текущее время: 05:57. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot