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!
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.
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
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 ?tam aradığım inşallah sorunu bulabilirsin kardeşim bana da bundan lazım
Dostum yapanlar var anlayan birisi konuya destek olsa beyler bizimlede paylaşırsan çok seviniriz kardeşim başarılar dilerim inşallah yaparsın
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.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; }
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
Metin2 Hile İstek
MoveToDestPosition Fonksiyonun Kullanımı Hakkında Yardım
- Cevaplar
- 1
- Görüntüleme
- 249
- Cevaplar
- 33
- Görüntüleme
- 3K
- Cevaplar
- 12
- Görüntüleme
- 1K
- Cevaplar
- 5
- Görüntüleme
- 462
