Çözüldü Kadim Efsun Küresi Çok Düşük Yüzde Veriyor

  • Konuyu açan Konuyu açan LethalStrikeR
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 21
  • Gösterim Gösterim 2K
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ı.

LethalStrikeR

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
701
Çözümler
41
Beğeni
168
Puan
609
Ticaret Puanı
0
Herkese merhaba;
Kadim efsun küresini kullanınca son efsunun değeri %6 dan fazla gelmiyor maks. efsun değeri %20 olsa bile gelmiyor. Kodlara baktım ama çözümleyemedim.

C++:
Genişlet Daralt Kopyala
            case 71052:
            {
                LPITEM item2;
                if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
                    return false;
                if (ITEM_COSTUME == item2->GetType())
                { // @fixme15
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));
                    return false;
                }
                if (item2->IsExchanging() || item2->IsEquipped()) // @fixme14
                    return false;
                if (item2->GetAttributeSetIndex() == -1)
                {
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));
                    return false;
                }
                if (item2->GetAttributeCount() == 5)
                {
                    item2->RemoveAttributeAt(4);
                    item2->AddAttribute();
                    item->SetCount(item->GetCount()-1);
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("NEW_ATTRIBUTE_SUCCESS_MARBLE"));
                }
                else if (item2->GetAttributeCount() == 4)
                {
                    item2->AddAttribute();
                    item->SetCount(item->GetCount()-1);
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("NEW_ATTRIBUTE_SUCCESS_MARBLE"));
                }
                else
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("NEW_ATTRIBUTE_MARBLE_ENOUGH_ATTR_COUNT"));
            }
            break;
 
Çözüm
Galiba oranların toplamları 100’ü geçmemesi gerekiyordu.

Önceki mesajımda değiştirin dediğimi yeri şöyle değiştirebilir misiniz?
C++:
Genişlet Daralt Kopyala
    static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =
    {
        10, 40, 20, 15, 15
    };
AddAttribute fonksiyonunu inceleyin
Böyle bir fonksiyon mevcut item_addon.cpp dosyasında bir yanlışlık var mı ?
C++:
Genişlet Daralt Kopyala
void CItem::AddAttribute()
{
    static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =
    {
        40, 50, 10, 0, 0
    };

    if (GetAttributeCount() < MAX_NORM_ATTR_NUM)
        PutAttribute(aiItemAddAttributePercent);
}
 
Hayır itemin seviyesi değil. player.item_attr’ye gelin orada her efsun için 5 ayrı seviye belirlenmiş. 1’den 5’e kadar. Eğer oranlar official ise level arttıkça verdiği efsun miktarıda artar. Bu değerlerle oynamayı deneyin
 
Hayır itemin seviyesi değil. player.item_attr’ye gelin orada her efsun için 5 ayrı seviye belirlenmiş. 1’den 5’e kadar. Eğer oranlar official ise level arttıkça verdiği efsun miktarıda artar. Bu değerlerle oynamayı deneyin
99. seviye GM hesabıyla da aynı oranları veriyor 25 level savaşçıylada. Player.item_attr böyle;

Screenshot_1.jpg

Screenshot_2.jpg
 
Tamamdır sorunu şimdi anladım. Hangi sistemi kullandınız bu sistemi kim kodladı bilmiyorum ama Metin2’nin varsayılan arttırma kağıdı oranlarını kullanıyor. Metin2’nin varsayılan efsun oranlarında ise arttırma kağıdı ile eklerken en fazla 3. seviye oranı geliyor. 4 ve 5. seviye gelmez. Efsun nesnesi atmak gerekiyor. Kadim efsun küresinde ise 4. ve 5. seviye efsunların gelmesini istiyorsak düzenleme yapmak gerekecek. Eğer arttırma kağıdının oranlarını bozmak istemezseniz kadim efsun küresi için ayrı fonksiyon yazabilirsiniz ya da aşağıdaki yönergeleri takip ederek sorunu kısa yoldan çözebilirsiniz.

Şu kodu;
C++:
Genişlet Daralt Kopyala
    static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =
    {
        40, 50, 10, 0, 0
    };

Şöyle değiştirmeyi dener misiniz?
C++:
Genişlet Daralt Kopyala
    static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =
    {
        40, 50, 30, 25, 15
    };
 
TC'nin paylaşılan official sistemini kullandım. Bu yaptığımız işlemde neyi değiştiriyoruz biraz daha detaylı anlatabilir misiniz? Birde kadim efsun için ayrı nasıl fonksiyon yazılabilir? Sistem içerisinde ki kodlarda "ITEM_ATTRIBUTE_MAX_LEVEL" Yazan yeri yazacağım yeni fonksiyona göre mi değiştireceğim? Bu arada bu sorun sadece kadim efsun küresinde var, kadim efsun nesnesinde mevcut değil.
 
4. ve 5. seviye efsunların gelmesi için şans oranlarını değiştiriyoruz. Söylediklerimi uygulayıp kontrol edebilirsiniz. Konu başlığı aklımda yanlış kalmış :) Mesajımı düzenledim.
 
4. ve 5. seviye efsunların gelmesi için şans oranlarını değiştiriyoruz. Söylediklerimi uygulayıp kontrol edebilirsiniz. Konu başlığı aklımda yanlış kalmış :) Mesajımı düzenledim.
Demek istediğinizi şimdi oyun içinde kontrol edince anladım. Efsun eklerken oranları zaten officialde olduğu gibi lv3 e kadar getiriyor. Değiştirmeye başlayınca lv5 ve lv6 devreye giriyor. Kadim efsun küresi de efsunu değiştirirken 5. efsunu silip bir daha eklediği için max lv3 getiriyor. Şimdi verdiğiniz kodları uygulayınca büyük ihtimalle efsun eklediğimde lv5'e kadar random verecek.
 
Son düzenleme:
Aynen bu şekilde. Bi deneyin ama daha sonra son durumu bildirmeyi unutmayın
 
Aynen bu şekilde. Bi deneyin ama daha sonra son durumu bildirmeyi unutmayın
Sonuç maalesef aynı. ChangeAttribute fonksiyonundan alsam o kod bloğunu;

ChangeAttribute fonksiyonunda böyle;
C++:
Genişlet Daralt Kopyala
    static const int tmpChangeProb[ITEM_ATTRIBUTE_MAX_LEVEL] =
    {
        0, 10, 40, 35, 15,
    };
@Whistle
Yada böyle yapmak yerine direk kadim efsun nesnesi 5 tane efsun ekleyebilse daha mantıklı bir sonuç çıkarmaz mı ?
C++:
Genişlet Daralt Kopyala
            case 71051 : // AøAc°¡
            {
                LPITEM item2;
                if (!IsValidItemPosition(DestCell) || !(item2 = GetInventoryItem(wDestCell)))
                    return false;
                if (ITEM_COSTUME == item2->GetType())
                { // @fixme15
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));
                    return false;
                }
                if (item2->IsExchanging() || item2->IsEquipped()) // @fixme14
                    return false;
                if (item2->GetAttributeSetIndex() == -1)
                {
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));
                    return false;
                }
                if (item2->AddRareAttribute() == true)
                {
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("성공적으로 속성이 추가 되었습니다"));
                    int iAddedIdx = item2->GetRareAttrCount() + 4;
                    char buf[21];
                    snprintf(buf, sizeof(buf), "%u", item2->GetID());
                    LogManager::instance().ItemLog(GetPlayerID(), item2->GetAttributeType(iAddedIdx), item2->GetAttributeValue(iAddedIdx), item->GetID(), "ADD_RARE_ATTR", buf, GetDesc()->GetHostName(), item->GetOriginalVnum());
                    item->SetCount(item->GetCount() - 1);
                }
                else
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더 이상 이 아이템으로 속성을 추가할 수 없습니다"));
            }
            break;
 
Son düzenleme:
Denemeleri sıklaştırın çalışması gerekiyor. Kadim efsun nesnesini 5 destekli yapabilirsiniz ancak baya düzenleme yapmanız gerekecek. Ki zaten böyle olursa aşırı kolay olmaz mıı :))
 
Galiba oranların toplamları 100’ü geçmemesi gerekiyordu.

Önceki mesajımda değiştirin dediğimi yeri şöyle değiştirebilir misiniz?
C++:
Genişlet Daralt Kopyala
    static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =
    {
        10, 40, 20, 15, 15
    };
 
Çözüm
Galiba oranların toplamları 100’ü geçmemesi gerekiyordu.

Önceki mesajımda değiştirin dediğimi yeri şöyle değiştirebilir misiniz?
C++:
Genişlet Daralt Kopyala
    static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =
    {
        10, 40, 20, 15, 15
    };
Bu koddakini mi değiştiricez?
C++:
Genişlet Daralt Kopyala
void CItem::AddRareAttribute2(const int* aiAttrPercentTable)
{
    static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =
    {
        40, 50, 10, 0, 0
    };
    if (aiAttrPercentTable == NULL)
        aiAttrPercentTable = aiItemAddAttributePercent;

    if (GetRareAttrCount() < MAX_RARE_ATTR_NUM)
        PutRareAttribute(aiAttrPercentTable);
}
Yoksa bu mu
C++:
Genişlet Daralt Kopyala
void CItem::AddAttribute()
{
    static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =
    {
        40, 50, 10, 0, 0
    };

    if (GetAttributeCount() < MAX_NORM_ATTR_NUM)
        PutAttribute(aiItemAddAttributePercent);
}
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst