damage limitter c++ anti cheat

tobekarserseri

Yasaklanmış Üye
Cezalı
Mesaj
22
Beğeni
9
Puan
50
Ticaret Puanı
0
1. atakdan sonraki atağı limitliyor.
örneğin silahla vurdunuz 2. vuruş için geçen süre için limit koyuyor.

örneğin 5 saniye limit koydunuz 5 saniyede bir silahla damage atabilirisiniz.

milisaniye olduğu için ayarlamanız güzel olacaktır.
güncel ayarlı yorum oalrak paylaşabilirsiniz


şöyle bi güncelleme yaptım tüm silahları ekledim.


her silaha ayrı limit yapıcaksınız.

constant.cpp
Kod:
//martysama0134's 2022
#ifdef ENABLE_HIT_LIMITER
const WORD wHitLimiterBow = 2550;
const WORD wHitLimiterSWORD = 2450;
// const WORD wHitLimiterHANDED
const WORD wHitLimiterHANDED = 2450;
const WORD wHitLimiterDAGGER = 2450;
const WORD wHitLimiterBELL = 2450;
const WORD wHitLimiterFAN = 2450;
const WORD wHitLimiterCLAW = 2450;
// const WORD wHitLimiterSWORD = 2550;
const WORD wHitLimiterPoly = 2450;
const long lMaxDistanceDiff = 60;
const DWORD dwMinBlockedHitsToLog = 3500;

// race, min time (milisec) to next hit
std::map<BYTE, WORD> m_hit_limiter = {
                                            { MAIN_RACE_WARRIOR_M, 200 },
                                            { MAIN_RACE_ASSASSIN_M, 200 },
                                            { MAIN_RACE_SURA_M, 200 },
                                            { MAIN_RACE_SHAMAN_M, 200 },
                                            //
                                            { MAIN_RACE_WARRIOR_W, 200 },
                                            { MAIN_RACE_ASSASSIN_W, 200 },
                                            { MAIN_RACE_SURA_W, 200 },
                                            { MAIN_RACE_SHAMAN_W, 200 },
                                            #ifdef ENABLE_WOLFMAN_CHARACTER
                                            { MAIN_RACE_WOLFMAN_M, 200 },
                                            #endif
                                        };
#endif

constant.h
Kod:
//martysama0134's 2022
#ifdef ENABLE_HIT_LIMITER
extern std::map<BYTE, WORD> m_hit_limiter;
extern const WORD wHitLimiterPoly;
extern const WORD wHitLimiterBow;
extern const WORD wHitLimiterSWORD;
extern const WORD wHitLimiterHANDED;
extern const WORD wHitLimiterDAGGER;
extern const WORD wHitLimiterBELL;
extern const WORD wHitLimiterFAN;
extern const WORD wHitLimiterCLAW;
extern const long lMaxDistanceDiff;
extern const DWORD dwMinBlockedHitsToLog;
#endif

char_battle.cpp

Kod:
#ifdef ENABLE_HIT_LIMITER
void CHARACTER::SetLastTimeAttack(LPCHARACTER victim)
{
    if (!victim)
        return;

    DWORD dwVID = victim->GetVID();
    unsigned long long currentMillis = static_cast<unsigned long long>(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count());

    if (um_Enemy_VIDs.find(dwVID) == um_Enemy_VIDs.end())
        um_Enemy_VIDs.insert(std::make_pair(dwVID, currentMillis));
    else
        um_Enemy_VIDs[dwVID] = currentMillis;

    m_lLastAttackTime = currentMillis;
    SetLastPosAttack(GetXYZ());
}

unsigned long long CHARACTER::GetHitLimiterTimeLimit() const
{
    LPITEM pkBow = GetWear(WEAR_WEAPON);

    if (pkBow && pkBow->GetProto()->bSubType == WEAPON_BOW)
        return wHitLimiterBow;
 
    LPITEM pkWeapon = GetWear(WEAR_WEAPON);
 
    if (pkWeapon && pkWeapon->GetProto()->bSubType == WEAPON_SWORD)
        return wHitLimiterSWORD;
 
    if (pkWeapon && pkWeapon->GetProto()->bSubType == WEAPON_TWO_HANDED)
        return wHitLimiterHANDED;
 
    if (pkWeapon && pkWeapon->GetProto()->bSubType == WEAPON_DAGGER)
        return wHitLimiterDAGGER;
 
    if (pkWeapon && pkWeapon->GetProto()->bSubType == WEAPON_BELL)
        return wHitLimiterBELL;
 
    if (pkWeapon && pkWeapon->GetProto()->bSubType == WEAPON_FAN)
        return wHitLimiterFAN;
 
    if (pkWeapon && pkWeapon->GetProto()->bSubType == WEAPON_CLAW)
        return wHitLimiterCLAW;
 
 
    return IsPolymorphed() ? wHitLimiterPoly : m_hit_limiter[GetRaceNum()];
}

bool CHARACTER::CanAttackVID(DWORD dwVID)
{
    unsigned long long currentMillis = static_cast<unsigned long long>(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count());
    const unsigned long long lMaxTimeDiff = GetHitLimiterTimeLimit();
 
    if (um_Enemy_VIDs.find(dwVID) != um_Enemy_VIDs.end())
    {
        if (currentMillis - um_Enemy_VIDs[dwVID] < lMaxTimeDiff)
        {
            m_dwBlockedHits++;
            return false;
        }
    }
 
    PIXEL_POSITION pos = GetXYZ();
    const long distance = DISTANCE_APPROX(m_posLastAttack.x - pos.x, m_posLastAttack.y - pos.y);
    const unsigned long long lLastAttackLimitTime = lMaxTimeDiff == wHitLimiterBow ? wHitLimiterBow : 100 || wHitLimiterSWORD ? wHitLimiterSWORD : 100 || wHitLimiterHANDED ? wHitLimiterHANDED : 100 || wHitLimiterDAGGER ? wHitLimiterDAGGER : 100 || wHitLimiterBELL ? wHitLimiterBELL : 100 || wHitLimiterFAN ? wHitLimiterFAN : 100|| wHitLimiterCLAW ? wHitLimiterCLAW : 100;
 
    if ((distance > lMaxDistanceDiff) && (currentMillis - m_lLastAttackTime <= lLastAttackLimitTime))
    {
        m_dwBlockedHits++;
        return false;
    }
 
    return true;
}
#endif

Linkleri görebilmek için giriş yap veya kayıt ol.
 

Dosya Eklentileri

  • HitLimiter.zip
    6,6 KB · Gösterim: 20
Son düzenleme:
paylaşım için ve konuyu düzenlediğiniz için teşekkür ediyorum.
 
fix.png


How to solve this error?
 

Dosya Eklentileri

  • fix.png
    fix.png
    65,6 KB · Gösterim: 19
Geri
Üst