Çözüldü Efsun değerlerine yeni bakış açısı

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ı.

bloodzgn

Çaylak Üye
Üye
Merhaba,

Öncelikle forumda gördüğüm kadarıyla herkes bir şeyleri öğrenme derdinde olduğunu ve insanların birbirine yardım ettiğini görünce çok etkilendim. Türkiye'nin böyle bir foruma sahip olması beni etkiledi. Bunun için forumda bulunan bütün arkadaşlara teşekkür ederim.

Yardım istediğim konuya gelirsek, bildiğimiz gibi efsun oranları 5 kademe şeklindedir. Benim yapmaya çalıştığım ise bu mantığı kaldırıp oransal bir efsun nesnesi oluşturmak.

Örnek olarak,
HP --> 500 ile 3000 arası herhangi bir oranda gelmesi. (502,515,1920 vs. gibi)
STR --> 3 ile 12 arası gelmesi (3,4,5,6,7,8,9,10,11,12)

Charitem.cpp kullandığım kod.

char_item.cpp USE_ADD_ATTRIBUTE:
                                case USE_ADD_ATTRIBUTE:
                                    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("Guc Bonusu Eklendi!")); // Başarılı mesajı.
                                                return false;
                                    }

                                    if (item->GetVnum() == 71351)
                                    {
                                        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_DEX)) // Aynı efsun varsa engellenir.
                                            return false;
                                        item2->SetForceAttribute(item2->GetAttributeCount(), APPLY_DEX, 5); // Güç +5 verir. 5 yerine istediğiniz miktarı yazabilirsiniz.
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Çeviklik Bonusu Eklendi!")); // Başarılı mesajı.
                                        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;

Yani ortalama zarar gibi efsunların gelmesini istiyorum. Forumda paylaşılan bir konuda spesifik efsun nesnesi oluşturması yapıldı. Bu kodlar üzerinden bunu yapmaya çalışıyorum. Yardımcı olursanız sevinirim.

İyi forumlar.
 
Ortalama zarar hesaplarken gauss_random kullanılıyor hesaplamak için yani kısmen rastgele geliyor oran.

number(min, max) ile dediğin yapılabilir ---> number(500, 1500) // hp 500 ile 1500 arasında gelecek
 
Ortalama zarar hesaplarken gauss_random kullanılıyor hesaplamak için yani kısmen rastgele geliyor oran.

number(min, max) ile dediğin yapılabilir ---> number(500, 1500) // hp 500 ile 1500 arasında gelecek

item2->SetForceAttribute(item2->GetAttributeCount(), APPLY_STR, 5);

kodunu 1-12 arası şeklinde nasıl yapabiliriz yani?

Vermiş olduğunuz cevap için teşekkürler.
 
Dediğiniz özelliği çok beğendim mesela savunmaları 8-15 arasında bir değerde olması hpnin 500-3000 arasında rastgele gelmesi, yarı ibsanın hakeza aynı şekilde 1-10 arasında rastgele dönmesi emek tipi oyunlarda efsun nesnesi eşyasının değerini çok arttırır. Çok gğzel öneri sunmuşsunuz.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri