romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Cannn6161 1
Cannn6161
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Server taraflı hareket hızı kontrol

  • Konuyu başlatan Konuyu başlatan apikomt2
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 3
  • Görüntüleme Görüntüleme 402

apikomt2

Level 6
Uzman
Katılım
11 May 2023
Konular
270
Mesajlar
1,141
Çözüm
2
Online süresi
1mo 25d
Reaksiyon Skoru
744
Altın Konu
1
Başarım Puanı
199
MmoLira
1,170
DevLira
381
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!


araştırma
kopyala yapıştır



koddan örnek.

C++:
bool CHARACTER::CheckInstantSpeedHack(long x, long y)
{
    // GM'leri kontrol etme
    if (IsGM())
        return true;
  
    // Ölü veya savaşta olmayan karakterleri kontrol et
    if (IsDead() || IsStun())
        return true;
  
    DWORD dwCurrentTime = get_dword_time();
  
    // Hareket geçmişini güncelle (son 10 hareket)
    m_qMovementHistory.push(std::make_pair(dwCurrentTime, std::make_pair(x, y)));
  
    // Sadece son 10 hareketi tut
    while (m_qMovementHistory.size() > 10)
        m_qMovementHistory.pop();
  
    // En az 2 hareket kaydı yoksa kontrol yapma
    if (m_qMovementHistory.size() < 2)
        return true;
  
    // Son 2 hareketi al
    auto last1 = m_qMovementHistory.back();
    auto last2 = m_qMovementHistory.front(); // ikinci son hareket
  
    // Zaman farkını hesapla
    DWORD dwDeltaTime = last1.first - last2.first;
  
    // Minimum zaman (10ms'den az ise hack olabilir)
    if (dwDeltaTime < 10)
    {
        m_iSpeedHackCount += 3;
        sys_err("INSTANT_SPEED_HACK: %s - Extremely fast movement packets (%dms)",
               GetName(), dwDeltaTime);
        return false;
    }
  
    // Mesafe hesaplama
    long dx = last1.second.first - last2.second.first;
    long dy = last1.second.second - last2.second.second;
    double fDistance = sqrt(static_cast<double>(dx*dx + dy*dy));
  
    // Çok kısa mesafe kontrolü
    if (fDistance < 10.0)
        return true;
  
    // Anlık hız hesaplama
    double fSpeed = fDistance / (dwDeltaTime / 1000.0);
  
    // WS durumunda daha yüksek hız limiti
    float fMaxSpeed = GetMoveSpeed();
    if (IsInWarState())
        fMaxSpeed *= 1.5f; // WS'de %50 daha hızlı
    else
        fMaxSpeed *= 1.2f; // Normalde %20 tolerans
  
  
  
    // Eğer hız limitini aşarsa
    if (fSpeed > fMaxSpeed)
    {
        m_iSpeedHackCount++;
        m_iConsecutiveSpeedViolations++;
      
        sys_err("INSTANT_SPEED_HACK: %s - Speed: %.2f > Max: %.2f, Distance: %.2f, Time: %dms",
               GetName(), fSpeed, fMaxSpeed, fDistance, dwDeltaTime);
      
        // Ardışık 3 ihlal varsa hile kabul et
        if (m_iConsecutiveSpeedViolations >= 3)
        {
            LogManager::instance().HackLog("Instant_SpeedHack", this);
            return false;
        }
      
        return true; // İlk ihlallerde affet
    }
    else
    {
        // Normal hızda ise ardışık ihlal sayacını sıfırla
        if (m_iConsecutiveSpeedViolations > 0)
            m_iConsecutiveSpeedViolations--;
    }
  
    return true;
}

void CHARACTER::ResetSpeedHack()
{
    m_dwLastMoveCheckTime = 0;
    m_lLastMoveCheckX = 0;
    m_lLastMoveCheckY = 0;
    m_iSpeedHackCount = 0;
}

bool CHARACTER::__CheckSpeedHackFrequency()
{
    DWORD dwCurrentTime = get_dword_time();
  
    if (m_dwLastMoveCheckTime == 0)
    {
        m_dwLastMoveCheckTime = dwCurrentTime;
        return true;
    }
  
    DWORD dwDeltaTime = dwCurrentTime - m_dwLastMoveCheckTime;
  
    // 50ms'den daha sık hareket paketi kontrolu
    if (dwDeltaTime < 50)
    {
        m_iSpeedHackCount++;
      
        // 5 kez ardı?ık hızlı paket tespiti
        if (m_iSpeedHackCount > 5)
        {
            sys_err("SPEED_HACK_FREQUENCY: %s (PID: %d) - Too frequent movement packets (%dms interval)",
                   GetName(), GetPlayerID(), dwDeltaTime);
            return false;
        }
    }
    else
    {
        // Normal aralıkta ise sayacı sıfırla
        if (m_iSpeedHackCount > 0)
            m_iSpeedHackCount--;
    }
  
    return true;
}

