Показать сообщение отдельно
Старый 17.03.2010, 05:33   #1
fedaykin
Гость
 
Сообщений: n/a
По умолчанию Исправление бага с метасокетами.

Вот... баг старый, но в мангосе еще не исправлен, и игроки(по крайней мере мои) во всю использовали. Суть ,бага:
Цитата:
Для воспроизведения бага понадобятся: два головных убора (один со слотом под мету, второй без статов), и, например. два честа (один с сокетами, второй без статов). Вставляем, к примеру, в головной убор метасокет +42АП. В чест тоже вставляем каких-нибудь сокетов... Главное, что-бы все вставленные сокеты выполняли условие метасокета. Далее чест с сокетами ломается, переодевается чест без статов, потом переодевается головной убор без статов, потом снова чест с сокетами и за ним головной убор с метой. В итоге АП увеличивается на 42. Процесс можно повторять до достижения необходимой цифры. Вместо АП можно поднимать любые другие характеристики.
Решение нашел на форуме тринити, автор: Az@zel

Код:
diff -r 1782ed85a440 src/game/Player.cpp
--- a/src/game/Player.cpp	Thu Jan 28 22:06:31 2010 +0100
+++ b/src/game/Player.cpp	Sun Jan 31 00:44:46 2010 +0600
@@ -19411,17 +19411,17 @@ bool Player::EnchantmentFitsRequirements
     uint8 curcount[4] = {0, 0, 0, 0};
 
     //counting current equipped gem colors
     for (uint8 i = EQUIPMENT_SLOT_START; i < EQUIPMENT_SLOT_END; ++i)
     {
         if(i == slot)
             continue;
         Item *pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, i );
-        if(pItem2 && pItem2->GetProto()->Socket[0].Color)
+        if(pItem2 && !pItem2->IsBroken() && pItem2->GetProto()->Socket[0].Color)
         {
             for (uint32 enchant_slot = SOCK_ENCHANTMENT_SLOT; enchant_slot < SOCK_ENCHANTMENT_SLOT+3; ++enchant_slot)
             {
                 uint32 enchant_id = pItem2->GetEnchantmentId(EnchantmentSlot(enchant_slot));
                 if(!enchant_id)
                     continue;
 
                 SpellItemEnchantmentEntry const* enchantEntry = sSpellItemEnchantmentStore.LookupEntry(enchant_id);