- Mesaj
- 250
- Beğeni
- 109
- Puan
- 466
- Ticaret Puanı
- 0
daha önce paylaşılan hareket hızı limitlemelerinde limit üstüne çıkılamıyordu fakat limitin altında hile yapılıyordu.
örneğin.
1.7f limit belirleyelim.
oyuncu 1.0f de ise 1.6f yükseltebiliyordu.
bu konumuza gelirsek.
bunda hem limit uyguluyoruz.
hemde anlık hareket hızını küçük değerlele değiştiryoruz.
atıyorum hile programı 1.6fye yüskelttiyse.
client normal hızı tekrarden değiştiriyor.
yani.
hızın 133
hile 160 yaptı.(görünen)
client tekrardan
ana hızı Hızı +- 0.05 arası değiştirip
tekrar eski haline alır.
ActorInstance.cpp de düzenlemeler yapılacak
ekle
#include <random>
atakspeed
uzun soluklu oyunda test edilmedi
değerler
örneğin.
1.7f limit belirleyelim.
oyuncu 1.0f de ise 1.6f yükseltebiliyordu.
bu konumuza gelirsek.
bunda hem limit uyguluyoruz.
hemde anlık hareket hızını küçük değerlele değiştiryoruz.
atıyorum hile programı 1.6fye yüskelttiyse.
client normal hızı tekrarden değiştiriyor.
yani.
hızın 133
hile 160 yaptı.(görünen)
client tekrardan
ana hızı Hızı +- 0.05 arası değiştirip
tekrar eski haline alır.
ActorInstance.cpp de düzenlemeler yapılacak
ekle
#include <random>
Kod:
// Hareket fonksiyonu
void CActorInstance::Move()
{
// Hız sürekli küçük aralıklarla değişsin (örneğin, +- 0.05f)
float actualSpeed = m_fMovSpd;
// Rastgele bir hız değişikliği (örneğin, 0.05f'lik değişiklik)
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(-0.05f, 0.05f); // Hızı +- 0.05 arası değiştir
// Hızı değiştir
actualSpeed += dis(gen);
// Hızı 1.0f ile 2.0f arasında sınırlayalım
if (actualSpeed < 1.0f)
{
actualSpeed = 1.0f;
}
else if (actualSpeed > 2.0f)
{
actualSpeed = 2.0f;
}
// Hareketin hızını güncelle
m_fMovSpd = actualSpeed;
// Hız sınırları içinde ise, hareketi başlat
if (m_isWalking)
{
SetLoopMotion(CRaceMotionData::NAME_WALK, 0.15f, actualSpeed);
}
else
{
SetLoopMotion(CRaceMotionData::NAME_RUN, 0.15f, actualSpeed);
}
}
Kod:
void CActorInstance::SetMoveSpeed(float fMovSpd)
{
// Hız sınırlarının dışına çıkılmasına engel olalım
if (fMovSpd < 1.0f || fMovSpd > 2.0f)
{
std::cerr << "Cheating detected! Speed out of bounds: " << fMovSpd << std::endl;
m_fMovSpd = 1.0f; // Hızı sınırla (minimum)
// HandleCheating(); // Hile tespiti ve müdahale
return;
}
// Eğer hız zaten aynıysa işlemi durdur
if (m_fMovSpd == fMovSpd)
return;
// Yeni hız değerini uygula
m_fMovSpd = fMovSpd;
// Eğer hareket varsa, durdur ve tekrar başlat
if (__IsMoveMotion())
{
Stop();
Move();
}
}
atakspeed
Kod:
void CActorInstance::SetAttackSpeed(float fAtkSpd)
{
// Rastgele bir hız değişikliği (-0.05f ile +0.05f arası)
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(-0.05f, 0.05f);
// Saldırı hızını değiştir
fAtkSpd += dis(gen);
// Hızı sınırla: 1.0f ile 2.0f arasında
if (fAtkSpd < 1.0f)
{
fAtkSpd = 1.0f;
}
else if (fAtkSpd > 2.0f)
{
fAtkSpd = 2.0f;
}
// Eğer saldırı hızı değiştiyse, m_fAtkSpd'yi güncelle
if (m_fAtkSpd != fAtkSpd)
{
m_fAtkSpd = fAtkSpd;
}
}
float CActorInstance::__GetAttackSpeed()
{
// Hızı sınırla: 1.0f ile 2.0f arasında
if (m_fAtkSpd < 1.0f || m_fAtkSpd > 2.0f)
{
std::cerr << "Cheating detected! Attack speed out of bounds: " << m_fAtkSpd << std::endl;
m_fAtkSpd = 1.0f; // Hızı minimum değere sabitle
// HandleCheating(); // Hile tespiti
}
return m_fAtkSpd;
}
uzun soluklu oyunda test edilmedi
değerler
Son düzenleme: