PHP İle Rasgele Efsun Getirme

Whistle

Ruhsuz :/
Kurucu
Geliştirici
Yardımsever Üye
Mesaj
11.944
Çözümler
567
Beğeni
13.699
Puan
5.915
Ticaret Puanı
2
Merhaba arkadaşlar,
Eskiden efsun sisteminin mantığını çözmek için php ile basit bi script yazmıştım.
Burada " Çözüldü - Olmayan efsunları geri getirme? " yorum yazarken aklıma gelmişti ve eski dosyaları silmediğimi fark ettim. :)

Bunu ne için kullanabiliriz?
  • Mesela yönetim panelinden oyunculara rasgele efsunlu item göndermek için kullanabilirsiniz.
  • Efsunların gelme oranlarını ayarlarken kullanabilirsiniz.

Kodlar;
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 efsunEkleWhistle($attrs)
{
    $avail = [];
    $total = 0;

    foreach($attrs as $key => $attr)
    {
        if($attr->weapon)
        {
            //die(var_dump($attr));
            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[efsunEkleWhistle($attrs)]."<br />";
}

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

Sonuçlar şu şekildedir;
php efsun prob.webp


Sayfayı her yenilediğiniz zaman otomatik olarak efsunlar değişecek. Mevcut kodlarda silahlara gelebilen efsunlar tanımlı. Şu satırı düzenleyerek diğer item türleri içinde kullanabilirsiniz.
PHP:
Genişlet Daralt Kopyala
        if($attr->weapon)

İtem bazlı yapmak için ise. Herhangi bir itemi veritabanından çektirip onun type değerini girebilirsiniz. Bu sadece taslak bi çalışma.

$efsunlar değişkenine atanmış olan diziyi kendi filesinize uygun olarak değiştirebilirsiniz.
Veritabanına bağlanmak için şu satırı düzenleyin;
PHP:
Genişlet Daralt Kopyala
   $db = new PDO("mysql:host=localhost;dbname=player", "root", "");


Bu kodların çalışması için bilgisayarınızda apache ve mysql kurulu olması gerekiyor. wampserver veya xampp programları ile kurabilirsiniz.
 
Konunuzu görmüşken bir şey sormak istiyorum. PHP ile kadim efsun yapmak istiyorum ve bunu yapabilirim bunda sorun yok fakat çok eskiden php ile item sildirme yaptığım zaman anında silinmiyordu reboot atılıyordu. Sorun şu ki kadim efsun için envanterden itemi seçtikten sonra bu itemin socketlerini vs (efsunlar taşlar vs. )kopyalayıp yine aynı iteme yapıştırabilecek şekilde aklıma geldi php kısmı. Ama bu itemi silinmezse bug olur bu konuda c++ devreye giriyor sanırım ama bilmedigim bir dil elim kolum bağlanıyor. Bu sistemin tabii c++ kısmı var piyasada ama buglu örn 2 kere yarı insan eklenebiliyor iteme ben de anlamadıgım için fixleyemiyorum bari bildigim dilden gidiyim diyorum sorun yaşanıyor.
 
Geri
Üst