Yardım arttırma kagıtı 5 efsun atıyor

  • Konuyu açan Konuyu açan hancı21
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 17
  • Gösterim Gösterim 96
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

hancı21

Üye
Üye
Mesaj
194
Çözümler
1
Beğeni
20
Puan
79
Ticaret Puanı
0
kodu yeniledim bu
atrıema kagıtı 5 tane atıyor ve nesne kayıp olmuyor

Kod:
Genişlet Daralt Kopyala
            //  ACCESSORY_REFINE & ADD/CHANGE_ATTRIBUTES
                case USE_PUT_INTO_BELT_SOCKET:
                case USE_PUT_INTO_ACCESSORY_SOCKET:
                case USE_ADD_ACCESSORY_SOCKET:
                case USE_CLEAN_SOCKET:
                case USE_CHANGE_ATTRIBUTE:
                case USE_ADD_ATTRIBUTE:
                case USE_ADD_ATTRIBUTE2:
                {
                    LPITEM item2;
                    if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
                        return false;

                    if (ITEM_COSTUME == item2->GetType())
                    {
                        NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                        return false;
                    }

                    if (item2->IsExchanging() || item2->IsEquipped()) // @fixme114
                    {
                        return false;
                    }
                    /*if (item2->IsEquipped())
                    {
                        BuffOnAttr_RemoveBuffsFromItem(item2);
                    }*/

                    switch (item->GetSubType())
                    {
                        case USE_CLEAN_SOCKET:
                        {
                            int i;
                            for (i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
                            {
                                if (item2->GetSocket(i) == ITEM_BROKEN_METIN_VNUM)
                                    break;
                            }

                            if (i == ITEM_SOCKET_MAX_NUM)
                            {
                                NewChatPacket(NO_STONE_TO_CLEAR);
                                return false;
                            }

                            int j = 0;

                            for (i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
                            {
                                if (item2->GetSocket(i) != ITEM_BROKEN_METIN_VNUM && item2->GetSocket(i) != 0)
                                    item2->SetSocket(j++, item2->GetSocket(i));
                            }

                            for (; j < ITEM_SOCKET_MAX_NUM; ++j)
                            {
                                if (item2->GetSocket(j) > 0)
                                    item2->SetSocket(j, 1);
                            }

                            item->SetCount(item->GetCount() - 1);
                            break;
                        }


                        case USE_CHANGE_ATTRIBUTE:
                        {

                            if (item2->GetAttributeSetIndex() == -1)
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }

                            if (item2->GetAttributeCount() == 0)
                            {
                                NewChatPacket(NO_ATTRIBUTES_TO_CHANE_ON_THE_ITEM);
                                return false;
                            }

                            //@1#140_START
                            if (BLOCKED_ATTR_LIST(item2->GetVnum()))
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }
                            //@1#140_END

#ifdef ENABLE_6TH_7TH_ATTR
                            if (item->GetVnum() == 72351 || item->GetVnum() == 72346)
                            {
                                Change67Attr(item, item2);
                                return true;
                            }
#endif
#ifdef ENABLE_GREEN_ATTRIBUTE_CHANGER
                            if (item->GetVnum() == 71151)
                            {
                                if ((item2->GetType() == ITEM_WEAPON)
                                    || (item2->GetType() == ITEM_ARMOR && item2->GetSubType() == ARMOR_BODY))
                                {
                                    bool bCanUse = true;
                                    for (int i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
                                    {
                                        if (item2->GetLimitType(i) == LIMIT_LEVEL && item2->GetLimitValue(i) > 40)
                                        {
                                            bCanUse = false;
                                            break;
                                        }
                                    }
                                    if (false == bCanUse)
                                    {
                                        NewChatPacket(YOU_DO_NOT_MEET_THE_NEEDS_OF_THIS_ITEM);
                                        break;
                                    }
                                }
                                else
                                {
                                    NewChatPacket(THIS_CAN_BE_USED_IN_ONLY_WEAPONS_ARMORS);
                                    break;
                                }
                            }
#endif
                            item2->ChangeAttribute();
#ifdef ENABLE_PLAYER_STATS_SYSTEM
                            PointChange(POINT_USE_ENCHANTED_ITEM, 1);
#endif
                            NewChatPacket(CHANGE_ATTRIBUTE_WAS_SUCCESFULL);
                            item->SetCount(item->GetCount() - 1);
                            break;
                        }

                        case USE_ADD_ATTRIBUTE:
                        {
                            if (item2->GetAttributeSetIndex() == -1)
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }
                            //@1#140_START
                            if (BLOCKED_ATTR_LIST(item2->GetVnum()))
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }
                            //@1#140_END

                            if (item2->IsExchanging())// @1#33
                            {
                                return false;
                            }
                            if (item2->IsEquipped())// @1#34
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }
                           while (item2->GetAttributeCount() < 5)
                            {
                                item2->AddAttribute();
                            }
                            break;
                        }

                        case USE_ADD_ATTRIBUTE2:
                        {
                            if (item2->GetAttributeSetIndex() == -1)
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }

                            if (item2->GetAttributeCount() == 4)
                            {
                                if (number(1, 100) <= aiItemAttributeAddPercent[item2->GetAttributeCount()])
                                {
                                    item2->AddAttribute();
                                    NewChatPacket(ADDING_ATTRIBUTE_WAS_SUCCESSFULL);
                                }
                                else
                                {
                                    NewChatPacket(ADDING_ATTRIBUTE_WAS_FAILED);
                                }

                                item->SetCount(item->GetCount() - 1);
                            }
                            else if (item2->GetAttributeCount() == 5)
                            {
                                NewChatPacket(CANT_ADD_MORE_BONUS_TO_THIS_ITEM);
                            }
                            else if (item2->GetAttributeCount() < 4)
                            {
                                NewChatPacket(TO_USE_THIS_YOU_NEED_FOR_BONUSSES_ON_THE_ITEM);
                            }
                            else
                            {
                                sys_err("ADD_ATTRIBUTE2 : Item has wrong AttributeCount(%d) item id %d owner %s itemvnum %d", item2->GetAttributeCount(), item2->GetID(), item2->GetOwner()->GetName(), item2->GetVnum());
                            }
                            break;
                        }
 
Son düzenleme:
İslem Yapmak İstediginiz Konu Detaylandırırsanız Yardımcı Olayım Kusuruma Bakmayın Pek Anlıyamadım
 
Bu İslemi Yaptıgınız zaman hem attırma kagıdı attın öte yandan ise client sysr acık kalsın atar atmaz client sysr bakıp paylasırmısınız
 
debug da build alamıyorum
Merhaba,
Öncelikle efsun sorununu çözelim.
Efsunun gitmemesi char_item.cppde xxx-1; kodu var onu kaldırmışlardır.
Mantığı buradan anlarsınız.

1 yerine 5li gelmeside
Şurada while dönüyor. Yani while döngüye alır kodları efsun 5 tane olana kadar at der. İşlem çok hızlı olduğu için fark edemessin. Bunun yerine ife çevir.

Arat:
Arat:
Genişlet Daralt Kopyala
while (item2->GetAttributeCount() < 5)
{
    item2->AddAttribute();
}

Değiştir :
Değiştir.:
Genişlet Daralt Kopyala
if (item2->GetAttributeCount() < 5)
{
    item2->AddAttribute();
}

İf şart sağlanana kadar çalışmaz yani 5 efsun olana kadar çalışmaz ve eklemeye devam eder tek tek.

Debug modda neden derleyemiyosun aldığın hataları atarsan orası içinde yardımcı olurum.
 
burayı:
Genişlet Daralt Kopyala
                            while (item2->GetAttributeCount() < 5)
                            {
                                item2->AddAttribute();
                            }

şu şekilde değiştirip dener misin

Kod:
Genişlet Daralt Kopyala
if (item2->GetAttributeCount() < 5)
{
    item2->AddAttribute();
}
else
{
    NewChatPacket(CANT_ADD_MORE_BONUS_TO_THIS_ITEM);
    return false;
}
 
burayı:
Genişlet Daralt Kopyala
                            while (item2->GetAttributeCount() < 5)
                            {
                                item2->AddAttribute();
                            }

şu şekilde değiştirip dener misin

Kod:
Genişlet Daralt Kopyala
if (item2->GetAttributeCount() < 5)
{
    item2->AddAttribute();
}
else
{
    NewChatPacket(CANT_ADD_MORE_BONUS_TO_THIS_ITEM);
    return false;
}
yok olmadı nesneyi kullan mıyor
 
Merhaba,
Öncelikle efsun sorununu çözelim.
Efsunun gitmemesi char_item.cppde xxx-1; kodu var onu kaldırmışlardır.
Mantığı buradan anlarsınız.

1 yerine 5li gelmeside
Şurada while dönüyor. Yani while döngüye alır kodları efsun 5 tane olana kadar at der. İşlem çok hızlı olduğu için fark edemessin. Bunun yerine ife çevir.

