- Katılım
- 19 Kas 2022
- Konular
- 55
- Mesajlar
- 188
- Çözüm
- 1
- Online süresi
- 2mo 4d
- Reaksiyon Skoru
- 150
- Altın Konu
- 0
- Başarım Puanı
- 98
- MmoLira
- 13,880
- DevLira
- 66
HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!
bu iki efsun game source/game/item_addon.cpp dosyasının içindeki şu formül ile hesaplanmaktadır;
iSkillBonus beceri hasarını, iNormalHitBonus ise ortalama hasarını temsil eden değişkenlerdir ve förmül gereği birbiriyle bağlantılıdır. İlk önce rastgele iSkillBonus değeri oluşturulur ondan sonra oluşturulan bu iSkillBonus değerine göre iNormalHitBonus değerini hesaplar.
ilk olarak iSkillBonus nasıl değer atanıyor buna bakalım;
burada MINMAX(-30, x, 30); kodu oluşturulan değerin -30 dan daha az veya +30 dan daha fazla olamayacağını ve bu sınırlarla sınırlandırılacağını ifade ediyor.
Peki bu förmülün içindeki gauss_random(0, 5) kodu neyi ifade ediyor?
gauss dağılımını ifade ediyor burdaki 0 aritmetik ortalamayı 5 ise standart sapmayı ifade ediyor. aşağıda örnek resimler mevcut.
ilk resimde ortalama 0, standart sapma 5 iken iSkillBonus değerinin 0-5 arasında gelme şansının %34,13 olduğunu 5-10 arası gelme şansının ise %13,59 olsuğunu görebilirsiniz.
ikinci resimde ortalama 0, standart sapma 10 iken iSkillBonus değerinin 0-10 arasında gelme şansının %34,13 olduğunu 10-20 arası gelme şansının ise %13,59 olsuğunu görebilirsiniz.
yani burdan şunu anlıyoruzki standart sapma artarsa elde edeceğimiz iSkillBonus değerinin yüksek gelme şansıda artıyor. yani uzun lafın kısası yüksek ortalamaların daha kolay gelmesini isterseniz gauss_random(0, 5) kısmındaki 5 olan standart sapmayı arttırabilirsiniz, yüksek ortalamaların daha zor gelmesini isterseniz de 5 olan standart sapmayı azaltabilirsiniz.
Bunun sağlamasını şu kod ile kendiniz yapabilirsiniz;
C++:
int iSkillBonus = MINMAX(-30, (int) (gauss_random(0, 5) + 0.5f), 30);
int iNormalHitBonus = 0;
if (abs(iSkillBonus) <= 20)
iNormalHitBonus = -2 * iSkillBonus + abs(number(-8, 8) + number(-8, 8)) + number(1, 4);
else
iNormalHitBonus = -2 * iSkillBonus + number(1, 5);
iSkillBonus beceri hasarını, iNormalHitBonus ise ortalama hasarını temsil eden değişkenlerdir ve förmül gereği birbiriyle bağlantılıdır. İlk önce rastgele iSkillBonus değeri oluşturulur ondan sonra oluşturulan bu iSkillBonus değerine göre iNormalHitBonus değerini hesaplar.
ilk olarak iSkillBonus nasıl değer atanıyor buna bakalım;
C++:
iSkillBonus = MINMAX(-30, (int) (gauss_random(0, 5) + 0.5f), 30);
burada MINMAX(-30, x, 30); kodu oluşturulan değerin -30 dan daha az veya +30 dan daha fazla olamayacağını ve bu sınırlarla sınırlandırılacağını ifade ediyor.
Peki bu förmülün içindeki gauss_random(0, 5) kodu neyi ifade ediyor?
gauss dağılımını ifade ediyor burdaki 0 aritmetik ortalamayı 5 ise standart sapmayı ifade ediyor. aşağıda örnek resimler mevcut.
| ortalama 0, standart sapma 5 | ortalama 0, standart sapma 10 |
|---|---|
|
|
ilk resimde ortalama 0, standart sapma 5 iken iSkillBonus değerinin 0-5 arasında gelme şansının %34,13 olduğunu 5-10 arası gelme şansının ise %13,59 olsuğunu görebilirsiniz.
ikinci resimde ortalama 0, standart sapma 10 iken iSkillBonus değerinin 0-10 arasında gelme şansının %34,13 olduğunu 10-20 arası gelme şansının ise %13,59 olsuğunu görebilirsiniz.
yani burdan şunu anlıyoruzki standart sapma artarsa elde edeceğimiz iSkillBonus değerinin yüksek gelme şansıda artıyor. yani uzun lafın kısası yüksek ortalamaların daha kolay gelmesini isterseniz gauss_random(0, 5) kısmındaki 5 olan standart sapmayı arttırabilirsiniz, yüksek ortalamaların daha zor gelmesini isterseniz de 5 olan standart sapmayı azaltabilirsiniz.
Bunun sağlamasını şu kod ile kendiniz yapabilirsiniz;
C++:
#include <iostream>
#include <random>
#include <algorithm> // std::min ve std::max için
#include <cmath> // abs fonksiyonu için
// Gauss dağılımına sahip rastgele sayı üreten fonksiyon
double gauss_random(double mean, double stddev) {
static std::random_device rd;
static std::mt19937 gen(rd());
std::normal_distribution<> d(mean, stddev);
return d(gen);
}
// Belirli bir aralıkta tam sayı üreten fonksiyon
int number(int min, int max) {
static std::random_device rd;
static std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(min, max);
return dis(gen);
}
// Değeri belirli bir aralıkta sınırlandıran fonksiyon
int MINMAX(int min, int value, int max) {
return std::min(std::max(value, min), max);
}
int main() {
int iSkillBonus, iNormalHitBonus;
// +10'dan büyük bir iSkillBonus değeri üretilene kadar döngü çalışır
do {
// iSkillBonus değerini hesapla
iSkillBonus = MINMAX(-30, (int)(gauss_random(0, 5) + 0.5f), 30);
// iNormalHitBonus değerini hesapla
if (abs(iSkillBonus) <= 20)
{
iNormalHitBonus = -2 * iSkillBonus + abs(number(-8, 8) + number(-8, 8)) + number(1, 4);
} else
{
iNormalHitBonus = -2 * iSkillBonus + number(1, 5);
}
// Değerleri ekrana yazdır
std::cout << "iSkillBonus: " << iSkillBonus << ", iNormalHitBonus: " << iNormalHitBonus << std::endl;
} while (iSkillBonus >= -10); // iSkillBonus -10'dan küçük olana kadar devam et
std::cout << "-10'dan küçük bir iSkillBonus değeri üretildi: " << iSkillBonus << std::endl;
return 0;
}
- Katılım
- 26 Tem 2023
- Konular
- 452
- Mesajlar
- 6,390
- Çözüm
- 28
- Online süresi
- 2mo 26d
- Reaksiyon Skoru
- 3,440
- Altın Konu
- 133
- Başarım Puanı
- 249
- MmoLira
- 37,612
- DevLira
- 12
Konu incelendi 2 konu farklılık tespit edildi. Konu aktif İyi forumlar dilerim.https://forum.turkmmo.com/konu/3761701-ortalama-zarari-ve-beceri-hasari-efsun-nesnesi/
Daha önceden paylaşıldı için konu kapatıldı.
- Katılım
- 25 Haz 2024
- Konular
- 125
- Mesajlar
- 839
- Çözüm
- 16
- Online süresi
- 2mo 11d
- Reaksiyon Skoru
- 505
- Altın Konu
- 1
- Başarım Puanı
- 164
- MmoLira
- 3,706
- DevLira
- 45
paylaşım için teşekkürler detaylı ve açıklayıcı olmuş
- Katılım
- 10 Ağu 2010
- Konular
- 167
- Mesajlar
- 1,440
- Çözüm
- 24
- Online süresi
- 3mo 27d
- Reaksiyon Skoru
- 533
- Altın Konu
- 5
- Başarım Puanı
- 260
- MmoLira
- 2,007
- DevLira
- 3
paylaşım için teşekkürler.
- Katılım
- 9 Haz 2024
- Konular
- 10
- Mesajlar
- 54
- Çözüm
- 1
- Online süresi
- 7d 8h
- Reaksiyon Skoru
- 6
- Altın Konu
- 0
- TM Yaşı
- 2 Yıl 5 Gün
- Başarım Puanı
- 35
- MmoLira
- 1,256
- DevLira
- 9
Teşekkürler, peki beceri veya ortalamanın verdiği damageyi nereden düzenliyoruz ?bu iki efsun game source/game/item_addon.cpp dosyasının içindeki şu formül ile hesaplanmaktadır;
C++:int iSkillBonus = MINMAX(-30, (int) (gauss_random(0, 5) + 0.5f), 30); int iNormalHitBonus = 0; if (abs(iSkillBonus) <= 20) iNormalHitBonus = -2 * iSkillBonus + abs(number(-8, 8) + number(-8, 8)) + number(1, 4); else iNormalHitBonus = -2 * iSkillBonus + number(1, 5);
iSkillBonus beceri hasarını, iNormalHitBonus ise ortalama hasarını temsil eden değişkenlerdir ve förmül gereği birbiriyle bağlantılıdır. İlk önce rastgele iSkillBonus değeri oluşturulur ondan sonra oluşturulan bu iSkillBonus değerine göre iNormalHitBonus değerini hesaplar.
ilk olarak iSkillBonus nasıl değer atanıyor buna bakalım;
C++:iSkillBonus = MINMAX(-30, (int) (gauss_random(0, 5) + 0.5f), 30);
burada MINMAX(-30, x, 30); kodu oluşturulan değerin -30 dan daha az veya +30 dan daha fazla olamayacağını ve bu sınırlarla sınırlandırılacağını ifade ediyor.
Peki bu förmülün içindeki gauss_random(0, 5) kodu neyi ifade ediyor?
gauss dağılımını ifade ediyor burdaki 0 aritmetik ortalamayı 5 ise standart sapmayı ifade ediyor. aşağıda örnek resimler mevcut.
ortalama 0, standart sapma 5 ortalama 0, standart sapma 10 Ekli dosyayı görüntüle 135807 Ekli dosyayı görüntüle 135808
ilk resimde ortalama 0, standart sapma 5 iken iSkillBonus değerinin 0-5 arasında gelme şansının %34,13 olduğunu 5-10 arası gelme şansının ise %13,59 olsuğunu görebilirsiniz.
ikinci resimde ortalama 0, standart sapma 10 iken iSkillBonus değerinin 0-10 arasında gelme şansının %34,13 olduğunu 10-20 arası gelme şansının ise %13,59 olsuğunu görebilirsiniz.
yani burdan şunu anlıyoruzki standart sapma artarsa elde edeceğimiz iSkillBonus değerinin yüksek gelme şansıda artıyor. yani uzun lafın kısası yüksek ortalamaların daha kolay gelmesini isterseniz gauss_random(0, 5) kısmındaki 5 olan standart sapmayı arttırabilirsiniz, yüksek ortalamaların daha zor gelmesini isterseniz de 5 olan standart sapmayı azaltabilirsiniz.
Bunun sağlamasını şu kod ile kendiniz yapabilirsiniz;
C++:#include <iostream> #include <random> #include <algorithm> // std::min ve std::max için #include <cmath> // abs fonksiyonu için // Gauss dağılımına sahip rastgele sayı üreten fonksiyon double gauss_random(double mean, double stddev) { static std::random_device rd; static std::mt19937 gen(rd()); std::normal_distribution<> d(mean, stddev); return d(gen); } // Belirli bir aralıkta tam sayı üreten fonksiyon int number(int min, int max) { static std::random_device rd; static std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(min, max); return dis(gen); } // Değeri belirli bir aralıkta sınırlandıran fonksiyon int MINMAX(int min, int value, int max) { return std::min(std::max(value, min), max); } int main() { int iSkillBonus, iNormalHitBonus; // +10'dan büyük bir iSkillBonus değeri üretilene kadar döngü çalışır do { // iSkillBonus değerini hesapla iSkillBonus = MINMAX(-30, (int)(gauss_random(0, 5) + 0.5f), 30); // iNormalHitBonus değerini hesapla if (abs(iSkillBonus) <= 20) { iNormalHitBonus = -2 * iSkillBonus + abs(number(-8, 8) + number(-8, 8)) + number(1, 4); } else { iNormalHitBonus = -2 * iSkillBonus + number(1, 5); } // Değerleri ekrana yazdır std::cout << "iSkillBonus: " << iSkillBonus << ", iNormalHitBonus: " << iNormalHitBonus << std::endl; } while (iSkillBonus >= -10); // iSkillBonus -10'dan küçük olana kadar devam et std::cout << "-10'dan küçük bir iSkillBonus değeri üretildi: " << iSkillBonus << std::endl; return 0; }
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 20
- Görüntüleme
- 815
- Cevaplar
- 12
- Görüntüleme
- 608








