|
Патчи Если кто-то хочет выложить не свой готовый патч - не забудьте указать автора и источник.
Если кто-то хочет задать вопрос по патчу - велкам. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
02.01.2011, 16:56 | #1 |
Модератор
|
[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; } Повысить уровень Основная проблема заключалась в том, что опция активировалась только при опр. условиях, и их удалось найти, опять же подебажив клиент и рассмотрев смещения полей в структурах После проходв кучи проверок доходим до такой проверки, где результат либо 0, либо 3 , 0 - это верно, 3 - вернет ошибку Код:
result = *(_BYTE *)(*((_DWORD *)v13 + 1026) + 4197) < 1u ? 3 : 0; Код:
.text:006DEB02 mov ecx, [esi+1008h] .text:006DEB08 cmp byte ptr [ecx+1065h], 1 Предлагайте свои варианты, т.к очень хотелось бы довести патч до официального репозитория Да, и я использовал отдельную таблицу для реферского(приглашающего) аккаунта и 5 реферралов(приглашенных) - мб тоже какой-то более рациональный способ есть Ниже патч и sql - работает система просто, добавляем в таблицу ID аккаунта рефера и ID аккаунтов реферралов. Вынесение опций в конфиг, высылку на почту жевры/ракеты и прочую мелкую косметику не делал, если будет необходимость, с радостью сделаю. Ну и все замечания и предложения по патчу рассмотрю внимательно А так же отписывайтесь об ошибках, я мог позабыть что-то включить в патч, а сейчас проверить не могу С Новым Годом Последний раз редактировалось MaS0n; 02.01.2011 в 17:58. |
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) |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[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 |