Yardım Efsunların gelme şansları nedir?

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

TheAdmin33

Geliştirme günlüğü olmayan adam
Geliştirici
Yardımsever Üye
Usta Üye
Editör
Mesaj
893
Çözümler
52
Beğeni
1.851
Puan
1.149
Ticaret Puanı
0
Efsun botu yapmak istiyorum ama tek tek efsun atanlardan yapmak istemiyorum.

Yapmak istediğim şuan oyunda efsunların itemlere gelme şansına göre bir formül ortaya çıkartmak ve bu formülle yapılan işlemin sonucu belirli değerler aralığında olursa SetForceAttribute fonksiyonunu kullanarak iteme oyuncunun istediği efsunları eklemek istiyorum.

İhtiyacım olan şey şu; bir iteme bir efsunun gelme şansı tam olarak nedir ya da nerede hesaplanıyor?
 
Onu bilmiyorum da bizdeki efsun botu gibi meseleyi zamanında kaynak kodlarını incelediğim bir oyunda görmüştüm

Adam seçilen oranlar için şöyle mantık kurmuş, metin2 ye uyarlayıp anlatacağım

5-15-25 değerlerinde bir random geliyor bu bizim şans oranımız oluyor 200 adet nesneyi slota koyuyor yğzde 5 şans geldi ya 200 adet koyduğu için 1 ile 200 arasında bir random daha dönüyor eğer çıkan sayı 1 ile 10 arasındaysa itemr efsunları koyup 200 lü efsun nesnesini siliyor, eğer çıkmadıysa her 200lü efsun nesnesinde baştan bu döngü oluyor, yaklaşık 1 saniye içinde oyuncu 200lü efsun atıyor(tabi otomatik at seçeneği de var, premium oyumcuşara özel olarak)
 
item_attribute.cpp:
Genişlet Daralt Kopyala
void CItem::ChangeAttribute(const int* aiChangeProb)
{
    int iAttributeCount = GetAttributeCount();

    ClearAttribute();

    if (iAttributeCount == 0)
        return;

    TItemTable const * pProto = GetProto();

    if (pProto && pProto->sAddonType)
    {
        ApplyAddon(pProto->sAddonType);
    }

    static const int tmpChangeProb[ITEM_ATTRIBUTE_MAX_LEVEL] =
    {
        0, 10, 40, 35, 15,
    };

    for (int i = GetAttributeCount(); i < iAttributeCount; ++i)
    {
        if (aiChangeProb == NULL)
        {
            PutAttribute(tmpChangeProb);
        }
        else
        {
            PutAttribute(aiChangeProb);
        }
    }
}

0, 10, 40, 35, 15 verilerini değiştirerek oradaki orana göre koyuyor. sokete taş girme oranı gibi düşünebilirsin. mesela 5 seviye dediğimiz (kılıç savunmasının 5 oranı olduğunu varsayalım %2 den %10 a kadar çift sayılar) %10 kılıç savunma gelme oranı %15. ben böyle anladım yani. deneyip anlayabilirsin. attribute tablosundaki efsunları okuyor ona göre oradan rastgele efsun veriyor. ordaki efsun sayısı az ise şans artar.
 
Zamanında kadim efsun nesnesi sistemi yazarken oyunun neye göre hesapladığını çözmek için php tarafında da denemeler yapmıştım. Oyuncuların asla gelmeyecek efsun kombinasyonlarını engellemek içindi. Şans için prob değerine göre belirleniyor.

Biraz bakındım pcye bulamadım kodlarımı. Galiba eski bilgisayarımda yarın gün içinde açıp kodları eklerim buraya
 
Zamanında kadim efsun nesnesi sistemi yazarken oyunun neye göre hesapladığını çözmek için php tarafında da denemeler yapmıştım. Oyuncuların asla gelmeyecek efsun kombinasyonlarını engellemek içindi. Şans için prob değerine göre belirleniyor.

Biraz bakındım pcye bulamadım kodlarımı. Galiba eski bilgisayarımda yarın gün içinde açıp kodları eklerim buraya
Kodu buldum. Birebir oyundaki efsun gelme olasılığıdır. Efsun nesnesini her attığınızda yapılan işlemlerdir. Zamanında daha iyi kavramak için PHP ile deneme yapmıştım.


PHP:
Genişlet Daralt Kopyala
<?php
$efsunlar = array(
        '0' =>'Yok',
        '1' =>'Max HP +',
        '2' =>'Max SP +',
        '3' =>'Yaşam Enerjisi +',
        '4' =>'Zeka +',
        '5' =>'Güç +',
        '6' =>'Çeviklik +',
        '7' =>'Saldırı Hızı +',
        '8' =>'Hareket Hızı +',
        '9' =>'Büyü Hızı +',
        '10' =>'HP Üretimi +',
        '11' =>'SP Üretimi +',
        '12' =>'Zehirleme Değişimi +',
        '13' =>'Sersemletme Değişimi +',
        '14' =>'Yavaşlık Değişimi +',
        '15' =>'Kritik Vuruş Şansı +',
        '16' =>'Delici Vuruş Şansı +',
        '17' =>'Yarı İnsanlara Karşı Güçlü +',
        '18' =>'Hayvanlara Karşı Güçlü +',
        '19' =>'Orklara Karşı Güçlü +',
        '20' =>'Mistiklere Karşı Güçlü +',
        '21' =>'Ölümsüzlere Karşı Güçlü +',
        '22' =>'Şeytanlara Karşı Güçlü +',
        '23' =>'Hasar HP Tarafından Emilicek %',
        '24' =>'Hasar SP Tarafından Emilicek %',
        '25' =>'Düşmanın Spsini Çalma Sansi %',
        '26' =>'Vuruş Yapıldığında Spyi geri Çalma %',
        '27' =>'Beden Karşısındaki Atakların Bloklanması %',
        '28' =>'Oklardan Korunma Şansı %',
        '29' =>'Kılıç Savunması %',
        '30' =>'Çift-El Savunması %',
        '31' =>'Bıçak Savunması %',
        '32' =>'Çan Savunması %',
        '33' =>'Yelpaze Savunması %',
        '34' =>'Oka Karşı Dayanıklılık %',
        '35' =>'Ateşe Karşı Dayanıklılık %',
        '36' =>'Simgeye Karşı Dayanıklılık %',
        '37' =>'Büyüye Karşı Dayanıklılık %',
        '38' =>'Rüzgar Dayanıklılığı %',
        '39' =>'Vücut Darbesini Yansıtma Şansı %',
        '40' =>'Lanet Yansıtılması %',
        '41' =>'Zehre Karşı Koyma %',
        '42' =>'Sp Yüklenmesi Değişti +',
        '43' =>'Yang Düşme Şansı +',
        '44' =>'Yang Düşme Şansı +',
        '45' =>'Eşya Düşme Şansı +',
        '46' =>'Trank effekt zuwachs +',
        '47' =>'HP Yüklenmesi Değişti %',
        '48' =>'Sersemletme Karşısında Bağışıklık +',
        '49' =>'Yavaşlatma Karşısında Bağışıklık +',
        '50' =>'Imun gegen Stürzen +',
        '52' =>'Bogenreichweite +',
        '53' =>'Saldırı Değeri +',
        '54' =>'Savunma +',
        '55' =>'Büyülü Saldırı Değeri +',
        '56' =>'Büyülü Savunma +',
        '57' => 'test',
        '58' =>'Max Dayanıklılık +',
        '59' =>'Savaşçılara Karşı Güçlü %',
        '60' =>'Ninjalara Karşı Güçlü %',
        '61' =>'Suralara Karşı Güçlü %',
        '62' =>'Şamanlara Karşı Güçlü %',
        '63' =>'Yaratıklara Karşı Güçlü %',
        '64' =>'Saldırı Değeri +',
        '65' =>'Savunma +',
        '66' =>'EXP +?%',
        '67' =>'Dropchance [Gegenstände] +',
        '68' =>'Dropchance [Gold] +',
        '71' =>'Beceri Hasarı %',
        '72' =>'Ortalama Zarar %',
        '73' =>'Widerstand gegen Fertigkeitsschaden +',
        '74' =>'durchschn. Schadenswiderstand +',
        '76' =>'iCafe exp-bonus +',
        '77' =>'iCafe Chance auf erbeuten von gegenständen +',
        '78' =>'Savaşçı Saldırılarına Karşı Savunma %',
        '79' =>'Ninja Saldırılarına Karşı Savunma %',
        '80' =>'Sura Saldırılarına Karşı Savunma %',
        '81' =>'Şaman Saldırılarına Karşı Savunma %');
      
try {
    $db = new PDO("mysql:host=localhost;dbname=player", "root", "");
} catch ( PDOException $e ){
    print $e->getMessage();
}

$attrs = $db->query("SELECT * FROM item_attr", PDO::FETCH_OBJ)->fetchAll();


function efsunEkle($attrs)
{
    $avail = [];
    $total = 0;

    foreach($attrs as $key => $attr)
    {
        if($attr->weapon)
        {
            //die(var_dump($attr)); //- whistle
            array_push($avail, $key);
            $total += $attr->prob;
        }
    }

    $prob = rand(1, $total);
    $attr_idx = 0;

    for ($i = 0; $i < count($avail); ++$i)
    {
        $selectAttr = $attrs[$avail[$i]];
      
        if ($prob <= $selectAttr->prob)
        {
            $attr_idx = $avail[$i];
            break;
        }
      
        $prob -= $selectAttr->prob;
    }
  
    return $attr_idx;
}

for($i2 = 0; $i2 < 4; $i2++)
{
    echo $i2." . efsun: ".$efsunlar[efsunEkle($attrs)]."<br />";
}

/*echo $attr_idx."<br>";
echo $prob;
die(var_dump($avail));*/
?>
 
Üst