raderde 1
raderde
Cannn6161 1
Cannn6161
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Mt2Hizmet 1
Mt2Hizmet
melankolıa18 1
melankolıa18
romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Metin2 Hile İstek Metin2 GF SendItemPickupPacket

  • Konuyu başlatan Konuyu başlatan BlackMask11
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 10
  • Görüntüleme Görüntüleme 771

BlackMask11

Level 4
TM Üye
Üye
Katılım
17 Şub 2012
Konular
10
Mesajlar
299
Online süresi
4d 7h
Reaksiyon Skoru
55
Altın Konu
0
TM Yaşı
14 Yıl 3 Ay 21 Gün
Başarım Puanı
111
MmoLira
1,403
DevLira
0
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!

Merhabalar, Metin2 için geliştirmiş olduğum range pickup özelliğinde böyle bir engelle karşılaştım. İlk defa görüyorum yardım edebilecek olan var mı ? Fonksiyonları alta bırakıyorum.


Ekran görüntüsü 2026-02-20 031904.png



C++:
inline bool SendPickupCall(DWORD vId)
{
    if (vId == 0 || vId == 0xFFFFFFFF)
        return false;

    DWORD clientBase = (DWORD)GetModuleHandleA("metin2client.exe");
    if (!clientBase) return false;

    // CNetworkStream instance'ını al (metin2client.exe+2C43994)
    uintptr_t netInstance = 0;
    if (!ReadPtr<uintptr_t>(clientBase, 0x2C43994, netInstance))
        return false;

    if (!netInstance)
        return false;

    // Call adresi: metin2client.exe+242C5C0
    DWORD callAddr = clientBase + 0x242C5C0;

    __asm
    {
        mov ecx, netInstance    // this pointer
        push vId                // parametre: item VID
        call callAddr           // SendPickupCall'ı çağır
    }

    return true;
}

// ==================================================
// RANGE PICKUP - IŞINLAN + TOPLA (STATE 2 YOK)
// ==================================================

void ProcessRangePickup()
{
    if (!C_RangePickup) return;

    static DWORD lastPickup = 0;
    DWORD now = GetTickCount();
    if (now - lastPickup < (DWORD)C_PickupSpeed) return;

    // 1. En yakın itemi bul
    GroundItem target = GetClosestGroundItem();
    if (target.vid == 0) return;

    // 2. Oyuncu pozisyonunu al
    float origX = 0, origY = 0, origZ = 0;
    if (!GetPlayerPosition(origX, origY, origZ)) return;

    // 3. Mesafe kontrolü (Range)
    float dx = origX - target.x;
    float dy = origY - target.y;
    float dist = sqrtf(dx * dx + dy * dy);

    if (dist > C_PickupRange) return;

    DWORD clientBase = (DWORD)GetModuleHandleA(NULL);
    if (!clientBase) return;

    // 4. CharacterManager ve local player pointer'larını al
    uintptr_t charManager = 0;
    ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(clientBase + 0x02C43284), &charManager, 4, NULL);

    uintptr_t localPlayer = 0;
    ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(charManager + 0xC), &localPlayer, 4, NULL);

    if (!localPlayer) return;

    // 5. İtemin yanına ışınlan (KOORDİNATLARI DEĞİŞTİR)
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)(localPlayer + 0x2F4), &target.x, sizeof(float), NULL);
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)(localPlayer + 0x2F8), &target.y, sizeof(float), NULL);
    // Z koordinatını değiştirme (isteğe bağlı)

    // 6. SUNUCUYA TOPLAMA PAKETİ GÖNDER (SendPickupCall)
    SendPickupCall(target.vid);

    // 7. Sunucunun işlemesi için KISA bekle (ÇOK ÖNEMLİ)
    Sleep(30);

    // 8. ESKİ KOORDİNATLARA GERİ DÖN
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)(localPlayer + 0x2F4), &origX, sizeof(float), NULL);
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)(localPlayer + 0x2F8), &origY, sizeof(float), NULL);

    lastPickup = now;
}

DWORD WINAPI RangePickupThread(LPVOID lpParam)
{
    while (true)
    {
        // Bot kapalıysa bekle (CPU yormasın)
        if (!C_RangePickup)
        {
            Sleep(100);
            continue;
        }

        // Toplama fonksiyonunu çağır
        ProcessRangePickup();

        // Fonksiyonun içinde zaten lastPickup/C_PickupSpeed kontrolü olduğu için
        // burada çok küçük bir bekleme yeterlidir.
        Sleep(50);
    }
    return 0;
}
 

En Çok Reaksiyon Alan Mesajlar

Sorun muhtemelen yanlış yere teleport yapıyorsun.
Metin2 adres yapısından kaynaklanıyor.
Client y koordinat = -18.000
server y koordinat = 18.000
minimap y koordinat = 180 ( bunu kullanmıyoruz ama adres çeşitliliğini anlamak için )

player ve hedefin y koordinat negatif ama server pozitif göndermek zorundasın . State fonksiyonunda negatif koordinat verirsen seni yanlış yere teleport yapmak ister. Belki map dışına o yüzden bu uyarıyı alıyorsun . Tüm hareket işlemlerinde y pozitif göndermek zorundasın
tam aradığım inşallah sorunu bulabilirsin kardeşim bana da bundan lazım
 
tam aradığım inşallah sorunu bulabilirsin kardeşim bana da bundan lazım
Uzaktan toplama fonksiyonu tahminime göre çalışıyor ancak GF sunucu bu normal tr server. Ancak iteme gitmeden toplama yaptıramıyorum. Muhtemelen mesafe koruması var. Bakalım bunu aşabilecek miyim ?
 
Dostum yapanlar var anlayan birisi konuya destek olsa beyler bizimlede paylaşırsan çok seviniriz kardeşim başarılar dilerim inşallah yaparsın
 
Merhabalar, Metin2 için geliştirmiş olduğum range pickup özelliğinde böyle bir engelle karşılaştım. İlk defa görüyorum yardım edebilecek olan var mı ? Fonksiyonları alta bırakıyorum.


Ekli dosyayı görüntüle 168192


C++:
inline bool SendPickupCall(DWORD vId)
{
    if (vId == 0 || vId == 0xFFFFFFFF)
        return false;

    DWORD clientBase = (DWORD)GetModuleHandleA("metin2client.exe");
    if (!clientBase) return false;

    // CNetworkStream instance'ını al (metin2client.exe+2C43994)
    uintptr_t netInstance = 0;
    if (!ReadPtr<uintptr_t>(clientBase, 0x2C43994, netInstance))
        return false;

    if (!netInstance)
        return false;

    // Call adresi: metin2client.exe+242C5C0
    DWORD callAddr = clientBase + 0x242C5C0;

    __asm
    {
        mov ecx, netInstance    // this pointer
        push vId                // parametre: item VID
        call callAddr           // SendPickupCall'ı çağır
    }

    return true;
}

// ==================================================
// RANGE PICKUP - IŞINLAN + TOPLA (STATE 2 YOK)
// ==================================================

void ProcessRangePickup()
{
    if (!C_RangePickup) return;

    static DWORD lastPickup = 0;
    DWORD now = GetTickCount();
    if (now - lastPickup < (DWORD)C_PickupSpeed) return;

    // 1. En yakın itemi bul
    GroundItem target = GetClosestGroundItem();
    if (target.vid == 0) return;

    // 2. Oyuncu pozisyonunu al
    float origX = 0, origY = 0, origZ = 0;
    if (!GetPlayerPosition(origX, origY, origZ)) return;

    // 3. Mesafe kontrolü (Range)
    float dx = origX - target.x;
    float dy = origY - target.y;
    float dist = sqrtf(dx * dx + dy * dy);

    if (dist > C_PickupRange) return;

    DWORD clientBase = (DWORD)GetModuleHandleA(NULL);
    if (!clientBase) return;

    // 4. CharacterManager ve local player pointer'larını al
    uintptr_t charManager = 0;
    ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(clientBase + 0x02C43284), &charManager, 4, NULL);

    uintptr_t localPlayer = 0;
    ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(charManager + 0xC), &localPlayer, 4, NULL);

    if (!localPlayer) return;

    // 5. İtemin yanına ışınlan (KOORDİNATLARI DEĞİŞTİR)
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)(localPlayer + 0x2F4), &target.x, sizeof(float), NULL);
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)(localPlayer + 0x2F8), &target.y, sizeof(float), NULL);
    // Z koordinatını değiştirme (isteğe bağlı)

    // 6. SUNUCUYA TOPLAMA PAKETİ GÖNDER (SendPickupCall)
    SendPickupCall(target.vid);

    // 7. Sunucunun işlemesi için KISA bekle (ÇOK ÖNEMLİ)
    Sleep(30);

    // 8. ESKİ KOORDİNATLARA GERİ DÖN
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)(localPlayer + 0x2F4), &origX, sizeof(float), NULL);
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)(localPlayer + 0x2F8), &origY, sizeof(float), NULL);

    lastPickup = now;
}

DWORD WINAPI RangePickupThread(LPVOID lpParam)
{
    while (true)
    {
        // Bot kapalıysa bekle (CPU yormasın)
        if (!C_RangePickup)
        {
            Sleep(100);
            continue;
        }

        // Toplama fonksiyonunu çağır
        ProcessRangePickup();

        // Fonksiyonun içinde zaten lastPickup/C_PickupSpeed kontrolü olduğu için
        // burada çok küçük bir bekleme yeterlidir.
        Sleep(50);
    }
    return 0;
}
hesap ban yemiş hocam farklı bir ban yöntemi tr de ticaret yapamaz chat kullanamaz saldırı yapamaz mob hasar alamaz kısacası sadece npc gibi oluyor karakteriniz.
 

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

Geri
Üst