1. C++ / Говнокод #12385

    +14

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    bool Item::IsBoundByEnchant() const
    {
        // Check all enchants for soulbound
        for (uint32 enchant_slot = PERM_ENCHANTMENT_SLOT; enchant_slot < MAX_ENCHANTMENT_SLOT; ++enchant_slot)
        {
            if (enchant_slot > PRISMATIC_ENCHANTMENT_SLOT || enchant_slot < PROP_ENCHANTMENT_SLOT_0)    // not holding enchantment id
                continue;
    
            if (uint32 enchant_id = GetEnchantmentId(EnchantmentSlot(enchant_slot)))
                if (SpellItemEnchantmentEntry const* enchantEntry = sSpellItemEnchantmentStore.LookupEntry(enchant_id))
                    if (enchantEntry->slot & ENCHANTMENT_CAN_SOULBOUND)
                        return true;
        }
    
        return false;
    }

    Взял из эмулятора World of WarCraft Trinity 4.3.4 ветка.
    Все говно в 6 строчке
    PERM_ENCHANTMENT_SLOT = 0
    MAX_ENCHANTMENT_SLOT = 15

    PRISMATIC_ENCHANTMENT_SLOT = 6
    PROP_ENCHANTMENT_SLOT_0 = 10

    Запостил: Heisenberg, 03 Января 2013

    Комментарии (13) RSS

    • bool Item::IsBoundByEnchant() const
      {
          return false;
      }


      Fixed?
      Ответить
      • Не-а, не фиксед. В оригинале ещё пустой цикл. Вдруг он нужен для задержки?
        bool Item::IsBoundByEnchant() const
        {
            for (uint32 enchant_slot = PERM_ENCHANTMENT_SLOT; enchant_slot < MAX_ENCHANTMENT_SLOT; ++enchant_slot);
        
            return false;
        }

        Да и потом, это же C++. Вдруг здесь что-нибудь перегружено с побочными эффектами?
        Ответить
        • Ага, а вдруг тут перегружены операторы < и > и ||, и цикл вполне рабочий?
          Ответить
          • Для uint32?
            Ответить
            • А вдруг это такой самодельный класс, а не тайпдеф? В крестах нельзя быть таким уверенным...
              Ответить
          • а вдруг #define true false?
            Ответить
            • А вдруг #define if(x) if((x) ^ (rand()%1000000 == 0)) ?
              Ответить
              • кстати, вижуал (не 2003) научился подсвечивать дефайны и теперь всё тайное становится явным
                Ответить
                • к слову о некростудиях - цельный помидорный ассисьт работает чуть ли не в 6.0
                  Ответить
    • // rand_bool() - some function, that returns true with small probability (i.e. 0.001)
      #define if(x) if((x) ^ rand_bool())
      #define while(x) while((x) ^ rand_bool())
      #define return return rand_throw(),
      И простой и понятный код в test() и main() превращается в неуправляемую жуть: http://ideone.com/r0Ri99.
      Ответить

    Добавить комментарий