Sosyal açıldı! Bir göz at → Hemen gir →

KAYNAK KOD PK BOTLARIN CANI AZALDIĞINDA KACIŞ REFLEKSI ICIN GEREKEN KOD YAPISI

KY Uzman Üye
KAYIT
2 Eki 2025
Mesajlar
143
Çözümler
1
Tepki puanı
105
Konum
Macedonia
çok tşk ederim işe yaradı peki maradonda pazar için nasıl bir kod lazım ?
öncelikle SQL tarafında Bot Merchant Data tablosunu doldurmanız lazım. Sonra sizin sourse kodlarınızda botmerchant nasıl çağrılıyorsa örn: +botmerchantspawn 651 şeklinde 651 Mevcut düzenlediğiniz Tablodaki sıralamada index koduna denk geliyor
 
KY Saygın Üye
Yardımsever
KAYIT
10 Eyl 2024
Mesajlar
611
Çözümler
11
Tepki puanı
280
Yaş
41
Konum
Adana
Web
discord.gg
HSACSX Src Kullanan için:

BotHandler.h içerisine INLINE bool isGMUser() { return GetAuthority() == (uint8)AuthorityTypes::AUTHORITY_GM_USER; } Kodunun altına
Kod:
// Bot Kaçış Manervarsı için
INLINE float GetHPRatio()
{
    if (GetMaxHealth() <= 0)
        return 0.0f; // Maks HP 0 veya negatifse 0.0f döndür


    return (float)GetHealth() / (float)GetMaxHealth();
} //Bot Manevrası Kaçış için

1761594373674.png


BotMoveAttack.cpp içerisine void CBot::RegionFindAttackProcess() { if ((m_sMoveRegionAttackTime - UNIXTIME2) < 1 * SECOND) return; kodunun altına hemen aşağıdaki kod sorunsuz build alınıyor.

Kod:
void CBot::RegionFindAttackProcess()
{
    if ((m_sMoveRegionAttackTime - UNIXTIME2) < 1 * SECOND)
        return;
    // KAÇIŞ REFLEKSİ BAŞLANGICI
    const float CRITICAL_HP_PERCENTAGE = 50.0f;


    if (GetHPRatio() * 100.0f < CRITICAL_HP_PERCENTAGE)
    {
        // Can kritik seviyenin altında, kaçış mantığı devreye girer.


        // Saldırmayı bırakmadan önce hedefi alalım.
        Unit* pLastTarget = g_pMain->GetUnitPtr(m_sTargetID, GetZoneID());
        m_sTargetID = -1; // Saldırmayı bırak


        __Vector3 vBot(GetX(), GetY(), GetZ());
        __Vector3 vEscapeDirection;


        if (pLastTarget != nullptr)
        {
            __Vector3 vTarget(pLastTarget->GetX(), pLastTarget->GetY(), pLastTarget->GetZ());
            // Saldıran düşmandan uzaklaşma yönü
            vEscapeDirection = vBot - vTarget;
        }
        else
        {
            // Hedef yoksa rastgele bir yöne kaç
            vEscapeDirection.Set((float)(myrand(0, 2000) - 1000.0f), 0.0f, (float)(myrand(0, 2000) - 1000.0f));
        }


        vEscapeDirection.Normalize();


        // Hız ayarı: Normal hızının %10 fazlası
        float fEscapeSpeed = m_sSpeed * 1.1f;


        const float MIN_ESCAPE_SPEED = 10.0f;
        if (fEscapeSpeed < MIN_ESCAPE_SPEED) {
            fEscapeSpeed = MIN_ESCAPE_SPEED;
        }


        // *** HAREKET MANTIK DEĞİŞİKLİĞİ BAŞLANGICI ***


        // Kaçış Mesafesi: Botun yürümesini istediğimiz mesafe (Örn: 10 birim ileri)
        // 10.0f yerine daha uzun bir mesafe deneyelim, örneğin 50 birim.
        // Bu değer, botun tek bir döngüde ne kadar uzağa yürümeye çalışacağını belirler.
        const float ESCAPE_DISTANCE = 200.0f;


        // Yeni hedef koordinatlarını hesapla
        __Vector3 vMove = vEscapeDirection * ESCAPE_DISTANCE;
        __Vector3 vNewPosition = vBot + vMove;


        // Botu anında ışınlamak yerine, yeni noktaya doğru YÜRÜT!
        // WalkCordinat(float x, float y, float z, uint16 Delay = 0, bool isAttack = false);
        // Delay=0 ve isAttack=false kullanıyoruz. Bot koşarak uzaklaşsın.
        WalkCordinat(vNewPosition.x, vNewPosition.y, vNewPosition.z, 0, false);


        // Bu hareketin tamamlanması için gereken süreyi tahmin edelim.
        // Zaman = Mesafe / Hız. Basitçe sabit bir süre belirleyebiliriz.
        const uint16 ESCAPE_DURATION_MS = 1500; // 1.5 saniye boyunca kaçmasını bekle


        m_sMoveRegionAttackTime = ULONGLONG(UNIXTIME2 + ESCAPE_DURATION_MS);


        // *** HAREKET MANTIK DEĞİŞİKLİĞİ SONU ***


        return;
    }
    // KAÇIŞ REFLEKSİ SONU

1761594604198.png
 
Üst Alt