|
Опкоды, Формулы, Клиент Разбор и изучение взаимодействия клиента с сервером |
|
Опции темы | Поиск в этой теме | Опции просмотра |
10.04.2011, 09:54 | #41 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Еще вопросик - что присылает сервер после выбора рейда (не случайного подземелья а рейда) кроме SMSG_UPDATE_LFG_LIST, в момент нажатия кнопки "подписаться". Я тут это дело захакал но не уверен что правильно...
|
10.04.2011, 10:06 | #42 |
Гость
Сообщений: n/a
|
ну поскольку хоть сколько-нибудь вменяемое описание кже известной части протокола отсутствует - TC это один из самых доступных источников информации о структуре пакетов (правда работает ли то, что там написано я вообще говоря не уверен)
Попробую с несколькими очередями (только не 3, а 5). Для временной реализации сойдет, пока оптимального решения задачи не будет. |
10.04.2011, 10:11 | #43 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
@finomen - ваша стопиЦЦотая попытка привинтить старый LFG патч (это не с тринити, те уже давным-давно ушли дальше) закончится так же как и все делавшиеся до этого. я уже через это прошел.
|
10.04.2011, 11:30 | #44 | |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Цитата:
|
|
Пользователь сказал cпасибо: | rsa (10.04.2011) |
10.04.2011, 12:03 | #45 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
у-у-уххх... я всегда был не очень хорошего мнения о близзовых кодерах, но по моему это перебор китайцев у них слишком много... или это просто не повезло с ответом на запрос?
|
10.04.2011, 12:17 | #46 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Нет, такое всегда. Причем это нормально. Во многих местах так. http://paste2.org/p/1354836
Добавлено: Правда, у мангоса такое же есть, например при создании персонажа левые пакеты приходят |
11.04.2011, 06:56 | #47 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Вчера 2 часа пытался отправить клиенту SMSG_LFG_UPDATE_LIST в самых разных вариантах. Вывод - структурка не совсем та что опубликована, или какие-то из флагов работают по другому. Придется перекапывать дизасмы. Зато появилось предположение по поводу флагов unk2/unk4 (по вашей классификации) - какой-то из них ставится когда у игрока есть бинд на это подземелье и за ним отправляется uint32 с энкаунтерами.
|
12.04.2011, 12:43 | #48 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Так. Очередная порция вопросов. Что шлет клиент при нажатии кнопки "обновить" в списке рейдов? Никак поймать не могу, ни один из текущих опкодов там не попался.
Нет ли у кого куска сниффа с SMSG_LFG_UPDATE_LIST в котором есть группы? Не пойму как их отправлять. Какие статы показываются клиенту в игре при наведении мышки на члена списка райдов? Упорно не хочет давать ничего кроме класса , уровня и ролей. И напоследок результаты раскопок - флаги в UpdateFlags должны быть взведены все обязательно, иначе у клиента едет крыша. Флаг 0x80 присылается если у таргета есть бинд на этот инстанс, "под" ним идет гуид инстанса и энкаунтер таргета. |
12.04.2011, 16:30 | #49 |
Модератор
|
по нажатию кнопки "Обновить"
LFRFrame.xml Код:
<Button name="$parentRefreshButton" inherits="UIPanelButtonTemplate2" text="REFRESH"> ....... <OnClick> PlaySound("UChatScrollButton"); RefreshLFGList(); </OnClick> <OnUpdate function="LFRBrowseFrameRefreshButton_OnUpdate"/> </Scripts> </Button> Код:
FrameScript__SignalEvent(EVENT_UPDATE_LFG_LIST, 0); Код:
local name, level, areaName, className, comment, partyMembers, status, class, encountersTotal, encountersComplete, isLeader, isTank, isHealer, isDamage = SearchLFGGetResults(index); Следовательно, данные уже должны лежать в клиентских структурах/массивах/переменных ПС : это как на примере с рандом БГ, только там глобальные переменные, значения в которые записывается через пакет SMSG_BATTLEFIELD_LIST, а забираются для интерфейса lua-шкой GetRandomBGHonorCurrencyBonuses Последний раз редактировалось MaS0n; 12.04.2011 в 16:37. |
2 пользователя(ей) сказали cпасибо: | Konctantin (12.04.2011), rsa (12.04.2011) |
17.04.2011, 15:13 | #51 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Интересующихся информирую, что LFR у меня вроде бы работает. По крайней мере все откопанные в сети скрины с этой фичей выдаются нормально, аддоны работают К сожалению я так и не получил даже устной информации, как в списке должны отображаться стоящие в очереди группы (или их лидеры?) поэтому их нет. Как будут данные - так и появятся.
|
17.04.2011, 15:24 | #52 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Цитата:
http://i.imgur.com/543t9.png Последний раз редактировалось TOM_RUS; 17.04.2011 в 15:29. |
|
17.04.2011, 15:27 | #53 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
список убитых боссов - точнее пройденных в этом подземелье энкаунтеров - отображается для любого игрока независимо от группы, если есть бинд на этот инстанс. это работает нормально.
по поводу иконки лидера - ни одним флагом не смог заставить ее показывать нужен снифф с хотя бы одним таким пакетом напосмотреть... |
17.04.2011, 15:31 | #54 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Добавил скриншот. Там же в тултипе отображается если в данной группе есть кто-то из вашего игнор листа/фрэнд листа (видимо где-то отправляется список всех игроков в группе и клиент сам сканирует игнор лист на предмет наличия некоторых личностей).
Последний раз редактировалось TOM_RUS; 17.04.2011 в 16:03. |
Пользователь сказал cпасибо: | rsa (17.04.2011) |
17.04.2011, 15:42 | #56 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Не отображаются насколько я знаю. Даже встать в список рейдов нельзя если вы в группе и не лидер, только просматривать...
Последний раз редактировалось TOM_RUS; 17.04.2011 в 15:44. |
17.04.2011, 16:17 | #57 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Кстати, SearchLFGGetResults(index) возвращает еще дополнительно 24 аргумента кроме тех что близы используют:
Код:
signed int __usercall AddLFGPlayerInfo<eax>(LFGInfoPlayer *a1<edi>, int pLuaState<esi>) { signed int result; // eax@2 if ( a1 ) { FrameScript__pushboolean(pLuaState, a1->roles & 1); // isLeader FrameScript__pushboolean(pLuaState, a1->roles & 2); // isTank FrameScript__pushboolean(pLuaState, a1->roles & 4); // isHealer FrameScript__pushboolean(pLuaState, a1->roles & 8); // isDamage FrameScript__PushNumber(pLuaState, a1->Unk1); FrameScript__PushNumber(pLuaState, a1->Spec[0]); FrameScript__PushNumber(pLuaState, a1->Spec[1]); FrameScript__PushNumber(pLuaState, a1->Spec[2]); FrameScript__pushboolean(pLuaState, a1->dword8C); FrameScript__PushNumber(pLuaState, a1->Armor); FrameScript__PushNumber(pLuaState, a1->SpellDamage); FrameScript__PushNumber(pLuaState, a1->SpellHeal); FrameScript__PushNumber(pLuaState, a1->HasteMelee); FrameScript__PushNumber(pLuaState, a1->HasteRanged); FrameScript__PushNumber(pLuaState, a1->HasteSpell); FrameScript__PushNumber(pLuaState, a1->MP5); FrameScript__PushNumber(pLuaState, a1->MP5_Combat); FrameScript__PushNumber(pLuaState, a1->AttackPower); FrameScript__PushNumber(pLuaState, a1->Agility); FrameScript__PushNumber(pLuaState, a1->Health); FrameScript__PushNumber(pLuaState, a1->Mana); FrameScript__PushNumber(pLuaState, a1->Unk2); FrameScript__PushNumber(pLuaState, a1->Defence); FrameScript__PushNumber(pLuaState, a1->Dodge); FrameScript__PushNumber(pLuaState, a1->Block); FrameScript__PushNumber(pLuaState, a1->Parry); FrameScript__PushNumber(pLuaState, a1->Crit); FrameScript__PushNumber(pLuaState, a1->Expertise); result = 28; } else { FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushboolean(pLuaState, 0); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); FrameScript__pushnil(pLuaState); result = 28; } return result; } |
17.04.2011, 16:19 | #58 |
Ученый
|
|
17.04.2011, 16:30 | #59 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
@TOM_RUS и в моей реализации все эти данные (кроме неопознанных, вроде MP5) нормально передаются. их используют аддоны.
@shadez - это было бы нелогично, потому что тогда незачем передавать энкаунтеры подземелий. нельзя встать если подземелье полностью пройдено - вот это сделано, благо таблица DungeonEncounter.dbc у меня используется. |
17.04.2011, 16:34 | #60 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Цитата:
Код:
local name, level, areaName, className, comment, partyMembers, status, class, encountersTotal, encountersComplete, isLeader, isTank, isHealer, isDamage = SearchLFGGetResults(index); |
|
17.04.2011, 16:42 | #61 |
Ученый
|
|
17.04.2011, 16:50 | #62 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
LFG++ для примера.
http://wow.curse.com/downloads/wow-a...tails/lfg.aspx Добавлено через 50 секунд но место для передачи данных есть и у каждого игрока. думаю передаются тоже если подземелье частично пройдено. по крайней мере у меня отлично отображается, оттестировано Последний раз редактировалось rsa; 17.04.2011 в 16:53. |
17.04.2011, 16:52 | #63 | |
Модератор
|
Цитата:
Код:
local name, level, areaName, className, comment, partyMembers, status, class, encountersTotal, encountersComplete, isLeader, isTank, isHealer, isDamage = SearchLFGGetResults(index); Код:
if ( partyMembers > 0 ) then button.type = "party"; button.partyIcon:Show(); button.tankIcon:Hide(); button.healerIcon:Hide(); button.damageIcon:Hide(); else button.type = "individual"; button.partyIcon:Hide(); TOM_RUS - жжжесть в хорошем смысле, научите плз как делать структуры клиентские, в IDA структуры то я делать умею, а вот как считать смещения для клиентских структур, мб что-то еще нужно, намекните |
|
Пользователь сказал cпасибо: | rsa (17.04.2011) |
17.04.2011, 18:03 | #65 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Кстати, список гуидов в начале пакета SMSG_LFG_SEARCH_RESULTS помоему для удаления из списка, везде SMemFree() вызывается для LfgPlayerInfo/LfgGroupInfo по их гуиду.
Флаги 0x04, 0x08 каким-то образом связаны с группой игрока: http://paste2.org/p/1368410 Добавлено через 5 минут Цитата:
Добавлено через 55 минут Вручную, либо через "Create new struct type", или через "Convert to struct *" для уже созданных структур. Потом подгонять структуру по размеру, переименовывать поля, менять их тип и т.д. Последний раз редактировалось TOM_RUS; 17.04.2011 в 17:59. |
|
17.04.2011, 19:14 | #66 |
Модератор
|
|
17.04.2011, 19:23 | #67 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Ну конкретно для этого опкода бралось из снифов, часть можно по "документации" lua проследить.
Код:
struct LFGInfoGroup { _DWORD dword0; _DWORD dword4; _DWORD dword8; _DWORD dwordC; _DWORD dword10; _DWORD dword14; WGUID guid18; _DWORD Index; char comment[256]; char roles[4]; WGUID instanceGuid; _DWORD encountersCompletedMask; _DWORD dword134; _DWORD numGroupMembers; LFGInfoPlayer **GroupMembers; _DWORD dword140; _DWORD dword148; }; struct LFGInfoPlayer { _DWORD dword0; _DWORD dword4; _DWORD dword8; _DWORD dwordC; _DWORD dword10; _DWORD dword14; WGUID guid18; _DWORD Index; _DWORD numGroupMembers; LFGInfoGroup *groupInfo; char Level; char Class; char Race; char Spec[4]; char pad0; _DWORD Armor; _DWORD SpellDamage; _DWORD SpellHeal; _DWORD HasteMelee; _DWORD HasteRanged; _DWORD HasteSpell; float MP5; float MP5_Combat; _DWORD AttackPower; _DWORD Agility; _DWORD Health; _DWORD Mana; _DWORD Unk1; float Unk2; _DWORD Defence; _DWORD Dodge; _DWORD Block; _DWORD Parry; _DWORD Crit; _DWORD Expertise; _DWORD areaId; _DWORD status; _DWORD IsInGroup; char roles; char comment[256]; char pad1[3]; _DWORD dword94; WGUID instanceGuid; _DWORD encountersCompletedMask; _DWORD unk2; }; Код:
playerInfo = (LFGInfoPlayer *)SMemAlloc(0x1A8u, (int)".\\LFGInfo.cpp", 0x2D1u, 0); groupInfo = (LFGInfoGroup *)SMemAlloc(0x148u, (int)".\\LFGInfo.cpp", 0x2BEu, v12); Последний раз редактировалось TOM_RUS; 17.04.2011 в 19:29. |
17.04.2011, 19:50 | #68 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
|
17.04.2011, 19:51 | #69 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Судя по коду, отправляется весь список игроков и групп, а клиент уже сам разбирается исходя из полученных данных отдельно игрок стоит или в составе группы.
Поле "_DWORD IsInGroup" возможно IsGroupLeader..., т.к. уже есть поле с гуидом группы игрока, т.е. он уже как бы в группе... Что значит поле "status" тоже не понятно, известно что оно может принимать только булевые значения и ни в одном клиентском скрипте не используется. Поле areaId надо бы добавить, и соответствующий флаг поправить... Последний раз редактировалось TOM_RUS; 17.04.2011 в 21:18. |
17.04.2011, 21:53 | #70 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Всем спасибо за обсуждение, особенно TOM_RUS. Несмотря на почти полностью выясненную структуру SMSG (судя по коду, игрок начинает считаться лидером если байт под флагом 04 >0, и там же находится число членов группы), получить икону лидера в клиенте так и не удалось... Осталась последняя идея связанная с неверным формированием ObjectGuid группы - почему-то клиент не берет гуиды групп из 1 го блока данных опкода (перебор групп) и не вливает их в LFGInfoGroup *groupInfo данных игрока. Хотя гуид и там и там один и тот же... Буду колупать дальше.
Список гуидов в начале опкода - для чистки кэша клиента, там должны передаваться гуиды ушедших из очереди. Пока делать не буду, довольно сложная история. |
17.04.2011, 22:10 | #71 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Цитата:
Код:
int __thiscall GetPartyMembersCount(LFGInfoGroup *this) { unsigned int num; // eax@1 int result; // eax@2 num = this->group.numGroupMembers; if ( num <= 1 ) result = 0; else result = num - 1; return result; } void __thiscall sub_556E60(LFGInfoGroup *this, LFGInfoPlayer *player) { LFGInfoGroup *_this; // esi@1 int num; // edi@2 int i; // eax@3 _this = this; if ( player->numGroupMembers < 0 ) { num = this->group.numGroupMembers; ReallocGroupMembers(&this->group, num + 1); if ( player->IsInGroup ) { for ( i = num; i > 0; --i ) { _this->group.GroupMembers[i] = _this->group.GroupMembers[i - 1]; _this->group.GroupMembers[i]->numGroupMembers = i; } *_this->group.GroupMembers = player; player->numGroupMembers = 0; } else { _this->group.GroupMembers[num] = player; player->numGroupMembers = num; } } } void __thiscall ReallocGroupMembers(LFGGroup *this, unsigned int num) { LFGGroup *_this; // edi@1 unsigned int v3; // ecx@3 unsigned int v4; // ebx@5 _this = this; if ( num > this->numGroupMembers ) { if ( num > this->numGroupMembers2 ) { v3 = this->dword140; if ( !v3 ) v3 = sub_5D0040(_this, num); v4 = num; if ( num % v3 ) v4 = num + v3 - num % v3; sub_5532C0(_this, v4); } } _this->numGroupMembers = num; } Последний раз редактировалось TOM_RUS; 17.04.2011 в 22:34. |
|
17.04.2011, 22:18 | #72 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
PS я с трудом представляю как в гуид можно затолкать число игроков. оно ж переменное... |
|
17.04.2011, 22:31 | #73 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Обновил код выше, numGroupMembers действительно заполняется клиентом самостоятельно.
P.S. Седня ночью тестировал опкод SMSG_LFG_SEARCH_RESULTS, иконка лидера без каких либо проблем отображается, даже если идет 0 для флага 0x04... А вот как сделать чтобы отображалось Код:
ERR_LFG_JOINED_LIST = "You are now listed in the Raid Browser."; ERR_LFG_LEFT_LIST = "You are no longer listed in the Raid Browser."; Код:
ERR_LFG_JOINED_QUEUE = "You are now queued in the Dungeon Finder."; ERR_LFG_LEFT_QUEUE = "You are no longer queued in the Dungeon Finder."; Последний раз редактировалось TOM_RUS; 18.04.2011 в 06:13. |
18.04.2011, 07:04 | #74 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
а вот группу и икону лидера получить не могу никак... что где отправить для этого? если надо - мой текущий код в https://github.com/rsa/mangos/blob/m...LFGHandler.cpp |
|
18.04.2011, 07:57 | #75 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Цитата:
Последний раз редактировалось TOM_RUS; 18.04.2011 в 08:16. |
|
18.04.2011, 10:55 | #76 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
надеюсь дошло где туплю - я только лидера посылал, членов группы нет, они ж все равно не отображаются. попробую всех отправить (вот тут наконец и флаги пригодятся).
|
18.04.2011, 12:31 | #77 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
|
18.04.2011, 12:41 | #78 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Накалякал аддон, которых использует недокументированные поля в списке рейдов:
http://filebeam.com/d2614f5b1904584e...2ed29ef6a2.jpg http://i.imgur.com/U6xBq.jpg Последний раз редактировалось TOM_RUS; 18.04.2011 в 14:09. |
18.04.2011, 13:42 | #79 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
Где его взять?
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
18.04.2011, 13:49 | #80 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Последний раз редактировалось TOM_RUS; 18.04.2011 в 18:12. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопросы по использованию Git | anvd24 | Новичкам | 21 | 25.01.2012 09:17 |
Вопросы по базе | Mediv | MaNGOSZero (1.12.X) | 10 | 13.04.2011 04:31 |
Вопросы от новичка | Archon64 | MaNGOSZero (1.12.X) | 6 | 04.05.2010 13:25 |