Arat:
Arat:
Genişlet Daralt Kopyala
while (item2->GetAttributeCount() < 5)
{
    item2->AddAttribute();
}

Değiştir :
Değiştir.:
Genişlet Daralt Kopyala
if (item2->GetAttributeCount() < 5)
{
    item2->AddAttribute();
}

İf şart sağlanana kadar çalışmaz yani 5 efsun olana kadar çalışmaz ve eklemeye devam eder tek tek.

Debug modda neden derleyemiyosun aldığın hataları atarsan orası içinde yardımcı olurum.
debug modda libleri derlem lazım
 
acaba burdamı bişey var
Kod:
Genişlet Daralt Kopyala
71084    Àç°æºñ¼    ITEM_USE    USE_CHANGE_ATTRIBUTE    1    NONE    ITEM_STACKABLE | LOG    NONE    NONE    0    0    0    0    0    LIMIT_NONE    0    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    0    0    0    0    0    0
 
Bunu sil
C++:
Genişlet Daralt Kopyala
                            while (item2->GetAttributeCount() < 5)
                            {
                                item2->AddAttribute();
                            }
                            break;
 
Bunu sil
C++:
Genişlet Daralt Kopyala
                            while (item2->GetAttributeCount() < 5)
                            {
                                item2->AddAttribute();
                            }
                            break;
hocam bu şekilde oldu ama kutsama küresi atmıyor :D biyeri yapıyoz diyer yer bozuluyor

Kod:
Genişlet Daralt Kopyala
                            if (item2->GetAttributeCount() < 4)
                            {
                                item2->AddAttribute();
                                item->SetCount(item->GetCount() - 1);
                            }
 
Çözüm
kodu yeniledim bu
atrıema kagıtı 5 tane atıyor ve nesne kayıp olmuyor

Kod:
Genişlet Daralt Kopyala
            //  ACCESSORY_REFINE & ADD/CHANGE_ATTRIBUTES
                case USE_PUT_INTO_BELT_SOCKET:
                case USE_PUT_INTO_ACCESSORY_SOCKET:
                case USE_ADD_ACCESSORY_SOCKET:
                case USE_CLEAN_SOCKET:
                case USE_CHANGE_ATTRIBUTE:
                case USE_ADD_ATTRIBUTE:
                case USE_ADD_ATTRIBUTE2:
                {
                    LPITEM item2;
                    if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
                        return false;

                    if (ITEM_COSTUME == item2->GetType())
                    {
                        NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                        return false;
                    }

                    if (item2->IsExchanging() || item2->IsEquipped()) // @fixme114
                    {
                        return false;
                    }
                    /*if (item2->IsEquipped())
                    {
                        BuffOnAttr_RemoveBuffsFromItem(item2);
                    }*/

                    switch (item->GetSubType())
                    {
                        case USE_CLEAN_SOCKET:
                        {
                            int i;
                            for (i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
                            {
                                if (item2->GetSocket(i) == ITEM_BROKEN_METIN_VNUM)
                                    break;
                            }

                            if (i == ITEM_SOCKET_MAX_NUM)
                            {
                                NewChatPacket(NO_STONE_TO_CLEAR);
                                return false;
                            }

                            int j = 0;

                            for (i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
                            {
                                if (item2->GetSocket(i) != ITEM_BROKEN_METIN_VNUM && item2->GetSocket(i) != 0)
                                    item2->SetSocket(j++, item2->GetSocket(i));
                            }

                            for (; j < ITEM_SOCKET_MAX_NUM; ++j)
                            {
                                if (item2->GetSocket(j) > 0)
                                    item2->SetSocket(j, 1);
                            }

                            item->SetCount(item->GetCount() - 1);
                            break;
                        }


                        case USE_CHANGE_ATTRIBUTE:
                        {

                            if (item2->GetAttributeSetIndex() == -1)
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }

                            if (item2->GetAttributeCount() == 0)
                            {
                                NewChatPacket(NO_ATTRIBUTES_TO_CHANE_ON_THE_ITEM);
                                return false;
                            }

                            //@1#140_START
                            if (BLOCKED_ATTR_LIST(item2->GetVnum()))
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }
                            //@1#140_END

#ifdef ENABLE_6TH_7TH_ATTR
                            if (item->GetVnum() == 72351 || item->GetVnum() == 72346)
                            {
                                Change67Attr(item, item2);
                                return true;
                            }
#endif
#ifdef ENABLE_GREEN_ATTRIBUTE_CHANGER
                            if (item->GetVnum() == 71151)
                            {
                                if ((item2->GetType() == ITEM_WEAPON)
                                    || (item2->GetType() == ITEM_ARMOR && item2->GetSubType() == ARMOR_BODY))
                                {
                                    bool bCanUse = true;
                                    for (int i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
                                    {
                                        if (item2->GetLimitType(i) == LIMIT_LEVEL && item2->GetLimitValue(i) > 40)
                                        {
                                            bCanUse = false;
                                            break;
                                        }
                                    }
                                    if (false == bCanUse)
                                    {
                                        NewChatPacket(YOU_DO_NOT_MEET_THE_NEEDS_OF_THIS_ITEM);
                                        break;
                                    }
                                }
                                else
                                {
                                    NewChatPacket(THIS_CAN_BE_USED_IN_ONLY_WEAPONS_ARMORS);
                                    break;
                                }
                            }
#endif
                            item2->ChangeAttribute();
#ifdef ENABLE_PLAYER_STATS_SYSTEM
                            PointChange(POINT_USE_ENCHANTED_ITEM, 1);
#endif
                            NewChatPacket(CHANGE_ATTRIBUTE_WAS_SUCCESFULL);
                            item->SetCount(item->GetCount() - 1);
                            break;
                        }

                        case USE_ADD_ATTRIBUTE:
                        {
                            if (item2->GetAttributeSetIndex() == -1)
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }
                            //@1#140_START
                            if (BLOCKED_ATTR_LIST(item2->GetVnum()))
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }
                            //@1#140_END

                            if (item2->IsExchanging())// @1#33
                            {
                                return false;
                            }
                            if (item2->IsEquipped())// @1#34
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }
                           while (item2->GetAttributeCount() < 5)
                            {
                                item2->AddAttribute();
                            }
                            break;
                        }

                        case USE_ADD_ATTRIBUTE2:
                        {
                            if (item2->GetAttributeSetIndex() == -1)
                            {
                                NewChatPacket(CANT_CHANGE_THE_ATTRIBUTE_OF_THIS_ITEM);
                                return false;
                            }

                            if (item2->GetAttributeCount() == 4)
                            {
                                if (number(1, 100) <= aiItemAttributeAddPercent[item2->GetAttributeCount()])
                                {
                                    item2->AddAttribute();
                                    NewChatPacket(ADDING_ATTRIBUTE_WAS_SUCCESSFULL);
                                }
                                else
                                {
                                    NewChatPacket(ADDING_ATTRIBUTE_WAS_FAILED);
                                }

                                item->SetCount(item->GetCount() - 1);
                            }
                            else if (item2->GetAttributeCount() == 5)
                            {
                                NewChatPacket(CANT_ADD_MORE_BONUS_TO_THIS_ITEM);
                            }
                            else if (item2->GetAttributeCount() < 4)
                            {
                                NewChatPacket(TO_USE_THIS_YOU_NEED_FOR_BONUSSES_ON_THE_ITEM);
                            }
                            else
                            {
                                sys_err("ADD_ATTRIBUTE2 : Item has wrong AttributeCount(%d) item id %d owner %s itemvnum %d", item2->GetAttributeCount(), item2->GetID(), item2->GetOwner()->GetName(), item2->GetVnum());
                            }
                            break;
                        }
