Blog - Silkroad Online'da Artı Basmanın Matematiği: Gerçek Oyun Kodlarıyla Alchemy Başarı Oranları | SroCave - SRO Destek Forumu

Blog Silkroad Online'da Artı Basmanın Matematiği: Gerçek Oyun Kodlarıyla Alchemy Başarı Oranları

  • Konbuyu başlatan Konbuyu başlatan RanstaMonsta
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 13

RanstaMonsta

Level up worldwide
Katılım
30 Ağu 2022
Mesajlar
593
Tepkime puanı
7,467
Puanları
93
ranstamonsta
Silkroad Online'da Artı Basmanın Matematiği: Gerçek Oyun Kodlarıyla Alchemy Başarı Oranları

Giriş

Herkese merhaba SroCave ailesi!
Bu yazıda, Hyperbot adında yeni bir Silkroad Online botu geliştirmek üzerine çalışan yabancı developer SandSnip3r tarafından kaleme alınmış kapsamlı bir simya (alchemy) analizini sizlerle buluşturuyorum. Silkroad'daki artı basma sisteminin arkasındaki matematiksel sırları, başarı oranlarını ve otomatik bir bot geliştirirken bu verilerin neden hayati bir öneme sahip olduğunu detaylarıyla anlatan bu değerli makaleyi sizler için bizzat derleyip Türkçeleştirdim.

Türk Silkroad Online topluluğu için özel olarak hazırladığım bu içerik, yalnızca SroCave platformu üzerinden sizlerle paylaşılmaktadır. Şimdi gelin, simyanın perde arkasındaki o meşhur oyun kodlarına, şans oranlarına ve bot otomasyonunun mantığına hep birlikte göz atalım.

Silkroad Online'da Simya
Silkroad Online'da simya, eşyaları ve şansı kullanarak ekipmanları güçlendirme işlemine denir. Silkroad'da simyanın birkaç farklı odak noktası vardır; ben sadece bir eşyanın artısı veya +'sı, yani geliştirme seviyesi (enhancement level) veya opt level olarak bilinen kısmından bahsedeceğim. Silkroad'da silah (weapon), kalkan (shield), zırh (protector) ve takı (accessory) olmak üzere birkaç farklı eşya sınıfı bulunur. Bir ekipmanın artısı, kalitesini artırmanın en genel yoludur. Silahlar için daha yüksek bir artı, daha yüksek büyü (magical) ve/veya fiziksel hasar anlamına gelir. Zırh, kalkan ve takı türleri için ise daha yüksek bir artı, daha yüksek büyü ve/veya fiziksel savunma sağlar.

optlevel.png


[Resim: +7 bir silah. Fiziksel ve büyüsel saldırı gücü, artının yükselmesinden fayda sağlayan tek istatistiklerdir.]

Bir eşyanın artısını yükseltmek için birkaç simya materyaline ihtiyacımız var. Temel materyale Intensifying Elixir denir. Her eşya sınıfı için ayrı elixir'ler bulunur: weapon, protector, accessory ve shield elixir'leri. Bir eşyayı güçlendirmek için elixir kullanırken, başarı veya başarısızlık ihtimali vardır. Başarılı olursanız, ekipmanın geliştirme seviyesi 1 artar. Başarısız olursanız, ekipmanın seviyesi 0'a düşer. Başarsanız da başaramasanız da elixir harcanır.

alchemy.gif


[Gif: Bir weapon elixir kullanılarak +5 bir blade'i +6 yapma denemesi. Deneme başarısız oluyor ve blade +0'a sıfırlanıyor.]

Elixir'lerin yanı sıra, başarılı bir geliştirme şansınızı artıran birkaç eşya daha vardır. Eşyaları güçlendirirken en sık kullanılan eşya Lucky Powder'dır. Başarı veya başarısızlık durumunda lucky powder tüketilir. Başarı şansınıza yardımcı olan daha nadir bir eşya ise Magic Stone of Luck'tır. Magic Stone of Luck'ın, lucky powder'dan farklı bir uygulama mekaniği vardır. Magic stone'lar ekipmanlara ayrı bir simya adımıyla uygulanır ve ekipmana bir "magic option" (blue) ekleyebilir veya artırabilir. Magic Stone of Luck durumunda, silaha uygulanırken %100 başarı şansına sahiptir ve eşyaya "1 Lucky" verir. Lucky blue'suna sahip bir ekipmanda kullanılacak bir sonraki elixir daha yüksek bir başarı şansına sahip olacak ve basım sonrası bu Lucky blue'sunu silecektir (tüketecektir).

