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

ÇÖZÜLDÜ Genie Açıkken Userlerin Botlara Vurmamasını İstiyorum.

goksu516

Premium Üye
KAYIT
26 Eyl 2021
Mesajlar
790
Çözümler
12
Tepki puanı
167
Merhaba arkadaşlar Genie açıkken cz town önlerine genie koyup bot kesmelerine engel olmak için genie açıkken botlara atak yapılmasını engellemek istiyorum.
Bir kaç deneme yaptım fakat doğru yeri bulamadım sanırım.

void CUser::Attack(Packet & pkt) paketinin içinde

if (isInGenie() && pTarget->isBot())
return;
eklememe rağmen yine atak yapıyor.
 
Çözüm
Dediğin gibi olmadı abi fakat alttaki gibi yaptığımda hem botlara hem userlere atak yapmıyor. Bot için ayırmak için 5000 den büyük olanları diye yaptığımda da bir değişiklik olmadı.

C++:
bool __fastcall IsAntiAFK(DWORD mobBase)
{
    if (!mobBase) return false;

    uint16 protoID = *(uint16*)(mobBase + KO_SSID);
    if (std::find(antiAFKProto.begin(), antiAFKProto.end(), protoID) != antiAFKProto.end())
        return true;

    uint16 protoID2 = *(uint16*)(mobBase + KO_OFF_ID);
    if (g_pMain->m_isGenieStatus && isLeaderAttack && g_pMain->isInParty())
    {
        if (g_pMain->GetPartyLeaderTarget() == protoID2)
            return false;

        return true;
    }
    if (protoID <...

YNG

S.Moderatör
KY Saygın Üye
Coder
ACS Sağlayıcısı
Server Sahibi
KAYIT
21 Ağu 2022
Mesajlar
235
Çözümler
10
Tepki puanı
455
Yaş
37
Merhaba arkadaşlar Genie açıkken cz town önlerine genie koyup bot kesmelerine engel olmak için genie açıkken botlara atak yapılmasını engellemek istiyorum.
Bir kaç deneme yaptım fakat doğru yeri bulamadım sanırım.

void CUser::Attack(Packet & pkt) paketinin içinde

if (isInGenie() && pTarget->isBot())
return;
eklememe rağmen yine atak yapıyor.

hkGenieSelect

guraya gel

sonrada buraya

bool __fastcall IsAntiAFK(DWORD mobBase)

C++:
bool __fastcall IsAntiAFK(DWORD mobBase)
{
    if (!mobBase) return false;

    uint16 m_sProtoID = *(uint16*)(mobBase + KO_SSID);
    if (std::find(antiAFKProto.begin(), antiAFKProto.end(), m_sProtoID) != antiAFKProto.end())
        return true;

    int16 m_sMonsterID = *(int16*)(mobBase + KO_OFF_ID);
    if (g_pMain->isInGenie())
    {
/*Genie Aktifken Botların z almasını engelleme*/
            if (m_sMonsterID > 5000 && m_sMonsterID < NPC_BAND)
                return false;
        if (isLeaderAttack)
        {
            if (g_pMain->isInParty())
            {
                if (g_pMain->GetPartyLeaderTarget() == m_sMonsterID)
                    return false;

                return true;
            }
        }
    }
    return std::find(antiAFKProto.begin(), antiAFKProto.end(), m_sProtoID) != antiAFKProto.end();
}

Değiştir.
 

goksu516

Premium Üye
KAYIT
26 Eyl 2021
Mesajlar
790
Çözümler
12
Tepki puanı
167
hkGenieSelect

guraya gel

sonrada buraya

bool __fastcall IsAntiAFK(DWORD mobBase)

C++:
bool __fastcall IsAntiAFK(DWORD mobBase)
{
    if (!mobBase) return false;

    uint16 m_sProtoID = *(uiDnt16*)(mobBase + KO_SSID);
    if (std::find(antiAFKProto.begin(), antiAFKProto.end(), m_sProtoID) != antiAFKProto.end())
        return true;

    int16 m_sMonsterID = *(int16*)(mobBase + KO_OFF_ID);
    if (g_pMain->isInGenie())
    {
/*Genie Aktifken Botların z almasını engelleme*/
            if (m_sMonsterID > 5000 && m_sMonsterID < NPC_BAND)
                return false;
        if (isLeaderAttack)
        {
            if (g_pMain->isInParty())
            {
                if (g_pMain->GetPartyLeaderTarget() == m_sMonsterID)
                    return false;

                return true;
            }
        }
    }
    return std::find(antiAFKProto.begin(), antiAFKProto.end(), m_sProtoID) != antiAFKProto.end();
}

Değiştir.
Dediğin gibi olmadı abi fakat alttaki gibi yaptığımda hem botlara hem userlere atak yapmıyor. Bot için ayırmak için 5000 den büyük olanları diye yaptığımda da bir değişiklik olmadı.

C++:
bool __fastcall IsAntiAFK(DWORD mobBase)
{
    if (!mobBase) return false;

    uint16 protoID = *(uint16*)(mobBase + KO_SSID);
    if (std::find(antiAFKProto.begin(), antiAFKProto.end(), protoID) != antiAFKProto.end())
        return true;

    uint16 protoID2 = *(uint16*)(mobBase + KO_OFF_ID);
    if (g_pMain->m_isGenieStatus && isLeaderAttack && g_pMain->isInParty())
    {
        if (g_pMain->GetPartyLeaderTarget() == protoID2)
            return false;

        return true;
    }
    if (protoID < NPC_BAND) // oyuncuysa  seçme
        return true;
    
    return std::find(antiAFKProto.begin(), antiAFKProto.end(), protoID) != antiAFKProto.end();
}

Alttaki gibi yapsam da yine bot ve userlere atak yapmıyor. ayrım yapamadım henüz
C++:
if (5000 < protoID < NPC_BAND)
    return true;
 

YNG

S.Moderatör
KY Saygın Üye
Coder
ACS Sağlayıcısı
Server Sahibi
KAYIT
21 Ağu 2022
Mesajlar
235
Çözümler
10
Tepki puanı
455
Yaş
37
Dediğin gibi olmadı abi fakat alttaki gibi yaptığımda hem botlara hem userlere atak yapmıyor. Bot için ayırmak için 5000 den büyük olanları diye yaptığımda da bir değişiklik olmadı.

C++:
bool __fastcall IsAntiAFK(DWORD mobBase)
{
    if (!mobBase) return false;

    uint16 protoID = *(uint16*)(mobBase + KO_SSID);
    if (std::find(antiAFKProto.begin(), antiAFKProto.end(), protoID) != antiAFKProto.end())
        return true;

    uint16 protoID2 = *(uint16*)(mobBase + KO_OFF_ID);
    if (g_pMain->m_isGenieStatus && isLeaderAttack && g_pMain->isInParty())
    {
        if (g_pMain->GetPartyLeaderTarget() == protoID2)
            return false;

        return true;
    }
    if (protoID < NPC_BAND) // oyuncuysa  seçme
        return true;
   
    return std::find(antiAFKProto.begin(), antiAFKProto.end(), protoID) != antiAFKProto.end();
}

Alttaki gibi yapsam da yine bot ve userlere atak yapmıyor. ayrım yapamadım henüz
C++:
if (5000 < protoID < NPC_BAND)
    return true;
Senin kodunda mantık hatası vardı

C++:
bool __fastcall IsAntiAFK(DWORD mobBase)
{
    if (!mobBase) return false;

    uint16 protoID = *(uint16*)(mobBase + KO_SSID);
    if (std::find(antiAFKProto.begin(), antiAFKProto.end(), protoID) != antiAFKProto.end())
        return true;

    uint16 protoID2 = *(uint16*)(mobBase + KO_OFF_ID);
    if (g_pMain->m_isgenieStatus)
    {
    if (protoID2 > 4999 && protoID2 < 10000)
        return true;
    }
    if (g_pMain->m_isGenieStatus && isLeaderAttack && g_pMain->isInParty())
    {
        if (g_pMain->GetPartyLeaderTarget() == protoID2)
            return false;

        return true;
    }
        
    return std::find(antiAFKProto.begin(), antiAFKProto.end(), protoID) != antiAFKProto.end();
}
 
Çözüm

goksu516

Premium Üye
KAYIT
26 Eyl 2021
Mesajlar
790
Çözümler
12
Tepki puanı
167
Senin kodunda mantık hatası vardı

C++:
bool __fastcall IsAntiAFK(DWORD mobBase)
{
    if (!mobBase) return false;

    uint16 protoID = *(uint16*)(mobBase + KO_SSID);
    if (std::find(antiAFKProto.begin(), antiAFKProto.end(), protoID) != antiAFKProto.end())
        return true;

    uint16 protoID2 = *(uint16*)(mobBase + KO_OFF_ID);
    if (g_pMain->m_isgenieStatus)
    {
    if (protoID2 > 4999 && protoID2 < 10000)
        return true;
    }
    if (g_pMain->m_isGenieStatus && isLeaderAttack && g_pMain->isInParty())
    {
        if (g_pMain->GetPartyLeaderTarget() == protoID2)
            return false;

        return true;
    }
       
    return std::find(antiAFKProto.begin(), antiAFKProto.end(), protoID) != antiAFKProto.end();
}
Bu sorunu çözdü abi.
Şunı fark ettim user genie açıkken usere atak yapamıyor. Seçiyor fakat skill failed veriyor. Bunun sebebi nedir acaba?
 
Anasayfa Kayıt ol Giriş yap
Üst Alt