Attr change:
Genişlet Daralt Kopyala
                        //  ACCESSORY_REFINE & ADD/CHANGE_ATTRIBUTES
                    case USE_PUT_INTO_BELT_SOCKET:
                    case USE_PUT_INTO_RING_SOCKET:
                    case USE_PUT_INTO_ACCESSORY_SOCKET:
                    case USE_ADD_ACCESSORY_SOCKET:
                    case USE_CLEAN_SOCKET:
                    case USE_CHANGE_ATTRIBUTE:
                    case USE_CHANGE_ATTRIBUTE2 :
                    case USE_ADD_ATTRIBUTE:
                    case USE_ADD_ATTRIBUTE2:
                        {
                            LPITEM item2;
                            if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
                                return false;

                            if (item2->IsEquipped())
                            {
                                BuffOnAttr_RemoveBuffsFromItem(item2);
                            }

                            // [NOTE] ÄÚ½ºÆ¬ ¾ÆÀÌÅÛ¿¡´Â ¾ÆÀÌÅÛ ÃÖÃÊ »ı¼º½Ã ·£´ı ¼Ó¼ºÀ» ºÎ¿©ÇϵÇ, Àç°æÀç°¡ µîµîÀº ¸·¾Æ´Ş¶ó´Â ¿äûÀÌ ÀÖ¾úÀ½.
                            // ¿ø·¡ ANTI_CHANGE_ATTRIBUTE °°Àº ¾ÆÀÌÅÛ Flag¸¦ Ãß°¡ÇÏ¿© ±âȹ ·¹º§¿¡¼ À¯¿¬ÇÏ°Ô ÄÁÆ®·Ñ ÇÒ ¼ö ÀÖµµ·Ï ÇÒ ¿¹Á¤À̾úÀ¸³ª
                            // ±×µı°Å ÇÊ¿ä¾øÀ¸´Ï ´ÚÄ¡°í »¡¸® ÇØ´Ş·¡¼ ±×³É ¿©±â¼ ¸·À½... -_-
                            if (ITEM_COSTUME == item2->GetType())
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
                                return false;
                            }

                            if (item2->IsExchanging() || item2->IsEquipped()) // @fixme114
                                return false;

                            switch (item->GetSubType())
                            {
                                case USE_CLEAN_SOCKET:
                                    {
                                        int i;
                                        for (i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
                                        {
                                            if (item2->GetSocket(i) == ITEM_BROKEN_METIN_VNUM)
                                                break;
                                        }

                                        if (i == ITEM_SOCKET_MAX_NUM)
                                        {
                                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("û¼ÒÇÒ ¼®ÀÌ ¹ÚÇôÀÖÁö ¾Ê½À´Ï´Ù."));
                                            return false;
                                        }

                                        int j = 0;

                                        for (i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
                                        {
                                            if (item2->GetSocket(i) != ITEM_BROKEN_METIN_VNUM && item2->GetSocket(i) != 0)
                                                item2->SetSocket(j++, item2->GetSocket(i));
                                        }

                                        for (; j < ITEM_SOCKET_MAX_NUM; ++j)
                                        {
                                            if (item2->GetSocket(j) > 0)
                                                item2->SetSocket(j, 1);
                                        }

                                        {
                                            char buf[21];
                                            snprintf(buf, sizeof(buf), "%u", item2->GetID());
                                            LogManager::instance().ItemLog(this, item, "CLEAN_SOCKET", buf);
                                        }

                                        item->SetCount(item->GetCount() - 1);

                                    }
                                    break;

                                case USE_CHANGE_ATTRIBUTE :
                                case USE_CHANGE_ATTRIBUTE2 : // @fixme123
                                    if (item2->GetAttributeSetIndex() == -1)
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
                                        return false;
                                    }

                                    if (item2->GetAttributeCount() == 0)
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("º¯°æÇÒ ¼Ó¼ºÀÌ ¾ø½À´Ï´Ù."));
                                        return false;
                                    }

#ifdef ENABLE_SOULBIND_SYSTEM
                                    if(item2->IsSealed()){
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Can't change attr an sealbind item."));
                                        return false;
                                    }
