Ru-MaNGOS

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

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

Патчи Если кто-то хочет выложить не свой готовый патч - не забудьте указать автора и источник.

Если кто-то хочет задать вопрос по патчу - велкам.

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.01.2011, 16:56   #1
MaS0n
Модератор
 
Регистрация: 09.03.2010
Адрес: dev/null
Сообщений: 126
Сказал(а) спасибо: 44
Поблагодарили 111 раз(а) в 47 сообщениях
MaS0n Скоро придёт к известностиMaS0n Скоро придёт к известности
Отправить сообщение для MaS0n с помощью ICQ
По умолчанию [patch/dev] Refer-A-Friend System

Собственно, патч, реализующий оффлайк систему "Пригласи друга"
Не совершенство, скорее бета-версия, но все же, ниже поясню почему

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

Призвать друга

Опция при клике на портрете друга в пати и синий шарик во френд-листе. Кстати в 3.3.5 он выставляется независимо от статуса друга, и, позволю себе поправить уважаемого TOM_RUS в посте http://ru-mangos.ru/showpost.php?p=8598&postcount=4, это не флаг, а все-таки статус, проверял в дебаге клиента на 2.4.3., тем более если структура FriendInfo соотв. близз структуре в памяти, то по смещению pointer + 1 хранится как раз таки статус
Код:
struct FriendInfo
{
    FriendStatus Status;
    uint32 Flags;
    uint32 Area;
    uint32 Level;
    uint32 Class;
Ну сейчас это не актуально, просто так, к слову.

Проблема была вот с чем, я писал в той теме, что не мог получить гуид того, кого нужно призвать, не выделяя его. Проблема "легко" решилась, когда я подетальнее разобрал lua функцию SummonFriend - там до каста спелла, если цель не в прямой видимости, а вызывается допустим через тот же шарик, шлется пакет под номером 317 - CMSG_SET_SELECTION

Код:
    v8 = 0;
    if ( stru_BD07B0.guid_low != v3 || stru_BD07B0.guid_high != v2 )
    {
      v8 = 1;
      sub_518DC0(v3, v2);
    }
    Spell_C__CastSpell(dword_BE7D88, 0, v3, v2, 0);
    if ( v8 )
    {
      sub_518DC0(stru_BD07B0.guid_low, stru_BD07B0.guid_high);
      return 0;
    }
sub_518DC0 - это и есть отправка пакета с нужным нам гуидом.

Повысить уровень

Основная проблема заключалась в том, что опция активировалась только при опр. условиях, и их удалось найти, опять же подебажив клиент и рассмотрев смещения полей в структурах

После проходв кучи проверок доходим до такой проверки, где результат либо 0, либо 3 , 0 - это верно, 3 - вернет ошибку

Код:
result = *(_BYTE *)(*((_DWORD *)v13 + 1026) + 4197) < 1u ? 3 : 0;
А проверяется тут байт, по смещению 1 в поле(PLAYER_FIELD_BYTES в мангосе), или флаг 0x100
Код:
.text:006DEB02                 mov     ecx, [esi+1008h]
.text:006DEB08                 cmp     byte ptr [ecx+1065h], 1
Оцениваем патч, смотрим код, т.к там есть хаки, например на EFFECT_SUMMON_PLAYER, текущие проверки CheckCast не поддерживают призыв друга совсем, на выставление флагов связывания и активации дарения уровня и т.д

Предлагайте свои варианты, т.к очень хотелось бы довести патч до официального репозитория

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

Ниже патч и sql - работает система просто, добавляем в таблицу ID аккаунта рефера и ID аккаунтов реферралов. Вынесение опций в конфиг, высылку на почту жевры/ракеты и прочую мелкую косметику не делал, если будет необходимость, с радостью сделаю.

Ну и все замечания и предложения по патчу рассмотрю внимательно
А так же отписывайтесь об ошибках, я мог позабыть что-то включить в патч, а сейчас проверить не могу
С Новым Годом
Вложения
Тип файла: rar refer_a_friend.rar (7.9 Кб, 62 просмотров)
Тип файла: sql refer_a_friend.sql (544 байт, 52 просмотров)

Последний раз редактировалось MaS0n; 02.01.2011 в 17:58.
MaS0n вне форума   Ответить с цитированием
22 пользователя(ей) сказали cпасибо:
Ambal (11.01.2011), Den (02.01.2011), Fear (03.01.2011), Fedia22 (02.01.2011), Feel the Power (03.01.2011), Gerald (02.01.2011), ghostpast (02.01.2011), KiriX (02.01.2011), Konctantin (02.01.2011), Lurker (31.01.2011), MaxXx2021 (29.01.2011), Nordway (02.01.2011), PSZ (02.01.2011), Ranger (22.03.2012), selector (09.01.2011), Shadez (02.01.2011), Sid (02.01.2011), SilverIce (29.01.2011), sven (09.01.2011), zergtmn (02.01.2011), Кот ДаWINчи (03.01.2011)
 


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[patch/dev] Pet stat scaling system rsa Патчи 9 22.01.2015 12:13
[10924][patch] Timer system improved Ambal Принятые патчи 26 27.12.2010 11:27
[10089] Change in event system work with pool system. newsbot CMaNGOS Commits 0 21.06.2010 05:22
[10052] Camera System newsbot CMaNGOS Commits 10 16.06.2010 02:33
[patch] Camera system SilverIce Принятые патчи 7 07.04.2010 11:23


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


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