[C++] Oyuncu Tarafından Öldürülmediğin Sürece Bufflar Gitmesin

Ryuga

Onaylanmış Üye
Onaylanmış Üye
29 Mar 2020
24
25
Çevrimiçi zamanı
3h 43m
3
Best answers
0
C:
//service.h

#define ENABLE_NOT_BUFF_CLEAR

[CODE=C]
// char.h ->  Arat
void            ClearAffect(bool bSave=false);

//Altına ekle

#ifdef ENABLE_NOT_BUFF_CLEAR
        void            ClearAffect_New(bool bSave=false);
#endif

C:
//char_battle.cpp -> //Arat

    SetPosition(POS_DEAD);
    ClearAffect(true);

//Değiştir

    SetPosition(POS_DEAD);
#ifdef ENABLE_NOT_BUFF_CLEAR
    if (!pkKiller && IsPC())
        ClearAffect_New(true);
    else
        ClearAffect(true);
#endif

C:
// char_affect.cpp -> Arat

void CHARACTER::ClearAffect(bool bSave)

// Kod bloğunun altına ekle

#ifdef ENABLE_NOT_BUFF_CLEAR
void CHARACTER::ClearAffect_New(bool bSave)
{
    TAffectFlag afOld = m_afAffectFlag;
    WORD    wMovSpd = GetPoint(POINT_MOV_SPEED);
    WORD    wAttSpd = GetPoint(POINT_ATT_SPEED);

    itertype(m_list_pkAffect) it = m_list_pkAffect.begin();

    while (it != m_list_pkAffect.end())
    {
        CAffect * pkAff = *it;
        if (bSave)
        {

            int new_aff[] = {AFFECT_18385, AFFECT_18386, AFFECT_18387, AFFECT_18388, AFFECT_18389, AFFECT_18390, AFFECT_ATT_SPEED, AFFECT_MOV_SPEED};
          
            if ((pkAff->dwType == new_aff[0]) || (pkAff->dwType == new_aff[1]) || (pkAff->dwType == new_aff[2]) ||
                (pkAff->dwType == new_aff[3]) || (pkAff->dwType == new_aff[4]) || (pkAff->dwType == new_aff[5]) ||
                (pkAff->dwType == new_aff[6]) || 
                (pkAff->dwType == new_aff[7]))
            {
                ++it;
                continue;
            }


            if (IS_NO_CLEAR_ON_DEATH_AFFECT(pkAff->dwType) || IS_NO_SAVE_AFFECT(pkAff->dwType) )
            {
                ++it;
                continue;
            }

            if (IsPC())
            {
                SendAffectRemovePacket(GetDesc(), GetPlayerID(), pkAff->dwType, pkAff->bApplyOn);
            }
        }

        ComputeAffect(pkAff, false);

        it = m_list_pkAffect.erase(it);
        CAffect::Release(pkAff);
    }

    if (afOld != m_afAffectFlag ||
            wMovSpd != GetPoint(POINT_MOV_SPEED) ||
            wAttSpd != GetPoint(POINT_ATT_SPEED))
        UpdatePacket();

    CheckMaximumPoints();

    if (m_list_pkAffect.empty())
        event_cancel(&m_pkAffectEvent);
}
#endif
 
Üst