#endif

                                    if ((GM_PLAYER == GetGMLevel()) && (false == test_server) && (g_dwItemBonusChangeTime > 0))
                                    {
                                        //
                                        // Event Flag ¸¦ ÅëÇØ ÀÌÀü¿¡ ¾ÆÀÌÅÛ ¼Ó¼º º¯°æÀ» ÇÑ ½Ã°£À¸·Î ºÎÅÍ ÃæºĞÇÑ ½Ã°£ÀÌ Èê·¶´ÂÁö °Ë»çÇϰí
                                        // ½Ã°£ÀÌ ÃæºĞÈ÷ Èê·¶´Ù¸é ÇöÀç ¼Ó¼ºº¯°æ¿¡ ´ëÇÑ ½Ã°£À» ¼³Á¤ÇØ ÁØ´Ù.
                                        //

                                        // DWORD dwChangeItemAttrCycle = quest::CQuestManager::instance().GetEventFlag(msc_szChangeItemAttrCycleFlag);
                                        // if (dwChangeItemAttrCycle < msc_dwDefaultChangeItemAttrCycle)
                                            // dwChangeItemAttrCycle = msc_dwDefaultChangeItemAttrCycle;
                                        DWORD dwChangeItemAttrCycle = g_dwItemBonusChangeTime;

                                        quest::PC* pPC = quest::CQuestManager::instance().GetPC(GetPlayerID());

                                        if (pPC)
                                        {
                                            DWORD dwNowSec = get_global_time();

                                            DWORD dwLastChangeItemAttrSec = pPC->GetFlag(msc_szLastChangeItemAttrFlag);

                                            if (dwLastChangeItemAttrSec + dwChangeItemAttrCycle > dwNowSec)
                                            {
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» ¹Ù²ÛÁö %dºĞ À̳»¿¡´Â ´Ù½Ã º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù.(%d ºĞ ³²À½)"),
                                                        dwChangeItemAttrCycle, dwChangeItemAttrCycle - (dwNowSec - dwLastChangeItemAttrSec));
                                                return false;
                                            }

                                            pPC->SetFlag(msc_szLastChangeItemAttrFlag, dwNowSec);
                                        }
                                    }

                                    if (item->GetSubType() == USE_CHANGE_ATTRIBUTE2)
                                    {
                                        int aiChangeProb[ITEM_ATTRIBUTE_MAX_LEVEL] =
                                        {
                                            0, 0, 30, 40, 3
                                        };

                                        item2->ChangeAttribute(aiChangeProb);
                                    }
                                    else if (item->GetVnum() == 76014)
                                    {
                                        int aiChangeProb[ITEM_ATTRIBUTE_MAX_LEVEL] =
                                        {
                                            0, 10, 50, 39, 1
                                        };

                                        item2->ChangeAttribute(aiChangeProb);
                                    }

                                    else
                                    {
                                        // ¿¬Àç°æ Ư¼öó¸®
                                        // Àı´ë·Î ¿¬Àç°¡ Ãß°¡ ¾ÈµÉ°Å¶ó ÇÏ¿© Çϵå ÄÚµùÇÔ.
                                        if (item->GetVnum() == 71151 || item->GetVnum() == 76023)
                                        {
                                            if ((item2->GetType() == ITEM_WEAPON)
                                                || (item2->GetType() == ITEM_ARMOR && item2->GetSubType() == ARMOR_BODY))
                                            {
                                                bool bCanUse = true;
                                                for (int i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
                                                {
                                                    if (item2->GetLimitType(i) == LIMIT_LEVEL && item2->GetLimitValue(i) > 40)
                                                    {
                                                        bCanUse = false;
                                                        break;
                                                    }
                                                }
                                                if (false == bCanUse)
                                                {
                                                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Àû¿ë ·¹º§º¸´Ù ³ô¾Æ »ç¿ëÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù."));
                                                    break;
                                                }
                                            }
                                            else
                                            {
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¹«±â¿Í °©¿Ê¿¡¸¸ »ç¿ë °¡´ÉÇÕ´Ï´Ù."));
                                                break;
                                            }
                                        }
                                        item2->ChangeAttribute();
                                    }

                                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÏ¿´½À´Ï´Ù."));
                                    {
                                        char buf[21];
                                        snprintf(buf, sizeof(buf), "%u", item2->GetID());
                                        LogManager::instance().ItemLog(this, item, "CHANGE_ATTRIBUTE", buf);
                                    }

                                    item->SetCount(item->GetCount() - 1);
                                    break;

                                case USE_ADD_ATTRIBUTE :
                                    if (item2->GetAttributeSetIndex() == -1)
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
                                        return false;
                                    }

#ifdef ENABLE_SOULBIND_SYSTEM
                                    if(item2->IsSealed()){
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Can't change attr an sealbind item."));
                                        return false;
                                    }
#endif

                                    if (item2->GetAttributeCount() < 4)
                                    {
                                        // ¿¬Àç°¡ Ư¼öó¸®
                                        // Àı´ë·Î ¿¬Àç°¡ Ãß°¡ ¾ÈµÉ°Å¶ó ÇÏ¿© Çϵå ÄÚµùÇÔ.
                                        if (item->GetVnum() == 71152 || item->GetVnum() == 76024)
                                        {
                                            if ((item2->GetType() == ITEM_WEAPON)
                                                || (item2->GetType() == ITEM_ARMOR && item2->GetSubType() == ARMOR_BODY))
                                            {
                                                bool bCanUse = true;
                                                for (int i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
                                                {
                                                    if (item2->GetLimitType(i) == LIMIT_LEVEL && item2->GetLimitValue(i) > 40)
                                                    {
                                                        bCanUse = false;
                                                        break;
                                                    }
                                                }
                                                if (false == bCanUse)
                                                {
                                                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Àû¿ë ·¹º§º¸´Ù ³ô¾Æ »ç¿ëÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù."));
                                                    break;
                                                }
                                            }
                                            else
                                            {
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¹«±â¿Í °©¿Ê¿¡¸¸ »ç¿ë °¡´ÉÇÕ´Ï´Ù."));
                                                break;
                                            }
                                        }
                                        char buf[21];
                                        snprintf(buf, sizeof(buf), "%u", item2->GetID());

                                        if (number(1, 100) <= aiItemAttributeAddPercent[item2->GetAttributeCount()])
                                        {
                                            item2->AddAttribute();
                                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼º Ãß°¡¿¡ ¼º°øÇÏ¿´½À´Ï´Ù."));

                                            int iAddedIdx = item2->GetAttributeCount() - 1;
                                            LogManager::instance().ItemLog(
                                                    GetPlayerID(),
                                                    item2->GetAttributeType(iAddedIdx),
                                                    item2->GetAttributeValue(iAddedIdx),
                                                    item->GetID(),
                                                    "ADD_ATTRIBUTE_SUCCESS",
                                                    buf,
                                                    GetDesc()->GetHostName(),
                                                    item->GetOriginalVnum());
                                        }
                                        else
                                        {
                                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼º Ãß°¡¿¡ ½ÇÆĞÇÏ¿´½À´Ï´Ù."));
                                            LogManager::instance().ItemLog(this, item, "ADD_ATTRIBUTE_FAIL", buf);
                                        }

                                        item->SetCount(item->GetCount() - 1);
                                    }
                                    else
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("´õÀÌ»ó ÀÌ ¾ÆÀÌÅÛÀ» ÀÌ¿ëÇÏ¿© ¼Ó¼ºÀ» Ãß°¡ÇÒ ¼ö ¾ø½À´Ï´Ù."));
                                    }
                                    break;

                                case USE_ADD_ATTRIBUTE2 :
                                    // ÃູÀÇ ±¸½½
                                    // Àç°¡ºñ¼¸¦ ÅëÇØ ¼Ó¼ºÀ» 4°³ Ãß°¡ ½ÃŲ ¾ÆÀÌÅÛ¿¡ ´ëÇØ¼ ÇϳªÀÇ ¼Ó¼ºÀ» ´õ ºÙ¿©ÁØ´Ù.
                                    if (item2->GetAttributeSetIndex() == -1)
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
                                        return false;
                                    }

#ifdef ENABLE_SOULBIND_SYSTEM
                                    if(item2->IsSealed()){
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Can't change attr an sealbind item."));
                                        return false;
                                    }
#endif

                                    // ¼Ó¼ºÀÌ ÀÌ¹Ì 4°³ Ãß°¡ µÇ¾úÀ» ¶§¸¸ ¼Ó¼ºÀ» Ãß°¡ °¡´ÉÇÏ´Ù.
                                    if (item2->GetAttributeCount() == 4)
                                    {
                                        char buf[21];
                                        snprintf(buf, sizeof(buf), "%u", item2->GetID());

                                        if (number(1, 100) <= aiItemAttributeAddPercent[item2->GetAttributeCount()])
                                        {
                                            item2->AddAttribute();
                                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼º Ãß°¡¿¡ ¼º°øÇÏ¿´½À´Ï´Ù."));

                                            int iAddedIdx = item2->GetAttributeCount() - 1;
                                            LogManager::instance().ItemLog(
                                                    GetPlayerID(),
                                                    item2->GetAttributeType(iAddedIdx),
                                                    item2->GetAttributeValue(iAddedIdx),
                                                    item->GetID(),
                                                    "ADD_ATTRIBUTE2_SUCCESS",
                                                    buf,
                                                    GetDesc()->GetHostName(),
                                                    item->GetOriginalVnum());
                                        }
                                        else
                                        {
                                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼º Ãß°¡¿¡ ½ÇÆĞÇÏ¿´½À´Ï´Ù."));
                                            LogManager::instance().ItemLog(this, item, "ADD_ATTRIBUTE2_FAIL", buf);
                                        }

                                        item->SetCount(item->GetCount() - 1);
                                    }
                                    else if (item2->GetAttributeCount() == 5)
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("´õ ÀÌ»ó ÀÌ ¾ÆÀÌÅÛÀ» ÀÌ¿ëÇÏ¿© ¼Ó¼ºÀ» Ãß°¡ÇÒ ¼ö ¾ø½À´Ï´Ù."));
                                    }
                                    else if (item2->GetAttributeCount() < 4)
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸ÕÀú Àç°¡ºñ¼¸¦ ÀÌ¿ëÇÏ¿© ¼Ó¼ºÀ» Ãß°¡½ÃÄÑ ÁÖ¼¼¿ä."));
                                    }
                                    else
                                    {
                                        // wtf ?!
                                        sys_err("ADD_ATTRIBUTE2 : Item has wrong AttributeCount(%d)", item2->GetAttributeCount());
                                    }
                                    break;

                                case USE_ADD_ACCESSORY_SOCKET:
                                    {
                                        char buf[21];
                                        snprintf(buf, sizeof(buf), "%u", item2->GetID());

                                        if (item2->IsAccessoryForSocket())
                                        {
                                            if (item2->GetAccessorySocketMaxGrade() < ITEM_ACCESSORY_SOCKET_MAX_NUM)
                                            {
#ifdef ENABLE_ADDSTONE_FAILURE
                                                if (number(1, 100) <= 50)
#else
                                                if (1)
#endif
                                                {
                                                    item2->SetAccessorySocketMaxGrade(item2->GetAccessorySocketMaxGrade() + 1);
                                                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼ÒÄÏÀÌ ¼º°øÀûÀ¸·Î Ãß°¡µÇ¾ú½À´Ï´Ù."));
                                                    LogManager::instance().ItemLog(this, item, "ADD_SOCKET_SUCCESS", buf);
                                                }
                                                else
                                                {
                                                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼ÒÄÏ Ãß°¡¿¡ ½ÇÆĞÇÏ¿´½À´Ï´Ù."));
                                                    LogManager::instance().ItemLog(this, item, "ADD_SOCKET_FAIL", buf);
                                                }

                                                item->SetCount(item->GetCount() - 1);
                                            }
                                            else
                                            {
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ ¾×¼¼¼¸®¿¡´Â ´õÀÌ»ó ¼ÒÄÏÀ» Ãß°¡ÇÒ °ø°£ÀÌ ¾ø½À´Ï´Ù."));
                                            }
                                        }
                                        else
                                        {
                                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ ¾ÆÀÌÅÛÀ¸·Î ¼ÒÄÏÀ» Ãß°¡ÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
                                        }
                                    }
                                    break;

                                case USE_PUT_INTO_BELT_SOCKET:
                                case USE_PUT_INTO_ACCESSORY_SOCKET:
                                    if (item2->IsAccessoryForSocket() && item->CanPutInto(item2))
                                    {
                                        char buf[21];
                                        snprintf(buf, sizeof(buf), "%u", item2->GetID());

                                        if (item2->GetAccessorySocketGrade() < item2->GetAccessorySocketMaxGrade())
                                        {
                                            if (number(1, 100) <= aiAccessorySocketPutPct[item2->GetAccessorySocketGrade()])
                                            {
                                                item2->SetAccessorySocketGrade(item2->GetAccessorySocketGrade() + 1);
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀåÂø¿¡ ¼º°øÇÏ¿´½À´Ï´Ù."));
                                                LogManager::instance().ItemLog(this, item, "PUT_SOCKET_SUCCESS", buf);
                                            }
                                            else
                                            {
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀåÂø¿¡ ½ÇÆĞÇÏ¿´½À´Ï´Ù."));
                                                LogManager::instance().ItemLog(this, item, "PUT_SOCKET_FAIL", buf);
                                            }

                                            item->SetCount(item->GetCount() - 1);
                                        }
                                        else
                                        {
                                            if (item2->GetAccessorySocketMaxGrade() == 0)
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸ÕÀú ´ÙÀ̾Ƹóµå·Î ¾Ç¼¼¼¸®¿¡ ¼ÒÄÏÀ» Ãß°¡ÇؾßÇÕ´Ï´Ù."));
                                            else if (item2->GetAccessorySocketMaxGrade() < ITEM_ACCESSORY_SOCKET_MAX_NUM)
                                            {
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ ¾×¼¼¼¸®¿¡´Â ´õÀÌ»ó ÀåÂøÇÒ ¼ÒÄÏÀÌ ¾ø½À´Ï´Ù."));
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("´ÙÀ̾Ƹóµå·Î ¼ÒÄÏÀ» Ãß°¡ÇؾßÇÕ´Ï´Ù."));
                                            }
                                            else
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ ¾×¼¼¼¸®¿¡´Â ´õÀÌ»ó º¸¼®À» ÀåÂøÇÒ ¼ö ¾ø½À´Ï´Ù."));
                                        }
                                    }
                                    else
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ ¾ÆÀÌÅÛÀ» ÀåÂøÇÒ ¼ö ¾ø½À´Ï´Ù."));
                                    }
                                    break;
                            }
                            if (item2->IsEquipped())
                            {
                                BuffOnAttr_AddBuffsFromItem(item2);
                            }
                        }
                        break;
                        //  END_OF_ACCESSORY_REFINE & END_OF_ADD_ATTRIBUTES & END_OF_CHANGE_ATTRIBUTES

Al bunu dene olmazsa söyle
 
Geri
Üst