bool CHARACTER::__CheckSpeedHackDistance(long x, long y)
{
    DWORD dwCurrentTime = get_dword_time();
  
    if (m_dwLastMoveCheckTime == 0 || m_lLastMoveCheckX == 0 || m_lLastMoveCheckY == 0)
    {
        m_dwLastMoveCheckTime = dwCurrentTime;
        m_lLastMoveCheckX = x;
        m_lLastMoveCheckY = y;
        return true;
    }
  
    DWORD dwDeltaTime = dwCurrentTime - m_dwLastMoveCheckTime;
  
    // Minimum zaman kontrolu (50ms'den az ise gecerli de?il)
    if (dwDeltaTime < 50)
        return true;
  
    // Mesafe hesaplama
    long dx = x - m_lLastMoveCheckX;
    long dy = y - m_lLastMoveCheckY;
    double fDistance = sqrt(static_cast<double>(dx*dx + dy*dy));
  
    // Zamanı saniyeye cevir
    double fTimeInSec = dwDeltaTime / 1000.0;
  
    // Hız hesaplama (birim/saniye)
    double fSpeed = fDistance / fTimeInSec;
  
    // Maksimum izin verilen hız (karakterin mevcut move_speed de?eri + %20 tolerans)
    float fMaxSpeed = GetMoveSpeed() * 1.2f;
  
    // E?er hız limitini a?arsa
    if (fSpeed > fMaxSpeed)
    {
        m_iSpeedHackCount += 2; // Mesafe hack'i daha ciddi
      
        sys_err("SPEED_HACK_DISTANCE: %s (PID: %d) - Speed: %.2f > Max: %.2f, Distance: %.2f, Time: %dms",
               GetName(), GetPlayerID(), fSpeed, fMaxSpeed, fDistance, dwDeltaTime);
      
        // 3 kez mesafe hack'i tespiti
        if (m_iSpeedHackCount > 3)
        {
            return false;
        }
    }
    else
    {
        // Normal hızda ise sayacı azalt
        if (m_iSpeedHackCount > 0)
            m_iSpeedHackCount--;
    }
  
    return true;
}

bool CHARACTER::CheckSpeedHack(long x, long y)
{
    // GM'leri kontrol etme
    if (IsGM())
        return true;
  
    // Olu veya sava?ta olmayan karakterleri kontrol et
    if (IsDead())
        return true;
  
    // Frekans kontrolu
    if (!__CheckSpeedHackFrequency())
        return false;
  
    // Mesafe kontrolu
    if (!__CheckSpeedHackDistance(x, y))
        return false;
  
    // Zaman ve pozisyonu guncelle
    m_dwLastMoveCheckTime = get_dword_time();
    m_lLastMoveCheckX = x;
    m_lLastMoveCheckY = y;
  
    return true;
}

bool CHARACTER::Move(long x, long y)
{
  
    // Hareket hızı anti-cheat kontrolu
    if (!CheckSpeedHack(x, y))
    {
        sys_err("SPEED_HACK_BLOCKED: %s (PID: %d) - Movement blocked due to speed hack detection",
               GetName(), GetPlayerID());
      
        // Hile tespit edildi?inde karakteri sync et
        Sync(x, y);
      
        // Gerekirse ceza uygula (orne?in: 10 saniye donma)
        if (m_iSpeedHackCount > 10)
        {
            AddAffect(AFFECT_SPEED_HACK_PENALTY, APPLY_NONE, 0, AFF_STUN, 10, 0, true);
            ChatPacket(CHAT_TYPE_INFO, "Speed hack detected! You have been frozen for 10 seconds.");
        }
      
        return false;
    }
  
    if (GetX() == x && GetY() == y)
        return true;

    if (test_server)
        if (m_bDetailLog)
            sys_log(0, "%s position %u %u", GetName(), x, y);

    OnMove();
    return Sync(x, y);
}

günün sözleri

  • "En büyük hakikat, imandır. İmandan sonra en büyük hakikat namazdır." – İmanı hayatın merkezine alan bir yaklaşım.
  • "Kâinatı bize tanıttıran, Kendini bize sevdiren, Kur'an'dır." – Evren kitabı (kâinat) ile vahiy kitabı (Kur'an) arasındaki uyuma dikkat çeker.
  • "Her şey Allah'ı gösteriyor, her şey Allah'ı bildiriyor, her şey Allah'a şehadet ediyor." – Onun tevhid anlayışının özü.
  • "Marifetullah (Allah'ı tanımak), en büyük saadettir. Şükür ise, o saadetin anahtarıdır."
 

Ekli dosyalar

Son düzenleme:
Paylaşım için teşekkürler ama bu şekilde bineğe bindiğinde veya indiğindede sürekli hata verecekdir. binek kontrolü yapılmamış yani normal yürüyüş hızıyla binek üzerindeki yürüyüş hızı bir değil. svside bunun için debugmode ile yapıyor binek için ayrı değer alıyor onunda maksatı normal bineklerden ziyade birde hızlı binekler var bunlarda bu kodu tetikliyor. bunlarıda geliştirmen gerekli bence.
 
Paylaşım için teşekkürler ama bu şekilde bineğe bindiğinde veya indiğindede sürekli hata verecekdir. binek kontrolü yapılmamış yani normal yürüyüş hızıyla binek üzerindeki yürüyüş hızı bir değil. svside bunun için debugmode ile yapıyor binek için ayrı değer alıyor onunda maksatı normal bineklerden ziyade birde hızlı binekler var bunlarda bu kodu tetikliyor. bunlarıda geliştirmen gerekli bence.
şuan test ettim binekde ynalış hile algılama olmuyor
 
eline sağlık paylaşım için teşekkürler.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst