|
Отвергнутые патчи Патчи, отвергнутые от приёма в GIT |
|
Опции темы | Поиск в этой теме | Опции просмотра |
12.03.2010, 04:18 | #1 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
[fix] Mirror Image
Реализует работу Зеркальных Изображений у магов. Проверял на версии ядра 9225. также на версии клиента 3.3.2 Ревизию ядра не помню.
Патч переводили с тринити, но он не работал (вызывал трех призраков и все), дописал его я. Имеются недочеты: 1. В дуэли иллюзии не аттакуют игрока. - поправлено! (Спасибо Set) 2. Спелл агрит мобов вокруг. - поправлено! (огромное спасибо lucky) 3. Поправлено, Движение иллюзий за магом. (Спасибо Set) 4. Поправлено, после 30 секунд иллюзии исчезают (Спасибо Dimitrius) 5. Теперь копируется имя и гильдия. (Спасибо Set) Последний раз редактировалось MaxXx2021; 24.03.2010 в 05:50. |
22 пользователя(ей) сказали cпасибо: |
12.03.2010, 04:21 | #2 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Код:
enum { SPELL_FROSTBOLT = 59638, SPELL_FIREBALL = 59637 }; /*###### ## npc_mirror_image ######*/ struct MANGOS_DLL_DECL npc_mirror_imageAI : public ScriptedAI { npc_mirror_imageAI(Creature* pCreature) : ScriptedAI(pCreature) {Reset();} uint32 m_uiFrostboltTimer; uint32 m_uiFireblastTimer; bool inCombat; uint32 LifeTime; void Reset() { LifeTime = 30000; Unit *owner = m_creature->GetOwner(); if (!owner) return; if (owner && !m_creature->hasUnitState(UNIT_STAT_FOLLOW)) { m_creature->GetMotionMaster()->Clear(false); m_creature->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); } // Inherit Master's Threat List (not yet implemented) //owner->CastSpell((Unit*)NULL, 58838, true); // here mirror image casts on summoner spell (not present in client dbc) 49866 // here should be auras (not present in client dbc): 35657, 35658, 35659, 35660 selfcasted by mirror images (stats related?) // Clone Me! m_uiFrostboltTimer = 0; m_uiFireblastTimer = 6100; inCombat = false; } void AttackStart(Unit* pWho) { if (!pWho) return; if (m_creature->Attack(pWho, true)) { m_creature->clearUnitState(UNIT_STAT_FOLLOW); // TMGs call CreatureRelocation which via MoveInLineOfSight can call this function // thus with the following clear the original TMG gets invalidated and crash, doh // hope it doesn't start to leak memory without this :-/ //i_pet->Clear(); m_creature->GetMotionMaster()->MoveChase(pWho); m_creature->getVictim()->AddThreat(m_creature); inCombat = true; } } void EnterEvadeMode() { if (m_creature->IsInEvadeMode() || !m_creature->isAlive()) return; inCombat = false; Unit *owner = m_creature->GetCharmerOrOwner(); m_creature->AttackStop(); m_creature->CombatStop(true); if (owner && !m_creature->hasUnitState(UNIT_STAT_FOLLOW)) { m_creature->GetMotionMaster()->Clear(false); m_creature->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST,PET_FOLLOW_ANGLE); } } void UpdateAI(const uint32 diff) { if (LifeTime < diff) { m_creature->RemoveFromWorld(); } else LifeTime -= diff; if (/*!m_creature->SelectHostileTarget() || */!m_creature->getVictim()) { Unit *owner = m_creature->GetCharmerOrOwner(); if (owner && owner->getVictim()) m_creature->AI()->AttackStart(owner->getVictim()); } if (inCombat && !m_creature->getVictim()) { EnterEvadeMode(); return; } if (/*!m_creature->SelectHostileTarget() || */!m_creature->getVictim()) return; if (m_uiFrostboltTimer <= diff) { DoCast(m_creature->getVictim(),59638); m_uiFrostboltTimer = 3100; }else m_uiFrostboltTimer -= diff; if (m_uiFireblastTimer <= diff) { DoCast(m_creature->getVictim(),59637,true); m_uiFireblastTimer = 6000; }else m_uiFireblastTimer -= diff; DoMeleeAttackIfReady(); } }; CreatureAI* GetAI_npc_mirror_image(Creature* pCreature) { return new npc_mirror_imageAI(pCreature); } Код:
newscript = new Script; newscript->Name = "npc_mirror_image"; newscript->GetAI = &GetAI_npc_mirror_image; newscript->RegisterSelf(); Последний раз редактировалось MaxXx2021; 17.03.2010 в 04:01. |
12.03.2010, 07:39 | #3 |
Новичок
Регистрация: 07.03.2010
Сообщений: 12
Сказал(а) спасибо: 8
Поблагодарили 6 раз(а) в 5 сообщениях
|
Мобы агрятся из-за этого
Код:
+ if (spell->Id == 55342) + { + // Set name of summons to name of caster + m_target->CastSpell((Unit *)NULL, m_spellProto->EffectTriggerSpell[m_effIndex], true); + m_isPeriodic = false; + } Код:
+ m_target->CastSpell((Unit *)NULL, m_spellProto->EffectTriggerSpell[m_effIndex], true); У меня также из-за этого было, что при вызове проекций всем мобам в округе присваивалось имя кастера у и агрились. Ну естественно после таких манипуляций проекциям имя присваиваться не будет Последний раз редактировалось lucky; 12.03.2010 в 07:45. |
Пользователь сказал cпасибо: | Limpnau (17.03.2010) |
12.03.2010, 07:50 | #4 | |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Цитата:
|
|
13.03.2010, 08:10 | #5 |
Ученый
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
|
Проблема в том, что у спелла ID - 58836 Initialize Images () - Target B (TARGET_7). Нужно реализовывать его еще, это что-то вроде массового SCRIPT_TARGET.
|
14.03.2010, 02:09 | #6 |
Ученый
|
Создаваемые копии стоят на месте если поблизости нет врагов - это нормально? При появлении врагов работают как и должны (сверил с оффом). Попробую пока из pet.cpp (или player.cpp - точно пока не знаю, предположил) вытащить функцию следования за игроком, если решения пока нет (что маловероятно).
MaNGOS 9435 (не чистое) SD2 R1581 (не чистое) YTDB R535 ACID R303 Added: Добавил в spell_effects.cpp: После summon->SetUInt32Value(UNIT_FIELD_FLAGS_2, 2064); Код:
summon->GetMotionMaster()->MoveFollow(m_caster,PET_FOLLOW_DIST,PET_FOLLOW_ANGLE); P.s. не ругайте пожалуйста за кракозяброкод, использовал функции из Pet.cpp и PetHandler.cpp Бггг, я ненормальный. Всю ночь просидел перед ящиком, пробовал разные варианты. Псих Последний раз редактировалось Hantet; 14.03.2010 в 06:22. |
14.03.2010, 05:19 | #7 |
Новичок
Регистрация: 07.03.2010
Сообщений: 17
Сказал(а) спасибо: 10
Поблагодарили 14 раз(а) в 4 сообщениях
|
Еще один минус - созданные копии не исчезают по прохождении 30 сек, если они находятся в бою. Следовательно дождавшись кд допустим на арене можно будет призвать еще 3-4 копии. Я думаю это не верно, и поправил это в SD2:
(+ отмечены добавленные строки) Код:
struct MANGOS_DLL_DECL npc_mirror_imageAI : public ScriptedAI { npc_mirror_imageAI(Creature *pCreature) : ScriptedAI(pCreature) { + LifeTime = 30000; Reset(); } +uint32 LifeTime; uint32 m_uiFrostBoltTimer; void Reset() { m_uiFrostBoltTimer = 1000; } void UpdateAI(const uint32 uiDiff) { + if (LifeTime < uiDiff) + { + m_creature->RemoveFromWorld(); + } else LifeTime -= uiDiff; if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; if (m_uiFrostBoltTimer < uiDiff) { if (DoCastSpellIfCan(m_creature->getVictim(), SPELL_FROSTBOLT) == CAST_OK) m_uiFrostBoltTimer = urand(3600, 4000); }else m_uiFrostBoltTimer -= uiDiff; } }; |
14.03.2010, 06:59 | #8 |
Ученый
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
|
Код:
/*###### ## npc_mirror_image ######*/ struct MANGOS_DLL_DECL npc_mirror_imageAI : public ScriptedAI { npc_mirror_imageAI(Creature* pCreature) : ScriptedAI(pCreature) {Reset();} uint32 m_uiFrostboltTimer; uint32 m_uiFireblastTimer; bool inCombat; void Reset() { Unit *owner = m_creature->GetOwner(); if (!owner) return; if (owner && !m_creature->hasUnitState(UNIT_STAT_FOLLOW)) { m_creature->GetMotionMaster()->Clear(false); m_creature->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); } // Inherit Master's Threat List (not yet implemented) //owner->CastSpell((Unit*)NULL, 58838, true); // here mirror image casts on summoner spell (not present in client dbc) 49866 // here should be auras (not present in client dbc): 35657, 35658, 35659, 35660 selfcasted by mirror images (stats related?) // Clone Me! m_uiFrostboltTimer = 0; m_uiFireblastTimer = 6100; inCombat = false; } void AttackStart(Unit* pWho) { if (!pWho) return; if (m_creature->Attack(pWho, true)) { m_creature->clearUnitState(UNIT_STAT_FOLLOW); // TMGs call CreatureRelocation which via MoveInLineOfSight can call this function // thus with the following clear the original TMG gets invalidated and crash, doh // hope it doesn't start to leak memory without this :-/ //i_pet->Clear(); m_creature->GetMotionMaster()->MoveChase(pWho); m_creature->getVictim()->AddThreat(m_creature); inCombat = true; } } void EnterEvadeMode() { if (m_creature->IsInEvadeMode() || !m_creature->isAlive()) return; inCombat = false; Unit *owner = m_creature->GetCharmerOrOwner(); m_creature->AttackStop(); m_creature->CombatStop(true); if (owner && !m_creature->hasUnitState(UNIT_STAT_FOLLOW)) { m_creature->GetMotionMaster()->Clear(false); m_creature->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST,PET_FOLLOW_ANGLE); } } void UpdateAI(const uint32 diff) { if (!(m_creature->HasAura(45204))) { Unit *owner = m_creature->GetCharmerOrOwner(); if (!owner) return; m_creature->CastSpell(m_creature, 45204, true, NULL, NULL, owner->GetGUID()); } if (!(m_creature->HasAura(58836))) { Unit *owner = m_creature->GetCharmerOrOwner(); if (!owner) return; m_creature->CastSpell(m_creature, 58836, true, NULL, NULL, owner->GetGUID()); } if (/*!m_creature->SelectHostileTarget() || */!m_creature->getVictim()) { Unit *owner = m_creature->GetCharmerOrOwner(); if (owner && owner->getVictim()) m_creature->AI()->AttackStart(owner->getVictim()); } if (inCombat && !m_creature->getVictim()) { EnterEvadeMode(); return; } if (/*!m_creature->SelectHostileTarget() || */!m_creature->getVictim()) return; if (m_uiFrostboltTimer <= diff) { DoCast(m_creature->getVictim(),59638); m_uiFrostboltTimer = 3100; }else m_uiFrostboltTimer -= diff; if (m_uiFireblastTimer <= diff) { DoCast(m_creature->getVictim(),59637,true); m_uiFireblastTimer = 6000; }else m_uiFireblastTimer -= diff; DoMeleeAttackIfReady(); } }; CreatureAI* GetAI_npc_mirror_image(Creature* pCreature) { return new npc_mirror_imageAI(pCreature); } |
15.03.2010, 04:02 | #9 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Set странно, когда я в скрипте на 3.3.0 делал через owner у меня писало indefener is not found.
|
15.03.2010, 06:23 | #10 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
|
15.03.2010, 07:38 | #11 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
15.03.2010, 13:45 | #12 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Код:
m_creature->GetOwner(); Код:
Unit* GetOwner() const; |
16.03.2010, 03:47 | #13 | |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Цитата:
|
|
16.03.2010, 13:32 | #14 |
Новичок
Регистрация: 07.03.2010
Сообщений: 17
Сказал(а) спасибо: 10
Поблагодарили 14 раз(а) в 4 сообщениях
|
А зазве у клонов столько же хелов сколько и у владельца?
Помойму нужно в Reset() добавить Код:
m_creature->SetMaxHealth(4000); Последний раз редактировалось Dimitrius; 16.03.2010 в 16:22. |
16.03.2010, 13:44 | #15 |
Ученый
Регистрация: 07.03.2010
Сообщений: 131
Сказал(а) спасибо: 9
Поблагодарили 10 раз(а) в 10 сообщениях
|
Я всегда думал, что у клонов и ХП должно быть столько же.
|
16.03.2010, 14:24 | #16 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Нет, у них около 2.6к, насколько я помню.
|
17.03.2010, 04:03 | #17 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
17.03.2010, 06:23 | #18 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
http://www.wowhead.com/?spell=69960 (к примеру)
|
17.03.2010, 11:08 | #19 | |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Цитата:
|
|
17.03.2010, 13:01 | #20 |
YTDB Dev
Регистрация: 01.02.2010
Сообщений: 115
Сказал(а) спасибо: 0
Поблагодарили 36 раз(а) в 25 сообщениях
|
Код:
Effect Apply Aura: Mirror Name Radius: 100 yards где-то я видел спелы - которые берут оружие и одежду миррор цели, как то их надо под эту ауру подогнать наверно |
17.03.2010, 14:30 | #21 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Насколько я помню это клиентом реализуется.
|
17.03.2010, 18:49 | #22 |
Новичок
Регистрация: 09.03.2010
Сообщений: 26
Сказал(а) спасибо: 18
Поблагодарили 3 раз(а) в 3 сообщениях
|
когда игрок умирает воспроизводится клон игрока [Труп игрока]
Есть ли возможность использовать это В mirror image |
17.03.2010, 18:54 | #23 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
|
18.03.2010, 03:46 | #24 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
18.03.2010, 14:16 | #25 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Я имею ввиду ауру, на которую я давал ссылку.
|
18.03.2010, 14:33 | #26 |
Модератор
|
Не функции, пакеты CMSG_GET_MIRRORIMAGE_DATA, SMSG_MIRRORIMAGE_DATA
Они отсылаются с аурой и копируют имя, гильду, прическу, лицо, одежду и т.д |
19.03.2010, 03:40 | #27 | |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Цитата:
Код:
+ Player* pCreator = (Player *)m_caster; + data << (uint8)pCreator->getRace(); // race + data << (uint8)pCreator->getGender(); // gender + data << (uint8)pCreator->getClass(); // class + data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 0); // skin + data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 1); // face + data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 2); // hair + data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 3); // haircolor + data << (uint8)pCreator->GetByteValue(PLAYER_BYTES_2, 0); // facialhair + + data << (uint32)0; // unknown |
|
21.03.2010, 08:56 | #28 |
Новичок
Регистрация: 09.03.2010
Сообщений: 26
Сказал(а) спасибо: 18
Поблагодарили 3 раз(а) в 3 сообщениях
|
это уже работает? или что не хватает?
Последний раз редактировалось VENOM; 21.03.2010 в 11:05. |
21.03.2010, 19:06 | #29 |
Гость
Сообщений: n/a
|
|
23.03.2010, 03:47 | #30 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
23.03.2010, 07:45 | #31 |
Гость
Сообщений: n/a
|
|
23.03.2010, 08:08 | #32 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
24.03.2010, 03:49 | #35 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
24.03.2010, 05:28 | #36 |
Ученый
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
|
Код:
+void WorldSession::HandleMirrrorImageDataRequest( WorldPacket & recv_data ) +{ + sLog.outDebug("WORLD: CMSG_GET_MIRRORIMAGE_DATA"); + uint64 guid; + recv_data >> guid; + + // Get unit for which data is needed by client + Unit *unit = ObjectAccessor::GetObjectInWorld(guid, (Unit*)NULL); + if(!unit) + return; + // Get creator of the unit + Unit *creator = ObjectAccessor::GetObjectInWorld(unit->GetCreatorGUID(),(Unit*)NULL); + if (!creator) + return; + WorldPacket data(SMSG_MIRRORIMAGE_DATA, 68); + data << (uint64)guid; + data << (uint32)creator->GetDisplayId(); + if (creator->GetTypeId() == TYPEID_PLAYER) + { + Player * pCreator = (Player *)creator; + data << (uint8)pCreator->getRace(); + data << (uint8)pCreator->getGender(); + data << (uint8)pCreator->getClass(); + data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 0); // skin + + data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 1); // face + data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 2); // hair + data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 3); // haircolor + data << (uint8)pCreator->GetByteValue(PLAYER_BYTES_2, 0); // facialhair + + data << (uint32)pCreator->GetGuildId(); // unk + static const EquipmentSlots ItemSlots[] = + { + EQUIPMENT_SLOT_HEAD, + EQUIPMENT_SLOT_SHOULDERS, + EQUIPMENT_SLOT_BODY, + EQUIPMENT_SLOT_CHEST, + EQUIPMENT_SLOT_WAIST, + EQUIPMENT_SLOT_LEGS, + EQUIPMENT_SLOT_FEET, + EQUIPMENT_SLOT_WRISTS, + EQUIPMENT_SLOT_HANDS, + EQUIPMENT_SLOT_BACK, + EQUIPMENT_SLOT_TABARD, + EQUIPMENT_SLOT_END + }; + // Display items in visible slots + for (EquipmentSlots const* itr = &ItemSlots[0]; *itr!=EQUIPMENT_SLOT_END; ++itr) + { + if (*itr == EQUIPMENT_SLOT_HEAD && pCreator->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM)) + data << (uint32)0; + else if (*itr == EQUIPMENT_SLOT_BACK && pCreator->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK)) + data << (uint32)0; + else if (Item const *item = pCreator->GetItemByPos(INVENTORY_SLOT_BAG_0, *itr)) + data << (uint32)item->GetProto()->DisplayInfoID; + else + data << (uint32)0; + } + } + else + { + // Skip player data for creatures + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + data << (uint32)0; + } + SendPacket( &data ); } |
Пользователь сказал cпасибо: | MaxXx2021 (24.03.2010) |
24.03.2010, 05:44 | #37 | |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Цитата:
|
|
24.03.2010, 11:01 | #38 |
RMDC Donator
Регистрация: 07.03.2010
Адрес: Россия
Сообщений: 29
Сказал(а) спасибо: 16
Поблагодарили 18 раз(а) в 3 сообщениях
|
Сегодня собрал с Мангос 9611 (не чистые) и SD2 1647 (не чистый) старую версию, т.е. без пункта 5. Теперь копируется имя и гильдия. (Спасибо Set).
При появлении нпс реагриует только на вражеских мобов, а так же: - не ходят за мной; - не атакуют мою цель. Видел, что об этих багах писали выше, но в первом посте они значатся как "поправленные". Скрины прилагаются. Последний раз редактировалось Nordway; 24.03.2010 в 11:04. |
24.03.2010, 16:49 | #39 | |
Гость
Сообщений: n/a
|
Ошибка
Цитата:
|
|
25.03.2010, 03:53 | #40 | |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Цитата:
|
|