Gönderen Konu: Anti para hilesi yapımı  (Okunma sayısı 46 defa)

Çevrimdışı shadowez
  • Üye Yöneticisi
  • Yeni Üye
  • *
  • İleti: 1
    • Profili Görüntüle
Anti para hilesi yapımı
« : Nisan 12, 2020, 01:01:02 ÖÖ »
Sizlere çok kolay bir yöntem ile para hilesini nasıl fixleyebileceğimizi anlatacağım.
Biliyorsunuzki pawno dilinde oyuncuya para verme komutu GivePlayerMoney(playerid, miktar); şeklinde olmaktadır fakat bazı cleo, asi, exe vb türde hileler bu komutu kullanıp oyuncuya para verdiği için GivePlayerMoney komutunu değiştirmemiz lazım nasıl mı?
Bunun için öncelikle oyuncumuzun parasını kaydetmek için modumuzun başına bir değişken tanımlıyoruz
Kod: [Seç]
new Para[MAX_PLAYERS]; //Değişkenimizi tanımladık
Sonrasında ise GivePlayerMoney komutunu değiştirmemiz lazım bunun için ufak bir fonksiyon oluşturarak yapabiliriz (modun sonuna veya herhangi bir yerine kopyalayabilirsiniz) örn: stock
Kod: [Seç]
stock ParaVer(playerid, miktar) // oyuncuya verdirceğimiz para ve miktarını ayarlamak için 2 argümanlı bir fonksiyon oluşturduk
{
GivePlayerMoney(playerid, miktar); // sunucunun asıl para verme komutu olan GivePlayerMoney kodunu burada miktar ile bağlıyoruz
Para[playerid] += miktar; // Modun başında tanımlamış olduğumuz değişkeni oyuncumuzun parasına eşitliyoruz
return 1;
}
Görmüş olduğunuz üzere yukarıda yazdığımız ufak bir fonksiyon ile artık oyuncumuza para verirken ParaVer(playerid, miktar); kodunu kullanacağız.
Şimdi gelelim asıl konumuza bu oyuncu para hilesi yapıcak fakat nasıl hile yaptığı açığa çıkıcak?
Sorunun cevabı gayet basit OnPlayerUpdate publicini kullanarak oyuncunun para hilesi yapıp yapmadığını kontrol ettiriceğiz
Kod: [Seç]
public OnPlayerUpdate(playerid)
{
    if(Para[playerid] != GetPlayerMoney(playerid)) //Eğer oyuncumuzun asıl parası sunucumuzun kaydetmiş olduğu paraya eşit değil ise (Kısaca oyuncu para hilesi yapmış ise)
    {
        ResetPlayerMoney(playerid); // Hile yapan oyuncunun parasını sıfırlıyoruz
        ParaVer(playerid, Para[playerid]); // Sonrasında ise sunucunun kaydetmiş olduğu parasını geri veriyoruz
    }
    return 1;
}
Ve son olarak unutmayalım ki oyuncumuz giriş yaptığında her zaman parasını sıfırlamamız gerekir çünkü kaydettiği paraya eşitse zaten OnPlayerUpdate publicinde kullanmış olduğumuz şart oyuncumuzun parasını geri vericektir, bunun için OnPlayerConnect publicini kullanacağız.
Kod: [Seç]
public OnPlayerConnect(playerid)
{
    ResetPlayerMoney(playerid); // Giriş yaptığında oyuncumuzun parasını sıfırlıyoruz zaten para hilesi yapmadıysa sistem parasını geri vericektir
    return 1;
}

Önemli NOT: Eğer yukarıda adımları tamamen uyguladıysanız oyuncumuza para verirken sakın GivePlayerMoney komutunu kullanmayın eğer kullanırsanız verdiğiniz para geçersiz olarak sayılıp oyuncu hile kullanmış sayılıcaktır bu yüzden artık ParaVer(playerid, miktar); komutunu kullanacağız.


Kodların hepsine buradan ulaşabilirsiniz
Kod: [Seç]
new Para[MAX_PLAYERS]; //Değişkenimizi tanımladık

stock ParaVer(playerid, miktar) // oyuncuya verdirceğimiz para ve miktarını ayarlamak için 2 argümanlı bir fonksiyon oluşturduk
{
GivePlayerMoney(playerid, miktar); // sunucunun asıl para verme komutu olan GivePlayerMoney kodunu burada argüman içerisinde tanıttığımız miktar ile bağlıyoruz
Para[playerid] += miktar; // Modun başında tanımlamış olduğumuz değişkeni oyuncumuzun parasına eşitliyoruz
return 1;
}

public OnPlayerConnect(playerid)
{
    ResetPlayerMoney(playerid); // Giriş yaptığında oyuncumuzun parasını sıfırlıyoruz zaten para hilesi yapmadıysa sistem parasını geri vericektir
    return 1;
}

public OnPlayerUpdate(playerid)
{
    if(Para[playerid] != GetPlayerMoney(playerid)) //Eğer oyuncumuzun asıl parası sunucumuzun kaydetmiş olduğu paraya eşit değil ise (Kısaca oyuncu para hilesi yapmış ise)
    {
        ResetPlayerMoney(playerid); // Hile yapan oyuncunun parasını sıfırlıyoruz
        ParaVer(playerid, Para[playerid]); // Sonrasında ise sunucunun kaydetmiş olduğu parasını geri veriyoruz
    }
    return 1;
}
İyi forumlar dilerim.