Çözüldü Char_item.cpp'den yeni efsun nesnesi oluşturma

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

canocano

Üye
Üye
Mesaj
39
Çözümler
3
Beğeni
5
Puan
29
Merhaba, char_item.cpp'de yeni bir item oluşturmaya çalışıyorum. İtem efsun ekleme nesnesine benzeyecek fakat benim belirlediğim spesifik bir efsunu verecek. elimde şöyle bir kod var fakat itemi kullandığımda efsun gelmiyor aksine orijinal efsun nesnesi itemi gibi çalışıyor. Yardımcı olabilecek var mı?

C++:
case USE_ADD_ATTRIBUTE :

if (item->GetVnum() == 71352)

{

if (item2->GetType() == ITEM_WEAPON)

{



item2->ClearAttribute();

item2->SetForceAttribute( 0, APPLY_STR, 5); //Güç +5

ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Başarıyla Eklendi."));

}

else

{

ChatPacket(CHAT_TYPE_INFO, "Eklenemedi");

return false;

}

}
 
C++:
case USE_ADD_ATTRIBUTE :
Bunun altındaki;

C++:
if (item2->GetAttributeCount() < 4)
{

Bu kısmın altına eklemeyi dene.
 
C++:
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Başarıyla Eklendi."));
Bu kısmın altuna bir return false ekle
 
itemin type: ITEM_USE subtype: USE_ADD_ATTRIBUTE olduğundan emin misin?
 
USE_ADD_ATTRIBUTE'daki mevcut kodları düzenleyebilirsiniz. Eşyanın vnumu şu ise benim belirlediğim efsunları versin gibi.
İsterseniz eşyanın vnumunu ve char_item.cpp'deki USE_ADD_ATTRIBUTE kodlarınızı paylaşın. Sizin için düzenleyeyim.
 
itemin type: ITEM_USE subtype: USE_ADD_ATTRIBUTE olduğundan emin misin?
Evet proto'da o şekilde düzenledim.
USE_ADD_ATTRIBUTE'daki mevcut kodları düzenleyebilirsiniz. Eşyanın vnumu şu ise benim belirlediğim efsunları versin gibi.
İsterseniz eşyanın vnumunu ve char_item.cpp'deki USE_ADD_ATTRIBUTE kodlarınızı paylaşın. Sizin için düzenleyeyim.
Bir çok yöntem denedim ama muhtemelen kaçırdığım bir nokta vardır. USE_ADD_ATTRIBUTE kodu şu şekilde:
C++:
                                case USE_ADD_ATTRIBUTE :
                                    if (item2->GetAttributeSetIndex() == -1)
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
                                        return false;
                                    }

                                    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);
                                    }
                                    //SIKINTI YAŞADIĞIM ALAN - BAŞLANGIÇ.
                                    else if (item2->GetAttributeCount() < 4)
                                    {
                                        if (item->GetVnum() == 71350)
                                        {
                                            if (item2->GetType() == ITEM_WEAPON)
                                            {
                                                item2->ClearAttribute();
                                                item2->SetForceAttribute(0, APPLY_STR, 5); //Güç +5
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Başarıyla Eklendi."));
                                                return false;
                                            }
                                            else
                                            {
                                                ChatPacket(CHAT_TYPE_INFO, "Eklenemedi");
                                                return false;
                                            }
                                        }
                                    }

                                    else if (item2->GetAttributeCount() < 4)
                                    {
                                        if (item->GetVnum() == 71351)
                                        {
                                            if (item2->GetType() == ITEM_WEAPON)
                                            {
                                                item2->ClearAttribute();
                                                item2->SetForceAttribute(0, APPLY_DEX, 5); //Çeviklik +5
                                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Başarıyla Eklendi."));
                                                return false;
                                            }
                                            else
                                            {
                                                ChatPacket(CHAT_TYPE_INFO, "Eklenemedi");
                                                return false;
                                            }
                                        }
                                    }
                           
                                    else
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("´õÀÌ»ó ÀÌ ¾ÆÀÌÅÛÀ» ÀÌ¿ëÇÏ¿© ¼Ó¼ºÀ» Ãß°¡ÇÒ ¼ö ¾ø½À´Ï´Ù."));
                                    }
                                    break;
                                    //SIKINTI YAŞADIĞIM ALAN - SON.
Hocam açtığınız konunun baya bir yardımı oldu fakat kodunuzu istediğim şekilde üstünde oynama yapamadım. Fakat denemelere devam edeceğim.
 
case bloğunu bu şekilde dener misin?
C++:
                                case USE_ADD_ATTRIBUTE :
                                    if (item->GetVnum() == 71351)
                                    {
                                        if (item2->GetType() != ITEM_WEAPON)
                                            return false;
                                        
                                        if (item2->GetAttributeCount() >= 4)
                                            return false;
                                        
                                        item2->ClearAttribute();
                                        item2->SetForceAttribute(0, APPLY_DEX, 5); //?eviklik +5
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Basariyla Eklendi."));

                                        return false;
                                    }
                                    
                                    if (item2->GetAttributeSetIndex() == -1)
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("쩌?쩌쨘?쨩 쨘짱째챈?? 쩌철 쩐첩쨈? 쩐???????쨈?쨈?."));
                                        return false;
                                    }

                                    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);
                                    }
                                    break;
 
case bloğunu bu şekilde dener misin?
C++:
                                case USE_ADD_ATTRIBUTE :
                                    if (item->GetVnum() == 71351)
                                    {
                                        if (item2->GetType() != ITEM_WEAPON)
                                            return false;
                                     
                                        if (item2->GetAttributeCount() >= 4)
                                            return false;
                                     
                                        item2->ClearAttribute();
                                        item2->SetForceAttribute(0, APPLY_DEX, 5); //?eviklik +5
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Basariyla Eklendi."));

                                        return false;
                                    }
                                 
                                    if (item2->GetAttributeSetIndex() == -1)
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("쩌?쩌쨘?쨩 쨘짱째챈?? 쩌철 쩐첩쨈? 쩐???????쨈?쨈?."));
                                        return false;
                                    }

                                    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);
                                    }
                                    break;
Anladığım kadarıyla bu kodlarda efsunları tamamen silip 1. efsuna çeviklik getirecektir. item2->ClearAttribute(); kodunu silse bile bu efsun üstüne eklemeyecektir. 1. efsuna çeviklik getirecektir diye düşünüyorum. Arkadaşın aradığı çeviklik efsununu iteme atabilmek.

item2->SetForceAttribute(0, APPLY_DEX, 5); //?eviklik +5 bu satırada ki 0 değeri soketin konumu. 2 efsunlu bir iteminüstüne 3. efsun olarak çevikliği getirmesi için hangi kodu yazması gerekir?
 
case bloğunu bu şekilde dener misin?
C++:
                                case USE_ADD_ATTRIBUTE :
                                    if (item->GetVnum() == 71351)
                                    {
                                        if (item2->GetType() != ITEM_WEAPON)
                                            return false;
                                       
                                        if (item2->GetAttributeCount() >= 4)
                                            return false;
                                       
                                        item2->ClearAttribute();
                                        item2->SetForceAttribute(0, APPLY_DEX, 5); //?eviklik +5
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Basariyla Eklendi."));

                                        return false;
                                    }
                                   
                                    if (item2->GetAttributeSetIndex() == -1)
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("쩌?쩌쨘?쨩 쨘짱째챈?? 쩌철 쩐첩쨈? 쩐???????쨈?쨈?."));
                                        return false;
                                    }

                                    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);
                                    }
                                    break;

Şöyle yapılabilir: item2->SetForceAttribute(item2->GetAttributeCount(), APPLY_MAX_HP, 3500)
Linkleri görebilmek için giriş yap veya kayıt ol.

İkinizin de eline koluna yüreğine sağlık. Saatlerdir düşündüğüm şeyi hemen çözebildiniz. Sonunda sistem güzel bir şekilde çalışıyor.

C++:
                                    if (item->GetVnum() == 71350)
                                    {
                                            if (item2->GetType() != ITEM_WEAPON) // İtem tipi dışında kullanımı engeller.
                                                return false;
                                            if (item2->GetAttributeCount() >= 7) // 7 efsuna kadar kullanılır.
                                                return false;
                                            if (item2->HasAttr(APPLY_STR)) // Aynı efsun varsa engellenir.
                                                return false;
                                            item2->SetForceAttribute(item2->GetAttributeCount(), APPLY_STR, 5); // Güç +5 verir. 5 yerine istediğiniz miktarı yazabilirsiniz.
                                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Güç Bonusu Eklendi!")); // Başarılı mesajı.
                                                return false;
                                    }

Bonusun eklenemediği halde çıkacak "Bonus Eklenemedi" mesajını ayarlayamadım bir tek ama çokta önemli değil.

Tekrardan hepinize çok teşekkür ederim.
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst