Yardım Anlık hp düşüşü

Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

Kuqsal

Üye
Üye
Mesaj
97
Çözümler
9
Beğeni
21
Puan
439
Ticaret Puanı
0
Sebebini anlayamadım fakat yardımcı olursanız sevinirim.



Eski hali oto hp yenileme:
bool CHARACTER::UpdateAffect()
{
    // affect_event 에서 처리할 일은 아니지만, 1초짜리 이벤트에서 처리하는 것이
    // 이것 뿐이라 여기서 물약 처리를 한다.
    if (GetPoint(POINT_HP_RECOVERY) > 0)
    {
        if (GetMaxHP() <= GetHP())
        {
            PointChange(POINT_HP_RECOVERY, -GetPoint(POINT_HP_RECOVERY));
        }
        else
        {
            int iVal = 0;

            if (LC_IsYMIR())
            {
                iVal = MIN(GetPoint(POINT_HP_RECOVERY), GetMaxHP() * 9 / 100);
            }
            else
            {
                iVal = MIN(GetPoint(POINT_HP_RECOVERY), GetMaxHP() * 7 / 100);
            }

            PointChange(POINT_HP, iVal);
            PointChange(POINT_HP_RECOVERY, -iVal);
        }
    }

    if (GetPoint(POINT_SP_RECOVERY) > 0)
    {
        if (GetMaxSP() <= GetSP())
            PointChange(POINT_SP_RECOVERY, -GetPoint(POINT_SP_RECOVERY));
        else
        {
            int iVal;

            if (!g_iUseLocale)
                iVal = MIN(GetPoint(POINT_SP_RECOVERY), GetMaxSP() * 7 / 100);
            else
                iVal = MIN(GetPoint(POINT_SP_RECOVERY), GetMaxSP() * 7 / 100);

            PointChange(POINT_SP, iVal);
            PointChange(POINT_SP_RECOVERY, -iVal);
        }
    }

    if (GetPoint(POINT_HP_RECOVER_CONTINUE) > 0)
    {
        PointChange(POINT_HP, GetPoint(POINT_HP_RECOVER_CONTINUE));
    }

    if (GetPoint(POINT_SP_RECOVER_CONTINUE) > 0)
    {
        PointChange(POINT_SP, GetPoint(POINT_SP_RECOVER_CONTINUE));
    }

    AutoRecoveryItemProcess( AFFECT_AUTO_HP_RECOVERY );
    AutoRecoveryItemProcess( AFFECT_AUTO_SP_RECOVERY );

Yeni hali oto hp yenileme:
bool CHARACTER::UpdateAffect()
{
    if (GetPoint(POINT_HP_RECOVERY) > 0)
    {
        if (GetMaxHP() <= GetHP())
        {
            PointChange(POINT_HP_RECOVERY, -GetPoint(POINT_HP_RECOVERY));
        }
        else
        {
            int iVal = MIN(GetPoint(POINT_HP_RECOVERY), GetMaxHP() * 7 / 100);
            PointChange(POINT_HP, iVal);
            PointChange(POINT_HP_RECOVERY, -iVal);
        }
    }

    if (GetPoint(POINT_SP_RECOVERY) > 0)
    {
        if (GetMaxSP() <= GetSP())
            PointChange(POINT_SP_RECOVERY, -GetPoint(POINT_SP_RECOVERY));
        else
        {
            int iVal = MIN(GetPoint(POINT_SP_RECOVERY), GetMaxSP() * 7 / 100);
            PointChange(POINT_SP, iVal);
            PointChange(POINT_SP_RECOVERY, -iVal);
        }
    }

    if (GetPoint(POINT_HP_RECOVER_CONTINUE) > 0)
        PointChange(POINT_HP, GetPoint(POINT_HP_RECOVER_CONTINUE));

    if (GetPoint(POINT_SP_RECOVER_CONTINUE) > 0)
        PointChange(POINT_SP, GetPoint(POINT_SP_RECOVER_CONTINUE));

    AutoRecoveryItemProcess( AFFECT_AUTO_HP_RECOVERY );
    AutoRecoveryItemProcess( AFFECT_AUTO_SP_RECOVERY );

Effect yükleme:
void CHARACTER::LoadAffect(DWORD dwCount, TPacketAffectElement * pElements)
{
    m_bIsLoadedAffect = false;

    if (!GetDesc()->IsPhase(PHASE_GAME))
    {
        if (test_server)
            sys_log(0, "LOAD_AFFECT: Creating Event", GetName(), dwCount);

        load_affect_login_event_info* info = AllocEventInfo<load_affect_login_event_info>();

        info->pid = GetPlayerID();
        info->count = dwCount;
        info->data = M2_NEW char[sizeof(TPacketAffectElement) * dwCount];
        thecore_memcpy(info->data, pElements, sizeof(TPacketAffectElement) * dwCount);

        event_create(load_affect_login_event, info, PASSES_PER_SEC(1));

        return;
    }

    ClearAffect(true);

    if (test_server)
        sys_log(0, "LOAD_AFFECT: %s count %d", GetName(), dwCount);

    TAffectFlag afOld = m_afAffectFlag;

    long lMovSpd = GetPoint(POINT_MOV_SPEED);
    long lAttSpd = GetPoint(POINT_ATT_SPEED);

    for (DWORD i = 0; i < dwCount; ++i, ++pElements)
    {
        // 무영진은 로드하지않는다.
        if (pElements->dwType == SKILL_MUYEONG)
            continue;

        if (AFFECT_AUTO_HP_RECOVERY == pElements->dwType || AFFECT_AUTO_SP_RECOVERY == pElements->dwType)
        {
            LPITEM item = FindItemByID( pElements->dwFlag );

            if (NULL == item)
                continue;

            item->Lock(true);
        }

        if (pElements->bApplyOn >= POINT_MAX_NUM)
        {
            sys_err("invalid affect data %s ApplyOn %u ApplyValue %d",
                    GetName(), pElements->bApplyOn, pElements->lApplyValue);
            continue;
        }

        if (test_server)
        {
            sys_log(0, "Load Affect : Affect %s %d %d", GetName(), pElements->dwType, pElements->bApplyOn );
        }

        CAffect* pkAff = CAffect::Acquire();
        m_list_pkAffect.push_back(pkAff);

        pkAff->dwType        = pElements->dwType;
        pkAff->bApplyOn        = pElements->bApplyOn;
        pkAff->lApplyValue    = pElements->lApplyValue;
        pkAff->dwFlag        = pElements->dwFlag;
        pkAff->lDuration    = pElements->lDuration;
        pkAff->lSPCost        = pElements->lSPCost;

        SendAffectAddPacket(GetDesc(), pkAff);

        ComputeAffect(pkAff, true);
    
    
    }

    if ( CArenaManager::instance().IsArenaMap(GetMapIndex()) == true )
    {
        RemoveGoodAffect();
    }
    
    if (afOld != m_afAffectFlag || lMovSpd != GetPoint(POINT_MOV_SPEED) || lAttSpd != GetPoint(POINT_ATT_SPEED))
    {
        UpdatePacket();
    }

    StartAffectEvent();

    m_bIsLoadedAffect = true;

    // 용혼석 셋팅 로드 및 초기화
    DragonSoul_Initialize();
#ifdef FIXME118
    // @fixme118 BEGIN (regain affect hp/mp)
    if (!IsDead())
    {
        PointChange(POINT_HP, GetMaxHP() - GetHP());
        PointChange(POINT_SP, GetMaxSP() - GetSP());
    }
    // @fixme118 END
#endif
}
Biraz oynama yaptım üzerinde FIXME118 kullandım fakat değişen sadece biraz tam olarak düzelmedi
 
Geri
Üst