magic_stone_of_luck.png
lucky_magic_option.png


[Resim: Solda Magic Stone of Luck, sağda ise Lucky blue'su basılmış bir blade.]

Simyayı Otomatikleştirmek
Artık simyanın bu bölümünün nasıl çalıştığını anladığımıza göre, bunu nasıl otomatikleştireceğiz? Bu yazı, botun simya mekaniklerini gerçekleştirmesi için gereken teknik detaylardan bahsetmeyecek. Bunun yerine, bir Silkroad Online botunun otomatikleştirmesi gereken birçok şeyden biri olan simyayı yaparken botun sahip olması gereken karar verme mekanizmasından bahsedeceğim.

Bir Silkroad Online botu zamanının büyük bir bölümünü sahada yaratık keserek ve ganimet toplayarak geçirecektir. Buna genellikle kasmak (grinding) denir. Bot kasarken birçok farklı simya materyali toplar. Bir noktada, botun kasmaya ara verip topladığı tüm simya materyallerini kendi ekipmanını güçlendirmek için kullanması akıllıca olacaktır. Sonuçta, bot silahını geliştirebilirse yaratıkları daha hızlı kesebilir ve bu da simya materyallerini daha da hızlı toplamasına yol açar.

Ancak asıl büyük soru şudur: Bot bu kararı nasıl vermeli? Simya yeteneklerine sahip mevcut tüm Silkroad botları bu sorunu kullanıcıya bırakıyor. Kullanıcının manuel olarak botu sahada kasmaktan alıkoyması, karakteri şehre getirmesi, tüm simya materyallerini envanterinde toplaması, bazı durdurma koşulları yapılandırması ve botun simya kısmını başlatması gerekiyor. Bence bir bot tüm bunları otomatik yapmalı ve neyi ne zaman yapacağı konusunda doğru kararlar vermeli.

Şans (Luck)
Ne yapılacağına karar verirken birkaç faktör önemlidir:
- Elinizde her bir simya eşyasından kaç adet var?
- Tüm ekipmanlarınızın geliştirme seviyesi (artısı) nedir?
- Herhangi bir geliştirme için başarı olasılığı nedir?

Şimdilik görmezden geleceğimiz başka önemli faktörler de var. Örneğin, sahada çok nadir bir unique yaratık kesiyorsunuzdur ve o an ekipmanınızı geliştirmek için şehre dönmenin en iyi zamanı değildir.

Akıllıca bir karar vermek için, herhangi bir geliştirme işleminin başarı olasılığını bilmemiz gerektiğine inanıyorum. Elixir uygularken başarı şansı nedir? Başarı şansı her geliştirme seviyesi için aynı mıdır? Bu verileri nasıl elde edeceğiz?

Otomatik Veri Toplama
Neyse ki, emrimde kendi Silkroad botum - Hyperbot - var. İzleyeceğim ilk ve en eğlenceli yaklaşım, simyayı otomatikleştirmek ve biraz veri toplamak olacak. Çözmek istediğim en basit şey bir elixir'in başarı oranının ne olduğudur. Daha sonra lucky powder'ları ve luck stone'ları çözebilirim.

Çok fazla veri toplamak için çok fazla elixir'e ihtiyacım var. Otomasyonumu Silkroad'daki bir GM (Game Master) hesabında yapmaya karar verdim. Bu, tüm karakterlerin özel sunucu kontrollerine/komutlarına sahip olduğu özel bir hesap türüdür. İstediğim sunucu komutu /makeitem. Yeni bir elixir'e her ihtiyacım olduğunda, bir weapon elixir düşürmek için basitçe /makeitem ITEM_ETC_ARCHEMY_REINFORCE_RECIPE_WEAPON_B komutunu çalıştıracağım. Komutun başarılı bir şekilde çalıştırılmasının ardından ayaklarımın dibinde bir weapon elixir beliriyor.

Simya otomasyonu sonunda şuna benziyor:
1. Bir elixir çıkar ve eğer envanterimde yoksa yerden al.
2. Blade'e elixir bas.
3. Tekrarla.

Küçük bir detay var: Silkroad'da +5 veya daha yükseğini denerken başarısız olursanız, eşyanızın yok olma ihtimali vardır. Eğer bu olursa, basitçe başka bir blade çıkarıyor, onu alıyor ve devam ediyorum.


[Video: Otomatik simya denemeleri]

Sonuçlar
Bunu neredeyse bir tam gün çalıştırdıktan sonra 30 bin örnek (sample) topladım:

elixir_only.png


[Grafik: Elixir Only - Oranlar]
Bu grafik, ölçülen başarı oranını (yeşil) ve örneklem büyüklüğünü (açık mor) göstermektedir.


Gözlemlediğimiz ilk şey, tüm artı seviyelerinin eşit olasılığa sahip olmadığıdır. Düşük seviyeler oldukça daha kolay. İkinci gözlemimiz ise, yüksek bir artı elde etmenin çok zor olduğu. Bu değerleri kullanarak, 5 elixir ile başarısız olmadan +0'dan +5 elde etme şansınız yaklaşık %0.2'dir.

%50.58 x %40.07 x %29.99 x %19.13 x %17.68 = 0.002056

Lucky Powder
Silkroad'da Lucky Powder'lar yüzükçüden (grocery store) satın alınabilir; ayrıca inanılmaz derecede ucuzdurlar. Pratikte kimse lucky powder olmadan simya yapmaz. Elixir'lerin başarı oranı için bazı iyi verilere ulaştığımdan dolayı, lucky powder'ların simya üzerindeki etkisini bulmak istiyorum. Yine, veri toplama sürecini otomatikleştireceğim. Lucky powder'lar üst üste 50 adet birikebiliyor (stack), bu da bir tane çıkarmak için komut verdiğimde, biraz zaman kazanmak için hazır 50 tane çıkarabileceğim anlamına geliyor. Hyperbot'u elixir'le birlikte lucky powder da kullanacak şekilde değiştirmek çok basit bir işlem.

Güncellenmiş otomasyon süreci şuna benziyor:
1. Bir elixir çıkar ve eğer yoksa yerden al.
2. 50 lucky powder çıkar ve eğer hiç yoksa yerden al.
3. Blade'e elixir ve lucky powder bas.
4. Tekrarla.

Yaklaşık 2000 denemeden sonra verilerim şu şekilde görünüyor:

elixir_powder.png


Gerçek Veriler (Ground Truth)
Bu sırada, veri toplamam çalışırken Silkroad Online geliştirme topluluğuna ulaştım ve birinin Silkroad Online'daki simya oranlarını bulmaya çalışıp çalışmadığını sordum. Birçok kişi kendi private server'ını (özel sunucu) kurmuştur ve simya oranlarını değiştiren birkaç tane görmüştüm. SilkRust Discord sunucusundan Sector1337 hemen elixir'lerin başarı oranlarının ve lucky powder'ların etkilerinin doğrudan Silkroad sunucu veritabanında depolandığına dikkat çekti. Tesadüfen o veritabanına erişimim var, o yüzden bu verilere bir göz atalım.

database.png


Burada, ITEM_ETC_ARCHEMY_REINFORCE_RECIPE_WEAPON_B weapon elixir'i ve ITEM_ETC_ARCHEMY_REINFORCE_PROB_UP_A_10 ise lucky powder'ı temsil ediyor. Oyuna aşina olanlar için bu _A serisi elixir'ler sadece Çin (Chinese) eşyalarıyla çalışan eski bir elixir setidir. _B seti ise oyunda gördüğünüz tipik "Intensifying Elixir"dir. Bunlar Silkroad'daki her iki ırk olan hem Çin hem de Avrupa (European) eşyalarıyla çalışır.

Her neyse, şans oranını bu tablodan çıkarıp çıkaramayacağımıza bakalım. Burada ilgilendiğimiz şey parametreler (params). Elixir'ler için Param1 ve Param5 size elixir'in ne tür eşyalar için kullanıldığını söyler. Peki Param2, Param3 ve Param4 ne içeriyor? Bu "Desc" alanı, bir tür açıklama gibi görünen metinler içeriyor. Bunların her birinin virgülle ayrılmış 4 değeri var. Bu parametreler +1'den +12'ye kadar başarı oranı hakkında bazı bilgiler içerebilir mi? Tablo şemasına bakıldığında, bu Param alanlarının her biri 32 bitlik bir tamsayıdır. Peki ya bu tamsayıyı 4 adet 8 bitlik tamsayıya ayırırsak?

Python:
def unpack(v):
print(f'{v>>24},{(v>>16)&0xFF},{(v>>8)&0xFF},{v&0xFF}')

for v in [841489939, 286331153, 286002188]:
unpack(v)

Yukarıdaki kod için çıktı şu şekildedir:

Kod:
50,40,30,19
17,17,17,17
17,12,12,12

Bunları başarı yüzdesi olarak yorumlarsak, elde ettiğimiz değerler en azından botla ulaşabildiğimiz artı seviyeleri için deneysel sonuçlarımızla çok yakın örtüşüyor.

compare_elixir.png


Bu harika! Artık herhangi bir elixir'in başarı oranına dair kesin (ground truth) verilere sahibiz. Topluluğa göre, +12'den daha yüksek olan her seviye, +12 ile aynı başarı ihtimaline sahip. Peki ya lucky powder'lar? Aynı tekniği veritabanındaki diğer veriler için de kullanalım.

Python:
for v in [840832008, 134744072, 134744072]:
unpack(v)

Çıktı:

Kod:
50,30,20,8
8,8,8,8
8,8,8,8

Bunun, elixir'in başarı oranının üzerine doğrudan eklenen bir bonus (+% şans) olduğunu varsayarsak, deneysel verilerimizle nasıl uyuştuğuna bir bakalım.

compare_elixir_and_powder.png


Bu sonuç, +6 ve üzeri hariç verilerimizle oldukça yakın uyuşuyor. Peki +6 ve sonrasında ne oluyor? Örneklem boyutunu gösterdiğimiz önceki grafiğimize dönüp bakarsak, buralardaki deneme sayısının gerçekten çok düşük olduğunu görüyoruz (sırasıyla sadece 20, 2, 1 ve 2). Buradaki ufak tutarsızlıkların düşük deneme sayısından (örneklem yetersizliğinden) kaynaklandığını varsaymak yanlış olmaz.

Magic Stone of Luck (Luck Taşı)

Harika! Elixir'ler ve lucky powder'lar için kesin verilerimiz var. Peki Magic Stone of Luck'ın (Luck taşı) etkisi nedir? Toplulukta da biraz sordum ve anladığım kadarıyla bu veri veritabanında bulunmuyor; oyuncular genellikle bunun gameserver (sunucu) dosyalarına gömülü olduğunu (hard-coded) düşünüyor. Bu, veri toplamak için Hyperbot'u tekrar kullanmak adına harika bir bahane. Her denemede eşyaya Lucky blue'su basması için botta küçük bir değişiklik yapmamız yeterli.

Ayrıca, yüksek artılara ulaşmanın doğal zorluğu göz önüne alındığında, verilerimiz yüksek artılarda örneklem eksikliği çekiyordu. Bunu telafi etmek için, artı basarken yandığında (fail verdiğinde) baştan başlamak yerine, elimizdeki blade'i yere atıp hazır artılı yeni bir blade çıkaracağız. Örneğin, +5 bir blade çıkarmak için GM komutu /makeitem ITEM_CH_BLADE_10_A 5 şeklindedir. Eşya çıkarırken +8'e kadar herhangi bir artı seviyesi seçebiliyoruz. Her yeni blade çıkardığımızda 1,2,3,4,5,6,7,8 şeklinde döngüye gireceğiz. Bu, veri dağılımımız için gayet iş görecektir.

Güncellenmiş otomasyon süreci şu şekilde:
  1. Bir elixir çıkar ve eğer yoksa yerden al.
  2. 50 lucky powder çıkar ve eğer hiç yoksa yerden al.
  3. Eğer blade'de Lucky blue'su yoksa, bir Magic Stone of Luck çıkar, yerden al ve bas.
  4. Blade'e elixir ve lucky powder bas.
  5. Eğer yanarsa, blade'i yere at, yenisini çıkar ve yerden al.
  6. Tekrarla.
Ne yazık ki, bir Magic Stone of Luck basmak normal bir elixir basmak kadar zaman alıyor, bu yüzden veri toplama hızım yarı yarıya düştü. Bunu telafi etmek için birden fazla Hyperbot'u aynı anda çalıştıracağım; 11 karakter aynı anda simya yapacak.


Bunu birkaç gün çalıştırdıktan sonra yaklaşık 50.000 örnek topladım. Sadece elixir ve lucky powder kullandığımız kesin verilere kıyasla, Luck taşının nasıl bir etki yarattığına bakalım.

elixir_powder_and_stone.png


Görece düşük bir örneklem boyutuna sahip olduğumuz en yüksek artı değerleri bir kenara bırakırsak, Luck taşı doğrudan sabit %5'lik bir başarı şansı ekliyor gibi görünüyor. Bunu nasıl doğrulayabiliriz? Örnek toplamaya devam edebiliriz, ama hiçbir zaman kesin olarak bilemeyiz. Bir sonucun güvenilirliğini matematiksel olarak ifade etmenin bir yolu var mı?

Wilson Skoru Aralığı (Wilson Score Interval)

İstatistikte, bir dizi başarı-başarısızlık deneyinin sonucundan hesaplanan başarı olasılığı için bir "binom orantı güven aralığı" bulunur. Wilson skoru aralığı, standart normal yaklaşım aralığına göre çok daha gelişmiş bir yöntemdir. Bu konsepti kullanarak, örneğin %95 gibi bir güven düzeyi belirleyebilir ve topladığımız veri hacmine dayanarak muhtemel gerçek değer için bir alt sınır ile üst sınır hesaplayabiliriz. Verimiz az olduğunda bu güven aralığı çok geniş olacaktır. Daha fazla veri topladıkça bu aralık daralır. Sonsuz örneğe yaklaştıkça, güven aralığı asıl gerçek değere tam olarak oturmalıdır.

ci_plot.gif


Grafiksel okumada:
  • Mavi veri noktaları elixir'ler için kesin başarı oranını gösterir.
  • Yeşil veri noktaları elixir + lucky powder kombinasyonunun kesin oranını gösterir.
  • Siyah noktalar, şans oranına doğrudan %5 eklendiğini varsayan benim hipotezimi gösterir.
  • Kırmızı noktalar ise bizim testlerimizde gözlemlediğimiz başarı oranını temsil eder.
Sonuç olarak, gözlemlenen başarı oranı ve güven aralığı, %5'lik ek bonus hipoteziyle neredeyse birebir uyuşmaktadır.

Diğer Şans (Luck) Kaynakları

Silkroad'da iki şans kaynağı daha vardır. İlki, "başarı oranında %5 artış" sağlayan premium aboneliğidir (Premium PLUS).

premium.png


Hızlıca 70 bin deneme (sample) topladığımızda, Premium'un gerçekten de dediği şeyi yaptığı (ekstra %5 şans verdiği) görülüyor.

premium_chart.png


İkinci şans kaynağı ise üzerinde Lucky blue'su bulunan avatar elbiseleridir (Avatar dress). Silkroad'daki avatar dreslerine en fazla 4 adet blue basılabilir. Veri toplarken etkileri abartmak için, üzerinde toplam %40 Lucky bonusu olan bir avatar yarattım.

empty_avatar.png

avatar_with_lucky.png


avatar_with_40_luck.png


Yine 70 bin deneme ile, veriler gerçekten de başarı oranında doğrudan sabit bir artış olduğunu yansıtıyor.

40_avatar_chart.png


Karar Verme (Intelligence)

En baştaki sorumuza nihayet bir cevap verebilmek için pek çok detayı ortaya çıkarmamız gerekti. İlk sorumuz şuydu:

Hyperbot Silkroad'da kasmaya (grinding) devam edip ganimet toplarken, hangi noktada kendi ekipmanını geliştirmeyi (artı basmayı) denemelidir?

Eğer silahımız +0 ise, doğrudan bir elixir basmamız gerektiği çok açık, çünkü +0'dan daha aşağı düşemeyiz. Peki silahımız +6 ise? Sadece 1 adet elixir'imiz varken +7 denememeliyiz, çünkü yanma ve +0'a düşme ihtimalimiz çok yüksek. Bunun yerine bir sürü elixir toplayana kadar beklemeliyiz; peki ama kaç tane?

Matematiksel Analiz

Bu kararı vermek için kullanabileceğimiz matematiksel bir modeli açıklayacağım. Hesaplamaları basit tutmak için, en yaygın senaryo olduğu için elixir ve lucky powder kombinasyonunun veritabanındaki başarı oranlarını kullanacağım. (Luck taşları nadir olabilir ve avatar ile premium abonelikler gerçek para gerektirir.)

elixir_and_powder_rates.png


Örnek üzerinden gitmek en kolayı olacaktır. +1 bir silahımız ve 3 adet elixir'imiz varsa, +2 yapma olasılığımız nedir?
  • İlk denemede başarılı olursak +2 oluruz ve işimiz biter. Bunun şansı %70'tir.
  • Eğer yanarsa, 2 elixir ile tekrar +0'a döneriz. Bu noktadan sonra hiç yanmadan +2 yapmamız gerekir ki bu da 100%⋅70%=70% demektir.
  • Genel başarı şansımız: 70%+30%⋅70%=91% olur.
Örüntüyü fark ettiniz mi? Bunu genel bir formüle dökelim. Artısı y olan bir eşyayı, elimizdeki N adet elixir ile x artısına getirme şansımızı hesaplamak istiyoruz.

Bunu aşağıdaki f fonksiyonu kullanılarak özyineli (recursive) olarak hesaplayabiliriz. Tablodan alınan ve z artısına ulaşma olasılığını gösteren p(z) fonksiyonunu kullanacağız. İki olasılık vardır:

  1. Başarılı oluruz ve bir önceki artıdan bir seviye yukarı çıkarız: Bu durumda, mevcut artımızın bir fazla olduğu y+1, elimizde bir eksik elixir kaldığı N-1 ve aynı hedefe x sahip olduğumuz bir senaryoya geçeriz.
  2. Başarısız oluruz (yanar) ve 0'a döneriz: Bu durumda mevcut artımızın 0 olduğu, bir eksik elixir'imizin kaldığı N-1 ve yine aynı hedefe x sahip olduğumuz senaryoya döneriz.

f(y,N,x)=
p(y+1)⋅f(y+1,N−1,x)+
(1−p(y+1))⋅f(0,N−1,x)

Yukarıdaki örneği bu denkleme uyarlarsak:

f(1,3,2)=
0.70⋅f(2,2,2)+
0.30⋅f(0,2,2)

f fonksiyonunun ilk değerlendirmesi, f(2,2,2), hedef artı değerin amaç artı değere eşit olması nedeniyle %100 olarak değerlendirilir. f fonksiyonunun ikinci değerlendirmesi, f(0,2,2), aşağıdaki gibi tekrarlanır:

f(0,2,2)=
1.00⋅f(1,1,2)+
0.00⋅f(0,1,2)

f'nin ilk değerlendirmesi, f(1,1,2), aşağıdaki gibi tekrarlanır:

f(1,1,2)=
0.70⋅f(2,0,2)+
0.30⋅f(0,0,2)

Son olarak, f'nin ilk değerlendirmesi, f(2,0,2), hedef artı değerin amaç artı değere eşit olması nedeniyle %100 olarak değerlendirilir. f'nin ikinci değerlendirmesi, f(0,0,2), iksir kalmaması nedeniyle %0 olarak değerlendirilir. Denklem tamamen açıldığında şöyledir:

Clean-Shot-2026-07-11-at-16-53-21-2x.png


Şimdi genel formülü bildiğimize göre, birkaç farklı hedef için verileri grafiğe dökelim ve her bir hedefe ulaşmak için kaç iksir gerekeceğini görelim.

elixirs_required.png


İşaretlenmiş bu noktaların her biri, hedefe ulaşma olasılığının en az %90 olması için kaç iksirin gerektiğini göstermektedir.

  • +0'dan başlayarak +2'ye ulaşma şansımızın en az %90 olması için en az 10 elixir'e ihtiyacımız var.
  • +0'dan başlayarak +3'e ulaşma şansımızın en az %90 olması için en az 47 elixir'e ihtiyacımız var.
  • +0'dan başlayarak +4'e ulaşma şansımızın en az %90 olması için en az 205 elixir'e ihtiyacımız var.
  • +0'dan başlayarak +5'e ulaşma şansımızın en az %90 olması için en az 840 elixir'e ihtiyacımız var.
  • +0'dan başlayarak +6'ya ulaşma şansımızın en az %90 olması için en az 3384 elixir'e ihtiyacımız var.
Bu gereksinimi birkaç hedef için daha grafik haline getirirsek, daha yüksek bir artı değere ulaşmak için katlanarak daha fazla iksir gerektiğini görürüz. Bu şaşırtıcı değil.

Strateji

Yukarıdaki hesaplamalar, sadece bir hedefe ulaşmaya yönelik spesifik bir stratejiye dayanıyor. Yani olasılık hesaplarken, çok düşük bir şansımız kalsa bile hedef için elimizdeki tüm elixir'leri harcayacağımızı varsayıyoruz. Ancak Silkroad oynarken gerçek hayatta en iyi strateji bu değildir. Bu taktik, oyuncuyu günün sonunda genellikle düşük artılı (+0) bir silahla baş başa bırakır.

Bunun yerine oyuncu, elindeki elixir'lerle çıkabileceği en yüksek artıya ulaştığını düşündüğü an durmalıdır. Bu genellikle oyuncunun işlemi erken sonlandırması ve elinde fazladan elixir kalması anlamına gelir. Ardından oyuncu, tekrar denemeye yetecek kadar elixir toplayana kadar kasmaya devam eder.

Nihai Karar

Başarı olasılıklarını belirledikten sonra, Hyperbot ile nasıl karar vereceğiz? Arkadaşım ve iş arkadaşım Reed'in harika bir içgörüsü sayesinde, artıları eksilerle karşılaştırabiliriz. Özellikle, artımızın mevcut artımızdan daha büyük veya ona eşit olma olasılığını, daha düşük bir artı ile sonuçlanma olasılığıyla karşılaştıracağız. Buna oran (R) diyeceğiz.

Yukarıda kullandığımız ve artı z'ye ulaşma olasılığını veren aynı p(z)'yi kullanacağız. İlk olarak, b(x,N) fonksiyonunu aşağıdaki gibi tanımlıyoruz.

Clean-Shot-2026-07-11-at-17-00-16-2x.png


Bu, aşağıdakilerin toplamı en az belirlediğimiz oran R'ye eşitse True değerini döndürür:

x+1'i denerken başarı olasılığı
x+1'i başaramadıktan sonra x'e geri dönme olasılığı

b'de belirtildiği gibi, yeni bir g(y,N,x) fonksiyonu da tanımlıyoruz.

Bu g fonksiyonu, artı y'den başlayarak N iksirle artı x elde etme olasılığını döndürür,
ancak şimdi stratejimizi izlerken, g fonksiyonu şu şekilde tanımlanır:

Clean-Shot-2026-07-11-at-17-02-17-2x.png


g'nin b'ye bağlı olduğunu unutmayın; bu da stratejinin harekete geçmemeye karar vermesi durumunda verilen hedefe ulaşma olasılığının 0 olacağı anlamına gelir.

Yukarıdaki fonksiyonun kullanım durumları şunlardır:

y==x, yani hedefimize ulaştık
y+N<x, yani hedefimize ulaşmak için yeterli iksirimiz yok
b(y,N)==False, yani bot hiçbir işlem yapmaz
Son durum, hedefimize doğru ilerlemede başarılı olma olasılığı ile başarısız olma ve hedefimize doğru ilerlemede başarısız olma olasılığını toplar.

Basit Örnek

Bunu basit bir örnekle açıklayalım. Oranımızı, R'yi, 0,8 olarak tanımlayalım. Bu, mevcut artımızdan daha büyük veya ona eşit bir artı elde etme olasılığımızın, daha düşük bir artı ile yetinme olasılığımızdan 4 kat (0,8'e karşı 0,2) daha fazla olması durumunda harekete geçeceğimiz anlamına gelir. Diyelim ki mevcut silahımız +1 ve 2 iksirimiz var. +2'yi denemeli miyiz? Yukarıda belirtildiği gibi, şans tozlarıyla şans oranlarını kullanıyoruz, bu da +0'dan +1'e geçme olasılığının %100 ve +1'den +2'ye geçme olasılığının %70 olduğu anlamına gelir.

b(1,2)'yi değerlendirirsek, şunu elde ederiz: 0,7 + 0,3 ⋅ g(0,1,1)

Bu g çağrısı, "eğer +0'daysak ve 1 iksirimiz varsa, +1'e ulaşma olasılığımız nedir?" diye soruyor. Veya eşdeğer olarak, “başarısız olmadan önceki durumumuza geri dönme olasılığı nedir +2?”

+0'dan +1'e geçme olasılığı %100 olduğundan, g(0,1,1)1.0 değerini verir. b(1,2) aralığındaki g değerlendirmemiz 1.0 sonucunu verir ki bu 0.8'den büyüktür, bu nedenle daha yüksek bir artı denemesi yapacağız.

Bunu bir an düşünürsek, ne yapmamız gerektiğini bekliyorduk? Başarı olasılığı 0.7'dir, bu da R değerimiz olan 0.8'den daha düşüktür. Ancak sadece başarı şansımızı karşılaştırmıyoruz, aynı zamanda önceki durumumuza geri dönme şansımızı da hesaba katıyoruz. %70 başarı şansımız ve %30 başarısızlık şansımız var. Başarısız olursak, geriye bir iksirimiz kalır ve +1'e ulaşma şansımız %100'dür. Bu durumda, elbette denemeliyiz.

Pratik Örnek

Bu denklemlerle, bir sonraki artıyı denemek için gereken minimum iksir sayısını bulan bir program yazabiliriz. Diyelim ki +5'teyiz ve daha düşük bir artıda bitmeme olasılığımızın 4 kat olmasını istiyoruz. Denemeden önce kaç iksire ihtiyacımız var?

Python:
probabilities = [ 1.0, 0.7, 0.5, 0.27, 0.25, 0.25 ]
R = 0.8
current = 5
goal = 6

@functools.lru_cache(maxsize=None)
def takeAction(current, numElixirs):
return probabilities[current] + (1-probabilities[current])*probability(0,numElixirs-1,current) >= R

@functools.lru_cache(maxsize=None)
def probability(current, numElixirs, goal):
if current == goal:
return 1.0
if current + numElixirs < goal:
return 0.0
if not takeAction(current, numElixirs):
return 0.0
return probabilities[current]  * probability(current+1, numElixirs-1, goal) + \
(1 - probabilities[current]) * probability(0,         numElixirs-1, goal)

count = 0
while True:
result = probability(current, count, goal)
if result > 0.0:
print(f'{count} minimum elixirs required.')
print(f'Probability of achieving goal is {result*100}%.')
print(f'Probability of getting back to +{current} is {probability(0, count-1, current)*100}%.')
break
count += 1

Bu programın çıktısı şudur:

Kod:
230 minimum elixirs required.
Probability of achieving goal is 25.0%.
Probability of getting back to +5 is 73.46588637693769%.

Bu olasılıkları topladığımızda 0.25+0.75⋅0.734658≈0.80 sonucunu elde ederiz. Yani oyuna 230 elixir ile başladığımızda +5 veya +6'da bitirme şansımız %80.09'dur.

Burada 1-7 arasındaki hedefler için gereken minimum iksir sayısını ve birkaç R değerini gösteren bir grafik bulunmaktadır.

minimum_elixirs.png

Sonuç

Bu sayede, harekete geçip geçmeyeceğimizi veya toplamaya devam edip etmeyeceğimizi belirleyen tek bir yapılandırılabilir değere sahip oluyoruz. Sadece R oranı için iyi bir değer seçmemiz gerekiyor. Seçtiğiniz R değeri, risk tercihinize bağlıdır. R=0, bir iksir elde ettiğiniz anda her zaman bir sonraki artıyı deneyeceğiniz anlamına gelir. R'nin 1'e yakın olması, silahınızı geliştirme girişiminden önce birçok iksir biriktireceğiniz anlamına gelir.

Geleneksel olarak, Silkroad botları, otomatik simya özelliğine sahip olsalar bile, botun ne tür simya yapması gerektiği konusunda çok sayıda ayar ve yapılandırma sunarlar. Bununla, yapılandırma miktarını en fazla bir değere indiriyoruz. Ayrıca, Hyperbot'un simyayı ne zaman yapacağını seçmesini sağlıyoruz; böylece kullanıcının ne zaman eğitimi durdurup simyaya başlayacağına karar vermesine gerek kalmıyor.

Gelecek Çalışmalar (Further Work)

Bu yazıda bazı önemli ve ucu açık soruları atladık:
  • Farklı eşyaların farklı başarı şansları var mı? Sanırım cevap hayır. Sunucu dosyalarını (gameserver) tersine mühendislikle inceleyen kişiler CGItem yapısında böyle bir veri alanı bulamadılar.
  • Luck Taşı'nın etkisini kesin olarak bulmak için tersine mühendislik kullanabilir miyiz?
  • Eğer sadece birkaç tane Luck taşınız varsa, bunları ne zaman kullanmalısınız? Bu, hesaplamayı nasıl etkiler?
  • Karakteriniz zaten seviye atlamak (level up) üzereyse ve kısa süre sonra daha yüksek bir degree silah (örn. 8D'den 9D'ye) alacaksa ne olur? Yakında *** olacak bir eşyaya kaynak harcamayı nasıl önlersiniz?
  • Peki ya Astral, Immortal ve Steady taşları?
    • Steady: +5'ten yüksek denemelerde yanma durumunda eşyanın durability (dayanıklılık) değerinin düşmesini engeller. Durability kaybetmenin dezavantajı çok yüksek olduğu ve bu taşlar genelde ucuz olduğu için her zaman kullanılmalıdır.
    • Immortal: Eşyanın +6'dan sonraki denemelerde yanması halinde tamamen yok olmasını engeller (yanınca Immortal blue'su silinir). Bunlar gerçek parayla satılır veya oyun içi droplardan elde edilir.
    • Astral: Bir eşyanın yanması durumunda +4'ün altına düşmesini engeller. Eşya yanınca +0'a değil, +4'e geri döner. Bunlar gerçek parayla elde edilir.
 
Etiketler Etiketler
hyperbot lucky powder magic stone of luck silkroad elixir oranları silkroad online silkroad taktikleri silkroad veritabanı sro alchemy sro alchemy rate sro artı basma sro avatar lucky sro başarı oranları sro bot sro database sro premium şansı sro private server sro rehber sro simya taktikleri srocave xenforo sro

Geri
Üst Alt